commit 25a72c3c866ac3f99857af1621c9a4502bf799dc
Author: Alice Vital
Date: Tue Mar 8 20:25:51 2022 +0300
Initial commit
diff --git a/Apophysis.res b/Apophysis.res
new file mode 100644
index 0000000..1427fa0
Binary files /dev/null and b/Apophysis.res differ
diff --git a/ApophysisAV.dpr b/ApophysisAV.dpr
new file mode 100644
index 0000000..e7ff67f
--- /dev/null
+++ b/ApophysisAV.dpr
@@ -0,0 +1,238 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+program ApophysisAV;
+
+{$SetPEFlags $20}
+
+uses
+ Forms,
+ Dialogs,
+ SysUtils,
+ Vcl.Themes,
+ Vcl.Styles,
+ Binary in 'IO\Binary.pas',
+ Base64 in 'IO\Base64.pas',
+ sdStringTable in 'System\sdStringTable.pas',
+ CustomDrawControl in 'System\CustomDrawControl.pas',
+ LibXmlComps in 'System\LibXmlComps.pas',
+ LibXmlParser in 'System\LibXmlParser.pas',
+ RegexHelper in 'System\RegexHelper.pas',
+ CurvesControl in 'System\CurvesControl.pas',
+ {$ifndef Apo7X64}
+ AsmRandom in 'System\AsmRandom.pas',
+ {$endif }
+ Global in 'Core\Global.pas',
+ CommandLine in 'IO\CommandLine.pas',
+ MissingPlugin in 'IO\MissingPlugin.pas',
+ Settings in 'IO\Settings.pas',
+ Translation in 'Core\Translation.pas',
+ Chaotica in 'Core\Chaotica.pas',
+ Bezier in 'Core\Bezier.pas',
+ RndFlame in 'Flame\RndFlame.pas',
+ ControlPoint in 'Flame\ControlPoint.pas',
+ cmapdata in 'ColorMap\cmapdata.pas',
+ cmap in 'ColorMap\cmap.pas',
+ GradientHlpr in 'ColorMap\GradientHlpr.pas',
+ XFormMan in 'Core\XFormMan.pas',
+ XForm in 'Flame\XForm.pas',
+ BaseVariation in 'Core\BaseVariation.pas',
+ RenderingCommon in 'Rendering\RenderingCommon.pas',
+ RenderingInterface in 'Rendering\RenderingInterface.pas',
+ RenderingImplementation in 'Rendering\RenderingImplementation.pas',
+ BucketFillerThread in 'Rendering\BucketFillerThread.pas',
+ RenderThread in 'Rendering\RenderThread.pas',
+ ImageMaker in 'Rendering\ImageMaker.pas',
+ varSinusoidal in 'Variations\varSinusoidal.pas',
+ varLog in 'Variations\varLog.pas',
+ varModulus in 'Variations\varModulus.pas',
+ varSphyp3D in 'Variations\varSphyp3D.pas',
+ varInversion3D in 'Variations\varInversion3D.pas',
+ varRings2 in 'Variations\varRings2.pas',
+ varFan2 in 'Variations\varFan2.pas',
+ varWedge in 'Variations\varWedge.pas',
+ varEpispiral in 'Variations\varEpispiral.pas',
+ varBwraps in 'Variations\varBwraps.pas',
+ varPDJ in 'Variations\varPDJ.pas',
+ varJuliaN in 'Variations\varJuliaN.pas',
+ varJuliaScope in 'Variations\varJuliaScope.pas',
+ varJulia3Djf in 'Variations\varJulia3Djf.pas',
+ varJulia3Dz in 'Variations\varJulia3Dz.pas',
+ varJuliaN3Dx in 'Variations\varJuliaN3Dx.pas',
+ varJulian2DC in 'Variations\varJulian2DC.pas',
+ varCurl in 'Variations\varCurl.pas',
+ varCurl3D in 'Variations\varCurl3D.pas',
+ varRadialBlur in 'Variations\varRadialBlur.pas',
+ varSuperShape in 'Variations\varSuperShape.pas',
+ varNBlur in 'Variations\varNBlur.pas',
+ varBlurCircle in 'Variations\varBlurCircle.pas',
+ varBlurZoom in 'Variations\varBlurZoom.pas',
+ varBlurPixelize in 'Variations\varBlurPixelize.pas',
+ varFalloff2 in 'Variations\varFalloff2.pas',
+ varRectangles in 'Variations\varRectangles.pas',
+ varSplits in 'Variations\varSplits.pas',
+ varSeparation in 'Variations\varSeparation.pas',
+ varBipolar in 'Variations\varBipolar.pas',
+ varLoonie in 'Variations\varLoonie.pas',
+ varEscher in 'Variations\varEscher.pas',
+ varScry in 'Variations\varScry.pas',
+ varNGon in 'Variations\varNGon.pas',
+ varFoci in 'Variations\varFoci.pas',
+ varUnpolar in 'Variations\varUnpolar.pas',
+ varLazysusan in 'Variations\varLazysusan.pas',
+ varDCBubble in 'Variations\varDCBubble.pas',
+ varMobius in 'Variations\varMobius.pas',
+ varButterfly in 'Variations\varButterfly.pas',
+ varBoarders2 in 'Variations\varBoarders2.pas',
+ varAffine3D in 'Variations\varAffine3D.pas',
+ varHyperboloid in 'Variations\varHyperboloid.pas',
+ varCirclize in 'Variations\varCirclize.pas',
+ varCircleCrop in 'Variations\varCircleCrop.pas',
+ varCrop in 'Variations\varCrop.pas',
+ varTriangleCrop in 'Variations\varTriangleCrop.pas',
+ varSphereCrop in 'Variations\varSphereCrop.pas',
+ varElliptic in 'Variations\varElliptic.pas',
+ varWaves2 in 'Variations\varWaves2.pas',
+ varAuger in 'Variations\varAuger.pas',
+ varFlux in 'Variations\varFlux.pas',
+ varCpow3 in 'Variations\varCpow3.pas',
+ varGlynnSim1 in 'Variations\varGlynnSim1.pas',
+ varGlynnSim2 in 'Variations\varGlynnSim2.pas',
+ varGlynnSim3 in 'Variations\varGlynnSim3.pas',
+ varHypertile in 'Variations\varHypertile.pas',
+ varHypertile1 in 'Variations\varHypertile1.pas',
+ varHypertile2 in 'Variations\varHypertile2.pas',
+ varHypertile3D in 'Variations\varHypertile3D.pas',
+ varHypertile3D1 in 'Variations\varHypertile3D1.pas',
+ varHypertile3D2 in 'Variations\varHypertile3D2.pas',
+ varTaurus in 'Variations\varTaurus.pas',
+ varPreSpherical in 'Variations\varPreSpherical.pas',
+ varPreSinusoidal in 'Variations\varPreSinusoidal.pas',
+ varPreDisc in 'Variations\varPreDisc.pas',
+ varPreBoarders2 in 'Variations\varPreBoarders2.pas',
+ varPreBwraps in 'Variations\varPreBwraps.pas',
+ varPreCircleCrop in 'Variations\varPreCircleCrop.pas',
+ varPreCrop in 'Variations\varPreCrop.pas',
+ varPreFalloff2 in 'Variations\varPreFalloff2.pas',
+ varPostBoarders2 in 'Variations\varPostBoarders2.pas',
+ varPostBwraps in 'Variations\varPostBwraps.pas',
+ varPostCurl in 'Variations\varPostCurl.pas',
+ varPostCurl3D in 'Variations\varPostCurl3D.pas',
+ varPostCircleCrop in 'Variations\varPostCircleCrop.pas',
+ varPostCrop in 'Variations\varPostCrop.pas',
+ varPostFalloff2 in 'Variations\varPostFalloff2.pas',
+ varPostSpherical in 'Variations\varPostSpherical.pas',
+ varPostSinusoidal in 'Variations\varPostSinusoidal.pas',
+ varProjective in 'Variations\varProjective.pas',
+ varHandkerchief in 'Variations\varHandkerchief.pas',
+ varJulia in 'Variations\varJulia.pas',
+ varEx in 'Variations\varEx.pas',
+ varExponential in 'Variations\varExponential.pas',
+ varBlob in 'Variations\varBlob.pas',
+ varHeart in 'Variations\varHeart.pas',
+ varPower in 'Variations\varPower.pas',
+ varTwinTrian in 'Variations\varTwinTrian.pas',
+ varBlade in 'Variations\varBlade.pas',
+ varTangent in 'Variations\varTangent.pas',
+ varCosine in 'Variations\varCosine.pas',
+ varBent2 in 'Variations\varBent2.pas',
+ varPopcorn2 in 'Variations\varPopcorn2.pas',
+ varDisc2 in 'Variations\varDisc2.pas',
+ varSecant in 'Variations\varSecant.pas',
+ varZVortex in 'Variations\varZVortex.pas',
+ varArch in 'Variations\varArch.pas',
+ varTanhSpiral in 'Variations\varTanhSpiral.pas',
+ varCothSpiral in 'Variations\varCothSpiral.pas',
+ varGenericPlugin in 'Variations\varGenericPlugin.pas',
+ Main in 'Forms\Main.pas' {MainForm},
+ Tracer in 'Forms\Tracer.pas' {TraceForm},
+ About in 'Forms\About.pas' {AboutForm},
+ Adjust in 'Forms\Adjust.pas' {AdjustForm},
+ Browser in 'Forms\Browser.pas' {GradientBrowser},
+ Editor in 'Forms\Editor.pas' {EditForm},
+ FormExport in 'Forms\FormExport.pas' {ExportDialog},
+ formPostProcess in 'Forms\formPostProcess.pas' {frmPostProcess},
+ FormRender in 'Forms\FormRender.pas' {RenderForm},
+ Fullscreen in 'Forms\Fullscreen.pas' {FullscreenForm},
+ LoadTracker in 'Forms\LoadTracker.pas' {LoadForm},
+ Mutate in 'Forms\Mutate.pas' {MutateForm},
+ Options in 'Forms\Options.pas' {OptionsForm},
+ Save in 'Forms\Save.pas' {SaveForm},
+ SavePreset in 'Forms\SavePreset.pas' {SavePresetForm},
+ SplashForm in 'Forms\SplashForm.pas' {SplashWindow},
+ Template in 'Forms\Template.pas' {TemplateForm},
+ Curves in 'Forms\Curves.pas' {CurvesForm},
+ Preview in 'Forms\Preview.pas' {PreviewForm},
+ FormFavorites in 'Forms\FormFavorites.pas' {FavoritesForm},
+ ScriptForm in 'Forms\ScriptForm.pas' {ScriptEditor},
+ ScriptRender in 'Forms\ScriptRender.pas' {ScriptRenderForm},
+ ColorRangeForm in 'Forms\ColorRangeForm.pas' {ColorSelection},
+ Chaos in 'Forms\Chaos.pas' {ChaosForm},
+ VarOrderForm in 'Forms\VarOrderForm.pas' {VarOrder};
+
+{$R *.res}
+ {$R Apophysis.res}
+begin
+
+ ReportMemoryLeaksOnShutdown := true;
+
+ InitializePlugins;
+
+ SplashWindow := TSplashWindow.Create(Application);
+ SplashWindow.Show;
+
+ Application.Initialize;
+ SplashWindow.Update;
+
+ {$ifdef Apo7X64}
+ Application.Title := 'Apophysis AV (64 bit)';
+ {$else}
+ Application.Title := 'Apophysis AV (32 bit)';
+ {$endif}
+ Application.HelpFile := 'ApophysisAV.chm';
+ Application.CreateForm(TMainForm, MainForm);
+ Application.CreateForm(TTraceForm, TraceForm);
+ Application.CreateForm(TAboutForm, AboutForm);
+ Application.CreateForm(TAdjustForm, AdjustForm);
+ Application.CreateForm(TGradientBrowser, GradientBrowser);
+ Application.CreateForm(TEditForm, EditForm);
+ Application.CreateForm(TfrmPostProcess, frmPostProcess);
+ Application.CreateForm(TRenderForm, RenderForm);
+ Application.CreateForm(TFullscreenForm, FullscreenForm);
+ Application.CreateForm(TLoadForm, LoadForm);
+ Application.CreateForm(TMutateForm, MutateForm);
+ Application.CreateForm(TOptionsForm, OptionsForm);
+ Application.CreateForm(TSaveForm, SaveForm);
+ Application.CreateForm(TSavePresetForm, SavePresetForm);
+ Application.CreateForm(TTemplateForm, TemplateForm);
+ Application.CreateForm(TCurvesForm, CurvesForm);
+ Application.CreateForm(TPreviewForm, PreviewForm);
+ Application.CreateForm(TFavoritesForm, FavoritesForm);
+ Application.CreateForm(TScriptEditor, ScriptEditor);
+ Application.CreateForm(TScriptRenderForm, ScriptRenderForm);
+ Application.CreateForm(TColorSelection, ColorSelection);
+ Application.CreateForm(TChaosForm, ChaosForm);
+ Application.CreateForm(TVarOrder, VarOrder);
+ Application.UpdateFormatSettings := False;
+ FormatSettings.DecimalSeparator := '.';
+ Application.Run;
+end.
+
+
diff --git a/ApophysisAV.dproj b/ApophysisAV.dproj
new file mode 100644
index 0000000..8d94345
--- /dev/null
+++ b/ApophysisAV.dproj
@@ -0,0 +1,1277 @@
+
+
+ {AC01F3AB-4101-4C09-A648-1CC8E2C412D5}
+ ApophysisAV.dpr
+ True
+ Release
+ 3
+ Application
+ VCL
+ 18.8
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ CompanyName=;FileDescription=IFS Fractal Generator;FileVersion=1.0.1.0;InternalName=Apophysis;LegalCopyright=Alice Koryagina;LegalTrademarks=;OriginalFilename=Apophysis Phoenix Edition;ProductName=Apophysis Phoenix Edition;ProductVersion=1.0.1.0
+ $(BDS)\bin\default_app.manifest
+ ApophysisAV_Icon2.ico
+ false
+ false
+ vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;vcldbx;dsnap;cds;bdecds;teeui;teedb;tee;dss;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;soaprtl;dbexpress;dbxcds;dclOffice2k;FlatStyle_D6;S303_R60;RzLPDB60;RzLPND60;vclshlctrls;B302vr60;VirtualTreesD6;o403_r60;ibxpress;CSP20I60;Rz30Ctls60;Rz30DBCtls60;indy;Indy60;vclactnband;$(DCC_UsePackage)
+ 00400000
+ false
+ false
+ false
+ Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)
+ false
+ ..\..\out
+ $(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;$(DELPHI)\Lib\Debug;$(DCC_UnitSearchPath)
+ false
+ true
+ false
+ false
+ false
+ false
+ ..\..\out\dcu
+ false
+ false
+ 1033
+ false
+ ApophysisAV
+ true
+ "Cyan Night|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanNight.vsf";"Ruby Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\RubyGraphite.vsf"
+ 1
+
+
+ ..\..\Out\x86\
+ ..\..\Out\x86\dcu\
+ Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ CompanyName=;FileDescription=IFS Fractal Editor;FileVersion=1.0.1.0;InternalName=Apophysis;LegalCopyright=Alice Koryagina;LegalTrademarks=;OriginalFilename=Apophysis AV "Phoenix Edition";ProductName=Apophysis Phoenix Edition;ProductVersion=1.0.1.0
+ ApophysisAV_Icon.ico
+
+
+ ..\..\Out\x64\
+ ..\..\Out\x64\dcu\
+ Apo7X64;$(DCC_Define)
+ Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ CompanyName=;FileDescription=IFS Fractal Editor;FileVersion=1.0.1.0;InternalName=Apophysis;LegalCopyright=Alice Koryagina;LegalTrademarks=;OriginalFilename=Apophysis AV "Phoenix Edition";ProductName=Apophysis Phoenix Edition;ProductVersion=1.0.1.0
+ ApophysisAV_Icon.ico
+
+
+ false
+ 0
+ 0
+ RELEASE;$(DCC_Define)
+
+
+ CompanyName=Alice V., Apophysis Developers;FileDescription=RIFS Fractal Editor;FileVersion=1.0.1.0;InternalName=Apophysis;LegalCopyright=© 2021 Alice V. Koryagina;LegalTrademarks=;OriginalFilename=ApophysisAV.exe;ProductName=Apophysis AV "Phoenix Edition";ProductVersion=1.0.1.0
+ true
+ Debug
+ ApophysisAV_Icon.ico
+
+
+ true
+ CompanyName=Alice V., Apophysis Developers;FileDescription=RIFS Fractal Editor;FileVersion=1.0.1.0;InternalName=Apophysis;LegalCopyright=© 2021 Alice V. Koryagina;LegalTrademarks=;OriginalFilename=ApophysisAV_64.exe;ProductName=Apophysis AV "Phoenix Edition";ProductVersion=1.0.1.0
+ Debug
+ ApophysisAV_Icon.ico
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+ CompanyName=;FileDescription=IFS Fractal Editor;FileVersion=1.0.1.0;InternalName=ApophysisAV;LegalCopyright=Alice Koryagina;LegalTrademarks=;OriginalFilename=Apophysis AV "Phoenix Edition";ProductName=Apophysis Phoenix Edition;ProductVersion=1.0.1.0
+
+
+ true
+ true
+ Debug
+ CompanyName=Apophysis Developers Team;FileDescription=RIFS Fractal Editor;FileVersion=1.0.1.0;InternalName=Apophysis;LegalCopyright=© 2021 Alice V. Koryagina;LegalTrademarks=;OriginalFilename=ApophysisAV.exe;ProductName=Apophysis AV "Phoenix Edition";ProductVersion=1.0.1.0
+ ApophysisAV_Icon1.ico
+
+
+ true
+ false
+ true
+ true
+ Debug
+ CompanyName=Apophysis Developers Team;FileDescription=RIFS Fractal Editor;FileVersion=1.0.1.0;InternalName=Apophysis;LegalCopyright=© 2021 Alice V. Koryagina;LegalTrademarks=;OriginalFilename=ApophysisAV64.exe;ProductName=Apophysis AV "Phoenix Edition";ProductVersion=1.0.1.0
+ ApophysisAV_Icon.ico
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ ApophysisAV.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1031
+ 1252
+
+
+
+ IFS Fractal Generator
+ 1.0.0.0
+ Apophysis
+ Alice Koryagina
+
+ ApophysisAV
+ Apophysis AV Phoenix Edition
+ 1.0.0.0
+
+
+
+
+ True
+ True
+
+ False
+
+
+
+ .\
+ true
+
+
+
+
+ ApophysisAV.exe
+ true
+
+
+
+
+ ApophysisAV.exe
+ true
+
+
+
+
+ .\
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/ApophysisAV.res b/ApophysisAV.res
new file mode 100644
index 0000000..b396713
Binary files /dev/null and b/ApophysisAV.res differ
diff --git a/ApophysisAV_Icon.ico b/ApophysisAV_Icon.ico
new file mode 100644
index 0000000..60c1248
Binary files /dev/null and b/ApophysisAV_Icon.ico differ
diff --git a/ColorMap/GradientHlpr.pas b/ColorMap/GradientHlpr.pas
new file mode 100644
index 0000000..d26d290
--- /dev/null
+++ b/ColorMap/GradientHlpr.pas
@@ -0,0 +1,190 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit GradientHlpr;
+
+interface
+
+uses
+ windows, Graphics, Cmap;
+
+const
+ PixelCountMax = 32768;
+
+type
+ pRGBTripleArray = ^TRGBTripleArray;
+ TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple;
+
+type
+ TGradientHelper = class
+ private
+ procedure RGBBlend(a, b: integer; var Palette: TColorMap);
+ public
+ function GetGradientBitmap(Index: integer; const hue_rotation: double): TBitmap;
+ function RandomGradient: TColorMap;
+ end;
+
+var
+ GradientHelper: TGradientHelper;
+
+implementation
+
+uses
+ Global;
+
+{ TGradientHelper }
+
+function TGradientHelper.GetGradientBitmap(Index: integer; const hue_rotation: double): TBitmap;
+var
+ BitMap: TBitMap;
+ i, j: integer;
+ Row: pRGBTripleArray;
+ pal: TColorMap;
+begin
+ GetCMap(index, hue_rotation, pal);
+
+ BitMap := TBitMap.create;
+ Bitmap.PixelFormat := pf24bit;
+ BitMap.Width := 256;
+ BitMap.Height := 2;
+
+ for j := 0 to Bitmap.Height - 1 do begin
+ Row := Bitmap.Scanline[j];
+ for i := 0 to Bitmap.Width - 1 do begin
+ Row[i].rgbtRed := Pal[i][0];
+ Row[i].rgbtGreen := Pal[i][1];
+ Row[i].rgbtBlue := Pal[i][2];
+ end
+ end;
+
+ Result := BitMap;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TGradientHelper.RandomGradient: TColorMap;
+var
+ a, b, i, n, nodes: integer;
+ c: byte;
+ rgb: array[0..2] of double;
+ hsv: array[0..2] of double;
+ pal: TColorMap;
+begin
+ rgb[0] := 0;
+ rgb[1] := 0;
+ rgb[2] := 0;
+
+ inc(MainSeed);
+ RandSeed := Mainseed;
+ nodes := random((MaxNodes - 1) - (MinNodes - 2)) + (MinNodes - 1);
+ n := 256 div nodes;
+ b := 0;
+ hsv[0] := 0.01 * (random(MaxHue - (MinHue - 1)) + MinHue);
+ hsv[1] := 0.01 * (random(MaxSat - (MinSat - 1)) + MinSat);
+ hsv[2] := 0.01 * (random(MaxLum - (MinLum - 1)) + MinLum);
+ hsv2rgb(hsv, rgb);
+ Pal[0][0] := Round(rgb[0] * 255);
+ Pal[0][1] := Round(rgb[1] * 255);
+ Pal[0][2] := Round(rgb[2] * 255);
+ c := 0;
+ repeat
+ a := b;
+ if EqualStripes then
+ b := b + n
+ else begin
+ inc(c);
+ if c = nodes then
+ b := 255
+ else begin
+ i := Random(256 - b);
+ b := b + i;
+ end;
+ end;
+ hsv[0] := 0.01 * (random(MaxHue - (MinHue - 1)) + MinHue);
+ hsv[1] := 0.01 * (random(MaxSat - (MinSat - 1)) + MinSat);
+ hsv[2] := 0.01 * (random(MaxLum - (MinLum - 1)) + MinLum);
+ hsv2rgb(hsv, rgb);
+ if b > 255 then b := 255;
+ Pal[b][0] := Round(rgb[0] * 255);
+ Pal[b][1] := Round(rgb[1] * 255);
+ Pal[b][2] := Round(rgb[2] * 255);
+ case randColorBlend of
+ 0: RGBBlend(a, b, pal);
+ 1: HSVBlend(a, b, pal);
+ else
+ for i := a + 1 to b - 1 do
+ begin
+ Pal[i][0] := Round(rgb[0] * 255);
+ Pal[i][1] := Round(rgb[1] * 255);
+ Pal[i][2] := Round(rgb[2] * 255);
+ end;
+ end;
+ until b = 255;
+ Result := Pal;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TGradientHelper.RGBBlend(a, b: integer; var Palette: TColorMap);
+{ Linear blend between to indices of a palette }
+var
+ c, v: real;
+ vrange, range: real;
+ i: integer;
+begin
+ if a = b then
+ begin
+ Exit;
+ end;
+ range := b - a;
+ vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
+ c := Palette[a mod 256][0];
+ v := vrange / range;
+ for i := (a + 1) to (b - 1) do
+ begin
+ c := c + v;
+ Palette[i mod 256][0] := Round(c);
+ end;
+ vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
+ c := Palette[a mod 256][1];
+ v := vrange / range;
+ for i := a + 1 to b - 1 do
+ begin
+ c := c + v;
+ Palette[i mod 256][1] := Round(c);
+ end;
+ vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
+ c := Palette[a mod 256][2];
+ v := vrange / range;
+ for i := a + 1 to b - 1 do
+ begin
+ c := c + v;
+ Palette[i mod 256][2] := Round(c);
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ GradientHelper := TGradientHelper.create;
+finalization
+ GradientHelper.Free;
+end.
diff --git a/ColorMap/cmap.pas b/ColorMap/cmap.pas
new file mode 100644
index 0000000..fd07fbc
--- /dev/null
+++ b/ColorMap/cmap.pas
@@ -0,0 +1,426 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit Cmap;
+
+interface
+
+uses sysutils, classes;
+
+type
+ TColorMap = array[0..255, 0..3] of integer;
+
+type
+ EFormatInvalid = class(Exception);
+
+const
+ RANDOMCMAP = -1;
+ NRCMAPS = 704;
+
+procedure GetCmap(var Index: integer; const hue_rotation: double; out cmap: TColorMap);
+procedure GetCmapName(var Index: integer; out Name: string);
+procedure rgb2hsv(const rgb: array of double; out hsv: array of double);
+procedure hsv2rgb(const hsv: array of double; out rgb: array of double);
+function GetGradient(FileName, Entry: string): string;
+function GetPalette(strng: string; var Palette: TColorMap): boolean;
+procedure GetTokens(s: string; var mlist: TStringList);
+procedure HSVBlend(a, b: integer; var Palette: TColorMap); // AV
+procedure RGBBlend(a, b: integer; var Palette: TColorMap);
+procedure Brighten(const n: byte; var r, g, b: byte); // AV
+
+implementation
+
+uses
+ cmapdata, Math;
+
+procedure rgb2hsv(const rgb: array of double; out hsv: array of double);
+var
+ maxval, minval: double;
+ del: double;
+begin
+ Maxval := Max(rgb[0], Max(rgb[1], rgb[2]));
+ Minval := Min(rgb[0], Min(rgb[1], rgb[2]));
+
+ hsv[2] := maxval; // v
+
+ if (Maxval > 0) and (maxval <> minval) then begin
+ del := maxval - minval;
+ hsv[1] := del / Maxval; //s
+
+ hsv[0] := 0;
+ if (rgb[0] > rgb[1]) and (rgb[0] > rgb[2]) then begin
+ hsv[0] := (rgb[1] - rgb[2]) / del;
+ end else if (rgb[1] > rgb[2]) then begin
+ hsv[0] := 2 + (rgb[2] - rgb[0]) / del;
+ end else begin
+ hsv[0] := 4 + (rgb[0] - rgb[1]) / del;
+ end;
+
+ if hsv[0] < 0 then
+ hsv[0] := hsv[0] + 6;
+
+ end else begin
+ hsv[0] := 0;
+ hsv[1] := 0;
+ end;
+end;
+
+procedure hsv2rgb(const hsv: array of double; out rgb: array of double);
+var
+ j: integer;
+ f, p, q, t, v: double;
+begin
+ try
+// rgb[0] := 0;
+// rgb[1] := 0;
+// rgb[2] := 0;
+
+ j := floor(hsv[0]);
+
+ f := hsv[0] - j;
+ v := hsv[2];
+ p := hsv[2] * (1 - hsv[1]);
+ q := hsv[2] * (1 - hsv[1] * f);
+ t := hsv[2] * (1 - hsv[1] * (1 - f));
+ case j of
+ 0: begin rgb[0] := v; rgb[1] := t; rgb[2] := p; end;
+ 1: begin rgb[0] := q; rgb[1] := v; rgb[2] := p; end;
+ 2: begin rgb[0] := p; rgb[1] := v; rgb[2] := t; end;
+ 3: begin rgb[0] := p; rgb[1] := q; rgb[2] := v; end;
+ 4: begin rgb[0] := t; rgb[1] := p; rgb[2] := v; end;
+ 5: begin rgb[0] := v; rgb[1] := p; rgb[2] := q; end;
+ end;
+ except on EMathError do
+ end;
+end;
+
+procedure GetCmap(var Index: integer; const hue_rotation: double; out cmap: TColorMap);
+var
+ i: Integer;
+ rgb: array[0..2] of double;
+ hsv: array[0..2] of double;
+begin
+ if Index = RANDOMCMAP then
+ Index := Random(NRCMAPS);
+
+ if (Index < 0) or (Index >= NRCMAPS) then
+ Index := 0;
+
+ for i := 0 to 255 do begin
+ rgb[0] := cmaps[Index][i][0] / 255.0;
+ rgb[1] := cmaps[Index][i][1] / 255.0;
+ rgb[2] := cmaps[Index][i][2] / 255.0;
+
+ rgb2hsv(rgb, hsv);
+ hsv[0] := hsv[0] + hue_rotation * 6;
+ hsv2rgb(hsv, rgb);
+
+ cmap[i][0] := Round(rgb[0] * 255);
+ cmap[i][1] := Round(rgb[1] * 255);
+ cmap[i][2] := Round(rgb[2] * 255);
+ end;
+end;
+
+procedure GetCmapName(var Index: integer; out Name: string);
+begin
+ if Index = RANDOMCMAP then
+ Index := Random(NRCMAPS);
+
+ if (Index < 0) or (Index >= NRCMAPS) then
+ Index := 0;
+
+ Name := CMapNames[Index];
+end;
+
+
+procedure RGBBlend(a, b: integer; var Palette: TColorMap);
+{ Linear blend between to indices of a palette }
+var
+ c, v: real;
+ vrange, range: real;
+ i: integer;
+begin
+ if a = b then
+ begin
+ Exit;
+ end;
+ range := b - a;
+ vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
+ c := Palette[a mod 256][0];
+ v := vrange / range;
+ for i := (a + 1) to (b - 1) do
+ begin
+ c := c + v;
+ Palette[i mod 256][0] := Round(c);
+ end;
+ vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
+ c := Palette[a mod 256][1];
+ v := vrange / range;
+ for i := a + 1 to b - 1 do
+ begin
+ c := c + v;
+ Palette[i mod 256][1] := Round(c);
+ end;
+ vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
+ c := Palette[a mod 256][2];
+ v := vrange / range;
+ for i := a + 1 to b - 1 do
+ begin
+ c := c + v;
+ Palette[i mod 256][2] := Round(c);
+ end;
+end;
+
+procedure HSVBlend(a, b: integer; var Palette: TColorMap);
+{ AV: Linear HSV interpolation}
+var i, range: integer;
+ rgb, hsv, rgb1, hsv1, rgb2, hsv2: array [0..2] of double;
+
+ function lerp(range, b, i: integer; p1, p2: double): double;
+ var k: double;
+ begin
+ k := (b - i)/range;
+ Result := k * p1 + (1 - k) * p2;
+ end;
+begin
+ if a = b then Exit;
+ range := b - a;
+ for i := 0 to 2 do begin
+ rgb1[i] := double(Palette[a][i]);
+ rgb2[i] := double(Palette[b][i]);
+ end;
+ rgb2hsv(rgb1, hsv1);
+ rgb2hsv(rgb2, hsv2);
+ for i := (a + 1) to (b - 1) do
+ begin
+ hsv[0] := lerp(range, b, i, hsv1[0], hsv2[0]);
+ hsv[1] := lerp(range, b, i, hsv1[1], hsv2[1]);
+ hsv[2] := lerp(range, b, i, hsv1[2], hsv2[2]);
+ hsv2rgb(hsv, rgb);
+ Palette[i][0] := Round(rgb[0]);
+ Palette[i][1] := Round(rgb[1]);
+ Palette[i][2] := Round(rgb[2]);
+ end;
+end;
+
+procedure Brighten(const n: byte; var r, g, b: byte);
+var rgb, hsv: array [0..2] of double;
+begin
+ rgb[0] := double(r);
+ rgb[1] := double(g);
+ rgb[2] := double(b);
+ rgb2hsv(rgb, hsv);
+ hsv[2] := hsv[2] + n;
+ // if (hsv[2] < 0) then hsv[2] := 0
+ // else if (hsv[2] > 255) then hsv[2] := 255;
+ hsv2rgb(hsv, rgb);
+ r := Round(rgb[0]);
+ g := Round(rgb[1]);
+ b := Round(rgb[2]);
+end;
+
+function GetVal(token: string): string;
+var
+ p: integer;
+begin
+ p := Pos('=', token);
+ Delete(Token, 1, p);
+ Result := Token;
+end;
+
+function ReplaceTabs(str: string): string;
+{Changes tab characters in a string to spaces}
+var
+ i: integer;
+begin
+ for i := 1 to Length(str) do
+ begin
+ if str[i] = #9 then
+ begin
+ Delete(str, i, 1);
+ Insert(#32, str, i);
+ end;
+ end;
+ Result := str;
+end;
+
+procedure GetTokens(s: string; var mlist: TStringList);
+var
+ test, token: string;
+begin
+ mlist.clear;
+ test := s;
+ while (Length(Test) > 0) do
+ begin
+ while (Length(Test) > 0) and CharInSet(test[1],[#32]) do
+ Delete(test, 1, 1);
+ if (Length(Test) = 0) then
+ exit;
+ token := '';
+ while (Length(Test) > 0) and (not CharInSet(test[1],[#32])) do
+ begin
+ token := token + test[1];
+ Delete(test, 1, 1);
+ end;
+ mlist.add(token);
+ end;
+end;
+
+
+function GetPalette(strng: string; var Palette: TColorMap): boolean;
+{ Loads a palette from a gradient string }
+var
+ Strings: TStringList;
+ index, i: integer;
+ Tokens: TStringList;
+ Indices, Colors: TStringList;
+ a, b: integer;
+begin
+ GetPalette := True;
+ Strings := TStringList.Create;
+ Tokens := TStringList.Create;
+ Indices := TStringList.Create;
+ Colors := TStringList.Create;
+ try
+ try
+ Strings.Text := strng;
+ if Pos('}', Strings.Text) = 0 then raise EFormatInvalid.Create('No closing brace');
+ if Pos('{', Strings[0]) = 0 then raise EFormatInvalid.Create('No opening brace.');
+ GetTokens(ReplaceTabs(Strings.Text), Tokens);
+ i := 0;
+ while (Pos('}', Tokens[i]) = 0) and (Pos('opacity:', Lowercase(Tokens[i])) = 0) do
+ begin
+ if Pos('index=', LowerCase(Tokens[i])) <> 0 then
+ Indices.Add(GetVal(Tokens[i]))
+ else if Pos('color=', LowerCase(Tokens[i])) <> 0 then
+ Colors.Add(GetVal(Tokens[i]));
+ inc(i)
+ end;
+ for i := 0 to 255 do
+ begin
+ Palette[i][0] := 0;
+ Palette[i][1] := 0;
+ Palette[i][2] := 0;
+ end;
+ if Indices.Count = 0 then raise EFormatInvalid.Create('No color info');
+ for i := 0 to Indices.Count - 1 do
+ begin
+ try
+ index := StrToInt(Indices[i]);
+ while index < 0 do inc(index, 400);
+ index := Round(Index * (255 / 399));
+ indices[i] := IntToStr(index);
+ assert(index>=0);
+ assert(index<256);
+ Palette[index][0] := StrToInt(Colors[i]) mod 256;
+ Palette[index][1] := trunc(StrToInt(Colors[i]) / 256) mod 256;
+ Palette[index][2] := trunc(StrToInt(Colors[i]) / 65536);
+ except
+ end;
+ end;
+ i := 1;
+ repeat
+ a := StrToInt(Indices[i - 1]);
+ b := StrToInt(Indices[i]);
+ RGBBlend(a, b, Palette);
+ inc(i);
+ until i = Indices.Count;
+ if (Indices[0] <> '0') or (Indices[Indices.Count - 1] <> '255') then
+ begin
+ a := StrToInt(Indices[Indices.Count - 1]);
+ b := StrToInt(Indices[0]) + 256;
+ RGBBlend(a, b, Palette);
+ end;
+ except on EFormatInvalid do
+ begin
+ Result := False;
+ end;
+ end;
+ finally
+ Tokens.Free;
+ Strings.Free;
+ Indices.Free;
+ Colors.Free;
+ end;
+end;
+
+function GetGradient(FileName, Entry: string): string;
+var
+ FileStrings: TStringList;
+ GradStrings: TStringList;
+ i: integer;
+begin
+ FileStrings := TStringList.Create;
+ GradStrings := TStringList.Create;
+ try
+ try
+ FileStrings.LoadFromFile(FileName);
+ for i := 0 to FileStrings.count - 1 do
+ if Pos(Entry + ' ', Trim(FileStrings[i])) = 1 then break;
+ GradStrings.Add(FileStrings[i]);
+ repeat
+ inc(i);
+ GradStrings.Add(FileStrings[i]);
+ until Pos('}', FileStrings[i]) <> 0;
+ GetGradient := GradStrings.Text;
+ except on exception do
+ Result := '';
+ end;
+ finally
+ GradStrings.Free;
+ FileStrings.Free;
+ end;
+end;
+
+function LoadGradient(FileName, Entry: string; var gString: string; var Pal: TColorMap): boolean;
+var
+ FileStrings: TStringList;
+ GradStrings: TStringList;
+ i: integer;
+begin
+ FileStrings := TStringList.Create;
+ GradStrings := TStringList.Create;
+ try
+ try
+ FileStrings.LoadFromFile(FileName);
+ for i := 0 to FileStrings.count - 1 do
+ if Pos(Entry + ' ', Trim(FileStrings[i])) = 1 then break;
+ GradStrings.Add(FileStrings[i]);
+ repeat
+ inc(i);
+ GradStrings.Add(FileStrings[i]);
+ until Pos('}', FileStrings[i]) <> 0;
+ gString := GradStrings.Text;
+ Result := GetPalette(GradStrings.Text, Pal);
+ except on exception do
+ Result := False;
+ end;
+ finally
+ GradStrings.Free;
+ FileStrings.Free;
+ end;
+end;
+
+
+end.
+
diff --git a/ColorMap/cmapdata.pas b/ColorMap/cmapdata.pas
new file mode 100644
index 0000000..ba368e7
--- /dev/null
+++ b/ColorMap/cmapdata.pas
@@ -0,0 +1,47946 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit cmapdata;
+
+// updated on 2004-12-10 by Ralf Lehmann to match Flam3's color maps from:
+// "@(#) $Id: cmapdata.pas,v 1.2 2005/09/08 16:52:12 zueuk Exp $"
+// Last Hack: Alice V. Koryagina, fixme!
+
+interface
+
+Const
+ NMAPS = 703;
+ cmaps : array[0..NMAPS,0..255,0..2] of byte =
+(
+// 0 south-sea-bather
+((185, 234, 235), (193, 238, 235), (197, 242, 235), (201, 242, 235),
+ (201, 246, 235), (205, 246, 235), (205, 246, 235), (205, 242, 235),
+ (209, 242, 235), (210, 238, 235), (209, 242, 225), (214, 242, 235),
+ (221, 246, 254), (213, 242, 244), (242, 250, 244), (226, 242, 235),
+ (222, 242, 235), (214, 242, 235), (214, 242, 244), (209, 238, 244),
+ (209, 238, 244), (205, 238, 244), (205, 238, 235), (201, 238, 235),
+ (201, 238, 235), (201, 238, 244), (201, 238, 244), (201, 242, 244),
+ (205, 242, 244), (209, 242, 244), (210, 242, 244), (209, 246, 244),
+ (205, 242, 244), (197, 242, 244), (189, 242, 244), (189, 242, 244),
+ (185, 238, 244), (181, 242, 244), (189, 242, 244), (193, 242, 244),
+ (197, 242, 254), (197, 242, 254), (189, 242, 244), (181, 242, 244),
+ (177, 242, 244), (181, 238, 244), (189, 234, 235), (189, 234, 235),
+ (193, 230, 235), (193, 230, 235), (189, 230, 225), (181, 230, 225),
+ (165, 230, 225), (165, 226, 225), (161, 226, 235), (157, 230, 234),
+ (153, 222, 244), (165, 226, 244), (165, 230, 244), (165, 230, 244),
+ (169, 226, 244), (173, 226, 235), (177, 226, 235), (177, 222, 235),
+ (177, 226, 235), (177, 230, 244), (177, 226, 244), (177, 226, 244),
+ (177, 226, 244), (173, 226, 244), (169, 226, 244), (161, 230, 254),
+ (157, 230, 254), (165, 234, 244), (173, 234, 244), (177, 238, 234),
+ (185, 238, 235), (193, 238, 235), (197, 238, 235), (197, 238, 235),
+ (201, 238, 235), (201, 242, 244), (197, 242, 244), (197, 238, 244),
+ (197, 234, 244), (197, 234, 244), (197, 234, 244), (193, 230, 235),
+ (193, 230, 235), (197, 234, 225), (197, 230, 226), (194, 226, 207),
+ (206, 155, 132), (178, 127, 113), (166, 132, 85), (145, 128, 85),
+ (154, 128, 85), (162, 114, 85), (162, 118, 75), (182, 114, 75),
+ (186, 127, 103), (210, 164, 132), (198, 226, 198), (201, 234, 225),
+ (206, 238, 216), (222, 171, 131), (206, 155, 122), (190, 144, 122),
+ (202, 151, 122), (219, 163, 132), (230, 183, 150), (250, 233, 206),
+ (222, 234, 235), (209, 238, 235), (193, 226, 235), (189, 222, 235),
+ (181, 222, 235), (173, 226, 244), (169, 226, 244), (169, 226, 244),
+ (173, 230, 244), (173, 234, 235), (173, 234, 234), (173, 230, 235),
+ (173, 226, 235), (173, 226, 234), (177, 230, 226), (181, 230, 226),
+ (189, 230, 235), (193, 230, 244), (197, 234, 244), (201, 234, 244),
+ (201, 238, 244), (201, 238, 244), (201, 238, 244), (201, 238, 244),
+ (201, 238, 244), (201, 242, 244), (201, 242, 244), (201, 242, 244),
+ (201, 242, 244), (201, 242, 244), (197, 238, 244), (193, 238, 254),
+ (177, 238, 254), (173, 230, 244), (177, 230, 244), (177, 234, 244),
+ (181, 238, 244), (189, 238, 244), (193, 242, 244), (201, 246, 244),
+ (205, 246, 244), (205, 246, 244), (205, 246, 244), (205, 242, 244),
+ (205, 238, 244), (205, 238, 254), (201, 238, 254), (197, 238, 254),
+ (193, 238, 244), (193, 238, 244), (193, 234, 244), (193, 234, 235),
+ (193, 234, 235), (193, 234, 235), (189, 234, 244), (185, 234, 244),
+ (181, 234, 244), (181, 230, 244), (181, 230, 244), (181, 234, 244),
+ (189, 234, 244), (193, 234, 244), (197, 234, 235), (197, 234, 235),
+ (201, 234, 235), (201, 234, 244), (205, 234, 244), (205, 238, 244),
+ (205, 238, 244), (205, 238, 244), (205, 242, 244), (201, 242, 235),
+ (201, 242, 235), (197, 242, 235), (193, 234, 244), (185, 230, 244),
+ (181, 226, 244), (181, 226, 244), (181, 230, 244), (181, 230, 244),
+ (185, 234, 235), (189, 238, 235), (189, 242, 235), (193, 238, 235),
+ (197, 238, 235), (197, 238, 235), (197, 238, 225), (193, 234, 225),
+ (189, 222, 216), (170, 148, 113), (117, 104, 66), (72, 55, 37),
+ (11, 12, 9), (36, 44, 37), (76, 117, 103), (158, 145, 113),
+ (177, 206, 197), (189, 226, 216), (189, 234, 226), (193, 238, 235),
+ (189, 238, 244), (189, 238, 244), (189, 238, 244), (185, 234, 244),
+ (185, 234, 244), (185, 230, 244), (189, 230, 235), (189, 230, 235),
+ (189, 234, 244), (193, 238, 244), (197, 242, 254), (201, 246, 254),
+ (201, 242, 254), (197, 238, 254), (193, 238, 244), (189, 238, 235),
+ (185, 234, 235), (177, 230, 234), (181, 230, 235), (181, 230, 235),
+ (185, 226, 235), (181, 230, 235), (189, 230, 235), (193, 234, 235),
+ (193, 234, 244), (189, 234, 244), (185, 230, 244), (181, 230, 244),
+ (177, 230, 244), (177, 230, 235), (169, 226, 235), (169, 226, 235),
+ (161, 222, 225), (137, 190, 197), (158, 145, 122), (149, 124, 103),
+ (133, 121, 103), (141, 106, 75), (141, 95, 66), (133, 99, 66),
+ (121, 108, 66), (121, 100, 56), (117, 104, 65), (93, 89, 56)
+ ),
+
+// 1 sky-flesh
+((166, 148, 122), (219, 162, 132), (238, 212, 178), (250, 237, 206),
+ (238, 250, 235), (226, 242, 235), (218, 242, 225), (206, 242, 225),
+ (206, 238, 225), (206, 234, 207), (182, 169, 141), (178, 138, 103),
+ (178, 130, 103), (170, 147, 113), (177, 198, 179), (181, 230, 225),
+ (185, 230, 235), (189, 230, 244), (197, 230, 244), (201, 234, 244),
+ (205, 234, 244), (205, 238, 244), (201, 234, 235), (197, 234, 225),
+ (193, 222, 207), (170, 148, 122), (145, 127, 94), (117, 100, 66),
+ (60, 64, 47), (20, 36, 28), (8, 20, 9), (20, 28, 18),
+ (56, 60, 37), (113, 91, 56), (145, 106, 75), (166, 121, 85),
+ (190, 137, 103), (230, 190, 169), (218, 230, 226), (214, 238, 235),
+ (209, 238, 244), (205, 238, 244), (205, 238, 244), (201, 238, 244),
+ (197, 234, 244), (197, 234, 244), (197, 230, 244), (197, 230, 244),
+ (197, 230, 244), (193, 234, 244), (185, 230, 244), (177, 226, 235),
+ (157, 206, 206), (120, 153, 141), (96, 133, 132), (108, 141, 141),
+ (141, 177, 178), (173, 226, 225), (177, 230, 235), (185, 234, 235),
+ (185, 242, 244), (197, 242, 244), (197, 238, 244), (197, 238, 244),
+ (197, 238, 244), (193, 234, 244), (189, 230, 235), (185, 214, 197),
+ (154, 144, 122), (150, 127, 94), (146, 128, 85), (133, 115, 75),
+ (133, 120, 75), (125, 107, 75), (125, 112, 85), (133, 111, 75),
+ (141, 101, 66), (129, 106, 75), (137, 106, 66), (133, 102, 66),
+ (141, 91, 66), (141, 93, 56), (137, 93, 47), (117, 87, 37),
+ (109, 74, 37), (56, 44, 28), (12, 20, 9), (4, 16, 0),
+ (12, 28, 9), (52, 47, 28), (80, 76, 47), (113, 91, 56),
+ (121, 94, 56), (125, 98, 56), (113, 87, 37), (85, 63, 28),
+ (40, 44, 28), (12, 12, 9), (0, 12, 0), (4, 24, 9),
+ (28, 60, 37), (56, 88, 75), (121, 104, 84), (145, 132, 103),
+ (170, 160, 132), (193, 226, 207), (197, 238, 225), (205, 242, 235),
+ (205, 242, 244), (205, 238, 244), (201, 238, 244), (201, 238, 244),
+ (201, 238, 244), (197, 238, 244), (193, 234, 244), (189, 230, 235),
+ (189, 226, 225), (186, 189, 151), (186, 150, 103), (166, 135, 94),
+ (166, 134, 94), (162, 130, 94), (162, 130, 94), (166, 130, 85),
+ (162, 130, 85), (158, 126, 75), (150, 118, 75), (158, 113, 75),
+ (150, 117, 66), (154, 117, 66), (149, 114, 75), (158, 131, 85),
+ (166, 139, 85), (174, 142, 85), (182, 155, 113), (198, 194, 169),
+ (205, 230, 216), (205, 234, 235), (197, 222, 244), (193, 226, 244),
+ (185, 230, 244), (181, 226, 244), (177, 226, 226), (145, 165, 160),
+ (158, 144, 103), (158, 144, 94), (166, 143, 94), (186, 160, 122),
+ (197, 222, 207), (202, 226, 226), (201, 234, 235), (197, 234, 235),
+ (193, 238, 244), (189, 234, 244), (173, 226, 244), (173, 222, 235),
+ (137, 157, 160), (137, 120, 113), (129, 124, 103), (141, 132, 94),
+ (158, 126, 94), (170, 143, 113), (178, 185, 160), (185, 230, 225),
+ (189, 230, 235), (193, 234, 235), (193, 234, 235), (193, 234, 225),
+ (182, 194, 170), (162, 144, 113), (146, 119, 85), (113, 92, 66),
+ (68, 64, 37), (24, 32, 9), (0, 16, 9), (0, 12, 9),
+ (12, 16, 18), (56, 47, 28), (113, 83, 46), (133, 90, 56),
+ (150, 108, 56), (154, 109, 66), (158, 104, 66), (153, 100, 56),
+ (165, 95, 47), (158, 103, 47), (158, 108, 56), (158, 104, 66),
+ (157, 110, 75), (158, 104, 75), (162, 113, 75), (162, 108, 75),
+ (158, 113, 66), (170, 112, 66), (174, 116, 75), (182, 124, 75),
+ (174, 120, 75), (182, 124, 85), (190, 142, 103), (214, 192, 169),
+ (210, 230, 225), (214, 234, 235), (214, 234, 235), (210, 234, 235),
+ (209, 234, 235), (205, 234, 235), (205, 238, 235), (202, 238, 235),
+ (197, 238, 235), (197, 238, 235), (197, 238, 235), (197, 238, 235),
+ (201, 238, 235), (202, 238, 235), (205, 238, 235), (205, 238, 235),
+ (210, 242, 235), (214, 242, 235), (214, 238, 225), (210, 234, 226),
+ (198, 210, 188), (178, 151, 122), (158, 115, 103), (125, 107, 85),
+ (92, 97, 94), (48, 76, 66), (12, 24, 28), (8, 12, 18),
+ (4, 8, 9), (16, 28, 18), (56, 56, 37), (100, 75, 56),
+ (133, 98, 66), (146, 110, 85), (154, 123, 94), (158, 140, 103),
+ (178, 177, 141), (185, 230, 216), (193, 234, 235), (197, 234, 235),
+ (206, 234, 225), (206, 234, 207), (214, 162, 132), (190, 137, 94),
+ (178, 125, 94), (170, 123, 94), (170, 125, 94), (166, 135, 113),
+ (178, 168, 141), (185, 226, 207), (181, 230, 235), (185, 230, 244),
+ (185, 230, 244), (181, 226, 235), (190, 210, 198), (170, 152, 113)
+ ),
+
+// 2 blue-bather
+((125, 100, 84), (162, 99, 75), (174, 99, 75), (182, 115, 104),
+ (190, 124, 122), (190, 137, 141), (194, 153, 151), (206, 161, 160),
+ (218, 173, 169), (230, 169, 188), (238, 172, 197), (234, 180, 197),
+ (234, 176, 188), (222, 180, 188), (222, 173, 179), (226, 161, 169),
+ (226, 149, 169), (214, 141, 151), (210, 141, 151), (198, 145, 141),
+ (194, 137, 132), (190, 132, 122), (178, 124, 104), (150, 104, 85),
+ (113, 92, 75), (56, 64, 75), (52, 68, 103), (48, 60, 122),
+ (40, 60, 132), (39, 56, 132), (40, 56, 122), (36, 52, 122),
+ (36, 52, 103), (40, 36, 56), (31, 24, 47), (12, 24, 37),
+ (4, 20, 28), (0, 16, 28), (4, 16, 28), (12, 24, 28),
+ (40, 31, 37), (52, 40, 56), (44, 48, 66), (52, 56, 113),
+ (48, 68, 141), (56, 81, 160), (64, 85, 170), (68, 97, 179),
+ (72, 97, 188), (72, 97, 188), (72, 101, 188), (72, 105, 179),
+ (76, 101, 179), (80, 101, 179), (173, 124, 123), (186, 136, 132),
+ (186, 141, 132), (190, 141, 141), (190, 141, 132), (190, 145, 132),
+ (194, 141, 132), (190, 137, 132), (186, 137, 132), (177, 128, 132),
+ (76, 105, 179), (80, 105, 188), (84, 109, 188), (186, 153, 151),
+ (190, 157, 151), (198, 161, 151), (202, 165, 160), (202, 161, 170),
+ (202, 165, 170), (202, 169, 170), (202, 169, 170), (206, 173, 170),
+ (206, 173, 170), (210, 173, 170), (210, 169, 170), (202, 165, 160),
+ (202, 165, 160), (202, 161, 151), (198, 153, 151), (198, 145, 141),
+ (194, 145, 141), (194, 145, 141), (198, 145, 132), (198, 136, 122),
+ (182, 120, 113), (170, 103, 94), (158, 88, 75), (84, 60, 56),
+ (48, 52, 56), (40, 40, 47), (36, 48, 47), (40, 48, 56),
+ (40, 52, 66), (40, 52, 113), (48, 56, 132), (52, 68, 151),
+ (60, 81, 170), (72, 93, 179), (72, 97, 179), (72, 97, 179),
+ (72, 97, 179), (73, 93, 170), (169, 111, 122), (186, 128, 132),
+ (186, 132, 132), (190, 128, 141), (194, 116, 132), (182, 115, 113),
+ (190, 111, 104), (178, 99, 85), (170, 84, 75), (117, 84, 84),
+ (68, 60, 85), (52, 68, 113), (48, 64, 132), (56, 73, 141),
+ (109, 88, 122), (158, 116, 104), (169, 124, 113), (161, 128, 113),
+ (73, 101, 170), (72, 101, 179), (72, 101, 179), (73, 97, 170),
+ (165, 120, 113), (170, 120, 113), (178, 124, 113), (182, 120, 113),
+ (178, 119, 103), (154, 107, 85), (121, 96, 94), (52, 64, 132),
+ (44, 64, 132), (48, 68, 141), (52, 73, 151), (56, 85, 160),
+ (64, 89, 170), (64, 93, 170), (64, 93, 170), (68, 93, 170),
+ (68, 97, 170), (84, 97, 151), (145, 104, 94), (174, 80, 75),
+ (162, 72, 66), (84, 60, 65), (64, 52, 66), (52, 48, 66),
+ (77, 73, 75), (141, 100, 84), (170, 116, 104), (182, 120, 113),
+ (182, 120, 113), (178, 124, 113), (174, 124, 122), (141, 104, 132),
+ (64, 77, 151), (52, 68, 151), (48, 64, 141), (44, 56, 141),
+ (52, 68, 151), (56, 81, 170), (68, 89, 179), (64, 97, 188),
+ (72, 97, 188), (76, 101, 188), (76, 105, 188), (80, 109, 188),
+ (182, 137, 151), (194, 149, 151), (198, 153, 160), (198, 153, 160),
+ (194, 153, 151), (186, 149, 141), (186, 141, 132), (169, 128, 122),
+ (76, 101, 179), (72, 101, 179), (68, 101, 179), (60, 93, 170),
+ (52, 81, 160), (48, 73, 151), (52, 73, 151), (60, 77, 151),
+ (129, 100, 113), (169, 120, 113), (182, 132, 122), (186, 132, 122),
+ (186, 132, 122), (170, 124, 123), (76, 97, 170), (68, 93, 170),
+ (68, 93, 170), (68, 85, 170), (64, 85, 170), (64, 81, 160),
+ (68, 85, 122), (129, 92, 84), (170, 95, 75), (178, 91, 75),
+ (186, 111, 94), (194, 119, 94), (186, 119, 104), (186, 132, 113),
+ (186, 136, 113), (182, 140, 113), (174, 128, 113), (166, 120, 113),
+ (80, 84, 151), (56, 73, 151), (52, 68, 151), (48, 68, 151),
+ (48, 68, 151), (44, 64, 151), (44, 64, 141), (44, 68, 141),
+ (48, 73, 141), (48, 73, 141), (44, 73, 151), (56, 85, 170),
+ (68, 97, 179), (72, 97, 188), (72, 101, 188), (72, 105, 198),
+ (76, 101, 188), (80, 109, 188), (186, 141, 141), (186, 141, 141),
+ (194, 149, 151), (202, 157, 151), (206, 157, 151), (202, 161, 151),
+ (198, 153, 141), (194, 149, 132), (190, 148, 122), (186, 136, 113),
+ (182, 123, 104), (182, 115, 104), (166, 103, 75), (113, 92, 65),
+ (56, 60, 56), (36, 52, 47), (36, 52, 47), (32, 44, 37),
+ (56, 39, 28), (146, 68, 66), (174, 80, 66), (182, 87, 66),
+ (194, 107, 104), (194, 111, 113), (194, 115, 113), (190, 116, 103)
+ ),
+
+// 3 no-name
+((16, 9, 9), (57, 50, 24), (85, 76, 49), (100, 96, 80),
+ (121, 117, 88), (138, 105, 74), (141, 92, 73), (144, 76, 66),
+ (139, 70, 53), (127, 60, 43), (99, 44, 25), (75, 35, 29),
+ (61, 27, 18), (41, 12, 9), (19, 8, 8), (13, 8, 8),
+ (14, 8, 8), (31, 12, 10), (45, 34, 14), (71, 49, 21),
+ (89, 72, 38), (103, 70, 29), (107, 74, 31), (107, 76, 31),
+ (95, 75, 35), (82, 65, 33), (68, 40, 18), (52, 24, 12),
+ (41, 11, 7), (16, 7, 7), (11, 6, 6), (8, 6, 6),
+ (7, 6, 6), (8, 6, 6), (8, 6, 6), (9, 7, 7),
+ (11, 8, 8), (13, 8, 12), (15, 9, 13), (19, 18, 20),
+ (41, 32, 16), (59, 53, 27), (87, 74, 37), (115, 89, 34),
+ (129, 97, 34), (137, 107, 44), (136, 103, 35), (136, 108, 36),
+ (141, 109, 38), (137, 109, 44), (139, 113, 45), (140, 111, 47),
+ (140, 108, 50), (155, 102, 67), (148, 101, 76), (151, 100, 78),
+ (153, 105, 84), (155, 104, 89), (162, 113, 99), (170, 123, 116),
+ (172, 140, 123), (168, 144, 123), (168, 140, 121), (169, 140, 125),
+ (164, 141, 121), (165, 135, 116), (156, 123, 99), (153, 117, 94),
+ (141, 104, 88), (132, 93, 72), (99, 89, 54), (90, 75, 43),
+ (46, 45, 33), (17, 26, 41), (16, 20, 38), (18, 25, 32),
+ (47, 42, 23), (65, 58, 32), (92, 75, 43), (116, 93, 36),
+ (122, 96, 37), (135, 97, 41), (138, 87, 56), (147, 91, 69),
+ (141, 91, 68), (140, 85, 58), (140, 88, 69), (143, 84, 66),
+ (135, 76, 53), (134, 76, 53), (130, 71, 46), (127, 70, 44),
+ (126, 66, 43), (128, 71, 43), (127, 87, 31), (126, 89, 30),
+ (131, 93, 34), (129, 97, 33), (128, 91, 34), (122, 87, 34),
+ (112, 76, 30), (96, 67, 28), (79, 48, 24), (56, 39, 21),
+ (36, 32, 19), (19, 17, 22), (15, 8, 14), (12, 8, 12),
+ (10, 8, 8), (10, 7, 7), (9, 7, 8), (8, 8, 8),
+ (9, 8, 8), (10, 8, 8), (11, 8, 8), (13, 8, 8),
+ (16, 9, 8), (36, 11, 8), (49, 18, 14), (69, 39, 21),
+ (96, 59, 24), (122, 75, 23), (139, 97, 32), (148, 109, 39),
+ (148, 119, 52), (148, 120, 58), (148, 118, 60), (148, 106, 81),
+ (150, 108, 81), (156, 110, 86), (162, 117, 98), (165, 127, 114),
+ (162, 144, 123), (145, 144, 133), (140, 140, 125), (139, 142, 126),
+ (141, 161, 177), (169, 153, 146), (166, 152, 140), (167, 148, 135),
+ (171, 143, 125), (167, 138, 120), (167, 128, 110), (163, 118, 96),
+ (154, 109, 85), (146, 100, 76), (136, 80, 58), (117, 58, 52),
+ (84, 46, 39), (62, 27, 19), (47, 15, 8), (25, 8, 8),
+ (14, 8, 8), (14, 8, 8), (32, 11, 7), (48, 17, 11),
+ (70, 35, 17), (88, 44, 27), (118, 51, 33), (119, 65, 38),
+ (119, 65, 38), (122, 66, 43), (116, 69, 36), (101, 76, 38),
+ (90, 73, 39), (68, 53, 25), (43, 33, 21), (17, 20, 31),
+ (15, 17, 34), (16, 16, 29), (14, 10, 21), (15, 8, 17),
+ (38, 26, 16), (67, 35, 14), (91, 51, 19), (106, 58, 20),
+ (121, 72, 23), (124, 83, 26), (118, 86, 39), (105, 91, 37),
+ (90, 73, 40), (63, 56, 33), (26, 30, 32), (16, 17, 32),
+ (14, 15, 27), (12, 8, 17), (14, 8, 14), (17, 8, 8),
+ (40, 11, 7), (53, 24, 15), (75, 31, 18), (103, 48, 18),
+ (122, 55, 33), (120, 71, 30), (130, 88, 30), (141, 101, 40),
+ (139, 100, 51), (139, 103, 70), (120, 121, 97), (118, 113, 124),
+ (137, 138, 123), (137, 140, 123), (130, 131, 117), (123, 123, 98),
+ (128, 125, 108), (125, 125, 93), (151, 109, 83), (169, 127, 69),
+ (166, 129, 66), (167, 131, 62), (167, 130, 62), (160, 123, 54),
+ (155, 129, 57), (152, 124, 55), (153, 124, 53), (154, 120, 46),
+ (154, 119, 48), (146, 116, 53), (135, 108, 46), (128, 107, 56),
+ (104, 95, 65), (92, 85, 52), (93, 80, 46), (81, 68, 35),
+ (59, 51, 27), (41, 32, 16), (20, 11, 9), (13, 8, 8),
+ (12, 8, 8), (12, 8, 8), (13, 8, 8), (13, 7, 7),
+ (16, 8, 8), (36, 9, 7), (49, 15, 7), (50, 15, 10),
+ (54, 21, 14), (63, 27, 16), (67, 28, 16), (70, 27, 20),
+ (74, 26, 16), (80, 31, 17), (86, 30, 16), (84, 37, 20),
+ (98, 55, 20), (101, 65, 25), (111, 70, 23), (121, 83, 29),
+ (122, 96, 37), (130, 105, 44), (126, 103, 44), (108, 94, 64),
+ (109, 98, 68), (106, 98, 69), (106, 102, 74), (116, 105, 71)
+ ),
+
+// 4 pillows
+((75, 58, 47), (58, 43, 43), (43, 34, 28), (28, 28, 22),
+ (17, 17, 17), (17, 17, 17), (17, 17, 17), (11, 17, 11),
+ (11, 11, 11), (11, 11, 11), (11, 11, 11), (11, 11, 11),
+ (11, 11, 11), (11, 17, 11), (17, 17, 17), (28, 17, 17),
+ (43, 22, 17), (60, 28, 22), (77, 45, 28), (94, 54, 32),
+ (119, 68, 34), (141, 90, 45), (173, 101, 50), (191, 106, 50),
+ (203, 117, 67), (186, 117, 78), (175, 112, 67), (141, 96, 62),
+ (128, 79, 62), (113, 73, 51), (114, 66, 43), (122, 77, 43),
+ (151, 73, 22), (160, 73, 28), (138, 73, 22), (117, 65, 26),
+ (103, 60, 37), (83, 49, 26), (77, 49, 20), (60, 28, 17),
+ (45, 17, 11), (26, 17, 11), (17, 17, 17), (17, 17, 17),
+ (17, 17, 17), (28, 22, 17), (39, 22, 22), (54, 34, 28),
+ (60, 34, 22), (81, 34, 22), (81, 34, 17), (87, 39, 17),
+ (104, 45, 11), (131, 50, 0), (156, 61, 0), (153, 67, 5),
+ (136, 67, 5), (125, 50, 11), (107, 51, 17), (107, 51, 17),
+ (104, 50, 17), (102, 51, 17), (90, 62, 34), (83, 54, 32),
+ (92, 64, 30), (96, 68, 39), (96, 62, 45), (104, 73, 56),
+ (119, 79, 56), (126, 81, 58), (136, 96, 62), (136, 96, 62),
+ (136, 90, 56), (117, 83, 54), (102, 73, 51), (100, 60, 49),
+ (96, 60, 43), (96, 62, 39), (90, 62, 39), (90, 62, 39),
+ (86, 64, 41), (86, 64, 47), (81, 58, 52), (71, 54, 49),
+ (73, 62, 56), (92, 75, 69), (119, 79, 90), (130, 102, 102),
+ (145, 162, 173), (175, 192, 197), (210, 216, 227), (243, 243, 243),
+ (252, 246, 252), (246, 246, 241), (250, 250, 239), (246, 246, 241),
+ (242, 197, 157), (201, 121, 88), (169, 112, 96), (141, 102, 90),
+ (134, 84, 79), (107, 68, 68), (85, 51, 62), (69, 49, 49),
+ (54, 39, 39), (45, 34, 28), (34, 28, 22), (34, 22, 17),
+ (54, 22, 17), (58, 20, 32), (62, 35, 35), (73, 51, 39),
+ (79, 56, 39), (81, 58, 47), (92, 64, 47), (96, 68, 51),
+ (92, 75, 58), (107, 85, 62), (111, 83, 60), (113, 85, 62),
+ (122, 66, 77), (134, 83, 83), (121, 76, 93), (119, 73, 84),
+ (103, 70, 65), (104, 73, 56), (100, 66, 49), (86, 64, 47),
+ (73, 62, 45), (73, 51, 39), (56, 39, 28), (28, 28, 28),
+ (17, 22, 17), (17, 17, 17), (17, 17, 17), (22, 28, 22),
+ (28, 39, 45), (28, 53, 78), (64, 58, 52), (75, 51, 51),
+ (100, 60, 54), (119, 68, 79), (121, 76, 76), (145, 62, 79),
+ (130, 85, 73), (147, 84, 34), (179, 56, 56), (158, 73, 22),
+ (171, 73, 11), (201, 5, 11), (182, 49, 0), (153, 61, 11),
+ (153, 78, 11), (167, 78, 5), (150, 56, 11), (134, 50, 5),
+ (124, 22, 11), (109, 17, 17), (96, 34, 22), (83, 45, 22),
+ (83, 39, 17), (73, 34, 22), (62, 28, 22), (54, 28, 17),
+ (41, 35, 18), (28, 22, 17), (22, 17, 17), (17, 17, 17),
+ (11, 17, 11), (11, 17, 11), (11, 17, 11), (17, 17, 17),
+ (17, 17, 17), (17, 17, 17), (17, 17, 17), (17, 17, 17),
+ (11, 11, 11), (11, 11, 11), (5, 5, 5), (5, 5, 5),
+ (0, 5, 0), (0, 11, 0), (0, 11, 0), (0, 11, 0),
+ (0, 11, 0), (5, 11, 5), (5, 11, 5), (11, 17, 5),
+ (17, 11, 11), (26, 11, 11), (34, 17, 11), (52, 17, 11),
+ (56, 28, 22), (60, 34, 34), (62, 37, 37), (75, 49, 43),
+ (66, 54, 49), (66, 54, 49), (60, 54, 49), (62, 51, 45),
+ (66, 45, 39), (69, 43, 43), (58, 32, 47), (45, 34, 39),
+ (34, 28, 28), (34, 34, 22), (45, 39, 28), (52, 47, 35),
+ (71, 54, 43), (79, 51, 56), (96, 68, 79), (119, 79, 90),
+ (149, 115, 109), (164, 169, 175), (185, 191, 196), (222, 228, 233),
+ (241, 241, 241), (254, 214, 186), (240, 206, 139), (203, 128, 78),
+ (186, 112, 78), (173, 90, 67), (141, 84, 51), (124, 79, 56),
+ (113, 79, 62), (86, 81, 75), (86, 86, 118), (134, 134, 156),
+ (167, 139, 162), (197, 140, 135), (173, 127, 116), (155, 133, 104),
+ (141, 102, 79), (156, 90, 67), (169, 106, 50), (164, 101, 28),
+ (151, 73, 16), (116, 45, 17), (88, 34, 17), (77, 28, 11),
+ (66, 17, 17), (36, 5, 5), (22, 11, 0), (17, 20, 0),
+ (17, 11, 5), (17, 11, 0), (11, 11, 11), (11, 11, 11),
+ (11, 11, 11), (11, 11, 11), (5, 11, 5), (5, 17, 5),
+ (5, 17, 5), (5, 11, 5), (11, 11, 11), (17, 11, 11)
+ ),
+
+// 5 mauve-splat
+((22, 22, 22), (22, 22, 22), (22, 17, 20), (22, 11, 15),
+ (17, 5, 11), (11, 5, 11), (11, 5, 11), (11, 5, 11),
+ (11, 5, 11), (11, 5, 11), (11, 5, 11), (11, 5, 15),
+ (11, 11, 15), (11, 11, 15), (11, 11, 17), (17, 11, 17),
+ (17, 17, 17), (17, 17, 17), (17, 17, 17), (17, 11, 11),
+ (17, 11, 11), (17, 11, 11), (17, 5, 11), (11, 5, 9),
+ (5, 5, 5), (5, 5, 5), (5, 5, 5), (5, 5, 9),
+ (5, 5, 11), (5, 5, 15), (11, 5, 17), (17, 5, 17),
+ (17, 5, 15), (17, 5, 15), (11, 5, 11), (11, 5, 11),
+ (11, 5, 11), (11, 5, 11), (11, 5, 15), (11, 11, 17),
+ (11, 11, 17), (17, 11, 17), (17, 11, 20), (17, 5, 22),
+ (17, 11, 20), (22, 11, 20), (22, 17, 22), (22, 22, 22),
+ (22, 28, 17), (22, 28, 22), (22, 22, 22), (22, 22, 22),
+ (22, 22, 22), (22, 22, 22), (22, 22, 22), (22, 17, 22),
+ (22, 17, 20), (22, 17, 17), (22, 17, 17), (28, 17, 17),
+ (28, 17, 17), (22, 17, 17), (22, 11, 17), (22, 11, 17),
+ (17, 17, 17), (17, 17, 22), (17, 11, 22), (11, 11, 17),
+ (11, 11, 17), (11, 11, 17), (5, 11, 15), (5, 5, 11),
+ (5, 0, 11), (5, 0, 9), (5, 5, 5), (11, 5, 5),
+ (17, 5, 5), (22, 11, 11), (22, 17, 17), (28, 22, 22),
+ (28, 22, 22), (28, 22, 22), (28, 22, 34), (28, 22, 37),
+ (22, 17, 32), (17, 11, 30), (11, 11, 24), (11, 11, 20),
+ (11, 11, 20), (11, 5, 26), (11, 5, 20), (11, 5, 20),
+ (11, 5, 20), (11, 5, 17), (11, 5, 17), (17, 5, 17),
+ (17, 5, 17), (17, 5, 20), (17, 5, 20), (17, 5, 20),
+ (22, 11, 26), (17, 11, 32), (26, 20, 39), (28, 28, 43),
+ (77, 66, 72), (96, 122, 101), (174, 172, 129), (84, 139, 146),
+ (240, 195, 184), (191, 112, 78), (159, 90, 73), (210, 73, 44),
+ (120, 94, 66), (107, 90, 90), (84, 88, 90), (118, 90, 67),
+ (85, 96, 107), (66, 100, 117), (75, 75, 64), (54, 80, 74),
+ (54, 66, 54), (39, 45, 17), (28, 28, 28), (32, 32, 32),
+ (45, 39, 34), (83, 37, 37), (131, 28, 11), (213, 22, 0),
+ (218, 16, 5), (148, 27, 0), (75, 16, 22), (43, 22, 17),
+ (28, 22, 11), (22, 22, 5), (32, 17, 0), (28, 37, 0),
+ (17, 17, 5), (17, 22, 11), (17, 17, 11), (17, 11, 11),
+ (17, 11, 11), (17, 11, 11), (11, 11, 11), (11, 5, 11),
+ (11, 5, 11), (11, 5, 11), (17, 5, 11), (17, 5, 11),
+ (17, 5, 11), (11, 0, 11), (11, 0, 11), (11, 0, 11),
+ (11, 0, 11), (11, 5, 11), (11, 5, 11), (11, 5, 11),
+ (11, 5, 11), (11, 5, 11), (11, 11, 11), (11, 11, 15),
+ (11, 5, 17), (11, 5, 17), (17, 5, 17), (17, 5, 17),
+ (17, 11, 17), (17, 11, 17), (17, 11, 17), (17, 11, 17),
+ (17, 11, 15), (17, 11, 11), (17, 11, 5), (11, 11, 0),
+ (17, 5, 0), (17, 5, 5), (17, 5, 5), (17, 5, 11),
+ (17, 5, 11), (17, 5, 11), (17, 5, 11), (17, 0, 11),
+ (17, 0, 11), (17, 0, 5), (11, 5, 5), (11, 5, 5),
+ (5, 5, 5), (0, 0, 5), (5, 5, 5), (11, 5, 5),
+ (11, 5, 5), (11, 11, 11), (11, 11, 11), (11, 11, 11),
+ (11, 5, 11), (11, 5, 11), (11, 5, 11), (11, 5, 11),
+ (11, 5, 11), (5, 5, 15), (5, 0, 15), (5, 0, 17),
+ (11, 0, 17), (11, 0, 15), (11, 0, 11), (11, 0, 11),
+ (11, 0, 11), (11, 0, 9), (11, 0, 5), (11, 0, 0),
+ (11, 0, 0), (11, 0, 5), (11, 0, 5), (11, 0, 5),
+ (11, 5, 5), (17, 5, 5), (17, 5, 5), (17, 11, 11),
+ (17, 11, 11), (17, 11, 11), (17, 11, 11), (20, 11, 11),
+ (22, 17, 11), (22, 17, 17), (22, 17, 17), (22, 17, 17),
+ (17, 11, 17), (17, 11, 17), (17, 11, 17), (17, 11, 17),
+ (17, 11, 17), (17, 11, 17), (17, 11, 17), (17, 11, 17),
+ (17, 11, 17), (17, 11, 17), (17, 11, 17), (17, 11, 20),
+ (17, 11, 22), (17, 17, 26), (17, 22, 30), (22, 22, 32),
+ (28, 17, 28), (28, 17, 22), (34, 17, 26), (37, 26, 20),
+ (45, 28, 22), (54, 49, 26), (100, 51, 51), (77, 56, 50),
+ (77, 58, 58), (50, 78, 90), (49, 54, 60), (71, 50, 56),
+ (62, 58, 52), (60, 66, 22), (79, 68, 45), (45, 34, 37)
+ ),
+
+// 6 facial-treescape 6
+((39, 34, 26), (52, 37, 56), (37, 60, 58), (52, 73, 52),
+ (73, 85, 51), (110, 87, 59), (164, 147, 127), (133, 105, 88),
+ (166, 134, 117), (122, 133, 142), (137, 125, 91), (150, 129, 56),
+ (152, 101, 0), (135, 73, 39), (62, 71, 17), (39, 86, 17),
+ (34, 62, 22), (37, 77, 43), (39, 62, 34), (39, 79, 28),
+ (45, 92, 51), (54, 79, 49), (52, 64, 58), (49, 69, 49),
+ (39, 64, 45), (47, 62, 30), (39, 62, 17), (39, 49, 11),
+ (45, 45, 17), (39, 49, 22), (34, 54, 28), (32, 55, 35),
+ (39, 56, 39), (45, 51, 34), (45, 60, 34), (34, 49, 22),
+ (28, 39, 17), (20, 35, 15), (22, 34, 11), (17, 39, 11),
+ (22, 28, 11), (17, 34, 11), (17, 39, 17), (11, 28, 11),
+ (11, 28, 5), (11, 28, 11), (17, 28, 11), (22, 22, 11),
+ (22, 17, 5), (22, 11, 0), (22, 11, 0), (22, 17, 0),
+ (22, 17, 0), (35, 20, 9), (60, 22, 17), (82, 39, 16),
+ (81, 49, 20), (132, 80, 41), (135, 123, 90), (178, 166, 112),
+ (197, 203, 169), (205, 233, 222), (178, 218, 212), (107, 158, 175),
+ (50, 96, 132), (49, 86, 103), (37, 55, 55), (34, 45, 39),
+ (34, 39, 34), (28, 28, 34), (34, 22, 22), (28, 17, 17),
+ (22, 22, 17), (22, 22, 17), (22, 17, 17), (17, 17, 11),
+ (15, 20, 9), (17, 22, 5), (22, 26, 0), (22, 28, 0),
+ (34, 32, 0), (28, 32, 5), (34, 28, 5), (34, 28, 0),
+ (28, 28, 0), (34, 22, 11), (34, 22, 11), (28, 17, 17),
+ (28, 22, 11), (28, 22, 11), (22, 22, 11), (22, 28, 11),
+ (22, 28, 17), (22, 28, 17), (17, 22, 22), (17, 17, 17),
+ (22, 17, 11), (22, 17, 11), (22, 17, 11), (22, 17, 11),
+ (22, 11, 11), (17, 11, 11), (17, 11, 11), (17, 11, 11),
+ (15, 9, 9), (22, 5, 5), (22, 11, 5), (22, 11, 5),
+ (22, 17, 5), (22, 22, 5), (17, 22, 5), (17, 28, 11),
+ (17, 28, 11), (17, 26, 11), (11, 22, 11), (11, 22, 11),
+ (11, 17, 5), (11, 17, 5), (5, 17, 5), (11, 17, 0),
+ (11, 17, 5), (17, 17, 5), (17, 17, 11), (17, 22, 17),
+ (22, 28, 22), (28, 28, 37), (22, 39, 64), (51, 83, 73),
+ (85, 117, 74), (122, 176, 142), (193, 222, 227), (220, 231, 237),
+ (215, 226, 232), (250, 216, 154), (244, 205, 109), (195, 114, 69),
+ (149, 114, 58), (93, 103, 53), (62, 71, 34), (51, 54, 22),
+ (39, 34, 17), (32, 26, 20), (17, 22, 11), (11, 11, 11),
+ (11, 5, 5), (11, 5, 5), (11, 5, 5), (11, 11, 5),
+ (11, 11, 0), (11, 11, 5), (17, 11, 5), (17, 11, 5),
+ (17, 17, 5), (17, 22, 5), (11, 22, 0), (11, 17, 0),
+ (11, 11, 0), (11, 11, 0), (11, 5, 0), (17, 5, 0),
+ (20, 5, 0), (17, 5, 0), (17, 5, 0), (17, 0, 0),
+ (17, 0, 0), (11, 0, 0), (11, 5, 0), (11, 5, 0),
+ (11, 5, 0), (0, 0, 0), (11, 5, 0), (5, 5, 0),
+ (5, 5, 0), (5, 11, 0), (5, 11, 5), (11, 11, 5),
+ (17, 17, 5), (17, 22, 0), (22, 28, 0), (22, 37, 5),
+ (26, 37, 9), (28, 43, 15), (26, 57, 29), (43, 68, 43),
+ (28, 64, 43), (28, 69, 34), (32, 80, 35), (41, 77, 47),
+ (56, 96, 68), (73, 110, 76), (45, 111, 79), (82, 105, 94),
+ (62, 114, 116), (67, 147, 147), (78, 175, 197), (180, 220, 220),
+ (216, 222, 222), (250, 210, 131), (180, 123, 95), (121, 87, 59),
+ (73, 68, 39), (58, 72, 44), (51, 66, 34), (37, 49, 32),
+ (34, 39, 22), (28, 34, 17), (28, 22, 11), (22, 17, 11),
+ (17, 11, 5), (17, 11, 5), (17, 11, 0), (11, 11, 0),
+ (11, 11, 0), (11, 11, 0), (17, 17, 0), (22, 22, 5),
+ (26, 26, 9), (28, 34, 11), (28, 34, 11), (26, 37, 15),
+ (28, 39, 17), (28, 34, 22), (28, 32, 22), (32, 32, 20),
+ (34, 34, 17), (34, 37, 17), (39, 43, 11), (37, 43, 15),
+ (34, 39, 17), (34, 37, 11), (28, 32, 11), (22, 28, 11),
+ (28, 28, 11), (26, 26, 9), (34, 34, 11), (45, 28, 11),
+ (49, 37, 15), (54, 39, 22), (69, 39, 28), (56, 39, 28),
+ (41, 35, 26), (34, 34, 28), (28, 34, 28), (26, 34, 22),
+ (28, 37, 22), (34, 39, 22), (34, 45, 22), (34, 39, 22),
+ (34, 39, 17), (34, 37, 17), (45, 39, 11), (45, 39, 20),
+ (45, 39, 22), (51, 39, 17), (49, 43, 20), (51, 57, 36)
+ ),
+
+// 7 fasion-bug
+((24, 19, 26), (45, 31, 41), (67, 45, 51), (122, 31, 44),
+ (144, 31, 39), (145, 29, 37), (146, 30, 35), (150, 30, 36),
+ (144, 30, 36), (133, 33, 35), (69, 45, 44), (47, 34, 40),
+ (35, 29, 36), (31, 25, 30), (27, 23, 27), (26, 21, 26),
+ (27, 22, 28), (30, 24, 33), (32, 28, 34), (37, 34, 41),
+ (48, 43, 47), (59, 53, 56), (83, 77, 73), (95, 77, 69),
+ (123, 90, 77), (130, 109, 88), (124, 116, 98), (148, 142, 112),
+ (176, 164, 120), (201, 192, 153), (214, 208, 194), (228, 222, 206),
+ (230, 224, 205), (230, 225, 201), (230, 221, 202), (229, 213, 190),
+ (219, 190, 158), (176, 152, 111), (141, 109, 83), (152, 73, 69),
+ (156, 58, 53), (146, 125, 94), (182, 149, 123), (218, 205, 144),
+ (229, 216, 191), (230, 222, 205), (230, 224, 218), (230, 226, 219),
+ (228, 226, 220), (230, 227, 221), (232, 228, 217), (236, 232, 204),
+ (233, 231, 191), (230, 222, 199), (229, 219, 200), (217, 212, 198),
+ (221, 209, 181), (199, 168, 145), (156, 127, 125), (92, 74, 81),
+ (69, 50, 51), (55, 40, 50), (41, 34, 40), (29, 29, 34),
+ (23, 24, 32), (21, 24, 29), (22, 21, 28), (24, 20, 27),
+ (30, 21, 29), (37, 25, 29), (45, 25, 32), (56, 30, 34),
+ (108, 29, 38), (142, 30, 39), (149, 34, 37), (150, 32, 36),
+ (148, 30, 36), (146, 29, 36), (142, 29, 35), (136, 31, 36),
+ (72, 50, 53), (63, 47, 50), (59, 48, 48), (57, 45, 49),
+ (63, 48, 51), (78, 55, 58), (92, 80, 76), (126, 112, 95),
+ (167, 147, 117), (206, 160, 142), (204, 195, 168), (214, 206, 190),
+ (172, 155, 142), (146, 130, 123), (115, 95, 88), (90, 74, 81),
+ (61, 54, 56), (55, 40, 52), (49, 40, 43), (46, 41, 45),
+ (44, 42, 46), (46, 42, 46), (46, 38, 40), (42, 41, 37),
+ (37, 33, 33), (34, 27, 27), (31, 23, 28), (29, 21, 23),
+ (25, 18, 23), (24, 13, 21), (22, 14, 21), (20, 15, 21),
+ (19, 16, 21), (19, 17, 21), (20, 16, 23), (22, 17, 24),
+ (25, 19, 25), (28, 19, 27), (31, 21, 29), (44, 24, 36),
+ (52, 33, 41), (66, 40, 44), (122, 29, 33), (142, 28, 35),
+ (143, 28, 35), (140, 31, 34), (119, 34, 33), (68, 40, 40),
+ (43, 30, 33), (31, 19, 27), (24, 16, 20), (18, 14, 17),
+ (16, 12, 16), (13, 12, 16), (12, 11, 17), (13, 11, 16),
+ (15, 12, 16), (18, 14, 18), (22, 20, 24), (27, 25, 29),
+ (37, 33, 35), (52, 39, 43), (69, 45, 48), (127, 30, 36),
+ (142, 29, 36), (148, 30, 36), (152, 29, 38), (156, 29, 39),
+ (156, 28, 35), (154, 28, 36), (148, 29, 32), (145, 33, 33),
+ (138, 32, 34), (74, 48, 52), (59, 40, 50), (48, 34, 44),
+ (44, 34, 40), (38, 33, 36), (31, 31, 36), (33, 28, 34),
+ (41, 26, 31), (46, 27, 37), (58, 37, 41), (116, 28, 35),
+ (139, 27, 33), (144, 27, 35), (149, 29, 39), (153, 31, 38),
+ (156, 31, 39), (157, 33, 39), (154, 36, 40), (151, 34, 42),
+ (145, 30, 37), (136, 27, 35), (95, 24, 29), (49, 32, 25),
+ (32, 24, 25), (25, 20, 23), (20, 17, 24), (18, 16, 23),
+ (17, 15, 21), (18, 16, 22), (16, 15, 24), (20, 16, 27),
+ (18, 19, 35), (32, 25, 35), (42, 36, 38), (46, 42, 41),
+ (52, 53, 45), (67, 68, 46), (98, 75, 65), (101, 69, 63),
+ (146, 34, 48), (150, 33, 43), (157, 33, 41), (160, 30, 39),
+ (160, 32, 39), (162, 29, 37), (161, 35, 40), (171, 37, 38),
+ (157, 37, 40), (151, 36, 40), (144, 32, 39), (138, 32, 38),
+ (79, 44, 48), (61, 41, 46), (55, 36, 39), (47, 32, 42),
+ (35, 28, 35), (27, 24, 29), (27, 21, 27), (22, 20, 26),
+ (19, 20, 24), (16, 18, 24), (15, 16, 22), (15, 16, 23),
+ (15, 19, 22), (16, 16, 22), (17, 15, 22), (14, 16, 21),
+ (12, 15, 20), (15, 13, 20), (18, 14, 21), (19, 16, 21),
+ (22, 16, 21), (25, 20, 21), (24, 22, 25), (25, 24, 29),
+ (29, 25, 31), (32, 27, 32), (31, 27, 33), (31, 25, 29),
+ (27, 21, 26), (28, 19, 26), (26, 16, 24), (25, 17, 23),
+ (23, 14, 23), (19, 15, 22), (16, 14, 19), (14, 13, 18),
+ (13, 11, 18), (15, 12, 18), (16, 14, 17), (15, 15, 19),
+ (16, 16, 20), (16, 16, 21), (18, 15, 23), (20, 16, 23),
+ (23, 18, 26), (24, 19, 33), (29, 18, 30), (35, 24, 32),
+ (43, 28, 34), (55, 32, 37), (69, 42, 43), (131, 27, 32)
+ ),
+
+// 8 leafy-face
+((42, 37, 33), (31, 23, 25), (23, 19, 22), (20, 20, 24),
+ (24, 23, 25), (31, 25, 25), (47, 37, 39), (64, 40, 39),
+ (81, 51, 51), (74, 59, 57), (73, 69, 63), (77, 81, 72),
+ (95, 98, 94), (200, 168, 134), (215, 188, 153), (223, 209, 177),
+ (238, 225, 207), (237, 227, 215), (238, 227, 201), (225, 195, 162),
+ (210, 182, 147), (191, 163, 133), (91, 98, 97), (75, 74, 79),
+ (70, 70, 67), (73, 69, 59), (83, 76, 55), (84, 74, 55),
+ (107, 79, 73), (197, 132, 96), (218, 159, 116), (222, 174, 130),
+ (225, 182, 134), (222, 182, 137), (220, 173, 131), (215, 164, 114),
+ (163, 109, 88), (103, 83, 68), (90, 83, 61), (145, 104, 88),
+ (208, 163, 121), (209, 174, 138), (213, 176, 151), (213, 178, 151),
+ (211, 183, 143), (206, 174, 133), (197, 154, 120), (89, 91, 91),
+ (72, 77, 78), (66, 71, 69), (64, 66, 63), (62, 56, 59),
+ (60, 59, 58), (58, 58, 55), (56, 54, 54), (50, 51, 48),
+ (60, 47, 46), (65, 50, 46), (65, 50, 46), (67, 52, 49),
+ (66, 59, 57), (65, 67, 59), (68, 73, 68), (78, 84, 80),
+ (130, 120, 108), (206, 162, 135), (217, 172, 144), (223, 184, 152),
+ (224, 188, 154), (226, 188, 154), (226, 187, 152), (225, 190, 148),
+ (226, 195, 144), (224, 195, 146), (220, 190, 147), (223, 190, 153),
+ (226, 193, 152), (227, 192, 152), (223, 187, 152), (223, 187, 147),
+ (227, 184, 143), (223, 184, 141), (221, 174, 135), (204, 162, 130),
+ (130, 108, 102), (82, 82, 75), (74, 77, 63), (70, 76, 63),
+ (68, 71, 63), (68, 71, 63), (66, 72, 63), (71, 76, 66),
+ (78, 89, 77), (138, 122, 109), (205, 166, 137), (210, 179, 149),
+ (213, 182, 152), (222, 189, 155), (226, 199, 156), (237, 210, 172),
+ (240, 227, 199), (238, 229, 214), (238, 231, 222), (239, 232, 227),
+ (235, 230, 227), (230, 228, 223), (220, 217, 207), (203, 193, 176),
+ (206, 166, 149), (194, 148, 118), (87, 98, 78), (72, 89, 71),
+ (82, 86, 69), (139, 116, 93), (208, 167, 123), (219, 170, 135),
+ (219, 179, 138), (218, 182, 149), (214, 176, 151), (212, 174, 147),
+ (198, 160, 136), (98, 97, 97), (78, 76, 82), (68, 71, 71),
+ (60, 66, 68), (65, 67, 69), (67, 72, 71), (82, 87, 80),
+ (168, 130, 113), (208, 164, 139), (209, 167, 138), (189, 141, 129),
+ (99, 86, 90), (80, 75, 64), (82, 71, 63), (83, 77, 68),
+ (98, 94, 96), (202, 155, 123), (219, 170, 130), (212, 164, 117),
+ (142, 106, 92), (81, 81, 74), (72, 73, 68), (71, 73, 67),
+ (73, 79, 69), (83, 99, 85), (164, 149, 121), (207, 166, 140),
+ (213, 177, 153), (224, 193, 170), (222, 210, 207), (223, 222, 215),
+ (232, 231, 225), (233, 227, 226), (226, 226, 223), (218, 226, 216),
+ (222, 222, 214), (222, 213, 199), (225, 191, 157), (213, 184, 148),
+ (209, 176, 138), (199, 165, 128), (96, 96, 95), (75, 77, 69),
+ (70, 67, 64), (68, 61, 60), (68, 62, 59), (70, 63, 58),
+ (74, 72, 63), (82, 88, 77), (175, 142, 113), (217, 171, 125),
+ (221, 170, 130), (207, 159, 122), (112, 86, 73), (83, 64, 60),
+ (51, 41, 43), (29, 27, 31), (21, 18, 24), (13, 11, 15),
+ (19, 16, 17), (22, 17, 23), (30, 24, 29), (46, 37, 41),
+ (44, 41, 44), (43, 46, 38), (32, 32, 27), (25, 26, 28),
+ (28, 22, 25), (32, 30, 32), (41, 41, 42), (43, 41, 47),
+ (47, 50, 49), (55, 55, 53), (58, 63, 60), (61, 68, 58),
+ (64, 70, 57), (67, 74, 62), (75, 76, 65), (88, 89, 83),
+ (176, 145, 118), (206, 166, 144), (224, 190, 168), (238, 223, 210),
+ (233, 230, 225), (233, 229, 224), (227, 218, 210), (220, 188, 162),
+ (204, 167, 151), (150, 142, 132), (85, 97, 95), (75, 78, 72),
+ (70, 70, 65), (67, 64, 57), (63, 61, 52), (57, 55, 49),
+ (62, 56, 46), (60, 59, 46), (61, 59, 52), (64, 61, 58),
+ (64, 68, 57), (62, 70, 54), (62, 67, 54), (63, 67, 55),
+ (64, 64, 55), (66, 65, 51), (67, 65, 50), (69, 65, 51),
+ (69, 65, 54), (76, 66, 55), (84, 65, 54), (121, 72, 64),
+ (197, 132, 96), (217, 166, 119), (222, 178, 124), (225, 188, 129),
+ (224, 188, 138), (222, 184, 139), (209, 178, 141), (206, 171, 134),
+ (162, 144, 108), (78, 90, 81), (67, 76, 72), (72, 72, 72),
+ (83, 70, 82), (114, 112, 105), (203, 167, 143), (213, 184, 157),
+ (219, 210, 199), (221, 220, 210), (218, 213, 200), (183, 173, 165),
+ (107, 106, 103), (77, 83, 78), (74, 83, 75), (82, 95, 83)
+ ),
+
+// 9 mouldy-sun
+((17, 11, 11), (11, 11, 11), (11, 11, 5), (11, 17, 0),
+ (11, 17, 0), (17, 22, 0), (22, 28, 0), (34, 28, 11),
+ (51, 39, 22), (69, 64, 24), (84, 105, 50), (129, 135, 73),
+ (189, 166, 78), (195, 194, 78), (207, 189, 83), (208, 180, 95),
+ (214, 203, 90), (214, 197, 90), (207, 179, 105), (191, 173, 92),
+ (191, 163, 90), (180, 158, 62), (177, 149, 45), (180, 146, 39),
+ (174, 145, 55), (159, 130, 65), (126, 109, 60), (144, 104, 34),
+ (148, 104, 45), (153, 115, 48), (146, 93, 31), (154, 96, 17),
+ (163, 115, 25), (180, 123, 16), (183, 138, 28), (173, 129, 45),
+ (210, 135, 61), (225, 146, 67), (197, 174, 123), (148, 193, 193),
+ (191, 191, 180), (204, 192, 170), (213, 196, 139), (203, 208, 135),
+ (165, 185, 156), (113, 124, 90), (67, 113, 50), (77, 84, 26),
+ (60, 68, 20), (66, 64, 20), (83, 69, 20), (120, 82, 20),
+ (159, 104, 11), (172, 126, 39), (186, 134, 45), (208, 146, 39),
+ (242, 146, 44), (206, 148, 39), (164, 121, 45), (145, 95, 45),
+ (128, 84, 34), (89, 39, 22), (58, 28, 17), (43, 22, 11),
+ (28, 17, 11), (22, 11, 11), (22, 11, 11), (22, 11, 11),
+ (17, 11, 11), (11, 5, 26), (11, 11, 11), (17, 11, 17),
+ (17, 17, 11), (22, 22, 5), (17, 11, 0), (22, 22, 0),
+ (17, 22, 0), (17, 11, 0), (28, 17, 0), (37, 11, 0),
+ (49, 22, 5), (62, 39, 0), (71, 58, 9), (119, 73, 0),
+ (164, 72, 28), (186, 117, 22), (203, 157, 33), (242, 174, 50),
+ (248, 208, 89), (244, 239, 154), (254, 248, 169), (237, 220, 135),
+ (240, 206, 88), (231, 186, 72), (203, 174, 50), (178, 146, 39),
+ (139, 127, 16), (116, 101, 11), (94, 81, 5), (51, 58, 0),
+ (22, 32, 0), (17, 26, 0), (11, 17, 0), (5, 17, 0),
+ (5, 5, 5), (0, 0, 0), (5, 0, 0), (11, 5, 0),
+ (11, 5, 5), (11, 5, 5), (17, 5, 5), (17, 5, 5),
+ (22, 5, 5), (22, 5, 5), (17, 5, 5), (17, 5, 5),
+ (17, 5, 5), (11, 11, 0), (11, 11, 0), (11, 5, 5),
+ (11, 5, 5), (17, 5, 0), (17, 5, 0), (17, 5, 0),
+ (17, 5, 0), (22, 5, 5), (17, 0, 0), (17, 0, 0),
+ (17, 0, 0), (17, 5, 5), (17, 17, 11), (11, 17, 9),
+ (11, 22, 0), (11, 28, 0), (17, 39, 17), (45, 69, 0),
+ (62, 86, 25), (84, 98, 11), (107, 99, 17), (119, 93, 17),
+ (122, 99, 20), (134, 101, 28), (141, 112, 22), (150, 110, 33),
+ (130, 113, 39), (128, 111, 75), (133, 132, 87), (165, 142, 120),
+ (197, 163, 135), (220, 202, 146), (225, 225, 180), (229, 229, 190),
+ (250, 239, 199), (244, 233, 188), (242, 237, 163), (218, 200, 127),
+ (225, 202, 118), (224, 201, 105), (227, 205, 91), (225, 208, 78),
+ (237, 220, 44), (237, 197, 50), (248, 191, 67), (225, 174, 89),
+ (181, 146, 85), (144, 138, 76), (124, 124, 51), (108, 119, 43),
+ (96, 99, 42), (73, 73, 28), (71, 52, 20), (79, 50, 22),
+ (79, 39, 22), (93, 50, 56), (154, 90, 84), (158, 107, 67),
+ (162, 127, 66), (197, 163, 50), (210, 176, 47), (203, 168, 33),
+ (180, 139, 0), (152, 118, 5), (125, 80, 0), (96, 73, 11),
+ (69, 45, 11), (54, 28, 22), (39, 34, 22), (34, 34, 22),
+ (28, 28, 17), (28, 28, 11), (39, 22, 5), (34, 22, 0),
+ (28, 24, 0), (22, 28, 5), (28, 34, 20), (51, 52, 30),
+ (66, 54, 24), (94, 60, 46), (126, 86, 47), (132, 118, 82),
+ (158, 140, 90), (208, 168, 101), (214, 197, 140), (233, 227, 188),
+ (252, 240, 201), (252, 252, 212), (252, 246, 201), (250, 244, 176),
+ (254, 242, 152), (254, 220, 95), (248, 208, 84), (231, 174, 44),
+ (203, 157, 28), (194, 126, 0), (191, 123, 5), (190, 112, 5),
+ (175, 118, 16), (138, 116, 0), (107, 99, 0), (99, 96, 14),
+ (91, 89, 20), (54, 64, 9), (39, 28, 17), (28, 17, 17),
+ (17, 11, 11), (11, 5, 5), (11, 5, 5), (11, 5, 5),
+ (11, 5, 5), (11, 5, 5), (5, 5, 5), (5, 0, 0),
+ (5, 0, 0), (11, 0, 0), (11, 5, 0), (11, 5, 5),
+ (17, 5, 5), (17, 11, 17), (17, 17, 17), (28, 33, 33),
+ (57, 63, 46), (77, 71, 34), (91, 75, 43), (124, 88, 33),
+ (155, 112, 11), (186, 135, 22), (203, 146, 39), (231, 157, 39),
+ (225, 168, 50), (237, 203, 90), (239, 233, 148), (252, 235, 189),
+ (248, 242, 208), (229, 218, 224), (244, 244, 210), (237, 208, 169)
+ ),
+
+// 10 sunny-harvest
+((0, 0, 0), (34, 4, 13), (71, 19, 23), (105, 20, 32),
+ (107, 51, 32), (102, 30, 34), (70, 23, 27), (52, 20, 20),
+ (18, 6, 8), (4, 0, 1), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (8, 5, 6), (16, 12, 21), (58, 29, 30), (89, 49, 39),
+ (116, 94, 73), (149, 126, 100), (193, 171, 144), (208, 199, 181),
+ (213, 202, 184), (204, 203, 195), (227, 209, 188), (228, 210, 184),
+ (219, 200, 171), (216, 190, 148), (212, 182, 123), (211, 171, 108),
+ (189, 137, 88), (173, 125, 72), (167, 123, 82), (157, 127, 103),
+ (184, 159, 137), (204, 180, 162), (205, 185, 156), (206, 182, 146),
+ (200, 168, 133), (170, 131, 87), (163, 112, 64), (145, 103, 68),
+ (132, 98, 68), (123, 102, 49), (93, 65, 39), (84, 57, 33),
+ (86, 64, 30), (118, 81, 44), (137, 96, 57), (148, 118, 62),
+ (159, 116, 64), (176, 136, 77), (195, 143, 90), (206, 164, 112),
+ (186, 160, 114), (169, 130, 85), (151, 114, 89), (121, 104, 81),
+ (112, 93, 68), (102, 77, 53), (86, 52, 33), (76, 49, 28),
+ (82, 63, 30), (92, 79, 38), (113, 102, 71), (132, 128, 98),
+ (154, 155, 150), (201, 187, 161), (207, 191, 163), (215, 191, 174),
+ (204, 181, 165), (185, 169, 137), (143, 133, 100), (99, 88, 80),
+ (61, 41, 39), (41, 16, 21), (17, 3, 12), (6, 0, 3),
+ (0, 0, 0), (0, 0, 0), (3, 1, 3), (16, 8, 9),
+ (54, 24, 30), (65, 63, 43), (85, 87, 72), (124, 122, 90),
+ (182, 154, 108), (201, 174, 136), (202, 181, 122), (207, 183, 113),
+ (218, 169, 91), (208, 146, 67), (213, 132, 64), (227, 133, 48),
+ (226, 130, 48), (223, 124, 47), (213, 122, 45), (211, 112, 41),
+ (215, 101, 43), (214, 103, 44), (205, 112, 45), (194, 106, 42),
+ (175, 100, 37), (169, 89, 35), (164, 74, 39), (166, 83, 42),
+ (163, 74, 36), (176, 92, 35), (187, 102, 42), (202, 116, 54),
+ (218, 131, 45), (229, 156, 54), (229, 164, 62), (229, 179, 77),
+ (224, 183, 95), (222, 193, 115), (224, 189, 123), (218, 195, 149),
+ (223, 200, 158), (215, 190, 172), (202, 179, 157), (154, 144, 119),
+ (143, 122, 97), (122, 94, 70), (119, 85, 51), (101, 45, 32),
+ (97, 47, 31), (83, 35, 29), (71, 29, 33), (56, 21, 24),
+ (16, 8, 21), (2, 0, 3), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (16, 10, 8), (23, 16, 11),
+ (62, 40, 29), (92, 66, 41), (138, 99, 61), (193, 146, 50),
+ (215, 170, 60), (222, 164, 57), (229, 168, 54), (233, 168, 56),
+ (236, 175, 55), (238, 180, 55), (236, 177, 57), (235, 179, 60),
+ (236, 183, 59), (231, 190, 63), (234, 184, 61), (236, 173, 60),
+ (233, 169, 59), (235, 170, 58), (235, 166, 58), (233, 160, 58),
+ (233, 151, 58), (233, 150, 59), (226, 137, 53), (231, 125, 50),
+ (219, 101, 46), (202, 98, 45), (207, 84, 39), (193, 77, 37),
+ (190, 74, 37), (178, 62, 39), (179, 52, 35), (183, 57, 36),
+ (191, 62, 40), (190, 80, 45), (187, 97, 43), (170, 114, 57),
+ (174, 124, 71), (181, 151, 81), (205, 170, 95), (218, 189, 119),
+ (215, 190, 114), (227, 191, 103), (225, 190, 96), (235, 192, 73),
+ (235, 186, 67), (233, 174, 68), (233, 152, 56), (216, 126, 43),
+ (198, 94, 40), (183, 72, 41), (151, 71, 39), (128, 43, 33),
+ (89, 14, 25), (25, 15, 6), (6, 0, 2), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (3, 0, 1), (18, 4, 7), (33, 13, 19), (60, 28, 33),
+ (74, 44, 36), (87, 53, 35), (93, 62, 37), (122, 84, 46),
+ (121, 88, 45), (141, 90, 51), (140, 67, 41), (122, 81, 49),
+ (139, 60, 40), (135, 61, 34), (150, 57, 34), (145, 38, 38),
+ (149, 64, 37), (123, 56, 32), (154, 40, 39), (158, 46, 36),
+ (175, 45, 38), (179, 56, 41), (164, 72, 39), (160, 85, 40),
+ (150, 81, 47), (166, 93, 48), (157, 99, 55), (135, 106, 66),
+ (116, 109, 74), (136, 114, 90), (141, 108, 86), (159, 115, 69),
+ (180, 133, 80), (211, 175, 110), (214, 190, 145), (224, 203, 178),
+ (232, 226, 194), (235, 218, 187), (225, 213, 184), (212, 196, 164),
+ (193, 177, 137), (180, 135, 90), (175, 113, 57), (198, 110, 44),
+ (208, 113, 41), (222, 136, 45), (233, 152, 53), (235, 157, 54),
+ (231, 160, 55), (231, 160, 54), (228, 151, 52), (216, 130, 45),
+ (197, 106, 43), (173, 84, 39), (150, 67, 37), (133, 55, 31)
+ ),
+
+// 11 peach-tree
+((170, 59, 28), (170, 63, 28), (129, 68, 37), (68, 84, 37),
+ (77, 109, 37), (81, 121, 47), (81, 113, 47), (93, 113, 56),
+ (101, 133, 75), (117, 141, 85), (137, 161, 94), (141, 162, 84),
+ (194, 173, 65), (218, 139, 47), (222, 119, 37), (214, 103, 47),
+ (214, 106, 37), (194, 95, 28), (145, 76, 37), (76, 105, 37),
+ (52, 80, 18), (32, 68, 9), (32, 60, 18), (32, 48, 18),
+ (32, 56, 18), (44, 72, 18), (64, 105, 37), (97, 137, 56),
+ (141, 178, 94), (170, 198, 122), (238, 209, 122), (250, 225, 84),
+ (230, 151, 46), (230, 122, 37), (230, 122, 37), (219, 105, 37),
+ (202, 94, 37), (182, 76, 28), (133, 55, 18), (84, 43, 9),
+ (36, 27, 9), (28, 32, 0), (28, 48, 9), (32, 64, 9),
+ (64, 92, 28), (84, 121, 56), (105, 145, 75), (145, 174, 103),
+ (150, 178, 113), (149, 174, 113), (141, 170, 113), (113, 141, 85),
+ (81, 109, 66), (64, 68, 47), (36, 52, 28), (16, 24, 18),
+ (12, 12, 9), (4, 8, 0), (0, 4, 0), (0, 4, 0),
+ (0, 4, 0), (0, 0, 0), (4, 0, 0), (12, 0, 0),
+ (16, 11, 0), (36, 15, 0), (68, 23, 18), (129, 38, 18),
+ (170, 55, 18), (194, 95, 28), (178, 124, 47), (154, 174, 103),
+ (166, 194, 122), (170, 202, 122), (178, 210, 141), (190, 218, 160),
+ (190, 210, 151), (202, 214, 151), (226, 222, 132), (182, 218, 141),
+ (182, 210, 141), (186, 206, 141), (190, 206, 151), (198, 206, 169),
+ (210, 218, 179), (234, 230, 197), (234, 234, 197), (250, 241, 188),
+ (246, 229, 188), (234, 192, 141), (210, 172, 150), (190, 202, 150),
+ (178, 198, 151), (182, 206, 141), (182, 202, 141), (182, 198, 132),
+ (170, 202, 132), (166, 198, 132), (158, 186, 122), (141, 178, 113),
+ (113, 149, 75), (81, 117, 56), (60, 84, 37), (48, 64, 28),
+ (24, 56, 9), (20, 40, 9), (20, 24, 9), (12, 16, 9),
+ (7, 12, 9), (4, 8, 9), (8, 4, 9), (20, 7, 9),
+ (28, 15, 9), (36, 23, 9), (80, 39, 18), (129, 47, 18),
+ (178, 59, 18), (198, 87, 37), (219, 102, 37), (222, 102, 37),
+ (222, 117, 28), (226, 135, 28), (230, 142, 28), (242, 146, 37),
+ (250, 155, 28), (246, 187, 28), (234, 127, 47), (250, 188, 103),
+ (250, 225, 112), (250, 225, 84), (254, 211, 46), (254, 207, 46),
+ (254, 208, 74), (218, 181, 94), (149, 120, 103), (89, 121, 66),
+ (64, 93, 47), (32, 60, 18), (20, 44, 9), (4, 24, 0),
+ (0, 12, 0), (4, 8, 0), (0, 4, 0), (0, 4, 0),
+ (0, 4, 0), (4, 0, 0), (4, 0, 0), (4, 4, 0),
+ (4, 4, 0), (4, 8, 0), (4, 8, 0), (4, 8, 0),
+ (0, 4, 0), (0, 0, 0), (0, 0, 9), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (4, 0, 0), (4, 4, 0), (12, 8, 0),
+ (16, 16, 0), (32, 16, 0), (56, 27, 9), (89, 51, 9),
+ (125, 67, 9), (166, 63, 18), (178, 72, 18), (198, 90, 28),
+ (190, 107, 37), (157, 112, 56), (153, 99, 47), (89, 121, 56),
+ (85, 101, 56), (113, 72, 28), (182, 80, 37), (206, 98, 37),
+ (210, 102, 37), (214, 110, 28), (214, 110, 28), (218, 118, 37),
+ (222, 110, 28), (226, 114, 37), (222, 110, 47), (238, 111, 65),
+ (198, 160, 84), (169, 148, 112), (161, 186, 122), (170, 194, 132),
+ (190, 206, 151), (206, 214, 160), (226, 238, 188), (246, 238, 197),
+ (254, 250, 254), (250, 254, 206), (242, 254, 206), (230, 238, 197),
+ (198, 214, 160), (170, 194, 132), (145, 149, 113), (84, 109, 66),
+ (56, 64, 37), (28, 44, 18), (24, 36, 9), (20, 20, 9),
+ (32, 19, 9), (48, 15, 9), (101, 39, 18), (137, 47, 18),
+ (166, 51, 19), (145, 55, 18), (101, 47, 18), (68, 39, 18),
+ (32, 56, 9), (28, 44, 9), (20, 28, 9), (16, 20, 9),
+ (8, 16, 0), (8, 16, 0), (4, 12, 0), (4, 16, 0),
+ (8, 20, 9), (16, 32, 9), (20, 48, 18), (40, 72, 18),
+ (68, 109, 37), (97, 129, 56), (137, 170, 103), (149, 182, 113),
+ (145, 182, 113), (129, 161, 94), (105, 133, 75), (68, 89, 56),
+ (60, 76, 37), (48, 64, 37), (60, 68, 28), (113, 55, 18),
+ (166, 51, 19), (190, 76, 28), (202, 91, 28), (210, 94, 28),
+ (210, 98, 28), (198, 87, 18), (158, 55, 9), (105, 34, 0),
+ (44, 15, 0), (20, 4, 0), (12, 0, 0), (8, 4, 0),
+ (4, 8, 0), (8, 16, 0), (16, 32, 9), (28, 52, 9)
+ ),
+
+// 12 fire-dragon
+((88, 3, 9), (64, 0, 9), (44, 3, 9), (24, 4, 9),
+ (15, 0, 9), (16, 4, 9), (28, 8, 9), (40, 4, 9),
+ (48, 3, 0), (52, 0, 0), (52, 0, 0), (48, 0, 0),
+ (40, 0, 0), (28, 4, 0), (16, 0, 0), (8, 0, 9),
+ (8, 0, 9), (15, 0, 9), (28, 0, 0), (40, 0, 0),
+ (44, 0, 0), (48, 0, 0), (56, 4, 0), (56, 3, 0),
+ (52, 0, 0), (48, 0, 0), (40, 0, 0), (28, 0, 0),
+ (16, 0, 0), (4, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 4, 0),
+ (0, 4, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (4, 0, 0), (8, 4, 0), (12, 4, 0), (24, 4, 0),
+ (32, 4, 0), (40, 4, 9), (48, 4, 9), (52, 3, 9),
+ (68, 3, 9), (81, 4, 0), (101, 3, 0), (117, 0, 0),
+ (137, 0, 9), (158, 0, 9), (182, 0, 9), (202, 7, 0),
+ (210, 10, 0), (202, 7, 0), (190, 0, 9), (174, 0, 9),
+ (145, 3, 9), (113, 3, 0), (89, 3, 0), (68, 3, 9),
+ (48, 7, 9), (36, 4, 9), (20, 0, 0), (8, 0, 0),
+ (4, 0, 0), (4, 0, 0), (4, 0, 0), (8, 4, 0),
+ (24, 4, 0), (40, 4, 0), (60, 3, 0), (84, 3, 0),
+ (109, 3, 0), (125, 3, 0), (145, 0, 0), (158, 0, 0),
+ (162, 0, 0), (162, 0, 0), (162, 0, 0), (162, 0, 0),
+ (162, 3, 0), (153, 7, 9), (157, 11, 0), (153, 0, 0),
+ (145, 3, 0), (129, 0, 0), (109, 0, 0), (89, 0, 0),
+ (73, 3, 0), (52, 3, 0), (36, 4, 0), (16, 0, 0),
+ (8, 0, 0), (4, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 9), (4, 0, 9),
+ (0, 0, 9), (0, 0, 9), (0, 0, 9), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 4, 0), (0, 4, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (4, 0, 0),
+ (16, 0, 0), (40, 4, 0), (60, 0, 0), (73, 0, 0),
+ (97, 0, 0), (113, 0, 0), (133, 0, 0), (157, 0, 0),
+ (166, 7, 0), (182, 7, 0), (174, 10, 0), (174, 15, 9),
+ (166, 29, 0), (157, 35, 9), (121, 30, 9), (93, 15, 9),
+ (93, 11, 9), (92, 11, 0), (89, 3, 9), (88, 3, 9),
+ (80, 3, 9), (76, 0, 0), (68, 0, 0), (64, 3, 0),
+ (68, 3, 0), (76, 0, 0), (89, 3, 0), (105, 0, 0),
+ (121, 0, 0), (145, 0, 0), (158, 0, 0), (162, 3, 0),
+ (153, 18, 9), (169, 7, 0), (166, 0, 0), (174, 3, 0),
+ (174, 0, 0), (178, 0, 0), (178, 3, 0), (182, 3, 0),
+ (190, 11, 9), (206, 14, 9), (234, 58, 9), (246, 131, 28),
+ (242, 179, 28), (250, 187, 37), (250, 233, 84), (246, 254, 102),
+ (250, 254, 140), (254, 249, 140), (250, 241, 102), (242, 195, 46),
+ (246, 159, 46), (186, 91, 37), (137, 43, 18), (101, 55, 18),
+ (76, 39, 18), (56, 11, 9), (44, 11, 9), (28, 4, 0),
+ (16, 0, 0), (4, 0, 0), (4, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (4, 0, 0),
+ (8, 4, 0), (16, 8, 0), (24, 4, 0), (36, 7, 0),
+ (40, 4, 0), (32, 0, 0), (28, 0, 0), (20, 0, 0),
+ (12, 0, 0), (8, 0, 0), (4, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (4, 0, 0),
+ (8, 0, 0), (24, 0, 0), (44, 3, 0), (60, 0, 0),
+ (77, 0, 0), (101, 0, 0), (133, 3, 0), (162, 30, 0),
+ (182, 47, 0), (194, 79, 18), (197, 107, 18), (206, 95, 18),
+ (198, 86, 18), (198, 47, 0), (190, 39, 9), (194, 18, 9),
+ (182, 7, 0), (182, 10, 0), (186, 22, 9), (190, 22, 9),
+ (206, 66, 9), (230, 98, 9), (246, 134, 9), (246, 155, 28),
+ (238, 138, 9), (238, 142, 37), (226, 126, 18), (190, 87, 9),
+ (141, 48, 0), (125, 43, 9), (101, 15, 9), (101, 0, 9),
+ (97, 3, 0), (92, 7, 0), (89, 15, 9), (77, 24, 9),
+ (85, 7, 0), (64, 7, 0), (60, 3, 0), (52, 7, 0),
+ (48, 4, 0), (44, 4, 0), (44, 3, 0), (48, 0, 0),
+ (44, 0, 0), (40, 7, 0), (36, 4, 0), (28, 0, 0)
+ ),
+
+// 13 ice-dragon
+((96, 43, 37), (113, 80, 75), (157, 120, 103), (174, 141, 122),
+ (178, 161, 151), (194, 173, 160), (186, 169, 170), (165, 141, 150),
+ (153, 129, 141), (141, 133, 131), (137, 129, 131), (137, 133, 141),
+ (141, 137, 141), (157, 157, 160), (161, 173, 188), (165, 189, 216),
+ (181, 205, 235), (193, 222, 235), (189, 226, 244), (193, 230, 244),
+ (197, 230, 254), (197, 226, 254), (189, 226, 244), (185, 222, 244),
+ (173, 209, 244), (157, 193, 235), (133, 177, 226), (120, 169, 235),
+ (124, 173, 225), (133, 185, 225), (144, 198, 235), (149, 193, 244),
+ (157, 201, 244), (161, 197, 235), (169, 193, 226), (161, 185, 197),
+ (177, 177, 179), (185, 177, 188), (193, 193, 207), (226, 222, 216),
+ (246, 246, 235), (254, 254, 254), (254, 254, 254), (254, 254, 254),
+ (250, 254, 254), (237, 245, 254), (209, 230, 244), (193, 201, 216),
+ (181, 173, 188), (173, 161, 179), (161, 157, 160), (145, 137, 141),
+ (149, 120, 122), (133, 96, 94), (121, 60, 56), (97, 56, 46),
+ (80, 39, 37), (60, 15, 18), (44, 19, 9), (48, 19, 18),
+ (56, 23, 18), (60, 31, 37), (64, 39, 56), (76, 52, 65),
+ (92, 72, 103), (97, 101, 122), (117, 113, 132), (125, 117, 132),
+ (133, 117, 122), (137, 117, 113), (125, 109, 94), (117, 92, 84),
+ (117, 88, 84), (133, 97, 94), (141, 100, 94), (133, 104, 113),
+ (129, 121, 132), (128, 145, 178), (116, 162, 216), (121, 149, 197),
+ (116, 112, 151), (108, 92, 122), (76, 48, 85), (56, 40, 66),
+ (60, 31, 37), (52, 27, 28), (44, 27, 28), (48, 19, 28),
+ (48, 27, 28), (56, 31, 47), (68, 56, 75), (96, 92, 113),
+ (113, 117, 151), (108, 153, 197), (108, 158, 225), (100, 154, 235),
+ (100, 158, 235), (108, 158, 235), (141, 189, 244), (157, 201, 244),
+ (169, 210, 244), (173, 209, 244), (165, 205, 244), (148, 197, 254),
+ (140, 193, 254), (116, 185, 254), (104, 173, 244), (100, 162, 244),
+ (96, 154, 244), (100, 158, 244), (104, 158, 244), (104, 165, 244),
+ (108, 181, 244), (141, 197, 244), (169, 210, 244), (185, 226, 244),
+ (205, 238, 254), (218, 246, 254), (230, 250, 254), (234, 254, 254),
+ (234, 254, 244), (213, 250, 244), (189, 242, 244), (177, 226, 254),
+ (173, 226, 244), (160, 226, 254), (173, 234, 254), (189, 238, 254),
+ (221, 246, 254), (250, 254, 254), (254, 254, 254), (254, 254, 254),
+ (250, 254, 254), (234, 250, 254), (222, 242, 254), (201, 226, 244),
+ (181, 210, 235), (161, 202, 235), (149, 189, 235), (120, 173, 235),
+ (108, 177, 235), (108, 177, 244), (112, 181, 244), (140, 197, 244),
+ (157, 205, 244), (177, 218, 244), (193, 234, 235), (214, 246, 244),
+ (222, 246, 254), (226, 250, 254), (222, 246, 244), (209, 226, 235),
+ (193, 197, 216), (173, 177, 207), (161, 161, 179), (145, 133, 150),
+ (125, 100, 122), (100, 72, 84), (88, 52, 66), (80, 48, 56),
+ (88, 43, 47), (68, 39, 47), (72, 39, 56), (80, 43, 56),
+ (80, 52, 65), (88, 64, 75), (113, 97, 103), (125, 129, 151),
+ (116, 154, 207), (104, 158, 235), (100, 158, 235), (100, 158, 244),
+ (100, 166, 254), (104, 173, 254), (100, 173, 244), (104, 189, 254),
+ (132, 202, 254), (161, 201, 244), (185, 202, 244), (201, 226, 254),
+ (221, 230, 254), (233, 250, 254), (250, 254, 254), (254, 254, 254),
+ (250, 250, 254), (230, 238, 235), (206, 202, 207), (178, 169, 169),
+ (149, 129, 132), (117, 88, 103), (93, 60, 65), (105, 56, 56),
+ (113, 56, 56), (133, 88, 75), (141, 108, 94), (149, 137, 132),
+ (170, 165, 169), (182, 190, 198), (214, 214, 226), (217, 230, 244),
+ (217, 234, 244), (209, 234, 254), (197, 226, 235), (173, 194, 226),
+ (149, 173, 198), (157, 165, 179), (149, 149, 160), (149, 121, 122),
+ (129, 100, 103), (113, 76, 84), (96, 56, 65), (92, 52, 56),
+ (88, 52, 56), (84, 68, 56), (97, 85, 94), (112, 109, 132),
+ (128, 129, 150), (133, 137, 179), (137, 157, 188), (161, 157, 169),
+ (161, 141, 150), (166, 136, 132), (153, 132, 122), (157, 120, 113),
+ (169, 141, 131), (198, 173, 160), (202, 177, 170), (218, 210, 207),
+ (246, 238, 244), (250, 254, 254), (254, 254, 254), (254, 254, 254),
+ (250, 254, 254), (238, 250, 244), (222, 242, 244), (218, 214, 226),
+ (190, 190, 198), (181, 177, 178), (185, 173, 169), (194, 173, 169),
+ (181, 173, 179), (161, 165, 179), (157, 169, 179), (141, 173, 207),
+ (133, 173, 216), (136, 169, 226), (137, 149, 188), (125, 121, 132),
+ (96, 92, 103), (84, 64, 75), (80, 60, 66), (88, 60, 66),
+ (104, 76, 85), (129, 125, 122), (161, 161, 169), (201, 193, 197)
+ ),
+
+// 14 german-landscape
+((61, 62, 43), (52, 48, 45), (42, 44, 39), (37, 39, 34),
+ (33, 39, 23), (36, 44, 22), (46, 54, 32), (51, 55, 33),
+ (45, 49, 38), (45, 49, 38), (45, 45, 45), (45, 45, 45),
+ (35, 35, 35), (35, 39, 28), (36, 44, 22), (36, 44, 22),
+ (31, 39, 17), (31, 39, 17), (31, 39, 17), (31, 39, 17),
+ (31, 39, 17), (31, 39, 17), (28, 34, 18), (23, 29, 13),
+ (25, 29, 18), (30, 34, 23), (30, 34, 23), (33, 39, 23),
+ (36, 44, 22), (39, 48, 22), (45, 43, 38), (55, 55, 44),
+ (60, 54, 45), (63, 61, 54), (69, 68, 58), (70, 66, 54),
+ (66, 64, 48), (70, 69, 45), (79, 75, 50), (77, 85, 55),
+ (94, 101, 63), (100, 123, 70), (115, 123, 80), (131, 132, 106),
+ (134, 139, 102), (131, 130, 80), (120, 105, 63), (110, 98, 70),
+ (96, 76, 62), (77, 68, 57), (65, 79, 60), (72, 79, 65),
+ (90, 95, 69), (102, 99, 77), (118, 130, 107), (137, 163, 141),
+ (159, 182, 173), (167, 178, 180), (177, 170, 179), (178, 172, 183),
+ (183, 179, 196), (165, 177, 194), (151, 168, 185), (127, 154, 156),
+ (131, 133, 141), (132, 125, 149), (133, 139, 140), (151, 129, 154),
+ (163, 157, 170), (169, 168, 176), (164, 174, 180), (168, 179, 193),
+ (168, 187, 195), (161, 179, 194), (161, 195, 194), (174, 198, 204),
+ (193, 227, 202), (210, 230, 224), (214, 223, 214), (240, 234, 209),
+ (219, 215, 201), (201, 197, 192), (204, 180, 172), (197, 156, 171),
+ (184, 157, 167), (169, 156, 169), (177, 129, 137), (148, 105, 71),
+ (111, 83, 64), (101, 79, 57), (93, 80, 50), (81, 73, 45),
+ (79, 79, 47), (85, 89, 56), (100, 94, 74), (119, 120, 84),
+ (154, 109, 96), (132, 132, 120), (133, 188, 112), (124, 180, 99),
+ (130, 156, 103), (111, 139, 75), (102, 109, 62), (94, 94, 54),
+ (91, 79, 57), (86, 72, 56), (86, 70, 53), (78, 68, 49),
+ (68, 57, 46), (58, 58, 44), (53, 59, 43), (50, 54, 43),
+ (46, 50, 28), (41, 49, 27), (39, 48, 22), (39, 48, 22),
+ (39, 48, 22), (39, 48, 22), (44, 53, 27), (47, 57, 33),
+ (54, 63, 37), (70, 71, 45), (75, 79, 40), (84, 78, 41),
+ (96, 93, 46), (110, 106, 55), (122, 115, 50), (142, 158, 73),
+ (137, 185, 77), (132, 178, 79), (135, 150, 71), (114, 109, 53),
+ (97, 92, 58), (86, 97, 78), (97, 96, 62), (113, 121, 90),
+ (110, 129, 129), (138, 144, 170), (164, 173, 181), (183, 184, 200),
+ (194, 193, 202), (214, 210, 211), (208, 220, 216), (210, 220, 212),
+ (205, 202, 204), (186, 186, 193), (186, 173, 176), (176, 155, 152),
+ (185, 123, 88), (172, 130, 65), (161, 126, 53), (120, 106, 56),
+ (98, 83, 60), (76, 70, 51), (58, 58, 47), (58, 58, 44),
+ (64, 67, 43), (70, 78, 42), (80, 97, 50), (99, 111, 58),
+ (104, 140, 59), (113, 144, 62), (145, 139, 67), (164, 133, 60),
+ (172, 133, 65), (184, 149, 59), (158, 135, 56), (134, 109, 56),
+ (114, 100, 58), (106, 103, 65), (109, 108, 64), (114, 120, 75),
+ (123, 134, 118), (136, 147, 152), (145, 168, 187), (156, 179, 183),
+ (153, 174, 190), (153, 172, 190), (143, 161, 178), (130, 139, 150),
+ (114, 116, 120), (93, 89, 82), (87, 81, 62), (79, 79, 47),
+ (75, 85, 47), (76, 87, 46), (77, 85, 45), (84, 88, 45),
+ (87, 97, 46), (97, 97, 47), (116, 108, 56), (159, 130, 57),
+ (170, 120, 72), (137, 103, 67), (108, 85, 65), (99, 75, 56),
+ (87, 78, 54), (78, 68, 46), (69, 68, 44), (70, 64, 45),
+ (73, 67, 48), (77, 75, 55), (84, 88, 65), (97, 102, 83),
+ (108, 119, 128), (131, 146, 146), (151, 162, 177), (168, 172, 190),
+ (180, 182, 200), (168, 187, 195), (182, 190, 196), (194, 197, 197),
+ (212, 210, 202), (221, 217, 208), (220, 217, 217), (218, 217, 216),
+ (210, 205, 204), (200, 182, 162), (223, 194, 83), (220, 174, 75),
+ (225, 173, 78), (214, 151, 77), (170, 115, 76), (125, 88, 80),
+ (101, 83, 60), (88, 83, 55), (86, 91, 47), (83, 91, 50),
+ (82, 92, 57), (98, 99, 70), (114, 116, 69), (117, 137, 99),
+ (129, 148, 127), (143, 157, 168), (161, 171, 179), (160, 168, 189),
+ (153, 157, 182), (155, 139, 161), (179, 116, 112), (158, 104, 89),
+ (164, 97, 83), (161, 97, 68), (173, 102, 80), (182, 119, 100),
+ (181, 144, 157), (170, 170, 169), (156, 158, 172), (130, 141, 156),
+ (115, 140, 140), (124, 139, 130), (131, 155, 114), (130, 160, 116),
+ (126, 149, 104), (134, 148, 136), (147, 157, 172), (163, 178, 187)
+ ),
+
+// 15 no-name
+((218, 222, 188), (238, 230, 197), (238, 242, 206), (238, 242, 207),
+ (230, 238, 225), (234, 238, 216), (242, 241, 235), (242, 245, 216),
+ (230, 242, 206), (222, 234, 197), (214, 218, 198), (206, 210, 188),
+ (194, 202, 169), (190, 202, 160), (206, 214, 170), (222, 226, 197),
+ (234, 237, 206), (234, 242, 197), (222, 226, 197), (194, 202, 170),
+ (174, 190, 170), (165, 178, 150), (162, 169, 141), (150, 162, 132),
+ (141, 141, 122), (133, 137, 113), (133, 141, 113), (133, 133, 103),
+ (121, 125, 103), (121, 125, 103), (113, 121, 94), (101, 109, 85),
+ (77, 93, 66), (52, 64, 37), (48, 64, 37), (48, 56, 28),
+ (44, 60, 28), (44, 52, 28), (36, 44, 18), (36, 36, 0),
+ (36, 44, 9), (40, 52, 9), (56, 64, 18), (48, 64, 28),
+ (64, 80, 47), (85, 105, 66), (101, 117, 85), (108, 125, 94),
+ (116, 141, 113), (116, 137, 132), (116, 141, 132), (120, 141, 132),
+ (121, 137, 122), (121, 133, 113), (117, 125, 103), (113, 121, 94),
+ (108, 113, 94), (109, 112, 94), (108, 121, 94), (104, 117, 94),
+ (105, 113, 85), (109, 117, 85), (109, 117, 85), (105, 113, 85),
+ (101, 113, 85), (105, 109, 85), (100, 113, 94), (104, 112, 103),
+ (104, 112, 103), (104, 108, 103), (108, 108, 94), (113, 113, 94),
+ (121, 121, 103), (129, 133, 113), (125, 145, 113), (133, 146, 122),
+ (133, 146, 122), (125, 146, 132), (121, 146, 132), (120, 146, 141),
+ (120, 141, 141), (116, 141, 132), (116, 146, 132), (117, 146, 122),
+ (108, 133, 103), (100, 121, 94), (89, 105, 75), (170, 87, 0),
+ (56, 68, 28), (48, 60, 28), (44, 60, 28), (52, 64, 37),
+ (80, 97, 75), (93, 109, 94), (100, 113, 94), (96, 113, 94),
+ (96, 117, 94), (104, 117, 94), (108, 121, 94), (108, 121, 94),
+ (113, 121, 103), (112, 121, 103), (108, 125, 103), (104, 121, 103),
+ (108, 121, 103), (108, 117, 103), (113, 117, 94), (113, 117, 94),
+ (117, 121, 94), (117, 125, 94), (129, 141, 94), (141, 146, 94),
+ (141, 146, 103), (154, 154, 113), (154, 162, 122), (154, 162, 122),
+ (154, 161, 122), (146, 154, 113), (137, 146, 103), (129, 133, 94),
+ (125, 125, 85), (105, 121, 75), (97, 109, 66), (68, 76, 37),
+ (56, 68, 28), (64, 81, 37), (69, 77, 37), (113, 109, 66),
+ (121, 125, 75), (129, 125, 85), (121, 121, 85), (109, 117, 85),
+ (105, 125, 85), (108, 121, 94), (101, 121, 84), (104, 121, 94),
+ (100, 121, 103), (100, 121, 103), (104, 117, 94), (100, 113, 94),
+ (100, 108, 94), (101, 109, 85), (77, 88, 66), (52, 64, 37),
+ (44, 56, 28), (32, 40, 28), (28, 20, 9), (24, 24, 0),
+ (4, 20, 0), (8, 16, 0), (12, 24, 0), (28, 40, 9),
+ (36, 48, 18), (60, 68, 37), (93, 101, 85), (117, 121, 85),
+ (133, 137, 94), (137, 145, 113), (150, 162, 113), (154, 162, 122),
+ (158, 170, 122), (158, 170, 122), (170, 174, 113), (166, 170, 122),
+ (162, 170, 122), (161, 165, 122), (150, 158, 122), (133, 150, 122),
+ (129, 146, 122), (120, 146, 122), (117, 146, 122), (117, 141, 122),
+ (112, 129, 103), (125, 125, 103), (137, 137, 103), (146, 154, 113),
+ (158, 170, 122), (170, 182, 132), (178, 182, 141), (182, 186, 151),
+ (194, 202, 151), (178, 190, 141), (178, 182, 141), (170, 178, 141),
+ (162, 174, 132), (154, 166, 122), (146, 158, 122), (133, 154, 122),
+ (125, 150, 122), (125, 146, 122), (125, 146, 132), (125, 146, 132),
+ (129, 150, 132), (133, 150, 132), (133, 150, 132), (129, 146, 132),
+ (133, 154, 132), (133, 154, 132), (141, 154, 132), (146, 150, 132),
+ (158, 169, 132), (174, 178, 132), (170, 186, 132), (178, 190, 141),
+ (182, 194, 160), (198, 202, 160), (198, 206, 170), (214, 218, 179),
+ (218, 226, 197), (210, 214, 188), (190, 194, 160), (170, 182, 141),
+ (158, 166, 122), (146, 154, 113), (137, 137, 113), (129, 125, 103),
+ (125, 125, 103), (129, 120, 103), (125, 125, 94), (121, 121, 94),
+ (121, 129, 94), (129, 125, 103), (129, 125, 103), (129, 129, 103),
+ (129, 137, 113), (133, 145, 122), (137, 146, 122), (150, 157, 122),
+ (150, 158, 122), (146, 150, 132), (150, 154, 141), (146, 146, 132),
+ (137, 145, 132), (129, 146, 132), (125, 146, 141), (120, 146, 141),
+ (116, 146, 141), (120, 146, 141), (120, 150, 151), (129, 150, 141),
+ (129, 150, 141), (129, 154, 141), (133, 154, 141), (137, 158, 141),
+ (137, 158, 141), (141, 162, 151), (149, 162, 151), (141, 162, 151),
+ (150, 166, 141), (154, 161, 141), (158, 169, 132), (158, 166, 122),
+ (162, 165, 113), (158, 166, 113), (154, 166, 113), (149, 157, 113)
+ ),
+
+// 16 living-mud-bomb
+((193, 144, 35), (153, 117, 33), (133, 107, 35), (102, 76, 20),
+ (96, 67, 20), (79, 51, 16), (70, 47, 16), (66, 52, 16),
+ (64, 48, 16), (64, 47, 16), (61, 44, 16), (58, 41, 16),
+ (58, 42, 16), (64, 46, 16), (72, 48, 16), (85, 52, 18),
+ (86, 60, 18), (88, 64, 22), (85, 76, 24), (75, 76, 24),
+ (89, 56, 15), (84, 47, 16), (84, 46, 16), (84, 43, 16),
+ (84, 41, 16), (84, 40, 16), (84, 40, 16), (84, 39, 16),
+ (84, 39, 16), (84, 39, 16), (81, 39, 16), (79, 39, 16),
+ (75, 39, 16), (66, 39, 16), (64, 40, 16), (55, 40, 16),
+ (51, 40, 16), (48, 40, 16), (48, 40, 16), (49, 42, 16),
+ (53, 43, 16), (55, 41, 16), (55, 41, 16), (53, 41, 16),
+ (49, 40, 16), (48, 40, 16), (48, 40, 16), (48, 40, 16),
+ (48, 40, 16), (48, 40, 16), (48, 40, 16), (48, 38, 16),
+ (48, 38, 16), (48, 38, 16), (48, 38, 16), (48, 38, 16),
+ (45, 35, 16), (48, 38, 16), (48, 38, 16), (49, 40, 16),
+ (53, 40, 16), (58, 40, 16), (64, 40, 16), (75, 39, 16),
+ (81, 39, 16), (83, 39, 16), (84, 39, 16), (81, 39, 16),
+ (79, 39, 16), (75, 40, 16), (68, 47, 16), (64, 48, 16),
+ (64, 48, 16), (64, 48, 16), (58, 46, 16), (56, 44, 16),
+ (56, 44, 16), (53, 43, 16), (49, 40, 16), (48, 40, 16),
+ (48, 40, 16), (48, 40, 16), (48, 40, 16), (49, 40, 16),
+ (55, 41, 16), (63, 43, 16), (68, 47, 16), (79, 49, 16),
+ (93, 56, 15), (96, 68, 20), (120, 84, 20), (151, 110, 35),
+ (186, 141, 35), (236, 162, 35), (246, 167, 44), (238, 165, 35),
+ (226, 153, 33), (185, 106, 22), (128, 82, 15), (96, 70, 20),
+ (84, 60, 22), (72, 48, 16), (62, 47, 16), (55, 42, 16),
+ (49, 40, 16), (48, 40, 16), (48, 40, 16), (48, 40, 16),
+ (48, 40, 16), (48, 40, 16), (48, 40, 16), (48, 40, 16),
+ (48, 40, 16), (48, 40, 16), (48, 40, 16), (48, 40, 16),
+ (48, 40, 16), (48, 40, 16), (49, 40, 16), (55, 40, 16),
+ (58, 40, 16), (64, 42, 16), (68, 46, 16), (70, 47, 16),
+ (77, 43, 16), (81, 40, 16), (84, 39, 16), (85, 39, 16),
+ (91, 39, 15), (96, 39, 16), (96, 39, 16), (94, 39, 16),
+ (91, 39, 16), (85, 39, 16), (85, 39, 16), (84, 39, 16),
+ (84, 39, 16), (84, 39, 16), (84, 39, 16), (84, 39, 16),
+ (84, 39, 16), (84, 39, 16), (84, 39, 16), (84, 39, 16),
+ (84, 39, 16), (84, 39, 16), (85, 39, 16), (87, 42, 16),
+ (91, 43, 16), (96, 43, 16), (100, 40, 16), (106, 52, 22),
+ (124, 75, 17), (164, 105, 21), (217, 135, 30), (239, 162, 49),
+ (248, 175, 48), (237, 159, 49), (202, 125, 32), (163, 84, 15),
+ (130, 76, 20), (106, 71, 22), (98, 53, 15), (91, 43, 16),
+ (84, 41, 16), (77, 39, 16), (68, 39, 16), (64, 42, 16),
+ (64, 44, 16), (68, 47, 16), (75, 46, 16), (84, 42, 16),
+ (91, 40, 16), (98, 39, 16), (100, 40, 16), (101, 50, 15),
+ (117, 55, 15), (120, 53, 15), (120, 51, 15), (120, 54, 15),
+ (106, 52, 15), (102, 43, 15), (100, 39, 16), (92, 39, 16),
+ (87, 39, 16), (85, 39, 16), (84, 39, 16), (84, 39, 16),
+ (84, 39, 16), (84, 39, 16), (84, 39, 16), (84, 39, 16),
+ (84, 39, 16), (84, 39, 16), (84, 39, 16), (84, 39, 16),
+ (84, 39, 16), (84, 39, 16), (84, 39, 16), (85, 39, 16),
+ (92, 39, 16), (100, 39, 16), (100, 39, 16), (117, 46, 15),
+ (127, 62, 15), (175, 55, 15), (192, 53, 15), (237, 60, 15),
+ (247, 74, 20), (230, 62, 17), (184, 53, 15), (182, 56, 15),
+ (134, 48, 15), (128, 67, 20), (128, 78, 28), (137, 103, 28),
+ (188, 128, 30), (229, 153, 35), (245, 151, 35), (248, 133, 41),
+ (248, 106, 31), (202, 107, 22), (137, 94, 35), (108, 76, 15),
+ (93, 56, 15), (84, 47, 16), (84, 45, 16), (84, 42, 16),
+ (81, 39, 16), (81, 39, 16), (73, 39, 16), (64, 40, 16),
+ (58, 40, 16), (55, 39, 16), (49, 40, 16), (48, 40, 16),
+ (48, 40, 16), (48, 40, 16), (48, 40, 16), (48, 40, 16),
+ (48, 40, 16), (49, 40, 16), (53, 40, 16), (57, 40, 16),
+ (64, 40, 16), (66, 39, 16), (70, 39, 16), (77, 39, 16),
+ (81, 39, 16), (84, 39, 16), (84, 39, 16), (81, 41, 16),
+ (77, 40, 16), (68, 46, 16), (64, 47, 16), (64, 47, 16)
+ ),
+
+// 17 cars
+((43, 30, 36), (38, 26, 33), (29, 22, 30), (32, 24, 32),
+ (31, 31, 35), (40, 39, 36), (51, 56, 42), (69, 71, 43),
+ (92, 94, 54), (116, 120, 64), (183, 130, 77), (221, 172, 85),
+ (218, 188, 136), (187, 189, 148), (190, 191, 173), (176, 180, 172),
+ (159, 184, 170), (142, 161, 152), (126, 135, 130), (104, 119, 98),
+ (98, 83, 78), (81, 60, 64), (87, 41, 42), (90, 44, 36),
+ (78, 35, 32), (59, 24, 34), (57, 24, 32), (54, 32, 38),
+ (51, 35, 37), (54, 32, 39), (64, 51, 38), (74, 59, 34),
+ (82, 70, 38), (91, 96, 51), (132, 137, 68), (207, 152, 66),
+ (229, 204, 97), (217, 199, 117), (213, 222, 147), (218, 215, 178),
+ (193, 204, 181), (177, 197, 185), (171, 199, 191), (165, 182, 185),
+ (155, 161, 156), (116, 122, 129), (91, 87, 99), (72, 74, 85),
+ (63, 55, 63), (44, 41, 50), (34, 33, 45), (33, 25, 34),
+ (27, 23, 28), (33, 21, 25), (39, 33, 24), (47, 45, 38),
+ (52, 51, 45), (67, 62, 56), (92, 82, 69), (120, 118, 89),
+ (152, 134, 85), (164, 135, 91), (152, 152, 93), (155, 166, 95),
+ (146, 157, 118), (138, 166, 102), (130, 164, 111), (133, 155, 93),
+ (113, 136, 88), (102, 131, 85), (96, 100, 60), (90, 81, 57),
+ (69, 70, 37), (59, 63, 38), (58, 49, 37), (49, 39, 39),
+ (43, 36, 32), (33, 23, 30), (27, 17, 30), (27, 19, 31),
+ (26, 23, 29), (24, 20, 27), (26, 21, 29), (33, 24, 32),
+ (45, 32, 37), (51, 45, 46), (70, 66, 62), (108, 94, 78),
+ (174, 107, 74), (205, 144, 56), (210, 171, 78), (205, 194, 148),
+ (211, 201, 178), (205, 226, 197), (195, 210, 202), (183, 207, 199),
+ (178, 206, 195), (162, 203, 184), (156, 195, 177), (158, 187, 169),
+ (152, 186, 156), (152, 162, 151), (143, 143, 137), (147, 147, 111),
+ (125, 138, 102), (125, 124, 97), (122, 132, 68), (109, 114, 62),
+ (92, 94, 49), (82, 73, 41), (72, 55, 49), (69, 50, 39),
+ (67, 49, 47), (69, 62, 60), (70, 70, 80), (84, 93, 100),
+ (96, 132, 114), (106, 133, 125), (113, 130, 123), (117, 128, 114),
+ (136, 138, 123), (143, 160, 126), (151, 174, 128), (157, 188, 118),
+ (165, 184, 135), (173, 203, 155), (186, 219, 163), (198, 226, 180),
+ (195, 244, 191), (203, 247, 199), (207, 238, 196), (205, 244, 226),
+ (221, 248, 232), (236, 250, 236), (222, 247, 232), (207, 230, 212),
+ (190, 212, 200), (165, 190, 191), (136, 162, 173), (107, 133, 128),
+ (96, 116, 109), (92, 105, 77), (76, 72, 69), (89, 76, 60),
+ (100, 92, 76), (120, 118, 98), (150, 164, 137), (167, 198, 158),
+ (188, 218, 157), (209, 237, 162), (215, 244, 184), (222, 254, 212),
+ (236, 253, 238), (246, 253, 239), (252, 252, 241), (251, 254, 243),
+ (248, 252, 241), (243, 251, 238), (242, 240, 224), (239, 239, 213),
+ (211, 229, 209), (224, 229, 197), (215, 229, 179), (203, 228, 197),
+ (190, 220, 180), (182, 218, 163), (159, 197, 139), (133, 167, 129),
+ (120, 145, 128), (106, 130, 110), (79, 82, 94), (64, 64, 70),
+ (52, 44, 57), (42, 31, 43), (39, 42, 46), (58, 59, 61),
+ (76, 73, 84), (108, 107, 114), (140, 148, 145), (169, 178, 165),
+ (195, 205, 186), (213, 227, 209), (218, 244, 225), (241, 253, 215),
+ (241, 254, 212), (239, 248, 180), (233, 247, 175), (223, 225, 171),
+ (183, 192, 147), (152, 143, 122), (123, 118, 103), (105, 112, 95),
+ (90, 89, 94), (76, 77, 89), (79, 88, 98), (96, 110, 112),
+ (116, 116, 116), (134, 134, 134), (144, 156, 164), (138, 166, 175),
+ (153, 184, 183), (166, 201, 161), (174, 218, 170), (179, 215, 175),
+ (182, 191, 169), (171, 184, 169), (149, 164, 168), (136, 158, 163),
+ (116, 131, 127), (92, 120, 99), (78, 101, 65), (77, 78, 61),
+ (66, 68, 48), (66, 67, 44), (75, 72, 52), (92, 77, 66),
+ (153, 100, 68), (178, 87, 59), (168, 60, 50), (152, 53, 43),
+ (92, 77, 50), (79, 68, 52), (68, 59, 66), (63, 59, 72),
+ (57, 71, 73), (79, 83, 91), (111, 110, 95), (134, 120, 91),
+ (182, 74, 55), (189, 30, 39), (189, 28, 37), (167, 26, 34),
+ (159, 32, 36), (97, 36, 37), (63, 36, 40), (48, 27, 36),
+ (40, 23, 24), (32, 22, 16), (24, 17, 23), (22, 17, 25),
+ (23, 17, 25), (24, 20, 27), (24, 19, 24), (26, 19, 26),
+ (30, 18, 26), (33, 16, 29), (36, 19, 27), (33, 19, 27),
+ (35, 22, 27), (45, 27, 21), (50, 34, 37), (49, 44, 43),
+ (64, 53, 45), (80, 69, 52), (92, 94, 68), (127, 123, 85)
+ ),
+
+// 18 unhealthy-tan
+((218, 205, 192), (223, 205, 183), (219, 202, 177), (205, 193, 171),
+ (206, 186, 157), (189, 170, 147), (173, 151, 130), (163, 143, 129),
+ (160, 142, 119), (156, 141, 120), (159, 150, 133), (168, 161, 143),
+ (183, 172, 164), (211, 200, 191), (216, 206, 199), (218, 212, 211),
+ (220, 213, 206), (222, 213, 203), (223, 209, 199), (212, 203, 192),
+ (205, 194, 176), (198, 180, 151), (187, 160, 127), (173, 141, 106),
+ (153, 126, 101), (130, 108, 88), (104, 96, 79), (88, 76, 64),
+ (72, 59, 51), (67, 48, 48), (63, 42, 44), (58, 35, 38),
+ (60, 41, 45), (64, 46, 45), (76, 56, 50), (80, 60, 53),
+ (92, 66, 57), (96, 70, 58), (99, 77, 64), (105, 84, 67),
+ (114, 91, 71), (118, 97, 79), (121, 104, 84), (123, 105, 82),
+ (114, 101, 82), (113, 96, 72), (113, 89, 64), (113, 81, 60),
+ (108, 67, 51), (102, 65, 52), (88, 63, 53), (79, 54, 49),
+ (74, 48, 48), (65, 46, 47), (69, 46, 44), (68, 41, 43),
+ (70, 46, 46), (73, 48, 49), (77, 54, 52), (77, 58, 54),
+ (90, 70, 59), (93, 76, 64), (97, 85, 67), (101, 93, 81),
+ (115, 106, 87), (125, 112, 97), (141, 124, 97), (147, 121, 104),
+ (146, 120, 104), (138, 114, 91), (134, 109, 85), (122, 96, 75),
+ (111, 83, 66), (106, 70, 62), (102, 65, 53), (92, 58, 51),
+ (83, 49, 49), (83, 48, 46), (83, 54, 49), (94, 66, 56),
+ (99, 70, 54), (103, 75, 58), (108, 79, 63), (113, 85, 64),
+ (119, 90, 72), (123, 98, 76), (128, 102, 78), (130, 107, 78),
+ (131, 108, 79), (132, 104, 79), (131, 100, 79), (135, 99, 73),
+ (135, 98, 71), (131, 100, 70), (124, 94, 70), (118, 91, 71),
+ (114, 93, 70), (105, 96, 69), (105, 90, 67), (105, 86, 64),
+ (104, 81, 63), (103, 75, 62), (94, 73, 56), (88, 72, 58),
+ (85, 74, 59), (92, 70, 60), (87, 74, 60), (96, 79, 62),
+ (101, 87, 70), (112, 102, 77), (124, 107, 84), (133, 108, 87),
+ (143, 114, 92), (148, 119, 99), (149, 124, 104), (149, 124, 106),
+ (150, 131, 104), (165, 140, 109), (175, 148, 113), (189, 164, 131),
+ (199, 178, 144), (202, 182, 160), (209, 192, 178), (214, 202, 191),
+ (220, 210, 194), (219, 207, 192), (222, 204, 181), (208, 192, 165),
+ (196, 169, 138), (184, 153, 118), (176, 142, 104), (165, 129, 92),
+ (155, 115, 75), (142, 110, 77), (136, 108, 82), (136, 108, 84),
+ (134, 110, 84), (134, 115, 87), (136, 116, 90), (146, 123, 95),
+ (148, 126, 98), (149, 127, 102), (149, 125, 101), (149, 127, 97),
+ (150, 125, 99), (148, 124, 97), (140, 120, 92), (136, 118, 86),
+ (131, 118, 86), (129, 109, 85), (128, 108, 85), (125, 108, 89),
+ (126, 107, 97), (131, 112, 95), (140, 126, 101), (153, 135, 112),
+ (171, 147, 118), (195, 164, 136), (204, 177, 144), (199, 179, 149),
+ (201, 185, 160), (199, 184, 162), (182, 170, 153), (172, 156, 140),
+ (158, 148, 125), (144, 139, 121), (132, 125, 112), (129, 121, 100),
+ (124, 110, 92), (112, 100, 84), (104, 84, 68), (100, 76, 67),
+ (98, 75, 63), (94, 76, 60), (94, 76, 60), (94, 73, 60),
+ (102, 78, 61), (111, 81, 65), (113, 89, 65), (123, 93, 71),
+ (128, 101, 78), (132, 108, 80), (133, 108, 84), (130, 109, 80),
+ (123, 102, 78), (117, 101, 75), (112, 94, 71), (106, 86, 67),
+ (106, 82, 65), (109, 82, 60), (111, 84, 57), (113, 84, 57),
+ (118, 88, 57), (121, 92, 64), (125, 98, 69), (129, 106, 74),
+ (132, 109, 79), (143, 119, 82), (162, 125, 87), (168, 133, 95),
+ (162, 140, 115), (158, 144, 132), (156, 152, 147), (155, 152, 150),
+ (161, 159, 156), (183, 168, 159), (188, 174, 151), (190, 171, 145),
+ (194, 170, 143), (193, 173, 146), (193, 167, 145), (188, 163, 138),
+ (180, 155, 124), (162, 140, 118), (148, 123, 100), (137, 106, 85),
+ (130, 99, 76), (123, 94, 68), (124, 91, 62), (121, 89, 64),
+ (123, 91, 64), (126, 94, 69), (131, 97, 75), (128, 98, 75),
+ (123, 96, 72), (117, 94, 66), (117, 92, 65), (111, 89, 63),
+ (102, 83, 63), (90, 75, 60), (84, 66, 59), (79, 55, 55),
+ (72, 49, 52), (71, 46, 48), (72, 46, 48), (75, 50, 48),
+ (79, 54, 52), (92, 62, 53), (99, 67, 54), (109, 75, 59),
+ (122, 79, 55), (126, 89, 63), (132, 94, 67), (136, 97, 67),
+ (138, 102, 70), (135, 106, 80), (139, 114, 91), (152, 126, 96),
+ (163, 130, 101), (159, 134, 104), (162, 141, 109), (168, 136, 101),
+ (152, 132, 103), (151, 123, 95), (142, 115, 83), (138, 108, 78)
+ ),
+
+// 19 daffodil
+((17, 0, 0), (54, 34, 22), (92, 62, 28), (128, 122, 46),
+ (214, 134, 0), (248, 152, 0), (242, 157, 5), (225, 157, 5),
+ (172, 143, 56), (133, 110, 56), (90, 90, 51), (65, 65, 46),
+ (66, 54, 43), (54, 54, 47), (37, 51, 45), (34, 49, 34),
+ (34, 60, 28), (39, 52, 36), (34, 45, 28), (51, 51, 30),
+ (49, 49, 32), (54, 49, 32), (49, 45, 26), (45, 39, 17),
+ (34, 28, 11), (22, 22, 11), (17, 17, 11), (17, 17, 5),
+ (17, 5, 5), (11, 5, 11), (5, 11, 11), (5, 5, 5),
+ (5, 0, 0), (5, 0, 0), (11, 5, 5), (11, 5, 5),
+ (11, 5, 5), (11, 5, 5), (11, 5, 0), (11, 5, 5),
+ (11, 0, 0), (11, 0, 0), (17, 0, 0), (17, 5, 0),
+ (28, 5, 5), (47, 22, 11), (75, 43, 20), (114, 83, 46),
+ (186, 134, 50), (239, 146, 11), (254, 146, 0), (237, 152, 5),
+ (210, 135, 28), (114, 101, 43), (68, 66, 22), (54, 60, 32),
+ (45, 56, 34), (51, 60, 28), (51, 54, 28), (47, 51, 24),
+ (54, 49, 15), (54, 49, 11), (51, 28, 5), (43, 26, 0),
+ (28, 22, 0), (22, 17, 0), (28, 34, 0), (30, 45, 15),
+ (43, 41, 15), (45, 45, 22), (49, 45, 22), (51, 45, 22),
+ (47, 37, 22), (45, 39, 22), (32, 32, 20), (28, 17, 17),
+ (22, 11, 11), (17, 11, 11), (17, 11, 11), (17, 17, 17),
+ (17, 17, 17), (17, 22, 17), (17, 20, 15), (17, 22, 5),
+ (17, 17, 0), (17, 11, 0), (17, 5, 5), (22, 11, 5),
+ (24, 9, 9), (28, 17, 11), (34, 22, 11), (41, 28, 17),
+ (45, 39, 22), (51, 53, 29), (68, 62, 34), (101, 78, 56),
+ (155, 116, 65), (220, 151, 73), (242, 157, 39), (254, 186, 39),
+ (248, 203, 33), (248, 191, 27), (248, 163, 11), (254, 134, 0),
+ (254, 129, 0), (212, 95, 0), (127, 62, 28), (77, 59, 25),
+ (60, 58, 32), (60, 63, 35), (68, 79, 45), (85, 93, 59),
+ (96, 96, 56), (103, 81, 92), (82, 124, 147), (60, 111, 139),
+ (45, 73, 131), (49, 83, 83), (51, 62, 68), (58, 52, 52),
+ (49, 43, 43), (35, 36, 36), (34, 34, 22), (22, 22, 20),
+ (22, 22, 26), (22, 17, 26), (22, 17, 17), (22, 17, 11),
+ (22, 22, 17), (22, 22, 17), (26, 32, 20), (28, 34, 22),
+ (34, 45, 26), (49, 49, 37), (56, 56, 49), (77, 71, 66),
+ (109, 112, 92), (120, 160, 159), (180, 186, 180), (218, 224, 190),
+ (239, 233, 205), (207, 218, 178), (158, 168, 123), (127, 155, 96),
+ (107, 113, 90), (66, 77, 66), (54, 79, 54), (49, 69, 49),
+ (56, 68, 36), (39, 72, 48), (49, 86, 63), (90, 102, 79),
+ (139, 133, 94), (179, 179, 122), (237, 214, 157), (246, 235, 189),
+ (248, 225, 163), (248, 208, 129), (248, 208, 73), (254, 197, 44),
+ (254, 197, 44), (248, 185, 56), (208, 180, 73), (189, 155, 59),
+ (152, 141, 79), (127, 138, 73), (138, 144, 67), (135, 141, 79),
+ (150, 156, 94), (177, 148, 103), (214, 180, 118), (246, 217, 161),
+ (244, 198, 159), (246, 229, 178), (254, 237, 180), (254, 237, 180),
+ (246, 223, 172), (171, 191, 142), (147, 152, 118), (147, 141, 107),
+ (135, 141, 107), (149, 131, 104), (158, 141, 108), (152, 141, 118),
+ (156, 154, 128), (188, 165, 154), (231, 208, 169), (248, 226, 186),
+ (248, 226, 197), (208, 225, 197), (175, 179, 152), (151, 145, 117),
+ (119, 124, 96), (86, 100, 66), (62, 85, 51), (45, 71, 22),
+ (49, 64, 26), (60, 69, 25), (101, 87, 50), (145, 113, 56),
+ (214, 135, 28), (248, 163, 16), (248, 169, 22), (254, 174, 16),
+ (254, 180, 11), (254, 180, 16), (242, 174, 11), (254, 168, 5),
+ (254, 157, 0), (254, 151, 0), (254, 157, 0), (254, 174, 0),
+ (254, 186, 0), (254, 191, 16), (242, 197, 28), (196, 178, 60),
+ (152, 130, 68), (113, 124, 59), (100, 100, 56), (68, 79, 59),
+ (53, 60, 39), (49, 37, 32), (39, 28, 22), (34, 17, 17),
+ (28, 22, 17), (34, 22, 11), (34, 32, 11), (49, 37, 15),
+ (56, 39, 28), (60, 47, 32), (77, 57, 31), (90, 80, 48),
+ (107, 116, 65), (164, 118, 84), (188, 148, 109), (197, 152, 107),
+ (231, 197, 129), (197, 174, 95), (158, 152, 95), (133, 121, 65),
+ (111, 82, 71), (90, 60, 54), (92, 75, 47), (110, 70, 42),
+ (132, 88, 50), (186, 112, 50), (220, 129, 28), (224, 117, 22),
+ (180, 95, 28), (102, 60, 34), (60, 60, 20), (43, 52, 15),
+ (26, 43, 5), (17, 31, 0), (11, 28, 5), (28, 22, 17)
+ ),
+
+// 20 rose
+((113, 33, 37), (84, 23, 37), (55, 27, 28), (36, 40, 18),
+ (32, 56, 9), (60, 77, 18), (56, 101, 27), (60, 81, 28),
+ (52, 89, 18), (48, 85, 28), (40, 68, 28), (40, 56, 28),
+ (40, 52, 28), (76, 30, 28), (105, 18, 18), (121, 22, 19),
+ (125, 21, 28), (105, 22, 28), (84, 19, 28), (56, 23, 28),
+ (36, 36, 28), (32, 40, 28), (28, 36, 18), (28, 32, 18),
+ (27, 32, 9), (48, 27, 9), (77, 22, 9), (101, 15, 9),
+ (137, 14, 9), (150, 21, 19), (162, 28, 38), (178, 38, 57),
+ (166, 35, 86), (166, 39, 86), (178, 44, 86), (178, 47, 95),
+ (174, 68, 113), (170, 182, 170), (177, 190, 188), (181, 198, 179),
+ (166, 170, 160), (182, 52, 105), (198, 44, 96), (166, 31, 86),
+ (154, 30, 67), (146, 29, 47), (129, 25, 28), (101, 22, 18),
+ (68, 22, 18), (52, 23, 18), (36, 36, 18), (28, 36, 18),
+ (32, 44, 18), (36, 48, 18), (40, 56, 28), (52, 60, 28),
+ (52, 73, 28), (64, 73, 28), (101, 26, 28), (125, 25, 28),
+ (141, 22, 28), (129, 18, 28), (109, 21, 28), (76, 26, 28),
+ (48, 52, 37), (60, 72, 28), (73, 97, 47), (77, 109, 85),
+ (92, 133, 122), (100, 133, 132), (96, 133, 131), (85, 113, 85),
+ (93, 96, 47), (93, 117, 47), (113, 108, 37), (125, 63, 47),
+ (141, 29, 38), (146, 25, 28), (146, 22, 28), (146, 25, 38),
+ (146, 25, 57), (150, 26, 66), (158, 30, 76), (158, 35, 86),
+ (162, 27, 86), (166, 27, 86), (158, 34, 76), (153, 34, 57),
+ (141, 29, 47), (121, 33, 37), (76, 59, 37), (48, 60, 37),
+ (28, 56, 28), (28, 40, 18), (20, 28, 18), (20, 24, 18),
+ (23, 24, 18), (24, 32, 28), (28, 36, 37), (40, 39, 37),
+ (64, 23, 28), (101, 22, 28), (141, 19, 38), (146, 22, 47),
+ (150, 21, 47), (158, 26, 57), (150, 22, 47), (150, 21, 57),
+ (146, 22, 47), (141, 18, 38), (137, 21, 28), (137, 22, 28),
+ (133, 21, 28), (133, 21, 18), (113, 18, 9), (133, 20, 18),
+ (141, 21, 19), (146, 21, 28), (150, 21, 28), (154, 28, 28),
+ (158, 24, 28), (150, 28, 28), (154, 28, 38), (166, 33, 48),
+ (166, 25, 48), (154, 22, 47), (158, 30, 57), (162, 31, 67),
+ (162, 43, 76), (157, 140, 56), (129, 170, 103), (166, 186, 169),
+ (181, 189, 198), (173, 189, 207), (169, 185, 188), (154, 170, 170),
+ (182, 52, 133), (178, 44, 115), (178, 40, 105), (182, 56, 114),
+ (150, 170, 160), (165, 186, 188), (165, 185, 188), (112, 158, 160),
+ (104, 133, 113), (76, 113, 75), (85, 92, 47), (133, 30, 38),
+ (150, 29, 28), (158, 28, 28), (158, 29, 28), (170, 25, 28),
+ (166, 37, 38), (157, 30, 48), (150, 26, 57), (146, 22, 66),
+ (150, 34, 67), (150, 33, 57), (150, 25, 47), (146, 22, 47),
+ (146, 19, 38), (137, 21, 28), (109, 21, 28), (72, 19, 28),
+ (48, 27, 28), (43, 40, 37), (36, 44, 28), (36, 52, 28),
+ (48, 60, 37), (52, 77, 37), (52, 81, 47), (60, 77, 56),
+ (60, 85, 56), (77, 109, 66), (77, 125, 65), (77, 133, 56),
+ (93, 141, 46), (101, 146, 66), (93, 133, 74), (81, 129, 83),
+ (105, 137, 75), (109, 162, 94), (113, 158, 84), (121, 162, 85),
+ (142, 154, 66), (113, 141, 75), (109, 129, 56), (101, 121, 47),
+ (109, 137, 47), (97, 121, 37), (81, 117, 37), (73, 97, 28),
+ (81, 93, 18), (109, 25, 28), (129, 25, 28), (141, 25, 28),
+ (141, 22, 28), (141, 22, 28), (141, 21, 28), (137, 21, 37),
+ (93, 19, 28), (68, 19, 28), (51, 19, 28), (24, 24, 37),
+ (23, 24, 28), (24, 24, 18), (24, 24, 18), (27, 24, 18),
+ (28, 24, 18), (47, 23, 28), (63, 23, 28), (88, 19, 28),
+ (121, 18, 19), (133, 24, 19), (146, 21, 28), (146, 21, 28),
+ (146, 21, 28), (146, 18, 28), (146, 18, 28), (146, 18, 28),
+ (146, 17, 28), (146, 18, 28), (146, 21, 28), (146, 21, 19),
+ (146, 21, 19), (146, 17, 19), (141, 21, 19), (141, 21, 19),
+ (141, 21, 19), (133, 21, 19), (129, 21, 19), (109, 18, 18),
+ (80, 26, 18), (56, 27, 18), (32, 32, 18), (28, 28, 18),
+ (32, 32, 18), (56, 19, 18), (80, 19, 18), (113, 22, 28),
+ (146, 26, 57), (154, 34, 67), (161, 51, 85), (107, 133, 132),
+ (150, 174, 170), (165, 186, 179), (154, 174, 170), (124, 154, 122),
+ (170, 55, 85), (174, 39, 67), (182, 55, 66), (170, 37, 47),
+ (158, 32, 38), (145, 26, 38), (125, 25, 28), (68, 23, 28)
+ ),
+
+// 21 healthy-skin
+((250, 225, 235), (194, 165, 188), (157, 133, 141), (137, 100, 94),
+ (96, 60, 47), (72, 43, 28), (60, 35, 28), (52, 23, 18),
+ (35, 16, 9), (35, 16, 9), (35, 16, 9), (32, 8, 0),
+ (31, 12, 9), (24, 12, 9), (35, 16, 18), (40, 19, 28),
+ (56, 27, 28), (80, 39, 47), (113, 64, 65), (141, 84, 75),
+ (166, 95, 85), (182, 107, 94), (186, 107, 94), (190, 111, 94),
+ (186, 111, 94), (182, 111, 85), (154, 92, 66), (141, 88, 47),
+ (105, 68, 46), (81, 51, 18), (56, 27, 18), (52, 23, 9),
+ (35, 16, 18), (27, 12, 18), (24, 8, 18), (0, 0, 0),
+ (0, 0, 0), (24, 4, 18), (35, 8, 18), (44, 12, 18),
+ (44, 20, 18), (44, 19, 18), (40, 12, 18), (52, 19, 18),
+ (52, 19, 28), (40, 16, 28), (35, 12, 28), (39, 16, 28),
+ (52, 23, 28), (56, 27, 28), (68, 39, 28), (76, 48, 47),
+ (101, 64, 65), (133, 100, 84), (158, 112, 94), (186, 119, 94),
+ (198, 136, 113), (206, 152, 132), (210, 157, 141), (226, 161, 160),
+ (238, 164, 160), (238, 180, 169), (246, 184, 169), (250, 184, 169),
+ (246, 180, 159), (242, 172, 150), (250, 160, 141), (242, 152, 122),
+ (242, 148, 122), (234, 144, 113), (234, 144, 122), (222, 145, 132),
+ (214, 149, 132), (214, 149, 122), (219, 149, 122), (210, 165, 132),
+ (219, 165, 141), (234, 172, 150), (238, 176, 150), (238, 176, 150),
+ (246, 176, 140), (250, 164, 141), (242, 160, 131), (234, 156, 113),
+ (234, 144, 103), (219, 128, 94), (214, 123, 85), (210, 119, 94),
+ (214, 124, 103), (226, 140, 113), (238, 152, 131), (238, 164, 141),
+ (238, 164, 150), (234, 160, 150), (238, 156, 141), (242, 148, 141),
+ (219, 141, 132), (210, 136, 122), (198, 119, 104), (194, 119, 103),
+ (182, 103, 94), (174, 103, 85), (170, 95, 75), (166, 88, 85),
+ (150, 88, 85), (149, 92, 75), (146, 96, 85), (141, 88, 75),
+ (121, 76, 65), (96, 60, 56), (84, 52, 47), (80, 47, 37),
+ (84, 51, 28), (92, 60, 37), (113, 60, 47), (137, 84, 56),
+ (166, 95, 75), (182, 115, 85), (186, 128, 104), (206, 157, 132),
+ (222, 165, 151), (238, 184, 169), (246, 197, 206), (246, 213, 244),
+ (234, 226, 254), (242, 226, 244), (214, 202, 207), (219, 169, 160),
+ (214, 149, 132), (219, 145, 122), (210, 137, 113), (214, 128, 113),
+ (210, 120, 104), (202, 124, 103), (206, 128, 113), (198, 119, 104),
+ (194, 107, 94), (178, 99, 85), (158, 84, 75), (154, 80, 75),
+ (137, 68, 66), (125, 68, 65), (125, 64, 56), (137, 72, 56),
+ (146, 84, 56), (158, 107, 75), (166, 111, 85), (182, 128, 103),
+ (202, 153, 141), (222, 185, 169), (246, 209, 188), (246, 222, 244),
+ (250, 226, 244), (246, 221, 244), (230, 205, 225), (206, 202, 198),
+ (226, 185, 179), (238, 184, 169), (234, 172, 150), (210, 161, 122),
+ (210, 141, 113), (190, 111, 94), (170, 103, 85), (146, 84, 75),
+ (117, 60, 56), (96, 47, 47), (80, 43, 37), (72, 39, 37),
+ (76, 43, 47), (96, 60, 47), (113, 76, 56), (141, 92, 66),
+ (162, 116, 94), (182, 140, 113), (190, 161, 150), (198, 157, 179),
+ (206, 169, 179), (210, 173, 170), (206, 160, 151), (194, 153, 151),
+ (194, 148, 151), (166, 133, 122), (149, 120, 113), (129, 104, 103),
+ (125, 100, 103), (101, 80, 84), (84, 56, 47), (80, 56, 37),
+ (88, 47, 37), (101, 56, 47), (121, 72, 56), (154, 88, 66),
+ (186, 115, 94), (202, 145, 132), (218, 161, 160), (230, 172, 169),
+ (226, 181, 188), (205, 185, 207), (202, 185, 198), (178, 174, 170),
+ (161, 137, 141), (133, 112, 113), (129, 84, 84), (100, 68, 56),
+ (84, 51, 47), (72, 39, 37), (72, 39, 28), (80, 43, 28),
+ (92, 64, 47), (117, 88, 75), (133, 112, 94), (170, 128, 103),
+ (186, 157, 141), (186, 165, 151), (186, 157, 160), (169, 149, 160),
+ (170, 137, 132), (170, 120, 104), (178, 111, 94), (186, 107, 94),
+ (194, 107, 85), (198, 111, 85), (186, 115, 85), (178, 111, 85),
+ (178, 107, 85), (178, 95, 56), (149, 63, 37), (101, 52, 47),
+ (84, 39, 37), (72, 31, 28), (72, 27, 28), (60, 27, 28),
+ (48, 31, 28), (56, 31, 28), (68, 35, 28), (68, 35, 28),
+ (80, 39, 28), (89, 56, 37), (113, 76, 56), (137, 96, 75),
+ (157, 120, 94), (178, 140, 103), (202, 153, 132), (198, 149, 141),
+ (198, 145, 132), (198, 128, 104), (194, 119, 94), (174, 103, 85),
+ (146, 104, 85), (145, 100, 85), (145, 104, 85), (153, 112, 103),
+ (170, 112, 103), (194, 119, 94), (214, 132, 94), (230, 140, 103)
+ ),
+
+// 22 orange
+((123, 106, 57), (97, 100, 60), (91, 83, 58), (70, 74, 54),
+ (70, 71, 53), (59, 68, 51), (59, 56, 32), (54, 61, 44),
+ (57, 72, 57), (67, 74, 62), (81, 97, 76), (95, 114, 91),
+ (109, 114, 82), (115, 113, 84), (112, 120, 98), (128, 131, 98),
+ (130, 137, 106), (134, 142, 106), (150, 151, 107), (149, 150, 114),
+ (149, 152, 123), (148, 156, 135), (170, 161, 127), (188, 121, 129),
+ (228, 101, 100), (234, 92, 73), (224, 66, 57), (195, 72, 57),
+ (121, 65, 36), (86, 54, 32), (75, 73, 38), (29, 34, 39),
+ (54, 52, 52), (53, 57, 62), (60, 78, 68), (63, 69, 77),
+ (64, 89, 73), (84, 105, 77), (84, 114, 95), (98, 122, 108),
+ (120, 143, 125), (132, 158, 138), (138, 165, 137), (139, 162, 137),
+ (154, 153, 159), (178, 155, 163), (176, 154, 155), (183, 159, 157),
+ (187, 171, 130), (169, 174, 143), (165, 183, 130), (170, 171, 138),
+ (175, 179, 129), (159, 175, 124), (155, 156, 122), (143, 142, 110),
+ (131, 129, 116), (125, 128, 116), (127, 121, 131), (119, 119, 134),
+ (115, 118, 132), (121, 139, 133), (123, 138, 124), (124, 141, 130),
+ (136, 154, 141), (140, 148, 158), (131, 149, 158), (91, 155, 182),
+ (100, 132, 171), (83, 129, 184), (82, 128, 193), (85, 149, 207),
+ (93, 183, 236), (113, 192, 242), (137, 196, 237), (127, 191, 237),
+ (119, 187, 234), (114, 170, 214), (109, 156, 197), (144, 153, 173),
+ (153, 147, 160), (169, 161, 168), (175, 185, 189), (158, 196, 225),
+ (143, 193, 219), (161, 186, 214), (179, 185, 193), (199, 168, 158),
+ (225, 119, 116), (235, 102, 114), (230, 100, 108), (217, 112, 120),
+ (176, 143, 147), (141, 135, 141), (113, 145, 147), (95, 128, 153),
+ (103, 125, 146), (112, 129, 127), (122, 133, 106), (135, 148, 97),
+ (144, 134, 85), (163, 136, 81), (160, 143, 93), (198, 163, 73),
+ (220, 178, 61), (213, 162, 67), (201, 149, 50), (161, 119, 68),
+ (186, 108, 93), (166, 138, 99), (152, 149, 140), (156, 158, 164),
+ (142, 180, 213), (138, 181, 225), (117, 187, 236), (90, 177, 233),
+ (83, 153, 201), (111, 136, 164), (136, 113, 115), (187, 103, 92),
+ (236, 100, 67), (228, 75, 48), (247, 68, 36), (248, 69, 32),
+ (241, 64, 42), (233, 68, 41), (218, 64, 51), (136, 85, 64),
+ (96, 85, 68), (100, 103, 79), (91, 100, 77), (106, 99, 68),
+ (121, 113, 71), (136, 148, 79), (147, 152, 81), (158, 154, 91),
+ (191, 168, 101), (200, 179, 97), (190, 173, 101), (185, 175, 112),
+ (177, 194, 115), (172, 183, 132), (175, 191, 149), (149, 177, 132),
+ (136, 156, 131), (125, 139, 122), (107, 132, 119), (97, 119, 102),
+ (89, 109, 92), (84, 92, 72), (75, 75, 66), (79, 80, 73),
+ (76, 91, 73), (77, 106, 93), (76, 101, 107), (92, 121, 107),
+ (98, 125, 119), (112, 148, 137), (139, 170, 156), (150, 187, 213),
+ (144, 193, 230), (145, 192, 228), (146, 191, 222), (167, 180, 181),
+ (158, 185, 154), (157, 177, 121), (155, 160, 89), (158, 168, 78),
+ (172, 175, 93), (186, 158, 73), (186, 158, 73), (181, 153, 84),
+ (151, 157, 88), (133, 154, 91), (130, 151, 99), (132, 147, 98),
+ (126, 139, 105), (123, 129, 103), (106, 111, 96), (84, 95, 105),
+ (74, 81, 89), (71, 64, 92), (77, 73, 81), (90, 101, 83),
+ (96, 100, 90), (105, 105, 97), (115, 114, 97), (117, 122, 95),
+ (134, 137, 83), (136, 138, 55), (150, 126, 52), (110, 118, 59),
+ (85, 107, 55), (89, 96, 60), (76, 76, 53), (68, 67, 37),
+ (72, 73, 59), (90, 87, 73), (115, 107, 86), (144, 110, 76),
+ (150, 121, 87), (152, 123, 95), (139, 140, 106), (132, 144, 123),
+ (141, 151, 150), (162, 158, 160), (169, 178, 175), (185, 199, 218),
+ (191, 205, 221), (185, 202, 221), (185, 195, 212), (189, 197, 144),
+ (194, 177, 136), (213, 196, 90), (220, 182, 64), (208, 164, 76),
+ (238, 106, 91), (236, 103, 85), (240, 88, 83), (239, 80, 72),
+ (239, 82, 57), (236, 68, 52), (246, 65, 43), (245, 63, 26),
+ (244, 67, 16), (244, 78, 17), (244, 82, 23), (243, 76, 23),
+ (247, 69, 28), (243, 74, 28), (244, 72, 44), (238, 86, 55),
+ (243, 75, 60), (225, 84, 71), (159, 92, 97), (124, 125, 103),
+ (113, 117, 105), (92, 113, 100), (95, 113, 101), (106, 111, 113),
+ (107, 115, 109), (110, 115, 99), (117, 123, 90), (119, 123, 75),
+ (134, 122, 81), (130, 128, 71), (132, 142, 75), (155, 155, 94),
+ (163, 164, 121), (160, 152, 148), (130, 165, 160), (107, 163, 204),
+ (94, 183, 235), (96, 188, 238), (106, 180, 234), (126, 172, 209)
+ ),
+
+// 23 white-ivy
+((242, 242, 254), (208, 231, 197), (163, 197, 152), (141, 175, 118),
+ (107, 152, 73), (96, 147, 51), (79, 124, 45), (79, 107, 28),
+ (85, 107, 22), (96, 124, 39), (107, 147, 62), (113, 164, 96),
+ (135, 169, 135), (152, 203, 152), (178, 212, 178), (208, 231, 197),
+ (220, 242, 225), (212, 246, 246), (208, 237, 254), (197, 242, 254),
+ (169, 233, 225), (169, 220, 186), (152, 208, 163), (152, 203, 152),
+ (163, 186, 152), (146, 163, 158), (156, 156, 156), (144, 158, 158),
+ (135, 152, 124), (118, 152, 118), (101, 130, 113), (82, 82, 82),
+ (58, 32, 32), (56, 28, 28), (84, 84, 39), (96, 113, 33),
+ (107, 130, 22), (118, 152, 28), (141, 175, 34), (135, 175, 67),
+ (113, 164, 90), (118, 152, 101), (112, 141, 112), (101, 137, 112),
+ (101, 135, 101), (96, 130, 96), (84, 118, 84), (67, 113, 62),
+ (56, 107, 51), (56, 107, 45), (68, 102, 34), (73, 124, 51),
+ (79, 118, 79), (107, 141, 96), (130, 164, 124), (158, 180, 141),
+ (186, 186, 169), (214, 220, 208), (239, 239, 239), (246, 246, 246),
+ (254, 254, 254), (254, 254, 254), (242, 254, 254), (242, 248, 254),
+ (237, 242, 248), (231, 242, 242), (220, 237, 203), (214, 208, 118),
+ (163, 197, 56), (169, 163, 28), (147, 169, 50), (141, 158, 84),
+ (118, 164, 118), (113, 169, 118), (107, 158, 118), (73, 141, 101),
+ (45, 128, 56), (34, 85, 34), (28, 73, 28), (28, 77, 28),
+ (45, 90, 56), (84, 118, 84), (118, 152, 118), (152, 180, 152),
+ (175, 203, 175), (197, 231, 208), (208, 231, 254), (208, 231, 254),
+ (208, 220, 254), (206, 214, 197), (192, 169, 169), (171, 180, 175),
+ (174, 208, 174), (180, 209, 180), (197, 231, 191), (220, 237, 214),
+ (237, 242, 237), (246, 246, 246), (254, 254, 254), (254, 254, 254),
+ (254, 254, 254), (242, 254, 254), (242, 254, 254), (242, 248, 254),
+ (237, 237, 248), (225, 225, 225), (231, 163, 163), (150, 112, 112),
+ (96, 84, 79), (82, 82, 82), (56, 96, 56), (50, 92, 45),
+ (34, 85, 28), (39, 90, 39), (73, 115, 73), (124, 135, 101),
+ (158, 175, 129), (163, 186, 163), (186, 209, 186), (208, 214, 254),
+ (208, 225, 254), (208, 208, 254), (174, 208, 197), (152, 192, 152),
+ (118, 152, 118), (84, 124, 79), (62, 101, 56), (28, 73, 28),
+ (5, 51, 0), (34, 0, 0), (0, 52, 0), (0, 51, 0),
+ (0, 52, 0), (11, 62, 5), (28, 79, 22), (28, 73, 28),
+ (56, 83, 11), (68, 68, 0), (45, 51, 0), (73, 96, 28),
+ (84, 101, 33), (90, 102, 28), (79, 130, 51), (90, 143, 112),
+ (90, 175, 118), (152, 203, 152), (163, 209, 186), (186, 220, 254),
+ (208, 225, 254), (220, 220, 254), (220, 220, 254), (220, 225, 254),
+ (220, 231, 254), (220, 231, 254), (231, 231, 254), (231, 231, 254),
+ (231, 231, 254), (231, 242, 254), (220, 254, 254), (208, 254, 254),
+ (208, 254, 254), (197, 254, 254), (208, 254, 254), (220, 254, 254),
+ (231, 248, 254), (231, 237, 254), (231, 231, 254), (231, 231, 254),
+ (231, 231, 254), (231, 237, 254), (231, 242, 254), (231, 242, 254),
+ (231, 242, 254), (231, 242, 254), (231, 237, 254), (231, 231, 254),
+ (231, 231, 254), (220, 237, 254), (220, 237, 254), (197, 254, 254),
+ (163, 254, 254), (140, 191, 197), (152, 175, 152), (152, 158, 129),
+ (124, 130, 90), (107, 67, 62), (124, 34, 34), (137, 45, 45),
+ (153, 51, 51), (153, 51, 51), (175, 95, 67), (141, 141, 112),
+ (135, 152, 124), (141, 163, 135), (152, 186, 152), (152, 203, 152),
+ (152, 203, 152), (163, 208, 163), (191, 225, 191), (231, 231, 231),
+ (220, 231, 254), (220, 225, 254), (220, 225, 254), (231, 231, 254),
+ (242, 242, 254), (242, 242, 254), (242, 248, 254), (242, 254, 254),
+ (254, 254, 254), (254, 254, 254), (254, 254, 254), (242, 248, 254),
+ (242, 242, 254), (231, 242, 254), (231, 242, 254), (231, 242, 254),
+ (231, 242, 231), (231, 225, 175), (220, 214, 135), (254, 169, 140),
+ (208, 197, 118), (208, 191, 112), (163, 191, 107), (107, 152, 73),
+ (96, 147, 51), (90, 141, 51), (90, 135, 39), (85, 136, 51),
+ (96, 141, 45), (101, 147, 45), (118, 141, 62), (135, 129, 78),
+ (135, 158, 107), (146, 192, 101), (146, 197, 112), (152, 197, 135),
+ (152, 203, 152), (186, 214, 186), (208, 242, 231), (220, 237, 254),
+ (231, 242, 254), (242, 242, 254), (242, 242, 254), (242, 242, 254),
+ (242, 242, 254), (242, 248, 254), (231, 254, 254), (231, 254, 254),
+ (231, 242, 254), (237, 237, 248), (214, 237, 220), (186, 220, 180),
+ (152, 203, 152), (141, 192, 84), (118, 164, 45), (96, 124, 28)
+ ),
+
+// 24 summer-makeup
+((238, 193, 141), (238, 192, 141), (238, 192, 141), (234, 193, 141),
+ (234, 193, 141), (234, 193, 141), (230, 193, 141), (230, 189, 141),
+ (226, 189, 141), (226, 193, 141), (234, 193, 141), (238, 197, 141),
+ (238, 201, 141), (234, 197, 150), (234, 193, 150), (234, 197, 150),
+ (230, 193, 150), (226, 189, 141), (222, 185, 132), (219, 177, 113),
+ (210, 144, 85), (219, 106, 75), (219, 95, 66), (190, 63, 37),
+ (150, 64, 28), (145, 47, 28), (133, 51, 37), (101, 43, 28),
+ (84, 51, 37), (80, 52, 37), (80, 56, 37), (80, 60, 47),
+ (89, 72, 56), (109, 84, 56), (125, 104, 66), (166, 107, 66),
+ (198, 136, 75), (219, 161, 94), (222, 180, 103), (226, 193, 122),
+ (226, 189, 122), (222, 180, 113), (219, 169, 103), (198, 140, 85),
+ (178, 115, 66), (158, 99, 56), (158, 88, 47), (158, 88, 56),
+ (166, 107, 56), (186, 119, 66), (202, 140, 94), (219, 173, 103),
+ (230, 180, 113), (230, 180, 122), (226, 180, 122), (219, 165, 113),
+ (202, 140, 94), (162, 103, 66), (125, 80, 56), (113, 72, 46),
+ (89, 60, 37), (76, 52, 37), (64, 48, 37), (52, 39, 28),
+ (40, 35, 28), (36, 36, 28), (32, 36, 37), (36, 36, 37),
+ (40, 35, 37), (48, 40, 37), (52, 39, 37), (48, 35, 37),
+ (52, 40, 37), (64, 48, 37), (72, 52, 37), (80, 60, 47),
+ (96, 68, 56), (97, 68, 56), (100, 68, 56), (97, 64, 56),
+ (84, 56, 56), (76, 48, 47), (68, 47, 47), (64, 48, 47),
+ (68, 48, 47), (76, 52, 47), (84, 60, 47), (101, 68, 56),
+ (117, 84, 65), (137, 88, 66), (166, 103, 66), (206, 136, 75),
+ (210, 157, 85), (222, 164, 94), (214, 156, 85), (202, 140, 85),
+ (186, 123, 66), (150, 103, 66), (121, 88, 56), (105, 76, 56),
+ (88, 60, 47), (76, 48, 47), (64, 48, 37), (56, 44, 37),
+ (60, 48, 47), (68, 48, 47), (85, 60, 47), (105, 80, 56),
+ (137, 88, 66), (154, 107, 75), (194, 140, 85), (214, 169, 113),
+ (219, 177, 122), (222, 180, 141), (137, 145, 151), (88, 104, 94),
+ (76, 68, 66), (81, 68, 65), (80, 64, 56), (76, 60, 56),
+ (80, 56, 47), (76, 52, 47), (76, 52, 56), (76, 52, 56),
+ (68, 52, 56), (56, 44, 56), (48, 39, 47), (48, 35, 47),
+ (48, 35, 37), (40, 35, 37), (39, 32, 28), (36, 32, 28),
+ (36, 32, 28), (36, 32, 28), (32, 32, 28), (31, 28, 28),
+ (28, 32, 28), (31, 32, 28), (24, 32, 28), (31, 28, 28),
+ (32, 28, 28), (35, 28, 37), (36, 32, 37), (36, 32, 37),
+ (40, 31, 28), (44, 35, 28), (52, 36, 28), (56, 39, 28),
+ (52, 35, 37), (60, 39, 37), (52, 40, 37), (48, 40, 37),
+ (48, 48, 37), (44, 40, 28), (44, 36, 28), (44, 36, 28),
+ (48, 35, 28), (56, 39, 28), (64, 39, 28), (88, 51, 37),
+ (117, 72, 46), (146, 80, 56), (166, 111, 56), (198, 136, 75),
+ (214, 164, 94), (219, 177, 113), (222, 185, 132), (226, 184, 141),
+ (226, 189, 141), (230, 193, 131), (230, 197, 131), (234, 192, 131),
+ (230, 184, 131), (222, 185, 132), (230, 184, 131), (230, 184, 131),
+ (226, 189, 132), (222, 189, 132), (234, 188, 131), (234, 184, 131),
+ (230, 184, 122), (222, 180, 113), (219, 177, 103), (210, 148, 85),
+ (194, 132, 66), (190, 106, 56), (170, 95, 56), (174, 91, 47),
+ (194, 87, 28), (194, 72, 28), (154, 76, 37), (129, 64, 37),
+ (93, 51, 37), (72, 43, 37), (68, 43, 37), (64, 48, 37),
+ (60, 52, 37), (68, 52, 37), (89, 64, 47), (113, 84, 56),
+ (145, 100, 66), (182, 127, 85), (210, 165, 94), (219, 181, 103),
+ (234, 193, 112), (234, 193, 122), (234, 188, 122), (222, 176, 113),
+ (202, 148, 94), (186, 119, 75), (170, 103, 66), (146, 92, 75),
+ (137, 92, 75), (149, 104, 75), (174, 111, 75), (186, 127, 85),
+ (202, 144, 94), (222, 169, 122), (226, 180, 141), (234, 193, 150),
+ (234, 201, 160), (234, 205, 169), (234, 201, 160), (230, 197, 150),
+ (230, 189, 141), (226, 180, 122), (214, 161, 103), (186, 135, 85),
+ (153, 104, 84), (129, 108, 84), (121, 92, 75), (121, 80, 65),
+ (113, 76, 56), (121, 72, 56), (117, 72, 46), (125, 68, 47),
+ (125, 68, 56), (109, 64, 56), (109, 60, 46), (88, 55, 47),
+ (84, 43, 47), (72, 43, 47), (60, 44, 37), (52, 44, 37),
+ (44, 40, 37), (40, 35, 28), (36, 36, 28), (36, 36, 37),
+ (40, 35, 37), (44, 44, 37), (52, 48, 47), (80, 60, 47),
+ (109, 68, 46), (129, 84, 47), (158, 99, 66), (186, 119, 75)
+ ),
+
+// 25 glow-buzz
+((182, 91, 37), (141, 84, 37), (121, 68, 46), (93, 60, 46),
+ (76, 48, 37), (72, 43, 37), (80, 48, 47), (101, 60, 46),
+ (137, 68, 47), (162, 76, 47), (178, 95, 56), (182, 102, 56),
+ (182, 99, 47), (182, 87, 47), (194, 84, 56), (198, 84, 56),
+ (190, 87, 66), (174, 87, 56), (146, 76, 56), (117, 60, 47),
+ (88, 51, 37), (64, 39, 28), (52, 27, 28), (44, 24, 28),
+ (40, 24, 28), (40, 23, 28), (40, 23, 28), (40, 23, 28),
+ (44, 27, 28), (52, 31, 28), (60, 39, 28), (84, 47, 37),
+ (109, 51, 47), (133, 59, 56), (162, 64, 56), (178, 68, 47),
+ (190, 68, 56), (198, 72, 47), (198, 72, 47), (198, 72, 47),
+ (190, 68, 47), (178, 68, 47), (166, 68, 47), (149, 71, 37),
+ (129, 64, 37), (100, 60, 28), (92, 47, 37), (76, 43, 37),
+ (72, 48, 37), (76, 52, 47), (100, 56, 56), (133, 76, 56),
+ (154, 80, 47), (178, 87, 47), (178, 80, 47), (158, 80, 47),
+ (141, 68, 47), (113, 60, 46), (96, 56, 47), (84, 47, 56),
+ (84, 48, 47), (92, 55, 47), (100, 51, 46), (96, 51, 47),
+ (92, 55, 47), (84, 56, 47), (93, 60, 47), (84, 52, 37),
+ (76, 52, 28), (72, 40, 18), (64, 35, 28), (56, 31, 28),
+ (48, 32, 37), (44, 35, 37), (48, 31, 37), (56, 35, 37),
+ (48, 36, 37), (56, 35, 37), (64, 35, 37), (60, 39, 47),
+ (60, 35, 47), (56, 35, 37), (52, 35, 28), (48, 31, 28),
+ (48, 31, 28), (44, 31, 28), (44, 31, 28), (44, 28, 28),
+ (40, 27, 28), (44, 28, 28), (56, 31, 37), (64, 43, 47),
+ (80, 43, 56), (100, 60, 56), (137, 76, 65), (178, 102, 56),
+ (210, 123, 66), (198, 144, 75), (214, 148, 75), (219, 157, 75),
+ (222, 160, 75), (222, 168, 84), (250, 179, 74), (250, 191, 65),
+ (246, 183, 56), (242, 183, 65), (238, 168, 56), (230, 152, 47),
+ (242, 159, 56), (219, 145, 75), (214, 128, 122), (222, 176, 169),
+ (190, 169, 122), (254, 212, 121), (250, 225, 150), (254, 212, 93),
+ (254, 221, 84), (250, 213, 93), (254, 217, 84), (250, 200, 74),
+ (254, 212, 84), (246, 208, 74), (254, 208, 74), (254, 191, 56),
+ (254, 178, 46), (234, 167, 46), (222, 149, 47), (210, 145, 56),
+ (206, 127, 56), (194, 106, 56), (190, 106, 56), (198, 91, 56),
+ (190, 91, 47), (186, 106, 56), (198, 119, 47), (219, 132, 56),
+ (230, 119, 56), (230, 110, 47), (230, 123, 47), (234, 148, 56),
+ (250, 166, 56), (250, 175, 56), (250, 179, 56), (250, 179, 56),
+ (238, 171, 56), (219, 153, 66), (230, 152, 56), (210, 140, 47),
+ (194, 106, 47), (174, 83, 37), (162, 72, 37), (154, 72, 47),
+ (166, 76, 47), (170, 84, 47), (170, 91, 47), (182, 95, 47),
+ (186, 84, 56), (198, 87, 56), (210, 102, 56), (226, 110, 56),
+ (226, 98, 47), (226, 102, 56), (222, 87, 56), (214, 83, 56),
+ (202, 84, 56), (194, 84, 56), (182, 80, 56), (162, 72, 56),
+ (146, 76, 47), (137, 64, 47), (125, 64, 47), (109, 56, 56),
+ (113, 56, 56), (129, 64, 56), (146, 76, 56), (166, 72, 56),
+ (182, 76, 56), (194, 72, 47), (182, 80, 56), (186, 72, 37),
+ (186, 59, 28), (194, 72, 37), (206, 72, 47), (206, 83, 37),
+ (206, 80, 47), (210, 87, 47), (219, 83, 47), (210, 80, 56),
+ (198, 76, 56), (174, 72, 56), (146, 60, 47), (129, 60, 37),
+ (109, 51, 28), (92, 47, 28), (101, 51, 28), (121, 51, 37),
+ (141, 55, 37), (158, 60, 37), (170, 56, 47), (174, 64, 47),
+ (174, 68, 47), (178, 64, 47), (182, 63, 47), (190, 80, 47),
+ (202, 80, 47), (202, 87, 47), (198, 83, 47), (182, 83, 47),
+ (178, 80, 47), (150, 72, 47), (133, 64, 47), (113, 60, 46),
+ (101, 51, 37), (76, 39, 37), (60, 31, 28), (44, 27, 28),
+ (40, 23, 28), (39, 19, 18), (36, 16, 18), (36, 16, 18),
+ (35, 20, 18), (35, 20, 28), (35, 24, 28), (36, 24, 18),
+ (35, 20, 9), (36, 20, 9), (36, 20, 18), (36, 24, 18),
+ (44, 31, 18), (56, 35, 28), (72, 43, 37), (96, 43, 37),
+ (109, 51, 46), (117, 60, 46), (129, 72, 47), (125, 68, 37),
+ (109, 60, 37), (96, 47, 37), (80, 39, 37), (60, 35, 37),
+ (48, 27, 28), (44, 27, 18), (40, 23, 18), (40, 23, 18),
+ (39, 24, 28), (36, 24, 28), (35, 20, 28), (35, 16, 28),
+ (35, 20, 37), (40, 28, 37), (56, 40, 37), (72, 43, 47),
+ (97, 52, 46), (113, 51, 47), (162, 60, 47), (186, 68, 47)
+ ),
+
+// 26 deep-water
+((24, 20, 18), (24, 24, 28), (28, 28, 47), (27, 24, 66),
+ (24, 28, 75), (23, 28, 75), (23, 28, 66), (19, 28, 47),
+ (20, 24, 28), (20, 24, 18), (20, 24, 18), (24, 28, 28),
+ (28, 32, 56), (28, 36, 66), (28, 36, 85), (36, 52, 103),
+ (48, 64, 113), (48, 56, 122), (44, 64, 122), (52, 64, 132),
+ (52, 64, 113), (68, 60, 113), (68, 64, 103), (56, 77, 103),
+ (56, 68, 94), (52, 60, 94), (52, 52, 94), (36, 52, 94),
+ (36, 52, 85), (36, 40, 66), (32, 32, 56), (24, 24, 28),
+ (16, 16, 18), (11, 8, 18), (11, 8, 9), (8, 4, 0),
+ (8, 4, 0), (11, 4, 9), (11, 8, 18), (11, 8, 28),
+ (16, 16, 28), (19, 28, 37), (24, 32, 56), (24, 40, 75),
+ (28, 48, 94), (36, 64, 103), (40, 64, 113), (44, 68, 122),
+ (44, 68, 113), (40, 64, 113), (36, 60, 113), (36, 52, 103),
+ (28, 48, 94), (32, 40, 75), (36, 36, 66), (32, 36, 56),
+ (24, 32, 47), (19, 32, 37), (20, 32, 28), (11, 24, 18),
+ (8, 20, 18), (8, 16, 18), (12, 16, 18), (12, 16, 18),
+ (15, 20, 18), (16, 20, 28), (20, 28, 37), (23, 32, 47),
+ (27, 32, 56), (28, 28, 47), (27, 28, 37), (23, 20, 28),
+ (19, 16, 18), (15, 16, 18), (16, 16, 9), (12, 12, 0),
+ (8, 12, 0), (8, 8, 0), (8, 8, 9), (8, 8, 9),
+ (8, 8, 9), (8, 12, 9), (11, 12, 18), (11, 12, 18),
+ (11, 12, 18), (11, 12, 18), (12, 16, 18), (16, 24, 18),
+ (24, 32, 18), (28, 44, 37), (40, 52, 37), (48, 56, 66),
+ (48, 56, 75), (52, 68, 85), (56, 77, 113), (73, 97, 132),
+ (84, 109, 160), (100, 113, 160), (100, 117, 169), (101, 117, 160),
+ (104, 129, 151), (113, 129, 151), (104, 125, 170), (104, 125, 170),
+ (124, 137, 198), (104, 116, 170), (88, 100, 132), (68, 77, 103),
+ (52, 64, 94), (40, 56, 85), (28, 44, 75), (28, 36, 56),
+ (24, 32, 47), (24, 28, 28), (24, 24, 18), (20, 24, 18),
+ (15, 20, 18), (12, 16, 18), (12, 16, 18), (12, 16, 9),
+ (12, 12, 9), (12, 12, 9), (11, 12, 9), (11, 16, 9),
+ (12, 16, 9), (16, 16, 9), (16, 20, 0), (16, 24, 0),
+ (20, 20, 9), (24, 20, 18), (28, 24, 18), (32, 32, 28),
+ (32, 36, 47), (32, 40, 56), (32, 36, 66), (28, 36, 75),
+ (28, 36, 75), (28, 36, 75), (28, 36, 75), (28, 36, 66),
+ (24, 36, 66), (24, 36, 75), (20, 36, 85), (20, 36, 85),
+ (24, 36, 75), (24, 32, 66), (24, 32, 56), (23, 24, 28),
+ (20, 20, 18), (16, 16, 9), (16, 16, 9), (16, 20, 9),
+ (16, 20, 9), (19, 20, 9), (20, 24, 18), (20, 24, 18),
+ (20, 24, 18), (16, 16, 18), (15, 16, 18), (12, 12, 18),
+ (11, 12, 9), (11, 12, 9), (8, 12, 9), (12, 8, 9),
+ (8, 8, 9), (8, 8, 9), (4, 4, 9), (4, 4, 9),
+ (7, 0, 18), (3, 4, 18), (3, 8, 18), (3, 4, 9),
+ (4, 4, 9), (8, 8, 9), (8, 8, 9), (12, 12, 9),
+ (16, 12, 9), (16, 12, 9), (16, 16, 9), (19, 20, 9),
+ (20, 28, 18), (24, 32, 28), (32, 40, 37), (36, 44, 56),
+ (56, 68, 75), (84, 101, 113), (117, 125, 151), (149, 165, 188),
+ (157, 177, 216), (181, 189, 235), (193, 206, 216), (198, 202, 198),
+ (149, 177, 197), (141, 161, 188), (108, 146, 150), (92, 108, 141),
+ (68, 73, 113), (56, 64, 103), (48, 56, 94), (36, 52, 85),
+ (28, 40, 85), (32, 40, 85), (28, 36, 85), (32, 44, 85),
+ (36, 56, 94), (48, 68, 113), (52, 73, 132), (52, 73, 132),
+ (48, 73, 141), (56, 72, 141), (64, 81, 141), (73, 93, 141),
+ (76, 92, 132), (60, 77, 132), (56, 64, 132), (48, 48, 113),
+ (36, 40, 85), (32, 36, 75), (31, 32, 56), (23, 28, 37),
+ (19, 20, 28), (11, 20, 18), (7, 16, 9), (7, 16, 9),
+ (7, 12, 9), (7, 12, 9), (7, 8, 9), (4, 8, 0),
+ (4, 4, 0), (4, 4, 0), (4, 4, 0), (4, 4, 0),
+ (7, 8, 9), (8, 12, 9), (8, 16, 9), (11, 16, 18),
+ (12, 20, 18), (19, 24, 28), (20, 32, 47), (20, 36, 66),
+ (20, 36, 85), (20, 36, 85), (24, 32, 85), (24, 32, 85),
+ (23, 28, 85), (19, 28, 85), (20, 32, 85), (23, 32, 85),
+ (24, 32, 85), (31, 32, 94), (28, 36, 85), (24, 36, 85),
+ (27, 28, 66), (24, 28, 47), (23, 24, 28), (15, 16, 18)
+ ),
+
+// 27 afternoon-beach
+((182, 162, 170), (190, 157, 132), (178, 136, 113), (174, 107, 75),
+ (162, 124, 85), (190, 160, 94), (219, 197, 103), (230, 210, 113),
+ (254, 245, 131), (254, 254, 159), (254, 254, 178), (250, 254, 206),
+ (254, 254, 216), (254, 254, 197), (250, 254, 169), (234, 222, 141),
+ (219, 193, 160), (202, 189, 170), (190, 185, 169), (181, 169, 179),
+ (181, 157, 179), (169, 153, 188), (173, 157, 198), (161, 149, 188),
+ (165, 149, 179), (162, 146, 170), (145, 141, 151), (108, 108, 141),
+ (112, 112, 103), (129, 129, 103), (149, 124, 103), (173, 149, 94),
+ (206, 149, 94), (234, 168, 103), (250, 192, 112), (250, 200, 112),
+ (242, 217, 122), (242, 229, 122), (254, 237, 112), (246, 229, 112),
+ (246, 209, 103), (254, 204, 93), (250, 196, 93), (238, 152, 94),
+ (194, 127, 75), (186, 111, 66), (190, 127, 75), (222, 168, 94),
+ (254, 204, 121), (254, 245, 169), (250, 254, 206), (250, 254, 225),
+ (222, 213, 225), (210, 193, 207), (238, 197, 169), (250, 233, 150),
+ (254, 249, 159), (254, 254, 169), (254, 254, 197), (250, 254, 216),
+ (254, 254, 197), (254, 254, 169), (254, 254, 159), (254, 241, 140),
+ (254, 221, 121), (250, 209, 112), (246, 209, 112), (254, 217, 112),
+ (254, 221, 121), (250, 225, 140), (238, 197, 169), (226, 185, 207),
+ (206, 185, 207), (205, 177, 207), (201, 185, 216), (189, 181, 226),
+ (189, 181, 216), (177, 165, 216), (173, 165, 207), (185, 169, 188),
+ (202, 165, 188), (219, 181, 160), (230, 184, 141), (234, 180, 131),
+ (230, 180, 122), (210, 181, 141), (210, 169, 151), (202, 161, 160),
+ (174, 154, 170), (177, 149, 179), (170, 150, 170), (169, 153, 179),
+ (166, 162, 170), (161, 165, 151), (174, 162, 151), (178, 157, 141),
+ (170, 157, 141), (158, 145, 113), (141, 116, 94), (125, 96, 75),
+ (97, 92, 47), (77, 77, 47), (73, 73, 47), (64, 68, 47),
+ (68, 64, 47), (64, 60, 47), (60, 52, 47), (56, 48, 47),
+ (48, 36, 47), (48, 40, 37), (52, 40, 37), (52, 39, 37),
+ (52, 39, 37), (64, 39, 37), (64, 44, 37), (72, 56, 37),
+ (64, 60, 37), (68, 60, 37), (84, 56, 56), (117, 76, 65),
+ (146, 88, 75), (145, 92, 75), (149, 99, 75), (146, 108, 85),
+ (145, 104, 103), (162, 108, 104), (158, 116, 94), (169, 115, 104),
+ (157, 129, 94), (162, 153, 103), (182, 186, 113), (222, 214, 122),
+ (246, 246, 131), (250, 254, 169), (254, 254, 197), (254, 254, 216),
+ (254, 254, 225), (234, 226, 254), (209, 201, 226), (206, 193, 207),
+ (210, 177, 198), (181, 165, 179), (162, 141, 160), (145, 121, 122),
+ (145, 100, 113), (121, 96, 94), (104, 93, 94), (85, 80, 75),
+ (89, 85, 75), (97, 93, 84), (100, 96, 94), (101, 105, 84),
+ (121, 121, 103), (137, 129, 113), (150, 150, 103), (182, 152, 103),
+ (206, 177, 113), (230, 197, 94), (238, 180, 84), (238, 168, 93),
+ (226, 172, 84), (189, 152, 84), (182, 112, 66), (166, 99, 66),
+ (133, 80, 56), (88, 59, 47), (68, 48, 47), (64, 44, 47),
+ (52, 39, 37), (48, 40, 28), (48, 35, 28), (52, 39, 28),
+ (48, 44, 37), (56, 48, 37), (56, 48, 47), (68, 52, 56),
+ (76, 64, 56), (85, 76, 65), (113, 88, 75), (117, 92, 84),
+ (125, 96, 84), (125, 96, 84), (125, 92, 84), (133, 88, 84),
+ (117, 88, 75), (92, 72, 56), (81, 68, 56), (72, 68, 56),
+ (68, 68, 56), (76, 76, 66), (81, 81, 75), (85, 77, 75),
+ (85, 68, 65), (72, 56, 66), (68, 64, 56), (64, 60, 66),
+ (64, 56, 56), (60, 48, 56), (60, 52, 56), (60, 56, 56),
+ (60, 56, 47), (68, 60, 47), (68, 64, 56), (73, 73, 56),
+ (81, 81, 66), (85, 96, 75), (97, 105, 75), (105, 109, 56),
+ (125, 117, 66), (125, 129, 66), (146, 141, 85), (170, 169, 85),
+ (198, 202, 113), (234, 205, 112), (250, 192, 112), (238, 172, 103),
+ (234, 152, 94), (190, 119, 66), (174, 106, 56), (166, 111, 66),
+ (141, 108, 75), (125, 112, 85), (108, 113, 103), (113, 129, 103),
+ (133, 125, 122), (182, 145, 160), (202, 161, 179), (210, 193, 179),
+ (254, 241, 197), (254, 254, 216), (254, 254, 216), (254, 254, 197),
+ (254, 254, 169), (254, 254, 159), (254, 245, 150), (254, 245, 140),
+ (250, 229, 131), (226, 206, 122), (182, 182, 113), (162, 141, 94),
+ (149, 128, 65), (145, 116, 75), (137, 100, 84), (125, 108, 85),
+ (129, 96, 84), (125, 112, 75), (117, 109, 84), (105, 109, 75),
+ (97, 109, 75), (101, 105, 75), (121, 112, 66), (141, 112, 75),
+ (149, 116, 85), (162, 141, 103), (194, 169, 122), (218, 201, 132)
+ ),
+
+// 28 dim-beach
+((27, 28, 28), (48, 36, 37), (68, 48, 37), (72, 60, 37),
+ (68, 68, 37), (56, 60, 37), (44, 44, 28), (36, 36, 28),
+ (32, 32, 28), (28, 32, 28), (28, 28, 28), (28, 28, 28),
+ (28, 32, 28), (28, 36, 28), (32, 40, 37), (48, 60, 56),
+ (56, 73, 66), (60, 81, 75), (80, 93, 75), (92, 137, 141),
+ (100, 170, 160), (133, 185, 188), (153, 194, 188), (141, 182, 169),
+ (117, 162, 131), (109, 145, 122), (85, 113, 84), (69, 85, 56),
+ (64, 68, 47), (56, 56, 37), (40, 40, 28), (32, 36, 28),
+ (31, 32, 28), (28, 32, 28), (28, 32, 28), (32, 32, 28),
+ (36, 36, 28), (52, 44, 28), (72, 56, 18), (97, 60, 28),
+ (121, 84, 28), (129, 112, 37), (150, 107, 37), (141, 100, 37),
+ (129, 84, 28), (109, 72, 28), (64, 73, 28), (48, 44, 28),
+ (36, 40, 18), (36, 40, 18), (52, 56, 37), (64, 64, 47),
+ (68, 76, 56), (97, 88, 56), (109, 100, 56), (109, 100, 56),
+ (93, 97, 66), (68, 76, 66), (48, 76, 75), (48, 56, 56),
+ (40, 36, 37), (28, 32, 37), (28, 32, 37), (27, 32, 37),
+ (28, 32, 37), (32, 32, 28), (32, 32, 28), (28, 32, 28),
+ (28, 32, 28), (28, 28, 28), (27, 28, 28), (24, 28, 18),
+ (24, 28, 18), (23, 28, 18), (20, 28, 18), (20, 28, 28),
+ (19, 28, 28), (19, 28, 28), (16, 24, 28), (19, 28, 28),
+ (20, 28, 28), (24, 32, 28), (24, 36, 28), (24, 40, 28),
+ (24, 36, 37), (24, 32, 37), (32, 36, 37), (52, 60, 47),
+ (68, 77, 47), (105, 88, 46), (133, 116, 37), (166, 140, 37),
+ (182, 153, 103), (214, 206, 132), (222, 218, 169), (230, 234, 188),
+ (242, 242, 197), (242, 241, 197), (230, 226, 178), (246, 196, 93),
+ (242, 184, 74), (226, 156, 56), (210, 164, 56), (222, 160, 56),
+ (214, 156, 47), (222, 163, 37), (222, 152, 37), (214, 157, 37),
+ (186, 123, 37), (182, 114, 47), (174, 111, 47), (149, 99, 56),
+ (121, 92, 56), (101, 113, 75), (125, 170, 122), (154, 174, 160),
+ (185, 202, 188), (198, 218, 198), (169, 198, 188), (141, 178, 169),
+ (104, 154, 150), (52, 109, 151), (44, 89, 122), (40, 56, 75),
+ (20, 48, 56), (24, 36, 37), (24, 32, 28), (24, 32, 28),
+ (24, 32, 28), (24, 32, 28), (27, 32, 28), (28, 32, 28),
+ (28, 36, 28), (32, 40, 28), (40, 56, 47), (48, 60, 56),
+ (48, 64, 56), (56, 64, 56), (56, 64, 56), (80, 68, 56),
+ (92, 60, 46), (113, 96, 47), (150, 111, 56), (153, 128, 66),
+ (170, 166, 132), (210, 202, 160), (226, 226, 188), (246, 242, 197),
+ (250, 241, 206), (234, 230, 197), (226, 222, 188), (194, 189, 141),
+ (153, 145, 103), (105, 101, 66), (73, 77, 56), (60, 64, 47),
+ (44, 40, 37), (32, 32, 37), (27, 28, 37), (24, 24, 37),
+ (24, 28, 28), (24, 28, 28), (24, 28, 28), (27, 32, 28),
+ (31, 32, 28), (32, 36, 28), (40, 48, 37), (48, 64, 47),
+ (52, 73, 47), (56, 72, 56), (60, 68, 47), (68, 76, 56),
+ (93, 85, 47), (113, 96, 47), (105, 80, 47), (101, 72, 46),
+ (104, 72, 56), (97, 76, 46), (92, 68, 37), (89, 76, 37),
+ (88, 72, 47), (68, 73, 47), (48, 64, 37), (36, 40, 28),
+ (32, 36, 28), (28, 36, 28), (28, 32, 28), (28, 32, 18),
+ (32, 28, 18), (28, 28, 28), (28, 28, 28), (24, 28, 28),
+ (23, 28, 28), (24, 28, 28), (24, 28, 28), (24, 28, 28),
+ (24, 32, 28), (27, 36, 37), (28, 36, 37), (32, 60, 56),
+ (48, 64, 56), (48, 68, 56), (52, 73, 56), (52, 72, 56),
+ (48, 64, 56), (48, 60, 56), (52, 56, 47), (44, 40, 37),
+ (36, 36, 28), (36, 32, 28), (36, 36, 28), (44, 52, 37),
+ (60, 60, 47), (60, 64, 47), (68, 73, 56), (77, 84, 56),
+ (93, 97, 56), (93, 101, 56), (97, 101, 66), (97, 97, 56),
+ (97, 101, 66), (97, 109, 66), (88, 137, 112), (97, 154, 141),
+ (108, 158, 141), (116, 166, 160), (125, 182, 160), (125, 178, 141),
+ (141, 182, 132), (166, 157, 113), (174, 136, 75), (198, 140, 56),
+ (210, 149, 56), (219, 172, 66), (210, 206, 151), (210, 222, 198),
+ (214, 230, 207), (222, 230, 207), (226, 226, 197), (206, 206, 151),
+ (166, 162, 122), (125, 125, 75), (89, 101, 66), (60, 73, 47),
+ (40, 44, 28), (28, 32, 18), (24, 32, 18), (20, 32, 18),
+ (24, 32, 28), (28, 36, 37), (36, 40, 47), (36, 52, 66),
+ (40, 80, 85), (56, 85, 84), (88, 142, 141), (129, 182, 160)
+ ),
+
+// 29 cloudy-brick
+((202, 206, 188), (178, 186, 160), (153, 157, 141), (129, 141, 122),
+ (112, 129, 113), (96, 125, 122), (104, 146, 141), (112, 158, 169),
+ (137, 181, 188), (157, 222, 225), (153, 218, 235), (132, 210, 235),
+ (100, 198, 216), (84, 154, 188), (60, 117, 122), (48, 80, 94),
+ (40, 60, 75), (28, 48, 56), (40, 44, 37), (24, 32, 28),
+ (48, 56, 37), (80, 35, 28), (76, 35, 37), (68, 35, 37),
+ (68, 39, 28), (68, 39, 37), (68, 72, 56), (56, 68, 47),
+ (68, 72, 56), (48, 72, 47), (60, 72, 66), (77, 97, 85),
+ (84, 113, 103), (100, 133, 132), (133, 162, 160), (173, 190, 188),
+ (189, 210, 198), (193, 218, 207), (193, 218, 216), (193, 218, 216),
+ (173, 210, 225), (132, 201, 225), (104, 161, 188), (84, 141, 169),
+ (80, 121, 141), (76, 109, 122), (93, 104, 84), (105, 92, 66),
+ (129, 80, 56), (145, 95, 28), (153, 95, 28), (174, 111, 66),
+ (226, 167, 84), (234, 155, 65), (194, 119, 37), (178, 63, 9),
+ (170, 33, 9), (129, 38, 18), (125, 63, 37), (153, 76, 28),
+ (170, 107, 56), (246, 188, 74), (246, 196, 103), (250, 217, 159),
+ (226, 213, 188), (230, 234, 216), (230, 237, 225), (230, 246, 235),
+ (218, 246, 244), (218, 242, 235), (209, 238, 225), (210, 230, 225),
+ (206, 222, 226), (197, 218, 216), (189, 218, 207), (185, 210, 207),
+ (153, 169, 188), (105, 150, 160), (80, 125, 141), (68, 101, 122),
+ (56, 93, 113), (52, 97, 122), (68, 105, 113), (92, 129, 132),
+ (129, 150, 141), (185, 177, 141), (242, 196, 122), (202, 165, 132),
+ (182, 115, 75), (170, 59, 28), (153, 59, 18), (125, 42, 28),
+ (113, 43, 28), (92, 35, 37), (80, 39, 37), (64, 64, 66),
+ (52, 76, 85), (56, 89, 84), (56, 81, 85), (64, 85, 94),
+ (73, 97, 94), (85, 109, 94), (100, 109, 94), (121, 145, 113),
+ (129, 166, 141), (146, 186, 169), (177, 210, 197), (189, 218, 207),
+ (197, 218, 226), (197, 222, 226), (206, 222, 226), (217, 226, 225),
+ (222, 234, 225), (218, 234, 226), (214, 234, 216), (201, 234, 216),
+ (201, 230, 216), (197, 230, 225), (197, 230, 225), (193, 230, 225),
+ (193, 230, 226), (193, 230, 226), (189, 242, 235), (201, 242, 244),
+ (213, 237, 244), (205, 234, 235), (201, 238, 235), (201, 234, 235),
+ (193, 230, 235), (193, 230, 226), (193, 226, 226), (189, 226, 225),
+ (181, 230, 225), (161, 198, 207), (108, 166, 178), (92, 153, 160),
+ (73, 126, 150), (88, 137, 150), (89, 142, 151), (125, 162, 151),
+ (149, 182, 170), (181, 202, 188), (189, 218, 207), (194, 226, 216),
+ (201, 230, 225), (205, 230, 225), (213, 234, 225), (214, 234, 225),
+ (214, 230, 216), (206, 230, 207), (194, 218, 198), (166, 190, 170),
+ (145, 149, 132), (121, 109, 84), (117, 104, 75), (141, 113, 103),
+ (166, 141, 132), (182, 174, 160), (206, 214, 179), (218, 238, 207),
+ (246, 249, 225), (250, 254, 235), (254, 254, 244), (254, 254, 254),
+ (254, 254, 254), (250, 254, 254), (254, 254, 254), (254, 254, 244),
+ (250, 250, 244), (246, 250, 244), (242, 250, 244), (230, 245, 235),
+ (226, 230, 225), (214, 222, 216), (226, 238, 216), (210, 222, 216),
+ (206, 222, 216), (201, 230, 226), (205, 226, 216), (206, 222, 207),
+ (198, 222, 207), (202, 222, 207), (201, 226, 216), (197, 222, 216),
+ (198, 222, 207), (198, 222, 198), (202, 210, 179), (174, 198, 169),
+ (153, 185, 188), (157, 190, 179), (181, 202, 188), (198, 210, 198),
+ (202, 210, 198), (193, 218, 207), (198, 226, 207), (206, 230, 207),
+ (206, 230, 207), (202, 230, 216), (202, 226, 216), (197, 218, 216),
+ (193, 218, 226), (185, 221, 235), (185, 230, 244), (181, 234, 244),
+ (173, 234, 244), (173, 230, 244), (116, 207, 235), (76, 194, 216),
+ (72, 185, 206), (60, 170, 207), (76, 153, 169), (68, 121, 122),
+ (76, 105, 94), (60, 85, 75), (73, 81, 75), (77, 77, 56),
+ (76, 68, 66), (73, 89, 85), (97, 80, 65), (80, 64, 47),
+ (96, 43, 37), (125, 38, 28), (125, 42, 28), (100, 47, 47),
+ (92, 72, 75), (68, 81, 85), (68, 85, 94), (84, 93, 103),
+ (72, 113, 122), (100, 149, 141), (133, 170, 169), (185, 202, 207),
+ (206, 222, 216), (226, 234, 225), (238, 250, 244), (246, 254, 244),
+ (250, 254, 244), (250, 250, 244), (250, 254, 244), (250, 254, 244),
+ (254, 254, 244), (250, 254, 235), (250, 254, 235), (250, 254, 225),
+ (254, 254, 216), (250, 249, 216), (210, 222, 207), (218, 181, 169),
+ (214, 185, 150), (182, 116, 103), (129, 120, 56), (129, 91, 56),
+ (125, 88, 65), (105, 88, 84), (129, 129, 113), (149, 161, 160)
+ ),
+
+// 30 burning-wood
+((80, 35, 28), (92, 39, 28), (97, 39, 28), (96, 39, 37),
+ (97, 39, 28), (80, 43, 37), (68, 43, 37), (84, 39, 37),
+ (76, 43, 47), (72, 48, 56), (60, 43, 47), (44, 44, 47),
+ (36, 32, 37), (31, 28, 37), (27, 28, 37), (28, 32, 37),
+ (40, 28, 37), (48, 32, 37), (52, 31, 37), (56, 27, 28),
+ (68, 35, 28), (84, 35, 28), (96, 30, 28), (104, 34, 18),
+ (105, 30, 18), (97, 34, 18), (88, 34, 18), (76, 35, 28),
+ (68, 39, 28), (64, 43, 18), (60, 48, 37), (52, 52, 37),
+ (48, 44, 37), (32, 40, 28), (32, 32, 28), (27, 32, 28),
+ (28, 28, 28), (28, 28, 18), (31, 28, 18), (31, 28, 18),
+ (35, 28, 18), (36, 32, 18), (52, 35, 18), (56, 31, 18),
+ (76, 31, 18), (96, 30, 18), (113, 30, 18), (133, 26, 18),
+ (145, 26, 18), (154, 22, 19), (162, 22, 18), (174, 25, 0),
+ (178, 25, 0), (178, 46, 9), (190, 87, 18), (214, 105, 18),
+ (219, 97, 0), (198, 87, 18), (178, 72, 9), (162, 37, 0),
+ (158, 22, 0), (158, 22, 9), (154, 22, 0), (146, 22, 0),
+ (146, 26, 9), (137, 26, 9), (117, 30, 9), (105, 30, 18),
+ (92, 23, 18), (88, 23, 28), (92, 39, 28), (88, 39, 28),
+ (80, 52, 47), (72, 56, 56), (84, 68, 65), (73, 73, 75),
+ (64, 60, 56), (52, 56, 56), (36, 52, 47), (32, 36, 37),
+ (36, 32, 28), (40, 31, 28), (52, 31, 28), (48, 31, 18),
+ (60, 27, 18), (76, 31, 18), (88, 31, 18), (100, 30, 9),
+ (113, 34, 9), (121, 30, 9), (133, 30, 18), (125, 39, 18),
+ (121, 31, 28), (121, 38, 28), (109, 35, 37), (109, 34, 28),
+ (105, 31, 28), (101, 34, 28), (84, 35, 37), (72, 31, 37),
+ (68, 27, 37), (56, 27, 28), (48, 23, 28), (40, 24, 28),
+ (36, 27, 28), (35, 28, 28), (35, 28, 28), (36, 32, 18),
+ (48, 31, 18), (80, 43, 18), (101, 64, 28), (141, 76, 28),
+ (182, 95, 28), (214, 123, 37), (234, 163, 56), (234, 176, 84),
+ (234, 176, 75), (222, 157, 47), (222, 131, 47), (210, 110, 28),
+ (222, 79, 37), (194, 38, 18), (202, 14, 9), (206, 26, 19),
+ (186, 30, 9), (182, 30, 9), (186, 72, 9), (174, 83, 9),
+ (161, 79, 18), (141, 59, 9), (129, 64, 28), (121, 76, 47),
+ (121, 63, 56), (133, 46, 37), (125, 47, 28), (129, 43, 28),
+ (121, 47, 28), (113, 47, 28), (125, 47, 18), (121, 47, 28),
+ (109, 47, 18), (100, 43, 28), (92, 39, 28), (76, 31, 28),
+ (56, 31, 28), (48, 31, 37), (40, 27, 28), (35, 28, 28),
+ (32, 28, 28), (36, 31, 28), (44, 36, 28), (56, 35, 28),
+ (68, 35, 28), (76, 35, 37), (80, 47, 28), (88, 39, 28),
+ (88, 43, 37), (101, 43, 28), (105, 39, 28), (109, 43, 28),
+ (109, 60, 46), (97, 72, 56), (105, 88, 75), (113, 104, 84),
+ (133, 100, 94), (165, 91, 56), (165, 87, 47), (162, 71, 37),
+ (166, 59, 28), (162, 63, 18), (149, 64, 18), (150, 59, 18),
+ (146, 60, 9), (141, 33, 0), (129, 59, 0), (121, 59, 18),
+ (133, 64, 18), (149, 64, 28), (154, 80, 37), (174, 83, 18),
+ (182, 91, 18), (198, 96, 18), (202, 110, 28), (202, 106, 37),
+ (202, 106, 37), (198, 95, 47), (178, 86, 28), (133, 68, 28),
+ (113, 59, 28), (92, 43, 18), (76, 35, 28), (60, 35, 28),
+ (56, 31, 28), (64, 31, 28), (68, 27, 28), (72, 31, 28),
+ (76, 31, 28), (76, 35, 28), (80, 39, 18), (84, 31, 28),
+ (85, 35, 18), (81, 31, 18), (80, 31, 18), (76, 27, 28),
+ (64, 27, 28), (56, 27, 28), (44, 27, 28), (36, 28, 28),
+ (31, 28, 28), (27, 24, 28), (23, 24, 28), (27, 24, 28),
+ (31, 28, 28), (32, 28, 28), (35, 28, 28), (44, 31, 28),
+ (68, 31, 28), (88, 43, 28), (109, 60, 28), (133, 64, 28),
+ (166, 91, 28), (210, 140, 66), (214, 210, 188), (230, 180, 113),
+ (238, 176, 93), (219, 173, 85), (222, 164, 66), (202, 131, 47),
+ (174, 103, 47), (141, 100, 47), (121, 88, 66), (80, 60, 47),
+ (60, 43, 37), (48, 27, 37), (44, 27, 37), (36, 28, 28),
+ (32, 28, 28), (31, 28, 28), (27, 28, 28), (27, 28, 28),
+ (24, 28, 28), (27, 28, 28), (27, 28, 28), (31, 28, 28),
+ (32, 28, 28), (32, 36, 37), (44, 40, 37), (56, 31, 37),
+ (68, 35, 56), (89, 60, 47), (117, 64, 37), (121, 56, 37),
+ (125, 56, 47), (109, 47, 37), (105, 47, 37), (92, 27, 37)
+ ),
+
+// 31 aquatic-garden
+((146, 80, 9), (133, 92, 28), (133, 108, 56), (153, 112, 75),
+ (141, 125, 84), (133, 113, 65), (105, 76, 56), (80, 72, 37),
+ (60, 68, 37), (52, 60, 47), (40, 44, 47), (36, 36, 37),
+ (32, 28, 37), (32, 28, 28), (32, 24, 28), (27, 24, 37),
+ (27, 28, 37), (28, 32, 37), (40, 44, 47), (60, 64, 56),
+ (77, 89, 66), (92, 105, 66), (117, 133, 85), (125, 158, 103),
+ (166, 177, 103), (149, 178, 122), (157, 157, 113), (125, 133, 103),
+ (109, 96, 94), (81, 93, 75), (64, 85, 75), (52, 68, 56),
+ (40, 56, 47), (40, 44, 37), (36, 36, 28), (32, 32, 28),
+ (28, 28, 28), (24, 28, 28), (23, 28, 28), (28, 32, 28),
+ (36, 36, 28), (40, 40, 28), (56, 39, 28), (72, 48, 28),
+ (84, 51, 28), (80, 56, 28), (84, 64, 28), (72, 64, 28),
+ (68, 39, 28), (56, 43, 28), (36, 32, 18), (28, 28, 18),
+ (24, 28, 28), (23, 24, 28), (20, 20, 28), (23, 20, 28),
+ (19, 20, 28), (19, 20, 28), (24, 24, 28), (31, 24, 28),
+ (31, 28, 28), (35, 28, 28), (48, 35, 28), (64, 43, 28),
+ (72, 52, 37), (76, 56, 37), (72, 52, 37), (56, 39, 28),
+ (48, 31, 28), (36, 28, 28), (32, 28, 28), (28, 28, 28),
+ (28, 32, 28), (28, 32, 28), (28, 32, 28), (24, 32, 28),
+ (24, 32, 28), (24, 32, 28), (24, 32, 28), (24, 32, 28),
+ (24, 32, 28), (28, 36, 28), (36, 40, 28), (44, 48, 37),
+ (64, 64, 47), (81, 97, 66), (96, 121, 103), (88, 146, 150),
+ (96, 158, 169), (100, 158, 179), (100, 150, 160), (100, 129, 141),
+ (85, 109, 113), (68, 93, 85), (44, 60, 66), (36, 44, 47),
+ (24, 40, 37), (24, 36, 37), (23, 32, 28), (20, 24, 18),
+ (24, 24, 18), (23, 20, 9), (24, 32, 18), (36, 44, 18),
+ (44, 48, 37), (52, 60, 47), (56, 81, 75), (64, 97, 85),
+ (68, 101, 94), (85, 113, 85), (96, 117, 94), (84, 84, 94),
+ (68, 80, 85), (64, 73, 75), (56, 56, 56), (52, 56, 47),
+ (40, 44, 37), (36, 36, 37), (35, 32, 28), (28, 24, 18),
+ (32, 28, 28), (32, 32, 18), (52, 39, 18), (60, 35, 18),
+ (84, 47, 37), (81, 55, 37), (80, 72, 56), (64, 76, 66),
+ (52, 64, 75), (48, 73, 85), (52, 81, 94), (60, 89, 122),
+ (64, 101, 122), (88, 105, 122), (89, 117, 113), (93, 117, 113),
+ (100, 117, 113), (100, 125, 103), (104, 125, 103), (109, 129, 85),
+ (96, 105, 75), (93, 101, 66), (89, 93, 66), (105, 105, 75),
+ (117, 125, 56), (121, 121, 75), (117, 100, 56), (109, 100, 47),
+ (89, 93, 56), (84, 93, 66), (73, 85, 66), (56, 64, 47),
+ (44, 48, 47), (40, 32, 37), (44, 31, 37), (40, 44, 37),
+ (56, 52, 28), (68, 68, 37), (64, 56, 37), (68, 56, 37),
+ (64, 48, 47), (48, 52, 47), (40, 40, 47), (32, 36, 37),
+ (32, 36, 28), (32, 36, 28), (36, 40, 37), (44, 52, 47),
+ (52, 60, 66), (64, 85, 85), (84, 109, 103), (100, 121, 122),
+ (104, 145, 151), (116, 158, 141), (112, 150, 151), (108, 129, 132),
+ (113, 105, 103), (89, 101, 75), (69, 93, 56), (68, 76, 37),
+ (68, 68, 28), (52, 48, 28), (40, 40, 28), (36, 36, 28),
+ (32, 36, 28), (32, 32, 28), (32, 32, 28), (32, 32, 28),
+ (32, 36, 28), (32, 40, 37), (28, 44, 47), (36, 68, 66),
+ (48, 85, 94), (44, 109, 160), (88, 150, 169), (113, 178, 159),
+ (116, 170, 169), (133, 173, 179), (92, 154, 197), (36, 93, 170),
+ (40, 93, 160), (36, 73, 103), (48, 56, 75), (44, 48, 56),
+ (36, 36, 37), (32, 32, 28), (27, 28, 18), (24, 28, 18),
+ (20, 32, 18), (24, 28, 18), (19, 28, 18), (19, 24, 28),
+ (20, 24, 28), (20, 28, 28), (23, 28, 28), (20, 32, 28),
+ (20, 28, 28), (24, 28, 28), (28, 28, 28), (28, 28, 28),
+ (28, 32, 28), (32, 32, 28), (36, 32, 37), (40, 36, 47),
+ (52, 48, 66), (60, 77, 94), (92, 121, 132), (125, 166, 160),
+ (145, 177, 179), (161, 190, 198), (169, 198, 188), (174, 186, 170),
+ (166, 186, 170), (145, 170, 132), (141, 162, 85), (129, 133, 85),
+ (137, 99, 47), (137, 72, 9), (125, 46, 0), (109, 47, 18),
+ (85, 51, 28), (105, 80, 28), (93, 64, 47), (104, 72, 75),
+ (125, 121, 94), (129, 137, 113), (108, 150, 122), (96, 146, 131),
+ (88, 137, 122), (68, 105, 141), (52, 72, 94), (28, 52, 56),
+ (23, 32, 47), (31, 28, 47), (32, 40, 47), (40, 52, 56)
+ ),
+
+// 32 no-name
+((24, 24, 9), (24, 28, 9), (24, 28, 18), (28, 28, 18),
+ (28, 28, 28), (27, 28, 28), (24, 28, 28), (24, 28, 28),
+ (20, 28, 28), (19, 28, 18), (24, 28, 9), (23, 24, 9),
+ (20, 24, 18), (19, 20, 18), (20, 20, 18), (19, 20, 28),
+ (15, 24, 28), (11, 20, 18), (12, 16, 18), (12, 12, 9),
+ (16, 20, 18), (20, 24, 28), (24, 24, 28), (27, 32, 28),
+ (32, 36, 28), (32, 44, 28), (32, 52, 37), (48, 60, 37),
+ (76, 68, 47), (101, 80, 37), (150, 96, 28), (194, 102, 28),
+ (210, 106, 37), (214, 110, 37), (214, 127, 37), (210, 127, 37),
+ (206, 132, 47), (214, 156, 47), (226, 168, 47), (246, 191, 46),
+ (246, 208, 46), (254, 220, 56), (254, 207, 56), (250, 191, 46),
+ (250, 187, 46), (238, 179, 46), (238, 159, 46), (234, 148, 46),
+ (222, 136, 37), (218, 148, 37), (222, 179, 47), (230, 200, 37),
+ (227, 230, 46), (246, 225, 46), (226, 218, 47), (215, 192, 56),
+ (165, 149, 66), (101, 109, 47), (72, 72, 28), (56, 60, 28),
+ (40, 44, 28), (32, 32, 18), (28, 28, 18), (24, 32, 18),
+ (24, 32, 18), (24, 32, 18), (32, 32, 28), (32, 36, 28),
+ (40, 44, 37), (52, 48, 47), (64, 48, 56), (76, 64, 47),
+ (89, 64, 47), (109, 80, 56), (154, 96, 56), (190, 107, 47),
+ (186, 106, 47), (174, 123, 37), (149, 111, 37), (109, 84, 46),
+ (85, 80, 47), (81, 76, 56), (64, 77, 66), (56, 64, 66),
+ (48, 52, 56), (32, 36, 47), (28, 36, 37), (28, 32, 28),
+ (28, 32, 28), (35, 32, 18), (44, 40, 18), (72, 48, 28),
+ (101, 55, 37), (133, 72, 47), (186, 102, 47), (186, 91, 56),
+ (149, 84, 56), (109, 80, 56), (137, 99, 47), (162, 108, 47),
+ (178, 136, 56), (186, 148, 56), (210, 189, 75), (234, 209, 103),
+ (234, 205, 103), (234, 197, 103), (238, 180, 65), (210, 148, 56),
+ (226, 115, 65), (222, 115, 75), (198, 110, 66), (182, 110, 47),
+ (125, 80, 37), (105, 59, 37), (68, 52, 28), (44, 40, 28),
+ (32, 32, 18), (28, 28, 18), (24, 28, 18), (20, 24, 18),
+ (23, 24, 18), (28, 32, 28), (40, 40, 37), (52, 48, 37),
+ (72, 60, 37), (96, 72, 37), (145, 99, 56), (194, 102, 56),
+ (214, 123, 85), (230, 180, 103), (254, 245, 131), (254, 254, 140),
+ (250, 254, 197), (234, 234, 188), (190, 173, 151), (129, 146, 141),
+ (105, 137, 84), (85, 101, 47), (93, 77, 46), (109, 60, 37),
+ (121, 76, 37), (149, 108, 47), (182, 119, 47), (178, 140, 56),
+ (186, 144, 47), (194, 136, 47), (194, 123, 37), (178, 115, 37),
+ (117, 88, 47), (84, 64, 47), (60, 56, 47), (52, 60, 56),
+ (52, 64, 47), (60, 68, 56), (73, 81, 75), (116, 141, 141),
+ (182, 186, 151), (218, 222, 169), (206, 206, 179), (150, 166, 151),
+ (84, 109, 103), (60, 73, 85), (56, 73, 75), (73, 77, 75),
+ (85, 93, 65), (97, 113, 66), (129, 141, 75), (166, 157, 113),
+ (182, 169, 113), (198, 156, 103), (186, 132, 66), (174, 119, 47),
+ (121, 84, 37), (81, 60, 28), (64, 56, 28), (48, 52, 18),
+ (44, 44, 28), (40, 40, 37), (32, 36, 37), (32, 36, 37),
+ (40, 40, 37), (48, 48, 47), (48, 73, 56), (73, 117, 46),
+ (113, 125, 47), (150, 170, 94), (186, 181, 103), (215, 206, 94),
+ (246, 233, 74), (250, 249, 84), (254, 233, 84), (254, 241, 74),
+ (254, 229, 56), (250, 229, 56), (254, 225, 65), (250, 233, 84),
+ (238, 241, 112), (246, 217, 122), (206, 181, 113), (198, 123, 85),
+ (202, 119, 66), (194, 127, 56), (198, 131, 56), (194, 136, 66),
+ (222, 185, 84), (234, 230, 112), (254, 249, 112), (254, 254, 131),
+ (222, 226, 150), (214, 193, 132), (174, 157, 113), (105, 113, 56),
+ (77, 84, 56), (52, 68, 47), (44, 52, 37), (36, 40, 28),
+ (32, 36, 28), (36, 40, 28), (36, 36, 28), (40, 32, 37),
+ (48, 39, 37), (64, 39, 28), (80, 52, 37), (105, 55, 47),
+ (165, 84, 56), (194, 98, 47), (198, 106, 47), (202, 131, 56),
+ (238, 172, 84), (242, 196, 103), (250, 213, 103), (246, 221, 74),
+ (246, 200, 56), (210, 180, 56), (170, 149, 56), (141, 111, 47),
+ (93, 92, 47), (84, 72, 47), (64, 68, 28), (56, 64, 28),
+ (44, 52, 28), (36, 44, 28), (36, 36, 28), (40, 40, 28),
+ (40, 40, 28), (56, 43, 18), (60, 43, 18), (72, 52, 28),
+ (96, 64, 46), (117, 84, 65), (170, 123, 66), (170, 132, 66),
+ (121, 72, 56), (100, 55, 46), (56, 48, 37), (36, 36, 37)
+ ),
+
+// 33 fall-quilt
+((24, 40, 37), (56, 52, 37), (93, 68, 37), (137, 68, 18),
+ (174, 76, 18), (190, 102, 9), (190, 94, 18), (178, 75, 18),
+ (162, 64, 18), (129, 60, 18), (105, 76, 18), (77, 68, 28),
+ (64, 60, 37), (40, 48, 37), (24, 40, 37), (20, 32, 37),
+ (19, 32, 37), (15, 32, 37), (15, 32, 37), (20, 36, 47),
+ (24, 40, 56), (24, 40, 56), (28, 40, 56), (28, 44, 56),
+ (28, 44, 56), (32, 44, 47), (36, 48, 37), (48, 52, 37),
+ (76, 68, 37), (81, 73, 37), (109, 80, 37), (137, 80, 28),
+ (170, 87, 37), (194, 98, 18), (198, 102, 18), (210, 110, 18),
+ (214, 118, 9), (198, 119, 18), (170, 128, 28), (146, 99, 28),
+ (117, 80, 28), (85, 72, 37), (68, 52, 37), (40, 40, 37),
+ (24, 36, 28), (19, 32, 28), (24, 24, 28), (32, 28, 28),
+ (40, 31, 18), (56, 35, 18), (76, 52, 28), (105, 84, 37),
+ (133, 96, 37), (194, 144, 56), (214, 197, 141), (214, 202, 179),
+ (234, 230, 216), (250, 233, 225), (250, 233, 216), (222, 193, 169),
+ (150, 145, 94), (109, 96, 56), (77, 68, 47), (40, 48, 56),
+ (36, 44, 56), (36, 40, 56), (32, 36, 56), (28, 40, 56),
+ (24, 36, 47), (20, 32, 47), (20, 32, 37), (24, 36, 37),
+ (24, 36, 37), (36, 36, 37), (36, 36, 28), (40, 32, 28),
+ (40, 31, 28), (48, 31, 28), (68, 47, 28), (109, 39, 28),
+ (129, 46, 18), (133, 47, 9), (162, 59, 0), (198, 114, 9),
+ (214, 145, 28), (226, 171, 47), (234, 183, 47), (230, 192, 65),
+ (222, 165, 65), (194, 144, 47), (145, 112, 47), (113, 88, 47),
+ (93, 72, 46), (60, 60, 47), (36, 48, 47), (32, 44, 47),
+ (32, 36, 47), (36, 36, 37), (36, 40, 37), (40, 40, 37),
+ (40, 44, 28), (48, 52, 28), (76, 68, 37), (93, 76, 37),
+ (113, 88, 28), (170, 123, 28), (194, 122, 28), (210, 132, 18),
+ (214, 141, 18), (210, 127, 18), (182, 119, 28), (153, 76, 28),
+ (137, 64, 18), (121, 55, 9), (93, 51, 18), (80, 64, 37),
+ (97, 76, 37), (113, 84, 37), (166, 115, 47), (214, 173, 75),
+ (230, 197, 75), (242, 200, 75), (218, 173, 66), (182, 132, 47),
+ (113, 88, 46), (77, 72, 37), (56, 48, 37), (44, 40, 37),
+ (35, 24, 28), (24, 12, 18), (23, 12, 18), (27, 20, 18),
+ (52, 31, 18), (93, 51, 18), (149, 92, 28), (194, 140, 37),
+ (226, 180, 75), (242, 213, 84), (250, 213, 112), (254, 212, 121),
+ (238, 222, 141), (250, 233, 197), (254, 241, 216), (250, 237, 225),
+ (254, 233, 197), (250, 229, 169), (254, 229, 150), (254, 229, 140),
+ (250, 221, 131), (246, 217, 112), (250, 209, 84), (250, 208, 74),
+ (238, 192, 56), (214, 131, 28), (186, 72, 9), (146, 38, 0),
+ (109, 30, 9), (76, 15, 9), (48, 16, 9), (27, 8, 9),
+ (23, 24, 28), (24, 32, 37), (24, 36, 37), (24, 40, 47),
+ (32, 44, 47), (40, 44, 56), (56, 52, 56), (89, 64, 56),
+ (125, 72, 37), (158, 60, 37), (162, 63, 28), (154, 55, 18),
+ (141, 38, 18), (133, 26, 9), (113, 22, 0), (89, 11, 9),
+ (73, 11, 0), (52, 11, 9), (36, 20, 0), (40, 16, 9),
+ (27, 20, 18), (23, 20, 28), (24, 24, 37), (19, 28, 47),
+ (15, 28, 47), (16, 32, 47), (12, 28, 37), (16, 28, 37),
+ (19, 28, 37), (16, 28, 37), (24, 36, 28), (40, 35, 18),
+ (44, 35, 18), (64, 35, 18), (97, 38, 0), (121, 51, 9),
+ (125, 42, 9), (121, 38, 9), (93, 31, 18), (52, 40, 28),
+ (36, 40, 47), (32, 44, 47), (32, 48, 47), (32, 48, 47),
+ (28, 44, 47), (24, 36, 47), (19, 28, 37), (19, 20, 28),
+ (20, 12, 18), (24, 4, 9), (16, 8, 0), (16, 12, 0),
+ (20, 12, 9), (20, 20, 18), (16, 28, 28), (16, 28, 37),
+ (15, 28, 37), (12, 28, 28), (23, 28, 18), (44, 27, 18),
+ (56, 19, 18), (80, 19, 28), (113, 30, 18), (129, 51, 9),
+ (145, 79, 28), (186, 127, 28), (226, 163, 47), (234, 192, 65),
+ (242, 200, 75), (226, 188, 84), (190, 144, 47), (125, 96, 47),
+ (97, 80, 56), (60, 60, 47), (36, 48, 47), (24, 40, 47),
+ (20, 32, 47), (16, 28, 47), (12, 24, 37), (12, 20, 37),
+ (12, 20, 47), (15, 24, 47), (15, 28, 56), (20, 28, 56),
+ (20, 36, 56), (28, 44, 56), (36, 48, 47), (52, 48, 47),
+ (77, 73, 37), (109, 88, 56), (125, 96, 47), (186, 127, 37),
+ (218, 163, 47), (230, 166, 37), (230, 144, 28), (198, 120, 37)
+ ),
+
+// 34 night-blue-sky
+((3, 12, 66), (4, 12, 66), (7, 12, 66), (7, 8, 56),
+ (4, 8, 47), (3, 8, 37), (0, 4, 18), (0, 4, 9),
+ (0, 4, 0), (0, 4, 0), (0, 4, 0), (0, 4, 0),
+ (0, 4, 9), (0, 4, 18), (3, 4, 18), (4, 4, 18),
+ (4, 4, 18), (4, 4, 9), (4, 4, 9), (0, 4, 9),
+ (0, 0, 0), (0, 0, 0), (0, 4, 0), (0, 4, 0),
+ (4, 4, 9), (4, 4, 18), (4, 4, 18), (4, 8, 18),
+ (3, 8, 18), (0, 8, 18), (0, 4, 18), (0, 4, 18),
+ (0, 4, 18), (0, 4, 28), (0, 8, 37), (0, 12, 47),
+ (3, 12, 56), (3, 16, 66), (3, 16, 75), (3, 12, 75),
+ (3, 12, 75), (3, 16, 75), (3, 16, 75), (4, 16, 75),
+ (4, 12, 75), (3, 12, 75), (3, 12, 75), (3, 12, 75),
+ (0, 12, 66), (3, 8, 56), (3, 8, 56), (3, 8, 56),
+ (3, 4, 47), (4, 4, 47), (4, 4, 56), (4, 8, 56),
+ (4, 8, 56), (3, 8, 56), (3, 8, 47), (0, 8, 37),
+ (0, 8, 28), (0, 4, 28), (0, 4, 18), (0, 4, 18),
+ (4, 4, 18), (4, 4, 28), (3, 4, 28), (0, 4, 37),
+ (0, 4, 37), (0, 4, 37), (0, 4, 37), (0, 4, 28),
+ (0, 0, 18), (0, 0, 9), (0, 0, 9), (0, 4, 9),
+ (0, 4, 9), (0, 4, 9), (0, 4, 9), (0, 4, 0),
+ (0, 4, 0), (0, 4, 9), (0, 4, 9), (0, 8, 18),
+ (0, 8, 28), (0, 4, 28), (0, 4, 28), (3, 4, 28),
+ (4, 4, 18), (4, 4, 9), (4, 4, 9), (4, 4, 18),
+ (4, 4, 28), (7, 8, 37), (4, 12, 47), (8, 12, 56),
+ (7, 12, 66), (7, 16, 75), (7, 16, 75), (11, 16, 75),
+ (11, 16, 75), (11, 16, 75), (7, 16, 66), (7, 16, 66),
+ (7, 16, 66), (4, 16, 66), (3, 16, 66), (4, 12, 56),
+ (4, 8, 47), (4, 4, 37), (4, 4, 28), (4, 0, 18),
+ (4, 0, 18), (3, 0, 18), (0, 0, 9), (0, 0, 9),
+ (0, 4, 9), (0, 4, 9), (0, 4, 9), (0, 0, 9),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 9),
+ (4, 4, 9), (4, 4, 9), (4, 4, 9), (3, 4, 9),
+ (0, 4, 9), (0, 4, 9), (0, 0, 9), (0, 0, 9),
+ (0, 0, 9), (0, 4, 9), (0, 4, 9), (4, 4, 9),
+ (4, 4, 18), (4, 8, 28), (7, 8, 37), (4, 8, 47),
+ (3, 8, 47), (3, 8, 47), (0, 4, 47), (0, 4, 37),
+ (0, 4, 37), (0, 4, 37), (0, 4, 37), (0, 4, 47),
+ (0, 4, 56), (3, 8, 56), (4, 12, 56), (7, 20, 66),
+ (7, 24, 66), (3, 20, 66), (0, 16, 56), (0, 8, 56),
+ (0, 4, 47), (0, 4, 28), (0, 4, 18), (4, 4, 9),
+ (4, 4, 9), (0, 4, 18), (0, 4, 28), (0, 8, 37),
+ (0, 8, 56), (3, 12, 66), (7, 12, 75), (8, 16, 75),
+ (8, 16, 85), (7, 20, 85), (8, 20, 75), (7, 16, 75),
+ (7, 12, 66), (4, 12, 56), (3, 8, 47), (3, 8, 37),
+ (0, 8, 37), (0, 4, 28), (0, 4, 28), (0, 4, 28),
+ (0, 4, 28), (0, 4, 28), (0, 4, 28), (0, 8, 28),
+ (0, 8, 18), (0, 8, 9), (4, 8, 9), (4, 4, 9),
+ (4, 4, 18), (4, 8, 37), (4, 12, 56), (3, 12, 66),
+ (3, 16, 66), (3, 16, 56), (4, 16, 56), (8, 12, 56),
+ (7, 8, 56), (7, 8, 47), (4, 4, 47), (4, 4, 47),
+ (4, 4, 47), (3, 8, 56), (3, 12, 56), (3, 12, 66),
+ (3, 12, 66), (3, 12, 75), (3, 12, 75), (4, 12, 75),
+ (4, 12, 75), (7, 12, 75), (7, 12, 75), (7, 12, 66),
+ (4, 8, 56), (3, 4, 47), (0, 0, 28), (0, 0, 18),
+ (0, 0, 9), (0, 0, 9), (0, 0, 9), (4, 0, 9),
+ (4, 0, 9), (4, 0, 9), (4, 0, 9), (0, 0, 0),
+ (0, 0, 0), (0, 4, 0), (0, 4, 0), (0, 4, 9),
+ (0, 4, 9), (4, 4, 9), (4, 4, 9), (4, 4, 9),
+ (4, 4, 18), (4, 8, 28), (4, 8, 37), (4, 8, 47),
+ (4, 8, 56), (4, 12, 56), (3, 12, 47), (0, 16, 47),
+ (0, 8, 37), (0, 8, 28), (0, 4, 18), (0, 4, 9),
+ (0, 0, 9), (0, 0, 9), (0, 4, 9), (3, 4, 18),
+ (4, 8, 28), (4, 12, 37), (4, 16, 47), (4, 16, 47),
+ (4, 12, 37), (4, 8, 28), (4, 4, 18), (4, 4, 9)
+ ),
+
+// 35 shadow-iris
+((36, 20, 18), (32, 20, 18), (31, 20, 18), (31, 20, 18),
+ (32, 24, 18), (35, 28, 18), (36, 32, 18), (28, 24, 18),
+ (27, 20, 18), (24, 16, 18), (23, 12, 18), (23, 12, 18),
+ (23, 16, 18), (24, 20, 18), (24, 20, 18), (23, 20, 18),
+ (19, 20, 18), (16, 20, 18), (19, 16, 9), (20, 12, 9),
+ (23, 12, 9), (24, 16, 9), (24, 20, 9), (24, 20, 9),
+ (20, 20, 9), (20, 16, 9), (20, 8, 9), (23, 12, 9),
+ (24, 12, 9), (28, 16, 9), (28, 20, 9), (28, 20, 9),
+ (27, 20, 9), (24, 20, 18), (23, 16, 18), (23, 16, 18),
+ (20, 16, 18), (19, 12, 18), (16, 12, 9), (19, 16, 9),
+ (20, 16, 9), (23, 16, 9), (28, 16, 9), (35, 16, 18),
+ (44, 20, 28), (56, 23, 37), (64, 19, 47), (76, 23, 47),
+ (80, 27, 37), (88, 35, 37), (88, 35, 37), (88, 31, 28),
+ (68, 31, 28), (52, 23, 28), (44, 20, 28), (36, 20, 28),
+ (35, 24, 28), (35, 24, 28), (35, 24, 28), (35, 20, 28),
+ (32, 20, 18), (28, 20, 18), (28, 20, 18), (27, 16, 18),
+ (27, 16, 18), (28, 16, 18), (31, 16, 18), (35, 16, 28),
+ (40, 19, 28), (48, 23, 37), (60, 23, 47), (72, 31, 56),
+ (88, 35, 66), (100, 39, 75), (96, 44, 75), (96, 48, 75),
+ (100, 40, 84), (100, 40, 75), (84, 27, 56), (72, 23, 47),
+ (56, 23, 37), (44, 23, 18), (36, 20, 9), (35, 16, 9),
+ (32, 16, 9), (28, 16, 9), (28, 20, 9), (35, 20, 9),
+ (35, 24, 9), (35, 24, 18), (35, 20, 18), (35, 20, 18),
+ (35, 24, 18), (36, 24, 28), (40, 23, 28), (44, 23, 28),
+ (56, 27, 28), (64, 27, 37), (72, 27, 37), (76, 35, 37),
+ (64, 31, 37), (52, 23, 28), (52, 23, 28), (52, 23, 28),
+ (60, 27, 37), (64, 23, 37), (68, 27, 47), (72, 27, 47),
+ (80, 35, 56), (88, 40, 65), (101, 44, 66), (100, 43, 56),
+ (84, 35, 56), (68, 39, 56), (40, 40, 47), (39, 28, 37),
+ (40, 23, 28), (43, 20, 28), (44, 23, 28), (48, 23, 37),
+ (52, 24, 37), (56, 27, 37), (52, 27, 37), (47, 27, 47),
+ (39, 24, 47), (35, 24, 37), (35, 20, 37), (28, 24, 28),
+ (28, 24, 18), (24, 24, 18), (23, 20, 18), (19, 16, 18),
+ (15, 16, 18), (16, 16, 18), (19, 16, 18), (20, 16, 18),
+ (23, 20, 18), (23, 20, 18), (23, 16, 18), (20, 12, 18),
+ (24, 12, 18), (27, 12, 18), (31, 16, 18), (32, 16, 18),
+ (35, 16, 18), (36, 16, 18), (36, 20, 18), (36, 20, 18),
+ (40, 20, 18), (40, 19, 18), (44, 20, 28), (56, 23, 37),
+ (64, 23, 56), (76, 31, 66), (84, 68, 75), (108, 60, 94),
+ (121, 64, 94), (125, 52, 94), (117, 56, 84), (109, 39, 75),
+ (104, 40, 75), (104, 43, 65), (109, 35, 66), (100, 35, 56),
+ (80, 31, 47), (72, 19, 37), (56, 19, 28), (52, 19, 28),
+ (48, 20, 28), (44, 19, 28), (39, 16, 28), (36, 16, 18),
+ (32, 16, 9), (36, 20, 9), (35, 20, 18), (40, 24, 18),
+ (48, 23, 28), (72, 31, 37), (92, 31, 56), (113, 44, 84),
+ (141, 60, 94), (202, 181, 188), (177, 116, 142), (145, 76, 122),
+ (145, 76, 113), (137, 80, 113), (129, 56, 94), (125, 56, 84),
+ (121, 47, 75), (104, 35, 66), (96, 35, 56), (84, 31, 47),
+ (76, 35, 37), (64, 23, 28), (52, 23, 28), (44, 20, 18),
+ (39, 16, 18), (31, 16, 18), (24, 16, 18), (20, 16, 18),
+ (16, 12, 9), (16, 12, 9), (16, 12, 9), (16, 16, 9),
+ (15, 16, 9), (15, 12, 9), (15, 12, 18), (16, 12, 18),
+ (16, 12, 18), (19, 12, 18), (20, 12, 18), (24, 12, 18),
+ (27, 12, 18), (27, 16, 28), (27, 16, 28), (27, 16, 28),
+ (28, 16, 28), (31, 16, 28), (40, 19, 28), (48, 23, 37),
+ (52, 23, 47), (56, 27, 47), (64, 35, 47), (72, 31, 47),
+ (68, 35, 47), (60, 36, 47), (48, 31, 37), (40, 24, 28),
+ (40, 24, 28), (43, 24, 28), (48, 28, 28), (52, 32, 37),
+ (64, 31, 47), (68, 27, 47), (80, 31, 47), (84, 31, 56),
+ (88, 35, 56), (96, 35, 56), (96, 31, 56), (84, 31, 56),
+ (76, 27, 56), (72, 27, 56), (68, 27, 56), (60, 27, 47),
+ (52, 23, 37), (40, 20, 28), (31, 20, 28), (16, 20, 28),
+ (20, 12, 28), (20, 12, 28), (23, 12, 18), (27, 16, 18),
+ (32, 20, 28), (35, 24, 28), (36, 28, 28), (40, 28, 37)
+ ),
+
+// 36 solid-sky
+((145, 104, 84), (178, 111, 75), (202, 123, 75), (198, 127, 75),
+ (129, 112, 85), (84, 72, 37), (40, 40, 28), (20, 16, 18),
+ (11, 4, 28), (12, 4, 28), (23, 24, 28), (0, 93, 141),
+ (0, 109, 160), (4, 122, 170), (7, 134, 179), (19, 138, 188),
+ (24, 142, 179), (31, 151, 179), (44, 158, 179), (52, 162, 179),
+ (129, 117, 122), (190, 137, 103), (214, 152, 66), (206, 131, 37),
+ (202, 119, 28), (198, 106, 9), (194, 90, 9), (166, 43, 9),
+ (133, 18, 0), (72, 19, 9), (60, 19, 18), (36, 28, 9),
+ (36, 36, 18), (52, 60, 37), (0, 101, 150), (0, 109, 150),
+ (0, 109, 150), (0, 105, 150), (0, 97, 141), (20, 36, 18),
+ (16, 24, 9), (8, 8, 9), (12, 4, 9), (12, 4, 9),
+ (11, 4, 9), (8, 4, 9), (4, 4, 9), (7, 4, 9),
+ (8, 0, 9), (12, 0, 9), (15, 0, 9), (16, 4, 18),
+ (19, 12, 28), (0, 89, 141), (0, 97, 160), (0, 101, 160),
+ (0, 101, 150), (60, 60, 37), (68, 31, 18), (105, 30, 9),
+ (170, 80, 9), (198, 90, 0), (178, 67, 0), (133, 30, 0),
+ (72, 15, 9), (36, 12, 18), (23, 8, 9), (16, 4, 9),
+ (19, 8, 9), (27, 20, 18), (52, 44, 37), (4, 105, 150),
+ (60, 162, 188), (173, 173, 160), (198, 165, 151), (194, 148, 113),
+ (218, 160, 84), (222, 153, 84), (214, 132, 47), (210, 123, 37),
+ (202, 111, 28), (218, 118, 28), (202, 119, 47), (149, 104, 85),
+ (88, 116, 113), (4, 113, 160), (0, 118, 160), (0, 122, 160),
+ (0, 122, 160), (0, 122, 160), (0, 122, 170), (4, 122, 170),
+ (0, 118, 170), (0, 114, 170), (0, 109, 160), (0, 101, 150),
+ (44, 60, 28), (28, 36, 9), (20, 16, 9), (16, 8, 9),
+ (15, 4, 9), (12, 0, 18), (11, 0, 18), (8, 0, 18),
+ (8, 0, 18), (12, 4, 9), (15, 4, 9), (20, 4, 9),
+ (28, 12, 18), (36, 36, 18), (52, 52, 47), (0, 97, 150),
+ (0, 101, 150), (73, 73, 66), (64, 60, 37), (48, 56, 28),
+ (64, 64, 47), (0, 105, 150), (0, 118, 160), (4, 122, 170),
+ (8, 126, 170), (4, 130, 170), (4, 134, 170), (0, 130, 170),
+ (0, 126, 170), (0, 126, 170), (0, 122, 170), (0, 114, 170),
+ (0, 105, 160), (0, 93, 150), (16, 32, 28), (16, 12, 18),
+ (19, 8, 9), (20, 20, 18), (28, 44, 28), (0, 97, 141),
+ (4, 118, 160), (23, 142, 179), (44, 158, 188), (60, 166, 197),
+ (60, 166, 197), (68, 170, 197), (72, 170, 197), (72, 173, 197),
+ (96, 177, 188), (149, 145, 103), (214, 143, 75), (210, 127, 47),
+ (154, 99, 37), (68, 68, 28), (44, 35, 18), (24, 20, 18),
+ (15, 8, 18), (7, 4, 18), (4, 0, 18), (3, 4, 18),
+ (7, 4, 18), (11, 4, 18), (19, 8, 18), (32, 36, 28),
+ (0, 105, 150), (24, 138, 179), (72, 174, 188), (149, 190, 197),
+ (206, 218, 207), (210, 222, 207), (218, 210, 207), (218, 218, 198),
+ (218, 210, 198), (194, 194, 170), (194, 181, 160), (141, 137, 103),
+ (113, 81, 75), (72, 84, 37), (52, 68, 28), (52, 48, 28),
+ (68, 64, 28), (81, 80, 37), (141, 88, 47), (194, 106, 37),
+ (206, 106, 28), (206, 110, 18), (206, 110, 9), (194, 98, 18),
+ (174, 87, 37), (96, 88, 94), (4, 113, 150), (12, 134, 170),
+ (19, 142, 179), (31, 147, 179), (39, 151, 188), (48, 158, 188),
+ (48, 166, 188), (48, 162, 188), (43, 159, 197), (39, 151, 198),
+ (27, 147, 188), (23, 142, 179), (20, 138, 179), (19, 134, 179),
+ (8, 130, 179), (4, 122, 160), (4, 109, 160), (0, 97, 150),
+ (44, 36, 37), (31, 16, 18), (23, 8, 18), (23, 8, 18),
+ (27, 28, 28), (0, 93, 141), (0, 105, 150), (0, 97, 141),
+ (48, 39, 37), (28, 28, 18), (32, 24, 9), (44, 15, 9),
+ (60, 27, 18), (93, 55, 37), (154, 84, 37), (186, 98, 28),
+ (186, 102, 9), (170, 87, 18), (73, 80, 28), (40, 52, 18),
+ (40, 36, 18), (48, 35, 18), (64, 60, 18), (149, 75, 0),
+ (194, 94, 9), (198, 98, 9), (214, 105, 0), (210, 98, 9),
+ (210, 101, 18), (198, 112, 37), (190, 107, 56), (108, 108, 94),
+ (4, 105, 150), (0, 105, 160), (0, 109, 160), (0, 105, 160),
+ (0, 101, 160), (0, 89, 141), (11, 8, 37), (11, 4, 28),
+ (11, 4, 18), (12, 4, 18), (20, 8, 18), (36, 12, 18),
+ (64, 19, 9), (77, 11, 0), (109, 19, 0), (169, 14, 9),
+ (149, 67, 18), (85, 85, 66), (24, 113, 150), (35, 155, 188)
+ ),
+
+// 37 misty-field
+((84, 89, 103), (96, 100, 94), (101, 105, 85), (93, 105, 84),
+ (89, 109, 85), (100, 113, 94), (109, 121, 103), (104, 117, 113),
+ (116, 117, 122), (121, 141, 141), (133, 166, 179), (153, 185, 197),
+ (161, 185, 207), (157, 189, 207), (161, 185, 207), (157, 177, 207),
+ (149, 169, 198), (133, 158, 188), (116, 146, 179), (108, 133, 179),
+ (108, 133, 179), (116, 141, 179), (112, 141, 170), (129, 150, 170),
+ (133, 157, 188), (141, 161, 188), (137, 153, 169), (125, 141, 141),
+ (121, 133, 113), (109, 121, 94), (105, 125, 85), (101, 133, 84),
+ (101, 133, 85), (109, 133, 85), (97, 133, 85), (93, 121, 75),
+ (97, 125, 85), (101, 117, 85), (105, 117, 75), (89, 117, 75),
+ (84, 121, 75), (93, 141, 75), (109, 150, 75), (117, 170, 103),
+ (133, 178, 122), (145, 170, 151), (169, 194, 188), (169, 198, 207),
+ (173, 193, 207), (169, 189, 207), (169, 189, 216), (165, 189, 216),
+ (165, 185, 216), (161, 181, 216), (157, 181, 226), (157, 185, 226),
+ (157, 189, 225), (177, 201, 226), (205, 210, 235), (214, 218, 244),
+ (214, 222, 244), (209, 222, 244), (205, 218, 244), (193, 214, 235),
+ (177, 197, 216), (177, 189, 207), (169, 185, 207), (169, 181, 207),
+ (165, 177, 216), (161, 181, 216), (165, 185, 216), (165, 189, 216),
+ (169, 193, 216), (177, 197, 216), (193, 206, 226), (206, 222, 226),
+ (218, 222, 235), (222, 226, 244), (226, 222, 235), (222, 230, 244),
+ (222, 226, 254), (222, 226, 244), (218, 226, 244), (218, 226, 244),
+ (222, 234, 244), (214, 226, 244), (205, 218, 235), (185, 197, 216),
+ (165, 181, 207), (141, 153, 169), (121, 121, 141), (105, 101, 113),
+ (84, 84, 94), (77, 85, 85), (73, 77, 75), (73, 73, 75),
+ (73, 73, 75), (73, 77, 75), (73, 85, 85), (77, 97, 85),
+ (84, 113, 94), (104, 133, 132), (112, 154, 132), (129, 162, 160),
+ (141, 169, 188), (145, 165, 198), (141, 165, 207), (137, 161, 207),
+ (124, 165, 207), (64, 139, 207), (64, 139, 207), (64, 135, 207),
+ (100, 129, 179), (96, 125, 160), (108, 145, 132), (112, 137, 103),
+ (97, 121, 94), (89, 113, 85), (89, 105, 85), (77, 89, 85),
+ (77, 81, 84), (77, 73, 75), (77, 73, 75), (77, 77, 75),
+ (81, 81, 84), (77, 77, 75), (73, 73, 66), (73, 73, 66),
+ (73, 77, 75), (76, 77, 94), (68, 68, 103), (72, 77, 103),
+ (92, 100, 132), (124, 133, 141), (145, 161, 179), (165, 185, 207),
+ (173, 201, 225), (201, 222, 235), (213, 230, 244), (222, 230, 235),
+ (222, 226, 235), (222, 226, 235), (209, 222, 235), (205, 218, 235),
+ (185, 206, 226), (173, 197, 216), (169, 189, 216), (165, 189, 207),
+ (165, 185, 198), (153, 169, 179), (141, 166, 141), (137, 154, 132),
+ (125, 157, 132), (121, 158, 103), (101, 149, 75), (85, 125, 65),
+ (81, 117, 75), (72, 109, 94), (77, 85, 85), (80, 81, 94),
+ (81, 77, 84), (77, 73, 75), (73, 73, 75), (68, 68, 66),
+ (68, 68, 66), (73, 73, 66), (73, 73, 75), (72, 72, 75),
+ (81, 85, 75), (81, 89, 75), (81, 89, 75), (85, 97, 75),
+ (89, 97, 94), (89, 93, 94), (85, 89, 85), (81, 81, 75),
+ (85, 97, 75), (85, 89, 75), (85, 85, 75), (81, 97, 75),
+ (81, 105, 66), (85, 97, 66), (85, 101, 75), (81, 101, 75),
+ (76, 101, 75), (73, 97, 75), (77, 93, 75), (73, 81, 75),
+ (68, 77, 75), (73, 73, 75), (73, 73, 75), (73, 73, 75),
+ (73, 73, 75), (73, 73, 66), (81, 85, 75), (81, 97, 66),
+ (81, 105, 56), (60, 101, 47), (73, 97, 56), (68, 89, 66),
+ (73, 77, 66), (73, 73, 66), (68, 68, 75), (52, 72, 103),
+ (44, 81, 141), (60, 130, 207), (60, 135, 207), (64, 138, 198),
+ (96, 125, 160), (88, 121, 122), (84, 108, 113), (92, 101, 103),
+ (101, 101, 113), (112, 117, 132), (104, 117, 141), (104, 125, 151),
+ (116, 133, 170), (128, 145, 188), (128, 157, 198), (129, 154, 207),
+ (129, 157, 197), (137, 173, 198), (145, 173, 198), (141, 165, 188),
+ (133, 165, 188), (125, 157, 188), (120, 145, 179), (112, 133, 170),
+ (96, 121, 160), (100, 117, 151), (72, 105, 122), (68, 89, 113),
+ (80, 93, 103), (76, 97, 132), (108, 125, 151), (137, 141, 160),
+ (145, 157, 188), (161, 181, 207), (169, 193, 216), (181, 210, 226),
+ (193, 222, 235), (197, 218, 235), (181, 201, 226), (165, 193, 216),
+ (161, 189, 216), (157, 181, 216), (157, 181, 216), (153, 181, 216),
+ (149, 181, 207), (157, 181, 207), (153, 177, 207), (149, 177, 207),
+ (149, 177, 207), (141, 169, 207), (137, 165, 198), (128, 161, 198)
+ ),
+
+// 38 wooden-highlight
+((97, 76, 75), (85, 68, 56), (97, 72, 46), (125, 84, 56),
+ (141, 100, 85), (149, 107, 113), (137, 116, 122), (153, 112, 113),
+ (154, 133, 122), (157, 124, 103), (153, 124, 94), (161, 119, 94),
+ (178, 119, 85), (174, 132, 103), (170, 137, 122), (194, 153, 122),
+ (166, 124, 123), (162, 125, 123), (170, 120, 103), (178, 131, 85),
+ (174, 119, 66), (166, 111, 47), (154, 95, 47), (137, 80, 28),
+ (141, 72, 9), (141, 68, 18), (141, 64, 18), (137, 59, 18),
+ (125, 55, 9), (141, 51, 9), (125, 51, 9), (117, 51, 18),
+ (117, 55, 28), (109, 55, 28), (105, 55, 28), (109, 51, 28),
+ (97, 55, 28), (101, 51, 46), (88, 64, 47), (109, 68, 46),
+ (141, 96, 66), (166, 120, 85), (170, 119, 66), (174, 111, 75),
+ (170, 115, 85), (178, 123, 85), (150, 108, 94), (154, 107, 85),
+ (133, 92, 75), (141, 88, 47), (129, 76, 28), (121, 64, 28),
+ (133, 72, 28), (137, 80, 37), (146, 88, 37), (150, 96, 47),
+ (154, 99, 47), (154, 99, 47), (146, 92, 28), (154, 76, 18),
+ (146, 64, 18), (141, 64, 28), (141, 76, 28), (145, 80, 37),
+ (158, 95, 47), (174, 106, 37), (178, 110, 47), (170, 102, 28),
+ (150, 84, 18), (129, 72, 18), (109, 68, 18), (96, 47, 9),
+ (84, 35, 18), (72, 35, 18), (68, 35, 18), (68, 39, 18),
+ (76, 43, 28), (84, 43, 28), (92, 51, 28), (100, 55, 28),
+ (117, 72, 28), (133, 88, 28), (162, 106, 28), (170, 106, 28),
+ (162, 91, 28), (150, 80, 28), (141, 64, 28), (125, 51, 28),
+ (117, 47, 18), (101, 42, 18), (84, 39, 18), (60, 31, 9),
+ (44, 23, 9), (32, 16, 9), (24, 16, 9), (16, 16, 9),
+ (16, 20, 0), (16, 16, 9), (16, 16, 9), (16, 20, 9),
+ (20, 20, 9), (27, 20, 9), (27, 20, 9), (27, 24, 9),
+ (24, 20, 18), (32, 16, 18), (28, 16, 18), (20, 16, 18),
+ (19, 12, 18), (19, 12, 18), (16, 12, 18), (16, 16, 18),
+ (16, 16, 18), (15, 16, 18), (16, 16, 18), (19, 16, 18),
+ (27, 24, 18), (31, 20, 28), (36, 24, 28), (48, 24, 28),
+ (68, 35, 28), (80, 43, 28), (89, 51, 18), (105, 51, 18),
+ (109, 51, 18), (121, 51, 18), (121, 42, 9), (121, 51, 18),
+ (125, 46, 18), (121, 55, 18), (117, 64, 18), (113, 68, 18),
+ (109, 68, 18), (105, 64, 28), (105, 59, 28), (96, 51, 28),
+ (80, 43, 28), (56, 27, 28), (44, 19, 28), (36, 24, 28),
+ (24, 20, 28), (19, 16, 18), (12, 12, 9), (12, 12, 9),
+ (16, 16, 9), (24, 20, 9), (40, 23, 9), (68, 35, 9),
+ (85, 43, 9), (105, 42, 9), (109, 47, 18), (109, 47, 18),
+ (109, 46, 9), (109, 46, 9), (97, 38, 9), (80, 43, 9),
+ (60, 35, 9), (40, 24, 18), (32, 24, 18), (28, 24, 18),
+ (28, 24, 18), (40, 28, 18), (44, 23, 18), (56, 31, 18),
+ (68, 39, 18), (80, 43, 18), (85, 52, 28), (101, 72, 37),
+ (133, 88, 47), (141, 100, 75), (146, 112, 85), (146, 116, 85),
+ (146, 107, 75), (121, 72, 37), (113, 60, 28), (88, 47, 28),
+ (56, 35, 28), (35, 24, 18), (23, 16, 18), (19, 16, 18),
+ (16, 16, 18), (16, 12, 9), (16, 12, 9), (24, 16, 9),
+ (35, 20, 9), (48, 27, 9), (56, 31, 18), (60, 31, 18),
+ (68, 35, 37), (76, 39, 37), (76, 39, 28), (76, 35, 28),
+ (84, 35, 28), (96, 38, 18), (97, 39, 18), (100, 38, 18),
+ (84, 39, 28), (68, 35, 18), (56, 27, 18), (44, 23, 18),
+ (48, 23, 18), (56, 27, 18), (64, 35, 37), (72, 64, 56),
+ (89, 72, 65), (105, 93, 84), (137, 100, 85), (149, 108, 94),
+ (150, 104, 85), (129, 92, 84), (101, 84, 75), (101, 72, 37),
+ (113, 68, 28), (133, 68, 28), (129, 64, 18), (137, 68, 18),
+ (137, 72, 28), (125, 64, 18), (125, 60, 18), (121, 60, 18),
+ (117, 55, 18), (101, 47, 28), (84, 47, 28), (68, 39, 28),
+ (48, 31, 18), (31, 24, 18), (20, 16, 9), (16, 12, 9),
+ (12, 12, 9), (11, 12, 9), (12, 12, 9), (16, 12, 9),
+ (24, 12, 9), (31, 12, 9), (35, 16, 9), (60, 23, 9),
+ (64, 27, 9), (72, 39, 18), (72, 47, 18), (76, 47, 28),
+ (72, 52, 28), (76, 47, 28), (80, 43, 28), (72, 35, 28),
+ (64, 31, 18), (60, 31, 9), (40, 27, 9), (27, 20, 9),
+ (32, 20, 9), (36, 28, 9), (48, 27, 9), (56, 39, 18),
+ (81, 47, 18), (105, 59, 18), (121, 64, 18), (146, 76, 28)
+ ),
+
+// 39 jet-tundra
+((109, 92, 75), (105, 85, 75), (105, 85, 75), (97, 89, 75),
+ (93, 85, 75), (93, 81, 75), (93, 80, 65), (85, 73, 65),
+ (84, 68, 56), (84, 68, 47), (80, 64, 47), (76, 64, 47),
+ (72, 60, 37), (68, 64, 37), (72, 64, 47), (77, 73, 47),
+ (85, 76, 47), (93, 76, 56), (97, 80, 56), (101, 80, 56),
+ (105, 80, 56), (109, 84, 56), (105, 88, 56), (101, 84, 56),
+ (97, 80, 56), (93, 76, 56), (85, 68, 47), (72, 60, 47),
+ (64, 56, 37), (60, 56, 37), (60, 56, 37), (68, 60, 37),
+ (72, 56, 37), (73, 64, 47), (76, 68, 56), (76, 68, 56),
+ (81, 64, 56), (80, 68, 56), (81, 73, 56), (85, 80, 65),
+ (93, 85, 65), (101, 93, 65), (101, 93, 75), (105, 97, 84),
+ (113, 96, 84), (113, 100, 94), (113, 104, 94), (113, 104, 94),
+ (117, 108, 94), (121, 108, 85), (121, 104, 84), (121, 104, 75),
+ (117, 100, 75), (109, 97, 75), (105, 93, 75), (105, 92, 65),
+ (105, 92, 66), (97, 89, 75), (93, 89, 75), (93, 85, 75),
+ (85, 77, 65), (81, 73, 65), (81, 72, 56), (77, 72, 56),
+ (73, 73, 56), (72, 68, 56), (72, 68, 56), (76, 68, 56),
+ (77, 68, 56), (85, 76, 56), (89, 80, 56), (93, 81, 65),
+ (97, 89, 75), (105, 92, 75), (113, 92, 75), (121, 92, 75),
+ (121, 92, 66), (113, 92, 65), (105, 88, 65), (93, 85, 56),
+ (89, 84, 56), (85, 77, 56), (73, 73, 56), (72, 68, 56),
+ (72, 64, 47), (68, 60, 47), (68, 60, 47), (64, 60, 47),
+ (64, 60, 56), (68, 60, 56), (68, 60, 56), (72, 64, 66),
+ (68, 68, 56), (68, 64, 47), (68, 64, 47), (64, 56, 47),
+ (56, 52, 37), (56, 52, 37), (52, 52, 37), (52, 52, 37),
+ (52, 48, 37), (48, 48, 37), (48, 48, 28), (60, 52, 28),
+ (60, 56, 28), (56, 52, 37), (52, 48, 37), (56, 48, 37),
+ (56, 48, 37), (60, 48, 37), (72, 60, 47), (85, 72, 56),
+ (97, 85, 65), (109, 96, 75), (121, 104, 85), (129, 116, 103),
+ (133, 125, 103), (137, 125, 113), (137, 124, 113), (133, 125, 103),
+ (137, 116, 103), (133, 112, 103), (129, 112, 94), (125, 116, 85),
+ (113, 108, 85), (105, 101, 75), (101, 92, 66), (93, 88, 65),
+ (89, 85, 65), (89, 85, 56), (89, 85, 56), (89, 85, 65),
+ (89, 89, 75), (93, 89, 84), (104, 104, 94), (108, 96, 94),
+ (108, 96, 94), (105, 97, 84), (101, 93, 84), (97, 80, 75),
+ (89, 76, 65), (81, 73, 56), (73, 68, 47), (68, 64, 47),
+ (60, 56, 47), (56, 56, 47), (64, 64, 47), (72, 68, 47),
+ (81, 73, 56), (93, 81, 56), (97, 88, 66), (101, 88, 75),
+ (105, 89, 84), (109, 97, 84), (117, 100, 84), (125, 100, 84),
+ (125, 100, 84), (121, 100, 84), (121, 104, 84), (121, 108, 94),
+ (121, 108, 94), (117, 108, 94), (121, 108, 94), (121, 117, 94),
+ (133, 121, 103), (145, 116, 103), (149, 124, 94), (150, 120, 94),
+ (154, 120, 94), (158, 128, 85), (158, 132, 85), (137, 120, 75),
+ (133, 112, 66), (113, 96, 65), (97, 88, 56), (85, 76, 47),
+ (73, 68, 47), (64, 56, 47), (60, 52, 47), (60, 48, 37),
+ (64, 52, 37), (73, 60, 37), (85, 72, 47), (89, 76, 47),
+ (93, 80, 47), (97, 81, 56), (97, 85, 65), (97, 88, 65),
+ (101, 92, 65), (101, 97, 75), (113, 104, 84), (125, 108, 94),
+ (133, 116, 103), (145, 120, 113), (154, 137, 122), (178, 149, 141),
+ (198, 165, 151), (218, 193, 179), (210, 185, 179), (178, 153, 141),
+ (166, 145, 132), (157, 141, 122), (153, 133, 132), (120, 112, 122),
+ (125, 108, 113), (121, 100, 94), (113, 97, 75), (109, 93, 65),
+ (109, 92, 65), (105, 93, 65), (109, 93, 75), (113, 104, 84),
+ (113, 100, 84), (113, 104, 84), (113, 104, 84), (113, 104, 75),
+ (109, 96, 66), (105, 92, 56), (105, 92, 56), (105, 88, 47),
+ (109, 93, 56), (113, 96, 65), (121, 100, 75), (125, 100, 84),
+ (129, 108, 85), (133, 112, 85), (133, 112, 94), (133, 116, 103),
+ (137, 120, 103), (145, 124, 103), (137, 120, 103), (141, 116, 94),
+ (133, 116, 75), (121, 100, 75), (121, 96, 75), (109, 92, 65),
+ (105, 88, 65), (101, 84, 56), (93, 77, 56), (85, 72, 47),
+ (80, 68, 37), (72, 64, 37), (68, 64, 28), (60, 56, 28),
+ (64, 60, 28), (68, 60, 37), (76, 64, 37), (85, 73, 37),
+ (89, 84, 47), (97, 88, 47), (97, 88, 56), (97, 85, 56),
+ (97, 80, 56), (93, 76, 56), (81, 72, 56), (73, 68, 56)
+ ),
+
+// 40 pastel-lime
+((137, 149, 85), (133, 146, 94), (129, 141, 94), (109, 133, 85),
+ (121, 133, 85), (105, 121, 75), (133, 129, 75), (162, 128, 85),
+ (190, 107, 66), (158, 111, 37), (198, 115, 56), (202, 152, 66),
+ (174, 140, 85), (149, 149, 75), (137, 146, 94), (113, 133, 75),
+ (105, 121, 75), (101, 121, 75), (97, 121, 66), (93, 105, 56),
+ (93, 85, 56), (113, 76, 56), (146, 88, 18), (162, 59, 9),
+ (113, 68, 9), (85, 80, 37), (81, 68, 47), (64, 64, 47),
+ (52, 73, 47), (56, 73, 37), (64, 77, 37), (64, 77, 28),
+ (68, 73, 37), (68, 77, 37), (77, 89, 47), (89, 109, 56),
+ (113, 137, 75), (109, 133, 85), (121, 150, 103), (137, 162, 122),
+ (145, 166, 151), (150, 182, 151), (194, 198, 160), (234, 205, 150),
+ (214, 185, 132), (214, 181, 94), (210, 157, 103), (198, 144, 94),
+ (153, 116, 94), (109, 113, 85), (101, 109, 75), (89, 100, 66),
+ (77, 93, 66), (69, 89, 56), (64, 77, 56), (60, 77, 47),
+ (56, 81, 56), (56, 76, 56), (56, 73, 56), (60, 73, 56),
+ (68, 73, 56), (73, 81, 56), (73, 89, 56), (73, 89, 56),
+ (85, 113, 56), (101, 121, 75), (109, 129, 85), (129, 150, 94),
+ (141, 166, 113), (166, 173, 103), (162, 178, 132), (174, 182, 132),
+ (186, 190, 122), (194, 194, 132), (214, 202, 132), (186, 194, 141),
+ (170, 186, 122), (166, 173, 103), (162, 169, 85), (145, 166, 85),
+ (125, 133, 85), (109, 117, 66), (105, 109, 66), (97, 97, 56),
+ (93, 76, 56), (113, 88, 66), (113, 109, 75), (170, 91, 37),
+ (170, 119, 56), (174, 115, 56), (157, 145, 85), (125, 137, 85),
+ (109, 113, 75), (105, 109, 75), (101, 101, 75), (97, 105, 66),
+ (93, 109, 66), (89, 113, 66), (89, 109, 75), (89, 109, 75),
+ (85, 109, 75), (85, 105, 75), (84, 101, 66), (81, 101, 66),
+ (81, 101, 66), (81, 101, 66), (85, 105, 66), (85, 105, 56),
+ (89, 100, 56), (81, 97, 56), (73, 97, 56), (73, 93, 56),
+ (77, 81, 47), (93, 76, 47), (85, 72, 56), (81, 73, 56),
+ (81, 80, 66), (89, 73, 75), (101, 85, 84), (113, 96, 84),
+ (121, 121, 94), (137, 137, 103), (157, 149, 122), (178, 177, 122),
+ (202, 185, 151), (210, 206, 170), (214, 193, 170), (190, 190, 170),
+ (182, 190, 151), (170, 186, 160), (174, 190, 151), (170, 194, 151),
+ (158, 186, 141), (149, 178, 141), (162, 194, 160), (149, 170, 132),
+ (145, 153, 122), (125, 133, 113), (104, 117, 94), (89, 105, 75),
+ (77, 93, 66), (64, 76, 56), (56, 64, 56), (60, 60, 56),
+ (60, 60, 66), (76, 64, 65), (97, 76, 65), (97, 97, 75),
+ (101, 109, 75), (105, 121, 84), (125, 141, 103), (129, 158, 113),
+ (133, 158, 122), (129, 154, 122), (129, 158, 113), (117, 150, 103),
+ (109, 117, 75), (89, 97, 66), (73, 77, 56), (60, 60, 47),
+ (52, 48, 37), (44, 39, 28), (32, 40, 18), (20, 20, 18),
+ (23, 20, 28), (20, 24, 37), (19, 28, 37), (36, 32, 37),
+ (40, 48, 47), (44, 56, 66), (48, 44, 56), (48, 48, 56),
+ (44, 56, 56), (56, 64, 56), (56, 60, 56), (48, 56, 47),
+ (52, 52, 47), (60, 48, 47), (48, 48, 47), (48, 48, 47),
+ (36, 56, 47), (40, 48, 37), (32, 52, 37), (44, 60, 47),
+ (44, 52, 37), (40, 56, 37), (40, 64, 37), (40, 68, 37),
+ (48, 56, 28), (56, 68, 37), (48, 52, 28), (56, 64, 37),
+ (56, 52, 47), (52, 64, 47), (60, 68, 47), (64, 64, 56),
+ (64, 73, 56), (68, 73, 56), (68, 68, 47), (68, 73, 47),
+ (60, 77, 47), (68, 76, 47), (68, 81, 56), (60, 81, 56),
+ (60, 81, 56), (64, 81, 56), (68, 81, 66), (73, 77, 75),
+ (76, 88, 75), (81, 93, 75), (85, 97, 75), (89, 105, 75),
+ (89, 109, 75), (93, 117, 75), (93, 113, 85), (101, 117, 84),
+ (109, 129, 94), (125, 141, 113), (141, 161, 122), (174, 157, 122),
+ (190, 145, 132), (166, 170, 103), (162, 182, 113), (154, 178, 132),
+ (150, 174, 113), (141, 170, 132), (137, 170, 122), (137, 162, 113),
+ (125, 145, 103), (121, 133, 94), (105, 117, 85), (101, 109, 85),
+ (93, 109, 85), (93, 104, 85), (89, 109, 85), (101, 117, 85),
+ (117, 137, 103), (117, 150, 113), (116, 133, 113), (97, 109, 94),
+ (85, 105, 85), (73, 97, 75), (76, 84, 66), (77, 84, 66),
+ (81, 80, 56), (73, 81, 56), (68, 85, 56), (64, 85, 47),
+ (56, 85, 47), (69, 81, 47), (73, 81, 56), (68, 81, 47),
+ (73, 85, 47), (73, 89, 56), (81, 89, 56), (85, 97, 56)
+ ),
+
+// 41 hell
+((141, 31, 18), (145, 38, 9), (149, 34, 9), (154, 34, 9),
+ (154, 34, 9), (153, 34, 18), (154, 34, 9), (162, 37, 0),
+ (166, 37, 0), (174, 46, 0), (186, 54, 0), (198, 67, 0),
+ (198, 62, 0), (174, 58, 0), (166, 38, 0), (158, 26, 0),
+ (137, 22, 0), (137, 11, 0), (133, 11, 0), (129, 7, 9),
+ (137, 22, 0), (137, 26, 9), (129, 26, 9), (141, 30, 0),
+ (154, 42, 0), (170, 50, 0), (178, 63, 9), (170, 75, 18),
+ (182, 75, 18), (182, 75, 18), (178, 71, 9), (186, 75, 0),
+ (186, 75, 9), (190, 67, 9), (194, 67, 9), (202, 63, 9),
+ (198, 67, 9), (206, 79, 9), (218, 94, 9), (214, 102, 18),
+ (230, 98, 9), (218, 103, 9), (242, 139, 56), (222, 98, 9),
+ (210, 86, 9), (194, 75, 28), (182, 63, 9), (170, 42, 9),
+ (150, 38, 9), (137, 34, 9), (125, 26, 9), (113, 15, 0),
+ (101, 7, 0), (85, 7, 0), (73, 11, 0), (76, 3, 0),
+ (73, 11, 0), (85, 11, 0), (89, 15, 9), (97, 26, 9),
+ (113, 39, 18), (125, 47, 28), (121, 67, 37), (133, 63, 18),
+ (158, 59, 9), (190, 87, 18), (210, 98, 9), (210, 107, 18),
+ (218, 103, 18), (214, 98, 9), (202, 90, 9), (182, 74, 9),
+ (162, 59, 9), (150, 42, 9), (133, 34, 9), (117, 26, 0),
+ (97, 19, 0), (80, 15, 9), (60, 11, 9), (56, 15, 9),
+ (56, 15, 0), (56, 7, 0), (64, 7, 0), (77, 15, 0),
+ (89, 19, 0), (97, 22, 0), (117, 34, 0), (129, 34, 0),
+ (133, 34, 0), (137, 34, 0), (137, 34, 0), (137, 38, 0),
+ (133, 34, 0), (129, 34, 0), (121, 27, 0), (113, 22, 0),
+ (113, 22, 0), (109, 22, 0), (105, 26, 9), (105, 23, 9),
+ (105, 19, 0), (105, 11, 0), (109, 11, 0), (109, 22, 0),
+ (113, 26, 0), (117, 31, 0), (121, 34, 0), (125, 30, 0),
+ (121, 30, 0), (117, 30, 0), (109, 26, 0), (101, 22, 0),
+ (89, 19, 0), (85, 19, 0), (77, 23, 0), (73, 19, 0),
+ (73, 19, 0), (68, 15, 9), (76, 19, 0), (76, 15, 9),
+ (76, 19, 9), (80, 27, 18), (80, 31, 18), (84, 23, 9),
+ (93, 23, 9), (105, 26, 9), (125, 26, 18), (117, 26, 18),
+ (105, 27, 18), (97, 31, 18), (93, 27, 18), (97, 23, 9),
+ (89, 26, 0), (89, 23, 0), (89, 27, 9), (93, 26, 0),
+ (97, 26, 0), (109, 27, 0), (117, 34, 0), (125, 34, 9),
+ (133, 34, 9), (141, 34, 0), (146, 34, 0), (154, 33, 0),
+ (158, 29, 0), (158, 33, 0), (158, 38, 9), (162, 34, 9),
+ (161, 42, 9), (161, 42, 9), (162, 38, 9), (166, 37, 0),
+ (170, 37, 0), (170, 50, 0), (174, 63, 0), (178, 63, 9),
+ (174, 59, 0), (162, 46, 0), (146, 42, 0), (129, 43, 9),
+ (121, 38, 9), (125, 38, 9), (121, 38, 9), (121, 38, 0),
+ (117, 42, 0), (121, 46, 9), (125, 42, 9), (129, 44, 18),
+ (149, 56, 28), (145, 75, 37), (153, 68, 28), (182, 80, 47),
+ (165, 95, 75), (165, 99, 84), (194, 124, 75), (178, 120, 56),
+ (173, 87, 37), (174, 83, 37), (174, 79, 28), (169, 55, 28),
+ (157, 46, 28), (154, 55, 9), (154, 55, 9), (146, 43, 9),
+ (149, 51, 0), (154, 46, 0), (146, 42, 0), (150, 42, 9),
+ (150, 38, 9), (146, 34, 9), (141, 39, 18), (133, 43, 18),
+ (133, 39, 18), (141, 42, 19), (146, 51, 9), (149, 59, 9),
+ (158, 67, 9), (190, 86, 18), (202, 95, 18), (206, 79, 9),
+ (194, 72, 0), (174, 63, 9), (149, 51, 18), (133, 46, 9),
+ (121, 55, 0), (113, 39, 0), (101, 31, 9), (92, 30, 9),
+ (101, 30, 9), (105, 26, 9), (117, 39, 9), (129, 38, 9),
+ (133, 34, 9), (137, 34, 9), (137, 38, 9), (141, 38, 9),
+ (145, 38, 9), (145, 38, 0), (146, 38, 0), (154, 34, 0),
+ (158, 34, 0), (150, 33, 0), (141, 27, 0), (133, 22, 0),
+ (125, 22, 0), (125, 22, 0), (121, 18, 0), (121, 18, 0),
+ (117, 22, 0), (125, 27, 0), (125, 34, 0), (121, 38, 9),
+ (121, 38, 9), (121, 38, 9), (113, 38, 9), (105, 26, 0),
+ (101, 19, 0), (97, 15, 0), (97, 15, 0), (85, 15, 0),
+ (84, 15, 0), (80, 15, 0), (77, 15, 0), (81, 19, 0),
+ (85, 19, 0), (89, 22, 0), (97, 22, 0), (105, 22, 0),
+ (113, 15, 9), (125, 26, 9), (129, 30, 0), (129, 30, 0),
+ (125, 22, 0), (125, 18, 0), (133, 18, 0), (133, 22, 0)
+ ),
+
+// 42 indian-coast
+((68, 56, 47), (80, 64, 47), (89, 76, 47), (105, 68, 46),
+ (104, 68, 46), (80, 60, 37), (60, 52, 37), (52, 44, 37),
+ (44, 40, 37), (36, 40, 37), (32, 32, 37), (40, 44, 28),
+ (36, 44, 28), (36, 40, 28), (28, 36, 28), (20, 32, 28),
+ (19, 24, 28), (20, 24, 28), (28, 28, 28), (35, 32, 37),
+ (27, 36, 37), (12, 36, 47), (20, 36, 28), (32, 32, 28),
+ (32, 32, 28), (36, 44, 28), (36, 48, 28), (40, 48, 28),
+ (52, 56, 28), (56, 60, 28), (60, 60, 28), (64, 60, 37),
+ (81, 77, 47), (93, 89, 47), (109, 92, 37), (113, 88, 47),
+ (129, 96, 56), (125, 100, 56), (125, 100, 56), (129, 96, 56),
+ (121, 84, 56), (117, 84, 56), (109, 80, 47), (109, 76, 46),
+ (97, 80, 47), (85, 77, 56), (84, 76, 56), (81, 72, 66),
+ (77, 73, 66), (89, 97, 85), (137, 177, 188), (169, 210, 216),
+ (173, 210, 216), (173, 206, 216), (177, 202, 198), (182, 119, 75),
+ (166, 103, 56), (162, 99, 56), (178, 123, 75), (181, 206, 207),
+ (181, 210, 216), (181, 210, 216), (177, 210, 216), (177, 210, 216),
+ (177, 210, 207), (165, 133, 103), (149, 108, 56), (141, 107, 56),
+ (145, 103, 56), (145, 100, 56), (158, 103, 75), (169, 210, 197),
+ (169, 210, 216), (169, 206, 207), (141, 125, 113), (133, 88, 75),
+ (121, 84, 65), (125, 76, 56), (117, 80, 56), (117, 76, 47),
+ (121, 80, 46), (121, 88, 47), (125, 84, 56), (133, 92, 56),
+ (141, 103, 56), (141, 104, 75), (149, 149, 122), (177, 202, 216),
+ (177, 210, 216), (181, 214, 216), (185, 218, 216), (185, 214, 216),
+ (181, 210, 226), (181, 210, 226), (177, 210, 226), (173, 210, 216),
+ (161, 206, 197), (121, 121, 85), (101, 88, 56), (84, 76, 47),
+ (68, 68, 37), (52, 60, 37), (52, 60, 28), (40, 60, 47),
+ (56, 68, 28), (77, 64, 37), (109, 72, 46), (133, 88, 56),
+ (145, 96, 66), (170, 115, 85), (173, 206, 207), (177, 206, 216),
+ (177, 210, 226), (177, 206, 225), (177, 210, 216), (177, 214, 207),
+ (137, 137, 113), (129, 100, 75), (113, 88, 56), (93, 76, 37),
+ (85, 60, 9), (48, 44, 18), (44, 40, 28), (36, 28, 28),
+ (52, 35, 28), (52, 48, 47), (64, 56, 56), (76, 72, 56),
+ (93, 85, 56), (117, 109, 84), (157, 206, 207), (165, 206, 225),
+ (169, 206, 225), (169, 206, 225), (169, 210, 216), (165, 198, 207),
+ (121, 108, 94), (117, 88, 65), (109, 72, 56), (109, 72, 56),
+ (85, 72, 56), (80, 68, 56), (80, 64, 56), (76, 68, 56),
+ (81, 72, 56), (85, 76, 56), (105, 80, 56), (121, 80, 56),
+ (141, 96, 66), (145, 104, 75), (157, 166, 141), (181, 210, 207),
+ (189, 210, 216), (185, 214, 216), (185, 210, 207), (186, 127, 85),
+ (154, 99, 66), (145, 99, 56), (145, 99, 56), (146, 96, 47),
+ (158, 88, 47), (157, 99, 56), (186, 127, 75), (177, 206, 198),
+ (169, 210, 216), (153, 194, 207), (108, 104, 94), (85, 89, 75),
+ (73, 76, 56), (64, 68, 47), (56, 60, 47), (60, 60, 56),
+ (68, 60, 56), (72, 68, 56), (81, 77, 56), (89, 89, 47),
+ (93, 88, 56), (105, 97, 84), (165, 186, 197), (189, 206, 216),
+ (197, 214, 216), (206, 218, 216), (246, 229, 197), (246, 225, 188),
+ (206, 148, 94), (158, 100, 75), (133, 96, 65), (105, 76, 56),
+ (72, 60, 56), (32, 48, 56), (32, 48, 56), (32, 48, 56),
+ (24, 48, 66), (52, 68, 66), (77, 77, 84), (113, 121, 113),
+ (165, 206, 207), (181, 214, 216), (193, 218, 216), (193, 218, 216),
+ (202, 218, 216), (202, 218, 216), (202, 210, 198), (186, 131, 75),
+ (170, 119, 56), (174, 115, 66), (194, 144, 85), (185, 214, 207),
+ (181, 214, 216), (181, 218, 226), (181, 214, 226), (189, 214, 226),
+ (193, 218, 226), (197, 218, 226), (206, 218, 226), (206, 218, 226),
+ (201, 218, 226), (197, 218, 226), (198, 218, 207), (226, 214, 179),
+ (190, 136, 75), (174, 115, 66), (178, 111, 75), (194, 152, 103),
+ (185, 214, 207), (181, 210, 216), (177, 202, 216), (149, 133, 113),
+ (137, 100, 66), (141, 96, 56), (133, 84, 47), (125, 88, 37),
+ (129, 79, 37), (125, 80, 47), (109, 84, 37), (109, 76, 46),
+ (93, 80, 47), (68, 64, 47), (60, 60, 37), (60, 60, 37),
+ (68, 60, 47), (72, 68, 56), (73, 73, 66), (81, 85, 85),
+ (113, 133, 122), (165, 210, 216), (173, 210, 225), (173, 210, 226),
+ (173, 210, 216), (169, 214, 216), (165, 210, 207), (129, 125, 85),
+ (125, 104, 56), (109, 84, 56), (89, 76, 56), (81, 77, 56)
+ ),
+
+// 43 dentist-decor
+((218, 185, 169), (214, 193, 151), (210, 189, 141), (202, 198, 132),
+ (178, 169, 113), (166, 162, 103), (149, 133, 94), (133, 120, 103),
+ (121, 109, 94), (109, 105, 84), (105, 101, 84), (105, 105, 85),
+ (109, 109, 85), (109, 109, 85), (109, 109, 85), (117, 109, 94),
+ (129, 129, 103), (137, 146, 94), (146, 166, 94), (146, 166, 85),
+ (137, 149, 85), (133, 141, 85), (141, 141, 85), (137, 146, 85),
+ (141, 137, 94), (137, 145, 103), (146, 154, 113), (158, 162, 122),
+ (157, 166, 113), (154, 170, 113), (150, 170, 122), (166, 182, 132),
+ (194, 177, 141), (210, 185, 141), (218, 185, 151), (230, 180, 141),
+ (234, 180, 150), (234, 176, 141), (230, 172, 131), (214, 157, 113),
+ (198, 145, 113), (182, 128, 103), (153, 108, 94), (141, 100, 84),
+ (121, 101, 84), (117, 92, 84), (109, 88, 94), (96, 80, 94),
+ (121, 76, 94), (117, 92, 94), (117, 105, 94), (117, 92, 94),
+ (129, 100, 94), (133, 125, 103), (153, 132, 103), (174, 141, 122),
+ (190, 148, 113), (194, 165, 113), (219, 161, 122), (230, 180, 141),
+ (230, 180, 141), (238, 180, 141), (234, 157, 151), (230, 172, 141),
+ (234, 157, 160), (234, 156, 150), (230, 157, 169), (222, 149, 151),
+ (219, 145, 141), (206, 149, 122), (198, 140, 113), (190, 128, 113),
+ (186, 136, 103), (194, 128, 104), (194, 136, 103), (202, 140, 103),
+ (202, 145, 113), (202, 152, 113), (210, 152, 113), (222, 161, 113),
+ (222, 169, 122), (219, 165, 122), (219, 169, 132), (214, 169, 132),
+ (210, 165, 132), (214, 161, 132), (219, 145, 141), (219, 141, 132),
+ (222, 141, 141), (219, 145, 141), (214, 161, 141), (206, 168, 132),
+ (202, 173, 132), (174, 170, 122), (149, 149, 103), (137, 133, 94),
+ (113, 108, 85), (101, 93, 84), (81, 77, 75), (77, 81, 75),
+ (85, 85, 84), (109, 97, 84), (137, 112, 75), (149, 112, 94),
+ (165, 119, 94), (186, 123, 94), (186, 128, 104), (194, 136, 113),
+ (194, 148, 113), (206, 165, 132), (222, 197, 160), (250, 245, 216),
+ (222, 197, 160), (214, 181, 160), (214, 181, 179), (250, 197, 197),
+ (238, 164, 169), (234, 157, 160), (234, 160, 150), (234, 145, 151),
+ (219, 141, 141), (206, 137, 141), (186, 144, 132), (178, 153, 132),
+ (166, 165, 122), (162, 170, 113), (146, 166, 103), (137, 150, 103),
+ (149, 137, 94), (174, 157, 103), (190, 173, 103), (202, 198, 113),
+ (206, 219, 132), (206, 202, 113), (190, 181, 122), (174, 169, 113),
+ (141, 141, 94), (105, 113, 85), (77, 81, 75), (60, 64, 66),
+ (48, 44, 47), (44, 44, 37), (36, 32, 37), (24, 32, 37),
+ (36, 36, 47), (52, 40, 56), (80, 64, 65), (84, 72, 75),
+ (105, 88, 84), (121, 113, 103), (145, 141, 113), (162, 149, 122),
+ (186, 157, 141), (202, 181, 151), (210, 189, 151), (210, 193, 160),
+ (222, 197, 160), (218, 189, 150), (206, 181, 141), (210, 165, 132),
+ (210, 153, 122), (210, 153, 122), (219, 141, 132), (219, 137, 132),
+ (206, 137, 122), (206, 148, 122), (206, 145, 122), (219, 137, 132),
+ (219, 141, 132), (222, 145, 141), (222, 153, 151), (222, 164, 150),
+ (219, 153, 151), (219, 145, 151), (206, 137, 151), (169, 132, 141),
+ (165, 141, 132), (145, 129, 113), (145, 108, 103), (133, 92, 103),
+ (137, 104, 103), (125, 113, 103), (125, 117, 103), (145, 116, 103),
+ (161, 128, 103), (178, 152, 94), (178, 161, 103), (178, 165, 94),
+ (166, 174, 94), (154, 166, 94), (174, 169, 94), (154, 162, 94),
+ (153, 149, 85), (157, 137, 94), (186, 132, 94), (186, 127, 94),
+ (190, 128, 94), (194, 136, 104), (190, 136, 104), (194, 140, 94),
+ (202, 140, 94), (202, 145, 103), (202, 145, 113), (206, 149, 122),
+ (206, 149, 132), (210, 141, 141), (214, 137, 141), (206, 137, 141),
+ (206, 137, 132), (198, 141, 132), (198, 145, 122), (194, 145, 122),
+ (178, 148, 122), (174, 161, 122), (166, 165, 103), (162, 178, 94),
+ (158, 170, 103), (162, 186, 113), (178, 186, 94), (190, 194, 103),
+ (190, 177, 122), (198, 173, 132), (186, 161, 151), (206, 145, 151),
+ (214, 141, 141), (219, 141, 132), (206, 141, 122), (219, 137, 113),
+ (202, 145, 122), (194, 140, 122), (182, 136, 113), (182, 132, 103),
+ (149, 120, 94), (121, 105, 84), (93, 76, 65), (85, 68, 66),
+ (72, 68, 75), (48, 48, 66), (48, 40, 47), (44, 44, 47),
+ (44, 40, 47), (40, 44, 47), (32, 40, 47), (28, 40, 56),
+ (32, 36, 56), (44, 44, 56), (68, 56, 66), (85, 81, 65),
+ (105, 101, 75), (117, 117, 85), (137, 133, 85), (133, 137, 94),
+ (145, 120, 85), (133, 108, 75), (97, 97, 66), (76, 68, 75)
+ ),
+
+// 44 greenland
+((173, 210, 188), (169, 185, 198), (145, 169, 198), (141, 161, 188),
+ (137, 157, 179), (125, 153, 169), (120, 158, 169), (129, 158, 170),
+ (137, 174, 169), (162, 198, 160), (194, 234, 197), (206, 242, 206),
+ (229, 242, 225), (254, 238, 225), (254, 233, 216), (250, 237, 216),
+ (250, 229, 216), (234, 209, 188), (230, 201, 179), (222, 189, 169),
+ (206, 168, 141), (190, 173, 132), (214, 189, 160), (230, 197, 169),
+ (234, 201, 188), (230, 210, 197), (242, 225, 216), (250, 242, 235),
+ (238, 250, 244), (234, 242, 254), (218, 234, 254), (205, 222, 254),
+ (193, 210, 235), (181, 201, 226), (165, 181, 216), (141, 165, 198),
+ (137, 165, 188), (137, 169, 188), (145, 178, 170), (162, 210, 169),
+ (189, 226, 207), (197, 230, 216), (214, 238, 225), (222, 238, 244),
+ (222, 238, 254), (222, 238, 254), (221, 238, 254), (218, 238, 254),
+ (213, 242, 244), (197, 238, 225), (181, 230, 216), (177, 197, 216),
+ (137, 173, 188), (125, 158, 169), (120, 154, 170), (124, 157, 179),
+ (133, 165, 188), (153, 177, 198), (177, 193, 226), (189, 205, 235),
+ (201, 218, 235), (210, 238, 225), (214, 242, 225), (218, 242, 226),
+ (218, 242, 235), (218, 246, 235), (214, 242, 235), (214, 238, 235),
+ (214, 238, 235), (218, 238, 235), (218, 238, 235), (218, 238, 235),
+ (218, 238, 225), (214, 242, 225), (206, 238, 216), (198, 230, 207),
+ (181, 218, 188), (166, 186, 160), (150, 150, 170), (137, 141, 170),
+ (133, 141, 160), (125, 137, 160), (121, 145, 169), (120, 146, 170),
+ (124, 150, 170), (112, 153, 169), (116, 146, 170), (120, 154, 170),
+ (129, 154, 169), (145, 165, 179), (169, 202, 188), (189, 222, 207),
+ (189, 226, 207), (177, 206, 179), (174, 186, 151), (153, 166, 151),
+ (133, 146, 151), (133, 146, 151), (116, 141, 151), (108, 133, 151),
+ (104, 129, 151), (100, 129, 151), (104, 129, 160), (108, 133, 160),
+ (108, 137, 160), (112, 137, 160), (112, 137, 160), (113, 137, 160),
+ (116, 137, 160), (112, 141, 160), (112, 141, 170), (108, 141, 170),
+ (108, 137, 170), (108, 137, 170), (112, 133, 160), (116, 129, 141),
+ (104, 121, 132), (100, 117, 132), (100, 129, 132), (104, 133, 141),
+ (116, 133, 141), (116, 133, 151), (133, 141, 160), (145, 145, 160),
+ (166, 153, 151), (174, 161, 151), (182, 166, 160), (222, 189, 179),
+ (230, 201, 188), (206, 206, 216), (210, 222, 235), (222, 230, 244),
+ (222, 234, 254), (222, 234, 254), (226, 234, 254), (226, 234, 254),
+ (226, 242, 254), (226, 246, 254), (226, 246, 254), (230, 250, 254),
+ (234, 250, 254), (234, 250, 254), (230, 246, 254), (226, 246, 254),
+ (222, 242, 254), (218, 242, 244), (210, 238, 225), (193, 230, 216),
+ (202, 214, 197), (218, 193, 169), (202, 181, 151), (186, 169, 160),
+ (186, 181, 170), (189, 218, 207), (206, 238, 226), (214, 238, 235),
+ (222, 238, 244), (218, 234, 244), (213, 222, 244), (205, 218, 244),
+ (205, 218, 244), (197, 210, 235), (201, 206, 226), (193, 206, 226),
+ (189, 206, 226), (197, 214, 226), (214, 238, 226), (226, 242, 235),
+ (230, 246, 244), (230, 246, 244), (226, 246, 244), (222, 238, 244),
+ (222, 234, 244), (213, 218, 244), (201, 209, 235), (185, 201, 226),
+ (177, 193, 216), (161, 161, 179), (166, 153, 179), (170, 154, 151),
+ (178, 161, 151), (178, 169, 151), (202, 173, 151), (222, 193, 169),
+ (234, 205, 188), (246, 218, 216), (250, 230, 225), (230, 242, 244),
+ (226, 242, 254), (226, 242, 254), (226, 242, 254), (226, 242, 254),
+ (225, 238, 254), (222, 238, 254), (222, 238, 254), (222, 238, 254),
+ (222, 234, 254), (218, 234, 235), (217, 238, 225), (201, 234, 207),
+ (186, 222, 179), (162, 194, 160), (150, 182, 151), (129, 166, 141),
+ (125, 158, 132), (141, 146, 122), (145, 141, 132), (174, 153, 132),
+ (194, 161, 132), (202, 160, 132), (222, 189, 169), (234, 205, 188),
+ (238, 221, 216), (234, 234, 235), (226, 238, 244), (226, 238, 254),
+ (226, 238, 254), (226, 238, 254), (226, 238, 254), (230, 242, 254),
+ (230, 250, 244), (234, 254, 244), (246, 254, 235), (254, 245, 235),
+ (250, 242, 254), (238, 250, 254), (234, 246, 254), (234, 246, 244),
+ (234, 246, 244), (230, 242, 244), (226, 238, 244), (226, 242, 244),
+ (226, 242, 244), (226, 246, 244), (226, 246, 244), (226, 250, 244),
+ (226, 246, 244), (222, 242, 244), (222, 238, 244), (222, 234, 244),
+ (214, 226, 244), (205, 218, 244), (185, 201, 235), (173, 193, 216),
+ (145, 165, 188), (129, 153, 170), (125, 149, 160), (120, 146, 160),
+ (112, 146, 160), (112, 146, 151), (112, 142, 160), (112, 141, 160),
+ (112, 141, 170), (116, 141, 170), (116, 141, 170), (112, 141, 169)
+ ),
+
+// 45 purple-dress
+((198, 96, 142), (206, 108, 142), (198, 136, 122), (178, 153, 132),
+ (182, 149, 141), (174, 149, 132), (158, 137, 113), (153, 120, 103),
+ (153, 111, 103), (153, 107, 94), (146, 104, 85), (137, 100, 84),
+ (121, 92, 84), (109, 89, 84), (109, 85, 84), (109, 85, 84),
+ (117, 84, 84), (137, 96, 94), (149, 104, 94), (170, 88, 113),
+ (178, 92, 123), (178, 88, 132), (186, 96, 142), (194, 100, 142),
+ (194, 104, 132), (182, 128, 113), (173, 132, 113), (162, 136, 113),
+ (154, 137, 113), (153, 133, 113), (157, 124, 113), (154, 116, 113),
+ (169, 92, 123), (177, 88, 132), (190, 100, 142), (206, 108, 151),
+ (219, 121, 170), (238, 141, 188), (246, 168, 207), (246, 205, 188),
+ (219, 173, 151), (246, 188, 178), (249, 225, 225), (190, 161, 151),
+ (174, 149, 132), (165, 128, 113), (165, 115, 94), (166, 111, 94),
+ (174, 120, 103), (170, 132, 113), (166, 141, 122), (165, 141, 122),
+ (161, 141, 132), (157, 137, 132), (157, 137, 141), (169, 141, 141),
+ (174, 150, 151), (178, 157, 141), (182, 157, 141), (178, 153, 141),
+ (186, 161, 151), (210, 117, 161), (218, 121, 161), (219, 121, 161),
+ (218, 112, 161), (222, 125, 160), (219, 157, 141), (219, 161, 141),
+ (202, 153, 122), (170, 140, 122), (161, 124, 122), (157, 96, 132),
+ (149, 88, 132), (153, 88, 132), (157, 84, 122), (161, 80, 123),
+ (169, 84, 142), (173, 92, 142), (177, 88, 142), (169, 88, 132),
+ (157, 84, 122), (149, 80, 113), (141, 80, 103), (137, 92, 94),
+ (145, 104, 94), (146, 116, 94), (145, 124, 103), (150, 129, 103),
+ (154, 128, 103), (161, 124, 94), (158, 116, 94), (158, 112, 94),
+ (153, 124, 113), (150, 128, 113), (150, 133, 113), (145, 133, 113),
+ (145, 133, 122), (153, 129, 132), (153, 133, 132), (154, 133, 132),
+ (154, 133, 122), (153, 133, 122), (153, 133, 113), (161, 128, 113),
+ (165, 120, 113), (186, 104, 123), (190, 96, 123), (198, 100, 132),
+ (202, 104, 132), (198, 104, 132), (182, 100, 132), (170, 112, 123),
+ (157, 128, 122), (162, 137, 122), (162, 140, 122), (161, 133, 113),
+ (170, 124, 113), (186, 104, 132), (198, 104, 132), (202, 104, 142),
+ (206, 104, 142), (206, 104, 142), (202, 100, 142), (202, 96, 142),
+ (198, 100, 142), (198, 104, 142), (202, 104, 142), (198, 100, 151),
+ (198, 101, 151), (198, 108, 151), (190, 100, 151), (198, 100, 151),
+ (194, 100, 142), (190, 104, 142), (182, 104, 132), (165, 120, 113),
+ (158, 124, 113), (158, 120, 113), (153, 108, 113), (153, 88, 122),
+ (165, 92, 122), (166, 104, 104), (157, 112, 104), (157, 120, 113),
+ (154, 120, 113), (149, 125, 113), (149, 116, 113), (141, 112, 103),
+ (133, 112, 103), (133, 108, 103), (133, 100, 94), (117, 92, 84),
+ (109, 85, 84), (97, 81, 84), (97, 85, 84), (117, 96, 84),
+ (145, 104, 94), (157, 111, 103), (174, 100, 123), (186, 96, 132),
+ (190, 100, 132), (190, 92, 132), (182, 100, 132), (157, 120, 122),
+ (141, 112, 113), (133, 104, 103), (117, 100, 103), (121, 108, 113),
+ (137, 116, 113), (145, 124, 113), (149, 129, 122), (153, 132, 122),
+ (157, 133, 122), (161, 141, 122), (165, 141, 122), (165, 137, 132),
+ (166, 137, 132), (186, 104, 142), (194, 100, 142), (198, 100, 142),
+ (198, 104, 142), (194, 100, 142), (190, 104, 132), (178, 124, 113),
+ (162, 124, 104), (145, 120, 113), (129, 112, 103), (108, 96, 94),
+ (100, 88, 94), (109, 89, 84), (121, 96, 84), (133, 100, 94),
+ (141, 104, 94), (137, 104, 94), (121, 100, 94), (108, 92, 94),
+ (100, 84, 94), (97, 81, 84), (89, 81, 75), (89, 73, 75),
+ (89, 73, 75), (93, 77, 84), (104, 84, 93), (133, 92, 94),
+ (161, 84, 122), (186, 96, 142), (198, 104, 151), (210, 112, 161),
+ (222, 125, 170), (238, 137, 188), (238, 137, 188), (234, 133, 189),
+ (222, 121, 170), (210, 112, 151), (202, 132, 122), (190, 136, 113),
+ (202, 149, 113), (186, 132, 104), (182, 128, 103), (182, 123, 104),
+ (166, 120, 113), (169, 88, 123), (165, 84, 123), (161, 80, 122),
+ (153, 76, 122), (153, 84, 122), (137, 92, 113), (141, 100, 103),
+ (141, 112, 113), (149, 120, 122), (145, 116, 122), (145, 120, 122),
+ (149, 124, 122), (157, 133, 122), (166, 141, 122), (170, 145, 122),
+ (170, 145, 122), (170, 145, 132), (162, 141, 132), (166, 141, 132),
+ (170, 137, 132), (194, 108, 151), (198, 112, 161), (198, 108, 161),
+ (202, 100, 161), (206, 104, 151), (206, 108, 151), (210, 108, 151),
+ (206, 100, 151), (202, 100, 151), (202, 100, 151), (202, 96, 142),
+ (198, 96, 142), (194, 92, 132), (178, 88, 123), (166, 84, 123)
+ ),
+
+// 46 no-name
+((121, 92, 75), (162, 132, 103), (182, 152, 122), (198, 169, 141),
+ (210, 189, 160), (206, 210, 188), (194, 198, 188), (202, 185, 170),
+ (206, 181, 160), (206, 177, 151), (202, 177, 160), (198, 177, 151),
+ (194, 173, 160), (194, 173, 160), (194, 173, 160), (198, 173, 151),
+ (194, 165, 151), (186, 157, 141), (186, 153, 132), (186, 148, 122),
+ (170, 128, 94), (145, 84, 66), (109, 64, 37), (81, 68, 37),
+ (64, 60, 37), (48, 56, 37), (56, 52, 28), (48, 60, 37),
+ (56, 60, 37), (60, 60, 37), (72, 68, 37), (89, 51, 28),
+ (109, 59, 28), (133, 72, 28), (166, 115, 66), (186, 148, 103),
+ (190, 157, 132), (194, 165, 151), (190, 181, 170), (202, 206, 207),
+ (202, 214, 207), (197, 214, 216), (197, 214, 216), (197, 214, 216),
+ (193, 214, 216), (197, 214, 216), (201, 214, 216), (206, 214, 216),
+ (206, 210, 216), (206, 214, 207), (202, 214, 198), (194, 206, 188),
+ (186, 182, 169), (190, 173, 141), (194, 173, 113), (202, 173, 113),
+ (214, 181, 122), (230, 193, 141), (230, 201, 160), (234, 201, 169),
+ (234, 205, 169), (234, 205, 169), (230, 201, 169), (230, 197, 160),
+ (222, 189, 160), (202, 169, 141), (182, 153, 122), (158, 141, 94),
+ (121, 76, 56), (85, 52, 37), (68, 35, 28), (60, 40, 37),
+ (48, 39, 37), (52, 44, 28), (44, 44, 37), (44, 44, 37),
+ (44, 52, 37), (40, 44, 28), (36, 44, 37), (40, 48, 47),
+ (44, 44, 47), (48, 44, 47), (56, 48, 56), (68, 48, 56),
+ (72, 52, 47), (92, 68, 46), (105, 93, 65), (137, 141, 85),
+ (146, 154, 94), (154, 153, 103), (158, 157, 113), (129, 141, 132),
+ (84, 97, 85), (64, 81, 66), (44, 60, 47), (36, 44, 47),
+ (28, 32, 28), (31, 24, 18), (24, 28, 28), (20, 28, 28),
+ (20, 24, 28), (20, 24, 28), (20, 24, 28), (20, 32, 28),
+ (20, 32, 28), (20, 32, 28), (20, 36, 28), (32, 36, 37),
+ (40, 44, 47), (52, 52, 47), (64, 52, 47), (72, 68, 56),
+ (93, 105, 66), (133, 146, 94), (178, 169, 113), (222, 193, 151),
+ (234, 205, 169), (242, 217, 188), (222, 226, 207), (222, 226, 216),
+ (226, 222, 216), (226, 230, 216), (218, 226, 216), (202, 218, 216),
+ (201, 214, 216), (201, 210, 216), (202, 218, 216), (206, 218, 207),
+ (210, 218, 207), (234, 209, 179), (230, 205, 169), (226, 193, 160),
+ (202, 173, 132), (190, 165, 113), (162, 149, 94), (113, 97, 75),
+ (85, 80, 56), (64, 68, 47), (52, 56, 47), (44, 48, 47),
+ (40, 52, 47), (44, 52, 56), (52, 60, 56), (72, 72, 66),
+ (93, 80, 65), (105, 121, 85), (137, 150, 94), (166, 165, 103),
+ (178, 153, 113), (190, 169, 122), (194, 169, 132), (198, 169, 141),
+ (202, 185, 160), (202, 214, 198), (198, 214, 207), (198, 210, 207),
+ (189, 210, 207), (181, 198, 188), (190, 177, 170), (182, 161, 151),
+ (178, 145, 122), (146, 92, 75), (129, 68, 46), (129, 68, 47),
+ (141, 112, 85), (186, 153, 122), (219, 193, 160), (234, 209, 178),
+ (214, 214, 207), (210, 218, 207), (206, 218, 207), (206, 214, 198),
+ (194, 177, 170), (186, 153, 141), (169, 140, 113), (125, 104, 75),
+ (97, 80, 75), (77, 77, 66), (72, 76, 75), (97, 109, 75),
+ (146, 146, 94), (182, 157, 122), (202, 173, 141), (219, 185, 151),
+ (226, 189, 141), (214, 164, 132), (198, 161, 113), (182, 140, 94),
+ (141, 92, 66), (109, 59, 46), (117, 72, 46), (146, 88, 66),
+ (182, 131, 94), (202, 157, 122), (230, 193, 141), (242, 201, 150),
+ (242, 213, 169), (242, 213, 178), (238, 213, 178), (230, 201, 160),
+ (226, 193, 141), (206, 168, 113), (194, 161, 94), (170, 153, 103),
+ (137, 145, 85), (109, 104, 66), (77, 77, 56), (64, 64, 56),
+ (64, 64, 56), (76, 72, 66), (97, 88, 75), (129, 125, 85),
+ (169, 149, 122), (182, 145, 132), (190, 145, 132), (190, 157, 132),
+ (190, 157, 132), (194, 161, 132), (186, 157, 132), (178, 145, 122),
+ (137, 104, 84), (109, 64, 56), (72, 64, 56), (64, 60, 56),
+ (60, 64, 47), (60, 68, 47), (60, 64, 47), (68, 64, 56),
+ (93, 81, 65), (125, 133, 85), (150, 145, 103), (178, 153, 122),
+ (186, 165, 132), (190, 165, 132), (190, 161, 141), (194, 165, 141),
+ (190, 165, 132), (190, 165, 132), (190, 164, 132), (190, 161, 122),
+ (174, 152, 113), (150, 145, 94), (113, 84, 65), (89, 72, 56),
+ (68, 64, 47), (52, 48, 37), (36, 28, 37), (28, 28, 37),
+ (19, 32, 37), (16, 24, 28), (19, 20, 18), (16, 20, 28),
+ (20, 24, 28), (24, 28, 28), (32, 40, 28), (48, 44, 28)
+ ),
+
+// 47 spring-flora
+((51, 67, 36), (53, 66, 34), (51, 62, 29), (40, 51, 23),
+(40, 42, 26), (37, 43, 25), (36, 48, 25), (32, 46, 23),
+(34, 44, 22), (21, 28, 17), (18, 19, 14), (16, 17, 11),
+(15, 17, 11), (13, 15, 10), (13, 14, 12), (13, 14, 12),
+(15, 17, 13), (17, 21, 14), (26, 35, 21), (34, 44, 28),
+(42, 51, 39), (49, 59, 39), (50, 64, 54), (55, 57, 63),
+(57, 54, 66), (55, 37, 59), (50, 27, 51), (44, 38, 28),
+(26, 32, 18), (17, 20, 14), (15, 18, 12), (14, 16, 10),
+(14, 14, 9), (18, 18, 13), (19, 23, 16), (31, 41, 36),
+(44, 40, 58), (52, 48, 72), (66, 53, 79), (65, 63, 76),
+(63, 61, 68), (54, 63, 42), (53, 66, 34), (46, 67, 34),
+(46, 62, 32), (35, 51, 24), (26, 35, 19), (18, 19, 14),
+(12, 13, 9), (9, 10, 7), (8, 6, 5), (7, 5, 4),
+(9, 6, 6), (11, 9, 9), (14, 15, 11), (21, 22, 15),
+(44, 31, 50), (48, 27, 54), (55, 39, 59), (53, 32, 59),
+(48, 38, 62), (44, 43, 55), (50, 59, 42), (53, 67, 39),
+(54, 72, 45), (58, 79, 44), (63, 87, 44), (61, 87, 42),
+(58, 79, 42), (56, 74, 36), (50, 72, 34), (45, 66, 34),
+(36, 57, 31), (32, 44, 26), (23, 33, 20), (16, 20, 15),
+(15, 19, 12), (17, 19, 13), (17, 20, 15), (23, 33, 22),
+(30, 46, 29), (36, 55, 32), (41, 62, 33), (46, 67, 34),
+(48, 66, 36), (50, 66, 37), (50, 66, 37), (53, 66, 37),
+(51, 67, 39), (53, 67, 38), (55, 72, 42), (57, 72, 42),
+(52, 72, 45), (52, 72, 45), (49, 72, 45), (49, 72, 42),
+(50, 72, 37), (50, 72, 37), (47, 72, 42), (51, 74, 39),
+(57, 72, 34), (55, 72, 39), (57, 75, 39), (61, 79, 39),
+(70, 81, 37), (76, 89, 51), (82, 102, 67), (86, 112, 73),
+(100, 114, 76), (89, 118, 60), (102, 126, 88), (114, 140, 97),
+(135, 152, 98), (112, 127, 93), (118, 140, 93), (191, 174, 163),
+(143, 154, 113), (99, 127, 100), (93, 120, 59), (79, 102, 60),
+(82, 103, 67), (83, 104, 71), (86, 103, 72), (86, 103, 64),
+(87, 87, 52), (73, 88, 50), (76, 80, 52), (62, 87, 57),
+(70, 88, 50), (71, 84, 56), (70, 75, 50), (67, 74, 44),
+(57, 72, 42), (52, 72, 42), (47, 66, 40), (41, 54, 36),
+(34, 42, 25), (21, 27, 16), (16, 19, 12), (12, 11, 10),
+(10, 8, 7), (7, 5, 5), (6, 4, 4), (5, 4, 3),
+(5, 3, 4), (5, 4, 3), (5, 5, 5), (6, 5, 5),
+(6, 4, 5), (7, 4, 5), (7, 4, 5), (7, 5, 5),
+(8, 6, 6), (10, 8, 7), (13, 11, 10), (14, 15, 11),
+(19, 21, 15), (39, 33, 23), (48, 47, 30), (60, 57, 53),
+(79, 65, 97), (74, 58, 76), (106, 59, 79), (96, 90, 85),
+(84, 62, 85), (88, 79, 94), (80, 82, 72), (70, 69, 59),
+(57, 69, 54), (60, 79, 47), (58, 79, 47), (58, 79, 46),
+(54, 79, 44), (53, 79, 44), (53, 79, 44), (53, 79, 47),
+(55, 79, 50), (60, 79, 50), (62, 87, 49), (60, 87, 52),
+(61, 94, 52), (67, 94, 52), (76, 94, 56), (86, 118, 56),
+(80, 96, 53), (83, 109, 44), (83, 110, 55), (76, 103, 55),
+(73, 102, 54), (68, 88, 50), (63, 79, 44), (57, 72, 39),
+(55, 72, 34), (53, 67, 34), (50, 66, 37), (44, 62, 36),
+(44, 55, 38), (41, 57, 35), (40, 61, 36), (41, 62, 38),
+(44, 72, 42), (55, 79, 41), (61, 87, 47), (67, 94, 47),
+(77, 103, 53), (89, 118, 57), (86, 117, 57), (89, 118, 76),
+(114, 127, 85), (106, 126, 97), (93, 119, 76), (82, 117, 72),
+(73, 102, 59), (60, 87, 52), (49, 72, 45), (39, 57, 34),
+(32, 46, 27), (23, 33, 18), (17, 23, 13), (17, 21, 13),
+(17, 20, 14), (22, 27, 17), (33, 42, 25), (36, 47, 28),
+(44, 57, 31), (49, 62, 33), (49, 63, 35), (45, 58, 33),
+(37, 51, 27), (32, 44, 23), (23, 33, 17), (16, 21, 13),
+(12, 15, 8), (11, 13, 7), (11, 11, 7), (10, 14, 8),
+(12, 12, 9), (13, 15, 8), (15, 19, 11), (19, 23, 15),
+(29, 44, 22), (35, 52, 29), (39, 57, 30), (46, 67, 28),
+(50, 66, 28), (47, 72, 29), (47, 63, 30), (39, 57, 27),
+(32, 51, 25), (28, 40, 25), (21, 26, 17), (19, 23, 15),
+(28, 35, 21), (35, 47, 26), (46, 62, 33), (53, 67, 39)
+),
+
+// 48 andi
+((53, 15, 5), (77, 47, 22), (92, 69, 39), (112, 83, 55),
+(126, 90, 59), (138, 87, 63), (140, 90, 66), (140, 93, 64),
+(137, 88, 50), (122, 82, 32), (100, 62, 19), (72, 31, 12),
+(52, 2, 1), (20, 0, 0), (2, 0, 0), (2, 0, 0),
+(24, 21, 12), (72, 34, 30), (82, 53, 47), (97, 62, 41),
+(108, 71, 42), (122, 77, 55), (132, 81, 65), (136, 92, 71),
+(137, 92, 71), (137, 94, 71), (136, 92, 71), (135, 82, 69),
+(132, 74, 61), (115, 67, 53), (106, 59, 54), (85, 45, 42),
+(48, 13, 21), (16, 2, 1), (0, 0, 0), (0, 0, 0),
+(0, 0, 0), (2, 0, 0), (46, 17, 5), (73, 36, 18),
+(84, 60, 38), (116, 76, 52), (137, 83, 59), (148, 94, 71),
+(157, 104, 76), (162, 109, 79), (160, 118, 82), (156, 116, 79),
+(153, 110, 79), (148, 102, 73), (148, 93, 72), (143, 87, 65),
+(145, 81, 58), (144, 81, 55), (146, 79, 49), (140, 81, 48),
+(143, 84, 48), (149, 88, 63), (151, 91, 65), (148, 90, 67),
+(145, 87, 68), (144, 87, 68), (138, 91, 68), (137, 88, 62),
+(118, 85, 56), (111, 83, 43), (100, 74, 36), (100, 63, 33),
+(100, 56, 24), (94, 63, 20), (96, 52, 20), (87, 56, 18),
+(88, 48, 14), (72, 38, 7), (68, 23, 6), (69, 20, 11),
+(83, 34, 12), (97, 43, 28), (100, 46, 40), (114, 66, 50),
+(122, 87, 64), (129, 104, 76), (142, 119, 101), (162, 134, 122),
+(170, 150, 140), (168, 162, 155), (184, 175, 167), (178, 167, 159),
+(174, 157, 148), (164, 151, 133), (163, 143, 115), (149, 127, 91),
+(140, 106, 63), (117, 76, 51), (89, 46, 30), (57, 13, 4),
+(23, 0, 0), (2, 0, 0), (0, 0, 0), (0, 0, 0),
+(19, 6, 1), (56, 21, 8), (86, 50, 35), (108, 57, 48),
+(126, 65, 49), (130, 68, 57), (128, 72, 48), (133, 65, 46),
+(128, 68, 40), (135, 65, 29), (120, 66, 24), (130, 57, 20),
+(97, 47, 11), (73, 23, 7), (63, 14, 2), (54, 0, 0),
+(54, 0, 0), (65, 18, 11), (83, 55, 30), (89, 61, 37),
+(105, 74, 43), (116, 89, 52), (130, 96, 61), (129, 97, 66),
+(132, 96, 71), (141, 100, 78), (142, 109, 76), (145, 108, 76),
+(149, 114, 80), (151, 116, 80), (151, 117, 84), (154, 119, 87),
+(170, 128, 103), (177, 137, 108), (173, 147, 120), (172, 152, 124),
+(176, 156, 141), (187, 171, 142), (182, 172, 146), (174, 157, 140),
+(172, 156, 121), (161, 145, 106), (155, 136, 98), (153, 132, 93),
+(148, 118, 87), (150, 108, 77), (149, 100, 74), (150, 93, 72),
+(145, 92, 61), (143, 89, 62), (140, 85, 57), (140, 89, 52),
+(138, 100, 54), (134, 101, 59), (135, 99, 59), (141, 97, 64),
+(142, 94, 66), (138, 98, 59), (132, 99, 54), (130, 96, 49),
+(120, 91, 38), (105, 60, 17), (94, 14, 3), (61, 0, 0),
+(59, 4, 2), (68, 13, 17), (88, 27, 10), (96, 48, 19),
+(111, 73, 37), (125, 88, 42), (130, 94, 50), (140, 96, 58),
+(148, 97, 69), (150, 98, 73), (153, 103, 80), (158, 110, 79),
+(155, 110, 84), (158, 110, 80), (157, 105, 79), (155, 102, 75),
+(152, 98, 73), (154, 97, 72), (163, 96, 70), (164, 106, 80),
+(165, 112, 81), (164, 117, 80), (163, 118, 81), (162, 120, 81),
+(158, 117, 80), (152, 109, 77), (140, 100, 73), (126, 87, 68),
+(118, 80, 61), (105, 63, 45), (91, 53, 25), (88, 44, 12),
+(86, 40, 15), (104, 35, 17), (117, 57, 30), (117, 68, 42),
+(131, 80, 42), (127, 82, 47), (124, 86, 46), (126, 82, 39),
+(120, 86, 40), (109, 68, 30), (104, 60, 25), (95, 65, 24),
+(101, 66, 21), (103, 65, 36), (107, 72, 39), (116, 82, 42),
+(124, 88, 46), (124, 91, 52), (121, 100, 56), (126, 102, 62),
+(131, 100, 70), (136, 96, 72), (140, 95, 72), (142, 93, 72),
+(142, 96, 72), (143, 93, 68), (140, 93, 70), (140, 90, 70),
+(142, 89, 70), (140, 82, 64), (137, 75, 60), (132, 77, 55),
+(125, 87, 60), (120, 89, 62), (128, 104, 70), (136, 111, 76),
+(147, 118, 89), (156, 135, 117), (159, 145, 124), (174, 148, 130),
+(179, 151, 125), (174, 151, 119), (173, 148, 113), (178, 146, 100),
+(170, 143, 112), (161, 138, 109), (161, 134, 92), (160, 125, 81),
+(161, 135, 91), (170, 123, 85), (164, 122, 88), (153, 130, 80),
+(152, 118, 84), (148, 119, 80), (139, 111, 77), (141, 111, 73),
+(137, 109, 79), (135, 108, 93), (143, 111, 94), (148, 128, 100)
+),
+
+// 49 gig-o835
+((56, 97, 85), (76, 105, 84), (77, 117, 84), (76, 109, 94),
+(84, 109, 94), (88, 113, 94), (92, 125, 94), (101, 121, 103),
+(105, 133, 113), (113, 145, 122), (113, 149, 122), (101, 141, 113),
+(92, 125, 103), (84, 113, 94), (81, 101, 75), (56, 97, 66),
+(52, 89, 66), (36, 81, 66), (28, 77, 66), (44, 72, 47),
+(20, 60, 47), (20, 60, 47), (16, 68, 66), (16, 68, 66),
+(4, 68, 75), (4, 81, 84), (12, 89, 103), (16, 101, 122),
+(28, 101, 122), (28, 105, 122), (28, 113, 122), (36, 105, 122),
+(36, 105, 122), (48, 105, 122), (52, 105, 113), (48, 109, 103),
+(44, 101, 93), (40, 97, 84), (48, 89, 75), (40, 76, 56),
+(24, 72, 56), (28, 72, 56), (24, 76, 56), (40, 72, 66),
+(48, 89, 75), (56, 93, 84), (68, 105, 103), (68, 117, 122),
+(68, 117, 122), (72, 117, 122), (72, 121, 113), (76, 121, 113),
+(84, 125, 103), (89, 125, 103), (92, 121, 113), (93, 129, 103),
+(104, 145, 122), (100, 157, 141), (121, 162, 150), (125, 166, 169),
+(161, 182, 169), (173, 210, 197), (161, 186, 160), (137, 178, 179),
+(121, 165, 160), (108, 145, 141), (92, 141, 131), (80, 129, 131),
+(80, 125, 122), (76, 125, 122), (76, 129, 112), (72, 125, 103),
+(72, 117, 103), (72, 117, 103), (68, 121, 113), (60, 121, 112),
+(52, 117, 122), (48, 121, 131), (40, 117, 141), (40, 113, 141),
+(48, 121, 150), (56, 117, 160), (64, 125, 150), (76, 125, 132),
+(89, 138, 132), (100, 146, 141), (112, 154, 150), (117, 149, 151),
+(116, 145, 150), (112, 149, 150), (100, 146, 160), (80, 142, 160),
+(60, 130, 150), (48, 121, 141), (36, 117, 131), (36, 113, 131),
+(56, 113, 131), (68, 121, 131), (76, 125, 132), (84, 137, 131),
+(96, 142, 141), (100, 149, 150), (100, 146, 160), (104, 150, 160),
+(100, 142, 160), (100, 133, 150), (92, 129, 132), (88, 125, 122),
+(89, 121, 103), (80, 113, 103), (72, 105, 94), (72, 101, 85),
+(64, 93, 75), (36, 93, 84), (28, 97, 93), (12, 81, 84),
+(12, 89, 103), (4, 77, 103), (16, 93, 103), (19, 97, 103),
+(32, 93, 94), (48, 97, 94), (64, 105, 94), (76, 117, 94),
+(93, 121, 103), (97, 121, 103), (92, 125, 113), (84, 125, 113),
+(92, 129, 113), (84, 133, 113), (88, 129, 122), (88, 129, 122),
+(92, 129, 122), (96, 129, 122), (108, 129, 122), (112, 141, 132),
+(109, 153, 131), (108, 146, 141), (113, 149, 141), (125, 149, 132),
+(113, 150, 132), (108, 153, 141), (108, 162, 150), (113, 166, 150),
+(112, 154, 141), (116, 149, 141), (117, 153, 141), (120, 154, 151),
+(125, 162, 151), (133, 162, 151), (141, 170, 151), (145, 174, 160),
+(141, 178, 169), (137, 182, 179), (133, 162, 160), (125, 162, 141),
+(121, 157, 132), (117, 146, 122), (109, 145, 122), (96, 133, 113),
+(88, 121, 113), (84, 113, 103), (76, 113, 103), (68, 113, 103),
+(60, 105, 103), (52, 101, 94), (48, 101, 103), (28, 101, 112),
+(32, 109, 131), (28, 105, 132), (32, 113, 132), (39, 117, 131),
+(56, 121, 132), (68, 125, 131), (68, 125, 131), (76, 129, 131),
+(73, 130, 132), (72, 134, 141), (81, 134, 151), (80, 134, 160),
+(84, 134, 150), (84, 134, 141), (88, 129, 132), (100, 133, 132),
+(100, 137, 132), (100, 142, 132), (100, 137, 141), (100, 142, 141),
+(97, 142, 132), (92, 146, 121), (88, 133, 122), (88, 129, 122),
+(88, 129, 122), (88, 133, 122), (96, 137, 122), (96, 137, 122),
+(108, 145, 132), (112, 141, 132), (108, 145, 141), (116, 141, 141),
+(108, 141, 150), (96, 146, 160), (72, 130, 160), (60, 126, 150),
+(44, 117, 141), (36, 109, 131), (40, 105, 122), (44, 109, 122),
+(60, 113, 122), (72, 121, 122), (85, 129, 122), (96, 133, 131),
+(100, 133, 132), (104, 133, 132), (104, 137, 141), (108, 137, 141),
+(104, 133, 141), (100, 133, 132), (92, 121, 122), (88, 117, 122),
+(76, 117, 113), (80, 117, 103), (76, 117, 103), (72, 117, 103),
+(68, 113, 103), (64, 113, 113), (56, 109, 113), (56, 109, 113),
+(48, 113, 113), (52, 113, 112), (60, 117, 122), (73, 126, 132),
+(80, 130, 160), (88, 138, 170), (80, 138, 170), (68, 134, 160),
+(56, 130, 160), (40, 117, 160), (28, 113, 141), (20, 101, 141),
+(24, 97, 132), (16, 97, 122), (20, 97, 112), (36, 97, 94),
+(48, 101, 93), (60, 105, 94), (72, 117, 94), (77, 121, 103),
+(84, 125, 122), (84, 134, 132), (88, 134, 150), (88, 137, 160),
+(84, 142, 160), (76, 133, 141), (80, 125, 132), (80, 121, 122)
+),
+
+// 50 rie02
+((48, 72, 37), (60, 85, 28), (48, 88, 28), (60, 76, 37),
+(56, 64, 37), (48, 52, 28), (44, 48, 28), (36, 44, 28),
+(24, 36, 18), (20, 36, 18), (24, 40, 18), (28, 44, 18),
+(36, 40, 18), (36, 28, 18), (20, 20, 18), (12, 16, 9),
+(16, 20, 9), (20, 24, 9), (28, 28, 9), (40, 44, 18),
+(56, 52, 28), (68, 64, 37), (88, 72, 47), (85, 93, 47),
+(85, 100, 56), (88, 96, 75), (93, 97, 75), (92, 97, 66),
+(85, 101, 56), (88, 105, 66), (89, 105, 75), (84, 105, 66),
+(89, 113, 66), (113, 141, 85), (133, 157, 122), (141, 190, 150),
+(145, 182, 169), (129, 189, 188), (169, 181, 179), (177, 189, 169),
+(210, 230, 160), (222, 234, 179), (246, 241, 159), (214, 230, 141),
+(190, 218, 160), (198, 226, 122), (234, 246, 121), (218, 209, 112),
+(157, 173, 93), (125, 149, 94), (121, 149, 84), (101, 125, 66),
+(93, 109, 66), (89, 101, 47), (89, 117, 47), (101, 113, 47),
+(113, 125, 56), (125, 133, 75), (153, 141, 84), (153, 157, 103),
+(162, 194, 103), (182, 202, 103), (182, 190, 84), (194, 152, 112),
+(137, 129, 94), (113, 113, 75), (89, 109, 66), (72, 92, 56),
+(60, 89, 56), (56, 92, 56), (60, 93, 47), (64, 88, 47),
+(56, 89, 56), (52, 89, 56), (52, 80, 56), (56, 80, 56),
+(48, 72, 47), (44, 72, 47), (36, 60, 47), (32, 52, 56),
+(36, 56, 66), (36, 56, 56), (36, 68, 56), (48, 88, 56),
+(68, 101, 65), (97, 125, 85), (113, 149, 94), (145, 170, 122),
+(149, 177, 112), (125, 153, 103), (97, 121, 84), (85, 93, 66),
+(60, 64, 66), (36, 44, 47), (20, 36, 28), (12, 24, 18),
+(8, 16, 0), (12, 12, 0), (20, 24, 18), (32, 48, 28),
+(44, 60, 37), (68, 76, 47), (72, 89, 47), (64, 84, 47),
+(81, 88, 47), (72, 93, 28), (60, 76, 47), (56, 56, 47),
+(44, 56, 37), (32, 52, 28), (24, 52, 28), (20, 44, 18),
+(28, 48, 9), (24, 48, 18), (28, 56, 28), (24, 56, 37),
+(24, 56, 37), (28, 56, 37), (36, 60, 47), (48, 72, 37),
+(52, 88, 37), (60, 97, 37), (60, 93, 47), (60, 96, 46),
+(48, 76, 47), (40, 68, 37), (32, 52, 28), (28, 56, 28),
+(16, 44, 18), (16, 40, 18), (16, 44, 9), (28, 48, 9),
+(44, 52, 28), (36, 56, 18), (40, 64, 18), (36, 72, 37),
+(44, 76, 37), (44, 76, 37), (40, 72, 37), (44, 56, 28),
+(36, 52, 28), (28, 48, 28), (32, 40, 28), (32, 32, 18),
+(24, 32, 28), (20, 40, 28), (28, 40, 37), (28, 36, 28),
+(24, 40, 37), (24, 44, 37), (24, 52, 47), (28, 44, 47),
+(28, 40, 37), (28, 48, 37), (20, 40, 37), (12, 40, 28),
+(20, 32, 18), (16, 20, 18), (12, 20, 18), (12, 24, 9),
+(12, 24, 9), (16, 36, 18), (20, 52, 28), (24, 60, 37),
+(32, 76, 47), (44, 80, 56), (44, 81, 47), (48, 97, 47),
+(60, 121, 37), (64, 109, 37), (72, 101, 47), (60, 93, 56),
+(56, 89, 75), (60, 80, 94), (76, 93, 103), (88, 121, 94),
+(101, 129, 75), (97, 145, 75), (93, 133, 56), (113, 157, 65),
+(93, 121, 66), (85, 117, 47), (77, 101, 47), (68, 85, 37),
+(60, 68, 37), (60, 56, 37), (56, 52, 37), (60, 60, 47),
+(80, 80, 56), (88, 104, 75), (117, 129, 94), (149, 173, 113),
+(166, 186, 141), (166, 198, 122), (173, 186, 132), (162, 178, 122),
+(133, 149, 94), (117, 133, 75), (93, 113, 75), (84, 105, 75),
+(60, 97, 75), (64, 68, 66), (44, 64, 75), (36, 52, 66),
+(28, 56, 66), (28, 56, 66), (32, 48, 56), (36, 48, 47),
+(52, 48, 28), (48, 56, 37), (48, 44, 28), (44, 52, 28),
+(56, 56, 28), (60, 60, 28), (64, 68, 37), (80, 80, 56),
+(105, 101, 66), (129, 129, 85), (133, 133, 113), (129, 137, 122),
+(117, 145, 103), (121, 157, 84), (113, 145, 66), (97, 117, 66),
+(76, 105, 56), (72, 113, 56), (68, 129, 56), (60, 125, 55),
+(52, 109, 65), (52, 97, 65), (64, 105, 75), (89, 133, 94),
+(125, 149, 113), (162, 174, 132), (153, 198, 151), (170, 198, 141),
+(169, 206, 141), (174, 210, 132), (181, 214, 131), (169, 214, 140),
+(174, 222, 141), (182, 206, 151), (190, 202, 150), (198, 198, 150),
+(218, 213, 141), (214, 214, 160), (189, 206, 141), (190, 210, 103),
+(174, 210, 75), (117, 153, 56), (105, 133, 56), (105, 125, 56),
+(109, 109, 56), (93, 113, 66), (105, 109, 75), (117, 125, 113)
+),
+
+// 51 rie05
+((73, 125, 84), (77, 141, 83), (89, 146, 83), (104, 154, 94),
+(109, 170, 103), (146, 198, 113), (162, 214, 132), (182, 226, 160),
+(198, 234, 160), (206, 234, 169), (218, 242, 178), (222, 238, 169),
+(218, 226, 150), (222, 230, 141), (218, 230, 131), (210, 222, 131),
+(206, 222, 122), (190, 219, 113), (203, 226, 122), (206, 226, 103),
+(218, 226, 94), (211, 222, 94), (198, 222, 75), (170, 210, 94),
+(170, 206, 103), (150, 194, 113), (137, 174, 113), (121, 170, 103),
+(129, 174, 113), (129, 182, 113), (146, 198, 132), (162, 222, 160),
+(182, 218, 169), (210, 234, 197), (230, 246, 206), (230, 246, 216),
+(230, 242, 207), (222, 234, 197), (214, 238, 188), (214, 234, 169),
+(214, 230, 150), (210, 230, 131), (198, 230, 122), (186, 219, 122),
+(170, 206, 122), (154, 198, 113), (137, 182, 85), (125, 178, 75),
+(121, 170, 84), (137, 153, 94), (141, 174, 94), (162, 182, 113),
+(193, 201, 141), (205, 205, 178), (222, 230, 197), (234, 250, 206),
+(246, 254, 197), (254, 241, 169), (246, 234, 159), (242, 250, 112),
+(230, 238, 94), (222, 234, 112), (198, 222, 113), (190, 219, 103),
+(198, 206, 103), (186, 214, 103), (174, 214, 113), (166, 218, 113),
+(182, 214, 113), (186, 219, 122), (198, 226, 132), (202, 226, 150),
+(222, 222, 160), (238, 234, 159), (246, 233, 169), (226, 238, 178),
+(210, 234, 169), (198, 234, 160), (198, 230, 150), (202, 226, 132),
+(207, 230, 122), (198, 226, 122), (186, 222, 113), (178, 214, 103),
+(166, 206, 103), (166, 202, 94), (150, 190, 84), (141, 186, 75),
+(153, 174, 66), (165, 169, 66), (150, 182, 85), (158, 194, 94),
+(162, 194, 103), (162, 206, 103), (158, 206, 103), (166, 210, 113),
+(162, 202, 113), (162, 210, 122), (166, 214, 113), (158, 206, 94),
+(142, 194, 85), (129, 174, 85), (121, 166, 75), (121, 174, 75),
+(121, 157, 75), (129, 162, 75), (154, 148, 37), (137, 157, 75),
+(109, 154, 75), (121, 162, 103), (137, 170, 132), (166, 198, 151),
+(178, 218, 169), (182, 214, 179), (185, 210, 179), (178, 218, 169),
+(154, 198, 141), (125, 178, 122), (125, 186, 113), (146, 194, 103),
+(150, 194, 103), (150, 194, 103), (154, 194, 94), (146, 198, 85),
+(142, 194, 85), (142, 182, 85), (141, 182, 84), (146, 194, 75),
+(150, 194, 75), (154, 198, 75), (158, 194, 56), (170, 198, 56),
+(162, 206, 66), (190, 210, 75), (230, 187, 28), (254, 198, 9),
+(242, 208, 37), (242, 225, 75), (246, 237, 112), (222, 242, 159),
+(226, 238, 178), (242, 242, 207), (246, 242, 216), (246, 246, 225),
+(242, 242, 225), (242, 241, 216), (226, 242, 188), (206, 234, 179),
+(194, 226, 150), (178, 214, 132), (162, 210, 122), (129, 194, 103),
+(117, 166, 85), (109, 149, 65), (101, 153, 75), (89, 150, 74),
+(97, 158, 75), (101, 162, 84), (113, 170, 85), (137, 194, 94),
+(154, 206, 103), (170, 206, 94), (189, 193, 84), (238, 208, 65),
+(254, 228, 84), (254, 233, 102), (254, 221, 93), (230, 205, 94),
+(182, 206, 113), (153, 177, 122), (113, 154, 94), (100, 150, 94),
+(84, 129, 93), (73, 121, 75), (65, 117, 65), (61, 113, 56),
+(60, 109, 56), (65, 113, 47), (61, 109, 56), (65, 109, 56),
+(65, 113, 56), (69, 117, 65), (77, 129, 65), (93, 141, 65),
+(93, 150, 74), (113, 158, 85), (133, 170, 85), (146, 190, 103),
+(150, 190, 122), (157, 190, 132), (158, 202, 132), (162, 210, 132),
+(174, 219, 122), (186, 222, 122), (198, 230, 150), (206, 230, 169),
+(214, 230, 179), (222, 234, 197), (230, 246, 216), (238, 237, 225),
+(238, 234, 235), (238, 238, 216), (226, 238, 188), (214, 230, 160),
+(194, 218, 141), (190, 198, 131), (174, 198, 122), (174, 202, 122),
+(174, 214, 122), (182, 219, 122), (194, 214, 132), (198, 226, 160),
+(202, 226, 160), (202, 226, 160), (190, 222, 179), (190, 222, 179),
+(194, 230, 179), (202, 230, 178), (214, 234, 178), (222, 230, 179),
+(218, 234, 178), (210, 230, 169), (206, 218, 169), (182, 222, 160),
+(154, 194, 141), (129, 170, 113), (101, 154, 93), (81, 141, 83),
+(81, 133, 83), (77, 125, 74), (73, 121, 74), (69, 129, 65),
+(73, 121, 74), (77, 129, 74), (109, 133, 75), (97, 146, 75),
+(108, 154, 94), (125, 178, 103), (150, 202, 113), (166, 210, 122),
+(186, 222, 141), (194, 222, 151), (194, 218, 151), (182, 218, 151),
+(162, 218, 131), (170, 214, 122), (174, 210, 122), (182, 210, 122),
+(186, 214, 122), (190, 214, 122), (194, 218, 132), (198, 230, 141),
+(202, 230, 150), (207, 230, 141), (202, 218, 131), (190, 206, 122)
+),
+
+// 52 rie11
+((174, 144, 103), (129, 96, 85), (117, 80, 66), (105, 92, 56),
+(113, 80, 47), (101, 92, 66), (109, 113, 85), (125, 137, 103),
+(161, 136, 122), (198, 152, 122), (206, 157, 132), (174, 165, 132),
+(145, 158, 103), (113, 117, 94), (88, 92, 66), (68, 68, 56),
+(60, 56, 47), (52, 43, 37), (48, 40, 37), (44, 44, 28),
+(44, 44, 28), (44, 44, 37), (48, 48, 47), (52, 52, 47),
+(52, 52, 47), (52, 52, 47), (44, 52, 56), (52, 56, 56),
+(56, 56, 56), (56, 56, 56), (56, 60, 56), (60, 60, 56),
+(64, 60, 56), (68, 56, 56), (64, 56, 47), (60, 60, 47),
+(56, 56, 37), (52, 52, 37), (48, 48, 37), (48, 44, 37),
+(48, 44, 37), (48, 44, 47), (44, 44, 56), (40, 48, 56),
+(44, 56, 56), (48, 60, 66), (52, 64, 75), (56, 72, 75),
+(81, 85, 85), (105, 97, 84), (121, 121, 103), (153, 125, 103),
+(174, 140, 122), (194, 148, 132), (190, 152, 132), (161, 141, 113),
+(133, 121, 94), (113, 96, 66), (92, 80, 56), (68, 60, 47),
+(60, 52, 37), (52, 43, 28), (48, 35, 28), (48, 40, 28),
+(52, 52, 37), (52, 56, 47), (56, 60, 47), (60, 56, 47),
+(56, 52, 47), (48, 52, 47), (40, 44, 37), (32, 36, 28),
+(32, 36, 28), (28, 32, 28), (36, 36, 28), (48, 48, 37),
+(68, 60, 47), (85, 72, 56), (113, 92, 75), (153, 129, 103),
+(178, 153, 122), (198, 165, 151), (198, 165, 151), (198, 165, 141),
+(158, 154, 113), (133, 133, 94), (101, 97, 66), (76, 60, 47),
+(73, 56, 37), (64, 48, 47), (64, 48, 47), (60, 56, 56),
+(68, 68, 66), (72, 89, 66), (97, 105, 85), (121, 129, 103),
+(145, 145, 122), (194, 165, 132), (210, 165, 141), (210, 173, 141),
+(218, 181, 151), (218, 180, 160), (218, 177, 160), (198, 169, 141),
+(157, 145, 113), (125, 125, 103), (109, 109, 75), (77, 77, 66),
+(72, 76, 66), (73, 73, 75), (68, 60, 66), (60, 56, 56),
+(48, 48, 56), (48, 48, 47), (44, 44, 47), (32, 36, 37),
+(24, 28, 28), (20, 20, 28), (15, 20, 28), (12, 20, 18),
+(12, 16, 18), (12, 16, 9), (12, 20, 9), (16, 16, 9),
+(12, 20, 9), (16, 20, 9), (20, 20, 9), (20, 20, 9),
+(23, 20, 9), (24, 20, 9), (27, 16, 9), (28, 24, 9),
+(24, 20, 9), (23, 20, 18), (19, 20, 18), (24, 20, 18),
+(31, 20, 18), (35, 24, 28), (28, 24, 18), (32, 24, 28),
+(31, 24, 28), (28, 28, 28), (28, 32, 37), (24, 36, 47),
+(28, 32, 47), (28, 32, 37), (23, 24, 28), (23, 20, 28),
+(24, 28, 28), (28, 36, 37), (40, 40, 37), (44, 44, 47),
+(44, 40, 56), (40, 40, 56), (31, 28, 37), (20, 20, 28),
+(19, 16, 28), (16, 16, 28), (16, 16, 18), (16, 20, 18),
+(16, 24, 18), (16, 24, 18), (20, 24, 18), (23, 20, 18),
+(20, 24, 18), (24, 24, 18), (28, 28, 28), (40, 44, 28),
+(48, 60, 37), (56, 60, 47), (56, 72, 56), (64, 72, 56),
+(68, 64, 56), (68, 64, 66), (64, 64, 56), (68, 64, 66),
+(68, 73, 66), (76, 76, 66), (68, 89, 85), (84, 96, 113),
+(113, 117, 103), (145, 137, 122), (149, 141, 132), (137, 141, 122),
+(105, 121, 103), (81, 85, 84), (60, 68, 66), (48, 60, 56),
+(52, 56, 56), (56, 56, 47), (52, 52, 47), (56, 52, 47),
+(60, 43, 47), (56, 48, 47), (52, 44, 47), (48, 31, 37),
+(40, 28, 28), (40, 32, 28), (36, 31, 28), (44, 32, 18),
+(36, 36, 28), (36, 36, 28), (36, 36, 37), (40, 31, 37),
+(36, 36, 37), (40, 36, 37), (48, 39, 37), (52, 40, 37),
+(64, 44, 37), (64, 44, 37), (60, 48, 37), (56, 48, 47),
+(52, 48, 56), (56, 52, 56), (60, 52, 56), (56, 52, 47),
+(56, 48, 37), (60, 56, 37), (56, 48, 37), (52, 48, 37),
+(48, 48, 37), (44, 44, 37), (44, 48, 28), (32, 44, 18),
+(24, 32, 18), (23, 24, 18), (23, 16, 18), (20, 16, 18),
+(15, 20, 28), (12, 24, 28), (15, 28, 28), (24, 24, 28),
+(36, 28, 28), (44, 32, 28), (48, 40, 37), (52, 48, 47),
+(52, 52, 47), (52, 56, 47), (56, 56, 47), (60, 60, 47),
+(68, 56, 47), (76, 56, 47), (85, 64, 56), (121, 76, 56),
+(153, 103, 75), (174, 136, 94), (210, 164, 132), (222, 189, 169),
+(230, 197, 169), (234, 192, 178), (222, 189, 169), (206, 169, 151),
+(174, 149, 132), (125, 112, 94), (64, 64, 47), (15, 16, 9)
+),
+
+// 53 etretat.ppm
+((37, 54, 37), (56, 74, 51), (72, 89, 61), (92, 102, 76),
+(110, 104, 91), (122, 114, 96), (130, 115, 99), (147, 129, 105),
+(156, 123, 113), (158, 122, 110), (154, 117, 112), (128, 105, 86),
+(113, 95, 78), (111, 88, 68), (109, 75, 53), (119, 73, 54),
+(113, 87, 64), (109, 90, 77), (112, 99, 83), (119, 107, 90),
+(119, 106, 100), (111, 114, 107), (108, 108, 119), (111, 132, 117),
+(122, 140, 117), (131, 147, 122), (125, 148, 116), (128, 146, 117),
+(129, 134, 106), (119, 120, 100), (122, 118, 102), (126, 111, 93),
+(128, 105, 83), (127, 100, 79), (116, 96, 68), (115, 95, 71),
+(105, 93, 75), (96, 95, 76), (94, 88, 75), (91, 90, 84),
+(89, 104, 99), (84, 113, 105), (86, 116, 115), (94, 113, 111),
+(99, 115, 105), (90, 106, 97), (75, 101, 90), (66, 98, 88),
+(64, 83, 77), (54, 80, 74), (48, 74, 60), (63, 77, 61),
+(53, 84, 60), (58, 84, 68), (74, 78, 77), (87, 88, 83),
+(102, 100, 95), (120, 112, 109), (142, 128, 126), (157, 150, 131),
+(173, 160, 142), (172, 164, 151), (171, 163, 140), (152, 166, 129),
+(146, 152, 117), (124, 122, 102), (119, 101, 83), (107, 87, 68),
+(98, 77, 59), (83, 73, 56), (71, 70, 54), (64, 69, 53),
+(62, 65, 49), (51, 58, 44), (46, 53, 42), (42, 55, 36),
+(41, 51, 36), (33, 46, 29), (32, 35, 25), (32, 33, 25),
+(32, 33, 26), (34, 33, 25), (49, 41, 28), (53, 42, 32),
+(46, 46, 32), (35, 39, 27), (35, 36, 26), (33, 35, 26),
+(33, 45, 33), (37, 50, 46), (43, 49, 49), (39, 53, 48),
+(46, 60, 57), (64, 73, 61), (76, 83, 70), (98, 92, 88),
+(120, 108, 103), (130, 119, 129), (133, 122, 130), (140, 134, 141),
+(140, 136, 140), (149, 148, 129), (152, 158, 138), (163, 155, 142),
+(166, 158, 139), (164, 150, 138), (160, 129, 117), (164, 127, 110),
+(160, 117, 85), (129, 101, 81), (95, 89, 60), (75, 83, 56),
+(57, 74, 54), (50, 72, 46), (50, 66, 45), (56, 66, 52),
+(59, 61, 52), (54, 61, 52), (47, 62, 45), (48, 57, 47),
+(45, 58, 46), (45, 51, 40), (50, 49, 35), (50, 48, 35),
+(55, 49, 35), (58, 51, 45), (69, 65, 55), (76, 67, 59),
+(85, 76, 68), (90, 80, 66), (96, 75, 58), (95, 73, 58),
+(84, 72, 61), (83, 72, 62), (76, 71, 65), (72, 68, 63),
+(67, 65, 58), (60, 61, 53), (53, 66, 55), (52, 70, 63),
+(47, 70, 64), (48, 65, 61), (45, 66, 47), (41, 58, 40),
+(38, 58, 38), (31, 46, 31), (31, 34, 25), (33, 33, 24),
+(33, 33, 24), (36, 36, 26), (45, 45, 33), (47, 49, 35),
+(49, 48, 38), (58, 57, 46), (71, 66, 49), (74, 71, 57),
+(75, 74, 63), (70, 78, 64), (63, 77, 60), (59, 67, 51),
+(54, 57, 38), (52, 52, 40), (59, 57, 50), (69, 64, 57),
+(80, 83, 68), (98, 92, 81), (116, 107, 100), (135, 122, 110),
+(149, 139, 125), (168, 152, 137), (173, 164, 146), (178, 166, 145),
+(187, 161, 142), (175, 160, 139), (167, 156, 132), (157, 146, 127),
+(154, 127, 107), (137, 103, 78), (118, 89, 65), (97, 74, 55),
+(94, 64, 46), (81, 67, 51), (77, 68, 53), (77, 75, 64),
+(75, 79, 74), (69, 86, 85), (81, 84, 88), (82, 92, 86),
+(87, 93, 88), (91, 98, 98), (95, 112, 99), (100, 109, 98),
+(92, 102, 92), (86, 97, 88), (95, 99, 92), (108, 109, 98),
+(119, 115, 101), (120, 135, 102), (129, 145, 106), (123, 142, 117),
+(121, 136, 119), (108, 117, 110), (101, 118, 101), (92, 104, 89),
+(84, 95, 87), (83, 88, 74), (85, 82, 74), (82, 80, 72),
+(85, 79, 66), (89, 82, 61), (95, 83, 56), (98, 81, 61),
+(101, 80, 68), (92, 81, 69), (90, 84, 74), (94, 86, 82),
+(98, 92, 86), (96, 99, 90), (113, 110, 94), (119, 105, 92),
+(120, 104, 88), (103, 94, 86), (90, 91, 78), (76, 90, 75),
+(78, 83, 79), (70, 84, 73), (66, 92, 77), (76, 94, 87),
+(94, 99, 100), (103, 108, 119), (105, 132, 130), (129, 156, 139),
+(158, 162, 146), (178, 172, 157), (178, 176, 173), (166, 166, 167),
+(125, 150, 143), (97, 132, 135), (105, 129, 130), (104, 126, 123),
+(100, 128, 120), (95, 119, 120), (95, 117, 107), (103, 127, 111),
+(110, 137, 122), (130, 141, 133), (142, 138, 120), (137, 157, 120),
+(139, 133, 110), (131, 123, 109), (127, 112, 99), (120, 105, 95),
+(116, 103, 90), (103, 92, 79), (105, 92, 76), (114, 99, 83)
+),
+
+// 54 the-hollow-needle-at-etretat.ppm
+((106, 110, 103), (105, 117, 116), (105, 119, 120), (117, 133, 130),
+(123, 144, 135), (124, 144, 138), (125, 149, 140), (123, 146, 140),
+(122, 149, 150), (127, 156, 144), (128, 155, 142), (137, 151, 143),
+(140, 148, 142), (143, 151, 132), (150, 154, 130), (151, 152, 135),
+(147, 158, 149), (143, 154, 144), (139, 151, 144), (137, 150, 147),
+(143, 152, 149), (137, 149, 146), (137, 147, 142), (134, 146, 140),
+(131, 141, 135), (125, 140, 138), (123, 143, 138), (123, 144, 140),
+(123, 144, 140), (128, 145, 142), (127, 150, 141), (120, 153, 141),
+(125, 157, 144), (131, 159, 151), (134, 161, 147), (143, 160, 151),
+(142, 166, 163), (136, 172, 169), (139, 163, 165), (130, 157, 142),
+(130, 151, 141), (131, 146, 141), (134, 148, 150), (130, 152, 143),
+(130, 156, 138), (132, 155, 137), (137, 158, 132), (134, 153, 129),
+(134, 147, 129), (135, 143, 126), (133, 142, 127), (138, 135, 118),
+(132, 125, 106), (125, 113, 95), (118, 101, 87), (103, 92, 72),
+(78, 69, 55), (64, 59, 54), (59, 56, 53), (60, 58, 54),
+(69, 64, 58), (88, 86, 83), (95, 101, 97), (93, 108, 101),
+(91, 108, 101), (91, 109, 107), (91, 110, 109), (89, 114, 113),
+(93, 112, 109), (93, 108, 105), (101, 112, 108), (107, 116, 118),
+(115, 128, 125), (120, 147, 132), (125, 154, 134), (131, 150, 131),
+(138, 147, 135), (138, 144, 132), (136, 139, 128), (138, 138, 127),
+(138, 138, 115), (137, 134, 102), (132, 131, 102), (137, 124, 97),
+(127, 120, 88), (120, 108, 84), (114, 110, 84), (112, 104, 84),
+(113, 99, 83), (116, 105, 87), (118, 111, 89), (121, 117, 102),
+(126, 127, 112), (131, 131, 121), (136, 137, 128), (136, 136, 130),
+(135, 139, 131), (132, 140, 127), (131, 132, 126), (128, 121, 119),
+(122, 110, 104), (106, 92, 92), (91, 75, 69), (70, 59, 53),
+(60, 55, 52), (59, 54, 51), (59, 55, 48), (57, 54, 50),
+(59, 53, 52), (58, 51, 51), (52, 51, 51), (52, 49, 50),
+(55, 52, 51), (51, 53, 50), (55, 52, 52), (58, 53, 54),
+(55, 55, 57), (58, 61, 59), (58, 79, 76), (85, 101, 93),
+(95, 101, 97), (101, 102, 97), (103, 104, 99), (96, 106, 104),
+(108, 116, 106), (116, 120, 110), (125, 129, 121), (129, 141, 131),
+(129, 141, 135), (130, 139, 132), (126, 128, 128), (114, 120, 117),
+(107, 106, 100), (100, 94, 85), (88, 80, 69), (68, 59, 55),
+(60, 53, 52), (55, 51, 48), (53, 49, 48), (49, 52, 48),
+(47, 50, 45), (47, 46, 47), (49, 44, 43), (51, 43, 42),
+(52, 49, 45), (56, 52, 52), (58, 57, 56), (63, 81, 78),
+(86, 105, 100), (102, 121, 118), (99, 124, 126), (105, 124, 123),
+(117, 127, 119), (129, 135, 121), (133, 141, 123), (136, 139, 115),
+(133, 130, 109), (127, 125, 102), (124, 118, 97), (116, 114, 98),
+(120, 113, 99), (121, 113, 96), (125, 109, 96), (120, 110, 94),
+(119, 106, 92), (112, 106, 92), (106, 94, 90), (92, 84, 78),
+(69, 60, 61), (61, 55, 53), (58, 54, 53), (57, 54, 53),
+(52, 54, 54), (52, 53, 51), (53, 55, 50), (60, 57, 52),
+(71, 66, 59), (91, 97, 89), (96, 106, 102), (106, 121, 116),
+(127, 138, 129), (128, 141, 135), (123, 139, 137), (116, 129, 123),
+(103, 125, 111), (104, 121, 111), (111, 115, 106), (114, 114, 105),
+(121, 111, 103), (120, 115, 110), (122, 120, 112), (127, 124, 112),
+(131, 118, 107), (130, 116, 105), (128, 124, 102), (130, 124, 103),
+(139, 121, 98), (143, 116, 99), (147, 128, 100), (154, 127, 99),
+(147, 135, 109), (157, 128, 102), (158, 130, 115), (162, 148, 115),
+(150, 137, 119), (144, 145, 121), (143, 148, 132), (141, 142, 126),
+(135, 140, 128), (134, 141, 133), (134, 144, 132), (132, 140, 130),
+(131, 142, 130), (132, 141, 128), (134, 141, 126), (133, 141, 123),
+(136, 135, 113), (134, 129, 107), (127, 122, 100), (121, 119, 94),
+(107, 116, 90), (106, 111, 91), (105, 103, 93), (107, 103, 92),
+(108, 111, 94), (112, 119, 107), (114, 128, 121), (119, 139, 131),
+(122, 145, 135), (126, 148, 136), (128, 147, 135), (138, 146, 137),
+(139, 145, 132), (142, 142, 125), (143, 133, 118), (144, 132, 111),
+(142, 136, 110), (140, 136, 110), (135, 130, 115), (132, 123, 106),
+(130, 118, 92), (132, 115, 92), (142, 106, 91), (123, 109, 89),
+(107, 101, 84), (95, 91, 86), (72, 64, 59), (64, 58, 53),
+(59, 54, 54), (59, 56, 51), (63, 57, 55), (71, 69, 68),
+(97, 100, 88), (112, 114, 103), (123, 135, 123), (132, 145, 128)
+),
+
+// 55 rouen-cathedral-sunset.ppm
+((137, 129, 126), (130, 125, 111), (120, 112, 98), (113, 109, 87),
+(100, 101, 83), (91, 93, 81), (78, 84, 72), (82, 89, 66),
+(86, 88, 71), (95, 95, 69), (100, 92, 61), (114, 94, 53),
+(125, 91, 54), (127, 96, 57), (124, 99, 57), (115, 101, 64),
+(101, 98, 68), (96, 101, 80), (100, 106, 87), (104, 104, 90),
+(109, 106, 87), (115, 111, 90), (126, 115, 100), (133, 126, 107),
+(143, 135, 116), (144, 133, 122), (149, 131, 136), (156, 134, 129),
+(145, 134, 125), (141, 128, 118), (133, 129, 109), (131, 125, 111),
+(129, 125, 110), (126, 124, 99), (126, 130, 107), (128, 129, 111),
+(133, 129, 113), (136, 136, 123), (148, 145, 137), (156, 150, 144),
+(159, 153, 146), (159, 150, 152), (160, 152, 145), (156, 147, 147),
+(148, 143, 149), (141, 141, 144), (138, 133, 130), (135, 127, 125),
+(134, 131, 124), (140, 131, 120), (140, 129, 126), (138, 137, 132),
+(138, 138, 149), (135, 149, 160), (134, 149, 164), (134, 153, 171),
+(138, 149, 164), (128, 140, 150), (137, 142, 147), (146, 144, 145),
+(158, 141, 140), (163, 146, 139), (176, 154, 136), (179, 159, 144),
+(187, 167, 151), (198, 171, 154), (190, 158, 132), (166, 145, 107),
+(145, 133, 91), (146, 114, 79), (138, 108, 71), (119, 101, 76),
+(107, 102, 78), (98, 98, 78), (94, 92, 78), (93, 90, 71),
+(91, 88, 60), (90, 82, 53), (88, 77, 52), (73, 74, 52),
+(84, 82, 57), (93, 89, 57), (105, 94, 71), (94, 91, 69),
+(97, 94, 72), (108, 98, 64), (115, 99, 71), (110, 101, 74),
+(115, 107, 73), (128, 112, 75), (142, 113, 73), (148, 117, 75),
+(151, 128, 86), (156, 137, 106), (162, 141, 119), (163, 151, 126),
+(167, 156, 133), (163, 155, 136), (152, 147, 144), (140, 147, 140),
+(133, 139, 127), (126, 130, 125), (124, 125, 113), (115, 119, 108),
+(112, 120, 111), (102, 118, 115), (104, 116, 116), (97, 117, 107),
+(107, 113, 107), (111, 108, 103), (105, 109, 99), (104, 111, 97),
+(106, 106, 91), (105, 101, 88), (108, 102, 85), (107, 102, 78),
+(112, 105, 78), (129, 112, 90), (138, 127, 92), (144, 135, 111),
+(138, 142, 129), (149, 149, 147), (155, 152, 161), (153, 158, 170),
+(155, 159, 171), (163, 158, 161), (167, 155, 153), (173, 159, 145),
+(169, 155, 135), (169, 141, 105), (162, 125, 95), (150, 117, 93),
+(138, 116, 91), (134, 109, 85), (119, 109, 80), (119, 108, 82),
+(122, 108, 77), (124, 105, 74), (125, 111, 79), (120, 109, 77),
+(118, 111, 81), (116, 115, 87), (111, 113, 89), (114, 114, 91),
+(116, 121, 96), (134, 128, 108), (153, 138, 122), (169, 146, 132),
+(181, 154, 130), (168, 153, 130), (152, 142, 119), (143, 135, 108),
+(133, 126, 95), (125, 123, 93), (119, 112, 86), (116, 106, 83),
+(121, 111, 84), (128, 107, 87), (129, 110, 95), (138, 120, 91),
+(140, 124, 91), (144, 126, 93), (141, 131, 91), (128, 122, 90),
+(119, 119, 90), (116, 112, 102), (109, 114, 95), (109, 112, 110),
+(109, 120, 119), (121, 129, 122), (132, 131, 122), (144, 145, 135),
+(158, 148, 141), (175, 158, 144), (180, 158, 149), (187, 171, 158),
+(188, 176, 158), (184, 167, 145), (175, 166, 137), (162, 151, 133),
+(153, 137, 111), (144, 123, 100), (128, 119, 90), (120, 113, 85),
+(113, 110, 80), (115, 104, 72), (116, 100, 68), (124, 101, 64),
+(134, 100, 67), (135, 109, 63), (139, 112, 67), (135, 120, 75),
+(133, 120, 93), (133, 127, 105), (132, 128, 123), (132, 136, 146),
+(134, 143, 152), (140, 153, 164), (141, 154, 168), (142, 155, 165),
+(157, 156, 151), (159, 159, 138), (173, 162, 141), (177, 164, 143),
+(177, 163, 150), (181, 166, 158), (181, 169, 162), (175, 170, 163),
+(179, 164, 162), (175, 162, 155), (161, 155, 148), (158, 157, 147),
+(150, 155, 147), (147, 153, 144), (136, 138, 124), (128, 126, 114),
+(112, 112, 107), (100, 106, 99), (96, 104, 99), (93, 103, 96),
+(103, 102, 89), (111, 104, 84), (112, 102, 80), (118, 102, 74),
+(119, 98, 70), (118, 95, 67), (116, 94, 61), (112, 90, 58),
+(104, 90, 60), (103, 91, 56), (98, 86, 57), (92, 84, 51),
+(89, 84, 60), (106, 82, 55), (111, 90, 56), (113, 85, 56),
+(103, 92, 65), (109, 103, 77), (104, 99, 86), (106, 96, 89),
+(101, 101, 95), (103, 105, 98), (109, 110, 103), (102, 114, 94),
+(112, 114, 107), (126, 117, 99), (136, 130, 104), (150, 140, 107),
+(157, 138, 106), (157, 142, 104), (154, 139, 109), (155, 146, 128),
+(154, 142, 136), (155, 145, 145), (148, 151, 156), (135, 158, 170)
+),
+
+// 56 the-houses-of-parliament.ppm
+((105, 95, 133), (97, 86, 120), (81, 81, 103), (78, 71, 88),
+(74, 66, 79), (75, 64, 73), (76, 68, 75), (79, 65, 74),
+(81, 71, 74), (83, 74, 81), (88, 74, 87), (91, 81, 96),
+(98, 92, 112), (101, 95, 126), (107, 95, 136), (110, 95, 141),
+(109, 90, 136), (104, 88, 136), (105, 89, 130), (103, 87, 118),
+(102, 88, 117), (105, 87, 110), (101, 84, 111), (105, 90, 112),
+(103, 99, 115), (105, 101, 116), (107, 98, 117), (104, 90, 120),
+(97, 87, 122), (98, 90, 114), (94, 89, 109), (90, 91, 103),
+(88, 82, 96), (82, 76, 86), (78, 74, 77), (70, 72, 69),
+(66, 72, 63), (57, 67, 60), (60, 67, 57), (68, 73, 65),
+(77, 83, 71), (85, 94, 92), (94, 102, 97), (97, 101, 106),
+(101, 101, 100), (99, 99, 106), (100, 98, 109), (103, 94, 112),
+(103, 90, 112), (101, 87, 113), (104, 89, 111), (100, 96, 107),
+(95, 96, 107), (95, 88, 106), (97, 88, 108), (99, 93, 112),
+(98, 90, 105), (99, 89, 96), (97, 90, 96), (96, 87, 99),
+(94, 88, 105), (97, 85, 111), (101, 86, 113), (105, 88, 117),
+(109, 93, 128), (116, 98, 135), (115, 98, 135), (113, 103, 131),
+(112, 105, 138), (108, 99, 133), (107, 95, 124), (109, 94, 123),
+(106, 91, 122), (106, 88, 116), (107, 87, 116), (104, 84, 117),
+(105, 84, 116), (109, 87, 112), (110, 91, 114), (107, 96, 117),
+(111, 92, 117), (107, 89, 116), (105, 86, 118), (105, 80, 127),
+(99, 75, 134), (98, 73, 129), (100, 80, 128), (98, 79, 126),
+(101, 74, 127), (98, 78, 121), (97, 76, 113), (96, 75, 103),
+(92, 76, 99), (88, 79, 90), (87, 75, 90), (90, 74, 94),
+(87, 75, 92), (88, 76, 92), (91, 71, 96), (99, 77, 99),
+(96, 80, 102), (95, 77, 105), (91, 71, 112), (94, 69, 117),
+(98, 78, 117), (103, 87, 122), (114, 90, 141), (109, 96, 134),
+(113, 101, 136), (126, 107, 140), (119, 100, 132), (114, 96, 113),
+(108, 88, 109), (99, 87, 106), (92, 83, 102), (87, 79, 96),
+(88, 76, 95), (85, 74, 97), (87, 69, 102), (88, 71, 101),
+(88, 73, 97), (90, 79, 103), (93, 81, 107), (93, 82, 118),
+(99, 81, 123), (96, 81, 125), (93, 84, 125), (94, 82, 129),
+(100, 90, 128), (101, 97, 124), (100, 99, 116), (107, 103, 112),
+(117, 106, 104), (114, 106, 108), (117, 106, 115), (108, 99, 108),
+(104, 99, 107), (103, 107, 98), (103, 102, 98), (95, 96, 97),
+(95, 94, 91), (87, 87, 83), (87, 79, 87), (81, 73, 84),
+(77, 63, 79), (75, 60, 74), (73, 61, 75), (72, 61, 78),
+(75, 63, 78), (73, 62, 78), (78, 63, 84), (77, 58, 97),
+(85, 66, 100), (87, 65, 102), (82, 72, 104), (81, 66, 105),
+(80, 60, 96), (73, 63, 82), (66, 63, 76), (57, 55, 54),
+(21, 24, 21), (23, 29, 20), (48, 55, 48), (55, 64, 60),
+(63, 67, 69), (70, 66, 72), (81, 74, 83), (89, 79, 89),
+(96, 86, 96), (105, 86, 105), (117, 96, 112), (118, 114, 124),
+(126, 123, 126), (135, 132, 151), (125, 115, 137), (119, 118, 134),
+(109, 109, 133), (109, 101, 128), (112, 107, 128), (109, 104, 122),
+(101, 103, 124), (106, 99, 117), (112, 100, 119), (109, 98, 112),
+(106, 101, 114), (105, 102, 114), (100, 99, 111), (96, 94, 103),
+(94, 89, 94), (94, 88, 88), (88, 92, 82), (82, 92, 73),
+(79, 89, 73), (72, 84, 72), (70, 83, 68), (83, 75, 77),
+(89, 76, 87), (91, 80, 103), (101, 84, 114), (108, 86, 126),
+(110, 87, 139), (115, 90, 142), (124, 85, 142), (107, 82, 129),
+(109, 92, 129), (100, 82, 119), (97, 82, 112), (97, 83, 102),
+(89, 84, 97), (89, 83, 96), (92, 86, 94), (96, 87, 95),
+(99, 86, 92), (95, 84, 96), (94, 85, 93), (91, 84, 85),
+(86, 83, 84), (78, 85, 89), (73, 84, 86), (69, 76, 83),
+(75, 71, 83), (77, 68, 83), (77, 69, 81), (79, 70, 84),
+(80, 69, 82), (77, 68, 83), (78, 69, 85), (83, 72, 86),
+(82, 75, 87), (84, 74, 84), (83, 72, 81), (77, 66, 76),
+(73, 60, 73), (62, 52, 70), (60, 52, 63), (67, 65, 63),
+(80, 68, 65), (84, 78, 71), (87, 78, 86), (88, 82, 93),
+(92, 84, 96), (97, 85, 102), (105, 82, 108), (103, 84, 105),
+(98, 82, 102), (94, 77, 103), (88, 74, 101), (88, 73, 102),
+(89, 74, 104), (88, 75, 115), (90, 81, 118), (95, 83, 122),
+(97, 82, 118), (100, 83, 113), (97, 86, 109), (91, 89, 101)
+),
+
+// 57 starry-night.ppm
+((23, 26, 18), (27, 29, 21), (30, 29, 21), (29, 30, 22),
+(32, 35, 26), (40, 42, 32), (43, 47, 35), (45, 54, 38),
+(52, 52, 36), (50, 54, 38), (51, 56, 39), (50, 56, 42),
+(50, 60, 42), (52, 63, 47), (60, 68, 51), (69, 73, 55),
+(67, 76, 55), (68, 78, 53), (69, 82, 55), (70, 87, 59),
+(77, 101, 65), (87, 101, 66), (92, 108, 67), (93, 105, 65),
+(93, 107, 65), (90, 110, 66), (93, 110, 65), (95, 111, 69),
+(102, 114, 73), (104, 110, 69), (109, 110, 61), (98, 105, 65),
+(94, 108, 61), (82, 98, 56), (78, 86, 53), (81, 79, 57),
+(81, 82, 62), (88, 91, 60), (99, 93, 62), (95, 106, 64),
+(91, 110, 65), (84, 117, 77), (89, 124, 81), (104, 128, 92),
+(114, 130, 84), (120, 132, 84), (138, 148, 85), (148, 150, 76),
+(134, 147, 76), (131, 138, 78), (110, 108, 66), (96, 89, 57),
+(81, 72, 49), (66, 65, 45), (63, 60, 40), (60, 55, 44),
+(58, 56, 43), (56, 56, 42), (53, 57, 42), (58, 59, 42),
+(57, 61, 41), (57, 65, 42), (57, 65, 45), (59, 61, 49),
+(63, 68, 55), (71, 77, 53), (76, 86, 54), (90, 95, 55),
+(101, 108, 65), (114, 125, 74), (133, 146, 76), (142, 156, 82),
+(161, 168, 92), (177, 178, 94), (177, 173, 93), (167, 158, 86),
+(152, 147, 79), (133, 115, 72), (98, 100, 67), (80, 86, 54),
+(73, 80, 53), (61, 71, 47), (44, 58, 38), (37, 46, 32),
+(35, 38, 27), (29, 35, 23), (28, 36, 25), (28, 38, 24),
+(33, 46, 30), (37, 47, 30), (44, 48, 34), (47, 49, 36),
+(46, 51, 36), (41, 51, 31), (35, 50, 34), (35, 48, 31),
+(42, 51, 35), (46, 53, 44), (53, 62, 43), (60, 70, 49),
+(73, 77, 59), (80, 88, 64), (83, 98, 84), (86, 101, 99),
+(100, 114, 92), (101, 108, 80), (93, 106, 76), (81, 103, 75),
+(87, 101, 75), (85, 113, 85), (78, 110, 80), (83, 109, 74),
+(86, 107, 71), (86, 113, 65), (89, 104, 67), (79, 101, 66),
+(77, 98, 63), (70, 86, 63), (68, 76, 67), (69, 82, 61),
+(73, 82, 59), (72, 84, 61), (70, 90, 69), (80, 98, 83),
+(91, 106, 77), (102, 110, 80), (102, 120, 77), (98, 126, 70),
+(99, 122, 78), (94, 114, 72), (84, 101, 67), (75, 84, 58),
+(76, 78, 53), (69, 77, 48), (64, 65, 44), (58, 64, 43),
+(51, 55, 41), (46, 51, 38), (40, 45, 35), (30, 34, 29),
+(29, 29, 22), (26, 27, 22), (26, 28, 24), (25, 27, 22),
+(28, 28, 22), (31, 30, 25), (37, 34, 28), (41, 37, 29),
+(42, 39, 34), (47, 44, 36), (42, 47, 33), (38, 44, 30),
+(33, 36, 27), (31, 31, 25), (29, 27, 21), (27, 24, 21),
+(24, 26, 19), (23, 26, 18), (20, 18, 14), (24, 25, 18),
+(30, 32, 23), (37, 40, 30), (42, 45, 37), (51, 55, 41),
+(60, 63, 47), (70, 75, 52), (84, 78, 49), (100, 92, 59),
+(112, 106, 63), (118, 115, 66), (121, 131, 78), (122, 138, 89),
+(125, 149, 98), (139, 157, 105), (124, 152, 98), (113, 139, 83),
+(103, 125, 72), (105, 112, 69), (93, 103, 63), (80, 88, 54),
+(73, 78, 53), (61, 76, 49), (57, 66, 47), (54, 68, 47),
+(50, 64, 40), (53, 60, 42), (56, 53, 44), (58, 54, 39),
+(58, 56, 39), (53, 57, 37), (53, 56, 38), (56, 54, 36),
+(52, 49, 33), (42, 44, 30), (35, 38, 26), (29, 35, 24),
+(29, 35, 26), (38, 42, 31), (44, 44, 32), (53, 51, 31),
+(62, 62, 41), (78, 77, 54), (91, 97, 67), (109, 122, 77),
+(136, 138, 83), (149, 149, 83), (163, 154, 83), (167, 153, 89),
+(156, 160, 90), (145, 153, 84), (129, 142, 79), (109, 130, 80),
+(101, 123, 85), (98, 123, 94), (91, 102, 87), (90, 98, 79),
+(94, 92, 81), (83, 92, 66), (78, 84, 59), (74, 77, 55),
+(64, 65, 48), (58, 56, 43), (50, 48, 36), (45, 42, 31),
+(37, 34, 25), (34, 30, 21), (34, 28, 24), (38, 39, 28),
+(47, 48, 35), (52, 52, 41), (56, 59, 43), (59, 68, 57),
+(57, 78, 58), (68, 89, 57), (69, 88, 56), (67, 80, 54),
+(61, 77, 51), (56, 74, 47), (56, 69, 44), (53, 62, 42),
+(51, 56, 42), (53, 53, 45), (51, 52, 44), (51, 54, 48),
+(54, 59, 52), (64, 61, 53), (69, 66, 63), (63, 69, 56),
+(75, 76, 52), (80, 79, 52), (78, 82, 51), (84, 91, 59),
+(92, 100, 65), (97, 104, 63), (98, 99, 61), (92, 93, 57)
+),
+
+// 58 water-lilies-sunset.ppm
+((71, 67, 46), (71, 67, 50), (67, 72, 57), (72, 84, 60),
+(81, 87, 72), (92, 93, 74), (84, 86, 74), (88, 100, 84),
+(83, 84, 73), (77, 74, 68), (68, 62, 56), (60, 59, 48),
+(60, 55, 47), (57, 49, 38), (53, 45, 38), (52, 44, 36),
+(52, 46, 36), (57, 49, 37), (58, 49, 38), (60, 52, 39),
+(63, 57, 43), (70, 60, 45), (80, 65, 48), (85, 71, 52),
+(89, 76, 54), (90, 83, 53), (96, 92, 57), (102, 95, 62),
+(106, 98, 61), (112, 100, 62), (115, 107, 65), (119, 106, 67),
+(129, 111, 70), (132, 119, 74), (130, 120, 71), (126, 118, 69),
+(112, 111, 84), (101, 100, 80), (87, 93, 92), (90, 101, 87),
+(85, 94, 100), (107, 108, 90), (130, 118, 110), (135, 118, 104),
+(153, 156, 127), (183, 183, 126), (189, 184, 126), (177, 165, 100),
+(173, 153, 91), (162, 148, 88), (145, 135, 77), (134, 124, 72),
+(116, 107, 66), (103, 91, 59), (89, 73, 62), (78, 65, 49),
+(69, 58, 43), (67, 51, 41), (63, 50, 42), (66, 51, 48),
+(69, 57, 49), (76, 58, 53), (81, 65, 54), (86, 73, 55),
+(86, 81, 53), (95, 87, 55), (100, 87, 58), (101, 88, 65),
+(112, 87, 80), (117, 98, 73), (114, 106, 68), (120, 110, 68),
+(122, 109, 67), (122, 107, 66), (125, 104, 66), (116, 94, 63),
+(114, 90, 60), (105, 84, 56), (93, 76, 53), (93, 75, 51),
+(91, 75, 52), (84, 76, 49), (83, 73, 48), (82, 74, 48),
+(77, 76, 51), (72, 74, 53), (68, 68, 54), (69, 66, 54),
+(66, 66, 52), (65, 64, 48), (65, 62, 49), (64, 58, 49),
+(63, 58, 46), (62, 60, 46), (61, 60, 46), (58, 57, 44),
+(56, 55, 45), (56, 52, 44), (55, 51, 45), (49, 50, 41),
+(51, 47, 38), (54, 49, 41), (50, 46, 38), (45, 49, 39),
+(44, 47, 36), (50, 47, 34), (48, 44, 33), (51, 44, 34),
+(51, 49, 37), (55, 51, 37), (56, 49, 38), (54, 52, 42),
+(55, 50, 40), (57, 51, 39), (58, 53, 39), (60, 53, 38),
+(59, 54, 40), (61, 55, 41), (61, 58, 43), (64, 60, 43),
+(72, 64, 48), (83, 65, 47), (84, 72, 48), (93, 75, 51),
+(102, 87, 55), (106, 97, 61), (113, 104, 64), (122, 109, 67),
+(133, 113, 69), (136, 116, 69), (142, 123, 72), (142, 123, 74),
+(144, 118, 73), (130, 100, 83), (134, 88, 71), (112, 86, 58),
+(100, 68, 52), (80, 54, 44), (72, 52, 42), (66, 49, 38),
+(63, 55, 41), (63, 57, 42), (63, 60, 44), (70, 64, 47),
+(72, 68, 48), (78, 71, 47), (76, 77, 51), (78, 82, 52),
+(82, 81, 52), (79, 74, 48), (78, 70, 47), (75, 67, 45),
+(67, 64, 43), (62, 59, 42), (59, 55, 42), (57, 53, 40),
+(56, 53, 44), (60, 55, 50), (67, 61, 49), (77, 68, 51),
+(84, 74, 52), (89, 82, 53), (98, 89, 56), (101, 88, 58),
+(102, 90, 59), (101, 95, 69), (95, 95, 61), (96, 94, 59),
+(83, 88, 66), (84, 79, 68), (76, 73, 67), (73, 68, 54),
+(68, 62, 51), (66, 61, 48), (61, 61, 47), (60, 57, 47),
+(57, 55, 44), (57, 54, 40), (57, 56, 40), (57, 54, 39),
+(56, 55, 38), (52, 51, 37), (48, 46, 38), (44, 41, 36),
+(42, 42, 33), (44, 43, 33), (48, 40, 34), (52, 44, 36),
+(57, 47, 42), (57, 49, 42), (62, 55, 41), (64, 55, 44),
+(67, 56, 43), (68, 58, 44), (69, 61, 41), (71, 61, 41),
+(78, 63, 48), (78, 72, 52), (86, 75, 58), (95, 85, 61),
+(110, 99, 68), (119, 111, 69), (134, 124, 74), (149, 132, 78),
+(152, 141, 84), (161, 143, 85), (143, 122, 76), (129, 116, 70),
+(114, 90, 60), (98, 82, 55), (89, 66, 48), (79, 56, 45),
+(74, 53, 44), (71, 54, 46), (66, 54, 42), (64, 56, 40),
+(62, 56, 40), (64, 52, 39), (63, 48, 39), (61, 48, 43),
+(58, 50, 44), (57, 51, 44), (61, 53, 46), (67, 53, 49),
+(68, 57, 48), (71, 60, 52), (70, 63, 49), (69, 61, 48),
+(70, 62, 49), (70, 65, 48), (68, 68, 47), (65, 67, 48),
+(62, 64, 46), (63, 61, 43), (64, 60, 42), (68, 59, 43),
+(72, 61, 44), (79, 56, 45), (85, 65, 47), (85, 71, 52),
+(82, 77, 59), (79, 77, 63), (72, 71, 65), (70, 69, 56),
+(63, 69, 53), (61, 66, 52), (58, 63, 47), (64, 62, 45),
+(67, 59, 48), (71, 63, 51), (74, 64, 54), (74, 72, 52),
+(84, 77, 54), (92, 84, 61), (105, 96, 62), (117, 102, 75)
+),
+
+// 59 gogh.chambre-arles.ppm
+(
+ (24, 17, 8), (25, 34, 4), (53, 56, 72), (75, 94, 108),
+ (86, 110, 145), (99, 141, 175), (125, 154, 163), (166, 146, 109),
+ (182, 142, 103), (191, 159, 113), (206, 191, 120), (238, 216, 142),
+ (252, 233, 156), (242, 229, 171), (220, 226, 215), (209, 216, 221),
+ (207, 213, 224), (199, 215, 224), (189, 208, 223), (171, 194, 208),
+ (176, 188, 187), (183, 159, 117), (172, 130, 92), (163, 113, 62),
+ (159, 109, 53), (176, 110, 9), (188, 116, 6), (196, 118, 6),
+ (202, 123, 10), (209, 126, 15), (200, 127, 38), (193, 145, 91),
+ (240, 193, 119), (251, 235, 153), (252, 240, 170), (246, 231, 174),
+ (229, 224, 220), (232, 232, 224), (224, 230, 230), (206, 219, 225),
+ (194, 207, 215), (177, 193, 190), (205, 177, 130), (196, 149, 101),
+ (191, 134, 97), (193, 146, 106), (196, 168, 125), (176, 190, 191),
+ (170, 197, 217), (187, 204, 220), (188, 206, 216), (178, 198, 204),
+ (171, 191, 183), (173, 147, 108), (162, 121, 84), (154, 108, 70),
+ (140, 98, 58), (116, 85, 48), (116, 84, 56), (131, 93, 52),
+ (148, 97, 49), (171, 95, 9), (183, 104, 7), (188, 110, 6),
+ (190, 110, 4), (193, 109, 2), (198, 109, 1), (193, 107, 1),
+ (194, 106, 7), (196, 109, 4), (196, 110, 6), (199, 108, 5),
+ (208, 107, 2), (208, 114, 3), (209, 118, 3), (207, 116, 4),
+ (207, 118, 1), (205, 116, 2), (205, 115, 2), (203, 113, 2),
+ (200, 113, 3), (199, 113, 4), (200, 113, 8), (198, 110, 6),
+ (195, 112, 4), (195, 111, 8), (197, 113, 9), (193, 112, 8),
+ (193, 108, 14), (169, 119, 67), (172, 143, 109), (171, 184, 178),
+ (169, 189, 198), (168, 187, 198), (168, 185, 180), (169, 148, 113),
+ (169, 132, 96), (167, 122, 89), (169, 124, 91), (169, 131, 94),
+ (166, 155, 102), (148, 172, 162), (129, 172, 187), (136, 170, 194),
+ (153, 157, 161), (165, 131, 95), (160, 121, 84), (161, 118, 85),
+ (163, 122, 91), (171, 133, 94), (184, 152, 116), (179, 181, 168),
+ (177, 188, 203), (169, 193, 202), (163, 191, 202), (149, 178, 194),
+ (133, 162, 176), (136, 138, 111), (132, 144, 61), (137, 134, 53),
+ (194, 125, 15), (190, 117, 10), (191, 118, 4), (193, 122, 4),
+ (200, 125, 8), (207, 130, 2), (210, 134, 2), (216, 134, 8),
+ (219, 135, 6), (219, 145, 9), (206, 205, 99), (232, 220, 127),
+ (222, 216, 127), (201, 205, 98), (196, 170, 103), (175, 139, 86),
+ (151, 118, 83), (115, 102, 102), (110, 133, 148), (120, 156, 176),
+ (134, 169, 197), (136, 177, 199), (161, 174, 178), (182, 144, 107),
+ (181, 124, 68), (201, 121, 16), (206, 122, 10), (208, 119, 4),
+ (214, 118, 1), (220, 132, 10), (212, 144, 55), (234, 182, 112),
+ (228, 188, 116), (194, 165, 109), (185, 142, 96), (187, 133, 83),
+ (177, 126, 79), (178, 127, 86), (187, 139, 104), (198, 164, 121),
+ (209, 185, 155), (216, 212, 192), (221, 224, 217), (227, 230, 223),
+ (230, 233, 226), (222, 228, 229), (207, 218, 218), (189, 198, 201),
+ (197, 169, 130), (181, 136, 99), (169, 120, 86), (155, 117, 75),
+ (153, 114, 75), (151, 110, 72), (144, 106, 72), (144, 104, 68),
+ (148, 105, 65), (147, 103, 64), (147, 100, 66), (145, 106, 67),
+ (141, 112, 72), (137, 119, 73), (134, 114, 77), (139, 118, 78),
+ (150, 115, 79), (164, 119, 78), (185, 138, 95), (195, 171, 118),
+ (243, 205, 123), (251, 237, 150), (253, 240, 166), (252, 235, 164),
+ (224, 211, 162), (191, 180, 120), (162, 128, 86), (132, 94, 56),
+ (84, 77, 37), (55, 30, 16), (64, 34, 7), (112, 61, 7),
+ (150, 78, 12), (177, 94, 6), (186, 107, 5), (192, 115, 5),
+ (200, 115, 7), (207, 117, 5), (205, 124, 12), (209, 130, 13),
+ (196, 163, 88), (221, 200, 109), (247, 221, 145), (239, 223, 166),
+ (217, 211, 177), (176, 195, 194), (129, 161, 184), (94, 125, 148),
+ (73, 92, 121), (85, 85, 107), (99, 94, 60), (97, 90, 58),
+ (106, 72, 24), (133, 77, 14), (143, 80, 7), (128, 63, 11),
+ (96, 59, 24), (100, 56, 31), (125, 80, 40), (142, 96, 59),
+ (158, 112, 62), (174, 133, 82), (185, 158, 112), (201, 192, 157),
+ (196, 206, 208), (197, 216, 223), (202, 212, 223), (198, 212, 215),
+ (190, 198, 209), (190, 188, 167), (184, 158, 112), (169, 129, 94),
+ (155, 114, 77), (146, 112, 78), (142, 112, 78), (142, 107, 75),
+ (142, 107, 69), (138, 104, 65), (144, 98, 61), (153, 107, 52),
+ (166, 97, 11), (174, 101, 5), (186, 109, 5), (190, 106, 5),
+ (190, 102, 4), (197, 41, 1), (116, 33, 7), (58, 32, 5)
+),
+
+// 60 gogh.entrance.ppm
+(
+ (2, 2, 1), (6, 5, 8), (5, 8, 7), (8, 15, 8),
+ (9, 21, 16), (11, 26, 20), (27, 49, 30), (35, 65, 35),
+ (54, 77, 47), (69, 106, 52), (94, 125, 64), (124, 137, 81),
+ (148, 157, 87), (169, 182, 104), (190, 193, 116), (207, 207, 129),
+ (219, 220, 140), (219, 208, 142), (217, 220, 140), (215, 214, 126),
+ (207, 199, 112), (188, 169, 87), (179, 142, 58), (182, 132, 44),
+ (185, 143, 29), (198, 203, 65), (220, 214, 99), (231, 222, 117),
+ (238, 228, 127), (234, 229, 136), (251, 245, 156), (235, 235, 144),
+ (240, 235, 151), (244, 234, 151), (241, 233, 149), (239, 236, 136),
+ (241, 230, 124), (233, 232, 116), (223, 216, 105), (213, 204, 98),
+ (179, 179, 91), (136, 145, 60), (93, 138, 53), (74, 111, 58),
+ (62, 113, 53), (59, 102, 62), (52, 94, 67), (43, 94, 70),
+ (45, 87, 61), (39, 83, 56), (38, 87, 54), (62, 100, 47),
+ (66, 108, 47), (89, 112, 52), (117, 127, 44), (139, 139, 44),
+ (139, 139, 50), (131, 129, 42), (102, 121, 60), (80, 112, 58),
+ (68, 94, 42), (47, 88, 28), (35, 68, 39), (42, 56, 54),
+ (45, 56, 61), (41, 64, 72), (37, 98, 69), (40, 111, 80),
+ (53, 139, 100), (77, 133, 110), (84, 136, 112), (81, 122, 117),
+ (77, 95, 121), (71, 97, 103), (59, 97, 100), (54, 90, 90),
+ (44, 80, 92), (44, 71, 79), (42, 80, 76), (63, 93, 67),
+ (88, 113, 66), (129, 128, 58), (155, 157, 69), (177, 179, 99),
+ (194, 197, 109), (206, 201, 124), (221, 216, 120), (233, 236, 121),
+ (240, 235, 118), (231, 221, 104), (221, 208, 98), (200, 199, 94),
+ (182, 172, 58), (171, 136, 47), (142, 133, 57), (124, 108, 46),
+ (81, 97, 48), (77, 94, 46), (89, 92, 52), (125, 84, 42),
+ (156, 99, 32), (134, 106, 41), (82, 99, 42), (76, 92, 40),
+ (65, 85, 37), (36, 75, 45), (23, 75, 49), (33, 79, 47),
+ (29, 90, 53), (41, 104, 75), (61, 112, 79), (74, 134, 72),
+ (109, 151, 93), (145, 173, 124), (174, 196, 161), (186, 206, 175),
+ (189, 207, 161), (175, 188, 141), (138, 168, 118), (109, 132, 109),
+ (73, 101, 101), (55, 95, 82), (46, 73, 57), (20, 55, 43),
+ (17, 36, 39), (12, 37, 36), (13, 28, 28), (20, 25, 20),
+ (21, 18, 23), (11, 15, 28), (30, 30, 17), (22, 29, 26),
+ (21, 28, 22), (19, 42, 22), (30, 37, 23), (31, 38, 30),
+ (25, 38, 31), (24, 27, 34), (25, 30, 48), (31, 46, 62),
+ (31, 55, 54), (35, 63, 60), (29, 76, 77), (31, 78, 79),
+ (36, 91, 82), (45, 90, 99), (49, 97, 111), (64, 108, 108),
+ (74, 122, 123), (99, 143, 139), (168, 173, 141), (190, 209, 149),
+ (204, 215, 159), (209, 226, 160), (209, 214, 153), (197, 207, 132),
+ (185, 180, 115), (169, 158, 102), (144, 149, 73), (102, 133, 62),
+ (73, 107, 58), (54, 74, 55), (42, 64, 52), (31, 52, 44),
+ (34, 45, 38), (39, 47, 30), (49, 51, 29), (55, 52, 34),
+ (44, 53, 45), (55, 76, 60), (81, 95, 78), (105, 124, 100),
+ (143, 165, 98), (182, 200, 132), (202, 214, 149), (215, 220, 168),
+ (230, 236, 165), (231, 235, 181), (216, 229, 170), (207, 213, 174),
+ (194, 210, 185), (180, 219, 201), (140, 198, 201), (142, 188, 193),
+ (159, 184, 158), (110, 160, 143), (82, 144, 137), (89, 145, 113),
+ (103, 137, 95), (131, 146, 98), (146, 151, 109), (156, 157, 110),
+ (196, 190, 134), (207, 201, 144), (208, 209, 154), (208, 211, 148),
+ (195, 201, 146), (131, 157, 129), (97, 132, 126), (77, 126, 117),
+ (49, 120, 108), (58, 113, 88), (65, 92, 76), (73, 95, 66),
+ (89, 94, 62), (123, 96, 47), (160, 100, 40), (165, 107, 42),
+ (143, 113, 58), (107, 105, 61), (88, 112, 70), (83, 97, 66),
+ (74, 81, 60), (57, 84, 64), (49, 90, 67), (54, 100, 76),
+ (60, 96, 84), (67, 115, 90), (98, 124, 91), (105, 118, 89),
+ (132, 135, 72), (163, 134, 84), (181, 167, 99), (198, 191, 105),
+ (210, 208, 116), (212, 212, 112), (219, 215, 108), (219, 219, 115),
+ (219, 221, 131), (227, 218, 137), (231, 228, 139), (228, 228, 135),
+ (226, 224, 134), (233, 228, 134), (236, 233, 129), (237, 233, 133),
+ (243, 233, 138), (243, 230, 134), (241, 232, 129), (237, 230, 123),
+ (226, 217, 108), (213, 211, 99), (193, 191, 89), (163, 175, 74),
+ (149, 155, 48), (144, 152, 62), (167, 155, 61), (182, 173, 83),
+ (186, 180, 104), (190, 176, 100), (178, 171, 89), (168, 141, 62),
+ (144, 137, 64), (107, 111, 51), (79, 86, 46), (35, 31, 17)
+),
+
+// 61 gogh.the-night-cafe.ppm
+(
+ (56, 36, 25), (72, 40, 16), (76, 46, 26), (96, 55, 31),
+ (121, 71, 41), (145, 88, 46), (161, 90, 60), (168, 109, 63),
+ (168, 119, 83), (169, 122, 86), (162, 123, 79), (139, 115, 75),
+ (102, 115, 73), (99, 123, 72), (105, 132, 75), (108, 137, 75),
+ (133, 147, 94), (146, 139, 137), (179, 173, 130), (198, 185, 140),
+ (202, 187, 145), (208, 180, 162), (215, 187, 141), (233, 188, 126),
+ (234, 192, 124), (212, 183, 114), (214, 176, 101), (222, 181, 93),
+ (214, 174, 83), (210, 165, 80), (207, 161, 83), (199, 155, 77),
+ (197, 154, 74), (194, 149, 67), (190, 144, 62), (187, 136, 62),
+ (188, 133, 66), (191, 122, 70), (192, 129, 67), (190, 137, 63),
+ (194, 137, 62), (196, 143, 64), (195, 149, 70), (200, 155, 70),
+ (201, 162, 73), (205, 165, 77), (206, 162, 85), (202, 160, 91),
+ (193, 150, 96), (183, 156, 98), (182, 153, 106), (179, 160, 112),
+ (163, 157, 107), (165, 147, 91), (163, 143, 88), (172, 137, 83),
+ (180, 134, 79), (181, 136, 77), (179, 132, 67), (175, 132, 72),
+ (178, 131, 73), (178, 124, 67), (180, 134, 64), (181, 131, 60),
+ (188, 126, 59), (181, 116, 63), (168, 117, 60), (173, 101, 61),
+ (161, 88, 58), (158, 80, 58), (144, 83, 53), (128, 81, 62),
+ (112, 94, 57), (98, 104, 62), (90, 102, 66), (89, 102, 71),
+ (99, 93, 83), (112, 100, 85), (127, 103, 76), (144, 107, 69),
+ (152, 110, 69), (150, 112, 63), (155, 113, 63), (162, 112, 60),
+ (157, 110, 57), (154, 109, 51), (154, 101, 55), (142, 91, 55),
+ (118, 79, 54), (107, 74, 48), (105, 74, 45), (103, 67, 36),
+ (108, 52, 39), (116, 56, 41), (122, 53, 37), (135, 60, 44),
+ (149, 67, 41), (155, 67, 45), (163, 68, 48), (170, 74, 50),
+ (175, 81, 55), (176, 98, 43), (173, 109, 37), (167, 112, 51),
+ (176, 116, 48), (170, 117, 57), (170, 119, 61), (170, 116, 55),
+ (168, 123, 59), (173, 129, 61), (174, 124, 65), (170, 120, 64),
+ (156, 126, 59), (157, 110, 61), (158, 93, 69), (140, 100, 55),
+ (132, 91, 47), (110, 76, 48), (93, 79, 54), (75, 63, 46),
+ (74, 52, 43), (70, 45, 43), (65, 48, 41), (72, 55, 41),
+ (80, 57, 37), (88, 61, 37), (97, 66, 44), (104, 66, 46),
+ (113, 69, 45), (125, 70, 43), (137, 83, 48), (149, 85, 42),
+ (158, 82, 45), (154, 90, 46), (155, 79, 49), (157, 81, 50),
+ (161, 80, 48), (165, 76, 55), (165, 75, 56), (160, 70, 49),
+ (159, 70, 45), (156, 74, 48), (158, 72, 45), (157, 68, 47),
+ (163, 67, 46), (161, 64, 45), (157, 66, 47), (162, 63, 44),
+ (162, 58, 43), (155, 59, 44), (154, 67, 47), (154, 76, 52),
+ (147, 80, 55), (134, 71, 58), (123, 73, 49), (115, 78, 57),
+ (113, 78, 59), (116, 89, 60), (119, 91, 69), (119, 92, 65),
+ (123, 92, 58), (129, 97, 52), (146, 103, 57), (152, 109, 61),
+ (151, 113, 61), (163, 114, 63), (163, 124, 60), (164, 122, 52),
+ (172, 133, 52), (166, 111, 58), (170, 101, 53), (168, 95, 51),
+ (163, 91, 51), (160, 91, 51), (160, 92, 52), (165, 97, 52),
+ (165, 96, 45), (171, 93, 49), (176, 92, 50), (180, 105, 51),
+ (186, 112, 59), (199, 121, 54), (201, 141, 67), (200, 146, 71),
+ (205, 156, 72), (207, 162, 76), (208, 165, 77), (212, 169, 86),
+ (215, 170, 89), (221, 174, 95), (218, 172, 100), (215, 172, 99),
+ (209, 166, 89), (206, 165, 83), (206, 165, 82), (196, 164, 86),
+ (195, 162, 91), (190, 160, 90), (189, 154, 92), (177, 149, 84),
+ (180, 142, 81), (172, 133, 70), (152, 129, 77), (109, 130, 76),
+ (100, 127, 70), (97, 123, 70), (98, 118, 68), (94, 116, 69),
+ (90, 113, 68), (87, 97, 55), (88, 80, 63), (92, 80, 57),
+ (86, 75, 61), (99, 73, 62), (119, 83, 63), (149, 98, 67),
+ (160, 113, 66), (171, 128, 69), (176, 142, 76), (190, 156, 75),
+ (204, 170, 86), (214, 175, 100), (225, 179, 110), (238, 201, 109),
+ (239, 196, 98), (225, 180, 89), (224, 178, 82), (218, 159, 77),
+ (212, 158, 81), (202, 155, 82), (200, 151, 79), (194, 149, 75),
+ (188, 141, 69), (188, 144, 69), (177, 140, 68), (188, 140, 66),
+ (178, 147, 70), (185, 141, 69), (186, 136, 77), (196, 138, 82),
+ (200, 143, 106), (211, 164, 103), (215, 172, 106), (208, 180, 132),
+ (202, 174, 141), (180, 169, 126), (181, 163, 117), (166, 141, 101),
+ (175, 131, 101), (149, 106, 85), (123, 92, 70), (99, 74, 55),
+ (76, 55, 43), (71, 47, 35), (68, 34, 33), (64, 45, 33)
+),
+
+// 62 gogh.vegetable-montmartre.ppm
+(
+ (40, 43, 29), (44, 40, 28), (66, 55, 30), (91, 61, 30),
+ (112, 65, 40), (137, 82, 49), (164, 102, 53), (196, 118, 67),
+ (220, 129, 69), (227, 128, 77), (232, 141, 72), (221, 151, 83),
+ (236, 161, 80), (225, 161, 82), (225, 163, 80), (221, 168, 96),
+ (221, 153, 88), (233, 171, 96), (210, 174, 105), (227, 161, 98),
+ (235, 172, 109), (238, 179, 116), (232, 176, 103), (231, 186, 102),
+ (227, 184, 110), (210, 171, 118), (190, 161, 102), (178, 160, 101),
+ (159, 156, 109), (143, 154, 124), (134, 149, 126), (132, 146, 120),
+ (127, 144, 118), (131, 144, 118), (144, 152, 114), (144, 150, 104),
+ (163, 143, 102), (185, 147, 93), (193, 154, 98), (199, 155, 92),
+ (198, 155, 90), (193, 146, 87), (192, 142, 90), (185, 142, 87),
+ (182, 141, 83), (169, 139, 80), (145, 132, 92), (125, 148, 90),
+ (127, 138, 106), (123, 137, 121), (120, 136, 121), (116, 132, 118),
+ (112, 134, 121), (106, 134, 117), (99, 122, 113), (96, 119, 109),
+ (91, 107, 99), (87, 103, 102), (89, 103, 86), (95, 100, 77),
+ (97, 96, 72), (95, 90, 64), (98, 89, 79), (100, 95, 69),
+ (117, 98, 64), (109, 97, 72), (104, 100, 72), (115, 96, 71),
+ (120, 99, 74), (133, 110, 70), (156, 123, 77), (165, 139, 76),
+ (177, 146, 79), (194, 150, 88), (210, 148, 87), (213, 156, 85),
+ (212, 158, 97), (211, 160, 98), (211, 161, 100), (218, 168, 111),
+ (222, 182, 114), (236, 194, 126), (232, 198, 125), (224, 187, 122),
+ (211, 183, 126), (228, 198, 141), (182, 189, 131), (151, 169, 141),
+ (144, 161, 134), (134, 155, 137), (129, 152, 136), (127, 149, 136),
+ (128, 148, 135), (124, 145, 132), (123, 145, 131), (116, 142, 132),
+ (111, 136, 131), (108, 130, 128), (107, 126, 122), (99, 122, 111),
+ (102, 105, 88), (107, 112, 82), (111, 107, 74), (115, 106, 67),
+ (123, 102, 60), (151, 111, 62), (162, 99, 57), (161, 103, 76),
+ (161, 115, 73), (154, 121, 70), (148, 125, 66), (139, 123, 78),
+ (143, 122, 88), (148, 124, 84), (135, 113, 77), (127, 117, 76),
+ (114, 111, 73), (114, 111, 73), (117, 106, 91), (114, 110, 74),
+ (111, 114, 83), (104, 111, 97), (99, 122, 112), (98, 124, 119),
+ (100, 127, 118), (105, 128, 119), (106, 129, 121), (112, 132, 121),
+ (114, 136, 127), (111, 136, 130), (112, 137, 131), (117, 141, 128),
+ (121, 147, 130), (125, 145, 126), (125, 141, 122), (124, 141, 120),
+ (129, 141, 111), (154, 137, 98), (166, 147, 94), (187, 148, 90),
+ (202, 147, 85), (211, 141, 84), (218, 142, 83), (219, 149, 89),
+ (227, 156, 96), (222, 155, 94), (210, 153, 97), (204, 152, 96),
+ (190, 148, 93), (172, 149, 91), (156, 147, 93), (143, 149, 103),
+ (137, 146, 106), (128, 143, 114), (125, 141, 115), (125, 138, 112),
+ (124, 131, 98), (122, 123, 91), (119, 120, 88), (105, 115, 79),
+ (103, 102, 69), (95, 94, 61), (84, 87, 62), (82, 78, 54),
+ (75, 75, 46), (71, 69, 54), (83, 76, 40), (99, 68, 31),
+ (101, 66, 33), (95, 48, 18), (107, 55, 26), (105, 60, 35),
+ (103, 57, 37), (111, 56, 27), (120, 40, 23), (117, 60, 29),
+ (118, 80, 46), (141, 99, 57), (149, 104, 54), (150, 98, 54),
+ (126, 88, 37), (128, 68, 33), (121, 73, 34), (117, 65, 22),
+ (133, 74, 34), (158, 66, 35), (168, 90, 53), (169, 97, 49),
+ (195, 102, 56), (200, 110, 61), (203, 118, 65), (209, 124, 65),
+ (196, 126, 55), (181, 128, 57), (174, 125, 72), (171, 121, 70),
+ (165, 114, 68), (168, 100, 58), (175, 105, 52), (182, 110, 62),
+ (178, 120, 72), (188, 131, 73), (197, 139, 79), (197, 143, 79),
+ (196, 155, 89), (195, 163, 97), (193, 159, 110), (193, 173, 124),
+ (185, 173, 134), (154, 164, 134), (150, 164, 131), (148, 159, 133),
+ (140, 157, 132), (135, 149, 128), (130, 152, 128), (124, 146, 126),
+ (121, 144, 124), (118, 142, 125), (116, 135, 118), (119, 130, 102),
+ (124, 131, 98), (125, 128, 95), (121, 120, 89), (114, 109, 76),
+ (114, 104, 70), (101, 95, 59), (103, 88, 59), (85, 84, 48),
+ (92, 75, 43), (97, 79, 55), (85, 85, 40), (97, 74, 35),
+ (103, 72, 40), (98, 76, 42), (103, 78, 45), (101, 83, 47),
+ (105, 88, 60), (115, 95, 59), (114, 99, 55), (138, 112, 55),
+ (151, 122, 65), (171, 130, 69), (175, 125, 74), (195, 135, 72),
+ (211, 143, 73), (219, 137, 76), (224, 140, 74), (215, 144, 71),
+ (198, 140, 76), (186, 137, 70), (173, 126, 68), (167, 109, 50),
+ (147, 102, 55), (110, 85, 39), (87, 62, 37), (52, 51, 30)
+),
+
+// 63 matisse.bonheur-vivre.ppm
+(
+ (3, 3, 3), (39, 31, 46), (91, 59, 63), (169, 125, 81),
+ (206, 159, 105), (208, 186, 115), (204, 196, 101), (223, 190, 85),
+ (245, 207, 76), (247, 210, 66), (248, 210, 60), (245, 197, 62),
+ (222, 186, 74), (207, 176, 85), (191, 155, 108), (161, 126, 102),
+ (105, 111, 111), (80, 98, 102), (43, 82, 60), (36, 61, 45),
+ (23, 54, 40), (18, 51, 42), (32, 60, 38), (53, 74, 51),
+ (73, 98, 67), (118, 135, 93), (175, 161, 120), (219, 165, 132),
+ (226, 171, 140), (226, 195, 154), (228, 206, 139), (241, 213, 115),
+ (239, 208, 112), (234, 199, 103), (223, 189, 95), (227, 161, 77),
+ (220, 151, 71), (205, 158, 48), (202, 142, 41), (184, 121, 37),
+ (177, 116, 25), (160, 107, 36), (100, 116, 44), (81, 66, 62),
+ (66, 52, 60), (75, 84, 83), (79, 90, 108), (94, 104, 112),
+ (122, 120, 122), (175, 163, 125), (212, 176, 145), (221, 190, 167),
+ (225, 201, 166), (232, 199, 158), (230, 198, 147), (228, 199, 107),
+ (228, 208, 101), (226, 206, 68), (230, 203, 59), (223, 197, 46),
+ (243, 199, 23), (232, 203, 40), (217, 191, 46), (218, 173, 35),
+ (201, 178, 35), (226, 186, 25), (210, 168, 29), (204, 176, 59),
+ (217, 150, 36), (188, 119, 21), (216, 163, 19), (220, 145, 9),
+ (225, 159, 1), (223, 157, 1), (219, 135, 0), (204, 134, 21),
+ (204, 113, 2), (193, 104, 2), (195, 112, 0), (186, 115, 18),
+ (173, 117, 13), (183, 104, 19), (183, 118, 32), (164, 155, 43),
+ (142, 155, 66), (97, 138, 69), (47, 88, 61), (48, 79, 51),
+ (35, 74, 49), (39, 72, 52), (42, 77, 57), (67, 86, 90),
+ (90, 95, 101), (142, 133, 104), (168, 142, 94), (187, 136, 104),
+ (201, 135, 106), (207, 138, 123), (209, 140, 121), (217, 151, 122),
+ (217, 151, 127), (222, 150, 126), (219, 152, 134), (222, 167, 136),
+ (227, 170, 144), (220, 174, 146), (220, 183, 156), (219, 176, 157),
+ (192, 169, 155), (138, 168, 128), (104, 149, 108), (65, 119, 86),
+ (38, 87, 71), (29, 70, 58), (25, 59, 54), (25, 69, 56),
+ (29, 66, 56), (43, 88, 64), (73, 117, 88), (118, 135, 93),
+ (153, 142, 78), (193, 146, 72), (198, 145, 61), (199, 162, 70),
+ (196, 157, 53), (219, 150, 47), (222, 163, 48), (217, 193, 59),
+ (222, 201, 62), (222, 189, 82), (207, 180, 93), (211, 185, 98),
+ (205, 179, 100), (190, 161, 97), (169, 154, 85), (117, 158, 94),
+ (82, 131, 102), (75, 121, 93), (78, 119, 94), (88, 121, 90),
+ (131, 102, 87), (162, 105, 38), (160, 101, 33), (163, 104, 28),
+ (166, 88, 30), (176, 78, 3), (169, 71, 3), (166, 43, 1),
+ (159, 15, 8), (154, 8, 8), (165, 6, 3), (160, 3, 0),
+ (149, 1, 0), (148, 9, 3), (50, 11, 10), (48, 29, 12),
+ (46, 24, 27), (48, 39, 33), (82, 70, 32), (155, 103, 30),
+ (172, 119, 46), (184, 130, 54), (210, 156, 69), (227, 161, 91),
+ (220, 169, 110), (224, 155, 107), (210, 131, 104), (184, 106, 94),
+ (170, 101, 86), (166, 91, 81), (156, 96, 85), (88, 111, 82),
+ (76, 123, 90), (62, 119, 86), (54, 116, 91), (66, 123, 102),
+ (86, 142, 116), (126, 158, 123), (163, 165, 118), (209, 168, 119),
+ (222, 178, 144), (225, 200, 163), (226, 212, 162), (221, 201, 167),
+ (225, 209, 170), (215, 213, 188), (234, 206, 190), (224, 210, 171),
+ (227, 201, 174), (223, 203, 178), (225, 181, 170), (218, 163, 147),
+ (196, 142, 130), (181, 132, 97), (180, 111, 63), (198, 93, 35),
+ (200, 101, 3), (213, 103, 26), (208, 94, 4), (209, 84, 8),
+ (210, 67, 1), (195, 66, 1), (194, 74, 2), (181, 70, 0),
+ (188, 65, 1), (189, 53, 4), (184, 50, 1), (179, 53, 3),
+ (170, 41, 4), (174, 13, 6), (176, 13, 3), (178, 48, 5),
+ (166, 64, 52), (197, 90, 56), (188, 99, 80), (209, 104, 96),
+ (222, 122, 92), (206, 131, 112), (206, 151, 120), (199, 161, 131),
+ (173, 180, 138), (136, 179, 145), (98, 156, 130), (83, 147, 117),
+ (70, 134, 107), (85, 132, 106), (110, 144, 103), (162, 140, 88),
+ (178, 118, 84), (192, 122, 93), (204, 122, 113), (203, 126, 119),
+ (196, 137, 118), (191, 131, 113), (182, 130, 107), (161, 153, 120),
+ (104, 145, 109), (78, 128, 103), (53, 112, 87), (35, 102, 80),
+ (40, 96, 71), (52, 103, 75), (97, 137, 79), (138, 159, 67),
+ (187, 173, 64), (192, 177, 59), (210, 190, 61), (219, 183, 91),
+ (224, 196, 104), (221, 205, 139), (225, 202, 155), (209, 201, 152),
+ (156, 176, 144), (115, 120, 128), (69, 87, 96), (27, 58, 48)
+),
+
+// 64 matisse.flowers.ppm
+(
+ (13, 10, 17), (66, 30, 14), (140, 53, 34), (165, 44, 33),
+ (205, 94, 45), (177, 121, 75), (182, 159, 89), (185, 175, 117),
+ (209, 186, 130), (203, 189, 140), (208, 192, 141), (214, 198, 142),
+ (220, 201, 150), (221, 204, 151), (222, 202, 151), (220, 198, 141),
+ (216, 197, 135), (220, 203, 142), (216, 203, 156), (224, 207, 168),
+ (227, 206, 168), (227, 212, 168), (230, 217, 173), (232, 217, 181),
+ (235, 218, 193), (241, 213, 200), (235, 218, 199), (233, 218, 198),
+ (231, 217, 185), (231, 219, 176), (228, 213, 170), (221, 208, 170),
+ (211, 204, 178), (206, 203, 188), (209, 205, 191), (214, 205, 197),
+ (211, 207, 198), (200, 201, 195), (199, 199, 187), (198, 197, 178),
+ (203, 198, 167), (206, 197, 164), (213, 202, 163), (216, 202, 164),
+ (218, 196, 160), (224, 191, 153), (225, 189, 141), (215, 194, 130),
+ (217, 191, 115), (220, 197, 104), (221, 188, 104), (217, 163, 87),
+ (215, 161, 51), (211, 172, 50), (213, 174, 59), (206, 166, 88),
+ (214, 164, 87), (208, 153, 87), (197, 121, 93), (209, 82, 39),
+ (193, 21, 8), (168, 38, 20), (170, 75, 61), (151, 127, 95),
+ (154, 165, 148), (180, 188, 174), (184, 187, 172), (181, 187, 175),
+ (178, 184, 177), (157, 178, 184), (152, 175, 182), (133, 172, 173),
+ (130, 171, 159), (139, 171, 165), (156, 177, 183), (175, 187, 185),
+ (180, 189, 190), (182, 189, 183), (189, 190, 174), (190, 192, 168),
+ (202, 194, 160), (206, 197, 153), (212, 201, 158), (218, 202, 169),
+ (225, 209, 179), (226, 216, 183), (237, 222, 193), (236, 222, 200),
+ (235, 223, 207), (235, 221, 210), (236, 222, 213), (233, 223, 214),
+ (234, 219, 215), (234, 221, 214), (233, 220, 212), (234, 221, 214),
+ (237, 222, 217), (239, 226, 216), (239, 233, 216), (239, 230, 221),
+ (239, 229, 219), (237, 228, 214), (233, 222, 211), (231, 221, 208),
+ (230, 223, 204), (232, 216, 201), (222, 215, 187), (207, 205, 185),
+ (199, 200, 185), (195, 197, 184), (195, 196, 182), (194, 195, 178),
+ (186, 190, 176), (180, 184, 177), (158, 174, 178), (143, 172, 156),
+ (116, 159, 149), (72, 103, 96), (55, 76, 65), (21, 42, 44),
+ (41, 38, 37), (70, 59, 35), (149, 106, 97), (175, 131, 93),
+ (213, 180, 99), (219, 188, 113), (221, 195, 117), (227, 204, 124),
+ (226, 206, 143), (233, 198, 151), (229, 211, 163), (230, 215, 178),
+ (233, 216, 200), (220, 218, 206), (211, 211, 204), (195, 198, 199),
+ (185, 197, 189), (187, 189, 187), (188, 182, 188), (181, 177, 182),
+ (175, 178, 176), (161, 175, 162), (163, 141, 151), (176, 112, 118),
+ (141, 99, 109), (82, 80, 53), (53, 51, 40), (36, 40, 51),
+ (60, 73, 63), (78, 111, 97), (131, 161, 125), (154, 178, 154),
+ (156, 181, 179), (157, 182, 187), (164, 192, 197), (180, 188, 197),
+ (192, 194, 200), (200, 200, 198), (209, 208, 199), (215, 214, 202),
+ (213, 218, 201), (212, 215, 205), (205, 207, 204), (198, 198, 204),
+ (192, 196, 199), (180, 193, 193), (176, 186, 192), (174, 184, 189),
+ (158, 181, 187), (151, 175, 178), (135, 169, 158), (116, 156, 147),
+ (57, 83, 86), (56, 31, 32), (70, 28, 19), (121, 56, 46),
+ (155, 75, 65), (178, 106, 114), (193, 133, 101), (182, 171, 116),
+ (165, 167, 140), (188, 139, 142), (184, 123, 127), (186, 114, 117),
+ (197, 146, 111), (208, 168, 141), (221, 184, 171), (208, 198, 181),
+ (213, 206, 191), (223, 209, 195), (232, 216, 201), (232, 216, 207),
+ (231, 217, 208), (232, 220, 213), (226, 220, 215), (219, 217, 209),
+ (217, 218, 209), (216, 209, 208), (202, 202, 202), (192, 197, 195),
+ (193, 195, 186), (192, 193, 185), (193, 195, 182), (194, 198, 191),
+ (205, 206, 200), (217, 210, 195), (231, 215, 202), (231, 218, 204),
+ (235, 220, 205), (236, 220, 204), (234, 221, 205), (232, 221, 205),
+ (231, 217, 207), (231, 214, 204), (225, 207, 196), (214, 200, 192),
+ (205, 191, 187), (204, 169, 169), (206, 173, 167), (200, 193, 175),
+ (195, 196, 180), (194, 198, 186), (198, 200, 196), (215, 201, 202),
+ (229, 214, 207), (231, 217, 208), (233, 219, 209), (234, 223, 211),
+ (238, 227, 211), (240, 229, 207), (240, 227, 208), (239, 226, 209),
+ (237, 224, 208), (236, 220, 205), (235, 215, 204), (227, 211, 197),
+ (214, 208, 193), (197, 197, 184), (188, 189, 172), (169, 180, 160),
+ (149, 169, 137), (115, 136, 85), (73, 66, 39), (51, 31, 30),
+ (35, 32, 12), (33, 28, 14), (38, 41, 33), (63, 55, 40),
+ (77, 100, 78), (129, 155, 131), (123, 162, 151), (129, 165, 159),
+ (135, 167, 158), (138, 150, 139), (124, 121, 135), (56, 54, 65)
+),
+
+// 65 matisse.lecon-musique.ppm
+(
+ (17, 24, 13), (25, 50, 37), (51, 60, 57), (56, 70, 71),
+ (50, 108, 84), (60, 120, 101), (78, 109, 104), (91, 110, 128),
+ (119, 123, 103), (131, 141, 108), (139, 147, 107), (140, 144, 102),
+ (129, 130, 88), (129, 120, 90), (142, 119, 69), (162, 122, 56),
+ (171, 127, 64), (179, 127, 69), (148, 107, 66), (133, 103, 70),
+ (107, 101, 68), (92, 116, 55), (83, 102, 62), (78, 127, 54),
+ (69, 132, 63), (77, 137, 76), (85, 144, 72), (89, 154, 81),
+ (103, 161, 72), (98, 163, 76), (101, 156, 80), (98, 164, 114),
+ (107, 177, 79), (106, 162, 118), (120, 164, 114), (128, 150, 134),
+ (129, 160, 141), (138, 163, 154), (140, 170, 157), (142, 170, 160),
+ (129, 167, 170), (152, 180, 168), (160, 179, 158), (173, 190, 157),
+ (172, 193, 172), (173, 201, 181), (183, 205, 191), (180, 198, 192),
+ (187, 202, 204), (191, 202, 196), (206, 209, 188), (211, 213, 196),
+ (209, 214, 190), (211, 208, 189), (200, 201, 185), (197, 199, 182),
+ (204, 198, 162), (196, 190, 159), (190, 192, 136), (179, 190, 122),
+ (181, 178, 114), (184, 163, 122), (175, 156, 120), (172, 156, 120),
+ (171, 156, 126), (147, 146, 127), (132, 151, 135), (141, 158, 139),
+ (153, 154, 141), (154, 149, 131), (148, 158, 114), (150, 150, 113),
+ (136, 142, 113), (128, 122, 96), (122, 119, 98), (114, 121, 95),
+ (113, 117, 90), (106, 107, 82), (112, 94, 85), (130, 95, 87),
+ (150, 92, 81), (167, 91, 92), (180, 78, 72), (181, 74, 75),
+ (185, 69, 75), (182, 67, 62), (194, 85, 50), (196, 122, 30),
+ (221, 159, 7), (226, 161, 6), (220, 163, 6), (234, 187, 37),
+ (190, 132, 59), (207, 156, 59), (186, 128, 40), (187, 130, 19),
+ (188, 129, 36), (186, 115, 28), (162, 108, 32), (154, 110, 45),
+ (115, 91, 48), (98, 100, 65), (93, 97, 62), (90, 93, 64),
+ (70, 81, 63), (71, 74, 57), (75, 78, 50), (96, 74, 40),
+ (107, 80, 43), (150, 81, 55), (178, 92, 50), (189, 88, 80),
+ (186, 105, 102), (175, 138, 121), (195, 151, 124), (205, 153, 135),
+ (187, 179, 141), (191, 210, 162), (209, 223, 182), (228, 234, 208),
+ (228, 225, 208), (219, 221, 207), (210, 212, 197), (206, 206, 195),
+ (188, 198, 189), (188, 194, 178), (183, 187, 160), (183, 191, 155),
+ (186, 186, 144), (185, 176, 141), (191, 175, 136), (191, 163, 124),
+ (168, 170, 111), (155, 184, 107), (145, 177, 97), (120, 168, 75),
+ (113, 149, 78), (117, 161, 80), (121, 171, 82), (134, 178, 96),
+ (152, 190, 111), (145, 194, 131), (150, 180, 133), (164, 179, 132),
+ (167, 177, 128), (178, 176, 139), (169, 166, 132), (162, 157, 129),
+ (156, 146, 119), (154, 146, 118), (154, 131, 117), (150, 109, 103),
+ (171, 93, 90), (185, 102, 92), (197, 102, 96), (193, 104, 95),
+ (183, 84, 82), (173, 71, 64), (173, 65, 63), (160, 58, 43),
+ (157, 48, 38), (120, 4, 5), (38, 30, 9), (32, 26, 12),
+ (31, 25, 14), (47, 48, 28), (63, 52, 26), (94, 63, 20),
+ (99, 66, 22), (115, 88, 28), (121, 98, 33), (158, 111, 48),
+ (176, 129, 61), (185, 121, 30), (192, 148, 29), (173, 124, 34),
+ (192, 107, 2), (192, 98, 3), (185, 91, 2), (161, 89, 9),
+ (158, 89, 22), (154, 96, 32), (122, 86, 46), (113, 85, 37),
+ (107, 94, 41), (88, 83, 60), (75, 80, 50), (68, 80, 54),
+ (65, 78, 58), (63, 71, 53), (59, 66, 40), (58, 51, 40),
+ (60, 68, 37), (49, 55, 37), (63, 65, 37), (62, 64, 42),
+ (66, 73, 52), (70, 80, 58), (80, 90, 74), (80, 95, 84),
+ (85, 93, 71), (94, 101, 70), (98, 98, 67), (96, 100, 77),
+ (103, 111, 82), (104, 115, 95), (111, 112, 91), (104, 109, 87),
+ (93, 113, 83), (76, 110, 84), (67, 93, 94), (69, 85, 89),
+ (75, 90, 74), (78, 81, 64), (72, 75, 57), (70, 73, 56),
+ (68, 71, 50), (92, 72, 33), (108, 59, 21), (138, 77, 13),
+ (161, 80, 5), (160, 65, 0), (154, 54, 0), (138, 34, 2),
+ (55, 42, 5), (20, 14, 6), (14, 9, 4), (24, 25, 12),
+ (33, 39, 30), (45, 45, 35), (45, 48, 40), (51, 62, 49),
+ (60, 74, 55), (63, 77, 63), (59, 103, 64), (75, 128, 70),
+ (89, 149, 79), (96, 157, 105), (101, 175, 137), (123, 187, 147),
+ (124, 194, 146), (137, 189, 144), (110, 177, 136), (115, 181, 127),
+ (112, 176, 129), (119, 162, 149), (91, 170, 136), (84, 152, 119),
+ (67, 152, 116), (52, 140, 116), (49, 141, 121), (46, 134, 117),
+ (28, 119, 107), (42, 88, 69), (47, 75, 61), (33, 50, 45)
+),
+
+// 66 modigliani.nude-caryatid.ppm
+(
+ (31, 24, 17), (57, 47, 38), (89, 77, 61), (119, 88, 86),
+ (151, 108, 104), (173, 128, 129), (184, 141, 152), (196, 148, 160),
+ (197, 156, 158), (201, 164, 169), (199, 171, 174), (200, 176, 179),
+ (203, 178, 181), (203, 179, 182), (203, 178, 185), (201, 178, 183),
+ (202, 177, 186), (198, 178, 184), (195, 179, 178), (203, 173, 173),
+ (202, 169, 169), (204, 167, 163), (199, 155, 155), (200, 158, 151),
+ (203, 157, 147), (199, 157, 148), (196, 152, 139), (202, 144, 123),
+ (200, 142, 123), (190, 130, 119), (175, 111, 102), (175, 92, 77),
+ (168, 91, 81), (158, 87, 83), (139, 73, 72), (133, 71, 62),
+ (114, 57, 55), (86, 51, 50), (50, 34, 32), (40, 32, 30),
+ (33, 31, 33), (33, 31, 34), (40, 35, 34), (57, 53, 43),
+ (82, 70, 66), (108, 84, 89), (130, 107, 112), (170, 134, 135),
+ (184, 142, 145), (191, 151, 145), (189, 151, 150), (181, 147, 146),
+ (172, 155, 132), (169, 153, 130), (168, 152, 129), (168, 151, 129),
+ (167, 149, 127), (149, 128, 113), (142, 120, 97), (140, 108, 87),
+ (127, 105, 84), (127, 85, 80), (118, 77, 78), (115, 76, 80),
+ (112, 80, 74), (96, 77, 60), (72, 57, 48), (44, 38, 36),
+ (38, 29, 34), (35, 29, 31), (37, 31, 27), (41, 33, 31),
+ (48, 40, 38), (86, 56, 51), (116, 79, 74), (125, 95, 94),
+ (153, 110, 106), (176, 122, 127), (185, 135, 135), (194, 143, 142),
+ (195, 145, 143), (190, 145, 134), (179, 129, 122), (164, 119, 119),
+ (156, 111, 108), (140, 106, 101), (128, 103, 98), (124, 106, 103),
+ (125, 97, 95), (145, 92, 89), (156, 93, 87), (157, 92, 91),
+ (164, 100, 96), (165, 109, 111), (182, 123, 125), (181, 124, 126),
+ (180, 134, 130), (169, 149, 128), (169, 151, 129), (171, 155, 130),
+ (193, 151, 139), (201, 154, 150), (204, 156, 152), (212, 163, 163),
+ (210, 166, 162), (216, 175, 169), (225, 188, 179), (218, 185, 188),
+ (217, 192, 196), (224, 195, 196), (224, 195, 200), (225, 205, 209),
+ (229, 209, 212), (226, 208, 211), (218, 203, 212), (217, 194, 200),
+ (215, 196, 199), (214, 191, 194), (218, 185, 183), (215, 183, 181),
+ (214, 175, 173), (206, 167, 164), (197, 159, 160), (193, 154, 153),
+ (177, 150, 148), (170, 154, 132), (168, 149, 127), (160, 139, 111),
+ (152, 126, 103), (152, 128, 104), (161, 142, 118), (168, 150, 129),
+ (174, 156, 134), (190, 157, 148), (196, 159, 161), (196, 164, 172),
+ (196, 174, 181), (198, 176, 183), (202, 180, 182), (206, 180, 180),
+ (210, 178, 180), (214, 187, 183), (209, 188, 189), (208, 184, 193),
+ (211, 189, 191), (215, 194, 193), (212, 196, 197), (207, 191, 199),
+ (194, 189, 194), (177, 176, 180), (173, 159, 165), (173, 149, 155),
+ (170, 149, 154), (167, 136, 146), (161, 125, 128), (146, 109, 113),
+ (132, 98, 92), (128, 80, 81), (133, 77, 80), (148, 92, 92),
+ (156, 102, 99), (165, 117, 113), (174, 131, 128), (187, 143, 140),
+ (181, 142, 139), (168, 122, 122), (144, 108, 104), (121, 92, 94),
+ (107, 83, 81), (74, 63, 54), (45, 43, 41), (41, 32, 31),
+ (37, 28, 26), (33, 25, 25), (35, 25, 24), (38, 28, 27),
+ (58, 40, 24), (76, 54, 40), (109, 68, 56), (104, 65, 44),
+ (67, 53, 40), (42, 34, 32), (36, 27, 28), (32, 23, 27),
+ (29, 20, 23), (30, 20, 21), (31, 21, 20), (29, 20, 19),
+ (21, 15, 15), (15, 11, 12), (15, 10, 11), (18, 7, 9),
+ (18, 12, 12), (21, 12, 14), (21, 12, 15), (21, 15, 17),
+ (25, 20, 21), (29, 23, 24), (30, 24, 27), (31, 24, 27),
+ (34, 25, 26), (40, 35, 33), (51, 49, 46), (68, 72, 61),
+ (105, 99, 94), (123, 109, 116), (144, 118, 116), (157, 149, 136),
+ (166, 150, 125), (154, 134, 102), (151, 127, 103), (147, 123, 99),
+ (143, 118, 96), (153, 104, 100), (160, 107, 104), (166, 115, 103),
+ (181, 121, 112), (187, 119, 112), (177, 123, 111), (155, 112, 108),
+ (142, 119, 97), (138, 122, 97), (126, 106, 85), (118, 99, 81),
+ (103, 80, 60), (80, 60, 48), (53, 45, 37), (42, 34, 32),
+ (41, 33, 31), (43, 38, 35), (66, 57, 53), (90, 71, 73),
+ (116, 80, 81), (135, 101, 104), (152, 117, 118), (168, 139, 142),
+ (164, 153, 155), (153, 157, 168), (147, 158, 172), (170, 152, 159),
+ (187, 158, 166), (186, 163, 166), (188, 164, 163), (192, 168, 167),
+ (201, 167, 164), (204, 168, 168), (202, 166, 167), (198, 163, 166),
+ (190, 161, 162), (185, 154, 157), (187, 149, 152), (182, 147, 147),
+ (166, 135, 138), (139, 114, 121), (104, 92, 88), (69, 62, 55)
+),
+
+// 67 braque.instruments.ppm
+(
+ (13, 9, 4), (22, 18, 10), (35, 31, 20), (48, 42, 14),
+ (56, 45, 7), (68, 57, 11), (83, 66, 15), (101, 82, 18),
+ (117, 89, 15), (116, 87, 19), (103, 83, 16), (88, 94, 25),
+ (72, 92, 33), (64, 83, 25), (58, 79, 20), (57, 68, 18),
+ (54, 66, 15), (62, 69, 15), (65, 73, 13), (70, 68, 11),
+ (78, 62, 12), (87, 61, 11), (103, 68, 11), (111, 70, 20),
+ (128, 81, 12), (132, 87, 23), (139, 85, 22), (134, 107, 24),
+ (138, 115, 30), (146, 118, 44), (157, 130, 56), (165, 139, 63),
+ (161, 145, 82), (170, 164, 114), (186, 177, 126), (195, 185, 128),
+ (210, 200, 137), (220, 213, 139), (234, 213, 133), (240, 213, 133),
+ (239, 220, 145), (249, 227, 147), (249, 227, 153), (250, 231, 160),
+ (244, 227, 162), (247, 232, 165), (249, 242, 188), (245, 242, 171),
+ (255, 252, 190), (251, 241, 168), (247, 241, 181), (241, 231, 170),
+ (237, 229, 166), (222, 217, 161), (212, 205, 159), (208, 202, 146),
+ (205, 192, 123), (196, 174, 99), (178, 150, 78), (168, 140, 66),
+ (150, 126, 52), (131, 117, 43), (127, 95, 33), (120, 96, 34),
+ (106, 95, 41), (95, 90, 45), (93, 87, 50), (93, 91, 54),
+ (97, 86, 62), (118, 109, 80), (146, 132, 93), (169, 161, 125),
+ (189, 183, 135), (207, 197, 145), (213, 206, 148), (221, 206, 139),
+ (223, 203, 137), (223, 202, 137), (225, 204, 134), (226, 207, 130),
+ (234, 207, 127), (222, 203, 126), (216, 188, 114), (210, 179, 98),
+ (223, 172, 46), (217, 171, 46), (211, 166, 46), (208, 159, 29),
+ (202, 145, 22), (199, 153, 33), (196, 161, 62), (203, 179, 91),
+ (211, 192, 115), (213, 197, 127), (220, 204, 130), (221, 208, 129),
+ (221, 201, 130), (212, 196, 124), (200, 179, 113), (194, 174, 96),
+ (175, 154, 83), (166, 146, 72), (167, 147, 76), (180, 156, 90),
+ (203, 177, 110), (211, 192, 115), (213, 198, 116), (218, 199, 122),
+ (209, 191, 107), (193, 167, 77), (206, 159, 42), (194, 146, 32),
+ (193, 141, 20), (186, 135, 10), (179, 141, 16), (179, 143, 8),
+ (153, 120, 7), (147, 110, 20), (128, 110, 25), (118, 103, 37),
+ (115, 107, 38), (110, 122, 46), (117, 120, 64), (132, 129, 74),
+ (140, 133, 89), (145, 133, 85), (135, 128, 80), (136, 112, 67),
+ (139, 116, 53), (138, 118, 31), (136, 109, 27), (133, 101, 14),
+ (135, 92, 4), (130, 80, 2), (123, 74, 6), (111, 73, 1),
+ (93, 67, 4), (80, 63, 8), (79, 61, 14), (82, 70, 22),
+ (89, 93, 19), (106, 100, 28), (119, 103, 39), (139, 125, 42),
+ (159, 138, 59), (176, 148, 84), (188, 162, 110), (207, 184, 130),
+ (215, 196, 131), (219, 193, 137), (208, 187, 126), (201, 174, 109),
+ (177, 158, 83), (179, 154, 61), (173, 137, 39), (177, 139, 26),
+ (177, 145, 20), (150, 115, 11), (139, 108, 7), (130, 101, 9),
+ (114, 76, 5), (103, 67, 8), (100, 55, 5), (82, 59, 8),
+ (82, 58, 17), (71, 64, 22), (66, 74, 18), (60, 73, 22),
+ (60, 73, 28), (68, 85, 27), (79, 88, 33), (87, 97, 37),
+ (90, 107, 37), (96, 97, 58), (120, 113, 63), (137, 121, 57),
+ (159, 131, 57), (171, 144, 64), (165, 147, 63), (161, 136, 48),
+ (162, 125, 34), (154, 122, 42), (145, 113, 29), (127, 102, 11),
+ (110, 93, 3), (87, 87, 1), (83, 59, 0), (79, 56, 5),
+ (81, 53, 6), (71, 45, 6), (61, 36, 2), (60, 34, 1),
+ (54, 31, 5), (51, 24, 3), (46, 19, 0), (39, 15, 4),
+ (34, 16, 2), (33, 15, 4), (36, 13, 5), (39, 16, 3),
+ (37, 29, 3), (38, 27, 8), (38, 27, 8), (44, 20, 9),
+ (56, 28, 6), (57, 26, 2), (61, 25, 2), (65, 29, 4),
+ (58, 30, 9), (65, 38, 10), (66, 45, 13), (73, 47, 10),
+ (70, 54, 8), (70, 55, 6), (56, 59, 6), (48, 61, 14),
+ (48, 55, 7), (43, 55, 5), (48, 55, 14), (45, 68, 8),
+ (48, 85, 20), (56, 86, 24), (60, 81, 22), (57, 81, 25),
+ (55, 82, 40), (71, 74, 51), (89, 75, 46), (90, 82, 53),
+ (102, 82, 64), (120, 106, 81), (130, 123, 78), (142, 137, 81),
+ (163, 153, 92), (178, 167, 112), (186, 175, 120), (180, 168, 120),
+ (164, 154, 93), (147, 144, 74), (134, 132, 71), (130, 115, 66),
+ (120, 108, 60), (109, 98, 44), (110, 87, 29), (128, 87, 22),
+ (122, 82, 10), (110, 77, 10), (100, 65, 5), (91, 55, 2),
+ (81, 54, 3), (76, 54, 7), (64, 50, 9), (44, 52, 13),
+ (35, 42, 8), (35, 41, 8), (29, 26, 9), (24, 12, 1)
+),
+
+// 68 calcoast09.ppm
+(
+ (32, 32, 44), (52, 56, 66), (68, 71, 89), (76, 94, 103),
+ (82, 116, 122), (83, 114, 143), (90, 123, 154), (94, 127, 158),
+ (96, 130, 161), (99, 134, 164), (99, 135, 167), (101, 136, 168),
+ (103, 138, 170), (103, 139, 171), (103, 139, 173), (103, 139, 174),
+ (103, 139, 175), (104, 140, 174), (106, 142, 176), (108, 143, 175),
+ (108, 143, 176), (109, 144, 176), (108, 143, 174), (106, 141, 172),
+ (103, 139, 173), (102, 138, 172), (100, 136, 170), (98, 134, 170),
+ (98, 133, 168), (97, 131, 166), (95, 129, 164), (95, 128, 159),
+ (95, 128, 156), (94, 126, 153), (92, 127, 145), (82, 118, 140),
+ (76, 115, 122), (69, 100, 107), (70, 89, 94), (61, 84, 91),
+ (64, 76, 88), (71, 75, 78), (70, 72, 68), (65, 73, 73),
+ (66, 65, 73), (56, 62, 74), (55, 59, 71), (54, 59, 69),
+ (50, 55, 64), (41, 45, 58), (42, 41, 53), (44, 44, 53),
+ (46, 44, 58), (48, 50, 55), (58, 56, 56), (57, 64, 65),
+ (72, 68, 63), (81, 77, 64), (96, 82, 62), (103, 93, 73),
+ (100, 92, 78), (92, 89, 71), (88, 88, 71), (89, 84, 73),
+ (87, 87, 77), (94, 94, 84), (99, 101, 89), (99, 107, 99),
+ (96, 110, 119), (85, 113, 143), (85, 115, 149), (91, 124, 155),
+ (96, 129, 160), (100, 135, 165), (106, 139, 170), (108, 143, 172),
+ (119, 146, 156), (127, 149, 160), (148, 165, 157), (165, 188, 190),
+ (179, 191, 172), (184, 189, 154), (190, 194, 149), (174, 155, 104),
+ (147, 131, 96), (144, 138, 108), (137, 135, 107), (138, 130, 112),
+ (145, 142, 115), (132, 137, 131), (114, 128, 136), (101, 130, 142),
+ (102, 130, 157), (96, 129, 162), (96, 130, 165), (98, 131, 166),
+ (99, 133, 168), (99, 134, 169), (100, 134, 169), (100, 136, 169),
+ (100, 134, 169), (100, 134, 169), (99, 134, 166), (96, 129, 164),
+ (94, 127, 160), (92, 124, 157), (90, 123, 154), (84, 114, 147),
+ (81, 109, 139), (75, 101, 129), (62, 91, 119), (59, 89, 105),
+ (55, 88, 99), (55, 87, 98), (57, 82, 112), (58, 81, 115),
+ (63, 87, 120), (67, 93, 126), (74, 100, 133), (77, 106, 138),
+ (81, 110, 143), (80, 110, 144), (78, 107, 141), (75, 101, 134),
+ (68, 94, 127), (62, 88, 121), (64, 90, 120), (73, 98, 128),
+ (75, 104, 136), (79, 110, 140), (81, 111, 144), (82, 112, 146),
+ (82, 111, 142), (77, 105, 135), (79, 108, 117), (81, 98, 115),
+ (87, 96, 103), (91, 95, 97), (94, 91, 91), (101, 102, 94),
+ (117, 116, 100), (125, 128, 107), (118, 134, 131), (122, 145, 148),
+ (130, 166, 167), (140, 176, 186), (156, 193, 200), (163, 204, 212),
+ (167, 213, 212), (169, 207, 215), (168, 207, 211), (157, 199, 205),
+ (137, 175, 189), (130, 166, 174), (118, 152, 164), (118, 153, 157),
+ (118, 158, 160), (123, 164, 166), (136, 177, 177), (146, 191, 197),
+ (162, 197, 198), (166, 201, 203), (161, 200, 203), (153, 189, 200),
+ (137, 175, 185), (121, 163, 167), (108, 147, 151), (106, 141, 153),
+ (98, 131, 161), (96, 131, 161), (100, 136, 155), (111, 132, 145),
+ (112, 134, 144), (105, 134, 138), (101, 134, 138), (105, 130, 141),
+ (109, 117, 128), (110, 115, 107), (104, 107, 95), (113, 111, 88),
+ (119, 112, 92), (126, 124, 103), (121, 116, 103), (119, 117, 90),
+ (117, 112, 85), (112, 102, 82), (95, 95, 81), (86, 86, 80),
+ (80, 84, 83), (81, 92, 101), (85, 112, 122), (94, 127, 132),
+ (106, 140, 143), (116, 162, 160), (142, 183, 185), (184, 201, 205),
+ (189, 224, 229), (214, 248, 247), (224, 251, 250), (201, 232, 240),
+ (187, 218, 222), (170, 194, 203), (138, 175, 176), (115, 153, 162),
+ (101, 137, 151), (83, 126, 132), (67, 106, 111), (70, 87, 93),
+ (73, 80, 82), (73, 76, 78), (71, 81, 80), (71, 78, 81),
+ (66, 75, 88), (61, 81, 97), (70, 91, 117), (73, 98, 127),
+ (77, 106, 138), (82, 110, 143), (83, 115, 148), (85, 118, 151),
+ (90, 123, 156), (90, 124, 157), (92, 125, 158), (93, 126, 159),
+ (93, 126, 159), (94, 127, 160), (94, 127, 162), (94, 127, 162),
+ (94, 128, 163), (95, 128, 163), (95, 129, 164), (95, 128, 163),
+ (95, 128, 161), (93, 126, 159), (93, 126, 157), (94, 124, 153),
+ (91, 122, 140), (81, 116, 124), (78, 105, 114), (81, 91, 96),
+ (84, 84, 80), (77, 78, 71), (64, 62, 54), (51, 43, 35),
+ (37, 29, 35), (26, 23, 30), (0, 0, 0), (5, 2, 12),
+ (22, 27, 46), (35, 32, 48), (43, 40, 50), (42, 49, 58),
+ (29, 56, 73), (35, 62, 80), (38, 47, 63), (29, 33, 53)
+),
+
+// 69 dodge102.ppm
+(
+ (47, 42, 46), (88, 93, 90), (136, 152, 150), (140, 218, 225),
+ (130, 242, 251), (123, 245, 243), (122, 188, 198), (99, 137, 153),
+ (74, 113, 109), (74, 89, 82), (58, 73, 61), (49, 64, 54),
+ (58, 41, 32), (64, 30, 24), (63, 28, 23), (65, 27, 22),
+ (76, 30, 21), (75, 34, 17), (74, 32, 14), (79, 31, 14),
+ (80, 32, 15), (85, 31, 18), (82, 34, 23), (89, 42, 25),
+ (85, 45, 27), (78, 49, 29), (77, 40, 29), (77, 36, 27),
+ (89, 39, 35), (112, 56, 39), (116, 69, 43), (118, 89, 51),
+ (124, 92, 37), (160, 122, 46), (171, 135, 56), (168, 156, 97),
+ (153, 159, 102), (144, 150, 88), (137, 115, 85), (118, 108, 89),
+ (108, 95, 75), (95, 87, 63), (95, 78, 55), (88, 65, 56),
+ (92, 57, 49), (94, 57, 48), (94, 53, 47), (98, 51, 43),
+ (105, 67, 50), (109, 74, 60), (116, 91, 81), (140, 119, 89),
+ (179, 161, 111), (235, 221, 170), (245, 246, 140), (237, 221, 102),
+ (227, 193, 91), (215, 181, 106), (197, 157, 88), (184, 153, 62),
+ (161, 124, 46), (149, 99, 41), (143, 84, 37), (130, 77, 42),
+ (117, 73, 48), (118, 67, 53), (124, 81, 60), (139, 107, 90),
+ (156, 161, 147), (192, 207, 161), (221, 235, 186), (216, 244, 206),
+ (178, 223, 200), (179, 187, 163), (154, 134, 116), (146, 106, 79),
+ (129, 105, 52), (114, 103, 49), (119, 122, 74), (135, 141, 112),
+ (147, 164, 149), (165, 213, 168), (199, 243, 222), (187, 251, 248),
+ (190, 248, 233), (169, 215, 199), (158, 176, 150), (136, 139, 120),
+ (119, 121, 104), (121, 120, 93), (146, 152, 109), (180, 159, 99),
+ (181, 191, 105), (181, 205, 157), (175, 231, 216), (168, 243, 243),
+ (138, 241, 247), (127, 247, 247), (138, 247, 240), (141, 188, 174),
+ (112, 136, 129), (91, 103, 81), (69, 86, 67), (69, 59, 41),
+ (62, 59, 21), (59, 36, 17), (61, 25, 14), (61, 24, 16),
+ (55, 25, 15), (44, 26, 23), (47, 31, 23), (54, 33, 22),
+ (60, 34, 30), (53, 42, 49), (51, 60, 66), (46, 72, 60),
+ (53, 84, 86), (54, 100, 125), (84, 149, 155), (92, 243, 249),
+ (108, 244, 249), (130, 219, 231), (125, 155, 166), (71, 105, 120),
+ (47, 89, 118), (26, 50, 68), (24, 25, 32), (13, 12, 21),
+ (12, 9, 8), (5, 4, 4), (5, 2, 2), (4, 0, 1),
+ (5, 1, 0), (12, 4, 2), (16, 7, 4), (21, 7, 1),
+ (22, 5, 2), (18, 5, 5), (16, 6, 6), (9, 5, 4),
+ (5, 2, 1), (1, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 0, 0), (3, 0, 1), (6, 0, 3),
+ (16, 5, 5), (23, 9, 4), (22, 15, 9), (18, 14, 14),
+ (20, 20, 26), (26, 26, 23), (43, 36, 29), (52, 42, 42),
+ (59, 67, 62), (75, 80, 80), (77, 116, 99), (97, 141, 153),
+ (121, 219, 225), (121, 246, 252), (136, 238, 245), (143, 176, 174),
+ (121, 125, 121), (107, 98, 94), (76, 93, 72), (77, 86, 51),
+ (83, 57, 49), (78, 51, 44), (70, 40, 41), (67, 31, 31),
+ (63, 28, 24), (62, 27, 20), (58, 29, 10), (55, 31, 12),
+ (49, 28, 13), (42, 23, 7), (37, 19, 7), (38, 17, 6),
+ (43, 13, 5), (47, 14, 5), (59, 15, 6), (61, 17, 6),
+ (63, 21, 5), (67, 23, 8), (69, 27, 6), (66, 28, 6),
+ (66, 30, 13), (70, 34, 18), (70, 40, 28), (78, 42, 35),
+ (88, 53, 39), (93, 69, 56), (113, 83, 83), (138, 119, 116),
+ (196, 181, 138), (222, 227, 216), (247, 245, 223), (250, 249, 228),
+ (247, 251, 242), (230, 247, 235), (199, 236, 231), (199, 236, 228),
+ (193, 231, 227), (165, 173, 178), (153, 134, 140), (128, 119, 110),
+ (112, 95, 87), (108, 78, 57), (99, 79, 48), (94, 71, 37),
+ (71, 52, 28), (65, 47, 26), (69, 31, 26), (61, 26, 22),
+ (56, 24, 19), (56, 21, 15), (55, 21, 13), (47, 16, 11),
+ (45, 11, 3), (41, 10, 4), (39, 10, 6), (37, 11, 5),
+ (33, 14, 3), (30, 9, 2), (30, 5, 0), (28, 9, 3),
+ (27, 11, 2), (27, 11, 3), (26, 14, 7), (24, 12, 5),
+ (22, 15, 5), (27, 12, 4), (31, 16, 6), (36, 17, 7),
+ (41, 21, 11), (48, 20, 12), (57, 18, 12), (61, 22, 11),
+ (65, 23, 13), (68, 23, 14), (68, 22, 9), (63, 19, 7),
+ (57, 17, 7), (46, 17, 7), (37, 18, 5), (34, 17, 6),
+ (30, 18, 14), (30, 26, 11), (25, 32, 17), (37, 31, 31)
+),
+
+// 70 ernst.anti-pope.ppm
+(
+ (60, 41, 44), (63, 44, 53), (61, 45, 54), (62, 43, 55),
+ (59, 42, 56), (61, 39, 55), (61, 43, 57), (65, 44, 53),
+ (67, 46, 53), (74, 44, 54), (76, 44, 57), (80, 48, 63),
+ (87, 49, 64), (89, 43, 57), (93, 46, 53), (96, 44, 53),
+ (106, 49, 53), (104, 56, 56), (108, 68, 64), (111, 72, 67),
+ (119, 70, 68), (129, 76, 71), (133, 79, 68), (133, 75, 74),
+ (139, 65, 65), (134, 69, 76), (143, 77, 76), (170, 77, 76),
+ (148, 92, 81), (136, 92, 73), (135, 90, 87), (149, 96, 75),
+ (174, 114, 73), (203, 130, 81), (202, 137, 86), (201, 164, 136),
+ (201, 164, 138), (176, 147, 135), (203, 131, 101), (167, 145, 117),
+ (186, 121, 108), (174, 107, 89), (146, 117, 90), (133, 112, 98),
+ (118, 112, 123), (100, 95, 100), (125, 102, 98), (113, 100, 93),
+ (102, 84, 81), (100, 74, 86), (99, 77, 97), (98, 63, 76),
+ (94, 53, 70), (86, 52, 65), (81, 49, 63), (75, 52, 61),
+ (71, 52, 64), (70, 49, 64), (70, 50, 62), (69, 52, 63),
+ (67, 50, 61), (64, 50, 63), (66, 51, 59), (63, 51, 62),
+ (63, 54, 61), (62, 50, 61), (62, 48, 61), (62, 48, 61),
+ (57, 45, 59), (57, 43, 56), (57, 46, 56), (55, 45, 56),
+ (53, 43, 56), (53, 43, 57), (54, 40, 53), (53, 41, 55),
+ (55, 43, 57), (57, 42, 59), (57, 47, 59), (59, 49, 60),
+ (53, 48, 68), (58, 50, 66), (51, 49, 70), (49, 49, 64),
+ (52, 51, 70), (54, 51, 69), (57, 53, 67), (61, 52, 73),
+ (65, 53, 75), (64, 52, 70), (62, 51, 67), (61, 50, 68),
+ (60, 48, 70), (58, 49, 70), (58, 49, 67), (60, 48, 62),
+ (61, 50, 64), (61, 50, 63), (62, 50, 62), (63, 48, 61),
+ (65, 47, 61), (67, 45, 59), (65, 46, 58), (64, 46, 58),
+ (63, 47, 58), (63, 45, 57), (59, 45, 58), (58, 44, 57),
+ (61, 43, 57), (61, 44, 57), (61, 43, 59), (62, 42, 60),
+ (64, 44, 60), (66, 45, 61), (67, 47, 62), (66, 48, 67),
+ (66, 50, 69), (72, 53, 68), (74, 56, 70), (78, 56, 71),
+ (73, 68, 75), (80, 55, 76), (85, 58, 78), (79, 60, 84),
+ (86, 65, 82), (96, 68, 76), (98, 72, 79), (108, 85, 78),
+ (123, 88, 70), (113, 83, 78), (122, 85, 81), (132, 104, 92),
+ (127, 111, 90), (136, 93, 101), (142, 83, 87), (137, 82, 75),
+ (121, 80, 77), (110, 67, 85), (102, 67, 77), (94, 66, 72),
+ (83, 68, 66), (80, 71, 76), (81, 73, 85), (87, 84, 89),
+ (85, 69, 84), (90, 84, 96), (82, 84, 88), (80, 90, 95),
+ (85, 84, 110), (93, 72, 86), (82, 72, 81), (77, 70, 82),
+ (74, 63, 77), (72, 56, 74), (71, 55, 68), (67, 51, 65),
+ (65, 51, 67), (64, 50, 65), (67, 50, 66), (72, 51, 68),
+ (74, 50, 66), (80, 53, 63), (86, 55, 68), (89, 63, 68),
+ (91, 66, 68), (97, 65, 65), (103, 66, 58), (99, 64, 64),
+ (102, 61, 71), (111, 58, 72), (104, 63, 63), (118, 53, 59),
+ (127, 52, 59), (141, 47, 52), (161, 39, 53), (164, 37, 51),
+ (143, 41, 51), (136, 46, 61), (118, 47, 50), (111, 47, 59),
+ (109, 45, 59), (106, 46, 61), (107, 42, 63), (109, 41, 58),
+ (106, 42, 53), (95, 44, 59), (88, 45, 57), (78, 43, 61),
+ (70, 47, 63), (67, 46, 61), (66, 45, 62), (64, 46, 62),
+ (62, 45, 60), (62, 46, 58), (60, 45, 58), (58, 45, 59),
+ (58, 47, 58), (62, 48, 62), (64, 50, 63), (66, 52, 65),
+ (69, 55, 68), (71, 63, 68), (68, 65, 76), (66, 66, 76),
+ (62, 61, 78), (62, 61, 79), (65, 55, 80), (66, 54, 76),
+ (65, 53, 77), (60, 52, 80), (57, 54, 73), (58, 58, 70),
+ (57, 59, 74), (62, 61, 80), (59, 67, 86), (63, 68, 86),
+ (63, 68, 88), (65, 70, 90), (67, 65, 93), (62, 70, 95),
+ (58, 68, 99), (62, 75, 92), (59, 77, 97), (61, 76, 109),
+ (61, 77, 100), (54, 70, 105), (56, 70, 105), (53, 67, 102),
+ (52, 65, 99), (55, 65, 102), (54, 68, 103), (61, 73, 92),
+ (64, 68, 94), (68, 76, 95), (74, 79, 89), (70, 77, 83),
+ (66, 72, 87), (68, 62, 92), (70, 56, 77), (72, 55, 76),
+ (68, 56, 75), (72, 53, 72), (74, 54, 66), (75, 56, 64),
+ (77, 53, 61), (81, 50, 58), (87, 54, 52), (96, 51, 58),
+ (92, 44, 61), (85, 45, 62), (75, 45, 58), (71, 41, 54),
+ (70, 41, 56), (70, 41, 56), (69, 41, 55), (66, 41, 53)
+),
+
+// 71 ernst.ubu-imperator.ppm
+(
+ (36, 57, 12), (87, 102, 130), (126, 148, 170), (137, 166, 178),
+ (146, 174, 185), (160, 179, 186), (163, 183, 190), (161, 180, 186),
+ (154, 172, 181), (147, 165, 174), (138, 144, 155), (144, 103, 23),
+ (127, 77, 3), (93, 20, 6), (78, 10, 6), (65, 4, 2),
+ (53, 0, 8), (30, 4, 0), (9, 3, 2), (1, 1, 0),
+ (0, 0, 1), (3, 1, 3), (5, 0, 9), (21, 15, 4),
+ (32, 17, 0), (39, 3, 2), (48, 5, 0), (54, 4, 0),
+ (56, 3, 3), (65, 3, 0), (66, 2, 2), (70, 3, 3),
+ (76, 7, 1), (80, 4, 1), (79, 3, 0), (80, 4, 0),
+ (81, 9, 0), (81, 15, 0), (87, 26, 1), (103, 68, 8),
+ (108, 151, 11), (93, 159, 31), (123, 149, 161), (139, 163, 175),
+ (149, 171, 181), (158, 176, 184), (162, 177, 186), (166, 178, 187),
+ (164, 175, 185), (161, 173, 181), (162, 170, 173), (172, 123, 74),
+ (178, 113, 3), (187, 117, 1), (190, 122, 0), (184, 122, 2),
+ (165, 123, 8), (108, 143, 36), (117, 147, 164), (129, 161, 176),
+ (129, 166, 182), (103, 148, 174), (92, 105, 135), (72, 69, 15),
+ (76, 24, 3), (72, 17, 3), (73, 16, 1), (75, 15, 2),
+ (77, 14, 3), (78, 11, 4), (78, 9, 3), (77, 9, 1),
+ (74, 9, 1), (72, 10, 2), (71, 10, 4), (66, 9, 4),
+ (66, 6, 1), (64, 6, 2), (66, 10, 1), (68, 12, 2),
+ (69, 8, 1), (68, 6, 1), (69, 6, 0), (71, 7, 0),
+ (71, 8, 1), (73, 10, 2), (75, 12, 1), (75, 14, 1),
+ (81, 13, 2), (84, 15, 1), (90, 17, 2), (99, 23, 2),
+ (139, 79, 0), (151, 87, 6), (134, 63, 9), (102, 21, 4),
+ (93, 15, 5), (92, 12, 6), (101, 10, 2), (125, 27, 3),
+ (163, 66, 2), (179, 76, 2), (190, 94, 5), (206, 116, 4),
+ (211, 121, 1), (213, 130, 2), (214, 136, 1), (209, 137, 1),
+ (198, 131, 2), (181, 112, 1), (167, 100, 0), (150, 90, 1),
+ (126, 87, 7), (58, 84, 7), (34, 64, 2), (62, 90, 10),
+ (131, 87, 4), (157, 83, 1), (166, 87, 2), (168, 88, 2),
+ (169, 88, 1), (175, 87, 1), (180, 90, 4), (177, 98, 4),
+ (181, 102, 1), (177, 105, 1), (179, 109, 3), (188, 112, 1),
+ (195, 107, 1), (197, 109, 0), (200, 116, 2), (192, 121, 4),
+ (191, 121, 2), (179, 113, 3), (173, 105, 2), (158, 106, 9),
+ (107, 121, 142), (114, 139, 162), (109, 136, 162), (88, 101, 138),
+ (92, 44, 33), (86, 16, 5), (84, 10, 2), (82, 9, 3),
+ (84, 7, 1), (89, 11, 0), (91, 14, 1), (99, 17, 1),
+ (110, 20, 0), (151, 57, 4), (165, 68, 2), (170, 70, 6),
+ (170, 69, 2), (168, 73, 2), (171, 78, 0), (173, 88, 0),
+ (175, 95, 2), (182, 105, 0), (189, 114, 0), (197, 123, 2),
+ (206, 127, 2), (209, 130, 2), (212, 129, 3), (208, 124, 1),
+ (206, 122, 1), (198, 124, 4), (191, 119, 2), (186, 104, 5),
+ (177, 89, 8), (169, 74, 5), (164, 73, 2), (157, 57, 1),
+ (124, 25, 6), (102, 16, 2), (95, 16, 3), (91, 14, 2),
+ (87, 16, 2), (88, 15, 4), (95, 22, 2), (131, 52, 2),
+ (159, 67, 1), (162, 76, 0), (162, 80, 2), (168, 88, 6),
+ (173, 96, 6), (175, 96, 3), (172, 97, 2), (173, 98, 3),
+ (174, 102, 2), (167, 102, 4), (162, 113, 19), (145, 151, 153),
+ (162, 171, 176), (163, 172, 179), (169, 178, 183), (168, 177, 186),
+ (168, 184, 193), (169, 185, 190), (176, 186, 188), (182, 191, 183),
+ (180, 189, 188), (173, 190, 196), (177, 191, 200), (169, 191, 198),
+ (159, 190, 201), (148, 176, 187), (138, 166, 178), (133, 158, 172),
+ (109, 126, 146), (74, 88, 37), (58, 27, 5), (71, 19, 2),
+ (78, 19, 3), (81, 15, 5), (92, 33, 34), (87, 99, 124),
+ (102, 126, 155), (94, 105, 113), (130, 95, 4), (146, 99, 3),
+ (152, 96, 1), (159, 92, 2), (166, 103, 2), (177, 113, 0),
+ (175, 117, 2), (171, 121, 16), (152, 133, 70), (146, 163, 173),
+ (150, 168, 177), (154, 172, 181), (153, 176, 184), (151, 173, 186),
+ (154, 171, 185), (149, 169, 184), (145, 169, 177), (138, 154, 157),
+ (172, 124, 23), (195, 124, 6), (197, 126, 7), (200, 127, 7),
+ (212, 130, 11), (175, 176, 172), (175, 183, 184), (173, 182, 181),
+ (160, 170, 179), (139, 161, 174), (125, 138, 160), (91, 98, 105),
+ (43, 58, 6), (29, 18, 5), (15, 12, 4), (3, 6, 4),
+ (1, 3, 4), (4, 3, 2), (11, 11, 1), (26, 25, 3)
+),
+
+// 72 fighting-forms.ppm
+(
+ (2, 3, 0), (11, 15, 2), (22, 23, 8), (40, 36, 23),
+ (82, 53, 40), (133, 63, 36), (149, 96, 18), (169, 100, 12),
+ (182, 122, 14), (214, 140, 47), (235, 178, 73), (230, 176, 63),
+ (220, 159, 44), (174, 151, 29), (141, 139, 43), (129, 99, 40),
+ (56, 61, 33), (35, 36, 18), (25, 24, 6), (17, 18, 3),
+ (18, 17, 0), (24, 19, 0), (27, 25, 3), (35, 29, 12),
+ (100, 42, 16), (140, 45, 14), (144, 52, 14), (120, 55, 39),
+ (75, 59, 56), (51, 40, 38), (34, 28, 15), (24, 19, 5),
+ (13, 13, 3), (12, 13, 1), (7, 8, 3), (11, 13, 2),
+ (9, 11, 0), (12, 11, 2), (13, 15, 2), (22, 23, 7),
+ (30, 31, 12), (40, 40, 28), (52, 63, 69), (63, 96, 65),
+ (66, 103, 73), (100, 114, 124), (105, 155, 133), (138, 146, 105),
+ (152, 125, 65), (159, 122, 55), (158, 94, 30), (156, 60, 7),
+ (149, 46, 14), (135, 43, 40), (124, 57, 81), (97, 58, 132),
+ (80, 70, 149), (66, 83, 139), (85, 94, 140), (97, 116, 153),
+ (96, 119, 151), (96, 102, 126), (97, 87, 79), (137, 77, 67),
+ (164, 55, 24), (174, 60, 16), (175, 42, 4), (175, 37, 7),
+ (164, 40, 12), (142, 47, 14), (111, 47, 30), (65, 46, 47),
+ (37, 34, 22), (32, 34, 12), (31, 32, 16), (43, 33, 25),
+ (88, 42, 37), (140, 30, 9), (164, 24, 1), (169, 28, 2),
+ (174, 34, 2), (168, 38, 1), (160, 41, 4), (131, 44, 7),
+ (71, 53, 21), (34, 30, 10), (27, 22, 5), (18, 15, 1),
+ (13, 16, 1), (18, 19, 3), (30, 27, 11), (37, 33, 32),
+ (46, 32, 70), (59, 38, 117), (66, 58, 127), (67, 60, 133),
+ (63, 63, 123), (53, 51, 71), (56, 50, 67), (55, 47, 64),
+ (45, 46, 37), (45, 40, 29), (48, 43, 39), (61, 50, 62),
+ (75, 90, 70), (81, 95, 120), (89, 100, 136), (99, 97, 124),
+ (130, 93, 79), (158, 58, 28), (174, 63, 9), (184, 51, 4),
+ (186, 46, 8), (190, 37, 18), (187, 40, 21), (180, 48, 10),
+ (174, 50, 3), (166, 69, 2), (181, 83, 21), (205, 97, 2),
+ (203, 115, 5), (212, 138, 3), (218, 141, 4), (237, 144, 0),
+ (233, 139, 5), (225, 115, 4), (207, 98, 4), (204, 58, 27),
+ (199, 52, 18), (199, 49, 16), (193, 39, 9), (194, 35, 6),
+ (189, 36, 5), (186, 35, 2), (186, 33, 6), (182, 37, 5),
+ (185, 39, 2), (186, 31, 2), (185, 30, 3), (186, 31, 3),
+ (187, 30, 3), (186, 30, 2), (183, 32, 2), (179, 27, 3),
+ (180, 31, 3), (184, 31, 5), (184, 29, 6), (181, 30, 3),
+ (181, 28, 0), (181, 30, 2), (179, 29, 2), (174, 29, 0),
+ (176, 33, 3), (178, 30, 3), (175, 25, 1), (174, 24, 1),
+ (173, 25, 0), (166, 24, 1), (153, 26, 7), (116, 30, 5),
+ (43, 25, 4), (28, 18, 2), (26, 15, 1), (27, 15, 1),
+ (32, 23, 8), (43, 28, 14), (111, 34, 2), (144, 39, 4),
+ (160, 30, 2), (163, 35, 4), (155, 41, 12), (129, 53, 66),
+ (132, 71, 99), (99, 109, 132), (95, 141, 145), (107, 135, 143),
+ (101, 125, 156), (100, 117, 143), (87, 111, 128), (66, 114, 73),
+ (72, 108, 48), (97, 111, 29), (108, 120, 58), (138, 150, 119),
+ (183, 165, 155), (195, 175, 164), (163, 166, 182), (125, 170, 197),
+ (131, 154, 188), (120, 117, 172), (86, 106, 175), (68, 81, 143),
+ (67, 61, 123), (85, 56, 66), (112, 37, 48), (154, 39, 15),
+ (180, 48, 24), (187, 60, 69), (188, 118, 123), (193, 146, 160),
+ (206, 170, 188), (162, 157, 190), (144, 136, 147), (139, 102, 158),
+ (173, 54, 109), (167, 45, 49), (177, 43, 13), (170, 41, 14),
+ (153, 40, 9), (126, 36, 5), (55, 29, 11), (29, 17, 2),
+ (21, 11, 1), (18, 10, 0), (25, 16, 1), (28, 19, 8),
+ (36, 28, 10), (91, 44, 9), (143, 38, 7), (146, 47, 6),
+ (142, 52, 5), (130, 73, 10), (78, 62, 22), (40, 37, 23),
+ (44, 26, 16), (90, 27, 4), (136, 30, 7), (158, 30, 2),
+ (169, 33, 1), (175, 32, 7), (166, 37, 17), (149, 51, 36),
+ (129, 48, 74), (99, 54, 126), (76, 51, 129), (73, 58, 137),
+ (84, 74, 148), (102, 79, 152), (119, 80, 142), (174, 57, 99),
+ (178, 50, 50), (175, 49, 49), (186, 58, 48), (186, 57, 99),
+ (176, 59, 115), (124, 107, 116), (116, 143, 147), (128, 161, 139),
+ (190, 169, 127), (235, 175, 114), (233, 175, 81), (148, 146, 56),
+ (151, 99, 30), (120, 86, 12), (120, 78, 22), (56, 50, 9)
+),
+
+// 73 fog25.ppm
+(
+ (11, 14, 2), (30, 28, 10), (35, 35, 14), (52, 43, 23),
+ (52, 61, 22), (61, 63, 29), (67, 62, 30), (83, 70, 39),
+ (113, 96, 63), (149, 134, 131), (163, 157, 162), (175, 169, 173),
+ (178, 172, 176), (173, 165, 170), (160, 149, 152), (162, 119, 78),
+ (159, 108, 65), (135, 95, 47), (112, 83, 32), (88, 81, 23),
+ (75, 72, 18), (72, 59, 18), (73, 63, 24), (70, 48, 22),
+ (72, 57, 30), (66, 52, 20), (64, 60, 21), (66, 71, 23),
+ (72, 62, 27), (66, 73, 21), (75, 66, 26), (80, 64, 23),
+ (103, 73, 33), (130, 88, 40), (163, 99, 47), (172, 100, 47),
+ (174, 106, 51), (185, 120, 60), (194, 128, 73), (206, 141, 84),
+ (201, 145, 94), (179, 165, 164), (191, 180, 184), (205, 196, 192),
+ (214, 212, 217), (231, 230, 236), (238, 242, 245), (239, 242, 247),
+ (233, 236, 241), (227, 226, 231), (213, 208, 214), (197, 192, 198),
+ (178, 172, 177), (150, 144, 146), (130, 103, 68), (86, 76, 53),
+ (74, 61, 44), (68, 58, 40), (61, 53, 28), (58, 51, 19),
+ (60, 53, 11), (62, 45, 5), (45, 43, 6), (34, 39, 4),
+ (31, 41, 3), (36, 36, 9), (32, 35, 9), (30, 36, 6),
+ (17, 16, 10), (21, 18, 2), (31, 13, 5), (28, 20, 7),
+ (28, 24, 4), (33, 24, 6), (35, 41, 17), (45, 42, 12),
+ (51, 36, 17), (53, 37, 22), (62, 38, 16), (78, 39, 12),
+ (81, 46, 17), (83, 52, 12), (89, 65, 13), (103, 76, 18),
+ (119, 80, 26), (137, 85, 29), (160, 92, 41), (162, 103, 54),
+ (171, 109, 59), (184, 120, 59), (196, 124, 60), (194, 131, 73),
+ (199, 146, 97), (181, 170, 172), (196, 186, 191), (203, 198, 202),
+ (215, 216, 218), (230, 229, 235), (231, 231, 239), (231, 230, 238),
+ (225, 225, 229), (211, 208, 207), (195, 189, 193), (173, 168, 171),
+ (145, 140, 142), (117, 103, 54), (98, 77, 33), (86, 61, 34),
+ (78, 63, 30), (76, 63, 31), (75, 64, 34), (70, 58, 42),
+ (76, 55, 36), (72, 58, 30), (67, 57, 17), (63, 55, 9),
+ (53, 62, 2), (50, 42, 4), (47, 40, 7), (46, 40, 6),
+ (51, 39, 8), (52, 39, 10), (55, 41, 12), (58, 45, 19),
+ (57, 48, 20), (63, 47, 18), (70, 48, 15), (71, 48, 16),
+ (87, 53, 19), (100, 72, 29), (110, 90, 39), (134, 119, 63),
+ (148, 138, 137), (167, 164, 163), (182, 177, 177), (186, 179, 187),
+ (184, 177, 185), (178, 171, 178), (168, 155, 158), (187, 143, 107),
+ (192, 130, 79), (179, 119, 63), (165, 111, 56), (159, 109, 55),
+ (160, 111, 61), (160, 114, 72), (153, 141, 142), (167, 159, 164),
+ (172, 167, 171), (171, 166, 170), (157, 151, 153), (151, 135, 129),
+ (143, 105, 64), (124, 86, 40), (112, 73, 31), (88, 62, 31),
+ (91, 64, 24), (90, 64, 19), (89, 63, 18), (92, 69, 20),
+ (102, 78, 19), (112, 78, 29), (123, 83, 37), (142, 97, 52),
+ (143, 118, 69), (155, 146, 149), (178, 172, 174), (194, 190, 190),
+ (203, 199, 202), (217, 216, 222), (232, 235, 239), (241, 245, 248),
+ (245, 249, 252), (247, 251, 254), (249, 253, 255), (251, 253, 255),
+ (253, 254, 255), (253, 254, 255), (253, 254, 255), (251, 255, 255),
+ (249, 254, 255), (249, 253, 254), (249, 253, 254), (247, 253, 255),
+ (245, 250, 253), (244, 249, 253), (244, 249, 252), (240, 245, 248),
+ (231, 232, 237), (219, 216, 218), (203, 196, 202), (189, 183, 187),
+ (169, 160, 164), (180, 133, 98), (169, 113, 66), (163, 109, 56),
+ (167, 105, 58), (167, 114, 65), (162, 115, 75), (155, 144, 148),
+ (173, 164, 171), (184, 177, 185), (187, 182, 189), (188, 182, 187),
+ (179, 173, 174), (166, 156, 155), (198, 138, 89), (181, 123, 67),
+ (163, 104, 55), (152, 95, 50), (133, 91, 37), (124, 81, 28),
+ (117, 81, 28), (108, 77, 27), (111, 79, 32), (118, 83, 39),
+ (133, 92, 51), (146, 97, 56), (153, 103, 61), (152, 104, 57),
+ (148, 104, 57), (142, 101, 48), (134, 95, 43), (123, 84, 31),
+ (109, 70, 28), (99, 66, 22), (95, 64, 28), (97, 65, 36),
+ (102, 78, 52), (120, 88, 58), (143, 110, 81), (152, 144, 147),
+ (174, 165, 170), (193, 182, 188), (205, 195, 203), (220, 217, 224),
+ (232, 235, 242), (243, 246, 251), (245, 250, 253), (248, 253, 254),
+ (249, 253, 254), (253, 255, 254), (255, 255, 255), (255, 255, 255),
+ (254, 255, 255), (253, 254, 255), (253, 254, 255), (250, 251, 253),
+ (244, 248, 250), (234, 236, 243), (222, 219, 229), (207, 197, 205),
+ (188, 181, 189), (170, 160, 167), (142, 133, 134), (76, 67, 44)
+),
+
+// 74 geyser27.ppm
+(
+ (0, 0, 0), (26, 5, 5), (77, 17, 6), (98, 45, 29),
+ (124, 78, 66), (114, 129, 146), (115, 168, 193), (132, 179, 210),
+ (152, 186, 220), (153, 176, 202), (142, 171, 181), (157, 169, 176),
+ (165, 162, 158), (154, 131, 103), (149, 104, 73), (152, 98, 60),
+ (140, 85, 46), (138, 67, 23), (163, 57, 6), (173, 55, 8),
+ (179, 56, 3), (190, 61, 8), (208, 86, 7), (210, 110, 25),
+ (221, 127, 29), (222, 150, 44), (226, 161, 53), (222, 159, 52),
+ (222, 152, 60), (213, 148, 66), (193, 134, 70), (164, 146, 113),
+ (138, 141, 159), (133, 144, 165), (154, 139, 122), (148, 108, 84),
+ (158, 115, 69), (189, 121, 57), (198, 124, 48), (212, 136, 45),
+ (224, 146, 39), (223, 143, 35), (222, 137, 31), (222, 136, 24),
+ (221, 137, 18), (205, 101, 19), (198, 76, 4), (176, 60, 14),
+ (148, 86, 43), (154, 110, 61), (141, 115, 89), (125, 168, 156),
+ (126, 173, 199), (109, 156, 212), (105, 144, 195), (96, 120, 161),
+ (71, 74, 121), (37, 58, 125), (26, 49, 119), (16, 42, 117),
+ (17, 41, 115), (18, 38, 106), (35, 42, 95), (53, 36, 45),
+ (59, 35, 35), (84, 25, 14), (98, 35, 15), (116, 48, 18),
+ (121, 56, 23), (135, 72, 28), (142, 82, 36), (163, 103, 51),
+ (178, 108, 56), (196, 123, 61), (214, 145, 68), (202, 165, 99),
+ (182, 166, 149), (177, 174, 165), (175, 176, 165), (157, 168, 171),
+ (135, 153, 167), (120, 125, 129), (126, 87, 69), (125, 82, 64),
+ (126, 81, 63), (127, 75, 46), (137, 83, 37), (142, 82, 36),
+ (142, 80, 35), (134, 70, 20), (116, 51, 9), (107, 38, 11),
+ (97, 29, 7), (86, 25, 13), (87, 26, 8), (93, 28, 8),
+ (103, 31, 6), (110, 40, 6), (111, 43, 7), (141, 28, 8),
+ (143, 31, 7), (145, 34, 10), (148, 36, 6), (145, 39, 3),
+ (128, 54, 22), (115, 51, 25), (99, 50, 25), (99, 47, 28),
+ (102, 44, 27), (95, 42, 26), (53, 35, 43), (23, 38, 100),
+ (14, 34, 103), (18, 28, 89), (4, 0, 2), (1, 0, 0),
+ (24, 3, 2), (75, 15, 6), (85, 15, 2), (98, 23, 4),
+ (101, 24, 2), (105, 32, 2), (106, 34, 2), (104, 37, 12),
+ (100, 33, 14), (91, 30, 11), (88, 29, 11), (93, 38, 18),
+ (96, 39, 24), (98, 47, 30), (69, 63, 76), (36, 54, 121),
+ (49, 63, 118), (100, 68, 69), (114, 71, 55), (131, 86, 57),
+ (159, 109, 61), (186, 112, 45), (200, 123, 46), (217, 143, 50),
+ (221, 149, 55), (221, 147, 50), (211, 139, 54), (188, 119, 49),
+ (175, 103, 38), (152, 85, 32), (165, 61, 23), (160, 43, 7),
+ (163, 41, 6), (153, 31, 3), (156, 35, 7), (162, 41, 7),
+ (164, 43, 5), (170, 53, 9), (182, 67, 12), (195, 110, 40),
+ (213, 134, 48), (224, 152, 58), (223, 161, 67), (222, 154, 64),
+ (195, 134, 61), (181, 119, 60), (156, 111, 61), (145, 104, 74),
+ (126, 81, 65), (91, 91, 112), (114, 123, 157), (118, 163, 183),
+ (127, 182, 196), (128, 186, 211), (132, 187, 192), (154, 193, 164),
+ (167, 204, 164), (170, 202, 163), (180, 203, 188), (163, 198, 225),
+ (139, 193, 222), (136, 192, 219), (119, 177, 225), (115, 173, 225),
+ (112, 166, 225), (109, 154, 202), (113, 118, 144), (119, 77, 72),
+ (112, 67, 52), (102, 53, 32), (102, 53, 33), (111, 67, 54),
+ (90, 85, 91), (44, 63, 127), (32, 52, 121), (26, 46, 119),
+ (18, 38, 109), (16, 31, 95), (2, 4, 21), (0, 0, 0),
+ (0, 0, 0), (6, 1, 0), (33, 11, 21), (46, 37, 52),
+ (55, 66, 120), (98, 107, 144), (133, 149, 176), (137, 158, 190),
+ (121, 132, 164), (76, 86, 128), (40, 58, 125), (30, 50, 118),
+ (27, 47, 121), (39, 50, 109), (107, 61, 46), (104, 57, 36),
+ (110, 60, 40), (130, 82, 55), (153, 108, 60), (155, 114, 66),
+ (186, 132, 68), (216, 177, 98), (221, 182, 114), (220, 213, 126),
+ (223, 205, 147), (194, 197, 178), (174, 198, 177), (183, 184, 159),
+ (192, 145, 102), (178, 111, 64), (170, 81, 28), (173, 58, 7),
+ (173, 52, 7), (173, 50, 5), (167, 48, 2), (160, 47, 3),
+ (158, 48, 2), (163, 51, 6), (174, 58, 8), (189, 97, 22),
+ (209, 124, 41), (219, 144, 52), (219, 148, 62), (200, 138, 62),
+ (187, 134, 72), (171, 156, 133), (167, 172, 160), (138, 150, 173),
+ (126, 139, 157), (142, 106, 81), (117, 71, 55), (108, 50, 28),
+ (98, 42, 18), (89, 28, 10), (81, 23, 6), (78, 14, 2),
+ (78, 14, 1), (75, 7, 1), (9, 0, 1), (0, 0, 0)
+),
+
+// 75 gris.josette.ppm
+(
+ (36, 41, 40), (71, 77, 82), (90, 114, 119), (120, 152, 164),
+ (158, 192, 200), (171, 198, 207), (176, 199, 207), (178, 198, 207),
+ (176, 199, 208), (179, 200, 207), (181, 202, 207), (184, 204, 213),
+ (186, 209, 219), (184, 209, 220), (183, 211, 217), (181, 207, 209),
+ (179, 205, 210), (187, 207, 213), (188, 211, 216), (188, 211, 217),
+ (188, 211, 217), (190, 209, 221), (194, 213, 219), (250, 249, 229),
+ (255, 250, 227), (255, 247, 228), (227, 228, 218), (193, 205, 212),
+ (188, 204, 204), (180, 195, 198), (162, 178, 167), (117, 146, 147),
+ (90, 124, 134), (81, 117, 123), (76, 105, 109), (71, 102, 97),
+ (63, 89, 80), (40, 59, 60), (33, 47, 50), (29, 43, 46),
+ (26, 36, 38), (18, 27, 26), (14, 23, 22), (19, 28, 27),
+ (30, 36, 35), (29, 36, 39), (32, 41, 46), (32, 46, 49),
+ (42, 48, 47), (42, 53, 46), (73, 82, 57), (72, 84, 72),
+ (73, 91, 84), (76, 95, 96), (79, 98, 94), (82, 102, 99),
+ (84, 104, 100), (93, 106, 100), (90, 111, 114), (88, 115, 124),
+ (94, 122, 133), (139, 153, 152), (175, 190, 183), (177, 193, 190),
+ (157, 174, 157), (94, 123, 129), (82, 108, 109), (66, 93, 89),
+ (37, 52, 58), (26, 38, 39), (11, 18, 22), (8, 11, 18),
+ (7, 9, 16), (9, 14, 18), (13, 20, 23), (26, 36, 38),
+ (36, 50, 55), (61, 80, 82), (70, 96, 93), (76, 100, 101),
+ (76, 103, 111), (79, 110, 113), (82, 110, 120), (85, 112, 125),
+ (86, 115, 129), (87, 118, 133), (90, 124, 143), (139, 166, 175),
+ (171, 187, 203), (180, 195, 202), (183, 198, 201), (180, 198, 199),
+ (174, 194, 195), (157, 160, 165), (97, 119, 125), (86, 106, 106),
+ (69, 83, 82), (37, 52, 53), (28, 39, 36), (16, 25, 24),
+ (10, 18, 21), (10, 16, 22), (12, 20, 23), (25, 39, 42),
+ (40, 59, 65), (69, 97, 94), (90, 117, 122), (125, 150, 154),
+ (173, 193, 185), (185, 200, 195), (184, 200, 200), (174, 196, 201),
+ (145, 179, 183), (91, 133, 141), (86, 120, 132), (86, 116, 127),
+ (86, 116, 127), (90, 116, 127), (99, 128, 135), (160, 176, 163),
+ (193, 195, 186), (190, 205, 197), (208, 214, 203), (255, 250, 223),
+ (254, 252, 232), (253, 252, 234), (253, 250, 231), (246, 245, 225),
+ (191, 210, 215), (186, 204, 213), (182, 203, 208), (178, 201, 209),
+ (174, 201, 209), (165, 197, 207), (142, 175, 185), (87, 123, 144),
+ (85, 119, 138), (87, 120, 141), (108, 137, 143), (145, 181, 181),
+ (175, 196, 201), (184, 197, 205), (189, 207, 207), (192, 206, 207),
+ (192, 209, 208), (214, 225, 211), (249, 253, 231), (253, 253, 243),
+ (253, 253, 244), (253, 252, 243), (247, 249, 225), (192, 209, 203),
+ (163, 178, 172), (118, 136, 143), (90, 119, 126), (85, 113, 120),
+ (84, 112, 115), (86, 110, 111), (88, 112, 116), (88, 117, 123),
+ (92, 122, 132), (118, 148, 148), (161, 181, 176), (176, 195, 200),
+ (178, 197, 204), (178, 198, 205), (172, 200, 204), (169, 192, 200),
+ (125, 156, 166), (91, 123, 135), (77, 112, 116), (68, 97, 97),
+ (53, 71, 81), (32, 49, 59), (30, 46, 57), (40, 60, 67),
+ (65, 88, 80), (72, 92, 91), (74, 95, 98), (75, 100, 97),
+ (77, 102, 99), (79, 104, 101), (78, 103, 100), (78, 101, 95),
+ (78, 101, 95), (78, 102, 95), (80, 103, 98), (81, 102, 101),
+ (81, 101, 102), (82, 102, 103), (80, 104, 105), (76, 106, 107),
+ (77, 106, 108), (79, 109, 108), (80, 110, 112), (79, 111, 114),
+ (81, 111, 114), (82, 113, 115), (85, 115, 116), (85, 114, 118),
+ (85, 113, 123), (85, 115, 127), (84, 116, 124), (83, 117, 127),
+ (86, 119, 125), (97, 126, 133), (149, 174, 171), (173, 194, 197),
+ (177, 197, 199), (179, 200, 200), (173, 193, 201), (144, 173, 179),
+ (91, 124, 141), (84, 118, 130), (76, 112, 121), (66, 106, 112),
+ (71, 104, 106), (73, 104, 103), (72, 101, 97), (68, 91, 83),
+ (46, 61, 68), (39, 50, 52), (36, 46, 39), (34, 38, 28),
+ (13, 19, 19), (9, 18, 17), (9, 20, 23), (24, 34, 37),
+ (34, 43, 42), (42, 52, 54), (70, 81, 71), (73, 88, 81),
+ (74, 96, 87), (72, 95, 86), (70, 90, 82), (70, 84, 79),
+ (44, 62, 67), (29, 48, 54), (30, 48, 52), (32, 51, 58),
+ (48, 63, 70), (69, 91, 89), (86, 108, 111), (95, 124, 130),
+ (181, 190, 150), (224, 207, 189), (250, 246, 219), (255, 251, 224),
+ (252, 250, 229), (238, 243, 231), (189, 212, 214), (181, 203, 201),
+ (174, 193, 194), (129, 156, 154), (92, 121, 120), (69, 90, 80)
+),
+
+// 76 gris.landscape-ceret.ppm
+(
+ (16, 15, 9), (38, 38, 25), (74, 64, 42), (102, 59, 39),
+ (124, 79, 40), (136, 91, 44), (160, 94, 56), (173, 80, 72),
+ (182, 80, 70), (210, 77, 71), (209, 82, 67), (202, 48, 38),
+ (227, 88, 54), (211, 102, 54), (226, 127, 50), (234, 143, 56),
+ (238, 156, 65), (228, 167, 71), (189, 166, 79), (133, 176, 107),
+ (119, 153, 122), (111, 145, 124), (96, 138, 126), (103, 124, 100),
+ (99, 100, 94), (78, 96, 107), (69, 100, 132), (64, 121, 173),
+ (98, 165, 196), (107, 165, 182), (122, 172, 179), (171, 201, 211),
+ (189, 209, 209), (201, 210, 207), (210, 219, 205), (196, 208, 204),
+ (163, 189, 199), (132, 166, 174), (118, 138, 153), (134, 115, 126),
+ (168, 130, 107), (180, 120, 108), (181, 101, 112), (209, 90, 97),
+ (215, 92, 95), (220, 95, 96), (217, 98, 100), (226, 98, 95),
+ (228, 105, 92), (232, 105, 88), (229, 97, 83), (224, 83, 73),
+ (227, 88, 85), (219, 100, 76), (227, 105, 83), (229, 106, 90),
+ (224, 107, 98), (226, 116, 103), (226, 121, 114), (215, 152, 155),
+ (218, 168, 168), (217, 172, 167), (222, 177, 172), (239, 183, 170),
+ (239, 185, 167), (226, 202, 144), (252, 231, 99), (252, 223, 89),
+ (248, 218, 82), (249, 200, 79), (228, 191, 83), (180, 160, 91),
+ (136, 184, 126), (112, 162, 130), (113, 156, 132), (111, 156, 135),
+ (124, 161, 154), (128, 163, 167), (126, 154, 174), (120, 141, 162),
+ (98, 123, 138), (101, 123, 131), (100, 132, 109), (100, 120, 96),
+ (96, 110, 85), (88, 94, 70), (112, 87, 42), (120, 85, 44),
+ (128, 86, 56), (139, 86, 54), (159, 115, 62), (177, 122, 52),
+ (198, 127, 62), (221, 146, 50), (221, 160, 47), (214, 166, 37),
+ (234, 179, 32), (248, 194, 35), (253, 197, 34), (252, 198, 35),
+ (249, 196, 31), (249, 195, 43), (249, 165, 48), (242, 150, 38),
+ (241, 151, 32), (242, 149, 36), (241, 150, 35), (237, 142, 33),
+ (225, 139, 28), (229, 140, 32), (230, 133, 43), (220, 126, 44),
+ (223, 122, 32), (221, 127, 29), (214, 135, 33), (207, 133, 39),
+ (210, 144, 43), (206, 140, 60), (193, 141, 67), (164, 143, 82),
+ (129, 131, 69), (109, 115, 58), (90, 116, 69), (85, 107, 68),
+ (76, 79, 81), (89, 93, 72), (78, 85, 68), (66, 71, 62),
+ (56, 62, 58), (48, 51, 51), (36, 35, 24), (25, 15, 16),
+ (10, 13, 9), (8, 7, 5), (4, 2, 3), (14, 13, 11),
+ (16, 14, 15), (19, 18, 15), (20, 18, 19), (28, 35, 24),
+ (33, 34, 32), (29, 38, 31), (45, 56, 40), (52, 57, 47),
+ (58, 54, 43), (57, 59, 46), (60, 53, 49), (62, 60, 58),
+ (69, 68, 63), (70, 80, 60), (83, 81, 70), (97, 87, 81),
+ (112, 94, 86), (116, 104, 83), (129, 111, 73), (130, 124, 55),
+ (125, 120, 57), (134, 112, 46), (163, 121, 48), (198, 142, 59),
+ (205, 153, 76), (218, 163, 137), (212, 164, 160), (208, 155, 162),
+ (199, 126, 129), (194, 113, 123), (189, 121, 124), (202, 126, 104),
+ (196, 116, 69), (198, 112, 35), (199, 108, 31), (207, 127, 39),
+ (211, 131, 40), (228, 140, 40), (244, 160, 44), (248, 194, 44),
+ (253, 199, 40), (253, 200, 35), (253, 201, 37), (254, 204, 41),
+ (251, 205, 41), (252, 206, 42), (254, 211, 39), (254, 206, 44),
+ (253, 202, 44), (249, 204, 53), (246, 196, 59), (241, 192, 54),
+ (236, 172, 64), (195, 164, 84), (132, 187, 124), (127, 189, 119),
+ (115, 171, 106), (111, 161, 95), (103, 126, 95), (97, 115, 89),
+ (94, 112, 86), (90, 108, 78), (106, 107, 67), (115, 94, 66),
+ (104, 87, 59), (100, 75, 56), (92, 69, 49), (85, 77, 61),
+ (93, 85, 62), (98, 89, 50), (96, 71, 46), (93, 74, 46),
+ (87, 73, 43), (79, 82, 63), (69, 89, 69), (69, 95, 62),
+ (52, 86, 60), (60, 84, 63), (64, 86, 47), (65, 71, 57),
+ (69, 70, 50), (76, 69, 49), (74, 80, 52), (72, 95, 61),
+ (78, 105, 71), (95, 123, 75), (108, 138, 71), (119, 138, 81),
+ (152, 142, 139), (201, 151, 162), (215, 173, 175), (218, 200, 175),
+ (227, 228, 211), (254, 251, 249), (252, 252, 250), (250, 252, 252),
+ (228, 234, 230), (219, 220, 216), (237, 189, 172), (253, 228, 97),
+ (251, 218, 72), (254, 213, 63), (251, 211, 67), (249, 214, 62),
+ (251, 212, 56), (252, 213, 52), (253, 210, 46), (254, 201, 44),
+ (246, 191, 47), (244, 164, 74), (222, 170, 100), (231, 157, 139),
+ (214, 165, 166), (213, 156, 162), (198, 135, 148), (178, 118, 131),
+ (161, 106, 115), (123, 76, 72), (75, 68, 56), (42, 42, 38)
+),
+
+// 77 kandinsky.comp-9.ppm
+(
+ (81, 31, 21), (121, 26, 10), (159, 21, 3), (194, 57, 2),
+ (216, 102, 0), (215, 111, 0), (215, 122, 1), (220, 132, 2),
+ (227, 148, 3), (233, 167, 22), (251, 191, 41), (252, 194, 60),
+ (253, 200, 72), (225, 192, 103), (216, 204, 135), (224, 205, 153),
+ (232, 201, 156), (251, 210, 92), (254, 207, 68), (254, 191, 42),
+ (248, 182, 7), (231, 146, 2), (225, 127, 2), (221, 107, 0),
+ (197, 62, 6), (169, 26, 4), (157, 35, 12), (154, 76, 92),
+ (162, 80, 100), (173, 137, 99), (141, 186, 121), (146, 183, 127),
+ (179, 183, 142), (192, 170, 137), (240, 177, 82), (254, 198, 69),
+ (254, 207, 68), (254, 203, 65), (252, 194, 62), (251, 190, 56),
+ (249, 181, 57), (243, 169, 37), (221, 129, 5), (210, 110, 0),
+ (195, 60, 4), (167, 19, 1), (129, 20, 3), (96, 28, 20),
+ (84, 30, 23), (88, 33, 27), (97, 29, 42), (84, 35, 46),
+ (92, 136, 115), (90, 161, 127), (125, 186, 117), (143, 187, 118),
+ (203, 172, 77), (200, 138, 40), (196, 115, 9), (170, 51, 13),
+ (123, 29, 7), (106, 35, 13), (92, 32, 18), (92, 29, 17),
+ (119, 28, 5), (125, 30, 7), (182, 57, 14), (210, 109, 3),
+ (218, 123, 10), (237, 165, 27), (235, 187, 61), (215, 194, 103),
+ (173, 197, 132), (146, 197, 126), (138, 195, 127), (134, 194, 124),
+ (137, 192, 130), (149, 193, 134), (178, 188, 138), (200, 205, 141),
+ (212, 205, 172), (216, 213, 187), (212, 217, 186), (180, 205, 174),
+ (157, 195, 166), (112, 187, 178), (103, 185, 183), (95, 177, 181),
+ (68, 160, 185), (69, 166, 201), (91, 173, 167), (112, 172, 141),
+ (129, 190, 123), (131, 188, 123), (128, 186, 116), (121, 182, 107),
+ (91, 149, 116), (102, 34, 47), (107, 34, 15), (123, 28, 10),
+ (170, 49, 11), (214, 97, 1), (217, 111, 0), (222, 124, 3),
+ (227, 141, 2), (234, 157, 22), (240, 176, 44), (249, 194, 54),
+ (250, 194, 60), (252, 202, 64), (254, 200, 63), (253, 196, 67),
+ (246, 192, 66), (219, 182, 92), (162, 192, 118), (141, 188, 124),
+ (133, 187, 123), (136, 186, 121), (137, 189, 128), (132, 187, 132),
+ (108, 176, 182), (98, 183, 188), (96, 185, 193), (81, 171, 198),
+ (67, 175, 209), (68, 174, 204), (81, 180, 196), (94, 181, 171),
+ (130, 192, 129), (136, 186, 120), (134, 118, 91), (127, 53, 73),
+ (94, 31, 50), (85, 26, 44), (81, 25, 40), (81, 25, 36),
+ (74, 29, 33), (73, 29, 30), (29, 41, 29), (28, 38, 27),
+ (11, 17, 13), (5, 16, 11), (10, 12, 8), (12, 12, 10),
+ (26, 18, 7), (71, 26, 33), (85, 30, 43), (96, 81, 53),
+ (86, 157, 121), (127, 184, 120), (145, 173, 143), (163, 176, 159),
+ (197, 184, 169), (215, 198, 190), (209, 202, 182), (179, 201, 158),
+ (155, 200, 143), (139, 195, 127), (134, 184, 113), (148, 113, 77),
+ (158, 36, 13), (165, 15, 3), (174, 4, 5), (178, 5, 1),
+ (181, 14, 1), (162, 18, 3), (131, 19, 0), (119, 22, 5),
+ (122, 28, 14), (144, 95, 64), (161, 147, 76), (136, 184, 115),
+ (138, 187, 118), (151, 186, 112), (213, 190, 86), (235, 190, 72),
+ (252, 203, 78), (239, 213, 117), (231, 214, 169), (234, 218, 179),
+ (228, 220, 181), (210, 214, 170), (160, 205, 149), (148, 202, 142),
+ (147, 200, 138), (161, 198, 139), (181, 200, 134), (198, 195, 118),
+ (234, 187, 70), (241, 174, 51), (230, 129, 18), (227, 125, 3),
+ (224, 121, 3), (228, 119, 2), (222, 123, 4), (224, 125, 4),
+ (223, 130, 1), (229, 145, 1), (232, 166, 29), (219, 181, 69),
+ (183, 183, 110), (153, 193, 124), (153, 201, 135), (158, 203, 146),
+ (188, 210, 164), (206, 218, 197), (202, 219, 203), (200, 214, 201),
+ (149, 193, 172), (112, 192, 183), (125, 194, 172), (144, 192, 132),
+ (166, 192, 126), (213, 152, 98), (213, 131, 14), (218, 121, 7),
+ (221, 113, 5), (220, 111, 2), (223, 117, 2), (223, 117, 4),
+ (222, 118, 1), (218, 119, 1), (218, 122, 0), (217, 125, 1),
+ (217, 134, 9), (231, 160, 32), (241, 171, 85), (206, 186, 135),
+ (230, 211, 173), (227, 216, 188), (227, 210, 192), (230, 220, 195),
+ (226, 221, 194), (225, 219, 188), (221, 218, 192), (223, 227, 196),
+ (219, 222, 207), (207, 221, 204), (216, 223, 196), (215, 218, 189),
+ (220, 218, 173), (204, 191, 145), (201, 135, 144), (218, 142, 83),
+ (196, 127, 22), (202, 87, 2), (163, 21, 0), (124, 19, 1),
+ (101, 32, 6), (84, 47, 14), (111, 120, 67), (85, 155, 123),
+ (89, 165, 129), (83, 157, 124), (70, 122, 117), (78, 32, 40)
+),
+
+// 78 kandinsky.yellow-red-blue.ppm
+(
+ (8, 1, 9), (18, 7, 12), (41, 2, 17), (56, 14, 26),
+ (97, 18, 40), (101, 48, 45), (110, 76, 36), (142, 112, 37),
+ (125, 122, 42), (118, 90, 40), (110, 72, 34), (104, 17, 29),
+ (111, 23, 27), (141, 41, 42), (168, 88, 88), (178, 116, 101),
+ (156, 118, 128), (138, 130, 114), (139, 126, 99), (132, 121, 90),
+ (129, 120, 101), (129, 118, 116), (110, 100, 123), (92, 69, 125),
+ (85, 65, 116), (98, 71, 105), (130, 98, 74), (137, 130, 54),
+ (140, 128, 55), (145, 118, 45), (149, 123, 38), (144, 128, 50),
+ (158, 141, 56), (172, 151, 55), (159, 145, 47), (171, 154, 58),
+ (184, 153, 66), (185, 154, 70), (183, 155, 68), (177, 163, 70),
+ (174, 160, 66), (168, 157, 71), (172, 159, 65), (168, 156, 68),
+ (163, 155, 67), (160, 147, 69), (164, 151, 85), (164, 153, 89),
+ (162, 153, 91), (156, 155, 98), (155, 142, 108), (158, 149, 97),
+ (152, 149, 96), (151, 147, 113), (143, 137, 124), (139, 128, 135),
+ (128, 118, 135), (119, 126, 142), (115, 128, 147), (116, 128, 154),
+ (117, 109, 167), (105, 110, 165), (103, 139, 206), (116, 143, 241),
+ (118, 132, 242), (128, 138, 243), (135, 150, 243), (148, 161, 244),
+ (140, 151, 239), (141, 160, 242), (145, 155, 240), (158, 145, 230),
+ (161, 146, 223), (144, 152, 223), (158, 136, 227), (170, 135, 216),
+ (169, 146, 220), (188, 165, 214), (210, 179, 238), (219, 192, 244),
+ (233, 209, 245), (236, 211, 243), (218, 190, 245), (191, 170, 246),
+ (178, 158, 247), (157, 144, 237), (147, 128, 230), (143, 125, 227),
+ (103, 124, 233), (100, 115, 200), (102, 87, 192), (75, 74, 148),
+ (27, 54, 120), (30, 45, 100), (30, 39, 66), (28, 37, 51),
+ (33, 31, 33), (32, 33, 37), (39, 45, 51), (40, 67, 94),
+ (59, 52, 113), (71, 66, 120), (78, 66, 158), (88, 66, 180),
+ (107, 75, 215), (120, 89, 216), (125, 84, 226), (132, 101, 228),
+ (141, 107, 236), (144, 113, 236), (139, 108, 233), (125, 104, 207),
+ (110, 95, 198), (133, 110, 177), (155, 133, 166), (168, 154, 171),
+ (163, 149, 162), (145, 134, 166), (129, 132, 161), (109, 121, 132),
+ (96, 114, 122), (86, 98, 124), (67, 76, 117), (56, 63, 104),
+ (60, 58, 69), (66, 35, 69), (95, 25, 56), (113, 29, 62),
+ (144, 42, 79), (157, 65, 100), (129, 75, 130), (98, 81, 181),
+ (97, 85, 199), (96, 61, 204), (94, 59, 202), (89, 57, 197),
+ (85, 53, 196), (92, 63, 190), (94, 61, 197), (90, 59, 188),
+ (74, 45, 173), (70, 43, 176), (69, 40, 160), (63, 36, 144),
+ (31, 33, 99), (20, 19, 67), (19, 16, 48), (17, 14, 39),
+ (19, 20, 27), (13, 9, 7), (5, 2, 9), (5, 0, 7),
+ (4, 0, 6), (1, 1, 3), (1, 0, 2), (3, 2, 2),
+ (3, 4, 4), (3, 2, 6), (3, 1, 10), (8, 6, 14),
+ (22, 19, 32), (34, 29, 31), (34, 30, 30), (42, 29, 38),
+ (44, 26, 48), (52, 37, 48), (60, 56, 66), (66, 66, 74),
+ (67, 75, 95), (128, 118, 104), (155, 142, 109), (168, 155, 126),
+ (178, 163, 154), (177, 167, 165), (183, 170, 173), (193, 175, 195),
+ (201, 183, 220), (214, 186, 227), (215, 178, 232), (219, 180, 240),
+ (208, 180, 244), (198, 175, 242), (178, 171, 231), (177, 160, 220),
+ (182, 156, 210), (184, 156, 207), (186, 155, 207), (181, 158, 187),
+ (180, 159, 185), (151, 141, 201), (143, 130, 204), (154, 126, 218),
+ (147, 120, 232), (148, 115, 236), (158, 120, 237), (158, 137, 235),
+ (156, 139, 240), (149, 152, 246), (148, 157, 250), (150, 160, 250),
+ (163, 158, 254), (182, 174, 250), (181, 177, 239), (175, 177, 235),
+ (176, 167, 212), (163, 149, 196), (147, 149, 183), (136, 140, 187),
+ (120, 119, 174), (126, 123, 191), (145, 138, 187), (139, 147, 196),
+ (149, 129, 196), (157, 132, 188), (164, 93, 177), (183, 94, 182),
+ (185, 110, 174), (183, 133, 144), (158, 138, 149), (166, 141, 158),
+ (159, 147, 145), (158, 150, 130), (160, 155, 125), (161, 156, 101),
+ (168, 157, 80), (175, 160, 75), (187, 159, 70), (192, 162, 64),
+ (228, 195, 48), (198, 165, 66), (200, 174, 84), (202, 169, 86),
+ (220, 171, 90), (216, 186, 60), (211, 181, 92), (211, 177, 96),
+ (221, 172, 100), (207, 178, 98), (219, 186, 97), (228, 203, 101),
+ (225, 197, 113), (223, 192, 148), (213, 188, 149), (209, 179, 151),
+ (194, 163, 141), (182, 166, 137), (162, 152, 107), (161, 150, 87),
+ (159, 145, 65), (158, 130, 56), (138, 129, 75), (125, 95, 54),
+ (104, 70, 31), (56, 19, 44), (27, 9, 40), (13, 2, 11)
+),
+
+// 79 klee.insula-dulcamara.ppm
+(
+ (23, 10, 4), (63, 38, 27), (144, 110, 85), (148, 131, 73),
+ (144, 136, 86), (163, 131, 90), (176, 146, 96), (192, 163, 102),
+ (193, 157, 114), (193, 161, 130), (193, 168, 147), (181, 169, 156),
+ (168, 169, 150), (146, 160, 158), (130, 147, 155), (120, 159, 162),
+ (121, 161, 146), (112, 150, 152), (87, 121, 142), (92, 116, 138),
+ (119, 138, 142), (131, 142, 131), (154, 158, 110), (156, 154, 101),
+ (171, 151, 99), (170, 147, 84), (166, 131, 76), (152, 128, 75),
+ (149, 122, 63), (109, 83, 48), (26, 8, 7), (24, 6, 4),
+ (19, 7, 6), (17, 3, 2), (9, 2, 2), (4, 11, 6),
+ (26, 20, 6), (87, 117, 85), (117, 151, 117), (145, 138, 113),
+ (143, 132, 87), (129, 107, 66), (28, 10, 7), (22, 7, 8),
+ (30, 15, 12), (92, 111, 109), (84, 117, 137), (84, 111, 146),
+ (110, 139, 153), (126, 157, 141), (153, 160, 132), (151, 165, 120),
+ (164, 171, 122), (171, 167, 111), (170, 169, 104), (177, 149, 104),
+ (186, 143, 93), (176, 148, 77), (160, 151, 65), (175, 150, 75),
+ (169, 141, 61), (163, 108, 61), (132, 86, 35), (32, 9, 1),
+ (34, 20, 5), (128, 109, 56), (159, 114, 78), (177, 117, 83),
+ (186, 129, 83), (184, 131, 89), (193, 134, 99), (187, 149, 91),
+ (192, 143, 100), (199, 154, 108), (201, 156, 119), (201, 169, 121),
+ (202, 174, 128), (201, 178, 133), (213, 183, 133), (206, 179, 137),
+ (210, 179, 137), (219, 180, 138), (219, 182, 133), (216, 185, 134),
+ (216, 185, 137), (221, 184, 144), (221, 193, 147), (221, 192, 158),
+ (219, 187, 159), (221, 190, 165), (221, 196, 167), (220, 197, 172),
+ (220, 200, 165), (206, 196, 165), (196, 191, 167), (195, 184, 166),
+ (192, 178, 167), (166, 178, 173), (160, 179, 167), (158, 168, 161),
+ (149, 165, 164), (148, 164, 167), (144, 170, 170), (142, 165, 178),
+ (121, 153, 171), (113, 138, 160), (94, 119, 147), (89, 110, 140),
+ (52, 49, 54), (23, 10, 7), (14, 5, 0), (6, 1, 0),
+ (9, 2, 1), (19, 8, 7), (26, 8, 6), (54, 34, 14),
+ (150, 122, 40), (147, 148, 57), (143, 149, 61), (155, 145, 69),
+ (176, 143, 69), (194, 151, 66), (199, 146, 64), (197, 145, 60),
+ (181, 145, 67), (178, 139, 72), (186, 142, 76), (183, 147, 72),
+ (185, 154, 80), (190, 156, 84), (191, 168, 99), (175, 179, 104),
+ (181, 168, 120), (195, 169, 133), (183, 174, 137), (197, 165, 130),
+ (206, 166, 126), (211, 176, 133), (209, 188, 136), (215, 181, 133),
+ (202, 184, 122), (205, 197, 119), (195, 192, 115), (203, 190, 107),
+ (210, 172, 110), (212, 189, 110), (207, 192, 106), (191, 190, 101),
+ (182, 186, 92), (174, 183, 78), (168, 179, 79), (158, 175, 75),
+ (157, 166, 69), (145, 164, 64), (129, 163, 91), (94, 146, 106),
+ (67, 58, 29), (24, 11, 6), (26, 9, 6), (95, 79, 42),
+ (121, 129, 96), (146, 161, 92), (166, 185, 88), (172, 177, 82),
+ (185, 184, 76), (184, 187, 85), (179, 177, 86), (189, 175, 97),
+ (203, 177, 100), (199, 168, 110), (211, 164, 112), (208, 162, 123),
+ (202, 166, 121), (210, 164, 134), (207, 167, 147), (207, 169, 135),
+ (207, 169, 130), (214, 174, 125), (210, 173, 122), (205, 172, 125),
+ (202, 178, 124), (187, 178, 120), (184, 182, 117), (203, 187, 95),
+ (209, 186, 94), (217, 193, 101), (213, 175, 93), (208, 171, 87),
+ (208, 165, 80), (205, 158, 79), (193, 160, 79), (192, 162, 80),
+ (203, 180, 85), (199, 187, 82), (217, 198, 90), (220, 201, 98),
+ (226, 204, 105), (221, 190, 103), (222, 200, 120), (222, 191, 127),
+ (234, 200, 134), (222, 186, 122), (221, 186, 133), (219, 186, 135),
+ (215, 185, 130), (206, 189, 130), (204, 185, 139), (206, 183, 146),
+ (200, 174, 144), (202, 177, 146), (193, 182, 150), (187, 184, 154),
+ (181, 174, 153), (194, 184, 149), (210, 178, 152), (209, 181, 157),
+ (216, 188, 146), (214, 191, 146), (216, 196, 147), (223, 197, 151),
+ (226, 198, 154), (223, 207, 156), (215, 203, 166), (221, 204, 164),
+ (222, 195, 177), (237, 204, 177), (223, 200, 171), (230, 221, 187),
+ (226, 219, 191), (217, 208, 195), (255, 250, 232), (210, 201, 181),
+ (217, 209, 167), (230, 208, 161), (227, 208, 158), (224, 207, 153),
+ (226, 202, 156), (227, 196, 161), (223, 191, 165), (224, 190, 159),
+ (219, 196, 162), (215, 198, 163), (212, 192, 167), (211, 191, 160),
+ (206, 196, 161), (206, 195, 165), (207, 186, 165), (200, 190, 166),
+ (199, 194, 160), (198, 197, 143), (179, 200, 141), (171, 171, 130),
+ (155, 147, 120), (147, 135, 111), (134, 114, 74), (34, 16, 7)
+),
+
+// 80 nile.ppm
+(
+ (6, 39, 66), (27, 62, 99), (97, 68, 75), (156, 67, 38),
+ (216, 117, 3), (235, 142, 3), (254, 172, 3), (250, 212, 163),
+ (252, 231, 218), (238, 226, 247), (239, 229, 249), (237, 221, 250),
+ (220, 207, 244), (203, 200, 243), (198, 194, 235), (198, 173, 212),
+ (205, 162, 167), (203, 138, 42), (233, 145, 2), (242, 148, 1),
+ (250, 157, 6), (215, 175, 140), (203, 175, 195), (190, 164, 195),
+ (190, 148, 137), (216, 135, 22), (215, 125, 10), (171, 102, 23),
+ (129, 100, 47), (121, 95, 144), (128, 142, 174), (173, 161, 221),
+ (183, 170, 228), (186, 173, 229), (188, 175, 237), (188, 180, 239),
+ (191, 178, 242), (191, 176, 241), (195, 171, 230), (193, 166, 240),
+ (196, 167, 231), (195, 168, 229), (185, 164, 220), (177, 160, 210),
+ (137, 139, 141), (134, 82, 60), (141, 38, 18), (116, 24, 1),
+ (112, 16, 1), (115, 28, 6), (120, 61, 52), (103, 73, 159),
+ (64, 36, 166), (29, 40, 175), (24, 42, 167), (8, 47, 170),
+ (2, 38, 172), (7, 34, 178), (9, 48, 185), (19, 54, 186),
+ (23, 67, 194), (40, 59, 185), (52, 61, 183), (65, 68, 191),
+ (68, 70, 191), (77, 86, 199), (84, 89, 201), (105, 106, 203),
+ (114, 114, 223), (178, 149, 221), (193, 157, 211), (211, 172, 164),
+ (248, 158, 11), (254, 165, 3), (252, 172, 8), (234, 191, 176),
+ (219, 196, 207), (212, 193, 216), (207, 192, 219), (205, 177, 227),
+ (203, 179, 227), (197, 183, 238), (196, 189, 244), (194, 184, 244),
+ (200, 187, 245), (205, 199, 251), (213, 215, 251), (217, 214, 254),
+ (236, 233, 250), (247, 232, 253), (251, 238, 253), (251, 242, 251),
+ (252, 243, 251), (251, 240, 252), (243, 231, 251), (233, 219, 231),
+ (235, 212, 214), (213, 182, 218), (204, 164, 169), (161, 110, 98),
+ (115, 59, 43), (119, 40, 3), (124, 31, 5), (132, 39, 8),
+ (174, 73, 7), (223, 128, 5), (243, 157, 10), (232, 179, 167),
+ (224, 196, 210), (239, 205, 211), (241, 221, 218), (234, 223, 238),
+ (236, 225, 248), (230, 217, 247), (229, 206, 234), (219, 205, 219),
+ (214, 196, 210), (215, 184, 163), (246, 158, 7), (249, 165, 3),
+ (245, 160, 4), (241, 146, 3), (233, 137, 2), (220, 122, 7),
+ (161, 88, 51), (153, 127, 130), (172, 145, 194), (191, 160, 214),
+ (192, 164, 225), (192, 162, 230), (185, 159, 232), (177, 156, 226),
+ (144, 147, 223), (98, 131, 220), (81, 124, 214), (64, 115, 203),
+ (61, 117, 181), (62, 111, 175), (69, 106, 162), (66, 106, 148),
+ (49, 100, 154), (25, 87, 150), (30, 80, 145), (13, 66, 130),
+ (17, 70, 121), (32, 80, 103), (68, 82, 99), (88, 34, 11),
+ (105, 17, 6), (106, 19, 3), (119, 56, 31), (114, 76, 83),
+ (118, 101, 167), (161, 150, 217), (176, 172, 233), (179, 177, 233),
+ (176, 183, 242), (171, 177, 238), (168, 181, 241), (177, 185, 242),
+ (178, 188, 241), (178, 190, 247), (189, 196, 252), (194, 208, 250),
+ (203, 203, 243), (197, 198, 244), (196, 195, 243), (192, 196, 244),
+ (196, 193, 238), (192, 187, 239), (183, 191, 240), (182, 190, 244),
+ (188, 191, 224), (185, 179, 224), (185, 171, 210), (171, 144, 177),
+ (175, 129, 92), (225, 138, 1), (234, 140, 1), (240, 146, 4),
+ (245, 151, 6), (219, 168, 138), (193, 157, 206), (173, 157, 219),
+ (108, 123, 203), (83, 122, 207), (70, 127, 189), (64, 116, 180),
+ (61, 113, 168), (56, 97, 158), (30, 89, 142), (35, 90, 128),
+ (30, 89, 125), (22, 77, 120), (18, 68, 110), (20, 55, 88),
+ (93, 8, 6), (100, 9, 3), (118, 14, 1), (136, 41, 6),
+ (217, 113, 3), (227, 137, 1), (223, 132, 3), (165, 99, 20),
+ (144, 55, 30), (127, 32, 6), (116, 26, 6), (112, 46, 44),
+ (111, 71, 98), (92, 93, 152), (107, 110, 176), (102, 115, 200),
+ (110, 118, 213), (146, 142, 222), (173, 163, 224), (182, 175, 229),
+ (184, 179, 233), (184, 177, 236), (182, 172, 239), (178, 170, 239),
+ (174, 173, 237), (170, 160, 225), (108, 120, 218), (98, 125, 210),
+ (84, 119, 218), (81, 121, 217), (71, 123, 218), (72, 115, 212),
+ (79, 114, 208), (87, 116, 206), (87, 106, 203), (85, 100, 202),
+ (74, 92, 198), (57, 90, 209), (55, 95, 206), (61, 88, 195),
+ (61, 79, 186), (51, 83, 194), (33, 80, 195), (32, 87, 198),
+ (32, 90, 201), (51, 104, 211), (58, 102, 206), (61, 106, 181),
+ (62, 110, 178), (72, 115, 165), (73, 110, 160), (75, 95, 155),
+ (75, 96, 145), (68, 91, 149), (39, 96, 148), (31, 81, 143),
+ (29, 82, 137), (23, 79, 121), (25, 64, 120), (17, 60, 100)
+),
+
+// 81 picasso.jfille-chevre.ppm
+(
+ (24, 0, 0), (84, 2, 2), (184, 46, 0), (195, 61, 5),
+ (198, 61, 2), (203, 76, 3), (207, 80, 3), (211, 85, 3),
+ (209, 84, 2), (208, 79, 3), (204, 73, 0), (203, 61, 1),
+ (201, 59, 4), (199, 62, 3), (202, 76, 3), (205, 77, 7),
+ (207, 85, 7), (203, 93, 14), (194, 90, 28), (203, 102, 46),
+ (204, 100, 40), (183, 97, 38), (185, 96, 28), (151, 102, 51),
+ (196, 102, 41), (206, 119, 51), (225, 142, 78), (222, 148, 77),
+ (228, 148, 76), (220, 140, 77), (199, 136, 70), (208, 114, 43),
+ (209, 108, 37), (199, 124, 31), (206, 127, 29), (207, 130, 30),
+ (205, 135, 30), (208, 137, 32), (214, 146, 36), (218, 154, 55),
+ (222, 162, 83), (225, 184, 99), (228, 197, 128), (232, 202, 150),
+ (227, 202, 163), (237, 208, 172), (239, 211, 172), (241, 214, 173),
+ (246, 218, 175), (248, 219, 178), (249, 220, 178), (247, 223, 185),
+ (252, 226, 180), (252, 224, 187), (250, 226, 191), (249, 225, 189),
+ (247, 224, 191), (249, 226, 195), (248, 225, 192), (247, 227, 192),
+ (247, 224, 193), (245, 222, 193), (244, 220, 186), (243, 221, 184),
+ (245, 220, 182), (245, 216, 184), (244, 215, 183), (242, 216, 180),
+ (239, 215, 179), (238, 213, 175), (237, 214, 172), (238, 211, 162),
+ (236, 206, 152), (236, 204, 140), (232, 199, 128), (229, 179, 113),
+ (229, 167, 97), (225, 163, 93), (223, 155, 82), (210, 147, 85),
+ (196, 126, 70), (208, 104, 48), (215, 101, 49), (211, 111, 32),
+ (205, 125, 18), (214, 133, 14), (214, 142, 15), (215, 153, 44),
+ (219, 168, 76), (228, 184, 90), (231, 188, 99), (233, 194, 118),
+ (241, 203, 124), (235, 202, 135), (236, 201, 133), (237, 186, 120),
+ (237, 176, 107), (231, 171, 102), (231, 168, 94), (227, 167, 101),
+ (225, 168, 119), (212, 164, 105), (232, 178, 119), (244, 194, 131),
+ (241, 206, 140), (238, 208, 150), (238, 210, 161), (233, 208, 170),
+ (233, 211, 169), (237, 215, 173), (241, 217, 177), (243, 217, 181),
+ (246, 218, 179), (247, 221, 173), (251, 223, 174), (247, 220, 172),
+ (247, 220, 169), (243, 216, 161), (245, 209, 144), (242, 201, 137),
+ (241, 201, 116), (232, 187, 99), (227, 160, 80), (225, 145, 73),
+ (217, 122, 51), (213, 122, 33), (204, 129, 21), (200, 127, 20),
+ (197, 121, 11), (196, 117, 7), (193, 109, 0), (195, 120, 8),
+ (197, 132, 18), (209, 137, 27), (218, 145, 31), (220, 163, 56),
+ (230, 186, 95), (232, 193, 105), (233, 200, 129), (237, 207, 141),
+ (245, 211, 150), (242, 215, 158), (242, 213, 164), (236, 212, 171),
+ (235, 211, 172), (234, 212, 176), (236, 214, 177), (238, 213, 183),
+ (238, 214, 179), (227, 207, 181), (240, 215, 182), (242, 219, 182),
+ (241, 221, 182), (243, 221, 183), (244, 220, 183), (242, 218, 183),
+ (240, 216, 190), (242, 218, 191), (246, 219, 195), (245, 224, 198),
+ (243, 226, 199), (246, 228, 205), (246, 226, 202), (250, 230, 205),
+ (250, 229, 206), (248, 231, 205), (250, 228, 197), (248, 230, 194),
+ (248, 228, 196), (246, 227, 195), (244, 224, 196), (239, 223, 197),
+ (236, 214, 193), (237, 218, 188), (240, 217, 186), (239, 215, 181),
+ (241, 212, 173), (238, 211, 166), (237, 212, 155), (233, 206, 145),
+ (235, 201, 134), (220, 179, 120), (212, 170, 121), (206, 175, 108),
+ (211, 162, 117), (210, 156, 93), (223, 154, 89), (224, 158, 81),
+ (228, 163, 81), (234, 167, 90), (237, 176, 104), (240, 193, 127),
+ (237, 204, 141), (237, 206, 152), (237, 208, 159), (238, 212, 165),
+ (241, 218, 170), (240, 215, 171), (244, 216, 170), (246, 215, 160),
+ (242, 213, 169), (245, 210, 160), (249, 215, 154), (247, 212, 146),
+ (251, 213, 137), (245, 211, 137), (239, 207, 146), (235, 203, 151),
+ (224, 201, 154), (236, 202, 151), (237, 203, 154), (233, 206, 158),
+ (239, 210, 166), (238, 211, 169), (240, 211, 167), (242, 212, 168),
+ (239, 212, 164), (241, 211, 157), (236, 208, 150), (236, 205, 142),
+ (235, 202, 139), (231, 192, 122), (227, 189, 102), (226, 168, 88),
+ (224, 159, 72), (211, 144, 40), (201, 136, 33), (204, 132, 21),
+ (205, 133, 16), (208, 132, 14), (205, 131, 10), (204, 130, 9),
+ (202, 120, 8), (204, 124, 2), (195, 119, 6), (193, 117, 12),
+ (205, 109, 27), (213, 98, 30), (203, 89, 27), (207, 92, 29),
+ (212, 95, 23), (203, 90, 24), (201, 89, 25), (203, 90, 23),
+ (202, 90, 20), (204, 92, 16), (203, 85, 11), (189, 82, 5),
+ (196, 80, 15), (193, 78, 12), (189, 68, 5), (194, 78, 4),
+ (183, 70, 2), (182, 65, 9), (147, 49, 11), (42, 1, 3)
+),
+
+// 82 pollock.lavender-mist.ppm
+(
+ (3, 5, 2), (37, 33, 23), (65, 68, 36), (96, 95, 63),
+ (128, 112, 83), (152, 127, 86), (168, 141, 100), (181, 155, 104),
+ (183, 157, 111), (179, 157, 119), (175, 157, 121), (175, 159, 122),
+ (172, 157, 121), (168, 154, 114), (161, 149, 111), (154, 140, 106),
+ (150, 139, 107), (149, 135, 103), (144, 132, 102), (140, 130, 104),
+ (137, 128, 103), (140, 124, 102), (136, 126, 102), (133, 124, 97),
+ (135, 123, 94), (137, 123, 96), (140, 123, 94), (142, 126, 98),
+ (146, 125, 99), (150, 136, 101), (157, 145, 102), (164, 146, 107),
+ (172, 150, 121), (172, 156, 126), (180, 156, 123), (196, 164, 119),
+ (207, 171, 120), (208, 174, 128), (212, 181, 136), (210, 187, 137),
+ (209, 181, 131), (206, 168, 129), (203, 169, 127), (196, 171, 121),
+ (184, 166, 122), (177, 156, 117), (164, 146, 105), (156, 131, 93),
+ (136, 121, 89), (121, 112, 82), (105, 104, 75), (102, 102, 77),
+ (94, 90, 74), (71, 76, 62), (73, 77, 57), (94, 90, 65),
+ (108, 96, 66), (111, 98, 71), (110, 99, 81), (115, 111, 86),
+ (121, 114, 95), (123, 114, 94), (129, 117, 94), (130, 120, 90),
+ (130, 121, 90), (130, 119, 86), (130, 117, 81), (125, 103, 68),
+ (107, 88, 56), (96, 84, 53), (74, 62, 40), (55, 48, 36),
+ (41, 31, 29), (40, 34, 24), (37, 38, 25), (42, 39, 28),
+ (56, 49, 28), (59, 57, 36), (69, 73, 51), (94, 80, 63),
+ (99, 95, 79), (106, 99, 80), (118, 111, 85), (126, 113, 92),
+ (133, 123, 95), (132, 128, 95), (137, 132, 95), (140, 133, 103),
+ (141, 132, 104), (142, 135, 106), (144, 135, 109), (148, 139, 112),
+ (148, 142, 113), (151, 146, 118), (151, 144, 121), (156, 145, 124),
+ (152, 151, 130), (147, 156, 130), (150, 159, 134), (158, 157, 132),
+ (162, 158, 136), (164, 160, 137), (173, 165, 143), (179, 171, 154),
+ (189, 179, 155), (194, 187, 161), (192, 186, 164), (188, 186, 158),
+ (188, 180, 149), (185, 177, 146), (179, 167, 139), (170, 164, 132),
+ (167, 157, 129), (162, 155, 126), (155, 149, 120), (158, 142, 119),
+ (156, 142, 115), (157, 147, 114), (159, 148, 115), (164, 152, 115),
+ (167, 153, 123), (169, 155, 129), (173, 160, 131), (176, 163, 130),
+ (185, 172, 135), (191, 181, 142), (197, 185, 149), (198, 188, 159),
+ (202, 187, 160), (207, 190, 156), (212, 196, 152), (212, 194, 155),
+ (207, 193, 164), (209, 196, 165), (213, 197, 165), (218, 194, 160),
+ (215, 189, 152), (207, 185, 152), (200, 179, 150), (197, 177, 145),
+ (188, 170, 137), (174, 160, 131), (169, 157, 127), (166, 162, 119),
+ (155, 153, 116), (147, 145, 108), (145, 138, 114), (139, 134, 114),
+ (138, 132, 115), (129, 133, 113), (129, 128, 109), (127, 130, 102),
+ (119, 118, 93), (119, 112, 87), (114, 101, 77), (114, 102, 72),
+ (117, 106, 74), (117, 111, 77), (123, 116, 87), (120, 115, 91),
+ (126, 121, 92), (134, 128, 92), (145, 128, 90), (149, 138, 97),
+ (154, 140, 104), (162, 138, 103), (163, 137, 102), (167, 143, 108),
+ (167, 144, 111), (172, 149, 118), (175, 157, 121), (177, 163, 122),
+ (180, 166, 119), (186, 167, 128), (191, 174, 130), (200, 173, 131),
+ (201, 173, 132), (192, 176, 136), (188, 174, 141), (189, 177, 143),
+ (191, 172, 136), (185, 166, 128), (181, 161, 126), (187, 157, 122),
+ (194, 149, 113), (182, 140, 94), (166, 118, 76), (131, 100, 61),
+ (101, 81, 56), (74, 70, 52), (71, 56, 38), (66, 55, 35),
+ (58, 49, 32), (69, 63, 49), (77, 73, 56), (94, 84, 71),
+ (98, 97, 80), (103, 103, 88), (101, 117, 98), (109, 143, 125),
+ (138, 142, 122), (138, 142, 121), (145, 143, 123), (155, 152, 128),
+ (161, 158, 133), (172, 159, 137), (184, 169, 143), (197, 178, 149),
+ (201, 187, 146), (206, 188, 152), (215, 189, 147), (213, 188, 135),
+ (222, 181, 123), (213, 181, 124), (203, 163, 112), (192, 153, 110),
+ (185, 145, 99), (177, 142, 106), (168, 142, 105), (162, 142, 105),
+ (154, 139, 106), (151, 135, 109), (149, 136, 110), (150, 137, 114),
+ (151, 143, 120), (158, 146, 122), (167, 155, 130), (181, 168, 134),
+ (194, 182, 143), (208, 186, 143), (210, 200, 145), (224, 198, 145),
+ (225, 196, 150), (229, 205, 161), (243, 223, 174), (245, 222, 183),
+ (232, 211, 177), (225, 208, 171), (224, 219, 189), (224, 217, 200),
+ (222, 205, 186), (207, 203, 169), (203, 196, 156), (196, 186, 157),
+ (189, 178, 149), (175, 164, 133), (163, 157, 129), (151, 151, 120),
+ (141, 141, 112), (132, 129, 104), (121, 128, 106), (100, 110, 94),
+ (84, 88, 75), (73, 69, 60), (50, 56, 42), (18, 19, 13)
+),
+
+// 83 yngpaint.ppm
+(
+ (20, 15, 10), (52, 47, 45), (20, 105, 104), (63, 130, 123),
+ (91, 144, 114), (104, 140, 123), (126, 141, 130), (137, 151, 131),
+ (160, 157, 128), (170, 165, 126), (182, 173, 128), (188, 186, 129),
+ (190, 192, 144), (200, 204, 157), (204, 205, 163), (211, 209, 166),
+ (212, 213, 167), (216, 218, 171), (219, 220, 174), (221, 223, 173),
+ (222, 224, 176), (222, 224, 177), (224, 224, 174), (222, 222, 171),
+ (221, 221, 167), (220, 220, 164), (219, 220, 160), (217, 219, 154),
+ (215, 218, 153), (212, 211, 148), (202, 203, 153), (194, 194, 152),
+ (185, 182, 141), (171, 167, 129), (165, 167, 121), (166, 153, 113),
+ (162, 134, 98), (158, 140, 102), (171, 158, 105), (172, 163, 116),
+ (165, 163, 117), (175, 171, 107), (179, 169, 111), (187, 166, 130),
+ (192, 187, 131), (197, 193, 140), (202, 201, 155), (205, 207, 158),
+ (210, 214, 155), (211, 223, 162), (220, 222, 163), (226, 224, 166),
+ (225, 222, 171), (224, 224, 172), (224, 224, 174), (224, 226, 176),
+ (225, 226, 182), (225, 231, 185), (225, 227, 177), (227, 227, 175),
+ (228, 227, 180), (229, 231, 184), (228, 234, 188), (226, 232, 188),
+ (228, 234, 190), (229, 231, 192), (228, 233, 191), (227, 232, 192),
+ (229, 234, 194), (228, 233, 196), (229, 233, 200), (231, 235, 202),
+ (233, 242, 214), (244, 247, 219), (236, 241, 210), (238, 235, 204),
+ (234, 238, 201), (229, 236, 201), (229, 234, 202), (231, 236, 199),
+ (234, 234, 196), (233, 231, 191), (233, 231, 190), (229, 230, 188),
+ (229, 229, 188), (220, 224, 189), (218, 222, 189), (219, 223, 190),
+ (220, 224, 188), (220, 224, 187), (222, 230, 183), (224, 225, 181),
+ (220, 226, 180), (220, 226, 178), (219, 226, 178), (217, 226, 174),
+ (218, 226, 172), (220, 222, 172), (221, 221, 171), (223, 221, 169),
+ (224, 221, 168), (224, 219, 169), (222, 218, 170), (217, 219, 169),
+ (216, 219, 165), (216, 216, 162), (213, 213, 161), (205, 208, 157),
+ (201, 199, 146), (184, 184, 129), (165, 164, 109), (152, 146, 97),
+ (143, 145, 89), (137, 143, 95), (145, 149, 111), (126, 130, 101),
+ (107, 137, 86), (89, 115, 101), (116, 115, 83), (117, 115, 97),
+ (122, 131, 115), (115, 122, 105), (108, 124, 125), (133, 143, 104),
+ (139, 144, 116), (142, 154, 120), (166, 172, 118), (182, 187, 121),
+ (195, 198, 119), (206, 208, 146), (212, 210, 145), (212, 219, 154),
+ (214, 218, 157), (215, 217, 157), (216, 217, 157), (216, 217, 159),
+ (215, 213, 159), (212, 212, 162), (205, 206, 162), (203, 199, 162),
+ (200, 200, 157), (184, 185, 144), (173, 166, 139), (141, 155, 133),
+ (114, 148, 132), (99, 147, 140), (90, 142, 146), (110, 149, 142),
+ (125, 157, 145), (129, 146, 147), (164, 165, 137), (183, 186, 140),
+ (200, 202, 161), (203, 203, 170), (204, 210, 173), (205, 208, 177),
+ (211, 210, 180), (212, 215, 184), (212, 214, 190), (217, 217, 189),
+ (219, 218, 187), (217, 221, 189), (221, 220, 190), (221, 221, 195),
+ (219, 222, 191), (221, 225, 192), (218, 221, 195), (218, 222, 198),
+ (218, 222, 197), (215, 226, 194), (218, 224, 190), (218, 223, 183),
+ (218, 224, 180), (218, 224, 177), (217, 224, 180), (216, 221, 181),
+ (216, 220, 183), (213, 218, 183), (213, 216, 185), (213, 216, 184),
+ (214, 213, 183), (213, 210, 180), (209, 213, 175), (213, 215, 168),
+ (216, 215, 168), (216, 216, 166), (215, 212, 165), (214, 212, 163),
+ (214, 214, 160), (217, 217, 163), (217, 217, 167), (216, 218, 170),
+ (218, 220, 173), (221, 220, 174), (222, 221, 175), (221, 222, 179),
+ (217, 224, 180), (217, 221, 187), (214, 220, 186), (216, 219, 188),
+ (216, 219, 188), (218, 218, 190), (220, 218, 192), (214, 218, 190),
+ (216, 219, 188), (215, 218, 187), (217, 216, 185), (216, 215, 184),
+ (216, 215, 184), (217, 214, 184), (216, 216, 184), (217, 217, 183),
+ (220, 221, 182), (219, 219, 184), (220, 220, 184), (217, 222, 183),
+ (217, 223, 179), (215, 221, 176), (213, 219, 175), (215, 221, 173),
+ (215, 222, 171), (213, 222, 169), (215, 222, 173), (216, 222, 173),
+ (219, 221, 174), (216, 222, 174), (215, 221, 175), (215, 222, 178),
+ (215, 220, 180), (219, 219, 181), (217, 216, 183), (215, 214, 183),
+ (211, 214, 181), (206, 213, 173), (201, 207, 161), (202, 205, 148),
+ (187, 186, 124), (181, 172, 107), (166, 158, 86), (166, 138, 81),
+ (162, 142, 87), (150, 140, 75), (136, 133, 68), (132, 123, 66),
+ (122, 117, 45), (119, 92, 9), (133, 113, 56), (102, 96, 52),
+ (99, 55, 50), (116, 108, 66), (74, 61, 7), (75, 50, 24),
+ (55, 41, 51), (46, 43, 20), (84, 9, 8), (32, 3, 5)
+),
+
+// 84 cl-gold-orange-green from classlady1.ugr
+((0, 64, 0), (44, 64, 0), (66, 64, 0), (88, 64, 0),
+ (111, 73, 0), (135, 82, 0), (138, 91, 0), (142, 100, 0),
+ (157, 137, 0), (163, 153, 0), (170, 170, 0), (184, 184, 3),
+ (199, 199, 6), (213, 213, 9), (228, 228, 12), (235, 235, 13),
+ (243, 243, 15), (233, 211, 14), (211, 167, 11), (190, 124, 8),
+ (168, 80, 5), (146, 36, 2), (137, 18, 1), (128, 0, 0),
+ (172, 88, 44), (193, 131, 66), (215, 175, 88), (235, 215, 108),
+ (255, 255, 128), (244, 244, 117), (233, 233, 106), (211, 211, 84),
+ (190, 190, 62), (128, 128, 0), (138, 138, 0), (148, 148, 0),
+ (157, 157, 0), (167, 167, 0), (172, 172, 0), (177, 177, 0),
+ (153, 164, 0), (121, 143, 0), (90, 123, 0), (58, 102, 0),
+ (26, 81, 0), (13, 72, 0), (0, 64, 0), (44, 97, 24),
+ (88, 130, 47), (175, 195, 95), (215, 225, 116), (255, 255, 138),
+ (233, 222, 114), (211, 189, 91), (200, 173, 79), (190, 157, 67),
+ (146, 91, 19), (134, 80, 9), (123, 70, 0), (118, 76, 0),
+ (114, 83, 0), (111, 86, 0), (109, 89, 0), (104, 95, 0),
+ (100, 100, 0), (129, 129, 0), (143, 143, 0), (157, 157, 0),
+ (170, 170, 0), (183, 183, 0), (183, 183, 0), (183, 183, 0),
+ (183, 183, 0), (183, 183, 0), (183, 183, 0), (173, 162, 0),
+ (164, 142, 0), (159, 132, 0), (155, 122, 0), (145, 101, 0),
+ (136, 81, 0), (150, 97, 24), (171, 129, 47), (193, 162, 71),
+ (204, 178, 83), (215, 195, 95), (237, 228, 119), (255, 255, 138),
+ (211, 211, 91), (189, 189, 67), (168, 168, 43), (157, 157, 31),
+ (146, 146, 19), (128, 128, 0), (150, 150, 22), (172, 172, 44),
+ (193, 193, 66), (255, 255, 128), (255, 244, 128), (255, 233, 128),
+ (255, 228, 128), (255, 223, 129), (255, 212, 129), (255, 201, 129),
+ (255, 203, 108), (255, 213, 85), (255, 224, 63), (255, 229, 52),
+ (255, 235, 41), (255, 246, 18), (255, 255, 0), (233, 211, 0),
+ (211, 167, 0), (168, 80, 0), (157, 58, 0), (146, 36, 0),
+ (128, 0, 0), (106, 11, 0), (84, 22, 0), (62, 33, 0),
+ (18, 55, 0), (31, 76, 11), (44, 97, 22), (66, 113, 33),
+ (88, 130, 44), (131, 162, 66), (175, 195, 88), (255, 255, 128),
+ (233, 222, 106), (190, 157, 62), (179, 140, 51), (168, 124, 40),
+ (146, 91, 18), (128, 64, 0), (128, 64, 0), (128, 64, 0),
+ (128, 64, 0), (128, 64, 0), (128, 64, 0), (139, 76, 14),
+ (150, 89, 28), (172, 114, 56), (193, 139, 85), (215, 164, 113),
+ (237, 189, 141), (228, 190, 136), (214, 180, 122), (201, 171, 108),
+ (174, 152, 79), (147, 133, 51), (120, 114, 23), (98, 98, 0),
+ (152, 152, 38), (165, 165, 47), (179, 179, 57), (206, 206, 76),
+ (233, 233, 95), (255, 255, 111), (255, 255, 111), (255, 255, 111),
+ (255, 255, 111), (255, 255, 111), (244, 238, 101), (233, 222, 92),
+ (211, 189, 73), (190, 157, 54), (168, 124, 35), (146, 91, 16),
+ (144, 91, 0), (152, 105, 0), (161, 119, 0), (177, 146, 0),
+ (193, 173, 0), (210, 201, 0), (223, 223, 0), (207, 185, 0),
+ (190, 146, 0), (174, 108, 0), (158, 70, 0), (141, 31, 0),
+ (128, 0, 0), (144, 38, 0), (161, 77, 0), (177, 115, 0),
+ (210, 192, 0), (216, 207, 0), (223, 223, 0), (207, 207, 0),
+ (190, 190, 0), (174, 174, 0), (158, 158, 0), (128, 128, 0),
+ (150, 150, 0), (172, 172, 0), (193, 193, 0), (215, 215, 0),
+ (237, 237, 0), (255, 255, 0), (244, 244, 0), (234, 234, 0),
+ (223, 223, 0), (212, 212, 0), (202, 202, 0), (193, 193, 0),
+ (176, 168, 0), (159, 143, 0), (142, 118, 0), (125, 93, 0),
+ (108, 68, 0), (94, 47, 0), (122, 83, 22), (149, 118, 44),
+ (177, 154, 66), (205, 190, 88), (232, 226, 110), (255, 255, 128),
+ (242, 242, 113), (230, 228, 98), (217, 215, 83), (204, 201, 68),
+ (191, 188, 52), (181, 177, 40), (181, 177, 40), (181, 177, 40),
+ (181, 177, 40), (181, 177, 40), (181, 177, 40), (150, 158, 33),
+ (119, 138, 26), (88, 119, 19), (57, 99, 12), (25, 80, 6),
+ (0, 64, 0), (38, 91, 0), (77, 119, 0), (115, 146, 0),
+ (153, 173, 0), (192, 201, 0), (223, 223, 0), (207, 196, 0),
+ (190, 168, 0), (174, 141, 0), (158, 114, 0), (141, 86, 0),
+ (128, 64, 0), (128, 64, 0), (128, 64, 0), (128, 64, 0),
+ (128, 64, 0), (128, 64, 0), (128, 64, 0), (144, 91, 0),
+ (160, 118, 0), (176, 145, 0), (192, 172, 0), (221, 221, 0)
+ ),
+
+// 85 cl-gold-rose
+((0, 0, 0), (252, 192, 0), (250, 190, 2), (248, 188, 4),
+ (248, 186, 4), (248, 184, 4), (248, 184, 4), (248, 184, 4),
+ (244, 180, 4), (244, 178, 6), (244, 176, 8), (242, 174, 8),
+ (240, 172, 8), (240, 170, 8), (240, 168, 8), (238, 168, 10),
+ (236, 168, 12), (236, 164, 12), (234, 162, 12), (232, 160, 12),
+ (232, 158, 14), (232, 156, 16), (232, 156, 16), (232, 156, 16),
+ (228, 152, 16), (228, 150, 16), (228, 148, 16), (226, 148, 18),
+ (224, 148, 20), (224, 146, 20), (224, 144, 20), (224, 144, 20),
+ (220, 140, 20), (220, 140, 24), (218, 138, 24), (216, 136, 24),
+ (216, 134, 24), (216, 132, 24), (216, 132, 24), (216, 132, 24),
+ (212, 128, 28), (212, 126, 28), (212, 124, 28), (210, 122, 28),
+ (208, 120, 28), (208, 120, 30), (208, 120, 32), (208, 116, 32),
+ (204, 116, 32), (204, 112, 32), (202, 110, 34), (200, 108, 36),
+ (200, 106, 36), (200, 104, 36), (200, 104, 36), (200, 104, 36),
+ (196, 100, 36), (196, 98, 38), (196, 96, 40), (194, 96, 40),
+ (192, 96, 40), (192, 94, 40), (192, 92, 40), (192, 92, 44),
+ (192, 88, 44), (188, 88, 44), (188, 86, 44), (188, 84, 44),
+ (186, 82, 46), (184, 80, 48), (184, 80, 48), (184, 80, 48),
+ (180, 76, 48), (180, 74, 50), (180, 72, 52), (178, 70, 52),
+ (176, 68, 52), (176, 68, 52), (176, 68, 52), (176, 64, 52),
+ (176, 64, 52), (172, 60, 56), (172, 58, 56), (172, 56, 56),
+ (170, 56, 56), (168, 56, 56), (168, 52, 56), (168, 52, 60),
+ (164, 48, 60), (164, 46, 60), (164, 44, 60), (164, 44, 60),
+ (164, 44, 60), (160, 44, 64), (160, 40, 64), (160, 40, 64),
+ (160, 36, 64), (156, 36, 64), (156, 34, 66), (156, 32, 68),
+ (154, 30, 68), (152, 28, 68), (152, 28, 68), (152, 28, 68),
+ (148, 24, 72), (148, 22, 72), (148, 20, 72), (148, 18, 72),
+ (148, 16, 72), (144, 16, 72), (144, 16, 72), (144, 12, 76),
+ (144, 12, 76), (140, 8, 76), (140, 8, 76), (140, 8, 76),
+ (140, 4, 76), (136, 4, 80), (136, 0, 80), (136, 0, 80),
+ (136, 0, 80), (134, 0, 80), (132, 0, 80), (132, 0, 80),
+ (132, 0, 80), (132, 0, 80), (128, 0, 80), (128, 0, 76),
+ (128, 0, 76), (124, 0, 76), (124, 0, 76), (124, 0, 76),
+ (124, 0, 76), (124, 0, 72), (120, 0, 72), (120, 0, 72),
+ (120, 0, 72), (118, 0, 72), (116, 0, 72), (116, 0, 70),
+ (116, 0, 68), (116, 0, 68), (112, 0, 68), (112, 0, 68),
+ (112, 0, 68), (108, 0, 68), (108, 0, 66), (108, 0, 64),
+ (108, 0, 64), (108, 0, 64), (104, 0, 64), (104, 0, 64),
+ (104, 0, 60), (102, 0, 60), (100, 0, 60), (100, 0, 60),
+ (100, 0, 60), (100, 0, 60), (96, 0, 60), (96, 0, 60),
+ (96, 0, 56), (92, 0, 56), (92, 0, 56), (92, 0, 56),
+ (92, 0, 56), (92, 0, 56), (88, 0, 52), (88, 0, 52),
+ (88, 0, 52), (86, 0, 52), (84, 0, 52), (84, 0, 52),
+ (84, 0, 52), (84, 0, 48), (80, 0, 48), (80, 0, 48),
+ (80, 0, 48), (80, 0, 48), (76, 0, 48), (76, 0, 48),
+ (76, 0, 44), (76, 0, 44), (72, 0, 44), (72, 0, 44),
+ (72, 0, 44), (70, 0, 42), (68, 0, 40), (68, 0, 40),
+ (68, 0, 40), (68, 0, 40), (64, 0, 40), (64, 0, 40),
+ (64, 0, 40), (64, 0, 36), (60, 0, 36), (60, 0, 36),
+ (60, 0, 36), (60, 0, 36), (56, 0, 36), (56, 0, 32),
+ (56, 0, 32), (56, 0, 32), (52, 0, 32), (52, 0, 32),
+ (52, 0, 32), (52, 0, 32), (48, 0, 28), (48, 0, 28),
+ (48, 0, 28), (48, 0, 28), (44, 0, 28), (44, 0, 28),
+ (44, 0, 28), (44, 0, 24), (40, 0, 24), (40, 0, 24),
+ (40, 0, 24), (40, 0, 24), (36, 0, 24), (36, 0, 20),
+ (36, 0, 20), (36, 0, 20), (32, 0, 20), (32, 0, 20),
+ (32, 0, 20), (32, 0, 20), (28, 0, 16), (28, 0, 16),
+ (28, 0, 16), (28, 0, 16), (24, 0, 16), (24, 0, 16),
+ (24, 0, 12), (24, 0, 12), (20, 0, 12), (20, 0, 12),
+ (20, 0, 12), (20, 0, 12), (16, 0, 12), (16, 0, 8),
+ (16, 0, 8), (16, 0, 8), (12, 0, 8), (12, 0, 8),
+ (12, 0, 8), (12, 0, 8), (8, 0, 4), (8, 0, 4),
+ (8, 0, 4), (8, 0, 4), (4, 0, 4), (4, 0, 4),
+ (4, 0, 0), (4, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 86 cl-lavender-purple-blues-black
+((103, 105, 102), (75, 29, 127), (55, 26, 99), (35, 23, 71),
+ (25, 20, 52), (15, 18, 33), (12, 18, 31), (10, 18, 29),
+ (29, 41, 31), (41, 54, 44), (54, 67, 57), (81, 71, 66),
+ (109, 75, 76), (106, 93, 87), (104, 112, 99), (99, 103, 90),
+ (94, 94, 82), (84, 83, 91), (70, 70, 120), (56, 57, 149),
+ (54, 55, 146), (53, 53, 143), (52, 52, 142), (52, 52, 142),
+ (52, 41, 133), (69, 31, 129), (87, 22, 126), (89, 22, 127),
+ (91, 22, 128), (87, 21, 126), (84, 21, 125), (83, 18, 122),
+ (80, 18, 119), (76, 44, 81), (54, 44, 61), (32, 44, 42),
+ (30, 43, 33), (28, 43, 24), (30, 44, 30), (33, 46, 37),
+ (71, 66, 70), (84, 81, 81), (98, 97, 92), (111, 72, 120),
+ (125, 47, 148), (127, 44, 147), (129, 42, 147), (125, 39, 146),
+ (123, 40, 146), (58, 49, 142), (51, 47, 140), (45, 46, 138),
+ (45, 45, 137), (45, 44, 137), (44, 43, 136), (44, 43, 136),
+ (47, 46, 139), (47, 46, 139), (48, 47, 140), (51, 44, 136),
+ (54, 41, 133), (54, 39, 131), (55, 38, 130), (62, 27, 119),
+ (75, 19, 118), (93, 24, 131), (90, 23, 128), (87, 22, 126),
+ (81, 21, 122), (75, 21, 119), (45, 29, 78), (38, 25, 69),
+ (33, 25, 62), (26, 23, 48), (20, 22, 34), (17, 20, 33),
+ (15, 18, 33), (15, 18, 32), (15, 19, 31), (11, 18, 26),
+ (8, 17, 22), (4, 11, 17), (3, 11, 18), (3, 12, 19),
+ (5, 14, 20), (7, 16, 21), (7, 17, 19), (8, 18, 20),
+ (9, 18, 23), (9, 17, 24), (10, 17, 25), (11, 18, 25),
+ (12, 19, 25), (10, 19, 26), (10, 19, 28), (9, 18, 27),
+ (9, 18, 25), (9, 18, 23), (10, 19, 25), (11, 20, 27),
+ (13, 21, 28), (16, 23, 29), (22, 32, 31), (35, 48, 38),
+ (58, 66, 51), (64, 71, 59), (71, 77, 67), (72, 78, 66),
+ (73, 79, 65), (70, 91, 60), (62, 81, 61), (61, 76, 53),
+ (68, 74, 60), (65, 66, 68), (56, 65, 61), (48, 64, 54),
+ (33, 51, 39), (29, 43, 30), (23, 36, 29), (22, 30, 33),
+ (21, 34, 25), (22, 36, 29), (23, 38, 33), (25, 36, 37),
+ (28, 35, 41), (33, 23, 58), (33, 25, 64), (46, 39, 55),
+ (56, 57, 49), (49, 72, 52), (50, 73, 50), (51, 74, 48),
+ (56, 76, 51), (56, 80, 54), (53, 77, 53), (55, 68, 59),
+ (74, 71, 80), (64, 63, 107), (54, 55, 135), (55, 54, 140),
+ (57, 54, 145), (59, 60, 150), (81, 62, 152), (90, 65, 156),
+ (96, 66, 156), (86, 57, 149), (77, 52, 144), (68, 47, 140),
+ (85, 22, 126), (80, 18, 119), (79, 19, 119), (59, 37, 86),
+ (50, 60, 49), (47, 59, 47), (44, 58, 45), (36, 47, 43),
+ (35, 50, 43), (42, 60, 44), (45, 64, 42), (56, 71, 50),
+ (71, 78, 60), (80, 80, 90), (76, 63, 114), (73, 46, 139),
+ (80, 54, 145), (80, 57, 148), (58, 63, 154), (57, 62, 153),
+ (70, 60, 149), (76, 61, 149), (83, 63, 150), (100, 105, 99),
+ (126, 102, 98), (144, 100, 97), (145, 114, 94), (143, 105, 102),
+ (139, 103, 103), (130, 43, 147), (128, 43, 147), (114, 52, 135),
+ (79, 70, 91), (69, 65, 82), (65, 55, 80), (50, 34, 79),
+ (29, 22, 73), (41, 25, 96), (54, 28, 119), (55, 38, 132),
+ (50, 45, 135), (46, 37, 130), (55, 32, 123), (57, 45, 81),
+ (46, 42, 69), (41, 42, 46), (21, 34, 25), (18, 29, 23),
+ (13, 23, 22), (14, 21, 27), (9, 19, 21), (11, 16, 22),
+ (11, 16, 22), (9, 18, 23), (8, 17, 26), (10, 19, 26),
+ (12, 19, 27), (15, 20, 26), (17, 25, 28), (25, 36, 32),
+ (36, 47, 39), (51, 69, 47), (62, 82, 57), (73, 80, 73),
+ (74, 78, 77), (87, 87, 85), (81, 77, 91), (86, 34, 134),
+ (86, 49, 144), (82, 57, 148), (85, 65, 152), (84, 65, 154),
+ (77, 56, 147), (56, 49, 142), (54, 45, 138), (51, 40, 134),
+ (76, 22, 120), (86, 21, 123), (92, 23, 129), (98, 27, 133),
+ (99, 49, 144), (107, 73, 157), (86, 74, 160), (85, 76, 159),
+ (77, 71, 157), (65, 65, 153), (55, 59, 150), (57, 57, 147),
+ (77, 56, 147), (82, 62, 151), (92, 55, 148), (116, 48, 147),
+ (123, 45, 147), (110, 65, 150), (117, 83, 160), (100, 92, 167),
+ (105, 104, 174), (106, 111, 179), (100, 104, 177), (97, 90, 167),
+ (85, 86, 166), (75, 75, 161), (65, 74, 151), (83, 91, 93),
+ (83, 94, 80), (75, 85, 77), (65, 90, 61), (74, 89, 66)
+ ),
+
+// 87 cl-yellow_mixed-brown-gold
+((193, 128, 100), (245, 177, 128), (248, 183, 128), (251, 189, 128),
+ (253, 209, 137), (255, 230, 146), (255, 232, 144), (255, 235, 142),
+ (252, 255, 170), (251, 255, 185), (251, 255, 200), (253, 255, 225),
+ (255, 255, 250), (255, 255, 252), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 223), (255, 255, 196), (255, 255, 170),
+ (251, 253, 162), (248, 252, 155), (247, 251, 148), (247, 251, 141),
+ (255, 243, 89), (255, 217, 74), (255, 192, 60), (240, 167, 85),
+ (225, 142, 110), (223, 143, 114), (221, 144, 118), (225, 160, 130),
+ (232, 166, 134), (241, 177, 131), (240, 176, 137), (240, 175, 143),
+ (231, 168, 140), (223, 161, 138), (214, 154, 134), (206, 147, 131),
+ (139, 112, 129), (130, 104, 123), (122, 97, 118), (118, 99, 119),
+ (115, 102, 120), (113, 103, 121), (111, 104, 122), (95, 96, 126),
+ (90, 93, 126), (73, 87, 124), (41, 62, 97), (9, 38, 70),
+ (21, 26, 42), (34, 14, 15), (46, 21, 20), (58, 29, 25),
+ (132, 66, 44), (144, 78, 54), (157, 90, 64), (176, 104, 75),
+ (195, 119, 87), (192, 120, 92), (189, 121, 98), (153, 118, 125),
+ (136, 109, 126), (98, 94, 127), (85, 90, 126), (72, 86, 125),
+ (41, 70, 112), (10, 54, 99), (12, 34, 57), (63, 29, 27),
+ (140, 79, 61), (160, 94, 73), (180, 110, 85), (192, 120, 94),
+ (204, 130, 103), (210, 134, 108), (216, 139, 113), (223, 145, 109),
+ (241, 156, 102), (249, 177, 95), (242, 160, 87), (236, 144, 79),
+ (225, 137, 84), (215, 130, 89), (213, 128, 89), (225, 142, 112),
+ (211, 138, 119), (189, 132, 121), (167, 126, 124), (160, 121, 125),
+ (153, 117, 127), (156, 120, 124), (176, 109, 83), (206, 117, 61),
+ (220, 161, 33), (255, 222, 65), (255, 235, 100), (255, 248, 136),
+ (255, 251, 139), (255, 255, 143), (251, 248, 143), (255, 230, 140),
+ (215, 153, 130), (182, 135, 129), (150, 117, 128), (139, 112, 125),
+ (128, 107, 122), (107, 101, 129), (94, 95, 126), (87, 90, 125),
+ (83, 89, 125), (71, 85, 124), (44, 68, 106), (17, 51, 89),
+ (17, 26, 35), (16, 7, 8), (13, 2, 8), (26, 7, 1),
+ (78, 47, 27), (104, 59, 35), (131, 71, 43), (144, 76, 47),
+ (157, 82, 51), (164, 89, 47), (171, 90, 45), (175, 99, 65),
+ (205, 119, 72), (200, 132, 109), (180, 126, 116), (161, 120, 124),
+ (144, 108, 120), (138, 88, 77), (123, 61, 46), (77, 39, 36),
+ (32, 11, 10), (37, 10, 8), (43, 9, 7), (49, 20, 20),
+ (56, 31, 34), (120, 71, 56), (128, 79, 65), (167, 130, 124),
+ (211, 149, 124), (254, 238, 142), (253, 246, 161), (253, 255, 180),
+ (255, 255, 232), (255, 254, 242), (251, 250, 245), (244, 247, 220),
+ (255, 236, 141), (251, 227, 125), (247, 219, 110), (241, 158, 104),
+ (214, 124, 72), (182, 99, 47), (172, 85, 32), (162, 74, 11),
+ (172, 81, 0), (98, 28, 0), (93, 30, 6), (88, 33, 12),
+ (73, 29, 18), (45, 35, 36), (38, 68, 104), (74, 86, 124),
+ (76, 89, 124), (77, 89, 124), (79, 89, 125), (79, 89, 124),
+ (76, 89, 124), (76, 89, 124), (79, 87, 124), (80, 88, 124),
+ (80, 88, 124), (79, 89, 125), (82, 90, 126), (84, 90, 124),
+ (85, 89, 126), (100, 97, 124), (111, 80, 60), (115, 104, 118),
+ (135, 116, 135), (143, 119, 136), (151, 123, 137), (179, 135, 132),
+ (222, 162, 136), (246, 185, 131), (250, 233, 103), (255, 239, 104),
+ (255, 255, 125), (255, 255, 144), (254, 255, 157), (255, 255, 169),
+ (255, 253, 162), (255, 255, 157), (255, 255, 142), (255, 255, 128),
+ (255, 255, 109), (255, 254, 108), (254, 251, 122), (254, 255, 133),
+ (255, 252, 140), (255, 253, 143), (255, 255, 152), (252, 255, 154),
+ (250, 254, 143), (255, 255, 129), (255, 250, 120), (254, 245, 118),
+ (255, 241, 100), (255, 240, 90), (243, 198, 53), (228, 201, 52),
+ (201, 131, 105), (165, 123, 125), (138, 113, 132), (131, 113, 129),
+ (127, 108, 127), (132, 109, 125), (134, 110, 126), (134, 110, 124),
+ (122, 103, 125), (118, 104, 127), (115, 101, 126), (113, 102, 119),
+ (109, 99, 126), (102, 103, 124), (109, 101, 124), (115, 103, 127),
+ (120, 104, 130), (128, 109, 128), (136, 115, 122), (151, 117, 131),
+ (165, 122, 129), (191, 132, 126), (201, 139, 128), (224, 145, 115),
+ (213, 139, 110), (201, 124, 96), (169, 105, 80), (160, 84, 52),
+ (133, 60, 27), (91, 40, 21), (91, 43, 29), (98, 71, 52),
+ (87, 90, 123), (89, 94, 126), (96, 106, 133), (115, 105, 130),
+ (135, 112, 130), (155, 122, 131), (240, 176, 138), (202, 146, 133)
+ ),
+
+// 88 cl-dark_reds-white-grays
+((127, 40, 23), (48, 7, 15), (26, 4, 13), (5, 2, 11),
+ (2, 1, 11), (0, 0, 12), (0, 2, 12), (0, 5, 13),
+ (9, 8, 16), (42, 13, 14), (76, 19, 12), (87, 19, 7),
+ (98, 19, 2), (78, 18, 8), (58, 17, 15), (46, 15, 14),
+ (35, 14, 13), (52, 38, 35), (75, 29, 21), (99, 21, 8),
+ (99, 20, 5), (100, 19, 2), (99, 19, 1), (98, 20, 0),
+ (98, 21, 1), (99, 19, 0), (101, 18, 0), (101, 18, 0),
+ (101, 18, 0), (101, 18, 0), (101, 18, 0), (101, 18, 0),
+ (100, 19, 2), (100, 21, 4), (102, 23, 7), (105, 26, 11),
+ (100, 34, 29), (95, 43, 47), (89, 48, 50), (83, 53, 53),
+ (75, 66, 71), (74, 66, 72), (73, 66, 73), (71, 62, 70),
+ (69, 59, 68), (64, 58, 67), (59, 58, 66), (52, 50, 61),
+ (50, 50, 62), (46, 45, 53), (49, 48, 55), (52, 51, 57),
+ (62, 51, 55), (72, 52, 53), (79, 49, 49), (87, 47, 45),
+ (103, 25, 12), (101, 30, 27), (100, 35, 43), (82, 38, 47),
+ (65, 42, 52), (56, 43, 51), (47, 44, 51), (40, 41, 46),
+ (52, 45, 39), (96, 19, 9), (98, 20, 6), (100, 21, 4),
+ (100, 21, 4), (100, 21, 4), (91, 24, 7), (71, 28, 22),
+ (34, 34, 42), (45, 45, 52), (57, 56, 62), (68, 63, 67),
+ (79, 70, 73), (84, 72, 75), (90, 74, 77), (106, 81, 76),
+ (117, 83, 82), (151, 85, 69), (171, 83, 60), (191, 82, 51),
+ (186, 77, 47), (182, 73, 44), (176, 84, 59), (155, 74, 53),
+ (138, 61, 45), (134, 41, 22), (130, 22, 0), (121, 23, 2),
+ (112, 24, 4), (104, 21, 3), (103, 17, 2), (102, 19, 5),
+ (108, 23, 3), (110, 24, 9), (136, 42, 23), (162, 60, 37),
+ (172, 72, 46), (182, 84, 55), (213, 116, 74), (243, 243, 243),
+ (255, 255, 255), (255, 255, 251), (255, 255, 248), (253, 252, 241),
+ (252, 250, 235), (225, 119, 79), (178, 88, 79), (147, 73, 70),
+ (110, 72, 69), (90, 65, 68), (85, 58, 60), (80, 51, 53),
+ (84, 35, 28), (102, 24, 12), (102, 20, 8), (99, 22, 6),
+ (52, 8, 7), (30, 4, 6), (8, 0, 6), (6, 0, 6),
+ (5, 0, 7), (6, 0, 6), (27, 1, 10), (58, 13, 10),
+ (96, 26, 14), (129, 62, 45), (122, 64, 51), (116, 66, 57),
+ (106, 71, 67), (110, 80, 80), (104, 85, 89), (90, 83, 91),
+ (100, 79, 86), (104, 79, 82), (108, 80, 79), (109, 81, 79),
+ (111, 83, 79), (137, 63, 64), (149, 61, 49), (148, 59, 45),
+ (154, 51, 36), (113, 25, 11), (110, 23, 11), (108, 21, 11),
+ (106, 27, 12), (120, 46, 37), (110, 56, 56), (101, 63, 74),
+ (83, 53, 53), (88, 48, 46), (94, 43, 40), (95, 28, 12),
+ (103, 26, 10), (101, 22, 7), (97, 21, 7), (71, 27, 28),
+ (58, 46, 46), (58, 52, 56), (60, 52, 55), (63, 53, 54),
+ (65, 54, 58), (75, 55, 54), (90, 56, 54), (110, 46, 44),
+ (105, 28, 12), (103, 25, 10), (102, 23, 8), (101, 22, 7),
+ (103, 24, 9), (104, 26, 14), (91, 57, 55), (88, 73, 68),
+ (80, 68, 72), (77, 65, 69), (77, 54, 60), (78, 38, 49),
+ (94, 25, 18), (100, 21, 6), (100, 21, 4), (101, 18, 0),
+ (101, 18, 0), (101, 18, 0), (101, 18, 0), (101, 18, 0),
+ (101, 18, 0), (101, 18, 0), (101, 18, 0), (101, 18, 0),
+ (101, 18, 0), (99, 20, 3), (100, 21, 6), (100, 21, 6),
+ (101, 24, 8), (105, 28, 12), (116, 39, 29), (109, 64, 59),
+ (111, 77, 78), (124, 94, 92), (168, 97, 77), (173, 96, 76),
+ (179, 93, 68), (169, 81, 61), (154, 68, 53), (131, 64, 56),
+ (107, 73, 71), (91, 71, 70), (81, 64, 72), (76, 56, 57),
+ (77, 57, 56), (75, 54, 53), (76, 47, 43), (94, 30, 18),
+ (100, 23, 7), (100, 23, 5), (100, 21, 6), (101, 22, 7),
+ (102, 22, 11), (106, 27, 12), (128, 51, 33), (147, 59, 39),
+ (149, 66, 48), (136, 79, 68), (114, 82, 83), (95, 80, 87),
+ (76, 74, 79), (61, 65, 76), (64, 62, 73), (65, 63, 68),
+ (59, 58, 64), (53, 58, 64), (53, 57, 68), (55, 52, 71),
+ (65, 56, 77), (71, 68, 75), (83, 70, 77), (103, 83, 84),
+ (124, 105, 101), (160, 131, 127), (252, 253, 248), (255, 255, 255),
+ (255, 255, 255), (255, 254, 249), (255, 250, 247), (226, 120, 81),
+ (184, 90, 64), (154, 63, 44), (143, 56, 39), (119, 42, 26),
+ (106, 28, 15), (98, 33, 31), (84, 68, 69), (90, 56, 54)
+ ),
+
+// 89 cl-gold-dark_reds-browns-blues
+((239, 141, 112), (255, 189, 150), (255, 204, 147), (255, 219, 145),
+ (255, 235, 160), (255, 252, 175), (254, 253, 179), (254, 254, 184),
+ (255, 226, 146), (255, 216, 141), (255, 206, 137), (255, 201, 135),
+ (255, 197, 134), (252, 181, 131), (250, 166, 129), (248, 163, 123),
+ (247, 160, 117), (160, 97, 106), (130, 70, 80), (100, 44, 55),
+ (75, 36, 44), (51, 28, 34), (48, 25, 38), (45, 22, 42),
+ (25, 20, 40), (23, 23, 50), (21, 27, 61), (23, 28, 68),
+ (26, 30, 75), (28, 31, 77), (30, 32, 80), (29, 32, 83),
+ (28, 32, 79), (28, 32, 69), (25, 29, 65), (23, 27, 62),
+ (23, 26, 59), (23, 26, 57), (23, 27, 58), (23, 28, 60),
+ (33, 36, 81), (54, 46, 83), (75, 56, 86), (118, 75, 97),
+ (161, 95, 109), (163, 95, 108), (166, 96, 107), (172, 100, 112),
+ (174, 92, 96), (135, 52, 60), (108, 39, 49), (82, 26, 39),
+ (79, 27, 37), (76, 29, 35), (75, 25, 32), (74, 21, 29),
+ (52, 30, 43), (38, 30, 52), (25, 30, 62), (25, 29, 63),
+ (26, 29, 64), (24, 28, 63), (23, 27, 62), (18, 26, 65),
+ (18, 26, 63), (24, 26, 49), (32, 31, 48), (40, 37, 48),
+ (47, 36, 46), (55, 35, 44), (59, 33, 44), (64, 36, 51),
+ (73, 34, 63), (88, 48, 72), (104, 63, 81), (132, 67, 77),
+ (161, 71, 73), (165, 72, 69), (170, 73, 66), (162, 60, 56),
+ (118, 47, 55), (38, 37, 79), (32, 34, 81), (26, 32, 84),
+ (25, 30, 79), (25, 29, 74), (24, 29, 67), (21, 27, 59),
+ (15, 20, 49), (18, 24, 45), (22, 28, 42), (27, 29, 43),
+ (33, 31, 44), (52, 28, 42), (79, 21, 36), (86, 21, 19),
+ (115, 20, 18), (191, 83, 80), (219, 100, 98), (248, 118, 116),
+ (235, 108, 120), (222, 98, 124), (156, 84, 106), (111, 57, 71),
+ (76, 36, 63), (99, 45, 61), (123, 54, 59), (150, 62, 64),
+ (178, 70, 70), (208, 101, 95), (250, 114, 102), (254, 124, 111),
+ (253, 123, 109), (177, 93, 93), (149, 76, 80), (122, 59, 67),
+ (83, 38, 45), (79, 31, 43), (72, 33, 60), (67, 44, 60),
+ (55, 40, 61), (46, 39, 68), (38, 38, 76), (38, 38, 80),
+ (38, 39, 85), (36, 38, 89), (33, 36, 91), (32, 35, 86),
+ (33, 37, 85), (31, 36, 78), (33, 34, 75), (35, 33, 72),
+ (32, 29, 56), (28, 23, 45), (39, 20, 40), (41, 13, 27),
+ (24, 20, 34), (22, 22, 39), (20, 25, 44), (19, 24, 46),
+ (19, 23, 48), (19, 23, 48), (22, 28, 52), (19, 27, 63),
+ (21, 26, 68), (29, 32, 67), (31, 31, 63), (33, 30, 59),
+ (50, 42, 55), (62, 34, 57), (65, 38, 55), (57, 33, 47),
+ (48, 22, 35), (46, 18, 30), (45, 15, 25), (40, 12, 26),
+ (39, 16, 24), (28, 12, 22), (19, 21, 36), (19, 21, 42),
+ (18, 20, 45), (25, 24, 40), (32, 22, 38), (39, 21, 37),
+ (55, 24, 30), (71, 25, 36), (71, 29, 41), (74, 34, 43),
+ (53, 49, 64), (50, 45, 58), (47, 41, 53), (31, 31, 55),
+ (26, 28, 51), (31, 33, 46), (39, 33, 47), (47, 26, 41),
+ (47, 24, 34), (41, 20, 27), (35, 19, 29), (24, 21, 32),
+ (18, 19, 39), (15, 22, 41), (17, 22, 42), (18, 23, 42),
+ (20, 27, 46), (24, 28, 48), (28, 29, 50), (48, 34, 51),
+ (67, 33, 66), (82, 39, 69), (117, 47, 58), (136, 62, 77),
+ (184, 105, 111), (246, 145, 115), (255, 164, 120), (254, 194, 132),
+ (255, 198, 134), (255, 183, 128), (242, 153, 123), (176, 111, 119),
+ (152, 91, 106), (106, 66, 101), (83, 52, 67), (73, 45, 57),
+ (76, 47, 65), (96, 60, 86), (115, 68, 100), (150, 88, 111),
+ (177, 100, 106), (200, 110, 99), (254, 119, 115), (246, 146, 114),
+ (250, 158, 119), (248, 150, 113), (242, 148, 112), (185, 109, 113),
+ (135, 82, 102), (97, 66, 74), (75, 51, 64), (59, 48, 64),
+ (38, 38, 76), (36, 38, 89), (30, 35, 90), (26, 34, 96),
+ (24, 32, 94), (25, 34, 89), (29, 34, 89), (24, 31, 86),
+ (27, 34, 78), (27, 31, 68), (30, 31, 62), (25, 22, 49),
+ (22, 18, 35), (22, 10, 20), (14, 4, 12), (25, 4, 13),
+ (27, 10, 18), (39, 13, 22), (50, 19, 27), (46, 13, 32),
+ (57, 19, 44), (55, 28, 45), (49, 25, 47), (38, 25, 42),
+ (28, 25, 42), (32, 20, 40), (35, 14, 23), (36, 13, 21),
+ (29, 9, 20), (23, 10, 20), (35, 9, 20), (40, 13, 20),
+ (62, 12, 13), (97, 17, 20), (143, 50, 43), (187, 99, 95)
+ ),
+
+// 90 cl-golds-browns
+((128, 84, 13), (140, 92, 16), (148, 99, 18), (157, 107, 20),
+ (169, 121, 29), (182, 136, 38), (190, 144, 34), (199, 153, 31),
+ (194, 144, 31), (185, 128, 26), (177, 112, 22), (179, 109, 19),
+ (182, 107, 16), (182, 109, 18), (183, 112, 20), (180, 113, 20),
+ (177, 114, 21), (194, 146, 38), (189, 132, 31), (184, 118, 24),
+ (178, 114, 23), (172, 110, 23), (172, 109, 19), (172, 109, 16),
+ (171, 109, 8), (164, 104, 12), (157, 99, 17), (150, 97, 14),
+ (144, 96, 12), (145, 98, 12), (146, 100, 12), (158, 112, 16),
+ (165, 121, 14), (167, 111, 18), (156, 100, 18), (146, 89, 18),
+ (132, 82, 17), (118, 76, 16), (110, 72, 15), (103, 68, 14),
+ (90, 59, 15), (100, 63, 12), (110, 68, 10), (114, 73, 13),
+ (119, 78, 16), (120, 79, 17), (121, 80, 18), (124, 79, 20),
+ (126, 80, 18), (136, 82, 22), (132, 86, 27), (129, 90, 33),
+ (123, 84, 31), (117, 79, 30), (110, 74, 27), (103, 70, 25),
+ (84, 55, 13), (82, 53, 8), (80, 52, 4), (79, 50, 6),
+ (78, 49, 9), (81, 50, 10), (84, 52, 11), (88, 57, 13),
+ (95, 59, 11), (113, 73, 14), (115, 74, 13), (117, 76, 12),
+ (117, 75, 13), (117, 75, 15), (117, 77, 16), (110, 73, 20),
+ (117, 73, 28), (123, 78, 26), (129, 83, 24), (140, 90, 21),
+ (151, 98, 18), (160, 100, 18), (169, 103, 19), (175, 110, 20),
+ (178, 108, 22), (184, 114, 18), (190, 129, 23), (197, 144, 28),
+ (198, 148, 31), (200, 153, 35), (199, 153, 41), (180, 179, 161),
+ (135, 98, 45), (127, 87, 34), (120, 77, 24), (115, 73, 22),
+ (110, 70, 21), (100, 66, 18), (98, 64, 18), (107, 70, 17),
+ (117, 77, 16), (140, 91, 14), (146, 98, 17), (152, 106, 20),
+ (155, 109, 19), (159, 113, 19), (155, 105, 18), (152, 99, 19),
+ (139, 95, 30), (132, 88, 24), (126, 82, 19), (121, 76, 17),
+ (116, 71, 16), (97, 56, 12), (91, 54, 12), (89, 54, 16),
+ (91, 58, 15), (108, 66, 16), (106, 66, 15), (104, 67, 14),
+ (103, 68, 14), (94, 64, 14), (89, 58, 14), (81, 53, 13),
+ (71, 47, 11), (70, 46, 13), (70, 45, 15), (72, 48, 14),
+ (74, 52, 13), (81, 57, 21), (84, 56, 19), (79, 53, 16),
+ (71, 49, 12), (69, 47, 10), (70, 47, 8), (72, 47, 6),
+ (80, 51, 7), (86, 55, 8), (106, 65, 9), (123, 74, 15),
+ (142, 89, 23), (140, 89, 27), (139, 90, 31), (134, 91, 38),
+ (130, 92, 45), (112, 83, 43), (113, 81, 34), (102, 72, 22),
+ (103, 70, 19), (110, 66, 19), (111, 69, 18), (113, 72, 18),
+ (118, 76, 16), (123, 77, 17), (126, 81, 16), (129, 84, 17),
+ (135, 93, 21), (137, 91, 20), (140, 90, 19), (136, 88, 16),
+ (128, 80, 16), (122, 76, 14), (114, 72, 14), (106, 69, 16),
+ (100, 66, 18), (95, 60, 20), (97, 60, 21), (100, 61, 22),
+ (109, 62, 20), (103, 66, 13), (94, 60, 12), (85, 53, 15),
+ (77, 47, 9), (76, 46, 7), (75, 46, 6), (73, 44, 10),
+ (71, 42, 8), (67, 43, 9), (68, 44, 8), (68, 44, 6),
+ (71, 43, 6), (69, 42, 0), (62, 39, 5), (65, 40, 9),
+ (61, 42, 25), (67, 44, 12), (67, 44, 10), (65, 42, 8),
+ (68, 44, 10), (70, 45, 10), (72, 46, 11), (80, 51, 9),
+ (92, 55, 11), (102, 65, 12), (114, 74, 13), (122, 81, 15),
+ (131, 83, 17), (134, 83, 18), (133, 86, 16), (132, 85, 15),
+ (133, 79, 15), (129, 79, 16), (126, 81, 16), (126, 81, 16),
+ (123, 77, 17), (126, 76, 15), (124, 75, 16), (119, 74, 15),
+ (118, 71, 15), (118, 69, 10), (116, 74, 14), (114, 74, 15),
+ (114, 74, 13), (113, 75, 12), (110, 69, 3), (103, 66, 11),
+ (94, 58, 8), (87, 54, 11), (81, 52, 10), (76, 48, 8),
+ (69, 45, 9), (68, 44, 8), (72, 44, 7), (73, 43, 5),
+ (73, 45, 6), (77, 45, 6), (76, 47, 7), (81, 52, 8),
+ (87, 52, 10), (86, 55, 11), (92, 62, 12), (106, 69, 14),
+ (117, 75, 15), (127, 82, 15), (141, 92, 15), (160, 91, 0),
+ (163, 102, 9), (172, 108, 18), (163, 111, 27), (146, 100, 40),
+ (139, 93, 44), (106, 82, 48), (100, 75, 34), (103, 76, 31),
+ (120, 84, 26), (124, 82, 22), (129, 84, 17), (134, 87, 17),
+ (135, 87, 15), (135, 87, 15), (133, 88, 7), (132, 86, 8),
+ (126, 76, 13), (125, 71, 7), (121, 67, 0), (127, 73, 9),
+ (144, 92, 16), (166, 104, 19), (203, 159, 38), (180, 131, 28)
+ ),
+
+// 91 cl-purples-browns-blues-tans
+((61, 49, 73), (49, 40, 83), (54, 44, 81), (59, 48, 80),
+ (54, 43, 72), (49, 39, 64), (49, 36, 62), (50, 34, 61),
+ (45, 30, 51), (55, 40, 62), (65, 50, 73), (73, 51, 83),
+ (81, 53, 94), (78, 58, 96), (75, 64, 98), (81, 64, 94),
+ (87, 64, 90), (67, 51, 77), (75, 48, 73), (84, 46, 69),
+ (93, 58, 67), (103, 70, 65), (107, 73, 67), (111, 76, 70),
+ (124, 82, 86), (122, 88, 94), (121, 94, 103), (130, 95, 101),
+ (139, 97, 99), (147, 101, 103), (155, 105, 108), (172, 112, 111),
+ (187, 112, 107), (203, 130, 124), (205, 128, 109), (207, 127, 94),
+ (213, 134, 106), (220, 142, 119), (209, 137, 124), (198, 133, 129),
+ (154, 86, 101), (121, 72, 97), (88, 58, 94), (66, 42, 67),
+ (45, 27, 41), (33, 20, 33), (22, 14, 25), (8, 6, 11),
+ (1, 0, 0), (0, 0, 0), (8, 6, 11), (16, 13, 22),
+ (38, 28, 46), (60, 44, 71), (67, 51, 86), (75, 58, 102),
+ (109, 81, 132), (107, 76, 121), (106, 71, 111), (101, 69, 108),
+ (97, 67, 105), (98, 70, 104), (99, 74, 103), (109, 84, 90),
+ (118, 84, 85), (139, 93, 96), (145, 94, 95), (152, 96, 95),
+ (153, 96, 94), (155, 97, 93), (161, 91, 83), (161, 102, 88),
+ (159, 103, 104), (153, 108, 126), (147, 113, 148), (145, 102, 145),
+ (144, 91, 143), (150, 91, 126), (156, 92, 109), (152, 100, 102),
+ (157, 103, 101), (147, 98, 94), (137, 90, 86), (127, 82, 79),
+ (121, 78, 74), (115, 74, 70), (112, 61, 40), (85, 49, 49),
+ (64, 44, 79), (73, 50, 91), (82, 56, 104), (85, 61, 103),
+ (89, 67, 103), (117, 88, 106), (137, 99, 110), (138, 89, 145),
+ (152, 108, 159), (158, 108, 171), (169, 115, 179), (181, 122, 188),
+ (188, 128, 196), (195, 134, 204), (197, 138, 202), (196, 136, 198),
+ (186, 141, 161), (154, 104, 126), (122, 68, 92), (112, 61, 81),
+ (102, 54, 70), (67, 41, 68), (49, 33, 60), (36, 21, 42),
+ (33, 24, 41), (50, 31, 53), (62, 37, 60), (75, 43, 67),
+ (90, 68, 70), (107, 56, 75), (109, 59, 88), (121, 79, 80),
+ (151, 86, 66), (167, 93, 58), (183, 100, 50), (175, 99, 60),
+ (168, 99, 70), (172, 110, 99), (182, 117, 141), (191, 134, 166),
+ (211, 152, 172), (200, 132, 153), (204, 137, 149), (208, 142, 146),
+ (219, 158, 166), (232, 165, 174), (244, 199, 204), (246, 198, 212),
+ (255, 255, 255), (249, 254, 222), (243, 253, 190), (246, 240, 173),
+ (250, 227, 157), (222, 220, 231), (248, 190, 228), (209, 144, 210),
+ (178, 118, 178), (148, 105, 114), (142, 100, 109), (136, 96, 104),
+ (132, 95, 102), (137, 99, 110), (151, 100, 105), (155, 105, 108),
+ (195, 135, 137), (200, 138, 140), (206, 142, 143), (204, 150, 150),
+ (207, 142, 138), (199, 139, 139), (178, 129, 135), (158, 110, 108),
+ (134, 102, 107), (136, 89, 97), (137, 89, 91), (139, 90, 85),
+ (138, 88, 77), (137, 89, 75), (133, 89, 78), (124, 82, 84),
+ (121, 80, 78), (118, 80, 79), (116, 80, 80), (112, 77, 73),
+ (110, 79, 76), (105, 78, 85), (94, 73, 104), (97, 70, 105),
+ (103, 67, 93), (107, 82, 88), (109, 76, 67), (107, 74, 65),
+ (97, 71, 72), (91, 69, 72), (96, 73, 83), (93, 70, 98),
+ (126, 96, 106), (144, 105, 113), (162, 115, 121), (191, 138, 156),
+ (219, 143, 153), (242, 167, 161), (242, 214, 131), (241, 189, 103),
+ (209, 145, 136), (187, 113, 112), (149, 94, 91), (111, 75, 75),
+ (77, 55, 57), (59, 46, 40), (54, 35, 39), (36, 23, 40),
+ (26, 19, 27), (17, 15, 18), (11, 8, 17), (13, 10, 19),
+ (22, 11, 25), (50, 24, 35), (57, 31, 42), (65, 39, 64),
+ (74, 46, 69), (67, 41, 68), (63, 40, 69), (67, 48, 67),
+ (73, 52, 69), (78, 53, 74), (79, 53, 78), (93, 67, 70),
+ (92, 66, 65), (106, 55, 72), (93, 65, 80), (83, 60, 86),
+ (73, 52, 71), (55, 38, 56), (46, 33, 42), (48, 27, 44),
+ (53, 27, 40), (49, 26, 44), (42, 24, 38), (39, 24, 45),
+ (40, 32, 47), (38, 24, 41), (37, 22, 43), (33, 18, 39),
+ (24, 14, 25), (23, 14, 15), (23, 13, 22), (21, 18, 27),
+ (31, 20, 34), (47, 31, 58), (53, 37, 64), (63, 45, 83),
+ (72, 56, 105), (75, 58, 110), (85, 60, 118), (87, 65, 114),
+ (78, 59, 105), (72, 49, 93), (75, 47, 87), (64, 48, 74),
+ (56, 38, 54), (36, 22, 37), (26, 18, 33), (3, 16, 33),
+ (19, 16, 27), (26, 18, 33), (46, 28, 50), (63, 39, 71)
+ ),
+
+// 92 cl-oranges-browns-whites
+((255, 147, 57), (255, 123, 61), (254, 126, 61), (254, 129, 62),
+ (254, 135, 61), (255, 142, 61), (255, 155, 59), (255, 169, 58),
+ (253, 185, 60), (254, 183, 57), (255, 182, 55), (255, 172, 53),
+ (255, 163, 52), (254, 161, 55), (253, 159, 59), (253, 160, 58),
+ (253, 162, 57), (255, 182, 54), (255, 205, 59), (255, 229, 64),
+ (255, 241, 89), (255, 254, 115), (255, 246, 108), (255, 238, 101),
+ (254, 185, 58), (254, 163, 56), (255, 141, 55), (255, 129, 57),
+ (255, 118, 59), (255, 115, 59), (255, 112, 59), (255, 106, 63),
+ (255, 109, 62), (254, 120, 67), (254, 122, 64), (255, 125, 61),
+ (254, 122, 58), (253, 120, 55), (254, 124, 56), (255, 128, 57),
+ (254, 131, 61), (254, 142, 60), (255, 154, 59), (255, 142, 57),
+ (255, 131, 55), (255, 129, 55), (255, 127, 55), (253, 127, 53),
+ (250, 152, 43), (255, 190, 54), (255, 214, 75), (255, 239, 97),
+ (255, 245, 103), (255, 251, 109), (253, 251, 88), (252, 252, 68),
+ (255, 208, 61), (255, 192, 57), (255, 177, 53), (253, 154, 51),
+ (251, 132, 50), (250, 123, 53), (250, 115, 57), (244, 103, 57),
+ (229, 93, 55), (202, 81, 60), (184, 76, 61), (166, 72, 62),
+ (170, 74, 59), (175, 76, 57), (196, 79, 59), (213, 86, 54),
+ (241, 103, 56), (245, 105, 58), (249, 107, 61), (242, 101, 60),
+ (236, 96, 60), (228, 94, 59), (220, 93, 58), (207, 86, 55),
+ (193, 74, 50), (177, 75, 52), (188, 77, 55), (199, 80, 58),
+ (209, 86, 57), (219, 92, 57), (235, 103, 54), (252, 119, 52),
+ (248, 202, 65), (249, 228, 131), (251, 254, 197), (253, 253, 208),
+ (255, 253, 219), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 246), (255, 255, 232), (255, 255, 218),
+ (255, 255, 215), (255, 255, 212), (255, 255, 209), (255, 251, 164),
+ (254, 190, 66), (254, 159, 61), (255, 128, 57), (253, 123, 53),
+ (252, 119, 50), (255, 114, 42), (254, 115, 50), (254, 108, 57),
+ (254, 106, 58), (254, 108, 61), (251, 110, 63), (248, 113, 65),
+ (250, 116, 65), (251, 115, 67), (244, 105, 66), (234, 94, 58),
+ (212, 87, 57), (192, 79, 56), (173, 71, 56), (163, 70, 57),
+ (153, 69, 59), (149, 64, 61), (159, 71, 59), (168, 72, 48),
+ (189, 81, 55), (212, 82, 56), (216, 83, 56), (220, 85, 56),
+ (222, 92, 56), (234, 94, 59), (242, 96, 57), (239, 102, 58),
+ (211, 86, 54), (196, 75, 49), (182, 65, 45), (175, 61, 42),
+ (169, 58, 39), (154, 57, 48), (143, 58, 51), (137, 60, 52),
+ (137, 65, 51), (166, 75, 57), (175, 82, 58), (185, 90, 60),
+ (187, 178, 61), (241, 255, 144), (255, 255, 167), (255, 255, 152),
+ (253, 196, 67), (254, 183, 62), (255, 171, 58), (254, 137, 58),
+ (248, 114, 61), (238, 100, 64), (219, 92, 60), (203, 82, 51),
+ (191, 71, 46), (174, 53, 26), (172, 52, 28), (170, 51, 31),
+ (168, 56, 36), (168, 59, 38), (154, 57, 40), (154, 57, 38),
+ (132, 44, 32), (129, 49, 36), (126, 54, 40), (136, 65, 43),
+ (144, 62, 48), (158, 67, 48), (167, 66, 48), (180, 81, 50),
+ (209, 86, 55), (227, 93, 55), (245, 104, 58), (253, 105, 59),
+ (255, 109, 58), (255, 115, 56), (252, 116, 54), (253, 117, 55),
+ (255, 117, 58), (255, 115, 58), (255, 114, 58), (254, 108, 57),
+ (255, 104, 57), (246, 104, 58), (240, 103, 51), (253, 102, 49),
+ (247, 111, 51), (247, 112, 44), (248, 123, 39), (255, 156, 47),
+ (253, 174, 56), (255, 188, 58), (254, 207, 59), (254, 232, 61),
+ (255, 254, 61), (255, 236, 65), (255, 227, 64), (255, 212, 64),
+ (255, 191, 61), (255, 182, 54), (240, 171, 34), (221, 168, 36),
+ (238, 124, 28), (255, 118, 40), (247, 108, 53), (242, 104, 55),
+ (230, 94, 56), (218, 87, 59), (194, 80, 56), (166, 70, 45),
+ (137, 63, 50), (127, 63, 61), (117, 67, 60), (106, 52, 66),
+ (117, 64, 56), (120, 64, 51), (121, 71, 46), (120, 63, 52),
+ (112, 60, 49), (106, 60, 47), (97, 44, 36), (112, 58, 48),
+ (117, 62, 42), (129, 62, 53), (155, 62, 45), (174, 57, 39),
+ (192, 61, 33), (204, 70, 41), (214, 74, 39), (220, 83, 47),
+ (214, 83, 55), (207, 71, 47), (207, 72, 43), (184, 67, 47),
+ (178, 60, 46), (156, 69, 52), (143, 69, 60), (132, 69, 64),
+ (127, 74, 70), (139, 82, 115), (191, 103, 89), (210, 86, 58),
+ (216, 89, 54), (228, 92, 54), (242, 87, 41), (247, 95, 46),
+ (253, 92, 48), (237, 86, 59), (223, 89, 60), (195, 78, 58)
+ ),
+
+// 93 cl-blues-greens-whites
+((255, 255, 255), (190, 208, 248), (163, 186, 237), (136, 164, 227),
+ (132, 159, 220), (128, 154, 213), (126, 151, 213), (124, 149, 213),
+ (112, 145, 212), (109, 136, 196), (106, 127, 180), (97, 113, 156),
+ (89, 100, 132), (94, 98, 108), (100, 96, 85), (99, 102, 82),
+ (99, 108, 79), (89, 89, 53), (85, 86, 29), (82, 83, 5),
+ (76, 79, 8), (70, 76, 12), (60, 72, 8), (50, 69, 5),
+ (44, 59, 0), (41, 59, 5), (38, 60, 11), (51, 67, 35),
+ (64, 75, 59), (68, 73, 68), (72, 71, 77), (70, 68, 71),
+ (69, 72, 53), (64, 71, 37), (59, 66, 49), (55, 61, 61),
+ (38, 48, 67), (21, 35, 74), (28, 41, 79), (35, 47, 85),
+ (72, 77, 106), (65, 70, 87), (58, 63, 69), (52, 63, 45),
+ (47, 64, 22), (45, 63, 13), (43, 63, 4), (41, 62, 5),
+ (43, 61, 13), (73, 82, 55), (82, 86, 63), (91, 90, 72),
+ (93, 93, 79), (96, 96, 86), (98, 99, 78), (101, 102, 71),
+ (85, 83, 62), (76, 74, 70), (68, 66, 79), (75, 75, 67),
+ (82, 85, 56), (81, 86, 51), (81, 88, 46), (78, 77, 31),
+ (80, 88, 51), (91, 91, 99), (89, 95, 121), (87, 100, 144),
+ (91, 106, 151), (96, 113, 159), (121, 137, 188), (160, 169, 208),
+ (232, 239, 249), (243, 247, 252), (255, 255, 255), (232, 243, 255),
+ (210, 231, 255), (200, 212, 242), (190, 194, 229), (161, 175, 212),
+ (159, 164, 196), (143, 157, 196), (149, 163, 200), (155, 169, 204),
+ (151, 162, 199), (147, 156, 195), (139, 153, 192), (117, 135, 175),
+ (91, 91, 103), (81, 85, 65), (71, 80, 27), (69, 79, 21),
+ (67, 79, 15), (55, 73, 21), (70, 81, 39), (85, 95, 61),
+ (109, 109, 85), (101, 111, 147), (100, 116, 164), (100, 122, 182),
+ (98, 120, 178), (97, 118, 175), (89, 110, 167), (87, 106, 149),
+ (58, 72, 111), (43, 59, 98), (28, 46, 86), (28, 44, 84),
+ (29, 43, 82), (27, 45, 85), (36, 53, 99), (47, 64, 110),
+ (48, 64, 115), (27, 45, 85), (27, 45, 85), (27, 45, 85),
+ (41, 58, 104), (55, 71, 122), (66, 88, 148), (85, 107, 167),
+ (124, 149, 213), (134, 159, 221), (144, 170, 229), (149, 175, 234),
+ (154, 180, 239), (160, 186, 245), (155, 184, 242), (140, 174, 235),
+ (141, 170, 228), (163, 173, 198), (169, 177, 203), (176, 182, 208),
+ (174, 179, 211), (157, 170, 212), (139, 151, 189), (106, 122, 173),
+ (105, 105, 95), (96, 96, 101), (87, 88, 108), (82, 87, 120),
+ (78, 86, 132), (75, 91, 142), (70, 97, 166), (76, 103, 174),
+ (80, 110, 182), (92, 125, 202), (95, 129, 203), (99, 133, 204),
+ (104, 129, 196), (104, 129, 196), (106, 130, 192), (107, 132, 189),
+ (99, 118, 158), (95, 114, 155), (91, 110, 153), (87, 95, 108),
+ (104, 103, 98), (119, 118, 90), (116, 124, 83), (126, 128, 106),
+ (123, 118, 114), (80, 93, 135), (77, 91, 138), (74, 90, 141),
+ (64, 81, 127), (51, 67, 118), (41, 57, 108), (35, 52, 98),
+ (53, 52, 66), (54, 53, 64), (56, 55, 63), (65, 63, 76),
+ (79, 78, 83), (90, 85, 81), (82, 77, 83), (77, 75, 97),
+ (74, 83, 122), (77, 94, 138), (80, 96, 147), (78, 98, 159),
+ (64, 89, 153), (65, 86, 143), (63, 79, 130), (58, 67, 110),
+ (25, 37, 59), (28, 40, 61), (31, 44, 63), (50, 59, 76),
+ (75, 83, 106), (87, 101, 136), (102, 116, 155), (116, 130, 169),
+ (118, 135, 179), (132, 149, 193), (150, 168, 208), (151, 168, 212),
+ (145, 167, 216), (132, 153, 206), (126, 147, 200), (116, 132, 183),
+ (117, 134, 180), (115, 132, 178), (107, 128, 185), (100, 120, 181),
+ (96, 116, 177), (80, 106, 180), (81, 105, 175), (80, 105, 172),
+ (76, 103, 174), (80, 104, 174), (80, 106, 180), (83, 116, 187),
+ (103, 125, 185), (112, 134, 194), (117, 142, 198), (128, 147, 190),
+ (132, 150, 190), (129, 151, 200), (131, 151, 204), (124, 146, 206),
+ (109, 137, 210), (112, 138, 199), (108, 134, 193), (107, 129, 189),
+ (101, 123, 183), (95, 116, 173), (85, 106, 169), (77, 102, 166),
+ (75, 102, 171), (65, 92, 161), (63, 88, 152), (67, 89, 149),
+ (60, 81, 138), (54, 71, 115), (50, 67, 113), (57, 74, 120),
+ (73, 91, 131), (71, 93, 153), (81, 103, 163), (108, 124, 175),
+ (119, 135, 186), (140, 157, 203), (160, 172, 210), (181, 186, 215),
+ (188, 199, 229), (189, 205, 241), (183, 200, 244), (169, 192, 236),
+ (173, 190, 234), (172, 186, 223), (184, 195, 225), (189, 196, 214),
+ (188, 199, 229), (206, 212, 234), (220, 227, 243), (227, 231, 243)
+ ),
+
+// 94 cl-tans-yellows-browns
+((168, 139, 109), (159, 147, 135), (162, 151, 141), (166, 156, 147),
+ (170, 164, 158), (174, 173, 169), (178, 177, 176), (182, 182, 184),
+ (199, 198, 196), (211, 208, 207), (223, 219, 218), (235, 234, 228),
+ (247, 249, 238), (238, 236, 229), (229, 224, 221), (221, 216, 213),
+ (214, 209, 206), (196, 185, 183), (196, 187, 180), (197, 189, 178),
+ (202, 193, 185), (207, 198, 193), (216, 203, 190), (225, 208, 188),
+ (229, 210, 180), (238, 210, 165), (247, 211, 151), (247, 211, 139),
+ (247, 212, 128), (236, 205, 130), (226, 198, 133), (230, 191, 136),
+ (224, 198, 141), (205, 191, 165), (221, 205, 180), (238, 220, 196),
+ (243, 230, 201), (249, 240, 207), (245, 238, 206), (242, 237, 205),
+ (229, 215, 202), (215, 202, 187), (202, 189, 173), (193, 184, 166),
+ (184, 179, 160), (181, 176, 165), (179, 174, 170), (178, 173, 169),
+ (177, 173, 170), (179, 164, 157), (181, 165, 151), (183, 166, 146),
+ (180, 164, 149), (177, 163, 152), (175, 163, 153), (173, 164, 155),
+ (184, 179, 176), (192, 187, 183), (200, 195, 191), (216, 206, 194),
+ (233, 218, 197), (237, 222, 197), (241, 226, 197), (251, 235, 183),
+ (253, 236, 182), (250, 250, 138), (251, 251, 135), (253, 253, 133),
+ (253, 253, 132), (253, 253, 131), (252, 252, 130), (252, 252, 120),
+ (252, 230, 129), (242, 211, 128), (233, 192, 128), (222, 178, 124),
+ (212, 165, 121), (224, 170, 120), (237, 176, 119), (247, 195, 112),
+ (247, 213, 123), (227, 217, 164), (213, 200, 163), (199, 184, 163),
+ (198, 180, 163), (198, 176, 163), (183, 169, 158), (168, 161, 155),
+ (160, 150, 149), (161, 155, 152), (163, 160, 155), (165, 161, 156),
+ (168, 163, 157), (173, 171, 172), (187, 183, 182), (199, 198, 196),
+ (213, 209, 206), (244, 226, 204), (246, 221, 177), (248, 217, 150),
+ (249, 213, 148), (250, 209, 147), (241, 179, 128), (202, 160, 118),
+ (184, 163, 136), (180, 156, 134), (176, 150, 133), (175, 150, 129),
+ (174, 150, 126), (170, 153, 135), (163, 151, 139), (151, 146, 140),
+ (149, 140, 131), (125, 112, 103), (120, 111, 86), (116, 111, 69),
+ (111, 97, 84), (109, 102, 96), (122, 114, 103), (150, 144, 128),
+ (193, 178, 159), (224, 198, 157), (255, 218, 155), (253, 216, 146),
+ (251, 215, 137), (251, 225, 141), (255, 247, 130), (253, 253, 139),
+ (253, 251, 148), (244, 223, 180), (238, 220, 180), (232, 218, 181),
+ (227, 210, 184), (226, 204, 180), (203, 197, 183), (196, 184, 172),
+ (194, 167, 156), (189, 170, 164), (185, 174, 172), (185, 176, 174),
+ (186, 178, 176), (181, 177, 178), (186, 182, 179), (190, 180, 171),
+ (187, 177, 168), (181, 171, 161), (180, 168, 159), (179, 166, 158),
+ (176, 161, 154), (179, 159, 148), (177, 161, 145), (177, 156, 137),
+ (169, 151, 131), (171, 159, 129), (173, 168, 128), (173, 164, 107),
+ (175, 153, 103), (182, 144, 107), (185, 149, 113), (183, 154, 124),
+ (182, 164, 140), (192, 183, 176), (194, 187, 181), (197, 192, 186),
+ (206, 192, 189), (208, 195, 187), (223, 204, 174), (217, 192, 135),
+ (177, 148, 106), (151, 128, 101), (125, 109, 96), (118, 104, 93),
+ (123, 111, 99), (125, 122, 113), (146, 137, 132), (172, 147, 125),
+ (198, 151, 107), (208, 163, 124), (235, 189, 114), (249, 203, 105),
+ (251, 217, 110), (249, 231, 107), (252, 241, 113), (250, 215, 115),
+ (255, 230, 156), (253, 230, 166), (252, 231, 176), (250, 229, 174),
+ (247, 219, 156), (251, 222, 142), (253, 242, 126), (248, 247, 129),
+ (255, 228, 147), (239, 233, 171), (229, 222, 176), (213, 194, 177),
+ (204, 186, 172), (189, 181, 168), (181, 166, 163), (173, 162, 160),
+ (174, 164, 155), (174, 161, 153), (174, 162, 150), (168, 156, 142),
+ (159, 145, 142), (158, 145, 139), (151, 147, 144), (161, 147, 147),
+ (168, 158, 156), (181, 172, 167), (187, 178, 171), (193, 184, 169),
+ (198, 185, 168), (206, 190, 174), (202, 195, 176), (201, 191, 181),
+ (198, 188, 179), (199, 187, 173), (197, 184, 176), (196, 185, 181),
+ (193, 182, 178), (188, 183, 179), (189, 184, 180), (193, 184, 179),
+ (192, 187, 183), (193, 190, 183), (196, 192, 189), (198, 193, 190),
+ (197, 196, 192), (199, 199, 199), (200, 199, 197), (204, 199, 195),
+ (209, 200, 193), (226, 209, 189), (229, 215, 178), (233, 214, 184),
+ (230, 208, 195), (217, 208, 203), (210, 205, 201), (204, 200, 199),
+ (211, 210, 205), (220, 217, 208), (225, 224, 222), (225, 224, 222),
+ (225, 220, 217), (217, 217, 207), (208, 203, 199), (201, 192, 187),
+ (187, 183, 180), (182, 172, 170), (171, 167, 164), (169, 159, 157),
+ (170, 159, 155), (169, 154, 149), (166, 152, 139), (165, 148, 130)
+ ),
+
+// 95 cl-golds-browns2
+((166, 81, 24), (131, 73, 25), (126, 72, 30), (121, 71, 36),
+ (122, 73, 41), (123, 76, 46), (122, 81, 47), (122, 87, 49),
+ (155, 86, 44), (155, 87, 40), (156, 89, 37), (148, 82, 29),
+ (140, 75, 21), (136, 72, 14), (133, 69, 7), (130, 66, 8),
+ (128, 63, 9), (125, 64, 19), (129, 70, 26), (134, 77, 34),
+ (153, 84, 36), (173, 92, 39), (183, 93, 37), (194, 95, 36),
+ (208, 109, 42), (222, 114, 45), (236, 119, 49), (233, 122, 60),
+ (230, 126, 71), (226, 124, 70), (223, 122, 70), (214, 130, 93),
+ (201, 127, 92), (177, 121, 96), (155, 108, 91), (133, 96, 87),
+ (137, 95, 78), (142, 95, 69), (137, 93, 64), (133, 92, 60),
+ (156, 86, 35), (156, 82, 34), (156, 79, 33), (158, 78, 28),
+ (161, 78, 24), (160, 79, 24), (159, 80, 24), (149, 77, 27),
+ (147, 77, 17), (162, 78, 18), (176, 88, 19), (191, 98, 20),
+ (211, 105, 31), (231, 113, 43), (233, 117, 47), (235, 122, 52),
+ (255, 137, 57), (255, 148, 73), (255, 159, 90), (255, 206, 120),
+ (255, 254, 151), (255, 254, 168), (255, 255, 185), (255, 254, 207),
+ (254, 255, 195), (255, 248, 143), (255, 204, 108), (255, 161, 73),
+ (255, 160, 73), (255, 159, 74), (253, 154, 71), (255, 145, 70),
+ (226, 115, 43), (195, 103, 40), (165, 92, 37), (147, 83, 35),
+ (130, 75, 34), (126, 72, 33), (122, 70, 33), (108, 67, 35),
+ (103, 68, 46), (107, 72, 53), (109, 72, 51), (111, 73, 50),
+ (114, 72, 43), (117, 71, 37), (118, 72, 38), (122, 77, 48),
+ (116, 82, 70), (120, 82, 67), (124, 83, 65), (127, 81, 56),
+ (130, 80, 47), (144, 83, 39), (159, 87, 37), (164, 87, 31),
+ (172, 87, 32), (190, 88, 22), (209, 95, 29), (228, 103, 36),
+ (233, 108, 38), (238, 114, 40), (254, 127, 46), (251, 132, 52),
+ (253, 129, 57), (251, 123, 63), (250, 118, 69), (249, 121, 60),
+ (248, 124, 52), (255, 116, 47), (254, 113, 44), (255, 115, 43),
+ (254, 120, 49), (255, 138, 54), (255, 136, 55), (255, 135, 57),
+ (253, 134, 66), (254, 130, 68), (253, 137, 80), (255, 137, 87),
+ (241, 134, 78), (235, 124, 73), (229, 114, 69), (221, 116, 68),
+ (214, 118, 68), (194, 113, 60), (161, 107, 60), (153, 101, 64),
+ (149, 102, 60), (153, 90, 47), (147, 86, 45), (142, 83, 43),
+ (127, 77, 42), (116, 70, 34), (111, 65, 32), (103, 64, 33),
+ (109, 63, 27), (109, 62, 23), (110, 61, 20), (109, 60, 19),
+ (108, 59, 18), (99, 54, 12), (85, 49, 15), (99, 60, 29),
+ (103, 64, 23), (111, 82, 42), (119, 86, 47), (128, 90, 53),
+ (147, 96, 49), (178, 102, 53), (192, 121, 75), (209, 128, 83),
+ (182, 104, 56), (179, 102, 53), (176, 100, 51), (172, 98, 49),
+ (178, 107, 55), (195, 124, 78), (211, 133, 97), (215, 139, 107),
+ (254, 160, 99), (254, 187, 98), (254, 178, 92), (255, 169, 86),
+ (255, 163, 79), (248, 158, 62), (248, 136, 64), (231, 128, 59),
+ (200, 106, 44), (192, 103, 43), (185, 100, 43), (165, 93, 53),
+ (161, 90, 46), (157, 90, 47), (156, 90, 42), (160, 94, 44),
+ (164, 97, 42), (177, 97, 44), (179, 97, 49), (184, 97, 52),
+ (173, 96, 52), (168, 96, 46), (162, 90, 40), (153, 92, 37),
+ (147, 87, 50), (151, 92, 52), (156, 97, 55), (169, 100, 67),
+ (186, 106, 81), (199, 114, 93), (195, 129, 95), (198, 130, 93),
+ (203, 129, 92), (222, 121, 65), (219, 117, 53), (213, 110, 44),
+ (204, 108, 48), (200, 111, 51), (202, 109, 48), (182, 99, 33),
+ (173, 89, 25), (167, 88, 21), (164, 84, 23), (156, 79, 25),
+ (148, 78, 27), (145, 78, 23), (145, 78, 26), (141, 77, 29),
+ (135, 79, 32), (139, 81, 35), (133, 78, 39), (125, 73, 36),
+ (114, 68, 32), (107, 67, 31), (104, 63, 31), (104, 63, 31),
+ (106, 66, 31), (115, 65, 28), (115, 66, 25), (112, 62, 25),
+ (114, 64, 27), (118, 72, 20), (123, 73, 22), (126, 72, 28),
+ (124, 73, 30), (128, 75, 35), (131, 77, 41), (133, 79, 43),
+ (129, 82, 38), (127, 80, 36), (122, 70, 33), (114, 64, 29),
+ (118, 69, 28), (125, 74, 21), (127, 74, 20), (137, 71, 19),
+ (144, 79, 23), (159, 88, 36), (189, 103, 52), (217, 128, 60),
+ (254, 154, 92), (255, 178, 112), (254, 218, 132), (255, 210, 125),
+ (255, 192, 95), (255, 154, 88), (234, 135, 70), (208, 115, 54),
+ (189, 108, 43), (178, 97, 34), (159, 92, 37), (146, 90, 41),
+ (132, 93, 54), (126, 94, 56), (127, 86, 64), (133, 87, 61)
+ ),
+
+// 96 cl-pastels
+((236, 206, 176), (231, 206, 174), (229, 206, 173), (227, 206, 172),
+ (224, 205, 171), (222, 205, 170), (221, 205, 169), (220, 205, 169),
+ (215, 205, 167), (212, 205, 166), (210, 205, 165), (207, 204, 164),
+ (205, 204, 163), (203, 204, 162), (201, 204, 161), (199, 204, 160),
+ (198, 204, 160), (193, 203, 158), (195, 202, 160), (197, 201, 163),
+ (199, 200, 165), (201, 200, 168), (202, 199, 169), (203, 199, 170),
+ (207, 198, 175), (209, 197, 177), (211, 196, 180), (213, 195, 182),
+ (215, 195, 184), (216, 194, 185), (217, 194, 187), (219, 193, 189),
+ (221, 192, 192), (225, 191, 196), (227, 190, 199), (230, 189, 202),
+ (226, 191, 205), (223, 193, 208), (221, 194, 209), (220, 195, 211),
+ (212, 199, 216), (209, 201, 219), (206, 203, 222), (202, 205, 225),
+ (198, 207, 228), (196, 208, 229), (195, 209, 231), (192, 211, 234),
+ (188, 213, 237), (181, 217, 243), (177, 219, 245), (174, 221, 248),
+ (170, 223, 251), (166, 226, 255), (168, 225, 253), (170, 225, 251),
+ (177, 223, 242), (181, 222, 237), (185, 221, 233), (189, 219, 229),
+ (193, 218, 225), (195, 217, 222), (197, 217, 220), (200, 216, 216),
+ (204, 215, 212), (212, 213, 203), (216, 212, 199), (220, 211, 195),
+ (221, 210, 192), (223, 210, 190), (227, 208, 186), (231, 207, 182),
+ (236, 206, 176), (236, 205, 177), (236, 204, 179), (235, 203, 180),
+ (235, 202, 182), (235, 201, 182), (235, 201, 183), (234, 200, 185),
+ (234, 199, 186), (233, 197, 189), (233, 196, 190), (233, 195, 192),
+ (232, 195, 192), (232, 195, 193), (232, 194, 194), (232, 193, 196),
+ (231, 191, 199), (230, 190, 200), (230, 189, 202), (229, 189, 201),
+ (228, 190, 200), (226, 190, 197), (224, 191, 195), (222, 192, 192),
+ (220, 193, 190), (216, 194, 185), (214, 195, 182), (212, 196, 180),
+ (211, 196, 179), (210, 197, 178), (208, 197, 176), (206, 198, 173),
+ (202, 200, 168), (200, 200, 166), (198, 201, 164), (197, 201, 162),
+ (196, 202, 161), (193, 203, 158), (195, 203, 160), (197, 202, 163),
+ (199, 201, 165), (203, 199, 170), (204, 199, 171), (205, 199, 172),
+ (207, 198, 175), (209, 197, 177), (211, 196, 180), (213, 196, 182),
+ (217, 194, 187), (219, 193, 189), (221, 193, 192), (222, 192, 193),
+ (223, 192, 194), (225, 191, 196), (227, 190, 199), (230, 189, 202),
+ (226, 191, 205), (220, 195, 211), (218, 196, 212), (216, 197, 214),
+ (212, 199, 216), (209, 201, 219), (206, 203, 222), (202, 205, 225),
+ (195, 209, 231), (191, 211, 234), (188, 213, 237), (186, 214, 238),
+ (184, 215, 240), (181, 217, 243), (178, 219, 245), (174, 221, 248),
+ (170, 223, 251), (166, 226, 255), (166, 225, 252), (167, 225, 250),
+ (169, 223, 244), (170, 222, 239), (172, 221, 234), (173, 220, 228),
+ (176, 217, 218), (177, 216, 215), (178, 216, 213), (179, 215, 207),
+ (181, 213, 202), (182, 212, 197), (184, 211, 191), (185, 210, 186),
+ (187, 208, 181), (190, 206, 170), (190, 205, 167), (191, 205, 165),
+ (193, 203, 158), (195, 203, 159), (198, 203, 160), (200, 203, 161),
+ (205, 203, 163), (206, 203, 163), (207, 204, 164), (209, 204, 165),
+ (212, 204, 166), (214, 204, 167), (217, 204, 168), (219, 204, 169),
+ (221, 205, 170), (224, 205, 171), (226, 205, 172), (228, 205, 173),
+ (231, 205, 174), (233, 205, 175), (236, 206, 176), (232, 207, 180),
+ (225, 209, 189), (223, 209, 191), (221, 210, 193), (217, 211, 198),
+ (213, 213, 202), (209, 214, 206), (205, 215, 211), (202, 216, 215),
+ (198, 217, 219), (194, 218, 224), (190, 219, 228), (186, 220, 232),
+ (182, 221, 236), (179, 222, 241), (175, 224, 245), (171, 225, 249),
+ (167, 226, 254), (166, 226, 255), (167, 225, 250), (169, 223, 244),
+ (170, 222, 239), (172, 221, 234), (173, 220, 228), (175, 218, 223),
+ (176, 217, 218), (178, 216, 213), (179, 215, 207), (181, 213, 202),
+ (182, 212, 197), (184, 211, 191), (185, 210, 186), (187, 208, 181),
+ (188, 207, 175), (190, 206, 170), (191, 205, 165), (193, 203, 158),
+ (195, 202, 160), (197, 202, 163), (199, 201, 165), (201, 200, 168),
+ (203, 199, 170), (205, 198, 172), (207, 198, 175), (209, 197, 177),
+ (211, 196, 180), (213, 195, 182), (215, 195, 184), (217, 194, 187),
+ (219, 193, 189), (221, 192, 192), (223, 192, 194), (225, 191, 196),
+ (227, 190, 199), (230, 189, 202), (230, 190, 201), (230, 191, 199),
+ (231, 192, 198), (231, 192, 196), (231, 193, 195), (232, 194, 193),
+ (232, 195, 192), (232, 196, 191), (233, 197, 189), (233, 198, 188),
+ (233, 199, 186), (234, 200, 185), (234, 201, 184), (234, 202, 182),
+ (235, 203, 181), (235, 204, 179), (235, 205, 178), (236, 206, 176)
+ ),
+
+
+// 97 multi_color_1 from ron1.ugr (classylady & ron)
+((255, 0, 0), (173, 0, 55), (118, 0, 91), (64, 0, 128),
+ (50, 55, 155), (36, 110, 183), (29, 137, 196), (23, 164, 210),
+ (0, 255, 255), (0, 255, 200), (0, 255, 145), (0, 255, 72),
+ (0, 255, 0), (55, 255, 27), (110, 255, 55), (137, 255, 68),
+ (164, 255, 82), (255, 255, 128), (255, 227, 155), (255, 200, 183),
+ (255, 173, 210), (255, 146, 237), (255, 137, 246), (255, 128, 255),
+ (145, 128, 228), (72, 128, 210), (0, 128, 192), (27, 100, 151),
+ (55, 73, 110), (68, 59, 89), (82, 46, 68), (110, 18, 27),
+ (128, 0, 0), (183, 55, 55), (210, 82, 82), (237, 110, 110),
+ (218, 132, 119), (200, 155, 128), (172, 169, 128), (145, 183, 128),
+ (0, 255, 128), (55, 227, 114), (110, 200, 100), (164, 173, 86),
+ (219, 146, 73), (237, 137, 68), (255, 128, 64), (200, 155, 50),
+ (145, 183, 36), (36, 237, 9), (18, 225, 18), (0, 214, 28),
+ (0, 173, 55), (0, 132, 82), (0, 98, 105), (0, 64, 128),
+ (55, 92, 183), (82, 105, 210), (110, 119, 237), (119, 109, 225),
+ (128, 100, 214), (128, 86, 193), (128, 73, 173), (128, 46, 132),
+ (128, 18, 91), (155, 0, 78), (182, 0, 91), (210, 0, 105),
+ (232, 0, 116), (255, 0, 128), (255, 28, 100), (255, 55, 73),
+ (255, 110, 18), (227, 119, 9), (200, 128, 0), (145, 128, 0),
+ (91, 128, 0), (63, 128, 0), (36, 128, 0), (0, 128, 0),
+ (0, 128, 14), (0, 128, 41), (0, 114, 73), (0, 100, 105),
+ (0, 86, 125), (0, 73, 146), (0, 46, 187), (0, 18, 228),
+ (0, 0, 235), (0, 0, 214), (0, 0, 194), (0, 0, 183),
+ (0, 0, 173), (0, 0, 160), (28, 0, 153), (55, 0, 146),
+ (82, 0, 139), (128, 0, 155), (128, 0, 182), (128, 0, 210),
+ (128, 0, 223), (128, 0, 237), (128, 0, 255), (128, 28, 200),
+ (128, 82, 91), (128, 105, 45), (128, 128, 0), (128, 128, 7),
+ (128, 128, 14), (128, 128, 28), (128, 128, 41), (128, 128, 64),
+ (155, 128, 105), (210, 128, 187), (223, 128, 207), (237, 128, 228),
+ (255, 128, 255), (228, 155, 200), (200, 183, 145), (173, 210, 91),
+ (128, 255, 0), (155, 255, 0), (183, 255, 0), (196, 255, 0),
+ (210, 255, 0), (255, 255, 0), (200, 228, 28), (145, 200, 55),
+ (91, 173, 82), (0, 128, 128), (27, 114, 114), (55, 100, 100),
+ (110, 73, 73), (164, 46, 46), (255, 0, 0), (255, 28, 14),
+ (255, 82, 41), (255, 105, 52), (255, 128, 64), (227, 141, 64),
+ (200, 155, 64), (145, 183, 64), (91, 210, 64), (36, 237, 64),
+ (0, 255, 64), (55, 200, 146), (68, 186, 166), (82, 173, 187),
+ (128, 128, 255), (155, 100, 228), (183, 73, 200), (210, 46, 173),
+ (255, 0, 128), (255, 14, 135), (255, 28, 142), (255, 55, 156),
+ (255, 82, 169), (255, 110, 183), (255, 128, 192), (200, 128, 178),
+ (145, 128, 164), (0, 128, 128), (14, 141, 141), (28, 155, 155),
+ (55, 183, 183), (82, 210, 210), (110, 237, 237), (128, 255, 255),
+ (128, 200, 200), (128, 186, 186), (128, 173, 173), (128, 146, 146),
+ (128, 128, 128), (100, 155, 100), (73, 183, 73), (46, 210, 46),
+ (0, 255, 0), (47, 245, 11), (95, 234, 21), (142, 224, 32),
+ (189, 214, 43), (220, 207, 50), (214, 175, 85), (209, 142, 120),
+ (198, 77, 191), (196, 66, 202), (194, 56, 214), (206, 91, 198),
+ (218, 125, 183), (230, 160, 167), (250, 217, 141), (238, 200, 113),
+ (227, 183, 84), (215, 167, 56), (204, 150, 28), (196, 139, 9),
+ (186, 159, 35), (176, 179, 61), (166, 199, 87), (156, 219, 113),
+ (150, 232, 130), (129, 214, 108), (107, 195, 86), (86, 177, 64),
+ (51, 147, 28), (87, 138, 72), (123, 129, 116), (159, 119, 159),
+ (195, 110, 203), (219, 104, 232), (210, 88, 224), (202, 72, 217),
+ (193, 56, 209), (185, 40, 201), (179, 30, 196), (171, 75, 206),
+ (163, 119, 216), (155, 164, 226), (141, 238, 243), (130, 233, 221),
+ (120, 229, 199), (109, 224, 177), (98, 220, 155), (91, 217, 141),
+ (120, 194, 122), (150, 171, 104), (179, 149, 85), (209, 126, 66),
+ (228, 111, 54), (223, 126, 59), (219, 141, 63), (214, 156, 68),
+ (207, 181, 75), (194, 184, 77), (180, 188, 80), (167, 191, 82),
+ (154, 195, 84), (145, 197, 86), (133, 196, 102), (121, 196, 118),
+ (108, 195, 134), (96, 195, 150), (88, 194, 160), (90, 184, 165),
+ (92, 174, 171), (94, 164, 176), (98, 148, 185), (100, 131, 192),
+ (102, 113, 198), (104, 96, 205), (107, 78, 212), (108, 67, 216),
+ (120, 72, 211), (132, 76, 206), (143, 81, 201), (163, 89, 193)
+ ),
+
+// 98 oranges
+((255, 0, 0), (253, 10, 2), (251, 15, 3), (250, 20, 4),
+ (249, 25, 5), (248, 30, 6), (247, 32, 6), (247, 35, 7),
+ (244, 45, 8), (243, 50, 9), (242, 55, 10), (241, 60, 11),
+ (240, 65, 12), (238, 70, 13), (237, 75, 14), (236, 77, 14),
+ (236, 80, 14), (234, 90, 16), (232, 95, 17), (231, 100, 18),
+ (230, 105, 19), (229, 110, 20), (228, 112, 20), (228, 115, 21),
+ (225, 125, 22), (224, 130, 23), (223, 135, 24), (222, 140, 25),
+ (221, 145, 26), (220, 147, 26), (219, 150, 27), (218, 155, 28),
+ (217, 160, 28), (216, 157, 30), (216, 155, 31), (216, 154, 32),
+ (215, 152, 32), (215, 151, 33), (215, 150, 33), (215, 150, 34),
+ (214, 146, 36), (213, 145, 37), (213, 144, 38), (213, 142, 38),
+ (213, 140, 39), (212, 139, 39), (212, 139, 40), (212, 138, 41),
+ (212, 136, 42), (211, 133, 44), (210, 131, 44), (210, 130, 45),
+ (210, 128, 46), (210, 127, 47), (209, 126, 47), (209, 126, 48),
+ (209, 122, 49), (208, 121, 50), (208, 120, 51), (207, 118, 52),
+ (207, 116, 53), (207, 115, 53), (207, 115, 54), (206, 114, 55),
+ (206, 112, 55), (209, 113, 52), (210, 113, 50), (212, 114, 48),
+ (213, 114, 47), (214, 114, 46), (215, 115, 45), (217, 115, 43),
+ (220, 116, 40), (221, 116, 38), (223, 117, 36), (224, 117, 34),
+ (226, 118, 33), (226, 118, 32), (227, 119, 31), (229, 119, 29),
+ (230, 120, 28), (234, 121, 24), (235, 121, 22), (237, 122, 21),
+ (237, 122, 20), (238, 122, 19), (240, 123, 17), (241, 123, 15),
+ (244, 124, 12), (245, 124, 10), (247, 125, 9), (248, 125, 8),
+ (249, 126, 7), (250, 126, 5), (252, 127, 3), (253, 127, 2),
+ (255, 128, 0), (250, 126, 0), (247, 124, 0), (245, 123, 0),
+ (244, 122, 0), (243, 122, 0), (240, 120, 0), (238, 119, 0),
+ (233, 117, 0), (230, 115, 0), (228, 114, 0), (226, 113, 0),
+ (225, 113, 0), (223, 112, 0), (220, 110, 0), (218, 109, 0),
+ (216, 108, 0), (211, 106, 0), (209, 105, 0), (208, 104, 0),
+ (206, 103, 0), (203, 102, 0), (201, 100, 0), (198, 99, 0),
+ (193, 97, 0), (190, 95, 0), (188, 94, 0), (187, 93, 0),
+ (186, 93, 0), (183, 92, 0), (181, 90, 0), (178, 89, 0),
+ (176, 88, 0), (181, 95, 8), (182, 96, 10), (183, 98, 12),
+ (186, 101, 16), (188, 104, 21), (191, 108, 25), (193, 111, 29),
+ (198, 118, 37), (200, 121, 41), (203, 124, 45), (204, 125, 47),
+ (206, 127, 50), (208, 131, 54), (211, 134, 58), (213, 137, 62),
+ (216, 140, 66), (220, 147, 74), (221, 148, 76), (223, 150, 78),
+ (225, 154, 82), (228, 157, 87), (230, 160, 91), (233, 163, 95),
+ (238, 170, 103), (239, 171, 105), (240, 173, 107), (243, 177, 111),
+ (245, 180, 116), (248, 183, 120), (250, 186, 124), (253, 190, 128),
+ (255, 193, 132), (255, 186, 128), (255, 184, 127), (255, 182, 127),
+ (255, 178, 125), (255, 174, 123), (255, 171, 121), (255, 167, 119),
+ (255, 160, 116), (255, 158, 115), (255, 156, 114), (255, 152, 112),
+ (255, 148, 110), (255, 145, 108), (255, 141, 107), (255, 137, 105),
+ (255, 134, 103), (255, 130, 101), (255, 126, 99), (255, 122, 98),
+ (255, 119, 96), (255, 115, 94), (255, 111, 92), (255, 107, 90),
+ (255, 100, 87), (255, 98, 86), (255, 96, 85), (255, 93, 83),
+ (255, 89, 81), (255, 85, 79), (255, 81, 78), (255, 78, 76),
+ (255, 74, 74), (254, 77, 75), (252, 79, 76), (251, 82, 76),
+ (250, 84, 77), (248, 87, 78), (247, 90, 79), (245, 92, 79),
+ (244, 95, 80), (243, 97, 81), (241, 100, 81), (240, 103, 82),
+ (238, 105, 83), (237, 108, 84), (236, 110, 84), (234, 113, 85),
+ (233, 116, 86), (232, 118, 86), (230, 121, 87), (229, 123, 88),
+ (228, 126, 89), (226, 128, 89), (225, 131, 90), (223, 134, 91),
+ (222, 136, 91), (221, 139, 92), (219, 141, 93), (218, 144, 94),
+ (216, 147, 94), (215, 149, 95), (214, 152, 96), (212, 154, 96),
+ (211, 157, 97), (211, 158, 99), (212, 159, 100), (212, 160, 102),
+ (213, 161, 104), (213, 162, 105), (214, 163, 107), (214, 164, 108),
+ (214, 165, 110), (215, 166, 112), (215, 167, 113), (216, 168, 115),
+ (216, 169, 116), (217, 170, 118), (217, 171, 120), (218, 172, 121),
+ (218, 173, 123), (218, 174, 125), (219, 175, 126), (219, 176, 128),
+ (220, 177, 130), (220, 178, 131), (221, 179, 133), (221, 180, 134),
+ (221, 181, 136), (222, 182, 138), (222, 183, 139), (223, 184, 141),
+ (223, 185, 142), (224, 186, 144), (224, 187, 146), (225, 189, 149)
+ ),
+
+// 99 multi_color_2
+((255, 0, 0), (211, 22, 22), (189, 33, 33), (167, 44, 44),
+ (145, 55, 55), (124, 66, 66), (113, 71, 71), (102, 77, 77),
+ (58, 99, 99), (29, 113, 113), (0, 128, 128), (0, 139, 139),
+ (0, 150, 150), (0, 161, 161), (0, 172, 172), (0, 177, 177),
+ (0, 183, 183), (0, 204, 204), (0, 215, 215), (0, 226, 226),
+ (0, 237, 237), (0, 248, 248), (0, 251, 251), (0, 255, 255),
+ (44, 240, 255), (66, 232, 255), (88, 224, 255), (109, 216, 255),
+ (131, 209, 255), (142, 205, 255), (153, 201, 255), (175, 194, 255),
+ (197, 186, 255), (255, 166, 255), (233, 162, 255), (211, 159, 255),
+ (189, 156, 255), (167, 153, 255), (156, 151, 255), (145, 150, 255),
+ (102, 143, 255), (80, 140, 255), (58, 137, 255), (36, 133, 255),
+ (14, 130, 255), (7, 129, 255), (0, 128, 255), (11, 128, 255),
+ (22, 128, 255), (44, 128, 255), (55, 128, 255), (66, 128, 255),
+ (77, 128, 255), (88, 128, 255), (93, 128, 255), (99, 128, 255),
+ (121, 128, 255), (119, 133, 244), (117, 139, 233), (106, 150, 211),
+ (95, 161, 189), (89, 166, 178), (84, 172, 167), (73, 183, 145),
+ (62, 193, 124), (40, 215, 80), (29, 226, 58), (18, 237, 36),
+ (9, 246, 18), (0, 255, 0), (22, 233, 0), (44, 211, 0),
+ (88, 167, 0), (109, 145, 0), (131, 124, 0), (153, 102, 0),
+ (175, 80, 0), (186, 69, 0), (197, 58, 0), (219, 36, 0),
+ (241, 14, 0), (233, 11, 0), (211, 22, 0), (189, 33, 0),
+ (178, 38, 0), (167, 44, 0), (145, 55, 0), (124, 66, 0),
+ (80, 88, 0), (58, 99, 0), (36, 110, 0), (25, 115, 0),
+ (14, 121, 0), (0, 128, 0), (10, 117, 0), (20, 106, 0),
+ (30, 95, 0), (50, 73, 0), (60, 62, 0), (70, 51, 0),
+ (75, 45, 0), (80, 40, 0), (90, 29, 0), (101, 18, 0),
+ (129, 0, 0), (140, 0, 0), (152, 0, 0), (158, 0, 0),
+ (164, 0, 0), (175, 0, 0), (187, 0, 0), (199, 0, 0),
+ (210, 0, 0), (234, 0, 0), (240, 0, 0), (246, 0, 0),
+ (253, 0, 0), (242, 22, 11), (232, 44, 22), (221, 66, 33),
+ (199, 110, 55), (188, 131, 66), (178, 153, 77), (172, 164, 82),
+ (167, 175, 88), (156, 197, 99), (146, 219, 110), (135, 241, 121),
+ (128, 255, 128), (128, 233, 150), (128, 227, 155), (128, 222, 161),
+ (128, 211, 172), (128, 200, 183), (128, 190, 193), (128, 179, 204),
+ (128, 157, 226), (128, 142, 240), (128, 128, 255), (122, 128, 244),
+ (117, 128, 233), (106, 128, 211), (95, 128, 189), (84, 128, 167),
+ (73, 128, 145), (51, 128, 102), (45, 128, 91), (40, 128, 80),
+ (29, 128, 58), (18, 128, 36), (7, 128, 14), (0, 128, 0),
+ (44, 132, 26), (55, 132, 32), (66, 133, 38), (88, 135, 51),
+ (110, 137, 64), (131, 139, 77), (153, 141, 90), (175, 142, 102),
+ (197, 144, 115), (255, 149, 149), (255, 147, 147), (255, 146, 146),
+ (255, 144, 144), (255, 141, 141), (255, 139, 139), (255, 136, 136),
+ (255, 131, 131), (255, 129, 129), (255, 128, 128), (255, 126, 126),
+ (255, 123, 123), (255, 121, 121), (255, 119, 119), (255, 119, 131),
+ (255, 118, 142), (255, 118, 154), (255, 117, 166), (255, 117, 177),
+ (255, 116, 189), (255, 116, 201), (255, 115, 212), (255, 115, 224),
+ (255, 114, 248), (255, 113, 251), (255, 113, 255), (255, 107, 237),
+ (255, 101, 219), (255, 95, 201), (255, 90, 183), (255, 84, 165),
+ (255, 78, 147), (255, 72, 129), (255, 66, 111), (255, 60, 93),
+ (255, 55, 75), (255, 45, 45), (250, 41, 58), (246, 37, 72),
+ (241, 33, 85), (237, 30, 99), (232, 26, 112), (228, 22, 126),
+ (223, 18, 139), (219, 14, 153), (214, 10, 166), (209, 6, 180),
+ (205, 2, 193), (202, 0, 202), (204, 0, 185), (206, 0, 167),
+ (207, 0, 150), (209, 0, 133), (211, 0, 115), (213, 0, 98),
+ (215, 0, 80), (216, 0, 63), (218, 0, 46), (220, 0, 28),
+ (222, 0, 11), (223, 0, 0), (217, 12, 6), (212, 24, 12),
+ (206, 36, 19), (200, 47, 25), (195, 59, 31), (189, 71, 37),
+ (183, 83, 43), (178, 95, 50), (172, 107, 56), (166, 119, 62),
+ (157, 138, 72), (157, 126, 66), (158, 114, 60), (158, 102, 53),
+ (159, 91, 47), (160, 79, 41), (160, 67, 35), (161, 55, 29),
+ (161, 43, 22), (162, 31, 16), (163, 19, 10), (163, 8, 4),
+ (164, 0, 0), (160, 0, 0), (156, 0, 0), (152, 0, 0),
+ (148, 0, 0), (144, 0, 0), (140, 0, 0), (136, 0, 0),
+ (132, 0, 0), (128, 0, 0), (124, 0, 0), (117, 0, 0)
+ ),
+
+// 100 rw-yellow-orange
+((255, 128, 0), (255, 134, 0), (255, 137, 0), (255, 140, 0),
+ (255, 143, 0), (255, 146, 0), (255, 147, 0), (255, 149, 0),
+ (255, 155, 0), (255, 158, 0), (255, 161, 0), (255, 164, 0),
+ (255, 167, 0), (255, 170, 0), (255, 173, 0), (255, 174, 0),
+ (255, 176, 0), (255, 182, 0), (255, 185, 0), (255, 188, 0),
+ (255, 190, 0), (255, 193, 0), (255, 194, 0), (255, 196, 0),
+ (255, 202, 0), (255, 205, 0), (255, 208, 0), (255, 211, 0),
+ (255, 214, 0), (255, 215, 0), (255, 217, 0), (255, 220, 0),
+ (255, 223, 0), (255, 229, 0), (255, 232, 0), (255, 235, 0),
+ (255, 238, 0), (255, 241, 0), (255, 242, 0), (255, 244, 0),
+ (255, 250, 0), (255, 251, 1), (255, 252, 2), (255, 249, 3),
+ (255, 246, 4), (255, 244, 5), (255, 243, 6), (255, 240, 8),
+ (255, 237, 9), (255, 231, 12), (255, 228, 13), (255, 225, 15),
+ (255, 222, 16), (255, 219, 18), (255, 217, 19), (255, 216, 20),
+ (255, 210, 22), (255, 207, 24), (255, 204, 26), (255, 201, 27),
+ (255, 198, 28), (255, 196, 29), (255, 195, 30), (255, 192, 32),
+ (255, 190, 33), (255, 184, 36), (255, 181, 37), (255, 178, 39),
+ (255, 176, 39), (255, 175, 40), (255, 172, 42), (255, 169, 44),
+ (255, 163, 46), (255, 160, 48), (255, 157, 50), (255, 154, 51),
+ (255, 151, 52), (255, 149, 53), (255, 148, 54), (255, 145, 56),
+ (255, 142, 57), (255, 136, 60), (255, 133, 61), (255, 130, 63),
+ (255, 129, 63), (255, 128, 64), (255, 131, 66), (255, 134, 67),
+ (255, 140, 70), (255, 143, 71), (255, 146, 73), (255, 147, 73),
+ (255, 149, 74), (255, 152, 76), (255, 155, 78), (255, 158, 79),
+ (255, 161, 80), (255, 167, 84), (255, 170, 85), (255, 173, 86),
+ (255, 174, 87), (255, 176, 88), (255, 179, 90), (255, 182, 91),
+ (255, 188, 94), (255, 190, 95), (255, 193, 97), (255, 194, 97),
+ (255, 196, 98), (255, 199, 100), (255, 202, 102), (255, 205, 103),
+ (255, 208, 104), (255, 214, 108), (255, 215, 108), (255, 217, 109),
+ (255, 220, 110), (255, 223, 112), (255, 226, 114), (255, 229, 115),
+ (255, 235, 118), (255, 238, 119), (255, 241, 121), (255, 242, 121),
+ (255, 244, 122), (255, 247, 124), (255, 250, 126), (255, 253, 127),
+ (255, 255, 128), (255, 251, 126), (255, 250, 125), (255, 249, 125),
+ (255, 247, 124), (255, 245, 123), (255, 243, 122), (255, 241, 121),
+ (255, 237, 119), (255, 235, 117), (255, 233, 116), (255, 232, 115),
+ (255, 231, 115), (255, 229, 114), (255, 227, 113), (255, 225, 112),
+ (255, 223, 111), (255, 219, 109), (255, 218, 108), (255, 217, 108),
+ (255, 215, 107), (255, 213, 106), (255, 211, 105), (255, 209, 104),
+ (255, 205, 102), (255, 204, 101), (255, 203, 101), (255, 201, 100),
+ (255, 199, 98), (255, 197, 97), (255, 195, 96), (255, 193, 95),
+ (255, 190, 94), (255, 186, 92), (255, 185, 91), (255, 184, 91),
+ (255, 182, 90), (255, 180, 89), (255, 178, 88), (255, 176, 87),
+ (255, 172, 85), (255, 170, 84), (255, 169, 83), (254, 170, 81),
+ (253, 171, 79), (252, 171, 77), (250, 172, 75), (249, 173, 73),
+ (248, 174, 71), (247, 175, 69), (246, 176, 67), (245, 177, 65),
+ (244, 177, 64), (242, 178, 62), (241, 179, 60), (240, 180, 58),
+ (238, 182, 54), (237, 182, 53), (237, 183, 52), (235, 184, 50),
+ (234, 184, 48), (233, 185, 46), (232, 186, 44), (231, 187, 42),
+ (230, 188, 40), (229, 189, 38), (227, 190, 36), (226, 190, 34),
+ (225, 191, 32), (224, 192, 30), (223, 193, 29), (222, 194, 27),
+ (221, 195, 25), (219, 196, 23), (218, 197, 21), (217, 197, 19),
+ (216, 198, 17), (215, 199, 15), (214, 200, 13), (213, 201, 11),
+ (211, 202, 9), (210, 203, 7), (209, 203, 5), (208, 204, 3),
+ (207, 205, 1), (206, 206, 0), (206, 203, 0), (206, 199, 0),
+ (206, 196, 0), (206, 193, 0), (205, 189, 0), (205, 186, 0),
+ (205, 183, 0), (205, 179, 0), (205, 176, 0), (205, 173, 0),
+ (204, 169, 0), (204, 166, 0), (204, 163, 0), (204, 159, 0),
+ (204, 156, 0), (203, 153, 0), (203, 149, 0), (203, 146, 0),
+ (203, 143, 0), (203, 139, 0), (202, 136, 0), (202, 133, 0),
+ (202, 129, 0), (202, 126, 0), (202, 123, 0), (202, 119, 0),
+ (201, 116, 0), (201, 113, 0), (201, 109, 0), (201, 106, 0),
+ (201, 103, 0), (200, 100, 0), (200, 96, 0), (200, 93, 0),
+ (200, 90, 0), (200, 86, 0), (199, 83, 0), (199, 80, 0),
+ (199, 76, 0), (199, 73, 0), (199, 70, 0), (198, 64, 0)
+ ),
+
+// 101 rw-multi-color-2
+((128, 64, 64), (153, 52, 52), (165, 45, 45), (178, 39, 39),
+ (190, 32, 32), (202, 26, 26), (208, 23, 23), (215, 20, 20),
+ (240, 8, 8), (247, 10, 4), (255, 12, 0), (255, 25, 0),
+ (255, 38, 0), (255, 50, 0), (255, 62, 0), (255, 68, 0),
+ (255, 75, 0), (255, 100, 0), (255, 114, 0), (255, 128, 0),
+ (242, 122, 0), (230, 116, 0), (224, 112, 0), (218, 109, 0),
+ (193, 97, 0), (180, 90, 0), (168, 84, 0), (155, 78, 0),
+ (143, 72, 0), (135, 68, 0), (128, 64, 0), (116, 70, 0),
+ (103, 76, 0), (78, 89, 0), (65, 95, 0), (53, 102, 0),
+ (40, 108, 0), (28, 114, 0), (22, 117, 0), (16, 120, 0),
+ (0, 128, 12), (0, 128, 25), (0, 128, 38), (0, 128, 50),
+ (0, 128, 62), (0, 128, 68), (0, 128, 75), (0, 128, 88),
+ (0, 128, 100), (0, 128, 125), (0, 134, 132), (0, 140, 140),
+ (0, 152, 152), (0, 165, 165), (0, 171, 171), (0, 178, 178),
+ (0, 202, 202), (0, 214, 214), (0, 227, 227), (0, 241, 241),
+ (0, 255, 255), (6, 255, 249), (12, 255, 243), (25, 255, 230),
+ (38, 255, 218), (62, 255, 193), (75, 255, 180), (88, 255, 168),
+ (94, 255, 162), (100, 255, 156), (112, 255, 143), (128, 255, 128),
+ (103, 255, 153), (90, 255, 165), (78, 255, 178), (65, 255, 190),
+ (53, 255, 202), (46, 255, 208), (40, 255, 215), (28, 255, 227),
+ (16, 255, 240), (0, 243, 255), (0, 230, 255), (0, 218, 255),
+ (0, 211, 255), (0, 205, 255), (0, 193, 255), (0, 181, 255),
+ (0, 156, 255), (0, 143, 255), (0, 131, 255), (0, 129, 255),
+ (0, 128, 255), (12, 128, 255), (25, 128, 255), (38, 128, 255),
+ (50, 128, 255), (75, 128, 255), (87, 128, 255), (100, 128, 255),
+ (106, 128, 255), (112, 128, 255), (128, 128, 255), (128, 116, 236),
+ (128, 90, 199), (128, 78, 180), (128, 66, 162), (128, 59, 152),
+ (128, 53, 143), (128, 40, 124), (128, 28, 106), (128, 16, 87),
+ (128, 0, 64), (153, 25, 89), (159, 31, 95), (165, 38, 102),
+ (178, 50, 114), (190, 62, 126), (202, 75, 139), (215, 88, 152),
+ (240, 112, 176), (247, 114, 181), (255, 116, 186), (255, 109, 183),
+ (255, 103, 180), (255, 90, 173), (255, 78, 167), (255, 66, 161),
+ (255, 53, 154), (255, 28, 142), (255, 22, 139), (255, 16, 136),
+ (255, 3, 130), (255, 0, 128), (243, 0, 140), (230, 0, 153),
+ (205, 0, 178), (193, 0, 190), (181, 0, 202), (174, 0, 208),
+ (168, 0, 215), (156, 0, 227), (143, 0, 240), (128, 0, 255),
+ (116, 12, 236), (90, 38, 199), (84, 44, 189), (78, 50, 180),
+ (66, 62, 162), (53, 75, 143), (40, 88, 124), (28, 100, 106),
+ (0, 128, 64), (12, 128, 64), (25, 128, 64), (50, 128, 64),
+ (75, 128, 64), (100, 128, 64), (125, 128, 64), (149, 128, 64),
+ (174, 128, 64), (224, 128, 64), (239, 128, 64), (255, 128, 64),
+ (243, 116, 58), (230, 103, 52), (218, 90, 45), (205, 78, 39),
+ (181, 53, 26), (174, 46, 23), (168, 40, 20), (156, 28, 14),
+ (143, 16, 8), (131, 3, 2), (128, 0, 0), (140, 25, 25),
+ (153, 50, 50), (165, 75, 75), (178, 100, 100), (190, 125, 125),
+ (202, 149, 149), (215, 174, 174), (227, 199, 199), (240, 224, 224),
+ (250, 250, 250), (247, 247, 247), (245, 245, 245), (241, 241, 241),
+ (236, 236, 236), (231, 231, 231), (226, 226, 226), (222, 222, 222),
+ (217, 217, 217), (212, 212, 212), (206, 206, 206), (186, 186, 211),
+ (166, 166, 216), (146, 146, 220), (126, 126, 225), (105, 105, 230),
+ (85, 85, 235), (65, 65, 239), (45, 45, 244), (25, 25, 249),
+ (0, 0, 255), (12, 6, 230), (25, 12, 205), (38, 19, 180),
+ (50, 25, 155), (62, 31, 130), (75, 38, 106), (88, 44, 81),
+ (100, 50, 56), (112, 56, 31), (125, 62, 6), (128, 64, 0),
+ (116, 70, 12), (103, 76, 25), (90, 83, 38), (78, 89, 50),
+ (66, 95, 62), (53, 102, 75), (40, 108, 88), (28, 114, 100),
+ (16, 120, 112), (0, 128, 128), (0, 128, 134), (0, 128, 140),
+ (0, 128, 147), (0, 128, 153), (0, 128, 159), (0, 128, 166),
+ (0, 128, 172), (0, 128, 178), (0, 128, 184), (0, 128, 192),
+ (25, 140, 173), (50, 153, 154), (75, 165, 136), (100, 178, 117),
+ (125, 190, 98), (149, 202, 80), (174, 215, 61), (199, 227, 42),
+ (224, 240, 23), (255, 255, 0), (255, 243, 12), (255, 230, 25),
+ (255, 218, 38), (255, 205, 50), (255, 193, 62), (255, 181, 75),
+ (255, 168, 88), (255, 156, 100), (255, 143, 112), (255, 128, 128)
+ ),
+
+// 102 rw-blue-with-red
+((0, 0, 255), (0, 0, 243), (0, 0, 237), (0, 0, 231),
+ (0, 0, 225), (0, 0, 219), (0, 0, 216), (0, 0, 213),
+ (0, 0, 202), (0, 0, 196), (0, 0, 190), (0, 0, 184),
+ (0, 0, 178), (0, 0, 172), (0, 0, 166), (0, 0, 163),
+ (0, 0, 160), (16, 0, 172), (24, 0, 178), (32, 0, 184),
+ (40, 0, 190), (48, 0, 196), (52, 0, 199), (56, 0, 202),
+ (72, 0, 213), (80, 0, 219), (88, 0, 225), (96, 0, 231),
+ (104, 0, 237), (108, 0, 240), (112, 0, 243), (120, 0, 249),
+ (128, 0, 255), (128, 16, 255), (128, 24, 255), (128, 32, 255),
+ (128, 40, 255), (128, 48, 255), (128, 52, 255), (128, 56, 255),
+ (128, 72, 255), (128, 80, 255), (128, 88, 255), (128, 96, 255),
+ (128, 104, 255), (128, 108, 255), (128, 112, 255), (128, 120, 255),
+ (128, 128, 255), (112, 128, 247), (104, 128, 243), (96, 128, 239),
+ (88, 128, 235), (80, 128, 231), (76, 128, 229), (72, 128, 227),
+ (56, 128, 220), (48, 128, 216), (40, 128, 212), (32, 128, 208),
+ (24, 128, 204), (20, 128, 202), (16, 128, 200), (8, 128, 196),
+ (0, 128, 192), (0, 128, 200), (0, 128, 204), (0, 128, 208),
+ (0, 128, 210), (0, 128, 212), (0, 128, 216), (0, 128, 220),
+ (0, 128, 227), (0, 128, 231), (0, 128, 235), (0, 128, 239),
+ (0, 128, 243), (0, 128, 245), (0, 128, 247), (0, 128, 251),
+ (0, 128, 255), (16, 128, 247), (24, 128, 243), (32, 128, 239),
+ (36, 128, 237), (40, 128, 235), (48, 128, 231), (56, 128, 227),
+ (72, 128, 220), (80, 128, 216), (88, 128, 212), (92, 128, 210),
+ (96, 128, 208), (104, 128, 204), (112, 128, 200), (120, 128, 196),
+ (128, 128, 192), (144, 128, 192), (152, 128, 192), (160, 128, 192),
+ (164, 128, 192), (168, 128, 192), (176, 128, 192), (184, 128, 192),
+ (199, 128, 192), (207, 128, 192), (215, 128, 192), (219, 128, 192),
+ (223, 128, 192), (231, 128, 192), (239, 128, 192), (247, 128, 192),
+ (255, 128, 192), (255, 128, 200), (255, 128, 202), (255, 128, 204),
+ (255, 128, 208), (255, 128, 212), (255, 128, 216), (255, 128, 220),
+ (255, 128, 227), (255, 128, 231), (255, 128, 235), (255, 128, 237),
+ (255, 128, 239), (255, 128, 243), (255, 128, 247), (255, 128, 251),
+ (255, 128, 255), (255, 112, 255), (255, 108, 255), (255, 104, 255),
+ (255, 96, 255), (255, 88, 255), (255, 80, 255), (255, 72, 255),
+ (255, 56, 255), (255, 48, 255), (255, 40, 255), (255, 36, 255),
+ (255, 32, 255), (255, 24, 255), (255, 16, 255), (255, 8, 255),
+ (255, 0, 255), (255, 0, 239), (255, 0, 235), (255, 0, 231),
+ (255, 0, 223), (255, 0, 215), (255, 0, 207), (255, 0, 199),
+ (255, 0, 184), (255, 0, 180), (255, 0, 176), (255, 0, 168),
+ (255, 0, 160), (255, 0, 152), (255, 0, 144), (255, 0, 136),
+ (255, 0, 128), (223, 16, 144), (215, 20, 148), (207, 24, 152),
+ (191, 32, 160), (175, 40, 168), (159, 48, 176), (143, 56, 184),
+ (112, 72, 199), (104, 76, 203), (96, 80, 207), (80, 88, 215),
+ (64, 96, 223), (48, 104, 231), (32, 112, 239), (16, 120, 247),
+ (0, 128, 255), (0, 128, 251), (0, 128, 247), (0, 128, 243),
+ (0, 128, 239), (0, 128, 235), (0, 128, 231), (0, 128, 227),
+ (0, 128, 220), (0, 128, 218), (0, 128, 216), (0, 128, 212),
+ (0, 128, 208), (0, 128, 204), (0, 128, 200), (0, 128, 196),
+ (0, 128, 192), (8, 128, 196), (16, 128, 200), (24, 128, 204),
+ (32, 128, 208), (40, 128, 212), (48, 128, 216), (56, 128, 220),
+ (64, 128, 224), (72, 128, 227), (80, 128, 231), (88, 128, 235),
+ (96, 128, 239), (104, 128, 243), (112, 128, 247), (120, 128, 251),
+ (128, 128, 255), (120, 120, 255), (112, 112, 255), (104, 104, 255),
+ (96, 96, 255), (88, 88, 255), (80, 80, 255), (72, 72, 255),
+ (64, 64, 255), (56, 56, 255), (48, 48, 255), (40, 40, 255),
+ (32, 32, 255), (24, 24, 255), (16, 16, 255), (8, 8, 255),
+ (0, 0, 255), (0, 0, 249), (0, 0, 243), (0, 0, 237),
+ (0, 0, 231), (0, 0, 225), (0, 0, 219), (0, 0, 213),
+ (0, 0, 208), (0, 0, 202), (0, 0, 196), (0, 0, 190),
+ (0, 0, 184), (0, 0, 178), (0, 0, 172), (0, 0, 166),
+ (0, 0, 160), (8, 0, 166), (16, 0, 172), (24, 0, 178),
+ (32, 0, 184), (40, 0, 190), (48, 0, 196), (56, 0, 202),
+ (64, 0, 208), (72, 0, 213), (80, 0, 219), (88, 0, 225),
+ (96, 0, 231), (104, 0, 237), (112, 0, 243), (128, 0, 255)
+ ),
+
+// 103 rw-blue-with-red-2
+((0, 128, 255), (18, 119, 237), (27, 114, 228), (36, 110, 219),
+ (45, 105, 210), (54, 101, 201), (58, 98, 196), (63, 96, 192),
+ (81, 88, 174), (90, 83, 165), (99, 78, 156), (108, 74, 147),
+ (117, 70, 138), (125, 65, 129), (134, 60, 121), (138, 58, 116),
+ (143, 56, 112), (161, 47, 94), (170, 42, 85), (179, 38, 76),
+ (188, 33, 67), (197, 29, 58), (201, 26, 53), (206, 24, 49),
+ (224, 16, 31), (233, 11, 22), (242, 6, 13), (246, 5, 11),
+ (251, 4, 9), (248, 6, 13), (246, 9, 18), (242, 14, 27),
+ (237, 18, 36), (228, 27, 54), (223, 31, 63), (219, 36, 72),
+ (214, 40, 81), (210, 45, 90), (208, 47, 94), (206, 50, 99),
+ (197, 58, 117), (192, 63, 125), (188, 68, 134), (183, 72, 143),
+ (179, 76, 152), (177, 78, 156), (175, 81, 161), (170, 86, 170),
+ (166, 90, 179), (157, 99, 197), (152, 103, 206), (148, 108, 215),
+ (143, 112, 224), (139, 117, 233), (136, 119, 237), (134, 122, 242),
+ (132, 128, 251), (136, 128, 246), (141, 128, 242), (145, 128, 237),
+ (150, 128, 233), (152, 128, 230), (155, 128, 228), (159, 128, 224),
+ (164, 128, 219), (173, 128, 210), (177, 128, 205), (182, 128, 201),
+ (184, 128, 199), (186, 128, 197), (191, 128, 192), (195, 128, 188),
+ (204, 128, 179), (208, 128, 174), (213, 128, 170), (217, 128, 165),
+ (222, 128, 161), (224, 128, 159), (226, 128, 157), (231, 128, 152),
+ (235, 128, 148), (244, 128, 139), (248, 128, 134), (253, 128, 130),
+ (254, 128, 129), (255, 128, 128), (255, 128, 132), (255, 128, 137),
+ (255, 128, 146), (255, 128, 150), (255, 128, 155), (255, 128, 157),
+ (255, 128, 159), (255, 128, 164), (255, 128, 168), (255, 128, 173),
+ (255, 128, 177), (255, 128, 186), (255, 128, 190), (255, 128, 195),
+ (255, 128, 197), (255, 128, 199), (255, 128, 204), (255, 128, 208),
+ (255, 128, 217), (255, 128, 221), (255, 128, 226), (255, 128, 228),
+ (255, 128, 231), (255, 128, 235), (255, 128, 240), (255, 128, 244),
+ (255, 128, 249), (246, 124, 255), (241, 121, 255), (237, 119, 255),
+ (228, 114, 255), (219, 110, 255), (210, 106, 255), (201, 101, 255),
+ (183, 92, 255), (174, 87, 255), (165, 83, 255), (160, 80, 255),
+ (156, 78, 255), (147, 74, 255), (138, 70, 255), (129, 65, 255),
+ (121, 60, 255), (103, 52, 255), (98, 49, 255), (94, 47, 255),
+ (85, 42, 255), (76, 38, 255), (67, 34, 255), (58, 29, 255),
+ (40, 20, 255), (31, 15, 255), (22, 11, 255), (17, 8, 255),
+ (13, 6, 255), (4, 2, 255), (0, 0, 255), (9, 0, 251),
+ (18, 0, 246), (36, 0, 237), (40, 0, 235), (45, 0, 233),
+ (54, 0, 228), (63, 0, 224), (72, 0, 219), (81, 0, 215),
+ (99, 0, 206), (103, 0, 203), (108, 0, 201), (117, 0, 197),
+ (126, 0, 192), (134, 0, 188), (143, 0, 184), (152, 0, 179),
+ (161, 0, 175), (179, 0, 166), (183, 0, 163), (188, 0, 161),
+ (197, 0, 157), (206, 0, 152), (215, 0, 148), (224, 0, 143),
+ (242, 0, 134), (248, 0, 131), (255, 0, 128), (246, 4, 132),
+ (237, 9, 137), (228, 14, 141), (219, 18, 146), (210, 22, 150),
+ (201, 27, 155), (192, 32, 159), (183, 36, 164), (174, 40, 168),
+ (165, 45, 173), (156, 50, 177), (147, 54, 182), (138, 58, 186),
+ (121, 68, 195), (116, 70, 197), (112, 72, 199), (103, 76, 204),
+ (94, 81, 208), (85, 86, 213), (76, 90, 217), (67, 94, 222),
+ (58, 99, 226), (49, 104, 231), (40, 108, 235), (31, 112, 240),
+ (22, 117, 244), (13, 122, 249), (4, 126, 253), (0, 128, 255),
+ (9, 129, 251), (18, 130, 248), (27, 131, 244), (36, 132, 241),
+ (45, 133, 237), (54, 134, 234), (63, 135, 230), (72, 136, 227),
+ (81, 137, 223), (90, 138, 220), (99, 139, 216), (108, 140, 213),
+ (117, 141, 209), (126, 142, 206), (134, 143, 202), (143, 144, 199),
+ (152, 144, 195), (161, 145, 192), (170, 146, 188), (179, 147, 185),
+ (188, 148, 181), (197, 149, 178), (206, 150, 174), (215, 151, 171),
+ (224, 152, 167), (233, 153, 164), (242, 154, 160), (255, 155, 155),
+ (252, 155, 159), (248, 155, 162), (245, 155, 166), (242, 155, 169),
+ (238, 155, 173), (235, 155, 176), (231, 156, 180), (228, 156, 183),
+ (225, 156, 187), (221, 156, 190), (218, 156, 194), (214, 156, 197),
+ (211, 156, 201), (208, 157, 204), (204, 157, 208), (201, 157, 211),
+ (198, 157, 215), (194, 157, 218), (191, 157, 222), (188, 157, 225),
+ (184, 158, 229), (181, 158, 232), (177, 158, 236), (174, 158, 239),
+ (171, 158, 243), (167, 158, 246), (164, 158, 250), (159, 159, 255)
+ ),
+
+// 104 rw-blues-3
+((0, 0, 255), (9, 9, 255), (13, 13, 255), (18, 18, 255),
+ (22, 22, 255), (27, 27, 255), (29, 29, 255), (32, 32, 255),
+ (40, 40, 255), (45, 45, 255), (50, 50, 255), (54, 54, 255),
+ (58, 58, 255), (63, 63, 255), (68, 68, 255), (70, 70, 255),
+ (72, 72, 255), (81, 81, 255), (85, 85, 255), (90, 90, 255),
+ (94, 94, 255), (99, 99, 255), (101, 101, 255), (104, 104, 255),
+ (112, 112, 255), (117, 117, 255), (122, 122, 255), (123, 123, 253),
+ (124, 124, 252), (121, 121, 250), (119, 119, 248), (114, 114, 245),
+ (110, 110, 242), (101, 101, 235), (96, 96, 231), (92, 92, 228),
+ (87, 87, 225), (83, 83, 222), (80, 80, 220), (78, 78, 218),
+ (70, 70, 212), (65, 65, 208), (60, 60, 205), (56, 56, 201),
+ (52, 52, 198), (49, 49, 196), (47, 47, 195), (42, 42, 192),
+ (38, 38, 188), (29, 29, 182), (24, 24, 178), (20, 20, 175),
+ (15, 15, 171), (11, 11, 168), (8, 8, 166), (6, 6, 165),
+ (0, 9, 163), (0, 18, 166), (0, 27, 170), (0, 36, 173),
+ (0, 45, 177), (0, 49, 178), (0, 54, 180), (0, 63, 183),
+ (0, 72, 187), (0, 90, 193), (0, 99, 196), (0, 108, 200),
+ (0, 112, 201), (0, 117, 203), (0, 126, 207), (0, 134, 210),
+ (0, 152, 217), (0, 161, 220), (0, 170, 223), (0, 179, 226),
+ (0, 188, 230), (0, 192, 231), (0, 197, 233), (0, 206, 237),
+ (0, 215, 240), (0, 233, 247), (0, 242, 250), (0, 251, 254),
+ (0, 253, 254), (0, 255, 255), (0, 248, 251), (0, 242, 246),
+ (0, 228, 237), (0, 221, 232), (0, 215, 228), (0, 211, 226),
+ (0, 208, 224), (0, 201, 219), (0, 195, 215), (0, 188, 210),
+ (0, 181, 206), (0, 168, 197), (0, 161, 192), (0, 154, 188),
+ (0, 151, 186), (0, 148, 184), (0, 141, 179), (0, 134, 175),
+ (0, 121, 166), (0, 114, 161), (0, 107, 157), (0, 104, 154),
+ (0, 101, 152), (0, 94, 148), (0, 87, 143), (0, 80, 139),
+ (0, 74, 134), (0, 66, 130), (0, 67, 131), (0, 68, 132),
+ (0, 71, 135), (0, 73, 137), (0, 75, 139), (0, 78, 142),
+ (0, 82, 146), (0, 84, 148), (0, 86, 150), (0, 87, 151),
+ (0, 89, 153), (0, 91, 155), (0, 93, 157), (0, 96, 160),
+ (0, 98, 162), (0, 102, 166), (0, 103, 167), (0, 104, 168),
+ (0, 107, 171), (0, 109, 173), (0, 111, 175), (0, 114, 178),
+ (0, 118, 182), (0, 120, 184), (0, 122, 186), (0, 123, 187),
+ (0, 125, 189), (0, 127, 191), (0, 128, 192), (0, 128, 194),
+ (0, 128, 196), (0, 128, 201), (0, 128, 202), (0, 128, 203),
+ (0, 128, 205), (0, 128, 208), (0, 128, 210), (0, 128, 212),
+ (0, 128, 216), (0, 128, 217), (0, 128, 219), (0, 128, 221),
+ (0, 128, 223), (0, 128, 225), (0, 128, 227), (0, 128, 230),
+ (0, 128, 232), (0, 128, 236), (0, 128, 237), (0, 128, 239),
+ (0, 128, 241), (0, 128, 243), (0, 128, 245), (0, 128, 247),
+ (0, 128, 252), (0, 128, 253), (0, 128, 255), (4, 132, 255),
+ (9, 137, 255), (14, 141, 255), (18, 146, 255), (22, 150, 255),
+ (27, 155, 255), (32, 159, 255), (36, 164, 255), (40, 168, 255),
+ (45, 173, 255), (50, 177, 255), (54, 182, 255), (58, 186, 255),
+ (68, 195, 255), (70, 197, 255), (72, 199, 255), (76, 204, 255),
+ (81, 208, 255), (86, 213, 255), (90, 217, 255), (94, 222, 255),
+ (99, 226, 255), (104, 231, 255), (108, 235, 255), (112, 240, 255),
+ (117, 244, 255), (122, 249, 255), (126, 253, 255), (128, 255, 255),
+ (128, 246, 255), (128, 237, 255), (128, 228, 255), (128, 219, 255),
+ (128, 210, 255), (128, 201, 255), (128, 192, 255), (128, 183, 255),
+ (128, 174, 255), (128, 165, 255), (128, 156, 255), (128, 147, 255),
+ (128, 138, 255), (128, 129, 255), (128, 121, 255), (128, 112, 255),
+ (128, 103, 255), (128, 94, 255), (128, 85, 255), (128, 76, 255),
+ (128, 67, 255), (128, 58, 255), (128, 49, 255), (128, 40, 255),
+ (128, 31, 255), (128, 22, 255), (128, 13, 255), (128, 0, 255),
+ (128, 4, 253), (128, 9, 251), (128, 14, 248), (128, 18, 246),
+ (128, 22, 244), (128, 27, 242), (128, 32, 239), (128, 36, 237),
+ (128, 40, 235), (128, 45, 233), (128, 50, 231), (128, 54, 228),
+ (128, 58, 226), (128, 63, 224), (128, 68, 222), (128, 72, 220),
+ (128, 76, 217), (128, 81, 215), (128, 86, 213), (128, 90, 211),
+ (128, 94, 208), (128, 99, 206), (128, 104, 204), (128, 108, 202),
+ (128, 112, 200), (128, 117, 197), (128, 122, 195), (128, 128, 192)
+ ),
+
+// 105 rw-reds-pinks-blues
+((255, 0, 0), (255, 0, 55), (255, 0, 91), (255, 0, 128),
+ (255, 27, 142), (255, 55, 156), (255, 68, 162), (255, 82, 169),
+ (255, 128, 192), (255, 128, 178), (255, 128, 164), (255, 128, 146),
+ (255, 128, 128), (255, 128, 142), (255, 128, 156), (255, 128, 162),
+ (255, 128, 169), (255, 128, 192), (200, 155, 151), (145, 183, 110),
+ (90, 210, 68), (36, 237, 27), (18, 246, 13), (0, 255, 0),
+ (110, 200, 110), (182, 164, 182), (255, 128, 255), (254, 134, 229),
+ (253, 140, 203), (252, 143, 189), (252, 146, 176), (251, 152, 150),
+ (250, 156, 133), (252, 89, 76), (253, 55, 47), (254, 22, 19),
+ (254, 25, 37), (255, 28, 55), (255, 41, 82), (255, 55, 110),
+ (255, 128, 255), (255, 128, 227), (255, 128, 200), (255, 128, 173),
+ (255, 128, 146), (255, 128, 137), (255, 128, 128), (255, 100, 128),
+ (255, 73, 128), (255, 18, 128), (255, 23, 121), (255, 28, 114),
+ (255, 55, 100), (255, 82, 87), (255, 105, 75), (255, 128, 64),
+ (255, 73, 92), (255, 45, 105), (255, 18, 119), (227, 9, 137),
+ (200, 0, 155), (172, 0, 169), (145, 0, 183), (91, 0, 210),
+ (36, 0, 237), (55, 28, 228), (109, 55, 200), (164, 82, 173),
+ (209, 105, 150), (255, 128, 128), (255, 100, 128), (255, 73, 128),
+ (255, 18, 128), (255, 9, 114), (255, 0, 100), (255, 0, 73),
+ (255, 0, 46), (255, 0, 32), (255, 0, 18), (255, 0, 0),
+ (255, 28, 14), (255, 82, 41), (255, 105, 59), (255, 128, 78),
+ (255, 128, 85), (255, 128, 92), (255, 128, 105), (255, 128, 119),
+ (255, 128, 155), (255, 128, 182), (255, 128, 210), (255, 128, 223),
+ (255, 128, 237), (255, 128, 255), (255, 155, 228), (255, 183, 200),
+ (255, 210, 173), (255, 200, 100), (255, 145, 73), (255, 91, 46),
+ (255, 63, 32), (255, 36, 18), (255, 0, 0), (255, 28, 55),
+ (255, 82, 164), (255, 105, 209), (255, 128, 255), (255, 128, 241),
+ (255, 128, 228), (255, 128, 200), (255, 128, 173), (255, 128, 128),
+ (255, 100, 128), (255, 46, 128), (255, 32, 128), (255, 18, 128),
+ (255, 0, 128), (255, 28, 114), (255, 55, 100), (255, 82, 87),
+ (255, 128, 64), (255, 128, 105), (255, 128, 146), (255, 128, 166),
+ (255, 128, 187), (255, 128, 255), (200, 155, 255), (145, 183, 255),
+ (91, 210, 255), (0, 255, 255), (27, 241, 241), (55, 228, 228),
+ (110, 200, 200), (164, 173, 173), (255, 128, 128), (255, 128, 155),
+ (255, 128, 210), (255, 128, 232), (255, 128, 255), (255, 114, 241),
+ (255, 100, 228), (255, 73, 200), (255, 46, 173), (255, 18, 146),
+ (255, 0, 128), (255, 55, 156), (255, 68, 162), (255, 82, 169),
+ (255, 128, 192), (255, 128, 178), (255, 128, 164), (255, 128, 151),
+ (255, 128, 128), (255, 128, 121), (255, 128, 114), (255, 128, 100),
+ (255, 128, 87), (255, 128, 73), (255, 128, 64), (215, 116, 104),
+ (174, 104, 145), (67, 71, 252), (87, 77, 232), (107, 83, 212),
+ (148, 95, 171), (188, 108, 131), (229, 120, 90), (255, 128, 64),
+ (255, 128, 146), (255, 128, 166), (255, 128, 187), (255, 128, 228),
+ (255, 128, 255), (255, 100, 228), (255, 73, 200), (255, 46, 173),
+ (255, 0, 128), (255, 28, 128), (255, 55, 128), (255, 82, 128),
+ (255, 110, 128), (255, 128, 128), (255, 128, 155), (255, 128, 183),
+ (255, 128, 237), (255, 128, 246), (255, 128, 255), (255, 128, 241),
+ (255, 128, 228), (255, 128, 214), (255, 128, 192), (234, 155, 181),
+ (212, 182, 170), (191, 209, 159), (169, 236, 148), (155, 254, 141),
+ (176, 199, 111), (198, 145, 80), (219, 90, 50), (241, 36, 20),
+ (255, 0, 0), (255, 0, 28), (255, 0, 55), (255, 0, 82),
+ (255, 0, 128), (255, 28, 128), (255, 55, 128), (255, 82, 128),
+ (255, 110, 128), (255, 128, 128), (255, 128, 155), (255, 128, 183),
+ (255, 128, 210), (255, 128, 237), (255, 128, 255), (255, 100, 228),
+ (255, 73, 200), (255, 46, 173), (255, 0, 128), (255, 28, 100),
+ (255, 55, 73), (255, 82, 46), (255, 110, 18), (255, 128, 0),
+ (228, 114, 0), (200, 100, 0), (173, 87, 0), (146, 73, 0),
+ (128, 64, 0), (155, 78, 28), (183, 92, 55), (210, 105, 82),
+ (255, 128, 128), (255, 100, 128), (255, 73, 128), (255, 46, 128),
+ (255, 18, 128), (255, 0, 128), (255, 28, 142), (255, 55, 156),
+ (255, 82, 169), (255, 110, 183), (255, 128, 192), (255, 128, 178),
+ (255, 128, 164), (255, 128, 151), (255, 128, 128), (255, 100, 100),
+ (255, 73, 73), (255, 46, 46), (255, 18, 18), (255, 0, 0),
+ (255, 28, 55), (255, 55, 110), (255, 82, 164), (255, 128, 255)
+ ),
+
+// 106 rw-browns-greens-reds-bule
+((128, 255, 0), (73, 200, 28), (36, 164, 46), (0, 128, 64),
+ (55, 141, 91), (110, 155, 119), (137, 162, 132), (164, 169, 146),
+ (255, 191, 191), (255, 153, 153), (255, 115, 115), (255, 65, 65),
+ (255, 15, 15), (255, 39, 39), (255, 64, 64), (255, 76, 76),
+ (255, 88, 88), (255, 128, 128), (200, 128, 114), (145, 128, 100),
+ (90, 128, 86), (36, 128, 73), (18, 128, 68), (0, 128, 64),
+ (110, 128, 119), (182, 128, 155), (255, 128, 192), (255, 101, 178),
+ (255, 75, 165), (255, 61, 158), (255, 48, 152), (255, 21, 139),
+ (255, 4, 130), (200, 2, 102), (173, 1, 87), (146, 1, 73),
+ (123, 28, 68), (100, 55, 64), (86, 82, 64), (73, 110, 64),
+ (0, 255, 64), (32, 200, 66), (64, 145, 68), (96, 90, 70),
+ (128, 36, 73), (138, 18, 73), (149, 0, 74), (147, 21, 59),
+ (146, 42, 45), (143, 84, 16), (154, 94, 37), (166, 104, 59),
+ (190, 110, 112), (215, 117, 166), (235, 122, 210), (255, 128, 255),
+ (208, 117, 147), (184, 112, 92), (161, 107, 38), (152, 99, 22),
+ (143, 91, 6), (141, 85, 7), (140, 79, 9), (136, 67, 13),
+ (133, 55, 16), (128, 56, 21), (125, 64, 23), (123, 73, 26),
+ (120, 80, 28), (118, 87, 31), (141, 110, 53), (163, 132, 75),
+ (208, 177, 120), (219, 164, 112), (230, 151, 105), (237, 109, 76),
+ (244, 68, 48), (247, 47, 33), (250, 27, 19), (255, 0, 0),
+ (255, 28, 0), (255, 82, 0), (246, 91, 0), (237, 100, 0),
+ (227, 86, 0), (218, 73, 0), (200, 46, 0), (182, 18, 0),
+ (188, 5, 5), (206, 10, 10), (225, 15, 15), (234, 17, 17),
+ (243, 20, 20), (255, 23, 23), (249, 48, 29), (243, 73, 35),
+ (238, 98, 40), (230, 148, 65), (232, 156, 80), (234, 165, 95),
+ (235, 169, 102), (236, 173, 110), (237, 179, 120), (220, 159, 99),
+ (185, 120, 56), (170, 104, 38), (156, 88, 20), (157, 80, 26),
+ (158, 72, 33), (160, 55, 46), (162, 39, 59), (165, 12, 81),
+ (183, 41, 104), (218, 98, 151), (226, 112, 163), (235, 126, 175),
+ (247, 145, 190), (239, 127, 186), (231, 108, 183), (223, 90, 179),
+ (210, 60, 173), (194, 60, 180), (179, 60, 188), (171, 60, 192),
+ (164, 60, 196), (139, 61, 209), (157, 70, 175), (174, 80, 140),
+ (192, 89, 106), (221, 105, 49), (212, 99, 67), (203, 93, 86),
+ (186, 81, 123), (168, 68, 161), (139, 48, 222), (157, 48, 205),
+ (192, 48, 171), (206, 48, 157), (221, 49, 143), (224, 52, 148),
+ (227, 56, 153), (233, 63, 163), (238, 70, 173), (244, 77, 183),
+ (248, 82, 189), (251, 102, 135), (252, 107, 121), (253, 112, 108),
+ (255, 128, 64), (255, 142, 85), (255, 156, 107), (255, 170, 128),
+ (255, 193, 164), (248, 179, 146), (242, 165, 129), (230, 138, 94),
+ (217, 110, 58), (204, 82, 23), (196, 64, 0), (203, 82, 15),
+ (211, 101, 29), (230, 149, 68), (232, 146, 74), (235, 144, 81),
+ (241, 140, 94), (246, 135, 107), (251, 131, 120), (255, 128, 128),
+ (145, 183, 183), (118, 196, 196), (91, 210, 210), (36, 237, 237),
+ (0, 255, 255), (55, 255, 228), (110, 255, 200), (164, 255, 173),
+ (255, 255, 128), (228, 255, 146), (201, 255, 165), (174, 254, 183),
+ (148, 254, 201), (130, 253, 213), (151, 227, 222), (172, 200, 230),
+ (214, 147, 247), (221, 138, 250), (228, 130, 253), (207, 157, 232),
+ (185, 183, 212), (164, 210, 191), (129, 254, 157), (156, 240, 151),
+ (183, 226, 145), (210, 211, 139), (236, 197, 133), (254, 188, 129),
+ (250, 202, 129), (246, 216, 129), (242, 231, 129), (238, 245, 129),
+ (235, 254, 129), (212, 254, 133), (189, 254, 137), (167, 254, 141),
+ (129, 254, 148), (129, 254, 167), (129, 254, 185), (129, 254, 204),
+ (129, 254, 223), (129, 254, 235), (155, 244, 213), (182, 235, 190),
+ (208, 225, 168), (235, 215, 146), (252, 209, 131), (227, 218, 132),
+ (201, 226, 134), (176, 235, 135), (134, 249, 137), (145, 243, 126),
+ (157, 237, 115), (168, 231, 103), (180, 225, 92), (187, 221, 85),
+ (165, 212, 114), (143, 202, 144), (121, 193, 173), (98, 183, 203),
+ (84, 177, 222), (93, 166, 229), (103, 156, 236), (112, 145, 243),
+ (128, 128, 255), (121, 149, 211), (114, 170, 168), (107, 191, 124),
+ (100, 212, 81), (96, 226, 52), (119, 217, 54), (143, 208, 57),
+ (166, 199, 59), (190, 190, 61), (205, 184, 63), (213, 182, 75),
+ (222, 179, 88), (230, 177, 100), (244, 173, 121), (192, 191, 109),
+ (139, 208, 97), (87, 226, 84), (34, 243, 72), (0, 255, 64),
+ (0, 255, 105), (0, 255, 146), (0, 255, 187), (0, 255, 255)
+ ),
+
+// 107 rw-browns-pinks-reds-blues
+((128, 0, 0), (147, 0, 0), (156, 0, 0), (166, 0, 0),
+ (175, 0, 0), (185, 0, 0), (189, 0, 0), (194, 0, 0),
+ (212, 23, 23), (218, 46, 46), (224, 69, 69), (230, 92, 92),
+ (236, 116, 116), (242, 139, 139), (248, 162, 162), (251, 176, 176),
+ (255, 191, 191), (255, 148, 148), (255, 127, 127), (255, 106, 106),
+ (255, 84, 84), (255, 63, 63), (255, 52, 52), (255, 42, 42),
+ (255, 29, 29), (255, 42, 42), (255, 56, 56), (255, 69, 69),
+ (255, 83, 83), (255, 90, 90), (255, 97, 97), (255, 111, 111),
+ (255, 124, 124), (255, 128, 143), (255, 128, 158), (255, 128, 174),
+ (255, 128, 189), (255, 128, 205), (255, 128, 212), (255, 128, 220),
+ (255, 128, 255), (255, 128, 247), (255, 128, 240), (255, 128, 232),
+ (255, 128, 224), (255, 128, 220), (255, 128, 217), (255, 128, 209),
+ (255, 128, 202), (255, 113, 184), (255, 98, 176), (255, 83, 169),
+ (255, 68, 161), (255, 53, 154), (255, 45, 150), (255, 38, 147),
+ (255, 4, 130), (239, 3, 122), (224, 3, 114), (208, 2, 106),
+ (193, 2, 98), (185, 2, 94), (178, 2, 90), (163, 2, 82),
+ (147, 1, 74), (128, 0, 64), (143, 18, 81), (159, 37, 98),
+ (166, 46, 106), (174, 55, 114), (190, 73, 131), (205, 91, 148),
+ (236, 128, 182), (239, 130, 184), (242, 133, 187), (229, 114, 171),
+ (216, 96, 156), (210, 87, 148), (204, 78, 141), (191, 60, 125),
+ (178, 41, 109), (149, 0, 74), (148, 12, 66), (147, 24, 58),
+ (147, 30, 53), (147, 36, 49), (146, 47, 41), (145, 59, 33),
+ (143, 83, 16), (142, 87, 11), (141, 92, 7), (140, 89, 8),
+ (140, 87, 9), (138, 81, 10), (137, 75, 11), (136, 70, 13),
+ (135, 64, 14), (132, 52, 17), (133, 54, 16), (134, 57, 15),
+ (134, 60, 14), (135, 64, 14), (137, 70, 12), (139, 76, 10),
+ (142, 89, 7), (144, 96, 5), (146, 103, 3), (145, 99, 4),
+ (144, 96, 5), (142, 89, 7), (141, 83, 8), (139, 76, 10),
+ (137, 69, 12), (133, 56, 16), (132, 51, 17), (131, 47, 18),
+ (129, 52, 20), (128, 57, 21), (126, 62, 23), (125, 66, 24),
+ (122, 76, 27), (120, 81, 29), (118, 87, 31), (124, 93, 37),
+ (131, 100, 43), (143, 112, 56), (156, 125, 68), (169, 138, 81),
+ (182, 151, 93), (207, 176, 118), (213, 182, 124), (220, 189, 131),
+ (223, 192, 134), (227, 169, 118), (231, 146, 102), (235, 122, 85),
+ (242, 76, 53), (246, 52, 36), (250, 29, 20), (252, 14, 10),
+ (255, 0, 0), (255, 21, 21), (255, 43, 43), (255, 64, 64),
+ (255, 85, 85), (255, 128, 128), (255, 138, 138), (255, 149, 149),
+ (255, 176, 176), (245, 155, 155), (234, 133, 133), (224, 112, 112),
+ (204, 69, 69), (198, 58, 58), (193, 48, 48), (183, 27, 27),
+ (170, 0, 0), (180, 3, 3), (191, 6, 6), (201, 8, 8),
+ (211, 11, 11), (232, 17, 17), (237, 18, 18), (242, 19, 19),
+ (252, 22, 22), (255, 23, 23), (252, 37, 26), (248, 51, 30),
+ (242, 79, 36), (240, 86, 37), (239, 93, 39), (235, 107, 43),
+ (232, 121, 46), (228, 139, 50), (229, 144, 58), (230, 149, 67),
+ (231, 154, 75), (232, 158, 84), (233, 163, 92), (235, 168, 101),
+ (236, 173, 109), (237, 179, 120), (227, 168, 108), (217, 157, 96),
+ (198, 135, 72), (193, 129, 65), (188, 124, 59), (178, 113, 47),
+ (168, 102, 35), (156, 88, 20), (157, 79, 27), (158, 70, 35),
+ (159, 60, 42), (160, 51, 50), (161, 42, 57), (163, 33, 64),
+ (164, 24, 72), (165, 14, 79), (165, 12, 81), (175, 28, 94),
+ (185, 44, 107), (195, 60, 121), (205, 76, 134), (215, 93, 147),
+ (225, 109, 160), (235, 125, 173), (247, 145, 190), (243, 135, 188),
+ (238, 124, 186), (234, 114, 184), (229, 104, 182), (225, 94, 180),
+ (220, 83, 178), (216, 73, 176), (210, 60, 173), (201, 60, 177),
+ (193, 60, 182), (184, 60, 186), (176, 60, 190), (167, 60, 195),
+ (158, 60, 199), (150, 60, 204), (139, 61, 209), (149, 66, 190),
+ (159, 72, 170), (169, 77, 151), (179, 82, 132), (189, 88, 112),
+ (199, 93, 93), (209, 98, 73), (218, 104, 54), (221, 105, 49),
+ (211, 98, 70), (201, 91, 91), (191, 84, 112), (181, 77, 133),
+ (171, 70, 154), (161, 64, 175), (151, 57, 196), (139, 48, 222),
+ (149, 48, 212), (159, 48, 203), (169, 48, 193), (179, 48, 184),
+ (189, 48, 174), (199, 48, 165), (209, 48, 155), (221, 49, 143),
+ (224, 53, 149), (228, 57, 154), (231, 61, 160), (234, 65, 165),
+ (237, 69, 171), (241, 73, 176), (244, 77, 182), (248, 82, 189)
+ ),
+
+// 108 rw-reds-greens-blues-pinks-yellows-browns
+((255, 0, 0), (215, 40, 10), (195, 60, 15), (175, 80, 20),
+ (155, 100, 25), (135, 120, 30), (125, 129, 32), (116, 139, 35),
+ (76, 179, 45), (56, 199, 50), (36, 219, 55), (18, 232, 64),
+ (0, 245, 74), (0, 235, 84), (0, 225, 94), (0, 220, 99),
+ (0, 215, 104), (0, 195, 124), (0, 185, 134), (0, 176, 144),
+ (0, 166, 154), (0, 156, 164), (0, 151, 169), (0, 146, 174),
+ (0, 128, 192), (20, 128, 197), (40, 128, 202), (60, 128, 207),
+ (80, 128, 212), (90, 128, 214), (100, 128, 217), (120, 128, 222),
+ (139, 128, 226), (179, 128, 236), (199, 128, 241), (219, 128, 246),
+ (237, 128, 250), (255, 128, 255), (245, 128, 255), (235, 128, 255),
+ (195, 128, 255), (175, 128, 255), (155, 128, 255), (135, 128, 255),
+ (116, 128, 255), (106, 128, 255), (96, 128, 255), (76, 128, 255),
+ (56, 128, 255), (16, 128, 255), (8, 133, 245), (0, 138, 235),
+ (0, 148, 215), (0, 158, 195), (0, 163, 185), (0, 168, 175),
+ (0, 188, 135), (0, 197, 115), (0, 207, 96), (0, 217, 76),
+ (0, 227, 56), (0, 232, 46), (0, 237, 36), (0, 247, 16),
+ (0, 255, 0), (40, 255, 20), (60, 255, 30), (80, 255, 40),
+ (90, 255, 45), (100, 255, 50), (120, 255, 60), (139, 255, 70),
+ (179, 255, 90), (199, 255, 100), (219, 255, 110), (237, 250, 119),
+ (255, 245, 128), (255, 240, 128), (255, 235, 128), (255, 225, 128),
+ (255, 215, 128), (255, 195, 128), (255, 185, 128), (255, 176, 128),
+ (255, 171, 128), (255, 166, 128), (255, 156, 128), (255, 146, 128),
+ (255, 128, 128), (235, 128, 123), (215, 128, 118), (205, 128, 115),
+ (195, 128, 113), (175, 128, 108), (155, 128, 103), (135, 128, 98),
+ (116, 128, 93), (76, 128, 83), (56, 128, 78), (36, 128, 73),
+ (26, 128, 70), (16, 128, 68), (0, 128, 64), (10, 123, 59),
+ (30, 113, 49), (40, 108, 44), (50, 103, 39), (55, 100, 36),
+ (60, 98, 34), (70, 93, 29), (80, 88, 24), (90, 83, 19),
+ (100, 78, 14), (120, 68, 4), (124, 66, 2), (128, 64, 0),
+ (128, 69, 15), (128, 74, 30), (128, 79, 45), (128, 84, 60),
+ (128, 94, 90), (128, 99, 105), (128, 104, 120), (128, 106, 127),
+ (128, 109, 135), (128, 114, 150), (128, 119, 165), (128, 124, 185),
+ (128, 128, 192), (148, 108, 162), (153, 103, 154), (158, 98, 147),
+ (168, 88, 132), (178, 78, 117), (188, 68, 102), (197, 58, 87),
+ (217, 38, 57), (227, 28, 42), (237, 18, 27), (246, 9, 13),
+ (255, 0, 0), (255, 10, 0), (255, 20, 0), (255, 30, 0),
+ (255, 40, 0), (255, 60, 0), (255, 65, 0), (255, 70, 0),
+ (255, 80, 0), (255, 90, 0), (255, 100, 0), (255, 110, 0),
+ (255, 128, 0), (250, 128, 10), (245, 128, 20), (235, 128, 40),
+ (225, 128, 60), (215, 128, 80), (205, 128, 100), (195, 128, 120),
+ (186, 128, 139), (166, 128, 179), (161, 128, 189), (156, 128, 199),
+ (146, 128, 219), (136, 128, 239), (128, 128, 255), (137, 137, 246),
+ (154, 155, 228), (158, 159, 223), (163, 164, 218), (171, 173, 209),
+ (180, 182, 200), (189, 191, 191), (197, 200, 182), (206, 210, 173),
+ (215, 219, 164), (223, 228, 154), (232, 237, 145), (239, 244, 138),
+ (240, 235, 127), (242, 226, 116), (243, 217, 106), (244, 208, 95),
+ (246, 190, 73), (247, 185, 68), (248, 181, 63), (249, 172, 52),
+ (250, 162, 41), (252, 153, 30), (253, 144, 19), (254, 135, 9),
+ (255, 128, 0), (235, 138, 5), (215, 148, 10), (195, 158, 15),
+ (175, 168, 20), (155, 178, 25), (135, 188, 30), (116, 197, 35),
+ (96, 207, 40), (76, 217, 45), (56, 227, 50), (36, 237, 55),
+ (0, 255, 64), (20, 255, 69), (40, 255, 74), (60, 255, 79),
+ (80, 255, 84), (100, 255, 89), (120, 255, 94), (139, 255, 99),
+ (159, 255, 104), (179, 255, 109), (199, 255, 114), (219, 255, 119),
+ (239, 255, 124), (255, 255, 128), (255, 245, 123), (255, 235, 118),
+ (255, 225, 113), (255, 215, 108), (255, 205, 103), (255, 195, 98),
+ (255, 186, 93), (255, 176, 88), (255, 166, 83), (255, 156, 78),
+ (255, 146, 73), (255, 136, 68), (255, 128, 64), (255, 128, 74),
+ (255, 128, 84), (255, 128, 94), (255, 128, 104), (255, 128, 114),
+ (255, 128, 124), (255, 128, 134), (255, 128, 144), (255, 128, 154),
+ (255, 128, 164), (255, 128, 174), (255, 128, 184), (255, 128, 192),
+ (255, 118, 187), (255, 108, 182), (255, 98, 177), (255, 88, 172),
+ (255, 78, 167), (255, 68, 162), (255, 58, 157), (255, 48, 152),
+ (255, 38, 147), (255, 28, 142), (255, 18, 137), (255, 0, 128)
+ ),
+
+// 109 rw-greens-light-to-dark
+((0, 255, 0), (0, 237, 18), (0, 228, 27), (0, 219, 36),
+ (0, 210, 45), (0, 201, 54), (0, 196, 58), (0, 192, 63),
+ (0, 175, 81), (0, 166, 90), (0, 157, 99), (0, 148, 108),
+ (0, 139, 117), (4, 138, 118), (9, 137, 119), (13, 141, 114),
+ (18, 146, 110), (36, 164, 92), (45, 173, 83), (54, 182, 74),
+ (63, 190, 65), (72, 199, 56), (76, 203, 51), (81, 208, 47),
+ (99, 226, 29), (108, 235, 20), (117, 244, 11), (118, 245, 7),
+ (119, 246, 4), (114, 241, 6), (110, 237, 9), (101, 228, 14),
+ (92, 219, 18), (74, 201, 27), (65, 192, 31), (56, 184, 36),
+ (47, 175, 40), (38, 166, 45), (33, 161, 47), (29, 157, 50),
+ (11, 139, 58), (10, 138, 63), (9, 137, 68), (18, 146, 73),
+ (27, 155, 78), (31, 159, 80), (36, 164, 82), (45, 173, 86),
+ (54, 182, 91), (72, 199, 100), (81, 208, 104), (90, 217, 109),
+ (99, 226, 113), (108, 235, 118), (112, 239, 120), (117, 244, 122),
+ (119, 248, 119), (110, 241, 110), (101, 234, 101), (92, 227, 92),
+ (83, 221, 83), (78, 217, 78), (74, 214, 74), (65, 207, 65),
+ (56, 200, 56), (38, 186, 38), (29, 179, 29), (20, 172, 20),
+ (15, 168, 15), (11, 165, 11), (2, 159, 2), (0, 157, 0),
+ (19, 167, 5), (29, 172, 7), (39, 178, 10), (48, 183, 12),
+ (58, 188, 14), (62, 190, 15), (67, 193, 17), (77, 198, 19),
+ (87, 203, 22), (106, 213, 26), (115, 218, 28), (125, 224, 31),
+ (131, 227, 32), (137, 230, 34), (137, 227, 37), (138, 224, 40),
+ (138, 218, 45), (138, 215, 48), (139, 213, 51), (139, 211, 52),
+ (140, 210, 54), (140, 207, 56), (141, 204, 59), (141, 201, 62),
+ (141, 198, 65), (142, 193, 71), (139, 192, 71), (136, 192, 71),
+ (132, 193, 70), (129, 194, 69), (122, 197, 66), (115, 199, 64),
+ (101, 204, 59), (94, 206, 56), (87, 209, 54), (83, 210, 52),
+ (80, 212, 51), (73, 214, 49), (66, 217, 46), (59, 219, 44),
+ (52, 222, 41), (45, 223, 44), (46, 221, 47), (47, 220, 50),
+ (49, 218, 56), (51, 216, 62), (53, 213, 69), (55, 211, 75),
+ (59, 206, 87), (61, 204, 93), (63, 202, 99), (64, 200, 102),
+ (65, 199, 105), (67, 197, 111), (69, 195, 118), (71, 193, 124),
+ (71, 192, 125), (80, 197, 113), (82, 198, 110), (85, 199, 107),
+ (89, 201, 101), (94, 204, 94), (98, 206, 88), (103, 208, 82),
+ (112, 213, 70), (116, 215, 64), (121, 218, 58), (123, 219, 55),
+ (126, 220, 52), (130, 222, 45), (136, 225, 38), (130, 227, 36),
+ (124, 229, 35), (112, 232, 31), (108, 233, 30), (105, 234, 30),
+ (99, 236, 28), (93, 237, 26), (87, 239, 24), (81, 241, 23),
+ (69, 244, 19), (66, 245, 18), (63, 246, 18), (56, 248, 16),
+ (49, 250, 14), (52, 245, 23), (55, 239, 32), (58, 234, 41),
+ (61, 228, 50), (66, 218, 68), (67, 215, 72), (69, 212, 77),
+ (72, 207, 86), (75, 201, 95), (78, 196, 104), (81, 190, 113),
+ (86, 180, 131), (88, 176, 136), (90, 173, 142), (84, 170, 137),
+ (77, 167, 131), (71, 164, 126), (65, 160, 120), (58, 157, 115),
+ (52, 154, 109), (46, 151, 104), (39, 148, 98), (33, 145, 93),
+ (27, 141, 87), (20, 138, 82), (14, 135, 76), (8, 132, 71),
+ (0, 136, 68), (0, 140, 70), (0, 144, 72), (0, 152, 76),
+ (0, 161, 80), (0, 169, 84), (0, 177, 88), (0, 185, 93),
+ (0, 193, 97), (0, 201, 101), (0, 210, 105), (0, 218, 109),
+ (0, 226, 113), (0, 234, 117), (0, 242, 121), (0, 244, 122),
+ (8, 245, 126), (15, 246, 130), (23, 247, 135), (30, 247, 139),
+ (38, 248, 143), (46, 249, 147), (53, 250, 152), (61, 250, 156),
+ (68, 251, 160), (76, 252, 164), (84, 253, 168), (91, 253, 173),
+ (99, 254, 177), (108, 255, 182), (108, 249, 177), (108, 243, 172),
+ (108, 237, 167), (108, 231, 162), (108, 225, 157), (108, 219, 152),
+ (108, 213, 147), (108, 207, 142), (108, 201, 137), (108, 195, 132),
+ (108, 188, 127), (108, 182, 122), (108, 176, 117), (109, 169, 111),
+ (114, 174, 106), (119, 178, 102), (123, 183, 97), (128, 187, 92),
+ (133, 192, 88), (138, 196, 83), (142, 201, 79), (147, 206, 74),
+ (152, 210, 69), (157, 215, 65), (162, 219, 60), (166, 224, 55),
+ (171, 228, 51), (177, 234, 45), (165, 235, 42), (152, 237, 39),
+ (140, 238, 36), (127, 240, 32), (115, 241, 29), (102, 243, 26),
+ (90, 244, 23), (77, 246, 20), (65, 247, 17), (53, 249, 13),
+ (40, 250, 10), (28, 252, 7), (15, 253, 4), (0, 255, 0)
+ ),
+
+// 110 rw-blues-reds-purples
+((0, 128, 255), (32, 144, 255), (53, 154, 255), (74, 165, 255),
+ (89, 172, 255), (105, 180, 255), (113, 184, 255), (121, 188, 255),
+ (147, 201, 255), (157, 206, 255), (167, 211, 255), (180, 217, 255),
+ (193, 224, 255), (151, 203, 241), (110, 183, 228), (89, 172, 221),
+ (69, 162, 214), (0, 128, 192), (39, 148, 205), (79, 168, 219),
+ (119, 187, 232), (159, 207, 246), (172, 213, 250), (185, 220, 255),
+ (165, 210, 255), (151, 203, 255), (138, 197, 255), (129, 192, 255),
+ (121, 188, 255), (116, 185, 255), (112, 183, 255), (104, 179, 255),
+ (98, 176, 255), (83, 169, 255), (76, 165, 255), (69, 161, 255),
+ (63, 158, 255), (58, 156, 255), (55, 154, 255), (52, 153, 255),
+ (36, 146, 255), (28, 142, 255), (21, 138, 255), (13, 134, 255),
+ (5, 131, 255), (2, 129, 255), (0, 128, 255), (0, 123, 245),
+ (0, 118, 236), (0, 108, 216), (0, 104, 209), (0, 101, 202),
+ (0, 97, 194), (0, 93, 187), (0, 90, 180), (0, 87, 174),
+ (24, 116, 209), (35, 130, 226), (47, 145, 244), (57, 154, 247),
+ (68, 163, 251), (75, 167, 249), (82, 172, 247), (95, 180, 243),
+ (108, 189, 239), (97, 180, 225), (77, 166, 214), (58, 153, 204),
+ (42, 142, 195), (26, 131, 187), (30, 142, 189), (35, 152, 190),
+ (43, 173, 193), (50, 179, 196), (58, 186, 199), (69, 191, 204),
+ (81, 197, 209), (87, 199, 212), (93, 202, 215), (101, 206, 218),
+ (87, 194, 205), (60, 169, 180), (62, 167, 177), (64, 165, 175),
+ (77, 173, 183), (90, 181, 191), (117, 198, 207), (143, 214, 223),
+ (134, 210, 219), (107, 195, 205), (81, 180, 191), (68, 172, 184),
+ (55, 165, 177), (38, 155, 168), (69, 164, 180), (100, 173, 192),
+ (131, 182, 204), (159, 179, 214), (135, 160, 203), (112, 142, 193),
+ (100, 132, 188), (89, 123, 183), (74, 111, 176), (85, 120, 181),
+ (106, 138, 192), (115, 145, 196), (124, 153, 201), (118, 147, 196),
+ (112, 142, 192), (99, 131, 183), (87, 119, 174), (66, 101, 159),
+ (97, 127, 176), (159, 178, 209), (174, 190, 217), (190, 203, 225),
+ (210, 220, 236), (177, 200, 214), (144, 180, 192), (111, 159, 170),
+ (57, 126, 134), (82, 145, 152), (107, 165, 171), (119, 174, 180),
+ (132, 184, 189), (173, 216, 220), (150, 200, 205), (126, 184, 189),
+ (103, 168, 174), (64, 142, 149), (81, 152, 159), (98, 163, 169),
+ (133, 184, 189), (167, 205, 208), (224, 240, 241), (185, 208, 209),
+ (107, 144, 146), (75, 117, 120), (43, 91, 94), (52, 102, 105),
+ (62, 114, 117), (81, 136, 139), (100, 159, 162), (119, 181, 184),
+ (131, 196, 199), (114, 156, 215), (110, 146, 219), (106, 136, 223),
+ (92, 103, 237), (103, 113, 238), (113, 123, 239), (124, 133, 240),
+ (142, 150, 242), (129, 137, 235), (116, 125, 229), (90, 100, 216),
+ (64, 75, 203), (38, 49, 190), (21, 33, 181), (51, 56, 189),
+ (82, 79, 196), (162, 140, 217), (159, 136, 216), (156, 133, 215),
+ (151, 127, 213), (145, 120, 211), (140, 113, 208), (136, 109, 207),
+ (113, 85, 186), (107, 78, 180), (101, 72, 175), (90, 60, 165),
+ (82, 52, 158), (111, 85, 175), (140, 119, 193), (168, 152, 210),
+ (216, 207, 239), (213, 200, 233), (210, 193, 227), (206, 186, 220),
+ (203, 179, 214), (201, 174, 210), (186, 154, 197), (171, 134, 183),
+ (142, 95, 157), (137, 88, 152), (132, 82, 148), (146, 105, 123),
+ (161, 128, 98), (175, 152, 73), (199, 190, 31), (171, 175, 59),
+ (142, 161, 88), (114, 146, 116), (86, 132, 144), (67, 122, 163),
+ (87, 137, 174), (107, 152, 186), (127, 167, 197), (147, 182, 209),
+ (160, 192, 216), (180, 151, 170), (201, 110, 123), (221, 68, 77),
+ (255, 0, 0), (233, 6, 49), (211, 12, 98), (189, 18, 146),
+ (167, 24, 195), (153, 28, 227), (169, 63, 232), (185, 98, 236),
+ (201, 134, 241), (217, 169, 245), (227, 192, 248), (211, 156, 243),
+ (195, 121, 239), (179, 85, 234), (152, 26, 227), (155, 39, 210),
+ (158, 53, 192), (160, 66, 175), (163, 79, 157), (165, 88, 146),
+ (178, 111, 161), (190, 135, 177), (203, 158, 192), (216, 182, 208),
+ (224, 197, 218), (212, 204, 226), (200, 211, 233), (188, 218, 241),
+ (168, 230, 253), (133, 212, 241), (98, 193, 229), (62, 175, 218),
+ (27, 157, 206), (4, 145, 198), (11, 149, 188), (18, 154, 178),
+ (25, 158, 168), (32, 162, 158), (37, 165, 152), (31, 171, 141),
+ (25, 177, 130), (19, 183, 119), (9, 193, 101), (10, 173, 120),
+ (10, 153, 139), (11, 134, 158), (12, 114, 177), (13, 101, 189),
+ (65, 107, 190), (117, 113, 190), (169, 118, 191), (255, 128, 192)
+ ),
+
+// 111 rw-multi-5
+((0, 255, 128), (0, 200, 128), (0, 164, 128), (0, 128, 128),
+ (27, 155, 155), (55, 183, 183), (68, 196, 196), (82, 210, 210),
+ (128, 255, 255), (100, 214, 227), (73, 173, 200), (36, 118, 164),
+ (0, 64, 128), (55, 78, 142), (110, 92, 156), (137, 98, 162),
+ (164, 105, 169), (255, 128, 192), (227, 128, 192), (200, 128, 192),
+ (173, 128, 192), (146, 128, 192), (137, 128, 192), (128, 128, 192),
+ (183, 128, 219), (219, 128, 237), (255, 128, 255), (255, 100, 227),
+ (255, 73, 200), (255, 59, 186), (255, 46, 173), (255, 18, 146),
+ (255, 0, 128), (200, 28, 100), (173, 41, 86), (146, 55, 73),
+ (137, 80, 61), (128, 105, 50), (128, 125, 43), (128, 146, 36),
+ (128, 255, 0), (100, 227, 14), (73, 200, 28), (45, 173, 41),
+ (18, 146, 55), (9, 137, 59), (0, 128, 64), (0, 100, 105),
+ (0, 73, 146), (0, 18, 228), (14, 16, 214), (28, 14, 200),
+ (55, 27, 145), (82, 41, 91), (105, 52, 45), (128, 64, 0),
+ (128, 92, 110), (128, 105, 164), (128, 119, 219), (141, 137, 237),
+ (155, 155, 255), (169, 169, 255), (183, 183, 255), (210, 210, 255),
+ (237, 237, 255), (251, 238, 210), (247, 220, 165), (243, 203, 121),
+ (239, 188, 84), (236, 174, 47), (222, 174, 51), (208, 174, 55),
+ (179, 174, 62), (165, 178, 79), (151, 183, 96), (131, 190, 127),
+ (112, 198, 159), (102, 202, 174), (93, 206, 190), (80, 211, 211),
+ (105, 186, 206), (156, 136, 197), (175, 130, 179), (194, 124, 162),
+ (192, 138, 148), (190, 153, 134), (186, 183, 106), (183, 213, 78),
+ (186, 234, 76), (192, 235, 92), (198, 237, 108), (201, 238, 116),
+ (204, 239, 124), (208, 240, 134), (163, 216, 133), (119, 192, 131),
+ (74, 168, 130), (55, 130, 130), (109, 131, 131), (164, 133, 133),
+ (191, 134, 134), (219, 135, 135), (255, 136, 136), (226, 152, 133),
+ (169, 183, 126), (145, 196, 123), (122, 209, 120), (122, 206, 129),
+ (122, 203, 139), (122, 197, 157), (122, 190, 176), (122, 180, 207),
+ (138, 178, 191), (170, 174, 160), (178, 173, 152), (186, 172, 144),
+ (196, 171, 134), (172, 172, 158), (147, 174, 183), (123, 175, 207),
+ (82, 177, 248), (89, 189, 215), (97, 201, 183), (101, 207, 167),
+ (105, 213, 151), (117, 233, 97), (117, 229, 112), (117, 225, 127),
+ (117, 221, 142), (116, 214, 167), (131, 205, 156), (146, 196, 145),
+ (176, 177, 123), (206, 159, 101), (255, 128, 64), (245, 135, 73),
+ (226, 150, 92), (218, 156, 100), (210, 162, 108), (212, 154, 121),
+ (214, 147, 134), (217, 131, 159), (221, 116, 185), (225, 101, 210),
+ (227, 91, 227), (209, 65, 209), (204, 58, 204), (199, 52, 199),
+ (184, 31, 184), (198, 69, 198), (212, 107, 212), (225, 146, 225),
+ (248, 209, 248), (234, 205, 223), (221, 201, 199), (194, 193, 150),
+ (167, 185, 101), (140, 176, 52), (122, 171, 20), (105, 159, 47),
+ (89, 147, 75), (45, 114, 147), (42, 120, 134), (40, 126, 121),
+ (36, 137, 95), (31, 149, 70), (26, 160, 44), (23, 168, 27),
+ (23, 110, 88), (23, 95, 103), (23, 81, 119), (23, 52, 149),
+ (22, 33, 169), (53, 62, 137), (84, 91, 106), (115, 121, 74),
+ (166, 169, 22), (166, 137, 42), (167, 105, 62), (168, 74, 82),
+ (169, 42, 102), (170, 21, 115), (138, 53, 127), (106, 85, 138),
+ (43, 148, 161), (32, 158, 165), (22, 169, 169), (31, 156, 160),
+ (40, 142, 151), (49, 129, 143), (64, 107, 128), (78, 109, 114),
+ (92, 110, 100), (105, 112, 87), (119, 113, 73), (128, 114, 64),
+ (111, 120, 71), (94, 126, 79), (76, 133, 86), (59, 139, 93),
+ (48, 143, 98), (67, 122, 108), (86, 102, 118), (105, 81, 128),
+ (137, 47, 145), (110, 72, 153), (83, 97, 160), (56, 122, 168),
+ (29, 148, 176), (11, 164, 181), (45, 129, 183), (79, 94, 184),
+ (113, 60, 186), (148, 25, 188), (170, 2, 189), (173, 42, 149),
+ (177, 83, 108), (180, 123, 68), (186, 190, 1), (186, 188, 2),
+ (186, 186, 4), (185, 184, 5), (185, 181, 6), (184, 180, 7),
+ (199, 195, 51), (214, 211, 96), (228, 226, 140), (243, 242, 184),
+ (253, 252, 213), (244, 252, 222), (236, 252, 230), (227, 252, 239),
+ (213, 253, 253), (213, 253, 244), (213, 253, 235), (213, 253, 226),
+ (213, 253, 217), (213, 254, 211), (213, 245, 220), (212, 236, 229),
+ (212, 226, 239), (212, 217, 248), (211, 211, 254), (220, 213, 245),
+ (230, 215, 235), (239, 217, 226), (255, 220, 210), (255, 198, 204),
+ (255, 176, 197), (255, 154, 191), (255, 131, 184), (255, 117, 180),
+ (226, 129, 196), (197, 141, 211), (167, 152, 227), (119, 172, 253)
+ ),
+
+// 112 rw-blues-black-purple
+((128, 255, 255), (103, 205, 218), (90, 180, 199), (78, 155, 180),
+ (65, 130, 161), (53, 106, 143), (46, 93, 133), (40, 81, 124),
+ (16, 31, 87), (8, 18, 78), (0, 6, 70), (0, 12, 76),
+ (0, 19, 83), (0, 25, 89), (0, 31, 95), (0, 34, 98),
+ (0, 38, 102), (0, 50, 114), (0, 57, 121), (0, 64, 128),
+ (4, 72, 140), (8, 81, 153), (10, 85, 159), (13, 89, 165),
+ (21, 106, 190), (25, 114, 202), (29, 122, 215), (33, 130, 227),
+ (38, 139, 240), (40, 144, 247), (43, 149, 255), (39, 134, 255),
+ (35, 120, 255), (26, 91, 255), (22, 76, 255), (18, 62, 255),
+ (13, 47, 255), (9, 33, 255), (7, 25, 255), (5, 18, 255),
+ (12, 12, 255), (25, 25, 255), (38, 38, 255), (50, 50, 255),
+ (62, 62, 255), (68, 68, 255), (75, 75, 255), (88, 88, 255),
+ (100, 100, 255), (125, 125, 255), (120, 126, 255), (116, 128, 255),
+ (103, 128, 255), (90, 128, 255), (84, 128, 255), (78, 128, 255),
+ (53, 128, 255), (40, 128, 255), (28, 128, 255), (14, 128, 255),
+ (0, 128, 255), (6, 122, 255), (12, 116, 255), (25, 103, 255),
+ (38, 90, 255), (62, 66, 255), (75, 53, 255), (88, 40, 255),
+ (94, 34, 255), (100, 28, 255), (112, 16, 255), (128, 0, 255),
+ (128, 50, 255), (128, 75, 255), (128, 100, 255), (128, 124, 255),
+ (128, 149, 255), (128, 161, 255), (128, 174, 255), (128, 199, 255),
+ (128, 224, 255), (116, 255, 255), (103, 255, 255), (90, 255, 255),
+ (84, 255, 255), (78, 255, 255), (66, 255, 255), (53, 255, 255),
+ (28, 255, 255), (15, 255, 255), (3, 255, 255), (1, 255, 255),
+ (0, 255, 255), (0, 245, 245), (0, 235, 235), (0, 225, 225),
+ (0, 214, 214), (0, 194, 194), (0, 184, 184), (0, 174, 174),
+ (0, 169, 169), (0, 164, 164), (0, 151, 151), (0, 157, 157),
+ (0, 170, 170), (0, 176, 176), (0, 182, 182), (0, 185, 185),
+ (0, 188, 188), (0, 195, 195), (0, 201, 201), (0, 207, 207),
+ (0, 215, 215), (0, 195, 195), (0, 190, 190), (0, 185, 185),
+ (0, 175, 175), (0, 165, 165), (0, 155, 155), (0, 145, 145),
+ (0, 125, 125), (4, 117, 126), (8, 110, 127), (12, 108, 134),
+ (16, 107, 141), (24, 104, 155), (32, 101, 168), (41, 98, 182),
+ (49, 95, 196), (65, 90, 224), (69, 88, 231), (73, 87, 238),
+ (81, 84, 252), (83, 83, 255), (75, 75, 246), (67, 67, 237),
+ (51, 51, 219), (42, 42, 210), (34, 34, 202), (30, 30, 197),
+ (26, 26, 193), (18, 18, 184), (10, 10, 175), (0, 0, 164),
+ (19, 19, 173), (56, 56, 191), (65, 65, 195), (75, 75, 200),
+ (93, 93, 208), (112, 112, 217), (131, 131, 226), (149, 149, 235),
+ (191, 191, 255), (181, 181, 254), (172, 172, 253), (154, 154, 251),
+ (135, 135, 248), (116, 116, 246), (98, 98, 244), (79, 79, 242),
+ (60, 60, 239), (23, 23, 235), (11, 11, 233), (0, 0, 232),
+ (0, 0, 234), (0, 0, 236), (0, 0, 239), (0, 0, 241),
+ (0, 0, 245), (0, 0, 246), (0, 0, 248), (0, 0, 250),
+ (0, 0, 252), (0, 0, 254), (0, 0, 255), (0, 0, 246),
+ (0, 0, 236), (0, 0, 227), (0, 0, 218), (0, 0, 209),
+ (0, 0, 199), (0, 0, 190), (0, 0, 181), (0, 0, 172),
+ (0, 6, 157), (0, 9, 155), (0, 12, 154), (0, 19, 151),
+ (0, 25, 148), (0, 31, 144), (0, 38, 141), (0, 44, 138),
+ (0, 50, 135), (0, 56, 132), (0, 64, 128), (0, 70, 134),
+ (0, 76, 140), (0, 83, 147), (0, 89, 153), (0, 95, 159),
+ (0, 102, 166), (0, 108, 172), (0, 114, 178), (0, 120, 184),
+ (0, 128, 192), (0, 140, 198), (0, 153, 204), (0, 165, 210),
+ (0, 178, 217), (0, 190, 223), (0, 202, 229), (0, 215, 235),
+ (0, 227, 241), (0, 240, 247), (0, 252, 254), (0, 255, 255),
+ (12, 243, 249), (25, 230, 243), (38, 218, 237), (50, 205, 230),
+ (62, 193, 224), (75, 181, 218), (88, 168, 212), (100, 156, 206),
+ (112, 143, 200), (128, 128, 192), (128, 140, 198), (128, 153, 204),
+ (128, 165, 210), (128, 178, 217), (128, 190, 223), (128, 202, 229),
+ (128, 215, 235), (128, 227, 241), (128, 240, 247), (128, 255, 255),
+ (128, 230, 255), (128, 205, 255), (128, 180, 255), (128, 155, 255),
+ (128, 130, 255), (128, 106, 255), (128, 81, 255), (128, 56, 255),
+ (128, 31, 255), (128, 0, 255), (122, 0, 243), (116, 0, 230),
+ (109, 0, 218), (103, 0, 205), (97, 0, 193), (90, 0, 181),
+ (84, 0, 168), (78, 0, 156), (72, 0, 143), (64, 0, 128)
+ ),
+
+// 113 rw-multi-colors-6
+((255, 128, 64), (255, 156, 108), (255, 175, 137), (255, 194, 166),
+ (227, 166, 144), (200, 138, 122), (186, 124, 111), (173, 110, 100),
+ (128, 64, 64), (144, 84, 84), (161, 104, 104), (183, 130, 130),
+ (205, 156, 156), (161, 177, 136), (117, 199, 116), (95, 209, 106),
+ (73, 220, 97), (0, 255, 64), (37, 255, 92), (75, 255, 120),
+ (112, 255, 148), (150, 255, 176), (162, 255, 185), (174, 255, 194),
+ (154, 173, 111), (141, 118, 55), (128, 64, 0), (155, 88, 21),
+ (183, 113, 43), (196, 125, 53), (210, 137, 64), (237, 161, 86),
+ (255, 177, 100), (145, 101, 167), (90, 63, 200), (36, 25, 233),
+ (36, 30, 244), (36, 36, 255), (54, 54, 255), (72, 72, 255),
+ (168, 168, 255), (186, 159, 255), (205, 151, 255), (224, 142, 255),
+ (243, 134, 255), (249, 131, 255), (255, 128, 255), (246, 100, 246),
+ (238, 73, 238), (221, 18, 221), (213, 9, 213), (205, 0, 205),
+ (195, 0, 195), (185, 0, 185), (176, 0, 176), (168, 0, 168),
+ (96, 55, 178), (60, 82, 183), (24, 110, 189), (23, 127, 197),
+ (23, 145, 206), (34, 153, 212), (46, 162, 219), (70, 179, 233),
+ (93, 196, 246), (85, 183, 230), (61, 158, 205), (38, 134, 180),
+ (19, 114, 159), (0, 94, 138), (33, 122, 163), (67, 149, 188),
+ (133, 204, 239), (127, 203, 219), (122, 202, 200), (88, 181, 145),
+ (55, 161, 91), (38, 151, 63), (22, 141, 36), (0, 128, 0),
+ (3, 155, 3), (8, 210, 8), (24, 232, 24), (40, 255, 40),
+ (53, 255, 53), (67, 255, 67), (94, 255, 94), (120, 255, 120),
+ (108, 226, 108), (78, 197, 78), (49, 169, 49), (34, 154, 34),
+ (19, 140, 19), (0, 121, 0), (55, 123, 14), (110, 124, 28),
+ (164, 126, 41), (255, 119, 52), (255, 110, 39), (255, 102, 27),
+ (255, 97, 20), (255, 93, 14), (255, 87, 6), (255, 109, 38),
+ (255, 152, 102), (255, 170, 128), (255, 188, 155), (248, 174, 138),
+ (241, 161, 122), (228, 134, 88), (214, 107, 55), (191, 63, 0),
+ (205, 97, 43), (232, 164, 130), (239, 180, 152), (246, 197, 174),
+ (255, 219, 202), (234, 183, 159), (213, 147, 115), (192, 111, 72),
+ (157, 51, 0), (163, 72, 11), (170, 93, 23), (173, 103, 29),
+ (177, 114, 35), (188, 148, 54), (194, 156, 68), (200, 164, 82),
+ (206, 172, 95), (216, 186, 118), (218, 191, 127), (221, 196, 137),
+ (227, 205, 155), (232, 215, 174), (241, 231, 205), (244, 209, 202),
+ (250, 165, 197), (252, 146, 194), (255, 128, 192), (255, 122, 189),
+ (255, 116, 186), (255, 103, 180), (255, 91, 173), (255, 78, 167),
+ (255, 70, 163), (255, 46, 151), (255, 40, 148), (255, 35, 145),
+ (255, 15, 135), (244, 12, 128), (233, 9, 121), (222, 5, 114),
+ (204, 0, 102), (199, 0, 99), (194, 0, 97), (184, 0, 92),
+ (174, 0, 87), (164, 0, 82), (157, 0, 79), (150, 0, 76),
+ (143, 0, 72), (125, 0, 63), (139, 27, 70), (153, 55, 77),
+ (181, 110, 91), (209, 164, 105), (237, 219, 119), (255, 255, 128),
+ (145, 210, 138), (118, 199, 140), (91, 188, 143), (36, 166, 148),
+ (0, 151, 151), (0, 146, 173), (0, 141, 196), (0, 136, 218),
+ (0, 128, 255), (42, 143, 200), (84, 157, 145), (126, 172, 91),
+ (168, 186, 36), (196, 196, 0), (189, 189, 0), (182, 182, 0),
+ (168, 168, 0), (166, 166, 0), (164, 164, 0), (155, 155, 0),
+ (146, 146, 0), (136, 136, 0), (121, 121, 0), (145, 133, 54),
+ (169, 145, 108), (193, 157, 162), (216, 169, 217), (232, 177, 252),
+ (223, 150, 251), (215, 122, 250), (206, 94, 249), (198, 67, 248),
+ (192, 49, 247), (170, 40, 221), (149, 30, 194), (127, 21, 168),
+ (91, 5, 124), (122, 44, 152), (153, 84, 179), (184, 123, 206),
+ (215, 162, 234), (235, 188, 252), (185, 183, 215), (134, 178, 179),
+ (84, 173, 142), (33, 167, 106), (0, 164, 82), (34, 184, 109),
+ (67, 203, 135), (101, 223, 162), (157, 255, 206), (123, 250, 186),
+ (90, 244, 167), (56, 239, 147), (22, 234, 128), (0, 230, 115),
+ (10, 235, 123), (20, 241, 130), (30, 246, 138), (40, 251, 146),
+ (47, 255, 151), (37, 225, 131), (27, 196, 111), (17, 166, 91),
+ (0, 117, 58), (41, 147, 94), (83, 176, 129), (124, 206, 165),
+ (166, 236, 201), (193, 255, 224), (179, 200, 190), (165, 145, 155),
+ (151, 91, 121), (137, 36, 86), (128, 0, 64), (150, 8, 100),
+ (173, 15, 136), (195, 23, 172), (232, 36, 232), (229, 39, 210),
+ (227, 41, 188), (224, 44, 166), (222, 46, 144), (220, 48, 130),
+ (227, 88, 154), (234, 127, 178), (241, 167, 202), (252, 233, 242)
+ ),
+
+// 114 rw-multi-reds-oranges
+((255, 0, 0), (255, 55, 55), (255, 91, 91), (255, 128, 128),
+ (251, 147, 132), (247, 167, 136), (245, 177, 138), (243, 187, 140),
+ (237, 219, 146), (232, 185, 124), (228, 152, 103), (222, 107, 74),
+ (216, 63, 46), (219, 77, 61), (222, 92, 77), (223, 99, 85),
+ (225, 106, 93), (230, 130, 119), (218, 118, 107), (206, 107, 96),
+ (194, 95, 84), (182, 84, 73), (178, 80, 69), (174, 77, 66),
+ (181, 111, 59), (186, 133, 54), (191, 156, 49), (200, 124, 48),
+ (209, 92, 48), (214, 75, 48), (219, 59, 48), (228, 27, 47),
+ (234, 6, 46), (229, 11, 106), (226, 13, 136), (224, 16, 166),
+ (221, 18, 166), (219, 21, 166), (217, 23, 156), (215, 25, 147),
+ (206, 34, 95), (206, 52, 105), (206, 70, 116), (206, 88, 127),
+ (206, 106, 138), (206, 112, 141), (207, 118, 145), (213, 137, 160),
+ (220, 155, 175), (233, 193, 205), (233, 177, 203), (233, 162, 202),
+ (229, 119, 189), (226, 76, 176), (223, 40, 165), (220, 5, 155),
+ (221, 23, 163), (221, 32, 167), (222, 41, 171), (226, 41, 155),
+ (230, 41, 140), (233, 37, 123), (237, 34, 107), (244, 28, 73),
+ (250, 21, 39), (252, 43, 20), (249, 68, 23), (246, 94, 26),
+ (243, 115, 28), (241, 136, 31), (236, 124, 36), (232, 111, 40),
+ (222, 86, 50), (218, 90, 53), (215, 95, 57), (210, 112, 61),
+ (206, 130, 66), (204, 138, 68), (202, 147, 70), (199, 158, 73),
+ (193, 148, 79), (182, 128, 90), (186, 126, 86), (190, 125, 82),
+ (198, 132, 73), (207, 139, 65), (225, 154, 47), (242, 168, 30),
+ (248, 168, 24), (242, 159, 29), (237, 151, 35), (234, 146, 37),
+ (232, 142, 40), (228, 136, 44), (222, 141, 50), (217, 146, 55),
+ (211, 151, 61), (198, 161, 74), (194, 163, 78), (190, 165, 82),
+ (188, 166, 84), (186, 168, 86), (183, 169, 89), (190, 145, 94),
+ (203, 97, 104), (208, 77, 108), (214, 58, 113), (212, 60, 118),
+ (210, 62, 123), (205, 67, 133), (201, 71, 143), (194, 78, 159),
+ (202, 70, 153), (217, 55, 142), (221, 51, 139), (225, 48, 136),
+ (230, 43, 132), (234, 39, 121), (238, 34, 110), (242, 30, 98),
+ (249, 23, 80), (234, 37, 88), (220, 52, 96), (213, 59, 100),
+ (206, 66, 104), (182, 90, 118), (192, 112, 137), (202, 135, 155),
+ (212, 157, 174), (228, 194, 205), (223, 176, 191), (219, 159, 177),
+ (210, 123, 149), (201, 88, 121), (186, 29, 75), (196, 44, 89),
+ (215, 74, 116), (223, 86, 127), (231, 99, 138), (224, 91, 130),
+ (218, 84, 123), (205, 68, 109), (192, 53, 94), (179, 37, 80),
+ (171, 27, 70), (139, 22, 57), (131, 20, 53), (123, 19, 50),
+ (96, 15, 39), (130, 39, 85), (164, 64, 132), (198, 88, 178),
+ (255, 128, 255), (251, 118, 238), (248, 108, 222), (241, 88, 189),
+ (234, 69, 156), (228, 49, 124), (223, 36, 102), (221, 62, 90),
+ (220, 87, 77), (216, 155, 44), (212, 152, 43), (208, 150, 42),
+ (201, 144, 40), (193, 139, 38), (186, 134, 35), (181, 130, 34),
+ (190, 110, 25), (192, 105, 22), (195, 100, 20), (200, 90, 15),
+ (203, 84, 12), (198, 78, 17), (193, 71, 22), (188, 65, 27),
+ (179, 54, 36), (194, 87, 41), (210, 120, 45), (225, 153, 50),
+ (241, 185, 54), (251, 207, 57), (244, 196, 64), (236, 186, 72),
+ (222, 164, 86), (219, 160, 88), (217, 157, 91), (213, 160, 95),
+ (209, 162, 100), (205, 165, 104), (198, 169, 111), (168, 184, 141),
+ (137, 200, 171), (107, 215, 201), (77, 231, 231), (57, 241, 251),
+ (95, 196, 227), (134, 151, 203), (172, 106, 179), (211, 61, 155),
+ (236, 32, 139), (230, 38, 133), (224, 44, 127), (218, 50, 122),
+ (208, 60, 112), (207, 61, 131), (207, 61, 150), (206, 62, 169),
+ (205, 63, 188), (204, 64, 201), (215, 53, 174), (225, 43, 146),
+ (236, 32, 119), (247, 21, 92), (254, 14, 74), (250, 43, 65),
+ (246, 72, 56), (242, 101, 48), (235, 149, 33), (228, 131, 40),
+ (220, 114, 48), (213, 96, 55), (206, 79, 62), (201, 67, 67),
+ (208, 94, 60), (216, 122, 52), (223, 149, 45), (230, 176, 38),
+ (235, 194, 33), (239, 185, 29), (242, 176, 26), (246, 167, 22),
+ (252, 152, 16), (236, 146, 32), (219, 140, 48), (203, 133, 64),
+ (187, 127, 80), (176, 123, 91), (186, 139, 111), (195, 156, 131),
+ (205, 172, 152), (215, 188, 172), (221, 199, 185), (222, 179, 176),
+ (223, 160, 167), (224, 140, 158), (225, 108, 143), (230, 103, 139),
+ (235, 99, 136), (240, 94, 132), (245, 89, 128), (248, 86, 126),
+ (250, 122, 154), (251, 159, 181), (253, 195, 209), (255, 255, 255)
+ ),
+
+// 115 rw-yellows-browns-goldish
+((255, 255, 128), (246, 246, 113), (241, 241, 105), (236, 237, 97),
+ (231, 232, 89), (227, 228, 82), (224, 226, 78), (222, 224, 74),
+ (213, 215, 58), (208, 210, 50), (203, 206, 43), (198, 201, 35),
+ (194, 197, 27), (192, 196, 24), (191, 195, 21), (192, 196, 22),
+ (194, 198, 24), (201, 205, 31), (204, 208, 34), (207, 211, 37),
+ (210, 214, 40), (213, 217, 43), (214, 218, 44), (216, 220, 46),
+ (223, 227, 53), (226, 230, 56), (229, 233, 59), (230, 233, 60),
+ (231, 233, 62), (230, 231, 62), (229, 230, 62), (228, 226, 61),
+ (226, 222, 60), (222, 215, 59), (220, 211, 58), (219, 208, 57),
+ (217, 204, 56), (215, 200, 56), (214, 198, 55), (214, 197, 55),
+ (210, 189, 54), (207, 185, 53), (205, 182, 53), (202, 179, 53),
+ (200, 177, 54), (199, 175, 54), (198, 174, 55), (195, 172, 55),
+ (193, 169, 56), (188, 164, 57), (185, 161, 57), (183, 158, 58),
+ (180, 155, 58), (178, 153, 59), (176, 151, 59), (175, 150, 59),
+ (172, 154, 58), (173, 161, 56), (174, 169, 55), (174, 176, 53),
+ (175, 184, 51), (175, 187, 50), (176, 191, 49), (176, 199, 48),
+ (177, 206, 46), (179, 221, 42), (179, 228, 40), (180, 236, 39),
+ (180, 239, 38), (181, 243, 37), (181, 250, 35), (182, 252, 35),
+ (176, 231, 39), (173, 221, 41), (170, 211, 43), (167, 200, 45),
+ (165, 190, 48), (163, 185, 49), (162, 180, 50), (159, 169, 52),
+ (156, 159, 54), (150, 138, 58), (147, 128, 60), (145, 118, 62),
+ (143, 111, 63), (141, 105, 65), (148, 109, 63), (155, 114, 60),
+ (168, 122, 56), (175, 126, 53), (182, 131, 51), (185, 133, 50),
+ (189, 135, 49), (196, 139, 46), (202, 144, 44), (209, 148, 42),
+ (216, 152, 39), (230, 161, 35), (234, 166, 37), (238, 171, 39),
+ (238, 173, 43), (238, 176, 47), (238, 181, 54), (237, 187, 62),
+ (237, 197, 76), (236, 202, 83), (236, 207, 91), (236, 209, 94),
+ (236, 212, 98), (236, 217, 106), (235, 222, 113), (235, 228, 121),
+ (235, 233, 128), (230, 235, 133), (227, 232, 131), (225, 230, 130),
+ (221, 226, 126), (217, 221, 122), (212, 217, 119), (208, 212, 115),
+ (199, 204, 108), (194, 199, 104), (190, 195, 100), (188, 192, 98),
+ (186, 190, 97), (182, 186, 93), (177, 181, 89), (173, 177, 86),
+ (172, 176, 85), (183, 181, 92), (186, 182, 93), (189, 184, 95),
+ (194, 187, 98), (200, 190, 102), (205, 192, 105), (211, 195, 108),
+ (222, 201, 115), (227, 203, 118), (233, 206, 121), (236, 207, 123),
+ (239, 209, 125), (244, 212, 128), (251, 215, 132), (250, 211, 127),
+ (249, 208, 122), (247, 201, 112), (247, 199, 109), (247, 197, 107),
+ (246, 193, 102), (245, 190, 97), (244, 186, 92), (243, 183, 87),
+ (242, 176, 77), (241, 174, 74), (241, 172, 72), (240, 168, 67),
+ (239, 164, 61), (237, 162, 60), (235, 159, 60), (233, 157, 59),
+ (231, 155, 58), (227, 150, 56), (226, 149, 56), (225, 148, 56),
+ (223, 145, 55), (221, 143, 54), (219, 141, 53), (217, 138, 53),
+ (213, 134, 51), (212, 132, 50), (211, 131, 50), (210, 137, 50),
+ (208, 143, 50), (207, 148, 50), (206, 154, 50), (204, 160, 50),
+ (203, 166, 50), (202, 171, 50), (200, 177, 50), (199, 183, 50),
+ (198, 189, 50), (196, 194, 50), (195, 200, 50), (194, 206, 50),
+ (195, 216, 46), (197, 217, 45), (199, 218, 44), (202, 221, 41),
+ (206, 224, 38), (209, 227, 35), (212, 229, 33), (216, 232, 30),
+ (219, 235, 27), (222, 238, 24), (226, 240, 22), (229, 243, 19),
+ (232, 246, 16), (236, 249, 13), (239, 251, 11), (240, 252, 10),
+ (237, 248, 9), (233, 245, 9), (230, 241, 8), (226, 238, 8),
+ (223, 234, 7), (220, 231, 7), (216, 227, 6), (213, 224, 6),
+ (210, 220, 5), (206, 217, 4), (203, 213, 4), (200, 210, 3),
+ (196, 206, 3), (192, 202, 2), (192, 196, 5), (192, 191, 8),
+ (192, 185, 12), (192, 179, 15), (192, 174, 18), (192, 168, 21),
+ (193, 162, 25), (193, 156, 28), (193, 151, 31), (193, 145, 34),
+ (193, 139, 38), (193, 134, 41), (193, 128, 44), (194, 121, 48),
+ (196, 121, 46), (199, 121, 43), (201, 121, 41), (204, 121, 38),
+ (206, 121, 36), (208, 121, 34), (211, 121, 31), (213, 121, 29),
+ (216, 121, 26), (218, 121, 24), (220, 121, 22), (223, 121, 19),
+ (225, 121, 17), (228, 121, 14), (224, 127, 15), (220, 133, 17),
+ (217, 140, 18), (213, 146, 19), (209, 152, 21), (205, 158, 22),
+ (201, 164, 23), (198, 170, 25), (194, 177, 26), (190, 183, 27),
+ (186, 189, 29), (182, 195, 30), (179, 201, 31), (174, 209, 33)
+ ),
+
+// 116 rw-multi-blues-with-gray
+((0, 0, 160), (17, 17, 169), (26, 26, 173), (35, 35, 178),
+ (43, 43, 182), (52, 52, 187), (56, 56, 189), (61, 61, 191),
+ (78, 78, 200), (86, 86, 204), (95, 95, 209), (104, 104, 213),
+ (113, 113, 218), (121, 121, 222), (130, 130, 227), (134, 134, 229),
+ (139, 139, 231), (156, 156, 240), (164, 164, 244), (173, 173, 249),
+ (174, 177, 250), (176, 182, 252), (172, 181, 250), (168, 180, 249),
+ (150, 174, 243), (141, 171, 240), (133, 169, 237), (124, 166, 234),
+ (116, 164, 231), (111, 162, 229), (107, 161, 228), (98, 158, 225),
+ (90, 156, 223), (72, 150, 217), (63, 147, 214), (55, 145, 211),
+ (46, 142, 208), (38, 140, 205), (33, 138, 203), (29, 137, 202),
+ (12, 132, 196), (10, 131, 194), (8, 130, 193), (16, 132, 194),
+ (24, 134, 195), (28, 135, 195), (32, 136, 196), (39, 137, 197),
+ (47, 139, 198), (63, 143, 200), (71, 145, 201), (79, 147, 202),
+ (86, 148, 203), (94, 150, 204), (98, 151, 204), (102, 152, 205),
+ (118, 156, 207), (126, 158, 208), (134, 160, 209), (142, 162, 210),
+ (150, 164, 211), (154, 165, 211), (158, 166, 212), (165, 167, 213),
+ (168, 168, 213), (165, 170, 216), (164, 170, 217), (163, 171, 218),
+ (162, 171, 218), (161, 172, 219), (160, 173, 221), (159, 174, 222),
+ (156, 175, 224), (155, 176, 225), (154, 177, 227), (152, 178, 228),
+ (151, 179, 229), (150, 179, 230), (150, 179, 231), (148, 180, 232),
+ (147, 181, 233), (144, 183, 236), (143, 183, 237), (142, 184, 238),
+ (141, 184, 239), (140, 185, 240), (134, 180, 237), (129, 176, 233),
+ (118, 166, 226), (112, 161, 222), (107, 157, 219), (104, 155, 217),
+ (101, 153, 216), (95, 148, 212), (90, 143, 209), (84, 139, 205),
+ (79, 134, 202), (67, 125, 195), (61, 120, 191), (56, 115, 188),
+ (53, 113, 186), (51, 111, 184), (45, 106, 181), (40, 101, 178),
+ (28, 92, 171), (25, 91, 168), (23, 90, 166), (24, 92, 166),
+ (25, 95, 167), (28, 99, 167), (30, 104, 168), (32, 108, 168),
+ (34, 113, 169), (39, 122, 170), (40, 124, 170), (41, 126, 170),
+ (43, 131, 171), (45, 135, 171), (47, 139, 172), (50, 144, 172),
+ (54, 153, 173), (56, 157, 173), (58, 162, 174), (59, 164, 174),
+ (61, 166, 175), (63, 171, 175), (65, 175, 176), (43, 171, 171),
+ (68, 181, 177), (74, 174, 181), (75, 172, 182), (77, 170, 183),
+ (80, 166, 185), (83, 163, 187), (86, 159, 189), (89, 155, 190),
+ (95, 148, 194), (98, 144, 196), (101, 141, 198), (102, 139, 199),
+ (104, 137, 200), (107, 133, 202), (110, 130, 204), (113, 126, 206),
+ (116, 122, 208), (122, 115, 212), (123, 113, 213), (125, 112, 214),
+ (128, 108, 215), (132, 103, 218), (129, 102, 220), (126, 101, 221),
+ (120, 99, 224), (118, 98, 225), (117, 98, 226), (114, 97, 228),
+ (111, 96, 229), (108, 95, 231), (105, 94, 232), (102, 93, 234),
+ (100, 93, 236), (94, 91, 239), (92, 90, 239), (91, 90, 240),
+ (88, 89, 242), (85, 88, 244), (82, 87, 245), (79, 86, 247),
+ (73, 84, 250), (71, 83, 251), (69, 83, 252), (69, 84, 247),
+ (69, 85, 241), (68, 86, 236), (68, 88, 230), (68, 89, 225),
+ (67, 90, 219), (67, 91, 214), (66, 92, 208), (66, 93, 203),
+ (66, 94, 197), (65, 95, 192), (65, 96, 186), (64, 98, 181),
+ (64, 100, 170), (63, 100, 167), (63, 101, 164), (63, 102, 159),
+ (63, 103, 153), (62, 104, 148), (62, 106, 142), (61, 107, 137),
+ (61, 107, 135), (67, 112, 139), (72, 116, 143), (78, 121, 147),
+ (84, 126, 152), (90, 131, 156), (95, 135, 160), (101, 140, 164),
+ (107, 145, 168), (112, 150, 172), (118, 154, 176), (124, 159, 180),
+ (130, 164, 184), (135, 169, 189), (141, 173, 193), (147, 178, 197),
+ (152, 183, 201), (158, 187, 205), (164, 192, 209), (170, 197, 213),
+ (175, 202, 218), (183, 208, 223), (176, 207, 220), (169, 206, 218),
+ (162, 204, 215), (155, 203, 212), (148, 202, 210), (141, 201, 207),
+ (134, 199, 205), (128, 198, 202), (121, 197, 199), (114, 196, 197),
+ (107, 195, 194), (100, 193, 192), (93, 192, 189), (86, 191, 186),
+ (79, 190, 184), (72, 188, 181), (65, 187, 178), (58, 186, 176),
+ (51, 185, 173), (44, 184, 170), (35, 182, 167), (33, 173, 171),
+ (32, 165, 175), (30, 156, 179), (28, 148, 184), (27, 139, 188),
+ (25, 131, 192), (24, 122, 196), (22, 114, 200), (20, 105, 204),
+ (19, 97, 208), (17, 88, 212), (15, 80, 216), (14, 71, 221),
+ (12, 63, 225), (10, 54, 229), (9, 46, 233), (7, 37, 237),
+ (5, 28, 241), (4, 20, 245), (2, 11, 250), (0, 0, 255)
+ ),
+
+// 117 rw-greens-multi
+((0, 128, 64), (0, 152, 64), (0, 164, 64), (0, 176, 64),
+ (0, 187, 64), (0, 199, 64), (0, 205, 64), (0, 211, 64),
+ (0, 235, 64), (6, 239, 61), (12, 243, 58), (24, 231, 52),
+ (36, 219, 46), (48, 207, 40), (60, 195, 34), (66, 189, 31),
+ (72, 184, 28), (96, 160, 16), (108, 148, 10), (120, 136, 4),
+ (118, 138, 8), (116, 140, 12), (110, 146, 18), (104, 152, 24),
+ (80, 176, 48), (68, 187, 60), (56, 199, 72), (44, 211, 84),
+ (32, 223, 96), (26, 229, 102), (20, 235, 108), (8, 247, 120),
+ (0, 255, 128), (21, 255, 138), (31, 255, 143), (42, 255, 149),
+ (52, 255, 154), (62, 255, 159), (67, 255, 161), (73, 255, 164),
+ (94, 255, 174), (100, 252, 173), (106, 250, 172), (102, 244, 161),
+ (98, 239, 150), (95, 236, 144), (93, 234, 139), (88, 229, 128),
+ (84, 224, 117), (75, 213, 95), (70, 207, 84), (66, 202, 73),
+ (67, 199, 70), (68, 197, 68), (70, 196, 69), (73, 195, 71),
+ (82, 192, 75), (87, 190, 77), (92, 188, 80), (96, 186, 82),
+ (101, 184, 85), (103, 183, 86), (106, 182, 87), (75, 213, 96),
+ (114, 179, 91), (132, 193, 102), (140, 200, 107), (149, 207, 112),
+ (153, 210, 114), (158, 214, 117), (167, 221, 122), (176, 228, 128),
+ (193, 241, 138), (198, 244, 136), (204, 247, 135), (200, 241, 122),
+ (196, 236, 110), (194, 233, 104), (192, 230, 98), (188, 224, 85),
+ (184, 218, 73), (176, 206, 48), (172, 200, 35), (168, 195, 23),
+ (166, 193, 19), (165, 191, 15), (164, 197, 16), (164, 202, 18),
+ (162, 214, 21), (161, 219, 22), (160, 225, 23), (160, 227, 24),
+ (160, 230, 25), (159, 236, 26), (158, 242, 28), (157, 247, 29),
+ (157, 251, 30), (151, 244, 25), (148, 240, 22), (145, 237, 20),
+ (143, 235, 18), (142, 234, 17), (138, 230, 15), (135, 227, 12),
+ (129, 220, 7), (125, 215, 5), (122, 210, 3), (121, 208, 3),
+ (120, 206, 3), (118, 203, 3), (115, 199, 3), (113, 195, 3),
+ (111, 192, 3), (107, 184, 3), (106, 182, 3), (105, 180, 3),
+ (102, 176, 3), (101, 174, 2), (98, 169, 2), (95, 164, 2),
+ (89, 154, 2), (86, 149, 2), (83, 144, 2), (81, 141, 2),
+ (80, 139, 2), (77, 134, 2), (74, 128, 2), (71, 123, 2),
+ (69, 120, 1), (87, 139, 12), (91, 143, 14), (96, 148, 17),
+ (105, 158, 22), (114, 167, 28), (122, 176, 33), (131, 186, 38),
+ (149, 204, 49), (150, 213, 57), (152, 222, 65), (145, 223, 69),
+ (139, 224, 73), (127, 226, 80), (114, 228, 87), (102, 230, 95),
+ (89, 232, 102), (64, 236, 116), (58, 237, 120), (52, 238, 124),
+ (39, 240, 131), (31, 241, 136), (32, 240, 130), (34, 238, 125),
+ (36, 236, 114), (37, 235, 111), (38, 234, 108), (39, 233, 103),
+ (40, 232, 97), (42, 230, 92), (43, 229, 86), (45, 230, 100),
+ (45, 227, 77), (74, 222, 76), (81, 220, 76), (88, 219, 76),
+ (102, 217, 75), (116, 214, 75), (130, 212, 74), (145, 209, 74),
+ (173, 204, 73), (185, 202, 72), (197, 200, 72), (179, 193, 77),
+ (160, 186, 82), (142, 180, 88), (123, 173, 93), (105, 166, 98),
+ (86, 160, 104), (68, 153, 109), (49, 146, 114), (31, 139, 119),
+ (12, 132, 124), (0, 128, 128), (12, 140, 128), (24, 152, 128),
+ (48, 176, 128), (54, 182, 128), (60, 188, 128), (72, 199, 128),
+ (84, 211, 128), (96, 223, 128), (108, 235, 128), (128, 255, 128),
+ (128, 243, 122), (128, 231, 116), (128, 219, 110), (128, 207, 104),
+ (128, 195, 98), (128, 184, 92), (128, 172, 86), (128, 160, 80),
+ (128, 148, 74), (128, 136, 68), (128, 128, 64), (137, 137, 77),
+ (147, 147, 90), (156, 156, 103), (166, 166, 116), (175, 175, 129),
+ (184, 184, 142), (194, 194, 155), (203, 203, 168), (212, 212, 181),
+ (222, 222, 194), (228, 228, 203), (207, 224, 184), (185, 220, 165),
+ (164, 215, 146), (142, 211, 127), (121, 207, 108), (100, 203, 89),
+ (78, 198, 70), (57, 194, 51), (36, 190, 32), (0, 183, 0),
+ (0, 190, 0), (0, 196, 0), (0, 203, 0), (0, 209, 0),
+ (0, 216, 0), (0, 222, 0), (0, 229, 0), (0, 236, 0),
+ (0, 242, 0), (0, 249, 0), (0, 253, 0), (0, 241, 12),
+ (0, 230, 24), (0, 218, 36), (0, 206, 48), (0, 194, 60),
+ (0, 183, 72), (0, 171, 84), (0, 159, 96), (0, 148, 108),
+ (0, 136, 120), (0, 128, 128), (16, 140, 132), (32, 152, 136),
+ (47, 164, 139), (63, 176, 143), (79, 188, 147), (94, 199, 150),
+ (110, 211, 154), (126, 223, 158), (142, 235, 162), (168, 255, 168)
+ ),
+
+// 118 rw-browns-orange-yellow-with-blues
+((128, 64, 64), (140, 76, 76), (146, 81, 81), (153, 87, 87),
+ (159, 93, 93), (165, 99, 99), (168, 102, 102), (172, 105, 105),
+ (187, 119, 119), (194, 120, 113), (201, 121, 107), (208, 122, 101),
+ (216, 123, 96), (223, 124, 90), (230, 125, 84), (233, 125, 81),
+ (237, 126, 78), (255, 128, 64), (255, 131, 69), (255, 135, 75),
+ (255, 138, 80), (255, 142, 86), (255, 144, 89), (255, 146, 92),
+ (255, 153, 103), (255, 156, 108), (255, 160, 114), (254, 156, 109),
+ (254, 153, 105), (253, 148, 98), (252, 144, 92), (251, 136, 80),
+ (250, 127, 68), (247, 109, 43), (245, 100, 30), (244, 92, 18),
+ (239, 84, 9), (234, 76, 0), (230, 75, 0), (226, 74, 0),
+ (210, 68, 0), (202, 65, 0), (194, 63, 0), (186, 60, 0),
+ (178, 58, 0), (174, 56, 0), (170, 55, 0), (166, 54, 0),
+ (163, 61, 3), (157, 74, 9), (154, 80, 12), (151, 87, 15),
+ (148, 93, 18), (145, 100, 21), (143, 103, 22), (142, 106, 24),
+ (144, 121, 29), (149, 125, 30), (155, 130, 31), (160, 134, 32),
+ (166, 139, 33), (169, 141, 33), (172, 144, 34), (177, 148, 35),
+ (183, 153, 36), (191, 160, 38), (195, 166, 50), (200, 172, 62),
+ (202, 175, 68), (205, 178, 74), (210, 184, 86), (214, 191, 98),
+ (223, 203, 122), (229, 210, 137), (235, 218, 152), (236, 219, 144),
+ (238, 220, 137), (239, 220, 133), (240, 221, 129), (241, 222, 122),
+ (243, 223, 114), (246, 225, 99), (247, 226, 91), (249, 227, 84),
+ (249, 227, 82), (250, 228, 80), (245, 222, 72), (239, 217, 64),
+ (228, 205, 48), (223, 199, 40), (218, 194, 33), (215, 191, 29),
+ (212, 188, 25), (207, 182, 17), (199, 174, 5), (205, 156, 5),
+ (211, 137, 4), (223, 101, 3), (228, 82, 2), (234, 64, 2),
+ (237, 55, 2), (240, 46, 2), (246, 27, 1), (252, 9, 1),
+ (240, 0, 0), (225, 0, 0), (211, 0, 0), (204, 0, 0),
+ (197, 0, 0), (182, 0, 0), (168, 0, 0), (153, 0, 0),
+ (139, 0, 0), (132, 20, 20), (139, 30, 30), (146, 41, 41),
+ (161, 61, 61), (175, 81, 81), (190, 102, 102), (204, 122, 122),
+ (233, 163, 163), (244, 178, 178), (255, 193, 193), (251, 193, 188),
+ (248, 193, 183), (240, 194, 173), (233, 194, 164), (226, 195, 154),
+ (219, 196, 144), (204, 197, 124), (200, 197, 119), (197, 197, 115),
+ (186, 198, 100), (189, 200, 107), (192, 203, 113), (195, 205, 120),
+ (201, 210, 133), (204, 212, 139), (207, 215, 146), (208, 216, 149),
+ (210, 217, 152), (213, 220, 159), (214, 221, 162), (218, 209, 172),
+ (223, 197, 182), (231, 172, 201), (233, 166, 206), (236, 160, 211),
+ (240, 148, 221), (244, 136, 231), (249, 124, 240), (255, 106, 255),
+ (237, 121, 242), (232, 124, 238), (227, 128, 235), (218, 135, 229),
+ (209, 142, 222), (200, 150, 216), (191, 157, 209), (182, 164, 203),
+ (172, 171, 196), (169, 157, 186), (170, 148, 182), (171, 139, 179),
+ (172, 121, 172), (173, 103, 166), (175, 85, 159), (176, 67, 152),
+ (179, 31, 138), (180, 17, 133), (181, 4, 128), (182, 20, 122),
+ (184, 35, 115), (185, 51, 109), (186, 67, 102), (188, 83, 96),
+ (189, 98, 89), (191, 114, 83), (192, 130, 77), (193, 145, 70),
+ (194, 153, 67), (198, 159, 78), (202, 166, 90), (205, 172, 101),
+ (213, 185, 124), (215, 188, 130), (217, 191, 136), (221, 197, 147),
+ (224, 204, 159), (230, 213, 176), (224, 208, 167), (219, 203, 157),
+ (213, 198, 148), (208, 193, 138), (202, 188, 129), (196, 183, 119),
+ (191, 178, 110), (185, 173, 100), (180, 168, 91), (177, 166, 86),
+ (184, 157, 77), (190, 147, 68), (197, 138, 59), (204, 129, 50),
+ (210, 120, 41), (217, 110, 32), (224, 101, 23), (230, 92, 13),
+ (240, 78, 0), (242, 85, 10), (243, 92, 19), (245, 99, 29),
+ (246, 106, 38), (248, 113, 48), (249, 120, 58), (251, 127, 67),
+ (253, 135, 77), (254, 142, 86), (255, 145, 91), (255, 151, 100),
+ (255, 157, 110), (255, 164, 119), (254, 170, 129), (254, 176, 138),
+ (254, 182, 148), (254, 189, 157), (254, 195, 167), (253, 204, 181),
+ (240, 189, 169), (227, 174, 156), (213, 160, 144), (200, 145, 132),
+ (187, 130, 119), (174, 115, 107), (161, 101, 95), (148, 86, 82),
+ (134, 71, 70), (128, 64, 64), (135, 71, 71), (141, 78, 78),
+ (148, 84, 84), (155, 91, 91), (161, 98, 98), (168, 104, 104),
+ (175, 111, 111), (181, 118, 118), (191, 128, 128), (195, 135, 135),
+ (198, 143, 143), (202, 150, 150), (206, 158, 158), (209, 165, 165),
+ (213, 173, 173), (217, 180, 180), (221, 188, 188), (226, 199, 199)
+ ),
+
+// 119 rw-reds-blues-greens-pinks
+((255, 0, 0), (211, 22, 22), (189, 33, 33), (167, 44, 44),
+ (145, 55, 55), (124, 66, 66), (113, 71, 71), (102, 77, 77),
+ (58, 99, 99), (29, 113, 113), (0, 128, 128), (0, 139, 139),
+ (0, 150, 150), (0, 161, 161), (0, 172, 172), (0, 177, 177),
+ (0, 183, 183), (0, 204, 204), (0, 215, 215), (0, 226, 226),
+ (0, 237, 237), (0, 248, 248), (0, 251, 251), (0, 255, 255),
+ (44, 240, 255), (66, 232, 255), (88, 224, 255), (109, 216, 255),
+ (131, 209, 255), (142, 205, 255), (153, 201, 255), (175, 194, 255),
+ (197, 186, 255), (255, 166, 255), (233, 162, 255), (211, 159, 255),
+ (189, 156, 255), (167, 153, 255), (156, 151, 255), (145, 150, 255),
+ (102, 143, 255), (80, 140, 255), (58, 137, 255), (36, 133, 255),
+ (14, 130, 255), (7, 129, 255), (0, 128, 255), (11, 128, 255),
+ (22, 128, 255), (44, 128, 255), (55, 128, 255), (66, 128, 255),
+ (77, 128, 255), (88, 128, 255), (93, 128, 255), (99, 128, 255),
+ (121, 128, 255), (119, 133, 244), (117, 139, 233), (106, 150, 211),
+ (95, 161, 189), (89, 166, 178), (84, 172, 167), (73, 183, 145),
+ (62, 193, 124), (40, 215, 80), (29, 226, 58), (18, 237, 36),
+ (9, 246, 18), (0, 255, 0), (22, 233, 0), (44, 211, 0),
+ (88, 167, 0), (109, 145, 0), (131, 124, 0), (153, 102, 0),
+ (175, 80, 0), (186, 69, 0), (197, 58, 0), (219, 36, 0),
+ (241, 14, 0), (233, 11, 0), (211, 22, 0), (189, 33, 0),
+ (178, 38, 0), (167, 44, 0), (145, 55, 0), (124, 66, 0),
+ (80, 88, 0), (58, 99, 0), (36, 110, 0), (25, 115, 0),
+ (14, 121, 0), (0, 128, 0), (10, 117, 0), (20, 106, 0),
+ (30, 95, 0), (50, 73, 0), (60, 62, 0), (70, 51, 0),
+ (75, 45, 0), (80, 40, 0), (90, 29, 0), (101, 18, 0),
+ (129, 0, 0), (140, 0, 0), (152, 0, 0), (158, 0, 0),
+ (164, 0, 0), (175, 0, 0), (187, 0, 0), (199, 0, 0),
+ (210, 0, 0), (234, 0, 0), (240, 0, 0), (246, 0, 0),
+ (253, 0, 0), (242, 22, 11), (232, 44, 22), (221, 66, 33),
+ (199, 110, 55), (188, 131, 66), (178, 153, 77), (172, 164, 82),
+ (167, 175, 88), (156, 197, 99), (146, 219, 110), (135, 241, 121),
+ (128, 255, 128), (128, 233, 150), (128, 227, 155), (128, 222, 161),
+ (128, 211, 172), (128, 200, 183), (128, 190, 193), (128, 179, 204),
+ (128, 157, 226), (128, 142, 240), (128, 128, 255), (122, 128, 244),
+ (117, 128, 233), (106, 128, 211), (95, 128, 189), (84, 128, 167),
+ (73, 128, 145), (51, 128, 102), (45, 128, 91), (40, 128, 80),
+ (29, 128, 58), (18, 128, 36), (7, 128, 14), (0, 128, 0),
+ (44, 132, 26), (55, 132, 32), (66, 133, 38), (88, 135, 51),
+ (110, 137, 64), (131, 139, 77), (153, 141, 90), (175, 142, 102),
+ (197, 144, 115), (255, 149, 149), (255, 147, 147), (255, 146, 146),
+ (255, 144, 144), (255, 141, 141), (255, 139, 139), (255, 136, 136),
+ (255, 131, 131), (255, 129, 129), (255, 128, 128), (255, 126, 126),
+ (255, 123, 123), (255, 121, 121), (255, 119, 119), (255, 119, 131),
+ (255, 118, 142), (255, 118, 154), (255, 117, 166), (255, 117, 177),
+ (255, 116, 189), (255, 116, 201), (255, 115, 212), (255, 115, 224),
+ (255, 114, 248), (255, 113, 251), (255, 113, 255), (255, 107, 237),
+ (255, 101, 219), (255, 95, 201), (255, 90, 183), (255, 84, 165),
+ (255, 78, 147), (255, 72, 129), (255, 66, 111), (255, 60, 93),
+ (255, 55, 75), (255, 45, 45), (250, 41, 58), (246, 37, 72),
+ (241, 33, 85), (237, 30, 99), (232, 26, 112), (228, 22, 126),
+ (223, 18, 139), (219, 14, 153), (214, 10, 166), (209, 6, 180),
+ (205, 2, 193), (202, 0, 202), (204, 0, 185), (206, 0, 167),
+ (207, 0, 150), (209, 0, 133), (211, 0, 115), (213, 0, 98),
+ (215, 0, 80), (216, 0, 63), (218, 0, 46), (220, 0, 28),
+ (222, 0, 11), (223, 0, 0), (217, 12, 6), (212, 24, 12),
+ (206, 36, 19), (200, 47, 25), (195, 59, 31), (189, 71, 37),
+ (183, 83, 43), (178, 95, 50), (172, 107, 56), (166, 119, 62),
+ (157, 138, 72), (157, 126, 66), (158, 114, 60), (158, 102, 53),
+ (159, 91, 47), (160, 79, 41), (160, 67, 35), (161, 55, 29),
+ (161, 43, 22), (162, 31, 16), (163, 19, 10), (163, 8, 4),
+ (164, 0, 0), (160, 0, 0), (156, 0, 0), (152, 0, 0),
+ (148, 0, 0), (144, 0, 0), (140, 0, 0), (136, 0, 0),
+ (132, 0, 0), (128, 0, 0), (124, 0, 0), (117, 0, 0)
+ ),
+
+// 120 rw-reds-browns-golds-tans
+((255, 0, 0), (253, 10, 2), (251, 15, 3), (250, 20, 4),
+ (249, 25, 5), (248, 30, 6), (247, 32, 6), (247, 35, 7),
+ (244, 45, 8), (243, 50, 9), (242, 55, 10), (241, 60, 11),
+ (240, 65, 12), (238, 70, 13), (237, 75, 14), (236, 77, 14),
+ (236, 80, 14), (234, 90, 16), (232, 95, 17), (231, 100, 18),
+ (230, 105, 19), (229, 110, 20), (228, 112, 20), (228, 115, 21),
+ (225, 125, 22), (224, 130, 23), (223, 135, 24), (222, 140, 25),
+ (221, 145, 26), (220, 147, 26), (219, 150, 27), (218, 155, 28),
+ (217, 160, 28), (216, 157, 30), (216, 155, 31), (216, 154, 32),
+ (215, 152, 32), (215, 151, 33), (215, 150, 33), (215, 150, 34),
+ (214, 146, 36), (213, 145, 37), (213, 144, 38), (213, 142, 38),
+ (213, 140, 39), (212, 139, 39), (212, 139, 40), (212, 138, 41),
+ (212, 136, 42), (211, 133, 44), (210, 131, 44), (210, 130, 45),
+ (210, 128, 46), (210, 127, 47), (209, 126, 47), (209, 126, 48),
+ (209, 122, 49), (208, 121, 50), (208, 120, 51), (207, 118, 52),
+ (207, 116, 53), (207, 115, 53), (207, 115, 54), (206, 114, 55),
+ (206, 112, 55), (209, 113, 52), (210, 113, 50), (212, 114, 48),
+ (213, 114, 47), (214, 114, 46), (215, 115, 45), (217, 115, 43),
+ (220, 116, 40), (221, 116, 38), (223, 117, 36), (224, 117, 34),
+ (226, 118, 33), (226, 118, 32), (227, 119, 31), (229, 119, 29),
+ (230, 120, 28), (234, 121, 24), (235, 121, 22), (237, 122, 21),
+ (237, 122, 20), (238, 122, 19), (240, 123, 17), (241, 123, 15),
+ (244, 124, 12), (245, 124, 10), (247, 125, 9), (248, 125, 8),
+ (249, 126, 7), (250, 126, 5), (252, 127, 3), (253, 127, 2),
+ (255, 128, 0), (250, 126, 0), (247, 124, 0), (245, 123, 0),
+ (244, 122, 0), (243, 122, 0), (240, 120, 0), (238, 119, 0),
+ (233, 117, 0), (230, 115, 0), (228, 114, 0), (226, 113, 0),
+ (225, 113, 0), (223, 112, 0), (220, 110, 0), (218, 109, 0),
+ (216, 108, 0), (211, 106, 0), (209, 105, 0), (208, 104, 0),
+ (206, 103, 0), (203, 102, 0), (201, 100, 0), (198, 99, 0),
+ (193, 97, 0), (190, 95, 0), (188, 94, 0), (187, 93, 0),
+ (186, 93, 0), (183, 92, 0), (181, 90, 0), (178, 89, 0),
+ (176, 88, 0), (181, 95, 8), (182, 96, 10), (183, 98, 12),
+ (186, 101, 16), (188, 104, 21), (191, 108, 25), (193, 111, 29),
+ (198, 118, 37), (200, 121, 41), (203, 124, 45), (204, 125, 47),
+ (206, 127, 50), (208, 131, 54), (211, 134, 58), (213, 137, 62),
+ (216, 140, 66), (220, 147, 74), (221, 148, 76), (223, 150, 78),
+ (225, 154, 82), (228, 157, 87), (230, 160, 91), (233, 163, 95),
+ (238, 170, 103), (239, 171, 105), (240, 173, 107), (243, 177, 111),
+ (245, 180, 116), (248, 183, 120), (250, 186, 124), (253, 190, 128),
+ (255, 193, 132), (255, 186, 128), (255, 184, 127), (255, 182, 127),
+ (255, 178, 125), (255, 174, 123), (255, 171, 121), (255, 167, 119),
+ (255, 160, 116), (255, 158, 115), (255, 156, 114), (255, 152, 112),
+ (255, 148, 110), (255, 145, 108), (255, 141, 107), (255, 137, 105),
+ (255, 134, 103), (255, 130, 101), (255, 126, 99), (255, 122, 98),
+ (255, 119, 96), (255, 115, 94), (255, 111, 92), (255, 107, 90),
+ (255, 100, 87), (255, 98, 86), (255, 96, 85), (255, 93, 83),
+ (255, 89, 81), (255, 85, 79), (255, 81, 78), (255, 78, 76),
+ (255, 74, 74), (254, 77, 75), (252, 79, 76), (251, 82, 76),
+ (250, 84, 77), (248, 87, 78), (247, 90, 79), (245, 92, 79),
+ (244, 95, 80), (243, 97, 81), (241, 100, 81), (240, 103, 82),
+ (238, 105, 83), (237, 108, 84), (236, 110, 84), (234, 113, 85),
+ (233, 116, 86), (232, 118, 86), (230, 121, 87), (229, 123, 88),
+ (228, 126, 89), (226, 128, 89), (225, 131, 90), (223, 134, 91),
+ (222, 136, 91), (221, 139, 92), (219, 141, 93), (218, 144, 94),
+ (216, 147, 94), (215, 149, 95), (214, 152, 96), (212, 154, 96),
+ (211, 157, 97), (211, 158, 99), (212, 159, 100), (212, 160, 102),
+ (213, 161, 104), (213, 162, 105), (214, 163, 107), (214, 164, 108),
+ (214, 165, 110), (215, 166, 112), (215, 167, 113), (216, 168, 115),
+ (216, 169, 116), (217, 170, 118), (217, 171, 120), (218, 172, 121),
+ (218, 173, 123), (218, 174, 125), (219, 175, 126), (219, 176, 128),
+ (220, 177, 130), (220, 178, 131), (221, 179, 133), (221, 180, 134),
+ (221, 181, 136), (222, 182, 138), (222, 183, 139), (223, 184, 141),
+ (223, 185, 142), (224, 186, 144), (224, 187, 146), (225, 189, 149)
+ ),
+
+// 121 dg009
+((19, 11, 23), (39, 24, 47), (54, 26, 47), (70, 29, 47),
+ (81, 27, 44), (92, 25, 42), (101, 12, 38), (110, 0, 35),
+ (113, 28, 49), (93, 28, 45), (74, 28, 41), (72, 33, 50),
+ (71, 38, 59), (77, 58, 94), (83, 79, 130), (90, 93, 139),
+ (98, 107, 148), (115, 102, 171), (98, 92, 141), (81, 82, 112),
+ (78, 79, 108), (75, 76, 104), (74, 75, 103), (73, 74, 102),
+ (97, 56, 96), (89, 41, 71), (82, 27, 46), (62, 28, 50),
+ (42, 30, 54), (39, 27, 49), (37, 25, 45), (34, 26, 41),
+ (29, 25, 40), (25, 27, 40), (23, 27, 40), (21, 27, 41),
+ (17, 34, 47), (13, 41, 53), (19, 54, 61), (26, 67, 69),
+ (43, 70, 79), (44, 60, 76), (45, 51, 73), (44, 41, 59),
+ (43, 32, 46), (51, 29, 43), (60, 26, 40), (53, 25, 40),
+ (41, 17, 49), (37, 29, 50), (37, 31, 53), (38, 34, 57),
+ (37, 32, 55), (36, 31, 54), (36, 28, 50), (37, 25, 47),
+ (37, 26, 43), (37, 25, 42), (38, 25, 42), (37, 25, 41),
+ (37, 26, 40), (36, 25, 39), (36, 25, 39), (31, 25, 39),
+ (29, 20, 37), (26, 31, 50), (27, 39, 57), (29, 48, 65),
+ (34, 47, 70), (40, 47, 75), (49, 48, 90), (49, 62, 94),
+ (66, 67, 97), (69, 70, 99), (72, 73, 101), (70, 72, 98),
+ (69, 71, 96), (69, 71, 96), (69, 71, 96), (68, 69, 97),
+ (65, 63, 103), (67, 74, 116), (70, 78, 122), (74, 82, 129),
+ (79, 89, 136), (84, 96, 144), (85, 111, 134), (82, 110, 114),
+ (73, 74, 102), (61, 74, 90), (50, 75, 79), (50, 72, 67),
+ (51, 69, 55), (38, 41, 58), (44, 41, 70), (50, 49, 81),
+ (61, 59, 98), (46, 93, 99), (54, 91, 105), (62, 90, 112),
+ (67, 96, 111), (72, 102, 110), (81, 111, 121), (116, 124, 161),
+ (112, 123, 169), (95, 100, 145), (78, 77, 121), (73, 77, 120),
+ (69, 78, 119), (73, 103, 111), (88, 110, 134), (116, 126, 161),
+ (110, 139, 171), (112, 128, 187), (115, 127, 177), (119, 126, 168),
+ (123, 111, 161), (145, 98, 152), (139, 92, 146), (98, 72, 135),
+ (74, 75, 103), (68, 68, 101), (63, 61, 100), (57, 55, 93),
+ (51, 49, 86), (39, 38, 70), (27, 24, 55), (21, 26, 48),
+ (16, 22, 48), (21, 27, 43), (22, 30, 44), (23, 33, 45),
+ (25, 35, 47), (24, 34, 46), (25, 31, 45), (28, 27, 45),
+ (35, 27, 42), (36, 26, 42), (37, 26, 42), (37, 26, 42),
+ (37, 26, 42), (37, 26, 42), (37, 26, 42), (37, 26, 42),
+ (37, 26, 42), (36, 28, 41), (36, 29, 42), (36, 30, 44),
+ (27, 44, 54), (23, 52, 60), (25, 56, 61), (26, 55, 61),
+ (34, 40, 62), (25, 41, 62), (17, 42, 62), (10, 39, 53),
+ (15, 23, 46), (0, 0, 25), (0, 0, 25), (0, 0, 25),
+ (15, 21, 33), (28, 27, 43), (30, 28, 44), (33, 29, 46),
+ (32, 30, 51), (26, 31, 50), (19, 34, 53), (20, 33, 42),
+ (22, 28, 42), (23, 25, 41), (24, 23, 41), (26, 21, 43),
+ (30, 21, 42), (32, 25, 43), (35, 27, 42), (37, 26, 42),
+ (38, 25, 42), (43, 20, 38), (50, 18, 31), (76, 1, 32),
+ (80, 15, 37), (87, 24, 41), (84, 31, 51), (99, 30, 49),
+ (181, 60, 93), (177, 63, 92), (174, 66, 92), (157, 78, 109),
+ (197, 102, 142), (201, 125, 155), (126, 137, 159), (119, 124, 154),
+ (88, 82, 128), (76, 77, 105), (76, 77, 105), (74, 75, 103),
+ (73, 74, 102), (70, 71, 99), (68, 69, 97), (61, 63, 101),
+ (60, 62, 100), (63, 61, 100), (68, 69, 97), (68, 70, 95),
+ (70, 71, 99), (72, 73, 101), (74, 75, 103), (71, 72, 100),
+ (71, 72, 100), (69, 73, 98), (66, 67, 95), (86, 41, 70),
+ (118, 33, 56), (140, 30, 39), (149, 38, 55), (132, 28, 65),
+ (135, 43, 68), (152, 70, 93), (147, 71, 101), (134, 73, 80),
+ (109, 54, 75), (79, 80, 108), (107, 120, 152), (135, 139, 187),
+ (141, 140, 197), (214, 220, 255), (202, 214, 255), (136, 147, 203),
+ (114, 125, 171), (84, 107, 141), (77, 78, 106), (67, 71, 96),
+ (46, 55, 86), (33, 47, 76), (41, 61, 70), (42, 69, 78),
+ (49, 68, 82), (63, 64, 92), (66, 67, 97), (63, 63, 97),
+ (56, 55, 89), (49, 43, 79), (38, 38, 62), (39, 37, 59),
+ (38, 36, 60), (37, 39, 62), (40, 50, 75), (53, 58, 87),
+ (58, 58, 94), (61, 49, 97), (53, 40, 83), (42, 43, 74),
+ (36, 40, 65), (36, 35, 69), (51, 53, 91), (40, 37, 90)
+ ),
+
+// 122 dg016
+((25, 30, 34), (51, 61, 70), (46, 53, 62), (42, 45, 54),
+ (34, 44, 43), (27, 43, 32), (27, 42, 30), (28, 42, 29),
+ (22, 39, 23), (20, 33, 21), (18, 28, 19), (18, 24, 18),
+ (18, 20, 17), (17, 19, 16), (16, 18, 15), (16, 18, 15),
+ (16, 18, 15), (16, 21, 17), (14, 23, 18), (13, 26, 19),
+ (19, 34, 24), (26, 42, 29), (24, 44, 31), (23, 47, 34),
+ (11, 46, 42), (11, 53, 40), (12, 60, 38), (6, 61, 44),
+ (0, 62, 51), (7, 65, 53), (15, 69, 55), (25, 64, 63),
+ (34, 47, 64), (40, 43, 60), (40, 43, 59), (41, 44, 59),
+ (41, 44, 59), (42, 45, 60), (41, 44, 59), (41, 44, 59),
+ (33, 53, 62), (26, 64, 59), (20, 75, 56), (15, 88, 61),
+ (10, 101, 66), (10, 105, 69), (10, 110, 72), (18, 107, 79),
+ (13, 90, 58), (38, 59, 62), (39, 51, 58), (40, 44, 55),
+ (35, 39, 46), (30, 34, 37), (28, 34, 37), (26, 34, 37),
+ (21, 36, 55), (18, 50, 64), (15, 65, 74), (12, 89, 93),
+ (10, 114, 113), (9, 121, 98), (9, 129, 83), (13, 104, 71),
+ (11, 82, 52), (0, 37, 14), (5, 24, 10), (11, 12, 7),
+ (9, 13, 7), (7, 14, 7), (0, 14, 4), (0, 17, 5),
+ (19, 22, 27), (22, 28, 37), (26, 34, 47), (33, 38, 53),
+ (40, 43, 60), (41, 51, 63), (43, 60, 67), (53, 75, 62),
+ (48, 95, 85), (70, 103, 92), (61, 87, 77), (52, 72, 63),
+ (47, 65, 55), (42, 58, 47), (36, 54, 38), (33, 45, 31),
+ (34, 39, 35), (38, 42, 48), (43, 46, 61), (45, 48, 63),
+ (47, 50, 65), (53, 60, 86), (61, 74, 108), (69, 77, 114),
+ (69, 76, 105), (35, 44, 75), (20, 37, 65), (5, 31, 56),
+ (6, 32, 51), (7, 33, 46), (7, 36, 42), (10, 40, 38),
+ (9, 28, 35), (4, 16, 32), (0, 4, 29), (0, 5, 23),
+ (0, 6, 18), (2, 18, 18), (6, 23, 17), (11, 21, 13),
+ (17, 23, 9), (18, 20, 17), (17, 20, 17), (16, 21, 17),
+ (16, 21, 24), (14, 32, 34), (13, 42, 48), (13, 44, 39),
+ (15, 59, 32), (16, 66, 35), (18, 74, 39), (15, 76, 43),
+ (12, 79, 48), (10, 74, 50), (11, 71, 45), (16, 65, 36),
+ (28, 59, 43), (40, 43, 58), (40, 43, 58), (40, 43, 58),
+ (41, 44, 59), (41, 44, 59), (40, 43, 58), (40, 43, 58),
+ (38, 41, 56), (25, 43, 55), (12, 45, 54), (11, 44, 56),
+ (10, 43, 58), (12, 42, 52), (17, 45, 49), (32, 45, 51),
+ (39, 42, 57), (41, 44, 59), (41, 44, 59), (42, 45, 60),
+ (42, 45, 60), (42, 45, 60), (43, 46, 61), (46, 47, 65),
+ (41, 42, 62), (41, 42, 61), (41, 42, 60), (41, 44, 59),
+ (42, 45, 60), (42, 45, 60), (42, 45, 60), (44, 47, 62),
+ (46, 53, 63), (44, 62, 100), (47, 63, 105), (50, 64, 111),
+ (44, 64, 115), (28, 67, 98), (31, 51, 75), (24, 50, 77),
+ (14, 47, 56), (22, 44, 58), (30, 41, 61), (38, 41, 58),
+ (39, 42, 57), (40, 43, 58), (43, 44, 64), (34, 46, 68),
+ (14, 56, 68), (9, 71, 96), (10, 95, 132), (12, 105, 146),
+ (9, 117, 179), (15, 156, 173), (51, 198, 146), (56, 166, 129),
+ (10, 85, 54), (11, 73, 47), (13, 62, 40), (20, 37, 29),
+ (12, 27, 24), (16, 25, 24), (22, 31, 26), (21, 29, 32),
+ (28, 33, 36), (26, 37, 41), (23, 34, 40), (20, 28, 47),
+ (19, 28, 45), (22, 21, 27), (30, 16, 13), (18, 20, 17),
+ (17, 21, 20), (18, 22, 25), (23, 26, 31), (30, 35, 39),
+ (37, 36, 44), (41, 43, 55), (40, 43, 58), (40, 43, 58),
+ (40, 43, 58), (39, 42, 57), (39, 42, 57), (40, 43, 58),
+ (40, 43, 58), (40, 43, 58), (40, 43, 58), (39, 42, 57),
+ (38, 41, 56), (35, 41, 53), (31, 36, 40), (21, 42, 37),
+ (11, 52, 48), (10, 54, 67), (19, 61, 77), (16, 74, 98),
+ (11, 83, 107), (25, 78, 112), (28, 84, 101), (27, 66, 83),
+ (26, 53, 70), (42, 48, 62), (42, 45, 60), (43, 46, 61),
+ (45, 58, 75), (52, 67, 100), (55, 70, 109), (53, 73, 124),
+ (73, 81, 127), (55, 77, 134), (44, 137, 142), (85, 139, 116),
+ (94, 118, 104), (87, 97, 96), (67, 76, 85), (53, 66, 85),
+ (41, 58, 74), (43, 46, 61), (36, 42, 54), (31, 42, 38),
+ (20, 37, 31), (22, 26, 27), (21, 22, 26), (22, 26, 27),
+ (26, 33, 26), (30, 39, 36), (45, 63, 51), (40, 53, 46)
+ ),
+
+// 123 dg031
+((4, 9, 8), (10, 19, 18), (12, 19, 20), (14, 19, 22),
+ (14, 21, 22), (14, 23, 22), (15, 22, 23), (16, 21, 24),
+ (11, 22, 28), (10, 18, 37), (10, 15, 47), (16, 30, 55),
+ (23, 46, 64), (41, 76, 90), (59, 107, 117), (73, 121, 135),
+ (88, 135, 153), (117, 169, 190), (121, 167, 191), (126, 166, 192),
+ (148, 159, 162), (170, 153, 133), (183, 162, 123), (196, 171, 114),
+ (172, 150, 90), (134, 118, 84), (97, 87, 78), (76, 77, 72),
+ (55, 67, 67), (71, 65, 65), (87, 63, 63), (124, 92, 54),
+ (176, 145, 78), (193, 223, 249), (196, 228, 250), (200, 233, 252),
+ (190, 225, 244), (181, 218, 237), (178, 216, 237), (176, 214, 237),
+ (83, 152, 167), (56, 109, 120), (29, 66, 74), (27, 59, 66),
+ (25, 52, 59), (27, 56, 62), (29, 60, 65), (29, 59, 70),
+ (33, 85, 98), (61, 124, 139), (70, 116, 127), (79, 108, 116),
+ (99, 100, 84), (120, 92, 53), (132, 102, 62), (145, 112, 71),
+ (190, 164, 103), (206, 168, 106), (222, 172, 109), (197, 151, 94),
+ (172, 131, 79), (145, 110, 65), (118, 90, 51), (95, 61, 33),
+ (67, 31, 33), (36, 22, 37), (31, 32, 43), (26, 43, 50),
+ (26, 45, 50), (27, 48, 51), (27, 50, 58), (22, 40, 54),
+ (14, 29, 34), (14, 29, 33), (15, 29, 32), (16, 28, 31),
+ (17, 28, 30), (17, 29, 30), (18, 30, 30), (43, 33, 21),
+ (59, 43, 27), (114, 84, 50), (133, 84, 44), (152, 84, 39),
+ (155, 99, 54), (159, 115, 70), (173, 124, 58), (178, 118, 58),
+ (177, 143, 79), (179, 148, 83), (182, 153, 87), (185, 155, 86),
+ (188, 158, 86), (193, 150, 81), (203, 147, 70), (171, 106, 42),
+ (152, 81, 37), (78, 52, 29), (47, 38, 27), (16, 24, 26),
+ (14, 21, 22), (12, 18, 18), (13, 17, 18), (10, 16, 16),
+ (13, 13, 13), (12, 14, 14), (11, 15, 16), (11, 16, 18),
+ (12, 17, 20), (15, 25, 26), (16, 31, 34), (24, 41, 51),
+ (26, 55, 59), (30, 61, 82), (26, 64, 85), (23, 68, 89),
+ (29, 85, 100), (32, 66, 76), (30, 59, 67), (29, 60, 65),
+ (17, 44, 51), (16, 35, 40), (16, 27, 29), (16, 25, 30),
+ (17, 24, 32), (16, 29, 35), (17, 36, 42), (27, 51, 55),
+ (27, 58, 63), (39, 100, 118), (62, 99, 125), (85, 98, 132),
+ (84, 95, 125), (119, 89, 53), (92, 65, 38), (27, 48, 41),
+ (14, 22, 24), (11, 15, 15), (9, 8, 6), (4, 5, 3),
+ (0, 2, 1), (10, 14, 15), (18, 23, 26), (28, 27, 43),
+ (23, 52, 60), (60, 116, 129), (70, 127, 143), (80, 138, 158),
+ (82, 143, 162), (62, 129, 146), (55, 105, 114), (46, 105, 119),
+ (34, 72, 81), (43, 84, 94), (53, 97, 108), (104, 133, 137),
+ (128, 127, 133), (147, 159, 181), (171, 214, 230), (179, 214, 234),
+ (137, 183, 206), (88, 145, 164), (70, 126, 146), (53, 108, 129),
+ (25, 74, 107), (26, 55, 63), (19, 44, 49), (14, 28, 31),
+ (5, 4, 9), (2, 2, 5), (0, 0, 2), (0, 0, 0),
+ (1, 1, 1), (8, 0, 0), (11, 0, 0), (23, 10, 0),
+ (13, 13, 13), (13, 17, 16), (15, 14, 20), (16, 15, 20),
+ (31, 17, 8), (38, 25, 8), (47, 25, 4), (33, 15, 5),
+ (17, 23, 23), (16, 25, 25), (15, 27, 27), (16, 31, 34),
+ (24, 44, 43), (37, 46, 43), (40, 45, 49), (27, 46, 50),
+ (26, 46, 47), (22, 46, 48), (19, 37, 39), (14, 25, 27),
+ (15, 19, 20), (25, 13, 15), (46, 18, 17), (70, 26, 39),
+ (85, 34, 39), (97, 39, 35), (108, 48, 58), (86, 33, 61),
+ (48, 51, 56), (28, 52, 54), (25, 52, 59), (21, 56, 62),
+ (25, 58, 67), (26, 78, 92), (58, 120, 135), (89, 152, 170),
+ (94, 157, 172), (120, 177, 194), (89, 155, 171), (54, 121, 138),
+ (34, 82, 96), (27, 52, 56), (24, 35, 39), (13, 18, 21),
+ (8, 7, 5), (1, 1, 1), (0, 0, 0), (0, 0, 2),
+ (8, 10, 9), (10, 8, 9), (12, 7, 13), (11, 9, 10),
+ (3, 4, 6), (1, 1, 1), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (10, 0, 0), (11, 10, 8),
+ (14, 18, 19), (16, 27, 31), (33, 32, 40), (48, 36, 58),
+ (103, 55, 53), (122, 60, 49), (134, 68, 36), (100, 58, 34),
+ (69, 47, 24), (56, 37, 20), (39, 25, 14), (28, 18, 8),
+ (14, 15, 17), (14, 18, 19), (16, 20, 21), (33, 16, 24),
+ (55, 32, 16), (93, 50, 15), (160, 83, 31), (145, 68, 24)
+ ),
+
+// 124 dg085
+((82, 50, 8), (166, 101, 17), (136, 82, 19), (107, 64, 22),
+ (92, 56, 24), (77, 49, 27), (68, 46, 29), (60, 44, 31),
+ (59, 43, 30), (58, 42, 29), (58, 42, 29), (57, 41, 29),
+ (57, 40, 30), (60, 40, 29), (63, 41, 28), (68, 39, 21),
+ (74, 38, 14), (79, 45, 17), (74, 43, 18), (69, 41, 20),
+ (65, 40, 23), (62, 40, 26), (60, 40, 26), (59, 41, 27),
+ (59, 43, 30), (59, 43, 30), (59, 43, 30), (58, 42, 29),
+ (58, 42, 29), (57, 41, 27), (57, 41, 26), (57, 41, 25),
+ (57, 30, 11), (49, 28, 9), (52, 34, 18), (56, 40, 27),
+ (56, 40, 27), (56, 40, 27), (56, 39, 26), (57, 39, 25),
+ (40, 21, 4), (47, 19, 2), (55, 17, 0), (55, 23, 4),
+ (56, 29, 8), (58, 31, 9), (61, 33, 11), (72, 38, 13),
+ (85, 52, 19), (114, 66, 30), (127, 76, 35), (140, 86, 40),
+ (167, 93, 37), (194, 101, 34), (202, 106, 26), (211, 112, 18),
+ (182, 98, 26), (167, 96, 32), (153, 94, 38), (146, 85, 31),
+ (140, 77, 24), (140, 76, 28), (140, 76, 32), (140, 86, 40),
+ (147, 84, 43), (153, 92, 45), (133, 77, 35), (113, 63, 26),
+ (110, 61, 26), (108, 59, 26), (88, 56, 31), (63, 47, 34),
+ (60, 44, 31), (60, 43, 32), (60, 43, 33), (72, 50, 34),
+ (85, 57, 35), (92, 61, 33), (100, 66, 31), (118, 79, 40),
+ (157, 95, 56), (228, 151, 83), (241, 173, 84), (255, 195, 85),
+ (255, 205, 111), (255, 215, 137), (232, 205, 90), (230, 188, 80),
+ (228, 155, 86), (237, 151, 73), (246, 148, 61), (238, 147, 55),
+ (230, 146, 50), (210, 138, 66), (204, 126, 60), (192, 107, 42),
+ (168, 106, 65), (129, 85, 46), (132, 82, 38), (135, 79, 30),
+ (130, 76, 33), (126, 74, 37), (110, 73, 29), (131, 70, 25),
+ (146, 82, 21), (162, 84, 27), (178, 87, 34), (173, 90, 24),
+ (169, 93, 15), (151, 72, 13), (114, 63, 16), (104, 62, 20),
+ (103, 59, 20), (130, 59, 7), (134, 60, 8), (139, 62, 10),
+ (153, 88, 20), (165, 115, 30), (186, 116, 21), (207, 119, 19),
+ (183, 113, 41), (158, 100, 50), (133, 88, 59), (125, 84, 55),
+ (117, 80, 51), (112, 78, 51), (127, 90, 61), (166, 113, 69),
+ (198, 149, 90), (207, 172, 144), (186, 148, 117), (165, 125, 90),
+ (141, 91, 58), (116, 78, 42), (107, 64, 30), (83, 52, 31),
+ (59, 43, 30), (63, 41, 24), (67, 39, 18), (69, 40, 17),
+ (72, 42, 16), (77, 44, 0), (72, 40, 0), (67, 36, 15),
+ (61, 25, 11), (65, 39, 16), (65, 39, 17), (66, 39, 18),
+ (58, 40, 26), (57, 41, 26), (56, 40, 27), (57, 41, 28),
+ (58, 41, 33), (58, 41, 32), (59, 42, 32), (59, 42, 32),
+ (60, 43, 33), (62, 44, 32), (64, 46, 34), (85, 53, 30),
+ (91, 57, 30), (82, 44, 21), (80, 43, 19), (79, 43, 17),
+ (75, 29, 14), (72, 33, 0), (103, 37, 0), (121, 40, 0),
+ (134, 68, 0), (126, 64, 0), (118, 61, 0), (101, 44, 0),
+ (83, 40, 0), (66, 27, 0), (59, 10, 0), (57, 11, 0),
+ (60, 20, 0), (77, 41, 9), (94, 55, 16), (130, 69, 6),
+ (146, 71, 3), (147, 64, 0), (151, 72, 3), (162, 83, 4),
+ (134, 85, 44), (130, 83, 49), (126, 82, 55), (113, 88, 81),
+ (103, 87, 72), (110, 84, 67), (100, 73, 62), (97, 64, 45),
+ (103, 68, 36), (104, 60, 31), (90, 56, 31), (71, 50, 31),
+ (62, 46, 33), (60, 41, 35), (60, 40, 33), (59, 42, 32),
+ (60, 43, 33), (58, 44, 33), (56, 44, 32), (57, 48, 31),
+ (56, 48, 25), (57, 43, 30), (55, 41, 30), (53, 40, 32),
+ (54, 41, 32), (57, 43, 32), (57, 43, 34), (56, 41, 36),
+ (54, 44, 34), (60, 46, 35), (63, 46, 36), (64, 43, 40),
+ (85, 60, 53), (84, 63, 44), (98, 61, 35), (112, 67, 34),
+ (121, 77, 40), (128, 92, 60), (145, 105, 70), (150, 104, 68),
+ (149, 112, 85), (150, 117, 82), (164, 115, 82), (167, 123, 76),
+ (174, 114, 62), (177, 108, 51), (167, 100, 45), (187, 103, 31),
+ (201, 105, 19), (199, 102, 8), (172, 98, 9), (133, 74, 6),
+ (122, 66, 5), (108, 54, 10), (85, 46, 7), (77, 37, 11),
+ (65, 32, 13), (67, 31, 9), (78, 40, 1), (94, 42, 0),
+ (106, 53, 11), (117, 59, 9), (91, 55, 21), (91, 58, 27),
+ (75, 48, 19), (63, 44, 29), (60, 44, 31), (61, 42, 27),
+ (82, 48, 23), (103, 56, 28), (130, 66, 18), (160, 79, 23)
+ ),
+
+// 125 dg086
+((108, 104, 99), (218, 209, 200), (224, 212, 207), (230, 216, 215),
+ (226, 212, 211), (222, 208, 208), (218, 205, 205), (215, 203, 203),
+ (208, 190, 186), (209, 179, 181), (211, 168, 177), (213, 178, 184),
+ (215, 189, 192), (215, 195, 196), (215, 201, 200), (216, 204, 201),
+ (217, 208, 203), (225, 211, 210), (227, 210, 211), (230, 210, 212),
+ (228, 211, 212), (227, 213, 212), (227, 213, 211), (227, 213, 210),
+ (223, 219, 208), (224, 211, 207), (226, 204, 207), (224, 199, 202),
+ (223, 194, 198), (220, 193, 197), (218, 193, 196), (218, 191, 182),
+ (211, 184, 175), (205, 162, 171), (201, 156, 165), (198, 151, 159),
+ (189, 122, 134), (180, 93, 109), (171, 83, 101), (163, 74, 94),
+ (149, 66, 86), (138, 62, 81), (127, 58, 76), (134, 61, 80),
+ (142, 65, 85), (141, 65, 85), (141, 66, 86), (122, 103, 96),
+ (122, 114, 103), (133, 123, 111), (132, 121, 115), (131, 119, 119),
+ (132, 124, 118), (133, 129, 117), (139, 134, 122), (145, 139, 127),
+ (175, 166, 167), (193, 171, 174), (211, 176, 182), (216, 183, 189),
+ (222, 191, 196), (223, 194, 198), (224, 198, 201), (224, 204, 205),
+ (229, 215, 215), (244, 229, 226), (249, 236, 229), (255, 243, 232),
+ (255, 245, 241), (255, 247, 250), (250, 242, 240), (243, 240, 235),
+ (237, 223, 222), (238, 229, 227), (240, 236, 233), (241, 230, 228),
+ (243, 225, 223), (241, 223, 223), (240, 221, 223), (242, 224, 214),
+ (246, 219, 208), (227, 208, 204), (211, 199, 195), (196, 191, 187),
+ (192, 185, 180), (189, 180, 173), (179, 171, 160), (159, 151, 138),
+ (129, 123, 123), (138, 124, 127), (147, 126, 131), (154, 132, 132),
+ (162, 139, 133), (171, 154, 144), (183, 176, 168), (205, 180, 173),
+ (216, 189, 180), (217, 197, 190), (216, 198, 195), (216, 200, 201),
+ (216, 200, 203), (216, 201, 206), (217, 203, 203), (217, 203, 200),
+ (214, 187, 178), (205, 170, 168), (196, 154, 158), (192, 136, 146),
+ (189, 118, 134), (173, 82, 100), (168, 71, 90), (170, 74, 88),
+ (176, 87, 105), (197, 129, 144), (192, 136, 146), (188, 143, 148),
+ (185, 154, 149), (181, 154, 147), (174, 150, 140), (163, 155, 144),
+ (146, 138, 127), (151, 135, 127), (157, 132, 128), (163, 129, 128),
+ (169, 127, 129), (170, 123, 131), (159, 125, 115), (141, 120, 103),
+ (144, 112, 97), (125, 61, 78), (105, 66, 70), (86, 72, 63),
+ (87, 88, 80), (105, 93, 93), (113, 108, 102), (125, 117, 104),
+ (161, 149, 149), (185, 166, 162), (210, 183, 176), (215, 188, 181),
+ (220, 193, 186), (224, 195, 199), (227, 211, 211), (241, 219, 208),
+ (238, 214, 204), (226, 199, 190), (222, 196, 188), (218, 193, 186),
+ (213, 186, 177), (209, 182, 173), (208, 181, 174), (198, 170, 159),
+ (183, 156, 149), (178, 151, 144), (174, 147, 140), (163, 139, 135),
+ (164, 134, 132), (163, 136, 129), (165, 143, 119), (166, 158, 147),
+ (194, 167, 160), (206, 179, 172), (210, 183, 181), (214, 188, 191),
+ (214, 192, 194), (215, 193, 195), (217, 197, 198), (223, 203, 204),
+ (228, 210, 210), (228, 212, 211), (228, 214, 213), (228, 214, 213),
+ (226, 208, 208), (220, 206, 205), (216, 209, 199), (211, 196, 193),
+ (212, 185, 176), (200, 173, 166), (184, 159, 154), (174, 147, 140),
+ (167, 138, 134), (176, 141, 122), (172, 160, 138), (185, 171, 158),
+ (190, 188, 167), (189, 184, 173), (189, 181, 179), (203, 176, 169),
+ (198, 171, 164), (186, 166, 155), (178, 151, 144), (172, 144, 140),
+ (162, 134, 130), (163, 135, 131), (174, 143, 140), (198, 153, 160),
+ (212, 166, 176), (230, 185, 182), (233, 206, 197), (237, 210, 201),
+ (240, 213, 202), (236, 209, 198), (219, 199, 200), (204, 199, 195),
+ (198, 198, 190), (197, 187, 178), (183, 174, 165), (184, 157, 150),
+ (174, 147, 140), (177, 150, 143), (185, 158, 151), (188, 161, 154),
+ (196, 167, 161), (205, 168, 175), (219, 174, 179), (215, 191, 181),
+ (203, 201, 188), (200, 199, 181), (172, 163, 156), (155, 133, 135),
+ (130, 109, 106), (103, 77, 80), (87, 70, 62), (51, 44, 34),
+ (44, 35, 26), (82, 62, 63), (88, 92, 78), (107, 98, 93),
+ (118, 104, 95), (121, 111, 101), (122, 112, 111), (115, 103, 103),
+ (115, 97, 97), (148, 67, 86), (152, 67, 88), (155, 67, 89),
+ (160, 65, 85), (172, 81, 99), (185, 106, 125), (197, 141, 152),
+ (201, 154, 164), (199, 156, 163), (196, 149, 155), (185, 132, 140),
+ (179, 95, 111), (168, 76, 99), (165, 70, 90), (161, 77, 90),
+ (168, 86, 100), (176, 128, 116), (151, 126, 122), (144, 131, 125),
+ (135, 121, 118), (136, 128, 117), (140, 136, 124), (142, 132, 120)
+ ),
+
+// 126 dg089
+((57, 57, 57), (116, 116, 116), (111, 113, 116), (106, 111, 117),
+ (99, 106, 120), (93, 101, 124), (88, 98, 119), (83, 96, 115),
+ (78, 92, 105), (65, 96, 122), (52, 100, 140), (72, 103, 128),
+ (92, 106, 117), (103, 113, 122), (114, 121, 127), (118, 124, 127),
+ (123, 127, 128), (130, 133, 140), (133, 133, 134), (137, 134, 129),
+ (135, 135, 122), (134, 137, 116), (136, 135, 121), (138, 133, 127),
+ (133, 137, 138), (166, 161, 160), (200, 186, 183), (200, 190, 191),
+ (200, 195, 199), (204, 195, 202), (208, 195, 205), (212, 197, 200),
+ (214, 195, 180), (187, 187, 159), (163, 157, 141), (139, 128, 124),
+ (127, 123, 122), (115, 119, 120), (110, 115, 119), (105, 112, 118),
+ (95, 102, 118), (90, 97, 112), (85, 93, 106), (84, 88, 97),
+ (83, 84, 88), (91, 77, 80), (100, 71, 73), (125, 58, 67),
+ (137, 47, 46), (149, 44, 38), (145, 43, 41), (141, 43, 44),
+ (114, 59, 59), (87, 76, 74), (85, 83, 87), (84, 91, 101),
+ (99, 110, 116), (102, 108, 113), (105, 106, 111), (116, 106, 100),
+ (128, 107, 90), (130, 95, 79), (133, 84, 69), (141, 74, 45),
+ (135, 52, 46), (129, 40, 36), (91, 44, 40), (53, 48, 45),
+ (47, 49, 52), (41, 50, 59), (48, 51, 70), (51, 57, 69),
+ (69, 81, 93), (89, 85, 80), (110, 89, 68), (129, 97, 78),
+ (149, 106, 89), (163, 112, 98), (178, 118, 107), (195, 171, 145),
+ (198, 182, 169), (138, 137, 135), (128, 128, 126), (118, 120, 117),
+ (112, 114, 114), (107, 108, 112), (89, 99, 109), (77, 91, 104),
+ (59, 72, 80), (39, 58, 83), (20, 45, 86), (19, 38, 65),
+ (19, 31, 45), (16, 17, 37), (28, 28, 28), (30, 26, 27),
+ (31, 27, 28), (43, 33, 23), (36, 35, 40), (29, 37, 58),
+ (33, 43, 56), (38, 49, 55), (38, 50, 66), (38, 54, 79),
+ (57, 62, 66), (79, 62, 53), (101, 63, 40), (115, 52, 38),
+ (130, 41, 37), (132, 39, 34), (129, 39, 38), (122, 47, 54),
+ (90, 46, 59), (62, 71, 80), (70, 79, 88), (78, 88, 97),
+ (84, 92, 105), (93, 103, 113), (97, 111, 114), (97, 110, 119),
+ (88, 97, 112), (78, 90, 106), (68, 84, 100), (63, 86, 99),
+ (58, 88, 99), (45, 68, 100), (53, 79, 96), (70, 86, 99),
+ (89, 93, 102), (117, 118, 113), (122, 120, 115), (128, 123, 117),
+ (129, 126, 121), (127, 127, 125), (126, 127, 122), (118, 119, 123),
+ (102, 112, 121), (112, 119, 127), (122, 127, 133), (132, 132, 135),
+ (142, 138, 137), (193, 176, 166), (211, 185, 186), (210, 194, 194),
+ (211, 195, 195), (209, 183, 168), (198, 180, 168), (188, 178, 169),
+ (140, 141, 136), (136, 135, 131), (133, 130, 125), (128, 129, 123),
+ (120, 116, 113), (118, 116, 111), (117, 117, 109), (108, 119, 77),
+ (106, 121, 64), (95, 122, 71), (94, 120, 55), (74, 113, 60),
+ (81, 92, 98), (97, 98, 103), (98, 103, 101), (99, 109, 100),
+ (121, 116, 110), (126, 128, 125), (136, 141, 135), (150, 156, 156),
+ (209, 188, 185), (208, 191, 191), (207, 195, 197), (211, 199, 199),
+ (213, 201, 201), (214, 204, 205), (208, 200, 211), (196, 185, 199),
+ (177, 166, 180), (134, 138, 141), (123, 123, 123), (106, 109, 114),
+ (88, 94, 106), (75, 82, 101), (67, 82, 101), (60, 76, 99),
+ (67, 79, 93), (70, 84, 97), (73, 89, 102), (94, 91, 98),
+ (123, 98, 78), (147, 77, 65), (156, 69, 60), (140, 72, 73),
+ (117, 104, 87), (103, 101, 102), (105, 106, 111), (108, 112, 113),
+ (116, 111, 115), (108, 107, 113), (103, 106, 111), (89, 98, 107),
+ (82, 92, 104), (82, 88, 100), (84, 73, 81), (83, 75, 62),
+ (86, 93, 62), (122, 70, 59), (146, 56, 55), (150, 57, 40),
+ (155, 61, 62), (145, 75, 73), (156, 131, 127), (191, 165, 178),
+ (205, 173, 184), (189, 163, 176), (140, 139, 134), (128, 134, 134),
+ (123, 123, 121), (107, 111, 114), (95, 98, 115), (91, 98, 116),
+ (87, 93, 109), (84, 91, 107), (85, 92, 108), (86, 98, 112),
+ (88, 94, 108), (94, 99, 105), (96, 99, 106), (97, 100, 107),
+ (92, 98, 114), (89, 97, 116), (87, 96, 113), (88, 93, 112),
+ (89, 97, 110), (97, 102, 106), (111, 112, 114), (123, 123, 121),
+ (135, 134, 139), (189, 164, 170), (204, 188, 175), (205, 195, 194),
+ (194, 194, 204), (177, 174, 191), (134, 138, 141), (128, 133, 136),
+ (117, 129, 127), (110, 119, 118), (106, 115, 120), (108, 113, 117),
+ (115, 113, 116), (119, 116, 107), (118, 120, 109), (121, 122, 117),
+ (128, 131, 124), (138, 135, 128), (214, 176, 155), (168, 154, 153)
+ ),
+
+// 127 Apophysis-040426-1crabgrass from pat phillips patrx.deviantart.com
+((237, 132, 109), (148, 73, 76), (112, 55, 75), (76, 38, 74),
+ (47, 23, 78), (19, 9, 82), (15, 6, 84), (12, 4, 87),
+ (0, 5, 84), (0, 37, 71), (0, 70, 58), (0, 98, 41),
+ (0, 127, 24), (0, 121, 15), (0, 115, 6), (13, 64, 3),
+ (27, 14, 0), (71, 35, 4), (61, 30, 24), (52, 26, 44),
+ (26, 71, 29), (0, 116, 14), (0, 119, 9), (0, 123, 5),
+ (0, 126, 8), (0, 121, 11), (0, 117, 14), (0, 109, 25),
+ (0, 101, 36), (0, 90, 51), (0, 80, 66), (0, 60, 91),
+ (34, 17, 86), (98, 50, 55), (119, 60, 47), (140, 70, 39),
+ (70, 98, 33), (0, 126, 28), (0, 126, 28), (0, 127, 28),
+ (0, 97, 72), (43, 69, 100), (86, 42, 129), (99, 50, 125),
+ (113, 58, 122), (123, 63, 127), (133, 68, 132), (149, 74, 132),
+ (155, 73, 128), (175, 87, 110), (169, 84, 124), (164, 81, 139),
+ (157, 78, 144), (151, 76, 149), (141, 70, 145), (132, 65, 141),
+ (87, 42, 79), (73, 36, 71), (60, 30, 63), (63, 31, 47),
+ (67, 33, 32), (82, 40, 41), (97, 48, 51), (127, 64, 76),
+ (167, 82, 70), (219, 108, 83), (223, 110, 94), (228, 112, 106),
+ (228, 112, 106), (228, 113, 107), (236, 117, 105), (253, 111, 105),
+ (220, 109, 143), (224, 111, 169), (229, 114, 195), (199, 100, 174),
+ (170, 86, 153), (146, 82, 134), (123, 78, 116), (63, 105, 58),
+ (0, 121, 47), (73, 115, 43), (123, 100, 45), (173, 85, 47),
+ (187, 92, 43), (201, 100, 39), (228, 123, 80), (241, 119, 82),
+ (253, 126, 74), (243, 121, 78), (234, 116, 83), (220, 109, 83),
+ (206, 102, 84), (179, 91, 79), (136, 68, 87), (100, 48, 82),
+ (47, 74, 76), (0, 118, 49), (0, 110, 41), (0, 103, 34),
+ (0, 97, 40), (0, 92, 46), (0, 66, 89), (0, 62, 89),
+ (46, 53, 62), (78, 54, 89), (110, 55, 117), (129, 64, 130),
+ (149, 73, 143), (186, 92, 167), (219, 108, 189), (231, 113, 196),
+ (237, 119, 200), (245, 126, 211), (238, 121, 203), (231, 116, 196),
+ (211, 105, 183), (201, 99, 142), (205, 84, 138), (185, 91, 151),
+ (176, 88, 157), (163, 81, 150), (150, 75, 143), (136, 67, 135),
+ (122, 60, 128), (100, 52, 132), (51, 25, 108), (50, 24, 98),
+ (45, 20, 59), (19, 8, 42), (17, 8, 48), (16, 8, 54),
+ (3, 0, 81), (0, 15, 88), (0, 33, 90), (0, 20, 90),
+ (4, 2, 51), (2, 1, 25), (0, 0, 0), (11, 5, 11),
+ (23, 11, 23), (34, 17, 22), (20, 9, 32), (0, 32, 70),
+ (0, 65, 54), (0, 127, 27), (0, 127, 30), (0, 127, 33),
+ (0, 111, 67), (106, 96, 119), (141, 70, 137), (155, 76, 147),
+ (183, 91, 164), (184, 91, 163), (186, 92, 163), (164, 81, 152),
+ (145, 72, 143), (114, 55, 115), (90, 42, 85), (80, 43, 84),
+ (83, 41, 80), (102, 52, 60), (119, 60, 66), (136, 68, 73),
+ (177, 88, 80), (185, 92, 108), (182, 90, 122), (180, 90, 158),
+ (168, 84, 180), (183, 92, 191), (199, 100, 202), (227, 113, 194),
+ (238, 118, 200), (244, 122, 204), (228, 195, 183), (255, 139, 149),
+ (255, 139, 104), (255, 141, 92), (253, 126, 86), (253, 126, 69),
+ (246, 122, 53), (245, 128, 46), (209, 104, 29), (157, 77, 24),
+ (118, 59, 28), (109, 54, 33), (100, 49, 39), (71, 34, 26),
+ (90, 44, 35), (99, 48, 58), (130, 63, 76), (154, 76, 94),
+ (193, 97, 82), (200, 100, 84), (201, 100, 83), (196, 97, 83),
+ (191, 100, 82), (154, 75, 99), (128, 64, 109), (155, 77, 104),
+ (163, 81, 141), (160, 79, 161), (165, 82, 165), (159, 78, 161),
+ (149, 77, 167), (143, 72, 159), (107, 53, 152), (74, 36, 117),
+ (35, 16, 99), (9, 5, 88), (0, 7, 85), (0, 31, 91),
+ (0, 47, 91), (0, 51, 91), (0, 70, 92), (0, 82, 84),
+ (0, 92, 79), (0, 91, 82), (0, 71, 82), (50, 22, 44),
+ (60, 30, 28), (83, 36, 39), (146, 73, 33), (197, 99, 60),
+ (216, 96, 90), (210, 105, 98), (209, 104, 101), (199, 100, 138),
+ (206, 106, 141), (222, 109, 190), (226, 114, 206), (228, 107, 226),
+ (220, 110, 207), (185, 91, 168), (157, 76, 154), (128, 65, 130),
+ (107, 53, 100), (102, 51, 90), (103, 51, 83), (122, 60, 101),
+ (124, 61, 109), (136, 69, 82), (164, 87, 43), (190, 94, 45),
+ (208, 104, 56), (217, 114, 84), (241, 123, 110), (252, 126, 143),
+ (253, 126, 152), (243, 121, 202), (252, 126, 210), (251, 125, 208),
+ (240, 118, 205), (219, 109, 191), (172, 85, 128), (192, 96, 161)
+ ),
+
+// 128 Apophysis-040426-12bs1fl
+((238, 242, 215), (16, 91, 44), (59, 115, 27), (103, 140, 11),
+ (123, 162, 22), (144, 184, 33), (148, 191, 39), (152, 199, 45),
+ (181, 204, 45), (175, 191, 78), (169, 179, 112), (177, 179, 158),
+ (186, 179, 204), (203, 205, 208), (220, 231, 212), (222, 234, 217),
+ (224, 238, 222), (244, 237, 233), (239, 240, 228), (235, 243, 223),
+ (225, 238, 222), (215, 233, 221), (211, 228, 217), (208, 224, 213),
+ (186, 196, 187), (179, 201, 152), (173, 207, 117), (160, 137, 72),
+ (148, 67, 27), (133, 68, 23), (119, 69, 19), (96, 46, 1),
+ (73, 35, 36), (61, 108, 136), (82, 142, 155), (104, 177, 175),
+ (137, 178, 169), (171, 180, 163), (193, 181, 149), (216, 183, 135),
+ (244, 208, 136), (247, 225, 127), (250, 243, 119), (250, 244, 120),
+ (250, 245, 122), (244, 235, 127), (239, 226, 133), (239, 218, 173),
+ (226, 229, 203), (232, 237, 215), (216, 226, 176), (200, 215, 138),
+ (168, 204, 161), (137, 193, 185), (142, 187, 188), (148, 181, 192),
+ (168, 173, 196), (167, 170, 194), (166, 167, 193), (156, 92, 153),
+ (147, 18, 114), (129, 42, 100), (111, 67, 86), (111, 90, 42),
+ (101, 103, 34), (95, 101, 109), (102, 126, 139), (110, 151, 169),
+ (128, 165, 179), (146, 180, 189), (177, 205, 207), (209, 204, 218),
+ (223, 210, 159), (218, 190, 131), (214, 171, 104), (165, 123, 106),
+ (116, 75, 108), (101, 64, 104), (86, 54, 100), (54, 42, 86),
+ (23, 21, 64), (12, 34, 72), (19, 51, 80), (27, 69, 89),
+ (38, 68, 97), (50, 67, 105), (74, 55, 99), (72, 50, 93),
+ (120, 139, 109), (155, 161, 116), (191, 184, 123), (195, 175, 120),
+ (200, 166, 117), (198, 165, 119), (182, 147, 130), (169, 136, 124),
+ (164, 121, 129), (107, 147, 166), (86, 130, 152), (66, 113, 139),
+ (57, 111, 128), (49, 110, 118), (56, 102, 131), (80, 121, 146),
+ (140, 137, 173), (185, 149, 155), (230, 162, 138), (232, 166, 130),
+ (234, 170, 122), (245, 168, 120), (252, 126, 119), (251, 135, 133),
+ (251, 170, 128), (236, 216, 167), (232, 224, 173), (228, 233, 180),
+ (207, 219, 204), (190, 215, 212), (173, 203, 205), (144, 179, 190),
+ (106, 147, 166), (79, 124, 148), (52, 101, 130), (35, 106, 127),
+ (19, 112, 125), (12, 107, 119), (7, 105, 117), (18, 104, 119),
+ (40, 85, 118), (61, 80, 116), (79, 89, 120), (98, 99, 125),
+ (165, 113, 124), (195, 153, 135), (222, 192, 144), (229, 230, 169),
+ (252, 242, 206), (239, 227, 171), (227, 213, 137), (236, 222, 135),
+ (246, 232, 134), (252, 238, 194), (252, 243, 208), (250, 250, 213),
+ (244, 247, 223), (248, 249, 231), (241, 246, 228), (235, 244, 225),
+ (232, 242, 224), (222, 237, 224), (205, 229, 213), (194, 217, 215),
+ (163, 173, 195), (154, 159, 187), (145, 146, 179), (142, 128, 117),
+ (145, 119, 76), (121, 108, 83), (142, 98, 71), (159, 112, 60),
+ (163, 116, 64), (192, 195, 129), (200, 205, 163), (208, 215, 197),
+ (215, 226, 200), (232, 236, 215), (241, 241, 216), (244, 249, 206),
+ (215, 209, 145), (196, 201, 121), (178, 194, 98), (138, 171, 38),
+ (147, 147, 35), (162, 134, 13), (127, 79, 28), (98, 99, 31),
+ (49, 49, 14), (41, 49, 17), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (11, 12, 11), (34, 52, 47),
+ (89, 128, 153), (108, 147, 167), (128, 167, 181), (157, 190, 197),
+ (165, 195, 201), (177, 194, 205), (166, 196, 202), (162, 191, 199),
+ (166, 169, 147), (146, 139, 91), (149, 142, 62), (128, 129, 60),
+ (102, 103, 64), (48, 45, 84), (12, 24, 41), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (2, 2, 58), (10, 29, 71),
+ (32, 52, 94), (43, 47, 100), (67, 58, 114), (84, 57, 102),
+ (75, 60, 84), (49, 60, 77), (71, 87, 39), (106, 97, 32),
+ (84, 55, 45), (72, 75, 46), (39, 64, 69), (24, 72, 44),
+ (2, 79, 52), (22, 72, 45), (30, 51, 51), (27, 36, 33),
+ (29, 36, 49), (18, 17, 59), (13, 12, 59), (5, 3, 55),
+ (6, 14, 67), (38, 32, 74), (62, 57, 111), (63, 97, 116),
+ (107, 110, 151), (144, 128, 142), (143, 141, 125), (155, 153, 117),
+ (159, 172, 108), (200, 220, 61), (228, 234, 77), (240, 246, 96),
+ (215, 226, 106), (211, 186, 128), (205, 155, 102), (190, 90, 69),
+ (199, 62, 45), (171, 127, 74), (182, 157, 112), (201, 199, 129),
+ (215, 227, 138), (238, 244, 120), (247, 242, 113), (249, 248, 113),
+ (251, 249, 111), (248, 245, 113), (252, 240, 126), (242, 229, 192),
+ (243, 227, 215), (242, 245, 220), (244, 243, 217), (228, 230, 177)
+ ),
+
+// 129 Apophysis-040426-1cometnuc
+((205, 7, 18), (205, 7, 18), (201, 9, 19), (198, 11, 21),
+ (198, 12, 21), (198, 13, 22), (196, 13, 22), (194, 13, 23),
+ (202, 9, 19), (203, 8, 18), (205, 7, 18), (205, 7, 18),
+ (205, 7, 18), (176, 21, 27), (148, 36, 36), (126, 47, 38),
+ (105, 58, 41), (111, 166, 35), (90, 156, 35), (70, 146, 36),
+ (93, 99, 37), (116, 52, 38), (150, 36, 33), (185, 21, 29),
+ (202, 9, 19), (203, 8, 18), (205, 7, 18), (203, 9, 19),
+ (202, 11, 20), (198, 13, 22), (194, 16, 24), (127, 46, 39),
+ (76, 72, 42), (123, 172, 119), (138, 180, 151), (154, 188, 184),
+ (112, 167, 152), (71, 146, 121), (88, 154, 77), (105, 163, 34),
+ (153, 187, 38), (177, 199, 45), (201, 212, 52), (205, 213, 53),
+ (209, 215, 55), (203, 212, 52), (198, 210, 50), (190, 206, 47),
+ (168, 195, 42), (111, 166, 35), (78, 150, 35), (46, 134, 36),
+ (30, 126, 37), (15, 118, 38), (14, 110, 37), (14, 103, 37),
+ (21, 100, 38), (30, 95, 38), (39, 90, 39), (85, 67, 38),
+ (132, 44, 37), (163, 28, 30), (194, 13, 23), (198, 11, 21),
+ (202, 9, 19), (198, 11, 21), (175, 99, 30), (153, 187, 39),
+ (175, 198, 44), (198, 210, 50), (245, 233, 91), (253, 237, 128),
+ (213, 217, 178), (183, 202, 181), (154, 188, 185), (94, 158, 152),
+ (34, 128, 119), (27, 124, 78), (21, 121, 37), (8, 106, 38),
+ (2, 109, 37), (9, 115, 37), (15, 118, 36), (21, 121, 35),
+ (24, 109, 36), (27, 97, 37), (39, 90, 41), (70, 75, 41),
+ (181, 19, 28), (191, 14, 23), (202, 9, 19), (202, 9, 19),
+ (202, 9, 19), (202, 11, 20), (198, 13, 22), (153, 33, 34),
+ (93, 63, 40), (27, 97, 39), (17, 101, 38), (8, 106, 38),
+ (5, 107, 38), (2, 109, 39), (2, 109, 39), (8, 106, 38),
+ (21, 100, 38), (30, 115, 36), (40, 131, 34), (49, 135, 35),
+ (58, 140, 36), (76, 149, 35), (127, 175, 35), (133, 178, 120),
+ (182, 202, 185), (245, 234, 150), (249, 235, 133), (253, 237, 116),
+ (249, 235, 98), (242, 232, 84), (225, 223, 67), (209, 215, 55),
+ (158, 190, 39), (134, 178, 36), (111, 166, 34), (96, 159, 35),
+ (82, 152, 36), (52, 137, 35), (33, 128, 37), (21, 121, 37),
+ (15, 118, 36), (21, 121, 35), (33, 127, 34), (46, 134, 34),
+ (70, 146, 34), (111, 166, 35), (138, 180, 36), (153, 187, 38),
+ (116, 169, 35), (90, 156, 36), (64, 143, 37), (61, 141, 35),
+ (58, 140, 34), (76, 149, 33), (116, 169, 35), (158, 190, 39),
+ (206, 214, 102), (219, 221, 176), (225, 223, 173), (231, 226, 170),
+ (253, 238, 119), (230, 226, 71), (172, 197, 43), (198, 13, 22),
+ (202, 11, 20), (202, 11, 20), (202, 11, 20), (198, 13, 22),
+ (158, 40, 44), (105, 58, 39), (70, 75, 39), (33, 93, 38),
+ (33, 93, 38), (58, 81, 42), (75, 72, 42), (93, 63, 42),
+ (127, 46, 39), (198, 13, 22), (202, 9, 19), (205, 7, 18),
+ (205, 7, 18), (205, 7, 18), (205, 7, 18), (198, 13, 22),
+ (153, 33, 35), (110, 55, 39), (99, 60, 42), (58, 81, 40),
+ (52, 137, 35), (64, 143, 35), (94, 158, 33), (127, 175, 36),
+ (158, 190, 40), (194, 208, 49), (219, 220, 62), (242, 232, 84),
+ (225, 223, 66), (215, 218, 60), (205, 214, 54), (181, 201, 44),
+ (138, 180, 38), (94, 158, 33), (52, 137, 35), (40, 131, 34),
+ (33, 128, 35), (21, 121, 37), (21, 121, 37), (28, 125, 129),
+ (47, 134, 141), (47, 134, 120), (46, 134, 38), (27, 125, 36),
+ (21, 121, 37), (9, 115, 37), (2, 112, 36), (2, 112, 36),
+ (2, 109, 37), (8, 106, 38), (21, 100, 40), (33, 93, 40),
+ (70, 75, 41), (110, 55, 41), (121, 49, 39), (148, 36, 37),
+ (116, 52, 41), (99, 60, 39), (70, 75, 41), (45, 87, 38),
+ (51, 84, 41), (87, 66, 41), (148, 36, 36), (198, 13, 22),
+ (202, 9, 19), (202, 9, 19), (202, 9, 19), (202, 9, 19),
+ (202, 9, 19), (205, 7, 18), (205, 7, 18), (205, 7, 18),
+ (205, 7, 18), (205, 7, 18), (205, 7, 18), (205, 7, 18),
+ (202, 9, 19), (198, 13, 22), (177, 28, 34), (190, 206, 47),
+ (240, 231, 79), (247, 234, 93), (253, 237, 112), (253, 238, 123),
+ (249, 236, 142), (249, 236, 144), (250, 236, 141), (247, 234, 147),
+ (248, 235, 148), (244, 233, 154), (222, 222, 174), (202, 212, 182),
+ (164, 193, 185), (205, 10, 123), (198, 13, 22), (202, 9, 19),
+ (205, 7, 18), (205, 7, 18), (205, 7, 18), (205, 7, 18)
+ ),
+
+// 130 Apophysis-040426-1passionscross
+((52, 125, 24), (172, 93, 164), (141, 59, 144), (110, 25, 125),
+ (87, 22, 110), (64, 20, 95), (54, 28, 89), (45, 37, 84),
+ (59, 91, 123), (103, 78, 135), (148, 66, 148), (162, 82, 157),
+ (177, 99, 166), (181, 104, 169), (185, 109, 172), (185, 109, 172),
+ (185, 109, 172), (163, 82, 158), (147, 65, 148), (132, 48, 139),
+ (121, 36, 132), (110, 25, 125), (104, 19, 121), (99, 13, 118),
+ (87, 2, 110), (81, 5, 106), (76, 8, 103), (73, 11, 101),
+ (70, 14, 99), (73, 11, 101), (76, 8, 103), (93, 8, 114),
+ (116, 31, 128), (163, 82, 158), (170, 90, 162), (177, 99, 167),
+ (181, 104, 169), (185, 109, 172), (187, 111, 173), (190, 114, 174),
+ (209, 139, 187), (210, 141, 189), (212, 144, 191), (208, 139, 188),
+ (205, 134, 185), (201, 129, 182), (198, 125, 179), (190, 114, 174),
+ (185, 109, 172), (163, 82, 158), (147, 65, 148), (132, 48, 138),
+ (112, 28, 126), (93, 8, 114), (93, 8, 114), (93, 8, 114),
+ (82, 2, 106), (85, 2, 104), (88, 2, 103), (130, 48, 68),
+ (173, 94, 34), (189, 114, 43), (206, 135, 52), (253, 144, 57),
+ (219, 154, 62), (190, 114, 174), (194, 119, 177), (198, 125, 180),
+ (200, 127, 181), (202, 130, 182), (216, 149, 191), (242, 190, 76),
+ (248, 237, 83), (247, 218, 81), (247, 200, 79), (218, 157, 126),
+ (190, 114, 174), (181, 103, 169), (172, 93, 164), (158, 77, 154),
+ (148, 66, 148), (132, 48, 138), (118, 107, 71), (105, 166, 5),
+ (102, 164, 3), (99, 162, 2), (76, 144, 10), (33, 109, 35),
+ (45, 37, 84), (60, 22, 93), (76, 8, 103), (81, 5, 106),
+ (87, 2, 110), (93, 8, 114), (105, 19, 121), (116, 31, 128),
+ (127, 43, 135), (148, 66, 148), (164, 85, 158), (181, 104, 169),
+ (187, 112, 173), (194, 120, 177), (202, 130, 182), (212, 144, 190),
+ (205, 134, 185), (197, 124, 179), (190, 114, 174), (185, 109, 171),
+ (181, 104, 169), (181, 104, 169), (185, 109, 172), (185, 109, 172),
+ (185, 109, 172), (194, 120, 177), (196, 122, 178), (198, 125, 179),
+ (202, 130, 182), (205, 134, 185), (212, 144, 190), (219, 153, 194),
+ (231, 171, 201), (240, 188, 190), (249, 206, 180), (225, 217, 160),
+ (202, 228, 141), (202, 228, 141), (247, 200, 177), (253, 221, 180),
+ (253, 231, 85), (247, 237, 83), (245, 237, 82), (243, 238, 81),
+ (240, 239, 80), (219, 235, 69), (185, 219, 50), (163, 206, 38),
+ (99, 162, 2), (63, 133, 20), (27, 104, 39), (27, 79, 56),
+ (27, 55, 73), (51, 31, 88), (51, 31, 88), (51, 31, 88),
+ (39, 43, 80), (2, 83, 54), (2, 83, 54), (2, 83, 54),
+ (9, 88, 50), (9, 88, 50), (15, 93, 47), (21, 99, 43),
+ (9, 88, 50), (5, 85, 52), (2, 83, 54), (2, 77, 58),
+ (33, 49, 77), (58, 26, 92), (70, 14, 99), (99, 13, 118),
+ (116, 31, 128), (132, 48, 138), (121, 36, 131), (110, 25, 125),
+ (76, 8, 103), (64, 20, 96), (39, 43, 80), (14, 66, 65),
+ (40, 115, 32), (61, 132, 19), (82, 149, 7), (94, 158, 0),
+ (105, 166, 5), (105, 166, 5), (105, 166, 5), (116, 175, 12),
+ (163, 206, 38), (111, 170, 8), (105, 166, 5), (52, 125, 24),
+ (21, 99, 43), (33, 49, 77), (51, 31, 88), (58, 26, 92),
+ (39, 43, 80), (30, 51, 74), (21, 60, 69), (2, 83, 54),
+ (9, 88, 50), (21, 99, 43), (33, 109, 35), (64, 135, 17),
+ (88, 153, 3), (105, 166, 5), (122, 178, 15), (186, 220, 51),
+ (212, 232, 65), (230, 238, 75), (222, 236, 71), (209, 231, 63),
+ (190, 221, 53), (144, 194, 100), (168, 209, 118), (212, 144, 190),
+ (216, 149, 191), (222, 158, 195), (222, 158, 196), (216, 149, 191),
+ (212, 144, 190), (205, 134, 185), (185, 109, 172), (158, 77, 154),
+ (143, 60, 145), (121, 37, 131), (99, 13, 118), (70, 14, 99),
+ (58, 26, 92), (39, 43, 80), (21, 60, 69), (28, 88, 4),
+ (123, 91, 23), (94, 64, 96), (110, 25, 125), (105, 19, 121),
+ (93, 8, 114), (87, 2, 110), (87, 2, 110), (82, 2, 106),
+ (82, 2, 106), (82, 2, 106), (76, 8, 103), (70, 14, 99),
+ (58, 26, 92), (39, 43, 80), (14, 66, 65), (33, 109, 35),
+ (70, 139, 14), (88, 153, 3), (105, 166, 5), (182, 105, 39),
+ (158, 77, 154), (172, 93, 164), (177, 99, 167), (185, 109, 172),
+ (185, 109, 172), (190, 114, 174), (154, 200, 108), (194, 224, 55),
+ (222, 236, 71), (240, 239, 80), (243, 238, 81), (233, 238, 76),
+ (209, 231, 63), (163, 206, 38), (111, 170, 8), (8, 71, 62)
+ ),
+
+// 131 Apophysis-040426-1butterflyflower
+((27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (53, 40, 50), (53, 40, 50), (53, 40, 50),
+ (53, 40, 50), (53, 40, 50), (53, 40, 49), (54, 41, 49),
+ (94, 83, 21), (77, 70, 31), (61, 58, 42), (44, 38, 54),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (53, 40, 50), (76, 64, 33), (100, 89, 16), (109, 100, 10),
+ (118, 112, 4), (128, 117, 8), (138, 122, 13), (132, 117, 35),
+ (108, 105, 48), (113, 119, 63), (115, 111, 56), (118, 104, 50),
+ (108, 96, 33), (98, 88, 17), (96, 85, 18), (94, 83, 20),
+ (94, 83, 20), (95, 85, 19), (97, 87, 18), (103, 91, 15),
+ (109, 95, 13), (120, 103, 10), (131, 111, 8), (139, 138, 13),
+ (161, 164, 43), (208, 201, 81), (205, 197, 78), (203, 193, 75),
+ (202, 195, 73), (201, 197, 71), (179, 168, 67), (120, 117, 36),
+ (99, 88, 17), (96, 85, 19), (94, 83, 21), (94, 83, 21),
+ (94, 83, 21), (94, 83, 21), (94, 83, 21), (94, 83, 21),
+ (94, 83, 21), (94, 83, 21), (94, 83, 21), (94, 83, 21),
+ (94, 83, 21), (94, 83, 21), (94, 83, 21), (94, 83, 21),
+ (84, 74, 28), (60, 52, 42), (36, 31, 57), (31, 25, 61),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (33, 22, 64), (57, 46, 49), (81, 71, 35), (87, 77, 28),
+ (94, 83, 21), (94, 83, 21), (94, 83, 21), (94, 83, 21),
+ (94, 83, 21), (53, 40, 50), (40, 29, 58), (28, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (33, 37, 57), (80, 68, 30), (87, 75, 25), (94, 83, 21),
+ (101, 91, 14), (105, 93, 13), (104, 93, 13), (95, 100, 17),
+ (63, 68, 39), (46, 47, 48), (29, 27, 58), (28, 23, 62),
+ (27, 19, 66), (27, 19, 66), (53, 40, 50), (60, 48, 46),
+ (92, 76, 22), (94, 83, 21), (94, 83, 21), (94, 83, 21),
+ (94, 83, 21), (94, 83, 21), (94, 83, 21), (94, 83, 21),
+ (94, 83, 21), (73, 61, 35), (53, 40, 50), (53, 40, 50),
+ (53, 40, 50), (83, 68, 45), (92, 99, 41), (113, 91, 42),
+ (130, 119, 22), (175, 167, 46), (184, 180, 53), (193, 193, 61),
+ (182, 173, 52), (173, 156, 46), (157, 148, 29), (126, 120, 4),
+ (111, 100, 6), (110, 97, 7), (110, 95, 8), (114, 101, 5),
+ (127, 114, 2), (131, 115, 7), (131, 113, 9), (122, 121, 12),
+ (121, 144, 8), (132, 139, 8), (126, 127, 55), (116, 118, 109),
+ (102, 109, 77), (85, 76, 55), (54, 41, 50), (53, 40, 50),
+ (84, 63, 33), (89, 73, 27), (94, 83, 21), (94, 83, 20),
+ (104, 66, 13), (67, 47, 42), (53, 40, 50), (28, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (29, 19, 66), (53, 40, 50), (67, 52, 43), (94, 83, 21),
+ (94, 83, 21), (94, 83, 21), (94, 83, 21), (94, 83, 21),
+ (94, 83, 21), (94, 83, 21), (94, 83, 21), (94, 83, 21),
+ (94, 83, 21), (77, 67, 37), (53, 40, 50), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (53, 40, 50), (64, 62, 57),
+ (96, 82, 52), (102, 94, 44), (91, 85, 48), (59, 47, 47),
+ (53, 40, 50), (53, 40, 50), (53, 40, 50), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66),
+ (27, 19, 66), (27, 19, 66), (27, 19, 66), (27, 19, 66)
+ ),
+
+// 132 Apophysis-040426-1Watcher
+((65, 7, 0), (22, 10, 22), (19, 19, 29), (16, 28, 36),
+ (16, 42, 52), (16, 57, 68), (13, 64, 65), (10, 72, 63),
+ (46, 87, 61), (76, 73, 46), (106, 60, 31), (124, 56, 22),
+ (143, 52, 14), (179, 42, 12), (216, 32, 11), (230, 38, 15),
+ (245, 44, 20), (244, 64, 29), (228, 95, 29), (213, 127, 29),
+ (168, 156, 30), (123, 185, 32), (111, 139, 25), (100, 94, 19),
+ (198, 80, 46), (202, 55, 45), (206, 31, 45), (164, 42, 31),
+ (122, 53, 18), (111, 53, 21), (100, 53, 25), (88, 58, 29),
+ (58, 58, 39), (28, 75, 66), (21, 87, 72), (15, 99, 79),
+ (12, 106, 86), (10, 113, 93), (12, 122, 85), (15, 131, 78),
+ (28, 98, 40), (52, 79, 38), (76, 60, 36), (96, 56, 25),
+ (117, 52, 15), (130, 50, 14), (144, 48, 13), (201, 66, 14),
+ (242, 77, 53), (219, 75, 50), (176, 67, 37), (133, 59, 25),
+ (128, 43, 28), (123, 27, 32), (125, 41, 27), (128, 55, 22),
+ (117, 62, 31), (103, 63, 47), (89, 64, 63), (55, 57, 71),
+ (22, 51, 79), (19, 30, 76), (16, 9, 74), (58, 4, 64),
+ (64, 3, 59), (46, 28, 22), (43, 40, 32), (40, 53, 42),
+ (37, 57, 47), (34, 62, 52), (34, 84, 72), (33, 107, 83),
+ (40, 106, 85), (49, 101, 84), (59, 97, 83), (61, 90, 69),
+ (64, 84, 56), (73, 80, 52), (82, 77, 48), (89, 78, 66),
+ (100, 72, 69), (71, 80, 35), (97, 71, 32), (123, 62, 29),
+ (120, 58, 24), (117, 55, 20), (117, 48, 18), (133, 32, 5),
+ (154, 11, 4), (185, 5, 26), (216, 0, 49), (225, 2, 48),
+ (235, 5, 48), (247, 5, 41), (253, 3, 54), (253, 1, 55),
+ (251, 5, 55), (237, 7, 44), (195, 26, 27), (154, 46, 11),
+ (149, 47, 19), (144, 49, 27), (133, 60, 29), (127, 59, 24),
+ (122, 40, 4), (122, 29, 4), (122, 19, 4), (122, 17, 6),
+ (122, 15, 8), (128, 11, 9), (133, 3, 23), (116, 9, 37),
+ (106, 6, 14), (94, 9, 0), (88, 13, 4), (83, 17, 8),
+ (65, 15, 11), (41, 16, 8), (34, 7, 13), (28, 13, 23),
+ (47, 30, 26), (59, 29, 13), (71, 28, 0), (88, 23, 0),
+ (106, 19, 1), (117, 16, 4), (148, 33, 2), (177, 29, 9),
+ (212, 37, 0), (237, 10, 1), (224, 8, 7), (212, 6, 13),
+ (205, 24, 19), (177, 33, 8), (172, 38, 0), (190, 25, 20),
+ (213, 26, 56), (205, 40, 102), (198, 54, 149), (220, 98, 162),
+ (243, 142, 176), (168, 183, 198), (99, 176, 174), (77, 158, 114),
+ (116, 166, 94), (133, 29, 37), (140, 26, 32), (148, 23, 27),
+ (201, 26, 13), (216, 19, 15), (216, 13, 14), (209, 16, 10),
+ (177, 37, 1), (177, 35, 3), (177, 34, 6), (201, 23, 9),
+ (219, 13, 20), (233, 7, 32), (247, 6, 39), (253, 0, 64),
+ (254, 3, 98), (247, 20, 53), (237, 17, 52), (228, 15, 51),
+ (184, 34, 47), (138, 57, 28), (128, 29, 21), (172, 8, 28),
+ (225, 14, 32), (231, 10, 38), (237, 7, 44), (240, 2, 36),
+ (233, 13, 27), (205, 4, 7), (163, 18, 13), (123, 9, 7),
+ (106, 14, 1), (112, 3, 11), (139, 3, 23), (185, 1, 37),
+ (222, 4, 55), (233, 10, 38), (225, 22, 21), (247, 43, 15),
+ (247, 22, 5), (249, 16, 3), (252, 10, 2), (249, 15, 41),
+ (240, 34, 52), (248, 53, 52), (249, 72, 52), (249, 78, 54),
+ (245, 109, 57), (243, 196, 144), (243, 248, 241), (254, 228, 202),
+ (231, 197, 140), (216, 166, 59), (252, 110, 51), (252, 100, 51),
+ (250, 76, 35), (250, 67, 52), (248, 66, 53), (248, 63, 54),
+ (253, 50, 48), (252, 40, 51), (250, 37, 51), (253, 25, 51),
+ (253, 16, 47), (247, 9, 39), (231, 2, 54), (190, 10, 49),
+ (149, 6, 28), (144, 20, 37), (117, 51, 44), (83, 81, 54),
+ (99, 71, 44), (22, 45, 43), (71, 69, 46), (77, 68, 43),
+ (94, 69, 38), (100, 39, 37), (83, 31, 16), (71, 32, 3),
+ (83, 34, 4), (112, 57, 26), (117, 65, 34), (148, 138, 42),
+ (163, 182, 105), (254, 210, 127), (242, 247, 130), (253, 248, 95),
+ (249, 215, 71), (250, 118, 51), (253, 104, 46), (233, 103, 49),
+ (213, 102, 52), (146, 98, 87), (106, 71, 85), (89, 82, 55),
+ (70, 89, 62), (58, 96, 70), (52, 91, 64), (41, 71, 89),
+ (10, 87, 105), (21, 80, 98), (67, 70, 129), (89, 80, 78),
+ (89, 70, 70), (83, 58, 52), (64, 43, 53), (53, 49, 48),
+ (52, 37, 27), (64, 19, 11), (65, 7, 13), (77, 0, 17)
+ ),
+
+// 133 Apophysis-040426-1knotted
+((151, 44, 78), (136, 52, 74), (136, 52, 73), (136, 53, 73),
+ (136, 53, 73), (136, 53, 73), (136, 53, 73), (136, 53, 73),
+ (136, 53, 73), (136, 53, 73), (136, 54, 73), (136, 53, 73),
+ (136, 53, 73), (136, 52, 72), (136, 51, 71), (136, 51, 71),
+ (136, 51, 71), (136, 52, 74), (128, 52, 101), (121, 52, 129),
+ (136, 47, 111), (151, 42, 94), (151, 43, 87), (151, 45, 81),
+ (136, 49, 71), (130, 53, 41), (125, 57, 12), (130, 55, 42),
+ (136, 54, 73), (136, 54, 73), (136, 54, 73), (136, 51, 71),
+ (136, 48, 72), (136, 17, 78), (143, 32, 79), (151, 47, 80),
+ (165, 44, 86), (179, 41, 93), (196, 79, 65), (213, 117, 38),
+ (253, 252, 89), (182, 215, 51), (111, 179, 14), (97, 142, 18),
+ (83, 105, 22), (57, 94, 23), (31, 84, 25), (12, 31, 35),
+ (10, 76, 10), (33, 106, 0), (41, 99, 14), (49, 92, 28),
+ (76, 80, 37), (103, 68, 47), (111, 64, 56), (119, 61, 65),
+ (136, 56, 72), (136, 55, 72), (136, 54, 73), (136, 53, 73),
+ (136, 53, 73), (136, 53, 73), (136, 53, 73), (136, 53, 73),
+ (136, 53, 73), (136, 52, 70), (136, 53, 71), (136, 54, 73),
+ (136, 55, 72), (136, 57, 72), (136, 58, 72), (125, 62, 74),
+ (85, 83, 50), (61, 113, 91), (37, 143, 133), (64, 111, 97),
+ (91, 80, 62), (97, 77, 60), (103, 74, 59), (119, 64, 64),
+ (136, 57, 72), (151, 50, 83), (151, 47, 82), (151, 45, 81),
+ (158, 44, 85), (166, 43, 90), (166, 40, 91), (179, 36, 97),
+ (179, 36, 97), (179, 31, 95), (179, 27, 93), (180, 28, 96),
+ (181, 29, 100), (196, 27, 102), (233, 3, 125), (254, 2, 128),
+ (254, 0, 131), (227, 9, 121), (203, 22, 109), (179, 36, 97),
+ (172, 39, 93), (166, 43, 90), (151, 44, 78), (151, 46, 77),
+ (136, 50, 71), (136, 50, 71), (136, 51, 71), (136, 52, 72),
+ (136, 53, 73), (136, 53, 70), (119, 60, 66), (91, 71, 79),
+ (85, 57, 86), (136, 58, 75), (136, 57, 73), (136, 57, 72),
+ (136, 57, 72), (136, 57, 72), (136, 58, 72), (119, 66, 64),
+ (85, 82, 40), (76, 80, 37), (67, 79, 35), (58, 86, 29),
+ (49, 94, 24), (49, 95, 31), (85, 76, 46), (119, 62, 65),
+ (136, 58, 72), (136, 53, 73), (136, 52, 72), (136, 51, 71),
+ (136, 49, 71), (136, 49, 71), (136, 49, 71), (151, 50, 72),
+ (151, 45, 78), (143, 48, 76), (136, 51, 74), (136, 51, 74),
+ (136, 52, 74), (136, 52, 74), (136, 53, 73), (136, 53, 73),
+ (136, 54, 73), (136, 54, 73), (136, 54, 73), (136, 54, 73),
+ (136, 53, 73), (136, 52, 74), (136, 52, 74), (136, 52, 74),
+ (136, 52, 74), (136, 52, 74), (136, 52, 74), (136, 52, 74),
+ (136, 53, 73), (136, 53, 73), (136, 53, 73), (136, 53, 73),
+ (136, 54, 73), (136, 57, 75), (136, 57, 73), (136, 57, 72),
+ (119, 61, 62), (105, 44, 24), (49, 48, 8), (37, 60, 4),
+ (70, 75, 37), (86, 69, 44), (103, 63, 52), (136, 52, 70),
+ (151, 43, 78), (166, 31, 83), (166, 33, 87), (166, 33, 87),
+ (179, 33, 91), (179, 30, 92), (136, 53, 73), (136, 53, 73),
+ (136, 53, 73), (136, 53, 73), (136, 53, 73), (136, 53, 73),
+ (136, 52, 70), (136, 52, 70), (136, 52, 70), (136, 53, 70),
+ (136, 53, 73), (136, 53, 73), (136, 53, 73), (136, 52, 74),
+ (136, 52, 74), (136, 52, 74), (136, 52, 74), (136, 52, 74),
+ (136, 52, 74), (136, 51, 71), (136, 51, 71), (136, 51, 71),
+ (136, 50, 71), (136, 50, 71), (136, 50, 71), (136, 49, 71),
+ (136, 50, 71), (136, 51, 71), (136, 53, 70), (136, 57, 72),
+ (119, 66, 67), (103, 74, 59), (85, 83, 47), (49, 100, 33),
+ (40, 142, 9), (0, 126, 8), (0, 113, 40), (14, 104, 40),
+ (31, 108, 17), (37, 106, 27), (67, 88, 36), (85, 72, 47),
+ (103, 70, 53), (119, 63, 65), (136, 56, 72), (136, 58, 75),
+ (136, 58, 75), (136, 58, 72), (119, 66, 67), (119, 63, 68),
+ (136, 58, 72), (136, 58, 75), (136, 57, 75), (136, 54, 73),
+ (136, 52, 74), (151, 48, 80), (151, 46, 81), (151, 43, 78),
+ (151, 40, 79), (166, 39, 84), (166, 42, 87), (166, 36, 89),
+ (166, 33, 87), (167, 36, 93), (179, 36, 93), (179, 36, 93),
+ (179, 30, 92), (179, 26, 93), (179, 23, 91), (208, 22, 85),
+ (243, 0, 0), (235, 52, 33), (156, 45, 68), (151, 46, 77),
+ (151, 45, 78), (151, 44, 78), (151, 43, 78), (151, 44, 78)
+ ),
+
+// 134 Apophysis-040426-1artdeco
+((158, 142, 17), (249, 60, 97), (251, 61, 132), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (248, 59, 129),
+ (244, 57, 90), (248, 59, 129), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 213, 226), (253, 213, 226), (253, 213, 226),
+ (253, 191, 148), (253, 170, 70), (253, 135, 52), (253, 100, 35),
+ (253, 73, 39), (253, 67, 103), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 213, 226),
+ (253, 213, 226), (253, 215, 229), (253, 214, 227), (253, 213, 226),
+ (253, 213, 226), (253, 213, 226), (253, 211, 225), (253, 210, 224),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 109), (240, 119, 85), (228, 177, 61),
+ (220, 173, 55), (212, 170, 49), (212, 170, 49), (212, 170, 49),
+ (253, 173, 73), (253, 117, 120), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (185, 28, 121), (70, 27, 86), (84, 20, 91), (99, 13, 97),
+ (133, 16, 107), (168, 19, 117), (205, 38, 124), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (248, 59, 128),
+ (244, 57, 88), (228, 49, 71), (213, 42, 54), (168, 76, 20),
+ (99, 113, 12), (202, 185, 67), (227, 207, 110), (253, 229, 153),
+ (253, 239, 178), (253, 249, 204), (253, 248, 200), (253, 223, 139),
+ (153, 140, 14), (142, 135, 8), (132, 130, 3), (147, 137, 11),
+ (163, 145, 19), (209, 168, 47), (253, 137, 46), (247, 59, 93),
+ (219, 45, 125), (127, 0, 106), (90, 18, 84), (53, 36, 62),
+ (47, 39, 65), (41, 42, 69), (46, 40, 77), (58, 33, 82),
+ (168, 19, 117), (210, 40, 142), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (240, 55, 84), (246, 58, 60), (253, 62, 37),
+ (253, 62, 37), (253, 70, 39), (236, 79, 43), (117, 119, 18),
+ (87, 107, 18), (54, 108, 24), (21, 110, 30), (30, 104, 35),
+ (39, 98, 40), (51, 89, 35), (58, 88, 49), (158, 25, 103),
+ (190, 30, 121), (198, 35, 4), (203, 37, 2), (209, 40, 1),
+ (222, 47, 9), (242, 56, 23), (253, 82, 36), (253, 143, 49),
+ (253, 193, 94), (247, 206, 93), (242, 220, 92), (253, 184, 85),
+ (228, 177, 61), (219, 173, 54), (253, 90, 36), (222, 47, 65),
+ (194, 32, 123), (88, 19, 92), (64, 30, 80), (41, 42, 69),
+ (9, 58, 62), (33, 80, 43), (87, 107, 18), (138, 196, 50),
+ (253, 243, 182), (253, 248, 204), (253, 253, 226), (253, 253, 233),
+ (253, 217, 230), (253, 223, 236), (253, 243, 247), (253, 249, 244),
+ (253, 253, 236), (253, 251, 213), (253, 237, 170), (253, 205, 112),
+ (228, 177, 61), (209, 168, 48), (105, 116, 10), (76, 101, 24),
+ (10, 58, 89), (13, 56, 86), (16, 55, 84), (34, 45, 73),
+ (83, 21, 42), (123, 1, 42), (139, 5, 35), (144, 7, 0),
+ (139, 5, 2), (123, 1, 15), (123, 1, 42), (89, 18, 37),
+ (47, 67, 21), (51, 89, 35), (58, 92, 32), (106, 63, 3),
+ (168, 20, 18), (186, 29, 11), (186, 29, 11), (177, 24, 16),
+ (164, 17, 23), (154, 12, 28), (154, 12, 28), (173, 22, 22),
+ (182, 26, 13), (202, 37, 2), (219, 45, 62), (230, 51, 125),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (237, 54, 125), (233, 52, 76), (249, 60, 31), (194, 33, 6),
+ (106, 111, 11), (64, 95, 29), (41, 64, 24), (34, 58, 28),
+ (53, 36, 62), (111, 7, 100), (181, 26, 119), (228, 27, 144),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (253, 62, 168), (253, 62, 168), (253, 62, 168), (253, 62, 168),
+ (219, 20, 139), (185, 5, 119), (138, 4, 108), (94, 15, 55),
+ (71, 27, 50), (53, 73, 17), (82, 104, 21), (105, 116, 10)
+ ),
+
+// 135 Apophysis-040426-1expl_orange2a
+((158, 205, 44), (158, 132, 20), (158, 126, 18), (158, 120, 16),
+ (158, 120, 16), (158, 120, 16), (158, 120, 16), (158, 120, 16),
+ (158, 126, 18), (158, 124, 17), (158, 123, 17), (158, 123, 17),
+ (158, 123, 17), (158, 124, 17), (158, 126, 18), (158, 126, 18),
+ (158, 126, 18), (158, 126, 18), (158, 126, 18), (158, 126, 18),
+ (158, 129, 19), (158, 132, 20), (158, 133, 20), (158, 135, 21),
+ (158, 140, 22), (158, 140, 22), (158, 140, 22), (158, 136, 21),
+ (158, 132, 20), (158, 132, 20), (158, 132, 20), (158, 129, 19),
+ (158, 123, 17), (158, 117, 15), (158, 109, 12), (158, 102, 10),
+ (158, 93, 7), (158, 84, 4), (158, 68, 4), (158, 53, 4),
+ (158, 15, 17), (158, 10, 23), (158, 5, 29), (194, 30, 35),
+ (231, 55, 42), (233, 72, 32), (235, 90, 23), (185, 117, 21),
+ (158, 111, 13), (158, 96, 8), (158, 99, 9), (158, 102, 10),
+ (158, 106, 11), (158, 111, 13), (158, 114, 14), (158, 117, 15),
+ (158, 120, 16), (158, 121, 16), (158, 123, 17), (158, 123, 17),
+ (158, 123, 17), (158, 121, 16), (158, 120, 16), (158, 120, 16),
+ (158, 114, 14), (158, 102, 10), (158, 97, 8), (158, 93, 7),
+ (158, 91, 6), (158, 90, 6), (158, 93, 7), (158, 93, 7),
+ (158, 102, 10), (158, 106, 11), (158, 111, 13), (158, 114, 14),
+ (158, 117, 15), (158, 118, 15), (158, 120, 16), (158, 123, 17),
+ (158, 129, 19), (158, 140, 22), (158, 157, 28), (158, 174, 34),
+ (128, 173, 60), (99, 172, 86), (76, 160, 139), (52, 146, 88),
+ (158, 143, 33), (158, 124, 22), (158, 105, 11), (158, 96, 8),
+ (158, 87, 5), (158, 62, 2), (158, 39, 35), (158, 29, 41),
+ (204, 17, 39), (158, 12, 1), (158, 16, 8), (158, 21, 15),
+ (158, 37, 9), (158, 53, 4), (158, 84, 4), (158, 93, 7),
+ (158, 108, 12), (158, 111, 13), (158, 114, 14), (158, 112, 13),
+ (158, 111, 13), (158, 105, 11), (158, 90, 6), (158, 71, 0),
+ (158, 39, 35), (111, 30, 124), (84, 58, 107), (58, 87, 91),
+ (156, 139, 62), (158, 143, 32), (158, 138, 22), (158, 138, 22),
+ (158, 143, 23), (158, 141, 22), (158, 140, 22), (158, 140, 22),
+ (158, 140, 22), (158, 138, 22), (158, 132, 20), (158, 138, 22),
+ (158, 138, 22), (158, 132, 20), (158, 132, 20), (158, 132, 20),
+ (158, 135, 21), (158, 138, 22), (158, 143, 23), (158, 148, 25),
+ (158, 192, 35), (179, 179, 62), (200, 166, 89), (220, 181, 99),
+ (240, 197, 109), (243, 217, 214), (253, 219, 230), (247, 65, 134),
+ (158, 114, 44), (158, 123, 40), (158, 126, 29), (158, 129, 19),
+ (158, 126, 18), (158, 120, 16), (158, 117, 15), (158, 117, 15),
+ (158, 117, 15), (158, 115, 14), (158, 114, 14), (158, 114, 14),
+ (158, 114, 14), (158, 114, 14), (158, 111, 13), (158, 108, 12),
+ (158, 105, 11), (158, 105, 11), (158, 106, 11), (158, 108, 12),
+ (158, 114, 14), (158, 117, 15), (158, 123, 17), (158, 126, 18),
+ (158, 120, 16), (158, 117, 15), (158, 114, 14), (158, 105, 11),
+ (158, 96, 8), (158, 93, 7), (158, 93, 7), (158, 96, 8),
+ (158, 96, 8), (158, 99, 9), (158, 105, 11), (158, 114, 14),
+ (158, 123, 17), (158, 129, 19), (158, 135, 21), (158, 140, 22),
+ (158, 145, 33), (108, 147, 55), (58, 149, 77), (46, 149, 63),
+ (33, 135, 58), (37, 62, 35), (8, 29, 64), (33, 7, 86),
+ (45, 32, 56), (141, 55, 26), (158, 66, 2), (158, 87, 5),
+ (158, 87, 5), (158, 90, 2), (158, 90, 6), (158, 93, 7),
+ (158, 96, 8), (158, 102, 10), (158, 105, 11), (158, 108, 12),
+ (158, 108, 12), (158, 108, 12), (158, 108, 12), (158, 111, 13),
+ (158, 114, 14), (158, 114, 14), (158, 114, 14), (158, 117, 15),
+ (158, 120, 16), (158, 123, 17), (158, 126, 18), (158, 132, 20),
+ (158, 132, 20), (158, 132, 20), (158, 132, 20), (158, 135, 21),
+ (158, 140, 22), (158, 146, 24), (158, 161, 29), (158, 180, 32),
+ (158, 195, 33), (158, 191, 34), (158, 174, 34), (158, 156, 27),
+ (158, 146, 24), (158, 143, 23), (158, 138, 22), (158, 135, 21),
+ (158, 132, 20), (158, 132, 20), (158, 132, 20), (158, 135, 21),
+ (158, 135, 21), (158, 135, 21), (158, 132, 20), (158, 132, 20),
+ (158, 126, 18), (158, 126, 18), (158, 126, 18), (158, 126, 18),
+ (158, 129, 19), (158, 132, 20), (158, 138, 22), (158, 143, 23),
+ (158, 146, 24), (158, 148, 25), (158, 148, 25), (158, 148, 25),
+ (158, 167, 29), (158, 176, 34), (158, 201, 34), (158, 201, 42)
+ ),
+
+// 136 Apophysis-040426-1heartFlowers
+((98, 160, 76), (207, 247, 44), (212, 249, 50), (218, 251, 56),
+ (222, 250, 68), (227, 250, 81), (224, 250, 75), (221, 250, 69),
+ (218, 206, 45), (227, 177, 36), (236, 148, 28), (245, 119, 22),
+ (255, 90, 17), (240, 89, 8), (226, 89, 0), (221, 87, 0),
+ (217, 86, 0), (226, 79, 0), (216, 75, 0), (207, 72, 0),
+ (178, 53, 5), (150, 35, 10), (135, 26, 10), (120, 17, 11),
+ (84, 27, 3), (82, 46, 20), (81, 65, 37), (82, 61, 21),
+ (84, 58, 5), (83, 55, 2), (83, 52, 0), (111, 25, 0),
+ (127, 31, 26), (184, 45, 0), (195, 58, 0), (207, 72, 0),
+ (193, 124, 13), (179, 176, 27), (159, 186, 26), (140, 197, 25),
+ (213, 251, 46), (214, 251, 47), (215, 251, 48), (185, 219, 72),
+ (156, 188, 96), (152, 179, 122), (148, 170, 149), (197, 184, 199),
+ (245, 206, 215), (245, 221, 202), (221, 233, 157), (198, 246, 113),
+ (179, 236, 91), (160, 227, 70), (157, 226, 69), (154, 226, 69),
+ (131, 193, 32), (115, 186, 18), (100, 180, 5), (92, 129, 3),
+ (84, 79, 2), (116, 73, 8), (149, 67, 14), (166, 68, 0),
+ (202, 70, 0), (203, 50, 0), (188, 27, 0), (173, 4, 0),
+ (173, 4, 0), (173, 4, 0), (139, 17, 12), (84, 60, 3),
+ (36, 127, 3), (38, 137, 6), (40, 148, 10), (44, 117, 5),
+ (49, 86, 0), (50, 86, 0), (51, 87, 0), (63, 77, 0),
+ (58, 87, 20), (81, 79, 0), (117, 69, 2), (153, 60, 5),
+ (159, 64, 2), (166, 68, 0), (164, 65, 0), (135, 60, 15),
+ (54, 58, 73), (29, 58, 88), (4, 59, 103), (4, 74, 86),
+ (4, 90, 69), (6, 97, 24), (34, 136, 2), (26, 158, 2),
+ (25, 168, 21), (70, 136, 119), (105, 138, 129), (141, 140, 140),
+ (141, 140, 140), (141, 140, 140), (69, 131, 138), (68, 148, 136),
+ (46, 169, 58), (47, 154, 51), (49, 140, 45), (52, 118, 37),
+ (56, 97, 30), (81, 65, 37), (97, 55, 42), (119, 29, 24),
+ (152, 14, 12), (174, 0, 0), (174, 0, 0), (174, 0, 0),
+ (174, 0, 0), (174, 0, 0), (173, 4, 0), (149, 18, 10),
+ (81, 65, 37), (77, 70, 46), (73, 75, 56), (69, 86, 59),
+ (66, 97, 63), (45, 124, 123), (67, 142, 157), (68, 155, 128),
+ (142, 181, 95), (101, 176, 23), (79, 135, 24), (57, 95, 26),
+ (81, 65, 37), (107, 72, 12), (153, 65, 12), (173, 74, 0),
+ (173, 74, 0), (171, 71, 3), (170, 68, 6), (146, 64, 15),
+ (123, 60, 24), (81, 65, 37), (80, 45, 48), (86, 27, 69),
+ (101, 11, 88), (229, 0, 74), (242, 8, 70), (255, 17, 66),
+ (255, 17, 65), (249, 0, 32), (252, 0, 16), (226, 0, 28),
+ (181, 6, 4), (183, 10, 7), (186, 14, 10), (189, 41, 0),
+ (185, 67, 0), (173, 74, 0), (152, 98, 73), (151, 140, 116),
+ (141, 140, 140), (218, 196, 202), (230, 207, 202), (243, 218, 203),
+ (240, 216, 201), (190, 180, 197), (142, 156, 164), (177, 121, 126),
+ (164, 41, 34), (147, 57, 31), (131, 73, 29), (106, 178, 24),
+ (93, 184, 36), (82, 184, 33), (49, 148, 12), (8, 101, 29),
+ (24, 90, 47), (51, 66, 68), (64, 60, 66), (98, 48, 86),
+ (104, 27, 113), (96, 51, 127), (71, 105, 135), (69, 131, 147),
+ (119, 114, 98), (99, 94, 80), (79, 74, 62), (73, 75, 54),
+ (63, 80, 26), (56, 87, 12), (63, 80, 26), (81, 65, 37),
+ (122, 35, 26), (159, 39, 33), (164, 41, 34), (164, 41, 34),
+ (173, 4, 0), (174, 0, 0), (174, 0, 0), (174, 0, 0),
+ (174, 0, 0), (174, 0, 0), (201, 0, 30), (241, 0, 18),
+ (255, 35, 17), (255, 45, 14), (249, 65, 0), (244, 55, 0),
+ (255, 36, 10), (246, 48, 0), (230, 51, 0), (168, 42, 35),
+ (97, 55, 42), (76, 74, 70), (74, 108, 89), (57, 128, 129),
+ (67, 133, 165), (67, 141, 165), (66, 134, 166), (71, 110, 135),
+ (104, 27, 113), (96, 19, 82), (82, 28, 47), (84, 3, 29),
+ (112, 28, 23), (112, 28, 23), (127, 31, 26), (142, 35, 29),
+ (164, 41, 34), (168, 42, 35), (169, 42, 35), (169, 42, 35),
+ (173, 4, 0), (174, 0, 0), (174, 0, 0), (207, 0, 27),
+ (238, 0, 33), (255, 19, 16), (255, 25, 14), (226, 56, 47),
+ (199, 85, 82), (203, 130, 128), (220, 128, 128), (229, 68, 89),
+ (217, 55, 81), (203, 0, 35), (170, 0, 39), (156, 28, 35),
+ (98, 22, 86), (102, 34, 117), (70, 67, 139), (29, 75, 98),
+ (4, 94, 75), (64, 95, 55), (63, 100, 59), (59, 100, 86)
+ ),
+
+// 137 Apophysis-040426-1H-bird1g
+((153, 203, 48), (58, 87, 65), (84, 118, 78), (110, 150, 91),
+ (139, 125, 63), (168, 100, 36), (176, 98, 28), (185, 97, 20),
+ (168, 76, 2), (168, 43, 6), (168, 10, 11), (168, 19, 14),
+ (168, 28, 18), (158, 53, 20), (148, 78, 22), (148, 84, 32),
+ (148, 91, 42), (185, 122, 53), (193, 129, 53), (201, 136, 54),
+ (208, 130, 48), (216, 125, 43), (208, 127, 45), (201, 130, 47),
+ (185, 122, 53), (124, 133, 51), (64, 144, 49), (48, 127, 37),
+ (33, 110, 26), (33, 101, 28), (33, 92, 30), (33, 64, 24),
+ (14, 80, 3), (58, 87, 5), (58, 87, 35), (58, 87, 65),
+ (48, 98, 71), (39, 110, 78), (48, 97, 73), (58, 85, 68),
+ (105, 55, 95), (129, 39, 109), (153, 23, 123), (142, 20, 126),
+ (132, 18, 130), (121, 18, 112), (110, 18, 95), (64, 27, 114),
+ (58, 124, 128), (14, 98, 92), (11, 91, 78), (9, 85, 65),
+ (9, 103, 32), (9, 121, 0), (24, 134, 0), (39, 147, 0),
+ (110, 182, 27), (118, 137, 31), (127, 93, 35), (104, 83, 56),
+ (82, 73, 77), (60, 84, 87), (39, 95, 97), (14, 118, 101),
+ (39, 140, 74), (132, 191, 25), (152, 202, 38), (172, 213, 51),
+ (194, 181, 59), (216, 149, 67), (201, 124, 70), (168, 42, 54),
+ (172, 56, 141), (152, 52, 141), (132, 48, 142), (132, 57, 142),
+ (132, 67, 143), (132, 82, 141), (132, 98, 140), (110, 81, 134),
+ (105, 61, 86), (148, 52, 50), (166, 27, 96), (185, 2, 143),
+ (200, 7, 145), (216, 13, 147), (216, 16, 90), (216, 17, 84),
+ (201, 18, 19), (201, 26, 12), (201, 34, 5), (201, 63, 10),
+ (201, 93, 16), (216, 100, 46), (201, 111, 30), (168, 94, 24),
+ (148, 60, 5), (105, 53, 22), (69, 66, 44), (33, 80, 67),
+ (36, 86, 78), (39, 93, 89), (64, 127, 80), (87, 156, 61),
+ (110, 165, 71), (147, 143, 67), (185, 122, 64), (185, 128, 66),
+ (185, 134, 68), (127, 145, 101), (110, 150, 91), (87, 134, 84),
+ (64, 138, 65), (39, 140, 33), (39, 139, 27), (39, 139, 21),
+ (14, 132, 23), (14, 127, 21), (39, 134, 24), (39, 128, 23),
+ (82, 82, 6), (48, 102, 20), (14, 122, 35), (14, 123, 34),
+ (14, 125, 33), (9, 119, 28), (9, 101, 41), (9, 97, 53),
+ (33, 85, 39), (105, 69, 15), (126, 73, 18), (148, 78, 22),
+ (168, 82, 20), (148, 78, 27), (127, 60, 22), (105, 53, 17),
+ (105, 26, 31), (107, 15, 32), (110, 5, 33), (107, 6, 38),
+ (105, 7, 44), (64, 8, 70), (64, 8, 71), (39, 8, 67),
+ (39, 3, 63), (39, 14, 69), (24, 11, 72), (9, 9, 75),
+ (33, 2, 73), (39, 4, 66), (39, 8, 62), (33, 2, 72),
+ (39, 14, 83), (39, 17, 86), (39, 20, 89), (33, 32, 76),
+ (39, 63, 74), (39, 95, 92), (39, 95, 100), (39, 96, 85),
+ (64, 85, 74), (168, 100, 46), (176, 114, 50), (185, 128, 55),
+ (185, 167, 32), (172, 213, 49), (172, 204, 71), (172, 172, 112),
+ (105, 178, 161), (118, 171, 126), (132, 165, 91), (110, 181, 39),
+ (110, 181, 39), (87, 170, 32), (64, 147, 50), (64, 144, 55),
+ (64, 138, 65), (127, 110, 36), (168, 94, 29), (148, 78, 22),
+ (105, 72, 29), (87, 53, 27), (87, 48, 30), (39, 4, 50),
+ (39, 17, 48), (39, 20, 38), (39, 24, 29), (39, 15, 1),
+ (39, 20, 47), (39, 4, 50), (39, 14, 65), (9, 32, 86),
+ (9, 44, 82), (14, 50, 44), (9, 121, 4), (9, 121, 0),
+ (14, 125, 32), (39, 129, 48), (64, 141, 60), (110, 158, 81),
+ (132, 161, 95), (153, 171, 99), (172, 167, 111), (172, 130, 145),
+ (172, 62, 124), (148, 45, 90), (132, 34, 68), (87, 14, 75),
+ (64, 20, 69), (39, 38, 65), (39, 53, 64), (64, 51, 117),
+ (110, 99, 124), (87, 125, 93), (110, 154, 80), (153, 202, 51),
+ (132, 193, 32), (110, 181, 16), (64, 158, 0), (39, 143, 18),
+ (39, 139, 21), (39, 142, 28), (39, 140, 33), (39, 140, 33),
+ (39, 142, 28), (39, 137, 22), (58, 108, 35), (105, 99, 25),
+ (105, 93, 13), (105, 68, 6), (127, 43, 15), (127, 42, 9),
+ (148, 43, 4), (127, 43, 8), (105, 68, 6), (105, 56, 12),
+ (105, 49, 26), (105, 23, 40), (110, 5, 29), (127, 7, 35),
+ (132, 24, 24), (148, 28, 10), (148, 24, 14), (148, 18, 26),
+ (153, 11, 88), (185, 7, 145), (185, 11, 148), (201, 24, 157),
+ (172, 38, 142), (172, 62, 146), (172, 68, 163), (172, 62, 139),
+ (172, 68, 127), (185, 143, 89), (172, 196, 84), (172, 208, 68)
+ ),
+
+// 138 Apophysis-040426-1Emergence2
+((210, 159, 116), (175, 151, 139), (159, 133, 120), (144, 115, 101),
+ (124, 105, 104), (104, 96, 107), (98, 94, 108), (93, 92, 110),
+ (99, 84, 107), (101, 70, 105), (103, 57, 104), (122, 65, 117),
+ (141, 73, 130), (124, 93, 132), (107, 113, 135), (94, 106, 132),
+ (81, 100, 130), (87, 98, 116), (91, 96, 89), (95, 94, 63),
+ (60, 57, 32), (26, 21, 2), (26, 21, 2), (26, 21, 2),
+ (21, 20, 2), (21, 19, 1), (22, 19, 0), (24, 20, 2),
+ (27, 21, 5), (65, 20, 24), (104, 20, 43), (158, 28, 36),
+ (197, 21, 34), (199, 26, 32), (142, 25, 33), (86, 24, 35),
+ (54, 22, 19), (23, 20, 3), (24, 21, 4), (25, 22, 5),
+ (118, 69, 62), (127, 72, 76), (136, 75, 91), (112, 78, 106),
+ (89, 81, 122), (46, 73, 138), (4, 65, 154), (47, 112, 142),
+ (74, 140, 152), (5, 154, 254), (42, 148, 205), (79, 142, 157),
+ (100, 136, 109), (121, 131, 62), (129, 127, 39), (137, 123, 16),
+ (179, 171, 2), (200, 186, 5), (222, 202, 9), (221, 200, 9),
+ (220, 199, 10), (220, 179, 25), (220, 160, 40), (207, 156, 13),
+ (164, 128, 31), (129, 83, 70), (121, 83, 84), (114, 83, 99),
+ (108, 100, 86), (102, 118, 73), (115, 122, 44), (136, 115, 48),
+ (190, 44, 45), (152, 46, 75), (114, 49, 105), (109, 36, 156),
+ (104, 24, 207), (131, 55, 169), (158, 87, 131), (190, 148, 74),
+ (207, 156, 15), (208, 155, 13), (206, 179, 13), (204, 203, 14),
+ (161, 224, 8), (118, 246, 3), (94, 231, 17), (25, 228, 59),
+ (112, 127, 8), (106, 105, 4), (101, 83, 1), (83, 75, 1),
+ (66, 67, 1), (26, 21, 2), (26, 21, 2), (26, 21, 2),
+ (27, 22, 3), (122, 52, 62), (141, 45, 68), (160, 38, 75),
+ (182, 27, 61), (204, 17, 48), (212, 15, 42), (188, 7, 48),
+ (79, 23, 32), (52, 22, 17), (26, 21, 2), (26, 21, 2),
+ (26, 21, 2), (26, 21, 2), (26, 21, 2), (82, 58, 12),
+ (131, 86, 19), (227, 118, 13), (235, 102, 14), (244, 87, 16),
+ (246, 84, 19), (254, 85, 20), (247, 84, 17), (246, 85, 17),
+ (192, 156, 36), (192, 161, 64), (193, 167, 93), (202, 165, 108),
+ (212, 163, 123), (190, 179, 113), (151, 128, 87), (123, 101, 88),
+ (99, 85, 82), (123, 76, 92), (123, 82, 96), (124, 88, 100),
+ (144, 90, 113), (170, 68, 89), (176, 26, 74), (212, 25, 80),
+ (212, 5, 21), (228, 28, 20), (245, 52, 19), (245, 52, 18),
+ (245, 53, 17), (233, 36, 20), (225, 26, 21), (208, 22, 45),
+ (162, 35, 44), (139, 38, 72), (142, 54, 61), (145, 70, 51),
+ (131, 81, 20), (123, 99, 13), (111, 102, 33), (107, 101, 65),
+ (104, 90, 81), (110, 96, 85), (117, 103, 90), (179, 174, 118),
+ (118, 164, 117), (164, 35, 40), (138, 69, 114), (125, 102, 130),
+ (105, 122, 140), (79, 129, 128), (61, 134, 128), (44, 140, 129),
+ (56, 143, 124), (78, 140, 125), (101, 140, 75), (136, 117, 22),
+ (191, 164, 11), (202, 200, 10), (214, 237, 9), (219, 241, 8),
+ (220, 239, 10), (214, 237, 11), (204, 208, 10), (185, 173, 3),
+ (154, 139, 14), (98, 169, 67), (0, 161, 93), (15, 233, 175),
+ (6, 227, 194), (25, 231, 231), (28, 249, 216), (19, 250, 196),
+ (141, 154, 136), (152, 148, 102), (164, 142, 69), (179, 136, 57),
+ (188, 118, 30), (172, 97, 29), (104, 79, 15), (26, 21, 2),
+ (26, 21, 2), (26, 21, 2), (26, 21, 2), (92, 79, 37),
+ (124, 96, 49), (145, 146, 80), (192, 187, 93), (242, 211, 68),
+ (230, 222, 61), (206, 188, 52), (172, 139, 36), (141, 143, 78),
+ (99, 156, 62), (117, 165, 63), (137, 172, 54), (205, 205, 11),
+ (216, 237, 12), (219, 237, 11), (222, 239, 10), (247, 232, 9),
+ (249, 231, 11), (248, 227, 12), (241, 226, 11), (229, 224, 2),
+ (219, 200, 10), (204, 182, 21), (175, 123, 47), (145, 121, 49),
+ (98, 112, 95), (93, 127, 111), (80, 121, 123), (71, 125, 89),
+ (59, 113, 89), (30, 29, 8), (26, 21, 2), (26, 21, 2),
+ (67, 19, 17), (114, 25, 55), (182, 43, 40), (231, 61, 12),
+ (245, 84, 16), (246, 85, 15), (244, 91, 11), (228, 119, 14),
+ (228, 119, 14), (227, 122, 17), (225, 123, 15), (210, 153, 12),
+ (206, 155, 12), (191, 120, 32), (198, 112, 55), (168, 88, 51),
+ (148, 69, 52), (128, 27, 95), (178, 24, 110), (220, 25, 81),
+ (225, 67, 32), (227, 120, 14), (208, 156, 11), (221, 203, 9),
+ (221, 239, 13), (231, 233, 61), (212, 187, 97), (216, 179, 111)
+ ),
+
+// 139 Apophysis-040426-1Egg
+((116, 47, 60), (111, 50, 25), (113, 48, 42), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (90, 79, 100), (64, 111, 141), (73, 119, 146),
+ (82, 127, 152), (121, 162, 177), (126, 167, 180), (132, 172, 184),
+ (170, 191, 198), (209, 211, 213), (176, 194, 201), (143, 178, 189),
+ (110, 161, 173), (93, 152, 163), (76, 144, 154), (96, 95, 107),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (148, 31, 4),
+ (133, 39, 7), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (104, 92, 110), (93, 137, 160), (101, 144, 165), (110, 152, 170),
+ (132, 171, 184), (135, 173, 185), (138, 175, 187), (138, 175, 187),
+ (138, 175, 187), (138, 175, 187), (138, 175, 187), (138, 168, 185),
+ (132, 172, 184), (127, 166, 180), (110, 151, 170), (93, 137, 160),
+ (63, 110, 141), (33, 83, 122), (27, 56, 104), (21, 29, 86),
+ (52, 0, 65), (58, 5, 61), (64, 11, 57), (55, 8, 63),
+ (46, 5, 69), (36, 14, 75), (27, 23, 82), (15, 35, 90),
+ (14, 65, 110), (51, 100, 133), (78, 123, 150), (105, 147, 167),
+ (105, 147, 167), (105, 147, 167), (93, 137, 160), (70, 116, 145),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (102, 41, 51), (88, 36, 42),
+ (82, 30, 45), (76, 24, 49), (64, 11, 57), (64, 11, 57),
+ (40, 11, 74), (21, 32, 88), (2, 53, 102), (11, 62, 108),
+ (21, 71, 114), (21, 71, 114), (21, 71, 114), (27, 77, 118),
+ (21, 71, 114), (9, 41, 94), (27, 23, 81), (46, 5, 69),
+ (55, 8, 63), (64, 11, 57), (70, 18, 53), (82, 30, 45),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (94, 42, 38), (88, 36, 42), (88, 36, 42),
+ (82, 30, 45), (70, 18, 53), (73, 21, 51), (76, 24, 49),
+ (40, 85, 78), (64, 111, 141), (93, 137, 160), (116, 157, 174),
+ (132, 172, 184), (135, 173, 185), (138, 175, 187), (138, 169, 185),
+ (138, 164, 183), (138, 150, 176), (116, 47, 60), (172, 19, 26),
+ (190, 10, 43), (219, 2, 74), (236, 10, 104), (253, 19, 135),
+ (238, 12, 147), (138, 82, 128), (76, 122, 149), (70, 116, 145),
+ (21, 117, 121), (27, 100, 121), (33, 83, 122), (33, 83, 122),
+ (39, 88, 126), (58, 105, 137), (70, 116, 145), (76, 122, 149),
+ (70, 116, 145), (39, 126, 132), (39, 126, 132), (39, 126, 132),
+ (70, 141, 151), (99, 142, 163), (105, 147, 167), (105, 159, 170),
+ (70, 141, 151), (54, 133, 141), (39, 126, 132), (14, 113, 116),
+ (2, 107, 108), (27, 77, 118), (27, 92, 87), (70, 70, 56),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (88, 36, 42),
+ (82, 30, 45), (70, 18, 53), (33, 17, 78), (9, 41, 94),
+ (33, 88, 83), (57, 76, 65), (82, 64, 47), (94, 42, 38),
+ (94, 42, 38), (94, 42, 38), (94, 42, 38), (94, 42, 38),
+ (88, 36, 42), (82, 30, 45), (76, 24, 49), (70, 18, 53),
+ (64, 11, 57), (64, 11, 57), (58, 5, 61), (58, 5, 61),
+ (64, 11, 57), (70, 18, 53), (82, 30, 45), (88, 36, 42),
+ (94, 42, 38), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (138, 110, 149), (116, 157, 174), (127, 166, 180), (127, 170, 182),
+ (127, 166, 180), (105, 159, 170), (76, 144, 154), (45, 94, 130),
+ (52, 79, 70), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60),
+ (116, 47, 60), (94, 42, 38), (88, 36, 42), (52, 79, 70),
+ (39, 88, 126), (58, 105, 137), (76, 122, 149), (82, 127, 152),
+ (76, 122, 149), (64, 111, 141), (51, 100, 133), (71, 70, 81),
+ (116, 47, 60), (116, 47, 60), (116, 47, 60), (116, 47, 60)
+ ),
+
+// 140 Apophysis-040426-1PenEgg
+((128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (126, 37, 83), (124, 40, 81), (125, 93, 82),
+ (127, 147, 83), (158, 173, 99), (189, 199, 115), (172, 187, 131),
+ (155, 176, 147), (127, 128, 167), (127, 100, 129), (127, 73, 91),
+ (127, 54, 88), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (127, 36, 67),
+ (127, 37, 48), (149, 36, 30), (172, 36, 12), (206, 22, 1),
+ (222, 0, 0), (182, 34, 9), (153, 25, 15), (124, 16, 22),
+ (116, 22, 37), (109, 29, 52), (109, 28, 52), (110, 27, 53),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (190, 30, 60), (254, 105, 60), (248, 140, 69), (242, 175, 79),
+ (180, 175, 105), (118, 175, 132), (100, 159, 143), (82, 144, 155),
+ (127, 36, 87), (127, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (127, 43, 77), (115, 68, 60), (104, 93, 44), (94, 118, 35),
+ (85, 143, 27), (71, 112, 32), (58, 81, 38), (18, 111, 118),
+ (24, 115, 122), (6, 99, 85), (8, 51, 70), (10, 3, 55),
+ (10, 4, 57), (10, 6, 59), (16, 10, 63), (40, 22, 72),
+ (124, 34, 79), (126, 34, 82), (128, 35, 86), (131, 34, 89),
+ (134, 33, 93), (210, 0, 114), (245, 67, 187), (229, 0, 127),
+ (127, 1, 122), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (108, 45, 74), (65, 33, 69), (34, 21, 72),
+ (22, 13, 66), (31, 17, 69), (45, 23, 70), (59, 29, 72),
+ (81, 38, 68), (92, 40, 64), (114, 46, 49), (127, 59, 20),
+ (127, 61, 19), (119, 45, 42), (112, 29, 65), (120, 32, 75),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (124, 37, 86), (55, 12, 71), (55, 10, 56), (56, 9, 42),
+ (35, 1, 23), (32, 1, 23), (53, 3, 6), (77, 17, 22),
+ (106, 27, 56), (117, 31, 71), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (127, 66, 118), (26, 120, 132), (25, 118, 127), (25, 116, 123),
+ (9, 97, 83), (54, 74, 72), (75, 54, 64), (123, 40, 81),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 31, 83), (127, 15, 19), (133, 29, 17), (140, 44, 15),
+ (160, 44, 2), (165, 43, 18), (130, 46, 57), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (127, 36, 85), (94, 41, 63), (90, 60, 41),
+ (46, 90, 8), (54, 74, 20), (70, 35, 45), (83, 20, 29),
+ (89, 62, 32), (94, 97, 32), (91, 145, 20), (99, 154, 26),
+ (101, 64, 62), (105, 54, 58), (109, 45, 55), (115, 94, 68),
+ (129, 120, 50), (165, 151, 75), (127, 139, 60), (251, 228, 131),
+ (241, 180, 78), (227, 215, 74), (212, 212, 81), (210, 214, 82),
+ (144, 172, 74), (127, 149, 77), (127, 126, 96), (77, 141, 153),
+ (87, 146, 157), (102, 155, 160), (159, 183, 189), (197, 198, 158),
+ (234, 222, 199), (217, 213, 147), (252, 230, 133), (240, 179, 79),
+ (250, 147, 72), (253, 136, 70), (253, 103, 58), (251, 83, 49),
+ (245, 38, 34), (176, 36, 12), (89, 45, 20), (70, 66, 0),
+ (29, 62, 27), (13, 39, 32), (16, 4, 47), (18, 0, 66),
+ (27, 0, 67), (66, 17, 75), (102, 32, 83), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (123, 32, 78), (69, 22, 73),
+ (47, 24, 72), (33, 18, 69), (44, 24, 51), (83, 20, 31),
+ (94, 22, 42), (127, 28, 8), (133, 48, 27), (141, 47, 21),
+ (179, 37, 11), (199, 51, 29), (170, 42, 20), (127, 5, 36),
+ (127, 4, 41), (127, 3, 57), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86),
+ (128, 35, 86), (128, 35, 86), (128, 35, 86), (128, 35, 86)
+ ),
+
+// 141 Apophysis-040426-1kaosGothic
+((153, 26, 22), (233, 221, 164), (171, 190, 134), (110, 160, 104),
+ (82, 82, 68), (55, 4, 33), (30, 4, 33), (6, 4, 33),
+ (37, 123, 67), (37, 123, 67), (37, 123, 67), (26, 109, 53),
+ (16, 96, 40), (31, 88, 32), (47, 80, 25), (47, 80, 25),
+ (47, 80, 25), (47, 80, 25), (47, 80, 25), (47, 80, 25),
+ (47, 80, 25), (47, 80, 25), (47, 80, 25), (47, 80, 25),
+ (94, 56, 1), (70, 68, 13), (47, 80, 25), (47, 80, 25),
+ (47, 80, 25), (70, 68, 13), (94, 56, 1), (139, 34, 19),
+ (143, 32, 21), (139, 34, 19), (139, 34, 19), (139, 34, 19),
+ (116, 45, 10), (94, 56, 1), (103, 52, 3), (112, 48, 5),
+ (139, 34, 19), (139, 34, 19), (139, 34, 19), (133, 37, 16),
+ (127, 40, 13), (110, 48, 7), (94, 56, 1), (94, 56, 1),
+ (94, 56, 1), (94, 56, 1), (94, 56, 1), (94, 56, 1),
+ (94, 56, 1), (94, 56, 1), (94, 56, 1), (94, 56, 1),
+ (94, 56, 1), (94, 56, 1), (94, 56, 1), (94, 56, 1),
+ (94, 56, 1), (116, 45, 10), (139, 34, 19), (139, 34, 19),
+ (143, 32, 21), (177, 15, 38), (194, 8, 46), (212, 1, 55),
+ (212, 1, 55), (212, 1, 55), (228, 8, 63), (228, 8, 63),
+ (249, 19, 73), (230, 10, 64), (212, 1, 55), (175, 17, 37),
+ (139, 34, 19), (116, 45, 10), (94, 56, 1), (94, 56, 1),
+ (139, 34, 19), (139, 34, 19), (133, 37, 16), (127, 40, 13),
+ (110, 48, 7), (94, 56, 1), (94, 56, 1), (139, 34, 19),
+ (139, 34, 19), (116, 45, 10), (94, 56, 1), (73, 67, 11),
+ (52, 78, 22), (47, 80, 25), (47, 80, 25), (47, 80, 25),
+ (47, 80, 25), (37, 123, 67), (87, 148, 92), (138, 173, 117),
+ (157, 183, 126), (177, 193, 136), (233, 221, 164), (240, 225, 168),
+ (138, 173, 117), (96, 152, 96), (55, 132, 76), (55, 132, 76),
+ (55, 132, 76), (93, 78, 57), (139, 34, 19), (181, 13, 40),
+ (212, 1, 55), (251, 20, 74), (251, 20, 74), (251, 20, 74),
+ (253, 21, 75), (219, 214, 157), (240, 225, 168), (252, 230, 174),
+ (240, 225, 168), (246, 123, 121), (253, 21, 75), (251, 20, 74),
+ (249, 19, 73), (235, 12, 66), (212, 1, 55), (181, 13, 40),
+ (177, 15, 38), (139, 34, 19), (116, 45, 10), (94, 56, 1),
+ (94, 56, 1), (47, 80, 25), (47, 80, 25), (47, 80, 25),
+ (16, 96, 40), (11, 101, 46), (6, 107, 52), (6, 107, 52),
+ (6, 107, 52), (16, 96, 40), (47, 80, 25), (94, 56, 1),
+ (94, 56, 1), (94, 56, 1), (94, 56, 1), (94, 56, 1),
+ (94, 56, 1), (94, 56, 1), (94, 56, 1), (94, 56, 1),
+ (47, 80, 25), (47, 80, 25), (47, 80, 25), (47, 80, 25),
+ (47, 80, 25), (65, 71, 16), (94, 56, 1), (139, 34, 19),
+ (177, 15, 38), (181, 13, 40), (179, 14, 39), (177, 15, 38),
+ (143, 32, 21), (139, 34, 19), (139, 34, 19), (94, 56, 1),
+ (139, 34, 19), (158, 24, 28), (177, 15, 38), (181, 13, 40),
+ (181, 13, 40), (181, 13, 40), (177, 15, 38), (143, 32, 21),
+ (139, 34, 19), (94, 56, 1), (94, 56, 1), (47, 80, 25),
+ (47, 80, 25), (47, 80, 25), (94, 56, 1), (112, 48, 5),
+ (139, 34, 19), (139, 34, 19), (139, 34, 19), (127, 40, 13),
+ (94, 56, 1), (94, 56, 1), (139, 34, 19), (143, 32, 21),
+ (177, 15, 38), (181, 13, 40), (212, 1, 55), (212, 1, 55),
+ (201, 3, 50), (177, 15, 38), (139, 34, 19), (94, 56, 1),
+ (65, 71, 16), (47, 80, 25), (47, 80, 25), (16, 96, 40),
+ (14, 112, 56), (6, 107, 52), (16, 96, 40), (47, 80, 25),
+ (94, 56, 1), (94, 56, 1), (139, 34, 19), (181, 13, 40),
+ (212, 1, 55), (212, 1, 55), (212, 1, 55), (190, 8, 44),
+ (181, 13, 40), (181, 13, 40), (177, 15, 38), (143, 32, 21),
+ (139, 34, 19), (94, 56, 1), (47, 80, 25), (47, 80, 25),
+ (47, 80, 25), (16, 96, 40), (2, 102, 47), (16, 96, 40),
+ (16, 96, 40), (47, 80, 25), (94, 56, 1), (139, 34, 19),
+ (139, 34, 19), (99, 54, 0), (94, 56, 1), (94, 56, 1),
+ (47, 80, 25), (47, 80, 25), (47, 80, 25), (94, 56, 1),
+ (139, 34, 19), (143, 32, 21), (168, 20, 33), (177, 15, 38),
+ (181, 13, 40), (212, 1, 55), (228, 8, 63), (249, 19, 73),
+ (253, 21, 75), (253, 21, 75), (253, 21, 75), (249, 19, 73),
+ (235, 12, 66), (219, 4, 58), (181, 13, 40), (139, 34, 19)
+ ),
+
+// 142 Apophysis-040426-1KQNova
+((82, 83, 39), (198, 92, 96), (200, 91, 77), (203, 90, 58),
+ (148, 82, 31), (94, 74, 5), (85, 70, 16), (76, 67, 28),
+ (2, 44, 42), (14, 46, 54), (26, 49, 67), (57, 36, 53),
+ (88, 24, 40), (91, 35, 43), (95, 47, 47), (86, 48, 44),
+ (77, 50, 41), (125, 179, 21), (145, 182, 33), (165, 186, 45),
+ (179, 184, 51), (193, 182, 58), (189, 173, 55), (186, 164, 53),
+ (167, 153, 48), (185, 138, 36), (204, 124, 25), (229, 87, 23),
+ (255, 50, 21), (237, 30, 18), (220, 11, 16), (178, 5, 11),
+ (167, 23, 14), (194, 31, 0), (222, 55, 13), (250, 79, 27),
+ (244, 99, 50), (238, 120, 74), (239, 117, 73), (241, 114, 73),
+ (168, 45, 12), (163, 34, 16), (158, 23, 20), (160, 13, 10),
+ (163, 4, 1), (165, 10, 2), (167, 17, 3), (197, 27, 2),
+ (216, 13, 9), (153, 18, 24), (151, 28, 55), (149, 39, 86),
+ (188, 19, 93), (228, 0, 100), (230, 4, 90), (232, 8, 81),
+ (235, 44, 16), (242, 45, 27), (249, 46, 39), (249, 63, 45),
+ (249, 80, 51), (251, 92, 91), (254, 104, 131), (236, 121, 124),
+ (245, 109, 97), (246, 155, 48), (233, 154, 64), (221, 153, 80),
+ (235, 157, 149), (249, 161, 219), (230, 207, 213), (218, 203, 180),
+ (222, 220, 199), (222, 224, 215), (223, 228, 231), (236, 238, 225),
+ (250, 249, 219), (248, 247, 217), (247, 246, 216), (253, 234, 178),
+ (251, 207, 162), (253, 131, 188), (247, 148, 126), (241, 166, 65),
+ (242, 178, 63), (244, 191, 61), (251, 238, 82), (252, 253, 115),
+ (149, 191, 189), (100, 165, 165), (52, 140, 141), (48, 136, 132),
+ (45, 132, 124), (98, 175, 69), (100, 176, 16), (74, 164, 4),
+ (52, 138, 13), (32, 100, 51), (48, 107, 64), (64, 114, 77),
+ (93, 113, 68), (123, 113, 60), (129, 117, 59), (92, 97, 57),
+ (122, 51, 65), (149, 76, 69), (177, 102, 73), (168, 119, 55),
+ (160, 136, 38), (153, 87, 0), (128, 83, 0), (138, 62, 0),
+ (134, 47, 28), (111, 57, 47), (107, 81, 34), (104, 106, 22),
+ (139, 159, 44), (204, 131, 78), (230, 84, 84), (247, 19, 116),
+ (229, 11, 150), (188, 34, 117), (147, 57, 85), (117, 72, 97),
+ (87, 88, 109), (76, 90, 99), (69, 94, 90), (58, 43, 76),
+ (21, 46, 66), (14, 94, 117), (20, 110, 124), (27, 126, 131),
+ (26, 135, 132), (74, 109, 89), (52, 95, 76), (86, 65, 74),
+ (127, 16, 35), (123, 18, 31), (120, 20, 28), (117, 14, 23),
+ (115, 8, 18), (76, 2, 29), (33, 1, 50), (7, 19, 67),
+ (26, 59, 90), (152, 72, 157), (171, 72, 162), (190, 72, 168),
+ (185, 45, 150), (177, 29, 123), (164, 38, 119), (126, 34, 99),
+ (86, 16, 86), (80, 19, 91), (75, 23, 97), (122, 66, 139),
+ (154, 77, 159), (133, 112, 145), (141, 163, 176), (168, 199, 193),
+ (212, 225, 182), (252, 210, 162), (240, 226, 155), (229, 243, 148),
+ (225, 239, 68), (232, 193, 64), (230, 178, 56), (225, 184, 58),
+ (209, 195, 73), (195, 206, 112), (181, 218, 151), (226, 237, 177),
+ (225, 234, 189), (245, 247, 210), (252, 244, 242), (252, 194, 232),
+ (250, 181, 226), (238, 188, 223), (231, 186, 215), (219, 174, 197),
+ (171, 161, 169), (126, 141, 122), (132, 137, 43), (105, 108, 21),
+ (168, 124, 25), (173, 129, 28), (179, 134, 31), (205, 101, 16),
+ (231, 139, 38), (248, 149, 48), (244, 186, 60), (236, 196, 65),
+ (246, 219, 80), (247, 246, 78), (236, 205, 65), (248, 171, 53),
+ (248, 115, 70), (253, 18, 93), (232, 7, 113), (216, 5, 120),
+ (213, 13, 148), (219, 15, 146), (223, 85, 180), (253, 132, 186),
+ (253, 145, 207), (243, 165, 205), (204, 158, 195), (145, 173, 174),
+ (111, 162, 166), (116, 155, 111), (142, 155, 49), (122, 175, 35),
+ (100, 153, 35), (63, 160, 27), (15, 103, 25), (3, 71, 24),
+ (3, 58, 39), (26, 84, 25), (51, 88, 19), (41, 68, 1),
+ (52, 37, 4), (64, 27, 1), (86, 7, 10), (100, 27, 54),
+ (138, 61, 81), (131, 132, 56), (159, 179, 80), (146, 161, 60),
+ (98, 112, 51), (39, 79, 68), (9, 54, 47), (2, 45, 36),
+ (9, 54, 31), (22, 41, 21), (22, 26, 25), (28, 0, 27),
+ (86, 7, 13), (86, 8, 8), (105, 1, 12), (122, 36, 35),
+ (132, 54, 52), (112, 20, 67), (92, 2, 53), (93, 9, 25),
+ (105, 16, 2), (116, 53, 12), (79, 68, 12), (87, 76, 31),
+ (47, 117, 29), (68, 157, 7), (92, 165, 0), (86, 137, 0),
+ (47, 109, 34), (30, 87, 44), (76, 59, 65), (152, 140, 40)
+ ),
+
+// 143 Apophysis-040426-1kaosframe
+((249, 250, 185), (158, 204, 168), (114, 141, 121), (70, 79, 74),
+ (62, 67, 71), (55, 56, 68), (62, 67, 69), (70, 79, 70),
+ (93, 167, 144), (104, 174, 148), (116, 182, 152), (155, 203, 158),
+ (194, 224, 164), (210, 224, 139), (227, 225, 115), (213, 215, 102),
+ (200, 206, 89), (227, 0, 99), (205, 6, 98), (184, 12, 98),
+ (205, 118, 106), (227, 225, 115), (232, 229, 121), (237, 233, 127),
+ (251, 245, 160), (251, 245, 160), (251, 245, 160), (239, 235, 137),
+ (227, 225, 115), (213, 217, 102), (200, 209, 90), (166, 17, 95),
+ (166, 17, 95), (177, 35, 4), (177, 35, 4), (177, 35, 4),
+ (146, 48, 24), (116, 61, 45), (104, 65, 52), (93, 70, 60),
+ (55, 51, 70), (50, 71, 83), (45, 91, 96), (69, 130, 120),
+ (93, 169, 144), (93, 168, 146), (93, 167, 148), (116, 180, 156),
+ (158, 204, 177), (209, 232, 189), (225, 240, 188), (242, 248, 188),
+ (248, 249, 181), (254, 251, 175), (254, 251, 175), (254, 251, 175),
+ (253, 250, 174), (247, 249, 175), (242, 248, 176), (225, 240, 174),
+ (209, 232, 172), (201, 228, 168), (194, 224, 164), (177, 214, 156),
+ (138, 192, 152), (93, 164, 147), (104, 112, 96), (116, 61, 45),
+ (116, 61, 45), (116, 61, 45), (116, 61, 45), (93, 70, 56),
+ (45, 89, 50), (62, 66, 63), (79, 43, 76), (102, 36, 81),
+ (125, 30, 87), (135, 24, 92), (146, 19, 98), (200, 7, 105),
+ (237, 1, 97), (233, 9, 43), (221, 15, 31), (209, 21, 20),
+ (209, 21, 20), (209, 21, 20), (209, 21, 20), (222, 15, 32),
+ (253, 0, 71), (231, 10, 45), (209, 21, 20), (183, 32, 18),
+ (158, 43, 17), (200, 206, 89), (227, 225, 115), (237, 233, 127),
+ (237, 233, 127), (215, 213, 86), (176, 202, 113), (138, 192, 141),
+ (148, 198, 154), (158, 204, 168), (194, 224, 176), (209, 232, 178),
+ (233, 244, 178), (243, 247, 176), (253, 250, 174), (253, 251, 175),
+ (254, 252, 176), (253, 251, 181), (242, 248, 188), (222, 238, 190),
+ (222, 238, 190), (242, 248, 188), (245, 249, 186), (249, 250, 185),
+ (253, 251, 181), (253, 251, 181), (253, 251, 181), (253, 251, 181),
+ (222, 238, 190), (208, 231, 188), (194, 224, 186), (185, 219, 179),
+ (177, 214, 172), (138, 192, 162), (116, 180, 156), (116, 180, 151),
+ (116, 180, 156), (158, 205, 173), (176, 214, 174), (194, 224, 176),
+ (209, 232, 183), (209, 232, 189), (209, 232, 178), (194, 224, 176),
+ (116, 180, 156), (80, 134, 105), (45, 89, 54), (51, 98, 35),
+ (58, 108, 16), (70, 79, 9), (93, 70, 56), (93, 70, 56),
+ (93, 70, 60), (93, 70, 56), (93, 70, 58), (93, 70, 60),
+ (70, 79, 70), (93, 164, 147), (116, 180, 156), (158, 204, 168),
+ (222, 238, 190), (227, 241, 190), (233, 244, 190), (242, 248, 188),
+ (249, 250, 185), (253, 251, 181), (253, 252, 181), (253, 252, 181),
+ (253, 251, 181), (242, 248, 182), (237, 246, 180), (233, 244, 178),
+ (222, 238, 178), (222, 238, 178), (222, 238, 178), (233, 244, 178),
+ (242, 248, 176), (245, 249, 174), (249, 250, 173), (254, 248, 168),
+ (249, 249, 166), (251, 247, 160), (254, 251, 163), (254, 251, 169),
+ (254, 248, 168), (251, 245, 160), (254, 248, 156), (245, 242, 139),
+ (245, 240, 138), (237, 233, 116), (215, 216, 103), (245, 3, 100),
+ (253, 0, 71), (243, 4, 57), (233, 9, 43), (209, 21, 26),
+ (242, 200, 73), (237, 233, 121), (245, 240, 138), (245, 240, 150),
+ (222, 238, 178), (222, 238, 190), (222, 238, 190), (222, 238, 190),
+ (222, 238, 190), (233, 244, 190), (242, 248, 188), (249, 250, 185),
+ (253, 251, 181), (253, 251, 181), (254, 251, 175), (254, 248, 168),
+ (251, 245, 153), (245, 240, 121), (227, 225, 115), (215, 216, 97),
+ (184, 194, 75), (138, 52, 31), (177, 35, 4), (194, 28, 8),
+ (194, 28, 8), (209, 21, 20), (209, 21, 20), (222, 15, 32),
+ (233, 9, 43), (242, 4, 60), (254, 2, 79), (254, 3, 85),
+ (253, 0, 71), (222, 15, 32), (209, 21, 20), (194, 28, 13),
+ (158, 43, 17), (116, 61, 41), (116, 61, 45), (116, 61, 45),
+ (146, 23, 92), (166, 17, 95), (200, 7, 99), (237, 1, 97),
+ (251, 3, 90), (254, 3, 85), (254, 2, 79), (251, 3, 90),
+ (251, 3, 96), (237, 1, 97), (184, 12, 98), (166, 17, 95),
+ (103, 36, 82), (79, 43, 76), (103, 36, 86), (146, 23, 96),
+ (184, 12, 103), (227, 0, 105), (245, 3, 94), (254, 2, 79),
+ (254, 3, 91), (237, 1, 97), (184, 12, 98), (125, 30, 87),
+ (79, 43, 80), (79, 43, 80), (103, 36, 82), (146, 23, 92)
+ ),
+
+// 144 Apophysis-040426-147KaosRing
+((82, 81, 4), (82, 76, 6), (82, 52, 23), (82, 29, 41),
+ (82, 30, 41), (82, 32, 42), (82, 48, 47), (82, 65, 53),
+ (82, 94, 63), (82, 97, 64), (82, 100, 65), (82, 87, 60),
+ (82, 74, 56), (82, 54, 49), (82, 35, 43), (82, 32, 42),
+ (82, 29, 41), (82, 29, 41), (82, 27, 40), (82, 26, 40),
+ (82, 26, 39), (82, 26, 39), (82, 26, 39), (82, 26, 40),
+ (82, 26, 40), (82, 29, 41), (82, 32, 43), (82, 61, 61),
+ (82, 90, 79), (82, 87, 70), (82, 85, 61), (82, 41, 45),
+ (82, 29, 41), (82, 20, 38), (82, 13, 36), (82, 7, 34),
+ (82, 6, 31), (82, 5, 29), (82, 4, 31), (82, 4, 33),
+ (82, 10, 35), (82, 11, 35), (82, 12, 35), (82, 14, 30),
+ (82, 17, 26), (82, 18, 25), (82, 20, 25), (82, 24, 25),
+ (82, 39, 15), (82, 82, 4), (82, 82, 4), (82, 82, 4),
+ (82, 74, 7), (82, 66, 10), (82, 49, 26), (82, 32, 42),
+ (82, 29, 41), (82, 27, 40), (82, 26, 40), (82, 24, 39),
+ (82, 23, 39), (82, 23, 39), (82, 23, 39), (82, 23, 39),
+ (82, 23, 39), (82, 21, 38), (82, 22, 38), (82, 23, 39),
+ (82, 23, 39), (82, 23, 39), (82, 20, 38), (82, 20, 38),
+ (82, 20, 38), (82, 18, 37), (82, 16, 37), (82, 14, 36),
+ (82, 13, 36), (82, 13, 36), (82, 13, 36), (82, 10, 35),
+ (82, 10, 35), (82, 14, 26), (82, 21, 23), (82, 29, 21),
+ (82, 50, 14), (82, 71, 8), (82, 81, 4), (82, 84, 3),
+ (82, 85, 3), (82, 85, 3), (82, 85, 3), (82, 85, 3),
+ (82, 85, 3), (82, 85, 3), (82, 80, 5), (73, 76, 44),
+ (82, 35, 43), (82, 32, 42), (82, 29, 41), (82, 26, 40),
+ (82, 26, 40), (82, 26, 40), (82, 29, 41), (82, 32, 42),
+ (82, 85, 60), (82, 94, 63), (82, 104, 66), (82, 105, 67),
+ (82, 107, 68), (82, 100, 64), (82, 80, 57), (117, 69, 51),
+ (82, 35, 43), (82, 23, 39), (82, 21, 38), (82, 20, 38),
+ (82, 16, 37), (82, 11, 34), (82, 11, 27), (82, 14, 26),
+ (82, 8, 28), (82, 9, 31), (82, 10, 35), (82, 11, 35),
+ (82, 13, 36), (82, 13, 36), (82, 13, 36), (82, 13, 36),
+ (82, 13, 36), (82, 13, 36), (82, 14, 37), (82, 15, 38),
+ (82, 16, 37), (82, 20, 38), (82, 24, 40), (82, 29, 41),
+ (82, 78, 5), (82, 73, 7), (82, 68, 9), (82, 50, 25),
+ (82, 32, 42), (82, 29, 41), (82, 26, 40), (82, 23, 39),
+ (82, 20, 38), (82, 13, 36), (82, 11, 35), (82, 10, 35),
+ (82, 7, 34), (82, 4, 33), (82, 1, 32), (82, 0, 31),
+ (82, 0, 31), (82, 0, 31), (82, 0, 31), (82, 0, 31),
+ (82, 0, 31), (82, 1, 32), (82, 1, 32), (82, 5, 29),
+ (82, 8, 28), (82, 20, 25), (72, 24, 12), (63, 29, 0),
+ (82, 72, 7), (82, 81, 4), (82, 84, 3), (82, 85, 3),
+ (82, 82, 4), (82, 75, 6), (82, 68, 8), (82, 25, 25),
+ (82, 17, 26), (82, 11, 27), (82, 5, 29), (82, 5, 29),
+ (82, 5, 29), (82, 5, 29), (82, 5, 32), (82, 10, 35),
+ (82, 16, 37), (82, 23, 39), (82, 32, 42), (82, 71, 55),
+ (82, 119, 71), (82, 122, 71), (82, 125, 72), (82, 147, 80),
+ (82, 163, 83), (82, 173, 88), (82, 180, 94), (82, 173, 89),
+ (82, 165, 86), (82, 146, 80), (82, 109, 68), (82, 97, 60),
+ (82, 70, 55), (82, 32, 42), (82, 29, 41), (82, 29, 41),
+ (82, 32, 42), (82, 58, 52), (82, 93, 62), (82, 124, 72),
+ (82, 141, 79), (82, 157, 78), (82, 129, 74), (82, 109, 68),
+ (94, 87, 21), (82, 83, 4), (82, 85, 3), (82, 85, 3),
+ (82, 85, 3), (82, 84, 3), (82, 81, 4), (82, 66, 9),
+ (82, 32, 42), (82, 29, 41), (82, 26, 40), (82, 23, 39),
+ (82, 20, 38), (82, 16, 37), (82, 10, 35), (82, 4, 33),
+ (82, 3, 30), (82, 3, 30), (82, 3, 29), (82, 5, 29),
+ (82, 8, 28), (82, 8, 28), (82, 8, 28), (82, 11, 27),
+ (82, 14, 26), (82, 14, 26), (82, 11, 27), (82, 8, 28),
+ (82, 8, 28), (82, 10, 35), (82, 13, 36), (82, 16, 37),
+ (82, 20, 38), (82, 23, 39), (82, 26, 40), (82, 27, 39),
+ (82, 41, 20), (82, 71, 8), (82, 78, 5), (82, 78, 5),
+ (82, 66, 10), (82, 35, 42), (82, 35, 43), (82, 83, 59),
+ (82, 109, 68), (82, 141, 79), (175, 154, 107), (175, 119, 79)
+ ),
+
+// 145 Apophysis-040426-147Fighting_Fish
+((172, 212, 200), (212, 226, 92), (212, 211, 72), (212, 197, 53),
+ (178, 197, 53), (144, 198, 54), (98, 175, 34), (53, 152, 15),
+ (59, 114, 45), (118, 154, 90), (177, 195, 136), (174, 203, 168),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (192, 220, 152), (212, 228, 104), (212, 222, 88), (212, 216, 73),
+ (212, 197, 53), (212, 210, 69), (212, 224, 86), (192, 218, 143),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (112, 182, 107), (53, 152, 15),
+ (53, 152, 14), (53, 152, 13), (53, 152, 13), (53, 152, 13),
+ (47, 149, 16), (50, 130, 32), (53, 111, 48), (53, 111, 39),
+ (53, 111, 30), (50, 130, 24), (47, 149, 18), (53, 152, 15),
+ (212, 190, 49), (212, 190, 49), (212, 190, 49), (212, 190, 49),
+ (212, 191, 49), (212, 193, 50), (212, 195, 51), (212, 197, 53),
+ (212, 214, 60), (212, 220, 69), (212, 227, 78), (212, 224, 74),
+ (212, 221, 71), (212, 220, 68), (212, 219, 65), (212, 211, 58),
+ (212, 212, 60), (212, 227, 95), (192, 219, 147), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (182, 199, 139), (147, 175, 107), (112, 151, 75), (85, 132, 63),
+ (59, 114, 51), (71, 122, 52), (144, 173, 93), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (158, 192, 158), (144, 173, 117), (53, 111, 73), (47, 105, 51),
+ (47, 105, 45), (47, 127, 31), (47, 149, 18), (47, 149, 16),
+ (47, 149, 15), (47, 149, 15), (47, 149, 16), (47, 149, 17),
+ (53, 111, 30), (53, 111, 79), (108, 148, 97), (164, 186, 116),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (192, 217, 142), (212, 223, 84), (212, 216, 73),
+ (212, 209, 63), (212, 199, 55), (212, 193, 50), (212, 193, 50),
+ (212, 193, 49), (212, 190, 49), (212, 191, 49), (212, 193, 50),
+ (212, 193, 52), (212, 205, 60), (186, 201, 116), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (206, 226, 173),
+ (240, 240, 147), (233, 243, 101), (212, 231, 92), (212, 229, 85),
+ (212, 225, 91), (212, 229, 93), (212, 230, 99), (212, 232, 106),
+ (228, 231, 152), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (202, 212, 150), (207, 216, 128), (212, 221, 106), (212, 203, 61),
+ (212, 190, 49), (106, 146, 59), (59, 114, 45), (53, 111, 48),
+ (59, 114, 51), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (245, 249, 158), (252, 249, 166),
+ (253, 251, 155), (244, 243, 149), (212, 226, 93), (212, 195, 52),
+ (94, 138, 65), (73, 124, 60), (53, 111, 55), (53, 111, 48),
+ (53, 111, 48), (53, 111, 48), (53, 111, 48), (53, 111, 48),
+ (53, 111, 48), (53, 111, 48), (65, 119, 49), (159, 182, 101),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (53, 111, 96), (53, 111, 73), (53, 111, 55),
+ (53, 111, 55), (53, 111, 55), (47, 105, 69), (53, 111, 101),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (172, 212, 200),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (243, 248, 163),
+ (253, 251, 173), (253, 252, 167), (250, 251, 154), (242, 248, 162),
+ (172, 212, 200), (172, 212, 200), (172, 212, 200), (194, 207, 115),
+ (123, 158, 63), (71, 122, 23), (47, 105, 20), (53, 111, 8),
+ (53, 111, 3), (47, 149, 0), (53, 152, 1), (53, 152, 4),
+ (47, 149, 8), (47, 149, 15), (53, 152, 14), (53, 152, 12),
+ (53, 152, 4), (53, 152, 12), (53, 152, 12), (53, 152, 13),
+ (53, 152, 15), (212, 190, 49), (212, 201, 59), (212, 226, 93),
+ (219, 225, 147), (172, 212, 200), (172, 212, 200), (172, 212, 200)
+ ),
+
+// 146 Apophysis-040426-147ReachingMoon
+((39, 17, 100), (46, 43, 45), (61, 44, 41), (76, 45, 37),
+ (67, 47, 38), (58, 49, 40), (45, 43, 44), (33, 37, 49),
+ (8, 2, 80), (11, 1, 81), (14, 0, 83), (14, 0, 83),
+ (14, 0, 83), (14, 0, 83), (14, 0, 83), (14, 0, 83),
+ (14, 0, 83), (14, 0, 83), (14, 0, 83), (14, 0, 83),
+ (11, 1, 81), (8, 2, 80), (11, 11, 72), (15, 21, 64),
+ (82, 67, 23), (143, 109, 40), (205, 152, 57), (215, 166, 76),
+ (225, 181, 95), (231, 187, 102), (237, 193, 109), (237, 193, 109),
+ (245, 191, 94), (247, 200, 106), (250, 205, 113), (253, 210, 120),
+ (247, 207, 120), (242, 205, 120), (247, 209, 120), (253, 213, 120),
+ (253, 248, 246), (223, 229, 201), (194, 211, 157), (178, 168, 93),
+ (163, 125, 29), (150, 119, 26), (138, 113, 24), (111, 84, 6),
+ (88, 76, 12), (105, 82, 8), (131, 101, 17), (158, 120, 26),
+ (174, 136, 39), (190, 153, 53), (204, 163, 68), (219, 173, 83),
+ (181, 137, 43), (137, 108, 27), (94, 79, 11), (66, 48, 55),
+ (39, 17, 99), (39, 17, 99), (39, 17, 99), (39, 17, 100),
+ (39, 17, 100), (39, 17, 99), (26, 8, 91), (14, 0, 83),
+ (11, 1, 81), (8, 2, 80), (2, 9, 75), (9, 18, 66),
+ (33, 37, 49), (39, 40, 47), (46, 43, 45), (52, 49, 38),
+ (58, 55, 32), (55, 50, 37), (52, 46, 42), (46, 43, 45),
+ (33, 37, 49), (15, 21, 64), (12, 19, 65), (9, 18, 66),
+ (9, 18, 66), (9, 18, 66), (15, 21, 64), (15, 21, 64),
+ (40, 40, 47), (33, 33, 53), (27, 27, 59), (21, 24, 61),
+ (15, 21, 64), (15, 21, 64), (9, 18, 66), (9, 18, 66),
+ (9, 18, 66), (2, 5, 78), (5, 3, 79), (8, 2, 80),
+ (8, 2, 80), (8, 2, 80), (2, 5, 78), (9, 18, 66),
+ (27, 27, 59), (18, 22, 62), (9, 18, 66), (9, 18, 66),
+ (9, 18, 66), (9, 18, 66), (2, 5, 78), (2, 5, 78),
+ (2, 9, 75), (27, 27, 58), (36, 35, 51), (46, 43, 45),
+ (58, 55, 33), (70, 61, 28), (88, 67, 22), (94, 79, 10),
+ (111, 93, 3), (122, 101, 11), (133, 110, 20), (143, 118, 28),
+ (153, 126, 36), (123, 175, 109), (172, 150, 159), (117, 182, 180),
+ (106, 180, 155), (89, 43, 58), (64, 30, 78), (39, 17, 99),
+ (39, 17, 100), (39, 17, 100), (39, 17, 100), (39, 17, 99),
+ (14, 0, 83), (26, 8, 91), (39, 17, 99), (39, 17, 99),
+ (39, 17, 99), (39, 17, 100), (39, 17, 100), (39, 17, 100),
+ (39, 17, 100), (14, 0, 83), (14, 0, 83), (14, 0, 83),
+ (8, 2, 80), (15, 21, 64), (33, 37, 49), (52, 40, 45),
+ (111, 87, 5), (134, 103, 15), (158, 120, 26), (177, 144, 55),
+ (205, 161, 70), (154, 189, 122), (99, 175, 144), (53, 153, 143),
+ (16, 135, 116), (27, 27, 58), (30, 32, 53), (33, 37, 49),
+ (33, 37, 49), (52, 46, 42), (70, 61, 28), (82, 64, 24),
+ (105, 91, 1), (105, 91, 1), (105, 91, 1), (88, 76, 12),
+ (88, 67, 22), (58, 49, 40), (40, 40, 47), (33, 30, 56),
+ (27, 27, 58), (9, 18, 66), (9, 18, 66), (9, 18, 66),
+ (2, 5, 77), (2, 5, 78), (8, 2, 80), (8, 2, 80),
+ (14, 0, 83), (14, 0, 83), (14, 0, 83), (14, 0, 83),
+ (14, 0, 83), (15, 21, 64), (33, 37, 49), (52, 46, 42),
+ (70, 61, 27), (111, 87, 5), (143, 107, 13), (163, 122, 27),
+ (194, 104, 19), (222, 100, 22), (242, 119, 35), (249, 151, 58),
+ (248, 156, 66), (253, 165, 74), (249, 151, 61), (247, 143, 55),
+ (206, 123, 35), (163, 125, 28), (116, 90, 3), (88, 76, 12),
+ (70, 61, 28), (65, 18, 22), (15, 21, 64), (8, 2, 80),
+ (8, 2, 80), (8, 2, 80), (8, 2, 80), (2, 5, 78),
+ (2, 5, 78), (8, 2, 80), (8, 2, 80), (8, 2, 80),
+ (8, 2, 80), (8, 2, 80), (8, 2, 80), (8, 2, 80),
+ (14, 0, 83), (14, 0, 84), (39, 17, 99), (39, 17, 99),
+ (33, 14, 97), (14, 0, 83), (14, 0, 83), (14, 0, 83),
+ (14, 0, 83), (14, 0, 83), (8, 2, 80), (8, 2, 80),
+ (14, 0, 83), (14, 0, 83), (8, 2, 80), (14, 0, 83),
+ (14, 0, 84), (33, 14, 97), (39, 17, 99), (39, 17, 99),
+ (39, 17, 99), (39, 17, 99), (33, 0, 70), (27, 27, 59),
+ (40, 40, 47), (58, 49, 40), (70, 61, 27), (88, 67, 22),
+ (111, 87, 5), (153, 118, 25), (209, 106, 23), (247, 41, 24)
+ ),
+
+// 147 Apophysis-040426-163KaosScepter
+((230, 130, 36), (217, 93, 41), (196, 96, 29), (175, 100, 17),
+ (162, 94, 34), (150, 88, 51), (127, 77, 47), (105, 67, 44),
+ (105, 67, 44), (105, 67, 43), (105, 68, 42), (138, 84, 30),
+ (172, 100, 18), (188, 108, 23), (205, 117, 28), (217, 123, 31),
+ (229, 129, 35), (230, 130, 36), (240, 120, 38), (251, 110, 41),
+ (250, 109, 36), (250, 108, 32), (251, 109, 35), (253, 111, 39),
+ (246, 136, 39), (242, 134, 47), (239, 133, 55), (237, 117, 118),
+ (235, 102, 181), (235, 102, 182), (235, 102, 183), (211, 91, 180),
+ (139, 82, 99), (57, 46, 44), (32, 33, 33), (7, 21, 22),
+ (4, 16, 20), (1, 12, 18), (2, 12, 17), (3, 12, 17),
+ (10, 7, 16), (24, 20, 10), (39, 34, 4), (48, 24, 14),
+ (57, 14, 24), (58, 13, 23), (59, 13, 23), (53, 11, 12),
+ (42, 7, 14), (57, 14, 24), (58, 29, 31), (59, 44, 39),
+ (98, 63, 69), (137, 83, 99), (157, 92, 117), (177, 102, 135),
+ (234, 129, 188), (235, 131, 122), (236, 133, 56), (226, 113, 49),
+ (217, 93, 42), (201, 86, 41), (186, 80, 40), (172, 100, 18),
+ (148, 88, 52), (105, 67, 44), (105, 67, 44), (105, 67, 44),
+ (105, 67, 44), (105, 67, 44), (105, 67, 44), (105, 67, 44),
+ (105, 67, 46), (104, 52, 40), (103, 38, 34), (125, 62, 42),
+ (147, 87, 50), (148, 87, 50), (150, 88, 51), (187, 107, 54),
+ (178, 103, 136), (235, 132, 205), (242, 135, 208), (249, 139, 212),
+ (242, 135, 208), (235, 132, 205), (235, 132, 205), (249, 139, 212),
+ (255, 112, 204), (233, 102, 192), (212, 92, 181), (195, 83, 154),
+ (179, 75, 128), (142, 54, 96), (93, 61, 62), (51, 90, 37),
+ (55, 110, 26), (54, 152, 15), (112, 127, 17), (170, 102, 19),
+ (187, 109, 23), (205, 117, 28), (217, 93, 42), (186, 78, 42),
+ (148, 88, 51), (126, 77, 47), (105, 67, 44), (127, 77, 48),
+ (150, 87, 52), (172, 100, 18), (173, 101, 19), (205, 115, 27),
+ (205, 117, 28), (216, 123, 56), (183, 141, 97), (150, 159, 138),
+ (230, 225, 187), (238, 241, 196), (252, 252, 202), (252, 251, 203),
+ (247, 138, 203), (194, 96, 164), (141, 55, 126), (119, 44, 92),
+ (97, 33, 59), (53, 40, 68), (58, 44, 41), (59, 44, 39),
+ (46, 37, 22), (61, 44, 37), (83, 55, 40), (105, 67, 44),
+ (133, 80, 10), (169, 101, 18), (174, 98, 20), (150, 88, 51),
+ (105, 38, 30), (98, 34, 18), (92, 30, 7), (75, 37, 23),
+ (59, 44, 39), (53, 68, 45), (52, 91, 36), (105, 67, 44),
+ (150, 88, 51), (229, 129, 33), (229, 129, 34), (230, 130, 36),
+ (230, 130, 36), (246, 138, 40), (230, 130, 36), (230, 130, 36),
+ (211, 90, 157), (212, 105, 173), (213, 120, 190), (235, 132, 205),
+ (235, 132, 205), (211, 122, 190), (177, 102, 135), (187, 107, 54),
+ (205, 117, 28), (230, 130, 36), (230, 130, 36), (230, 130, 36),
+ (247, 137, 42), (247, 138, 47), (250, 138, 52), (251, 139, 53),
+ (251, 139, 53), (252, 140, 51), (254, 141, 49), (247, 137, 42),
+ (230, 130, 34), (205, 117, 28), (172, 100, 18), (136, 53, 3),
+ (136, 53, 1), (88, 57, 0), (53, 36, 18), (53, 36, 20),
+ (58, 15, 25), (50, 11, 56), (50, 11, 56), (12, 19, 35),
+ (0, 14, 21), (0, 14, 19), (0, 14, 17), (1, 12, 16),
+ (3, 12, 17), (12, 18, 30), (37, 28, 59), (39, 28, 62),
+ (52, 39, 67), (52, 45, 52), (59, 44, 39), (45, 38, 22),
+ (40, 35, 5), (40, 34, 8), (46, 37, 22), (59, 44, 39),
+ (95, 61, 62), (144, 86, 137), (211, 120, 190), (235, 132, 205),
+ (249, 139, 212), (250, 140, 213), (249, 139, 212), (249, 139, 212),
+ (249, 139, 212), (251, 139, 213), (253, 142, 211), (253, 142, 211),
+ (255, 141, 211), (253, 142, 211), (251, 138, 204), (249, 110, 193),
+ (235, 102, 181), (236, 133, 56), (239, 133, 55), (247, 137, 42),
+ (230, 130, 36), (205, 117, 28), (172, 100, 18), (134, 80, 6),
+ (89, 58, 3), (59, 44, 39), (51, 41, 68), (101, 63, 104),
+ (180, 77, 160), (212, 92, 181), (213, 120, 190), (235, 132, 205),
+ (255, 112, 207), (255, 111, 206), (255, 112, 204), (250, 109, 203),
+ (236, 103, 196), (211, 91, 180), (179, 76, 131), (137, 83, 99),
+ (95, 61, 62), (53, 68, 45), (45, 38, 22), (39, 35, 6),
+ (9, 9, 17), (11, 8, 17), (50, 9, 3), (91, 29, 6),
+ (89, 58, 1), (88, 58, 0), (87, 58, 0), (52, 37, 18),
+ (48, 36, 20), (39, 34, 5), (39, 35, 6), (58, 70, 6)
+ ),
+
+// 148 Apophysis-040426-163KSphere
+((182, 186, 140), (128, 187, 78), (90, 167, 83), (53, 148, 89),
+ (56, 121, 89), (59, 95, 89), (71, 96, 89), (83, 97, 90),
+ (149, 95, 87), (124, 83, 77), (100, 71, 67), (91, 69, 55),
+ (83, 68, 44), (83, 66, 28), (83, 65, 13), (91, 63, 11),
+ (100, 61, 9), (83, 59, 11), (55, 42, 21), (28, 25, 32),
+ (28, 23, 24), (28, 22, 17), (28, 28, 9), (28, 34, 1),
+ (10, 37, 0), (19, 35, 3), (28, 34, 7), (28, 39, 23),
+ (28, 44, 39), (28, 44, 39), (28, 44, 39), (34, 53, 25),
+ (10, 61, 30), (10, 66, 38), (10, 60, 27), (10, 55, 16),
+ (10, 52, 15), (10, 49, 14), (22, 52, 19), (34, 56, 24),
+ (34, 122, 29), (43, 126, 21), (53, 131, 13), (68, 115, 9),
+ (83, 100, 6), (91, 94, 19), (100, 89, 33), (128, 78, 62),
+ (149, 101, 101), (164, 206, 162), (173, 201, 159), (182, 197, 156),
+ (190, 181, 123), (198, 166, 90), (198, 166, 90), (198, 166, 90),
+ (198, 160, 89), (149, 141, 81), (100, 122, 74), (76, 110, 71),
+ (53, 98, 69), (56, 91, 68), (59, 85, 67), (83, 97, 90),
+ (83, 103, 92), (100, 106, 56), (103, 85, 44), (106, 64, 32),
+ (94, 66, 41), (83, 68, 50), (83, 68, 44), (77, 83, 29),
+ (128, 117, 25), (148, 149, 30), (168, 181, 35), (168, 177, 36),
+ (168, 173, 38), (168, 166, 42), (168, 159, 47), (149, 138, 34),
+ (128, 111, 28), (123, 72, 6), (114, 65, 18), (106, 58, 30),
+ (106, 61, 31), (106, 64, 32), (128, 87, 47), (149, 85, 66),
+ (168, 114, 69), (168, 128, 60), (168, 143, 51), (183, 147, 42),
+ (198, 152, 33), (182, 120, 17), (182, 111, 32), (198, 104, 25),
+ (198, 113, 34), (225, 142, 37), (211, 148, 56), (198, 155, 76),
+ (190, 148, 71), (182, 141, 66), (168, 126, 62), (164, 108, 34),
+ (123, 69, 3), (103, 79, 2), (83, 89, 2), (91, 111, 1),
+ (100, 134, 1), (77, 139, 3), (77, 108, 21), (77, 105, 61),
+ (83, 97, 84), (83, 91, 77), (71, 91, 78), (59, 91, 80),
+ (59, 85, 73), (83, 74, 69), (59, 56, 26), (59, 56, 26),
+ (59, 34, 1), (71, 46, 6), (83, 59, 11), (71, 57, 18),
+ (59, 56, 26), (53, 71, 29), (53, 76, 31), (53, 71, 23),
+ (53, 71, 29), (34, 104, 69), (34, 101, 77), (34, 99, 86),
+ (34, 94, 84), (28, 86, 57), (10, 82, 61), (10, 82, 61),
+ (34, 67, 40), (58, 58, 30), (83, 49, 20), (94, 53, 28),
+ (106, 58, 36), (128, 72, 60), (149, 101, 95), (149, 107, 109),
+ (106, 124, 160), (53, 129, 115), (43, 118, 109), (34, 108, 104),
+ (10, 96, 87), (10, 93, 49), (10, 98, 46), (34, 81, 38),
+ (59, 80, 59), (59, 82, 63), (59, 85, 67), (53, 93, 55),
+ (34, 73, 54), (34, 64, 34), (59, 65, 13), (83, 71, 5),
+ (106, 106, 9), (128, 191, 52), (138, 194, 45), (149, 197, 38),
+ (164, 196, 81), (168, 210, 77), (225, 201, 71), (225, 163, 77),
+ (225, 190, 107), (225, 204, 133), (225, 219, 160), (225, 239, 218),
+ (213, 197, 219), (213, 222, 185), (182, 212, 116), (213, 203, 85),
+ (213, 199, 83), (213, 168, 85), (225, 145, 54), (168, 131, 58),
+ (164, 120, 53), (182, 105, 30), (164, 96, 21), (123, 82, 21),
+ (123, 78, 0), (114, 86, 7), (106, 94, 15), (128, 99, 34),
+ (149, 104, 54), (164, 126, 60), (144, 128, 66), (168, 111, 117),
+ (168, 98, 95), (149, 79, 64), (144, 98, 34), (123, 75, 14),
+ (100, 55, 7), (77, 49, 12), (53, 53, 5), (53, 59, 13),
+ (28, 70, 33), (34, 73, 54), (34, 89, 77), (59, 101, 89),
+ (83, 127, 120), (100, 156, 148), (144, 198, 192), (198, 181, 208),
+ (168, 187, 185), (149, 165, 138), (100, 177, 78), (77, 110, 69),
+ (83, 74, 52), (106, 67, 45), (128, 72, 54), (182, 28, 67),
+ (168, 25, 128), (164, 70, 112), (164, 77, 120), (106, 103, 100),
+ (83, 118, 130), (59, 73, 123), (34, 67, 97), (10, 77, 53),
+ (10, 34, 40), (10, 16, 36), (10, 16, 36), (28, 28, 15),
+ (34, 25, 8), (34, 37, 0), (53, 40, 8), (59, 34, 1),
+ (59, 44, 10), (53, 53, 5), (28, 47, 1), (34, 66, 16),
+ (28, 70, 33), (28, 75, 41), (28, 103, 38), (34, 104, 69),
+ (34, 94, 84), (34, 89, 96), (34, 94, 79), (34, 89, 72),
+ (53, 88, 53), (53, 101, 31), (77, 83, 29), (106, 70, 28),
+ (106, 76, 31), (128, 99, 34), (128, 111, 28), (149, 127, 40),
+ (149, 104, 54), (144, 139, 75), (144, 154, 99), (213, 227, 144)
+ ),
+
+// 149 Apophysis-040426-163KInterseed
+((5, 5, 5), (2, 2, 2), (1, 1, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 1, 1), (1, 1, 1), (2, 2, 2), (2, 2, 2),
+ (3, 3, 3), (4, 4, 4), (6, 6, 6), (6, 6, 6),
+ (7, 7, 7), (8, 8, 8), (7, 7, 7), (6, 6, 6),
+ (4, 4, 4), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (2, 2, 2), (4, 4, 4), (5, 5, 5), (7, 7, 7),
+ (7, 7, 7), (8, 8, 8), (8, 8, 8), (8, 8, 8),
+ (6, 6, 6), (4, 4, 4), (3, 3, 3), (2, 2, 2),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (1, 1, 1),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 1, 1),
+ (2, 2, 2), (4, 4, 4), (5, 5, 5), (7, 7, 7),
+ (37, 5, 16), (108, 49, 53), (180, 93, 91), (217, 168, 84),
+ (255, 244, 78), (255, 249, 76), (255, 255, 75), (255, 255, 83),
+ (255, 255, 91), (226, 225, 89), (143, 240, 64), (61, 255, 39),
+ (121, 215, 60), (181, 176, 82), (244, 227, 95), (163, 145, 83),
+ (67, 53, 23), (37, 30, 15), (7, 7, 7), (4, 4, 4),
+ (2, 2, 2), (1, 1, 1), (1, 1, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 1, 1),
+ (4, 4, 4), (6, 6, 6), (9, 9, 9), (10, 10, 10),
+ (11, 11, 11), (48, 48, 31), (116, 102, 59), (115, 185, 136),
+ (255, 255, 180), (213, 204, 67), (119, 188, 42), (25, 172, 17),
+ (24, 141, 44), (24, 110, 71), (39, 47, 42), (11, 11, 11),
+ (4, 4, 4), (2, 2, 2), (1, 1, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 1), (2, 2, 2), (6, 6, 6),
+ (11, 11, 11), (163, 7, 156), (172, 79, 147), (181, 151, 138),
+ (151, 166, 162), (183, 255, 255), (255, 242, 252), (255, 255, 187),
+ (246, 239, 81), (183, 154, 60), (120, 70, 39), (86, 57, 25),
+ (52, 44, 12), (10, 10, 10), (6, 6, 6), (3, 3, 3),
+ (1, 1, 1), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (2, 2, 2), (3, 3, 3), (5, 5, 5),
+ (6, 16, 0), (9, 68, 5), (12, 121, 10), (21, 172, 17),
+ (55, 252, 32), (28, 180, 24), (20, 149, 13), (22, 77, 33),
+ (3, 20, 9), (3, 3, 3), (2, 2, 2), (2, 2, 2),
+ (1, 1, 1), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 1, 1),
+ (2, 2, 2), (5, 5, 5), (8, 8, 8), (9, 9, 9),
+ (17, 10, 35), (41, 76, 70), (66, 114, 81), (18, 135, 104),
+ (1, 75, 58), (18, 9, 30), (9, 9, 9), (7, 7, 7),
+ (4, 4, 4), (2, 2, 2), (1, 1, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (1, 1, 1), (2, 2, 2)
+ ),
+
+// 150 Apophysis-040426-163XmasFlwers
+((220, 253, 46), (254, 142, 34), (253, 97, 17), (252, 53, 0),
+ (253, 37, 8), (255, 21, 17), (253, 10, 34), (252, 0, 52),
+ (240, 0, 54), (243, 0, 44), (246, 0, 34), (209, 0, 21),
+ (172, 0, 9), (113, 18, 23), (55, 36, 38), (66, 41, 44),
+ (77, 46, 51), (31, 79, 79), (43, 89, 54), (55, 100, 30),
+ (52, 93, 15), (49, 86, 0), (51, 88, 1), (54, 90, 3),
+ (78, 64, 38), (109, 62, 27), (140, 61, 17), (180, 49, 8),
+ (221, 38, 0), (238, 22, 7), (255, 6, 14), (255, 0, 11),
+ (240, 0, 22), (172, 0, 9), (125, 21, 4), (79, 43, 0),
+ (79, 62, 2), (79, 81, 5), (79, 78, 9), (80, 76, 13),
+ (78, 31, 51), (79, 15, 42), (81, 0, 34), (81, 25, 17),
+ (82, 51, 1), (65, 59, 4), (49, 67, 7), (40, 70, 5),
+ (0, 88, 19), (68, 160, 16), (52, 165, 31), (37, 171, 47),
+ (51, 159, 103), (65, 148, 159), (65, 149, 148), (65, 151, 138),
+ (70, 82, 70), (63, 89, 48), (56, 97, 27), (59, 88, 20),
+ (63, 80, 13), (72, 66, 11), (81, 52, 10), (80, 13, 15),
+ (75, 0, 16), (172, 0, 9), (195, 21, 46), (218, 42, 83),
+ (221, 53, 90), (225, 65, 97), (237, 76, 104), (255, 17, 79),
+ (239, 0, 57), (211, 0, 69), (183, 0, 82), (148, 15, 73),
+ (114, 31, 64), (95, 38, 57), (77, 46, 51), (70, 76, 55),
+ (69, 81, 61), (78, 64, 38), (79, 66, 23), (81, 69, 9),
+ (95, 67, 11), (110, 66, 13), (171, 66, 0), (171, 66, 0),
+ (172, 0, 9), (172, 0, 9), (172, 0, 9), (175, 0, 12),
+ (178, 0, 15), (172, 0, 9), (146, 54, 11), (78, 64, 38),
+ (78, 67, 37), (56, 97, 27), (40, 129, 13), (24, 161, 0),
+ (27, 151, 0), (31, 142, 0), (47, 110, 11), (56, 94, 22),
+ (78, 64, 38), (78, 64, 38), (78, 64, 38), (78, 64, 38),
+ (78, 64, 38), (78, 64, 38), (65, 79, 43), (56, 96, 29),
+ (56, 94, 22), (63, 79, 0), (72, 69, 5), (81, 59, 10),
+ (82, 38, 0), (171, 0, 5), (171, 0, 5), (81, 0, 26),
+ (81, 0, 34), (115, 29, 17), (149, 58, 0), (167, 50, 0),
+ (186, 43, 0), (207, 0, 34), (228, 0, 47), (224, 26, 0),
+ (220, 28, 0), (171, 66, 0), (138, 62, 15), (106, 59, 30),
+ (75, 72, 60), (45, 56, 81), (0, 55, 78), (2, 77, 79),
+ (2, 61, 108), (50, 44, 103), (98, 28, 99), (94, 44, 115),
+ (90, 60, 132), (132, 147, 184), (188, 185, 194), (206, 255, 98),
+ (224, 243, 95), (228, 255, 58), (221, 250, 58), (214, 246, 58),
+ (210, 247, 46), (203, 241, 43), (185, 228, 42), (149, 200, 36),
+ (68, 159, 19), (61, 130, 26), (55, 101, 34), (55, 99, 31),
+ (55, 99, 31), (68, 104, 76), (87, 150, 95), (91, 160, 72),
+ (111, 167, 86), (210, 216, 151), (221, 221, 161), (233, 226, 172),
+ (210, 235, 195), (243, 228, 185), (245, 224, 204), (240, 208, 218),
+ (177, 176, 198), (167, 169, 195), (157, 163, 192), (122, 141, 179),
+ (64, 141, 168), (64, 135, 161), (29, 121, 118), (16, 117, 112),
+ (3, 94, 110), (4, 76, 90), (38, 82, 103), (60, 57, 78),
+ (68, 79, 55), (83, 78, 41), (140, 61, 18), (171, 66, 0),
+ (231, 72, 0), (243, 75, 8), (255, 79, 16), (255, 106, 122),
+ (195, 140, 141), (208, 214, 149), (202, 193, 199), (168, 174, 182),
+ (104, 121, 129), (73, 75, 73), (75, 74, 66), (75, 69, 59),
+ (69, 80, 59), (101, 162, 91), (164, 193, 101), (183, 226, 41),
+ (172, 218, 40), (148, 170, 35), (186, 90, 2), (178, 60, 4),
+ (166, 24, 41), (103, 0, 97), (66, 69, 142), (64, 134, 163),
+ (64, 143, 167), (64, 135, 163), (67, 115, 134), (73, 81, 84),
+ (83, 54, 82), (91, 41, 91), (86, 49, 86), (82, 101, 117),
+ (67, 135, 132), (67, 137, 138), (68, 125, 116), (72, 86, 85),
+ (106, 63, 53), (164, 61, 0), (213, 64, 0), (246, 33, 0),
+ (255, 21, 17), (255, 22, 15), (241, 47, 0), (226, 52, 0),
+ (209, 64, 0), (171, 66, 0), (112, 59, 25), (88, 50, 46),
+ (55, 61, 66), (43, 64, 54), (2, 81, 48), (0, 120, 0),
+ (22, 168, 11), (23, 169, 14), (52, 142, 0), (80, 81, 0),
+ (147, 60, 0), (171, 66, 0), (184, 80, 0), (155, 163, 25),
+ (143, 199, 35), (132, 176, 97), (133, 176, 100), (79, 141, 138),
+ (84, 138, 144), (73, 138, 141), (67, 124, 139), (66, 73, 142),
+ (99, 25, 100), (139, 17, 57), (194, 0, 36), (172, 0, 9)
+ ),
+
+// 151 Apophysis-040426-163Shield
+((127, 116, 1), (127, 116, 2), (132, 118, 5), (138, 121, 8),
+ (161, 119, 15), (184, 118, 22), (211, 95, 22), (239, 72, 22),
+ (240, 67, 21), (236, 68, 20), (233, 69, 19), (185, 95, 12),
+ (138, 121, 5), (132, 118, 3), (127, 116, 1), (121, 116, 0),
+ (116, 116, 0), (116, 116, 0), (116, 110, 3), (116, 105, 6),
+ (116, 105, 6), (116, 105, 6), (116, 110, 3), (116, 116, 0),
+ (116, 116, 0), (121, 110, 1), (127, 104, 3), (116, 104, 5),
+ (105, 105, 8), (99, 105, 9), (93, 105, 10), (93, 93, 17),
+ (82, 93, 20), (82, 82, 29), (87, 81, 26), (93, 81, 23),
+ (110, 92, 13), (127, 104, 3), (127, 107, 1), (127, 110, 0),
+ (138, 115, 3), (138, 115, 3), (138, 115, 3), (138, 115, 3),
+ (138, 115, 3), (132, 115, 2), (127, 116, 1), (127, 116, 1),
+ (127, 116, 1), (127, 116, 1), (121, 116, 0), (116, 116, 0),
+ (116, 116, 0), (116, 116, 0), (116, 116, 0), (116, 116, 0),
+ (116, 116, 0), (116, 118, 1), (116, 121, 2), (121, 118, 1),
+ (127, 116, 1), (127, 116, 1), (127, 116, 1), (127, 116, 1),
+ (127, 116, 1), (127, 116, 1), (127, 113, 0), (127, 110, 0),
+ (121, 107, 3), (116, 105, 6), (105, 93, 2), (82, 70, 31),
+ (21, 51, 56), (11, 57, 54), (2, 64, 52), (30, 61, 47),
+ (58, 58, 43), (72, 65, 36), (87, 72, 29), (93, 81, 69),
+ (82, 93, 65), (105, 93, 135), (63, 69, 101), (21, 46, 68),
+ (11, 48, 81), (2, 51, 95), (2, 51, 95), (93, 87, 143),
+ (250, 61, 178), (251, 70, 184), (253, 79, 190), (245, 81, 189),
+ (237, 83, 188), (216, 44, 161), (247, 70, 24), (247, 76, 26),
+ (219, 120, 28), (148, 132, 15), (148, 129, 13), (148, 126, 11),
+ (148, 126, 11), (148, 126, 11), (148, 126, 11), (148, 126, 11),
+ (148, 126, 11), (137, 123, 7), (127, 121, 4), (127, 121, 4),
+ (127, 121, 4), (127, 121, 4), (127, 121, 4), (127, 121, 4),
+ (127, 121, 6), (138, 132, 11), (138, 132, 12), (138, 132, 13),
+ (138, 132, 13), (127, 127, 10), (127, 127, 8), (127, 121, 6),
+ (116, 121, 2), (116, 118, 1), (116, 116, 0), (116, 116, 0),
+ (116, 116, 0), (105, 116, 1), (105, 116, 1), (116, 116, 0),
+ (116, 116, 0), (105, 116, 1), (105, 116, 1), (105, 116, 1),
+ (105, 116, 1), (105, 116, 1), (105, 116, 1), (105, 116, 1),
+ (127, 116, 1), (132, 115, 2), (138, 115, 3), (138, 115, 3),
+ (138, 115, 4), (138, 121, 6), (138, 127, 10), (148, 132, 13),
+ (148, 132, 13), (138, 132, 11), (138, 129, 10), (138, 127, 10),
+ (127, 127, 8), (127, 121, 4), (127, 121, 3), (127, 121, 3),
+ (138, 121, 5), (138, 121, 6), (138, 121, 8), (138, 127, 10),
+ (127, 132, 10), (127, 132, 10), (127, 127, 8), (127, 121, 6),
+ (138, 121, 5), (127, 127, 8), (127, 127, 9), (127, 127, 10),
+ (138, 127, 11), (148, 126, 11), (148, 126, 11), (148, 126, 11),
+ (148, 132, 15), (143, 132, 14), (138, 132, 13), (138, 127, 11),
+ (138, 127, 10), (138, 127, 10), (138, 121, 6), (138, 115, 4),
+ (138, 115, 3), (138, 115, 3), (127, 116, 1), (127, 116, 1),
+ (116, 116, 0), (116, 116, 0), (116, 116, 0), (116, 116, 0),
+ (116, 116, 0), (116, 116, 0), (116, 116, 0), (116, 116, 0),
+ (116, 116, 0), (116, 116, 0), (116, 116, 0), (105, 116, 1),
+ (105, 116, 1), (105, 105, 8), (105, 105, 8), (105, 105, 8),
+ (105, 110, 5), (105, 116, 1), (116, 116, 0), (127, 116, 1),
+ (127, 116, 1), (138, 115, 3), (138, 115, 3), (138, 115, 3),
+ (138, 115, 3), (138, 115, 4), (138, 121, 8), (148, 126, 11),
+ (148, 126, 11), (148, 126, 11), (148, 126, 11), (138, 121, 6),
+ (127, 116, 2), (127, 116, 1), (127, 116, 1), (127, 110, 0),
+ (116, 99, 9), (116, 93, 12), (93, 81, 23), (91, 17, 52),
+ (70, 17, 62), (93, 5, 109), (97, 1, 46), (151, 22, 21),
+ (170, 37, 10), (127, 104, 3), (138, 115, 3), (198, 45, 0),
+ (205, 49, 4), (196, 50, 1), (138, 115, 3), (138, 115, 3),
+ (127, 116, 1), (127, 116, 1), (127, 116, 1), (127, 116, 1),
+ (127, 116, 1), (127, 116, 1), (127, 116, 1), (127, 116, 1),
+ (138, 115, 3), (138, 115, 3), (138, 115, 3), (138, 115, 3),
+ (138, 115, 3), (138, 115, 4), (138, 121, 6), (148, 126, 11),
+ (148, 126, 11), (148, 126, 11), (148, 126, 11), (138, 121, 6),
+ (138, 115, 3), (127, 116, 2), (127, 116, 1), (127, 116, 1)
+ ),
+
+// 152 Apophysis-040426-163AlienFlwers
+((136, 172, 220), (179, 252, 29), (201, 242, 31), (223, 233, 34),
+ (197, 227, 50), (172, 221, 67), (159, 215, 70), (147, 210, 74),
+ (42, 161, 55), (22, 139, 43), (3, 117, 31), (1, 186, 84),
+ (0, 255, 137), (34, 213, 126), (68, 172, 116), (95, 145, 120),
+ (123, 119, 124), (166, 111, 82), (180, 96, 65), (194, 81, 49),
+ (179, 52, 46), (164, 24, 44), (166, 39, 36), (168, 55, 28),
+ (224, 50, 14), (205, 28, 47), (186, 7, 81), (134, 34, 113),
+ (82, 61, 146), (68, 65, 158), (55, 70, 171), (33, 71, 194),
+ (29, 73, 201), (1, 106, 190), (0, 98, 191), (0, 91, 192),
+ (26, 92, 207), (53, 94, 222), (57, 131, 222), (62, 169, 223),
+ (127, 202, 227), (107, 190, 226), (87, 178, 226), (79, 116, 236),
+ (71, 55, 247), (57, 55, 239), (43, 56, 232), (26, 65, 203),
+ (23, 60, 197), (6, 52, 230), (12, 54, 215), (18, 56, 200),
+ (29, 72, 201), (41, 88, 203), (45, 110, 208), (50, 133, 214),
+ (164, 177, 151), (186, 187, 122), (208, 198, 93), (191, 218, 84),
+ (174, 238, 75), (168, 233, 73), (163, 229, 72), (135, 207, 72),
+ (149, 217, 72), (147, 206, 190), (73, 227, 222), (0, 249, 255),
+ (0, 252, 255), (0, 255, 255), (61, 232, 227), (118, 197, 196),
+ (255, 238, 115), (243, 238, 102), (231, 239, 90), (206, 192, 86),
+ (182, 146, 82), (176, 178, 67), (170, 210, 52), (153, 230, 32),
+ (129, 214, 47), (68, 182, 17), (46, 144, 10), (24, 107, 3),
+ (42, 96, 21), (60, 86, 39), (165, 103, 13), (224, 150, 39),
+ (255, 234, 0), (255, 244, 0), (255, 255, 0), (255, 255, 0),
+ (255, 255, 0), (255, 255, 0), (255, 255, 0), (237, 253, 0),
+ (211, 255, 4), (214, 253, 110), (197, 239, 180), (181, 225, 251),
+ (164, 204, 245), (148, 183, 240), (63, 132, 233), (47, 73, 226),
+ (9, 32, 198), (15, 22, 205), (22, 13, 213), (16, 12, 211),
+ (10, 11, 209), (12, 9, 205), (40, 7, 165), (58, 11, 148),
+ (95, 13, 117), (135, 75, 95), (192, 92, 109), (249, 110, 123),
+ (221, 163, 53), (255, 174, 7), (230, 236, 30), (227, 244, 90),
+ (160, 161, 127), (114, 124, 147), (69, 88, 168), (70, 82, 163),
+ (71, 76, 159), (56, 74, 172), (36, 74, 194), (34, 75, 196),
+ (35, 73, 197), (29, 78, 204), (30, 77, 203), (32, 76, 202),
+ (43, 91, 198), (19, 117, 191), (35, 160, 208), (76, 247, 147),
+ (141, 214, 77), (155, 222, 84), (170, 230, 91), (160, 210, 107),
+ (150, 191, 124), (63, 141, 188), (50, 96, 198), (62, 56, 153),
+ (62, 20, 146), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (55, 82, 77), (111, 109, 132),
+ (149, 27, 87), (185, 34, 96), (222, 42, 105), (217, 26, 179),
+ (118, 30, 222), (35, 35, 220), (19, 51, 197), (18, 49, 197),
+ (28, 28, 179), (69, 10, 136), (34, 5, 68), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (125, 51, 28), (241, 91, 123),
+ (235, 98, 138), (157, 174, 159), (156, 193, 210), (103, 186, 236),
+ (85, 134, 203), (60, 99, 192), (34, 79, 201), (22, 69, 205),
+ (28, 69, 198), (42, 71, 184), (56, 74, 171), (74, 65, 151),
+ (80, 55, 142), (85, 62, 140), (105, 50, 115), (91, 65, 131),
+ (67, 72, 161), (32, 44, 215), (34, 11, 249), (0, 0, 255),
+ (0, 0, 255), (0, 0, 255), (0, 0, 255), (0, 29, 206),
+ (16, 50, 200), (22, 57, 196), (33, 66, 189), (31, 99, 119),
+ (60, 85, 39), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 120, 97), (5, 107, 153), (4, 123, 177), (30, 102, 164),
+ (16, 101, 149), (3, 135, 104), (8, 141, 64), (42, 95, 16),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (59, 2, 147),
+ (34, 6, 168), (10, 32, 197), (12, 38, 198), (9, 32, 198),
+ (0, 14, 204), (1, 12, 201), (7, 29, 198), (15, 43, 197),
+ (25, 60, 196), (17, 81, 185), (26, 97, 132), (31, 125, 72),
+ (51, 140, 81), (40, 114, 101), (105, 103, 143), (145, 132, 115),
+ (160, 152, 102), (210, 191, 102), (251, 200, 129), (255, 255, 134),
+ (253, 240, 216), (255, 245, 223), (228, 247, 224), (184, 230, 234),
+ (227, 230, 213), (213, 201, 129), (161, 130, 98), (49, 89, 25),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (50, 89, 78), (89, 97, 148), (158, 226, 255)
+ ),
+
+// 153 Apophysis-040426-163AlienFlwers4
+((193, 142, 29), (114, 18, 230), (113, 49, 217), (113, 80, 204),
+ (155, 86, 164), (198, 92, 125), (195, 87, 120), (192, 83, 116),
+ (196, 142, 48), (219, 159, 59), (243, 177, 70), (225, 204, 122),
+ (208, 232, 174), (165, 243, 160), (123, 254, 147), (126, 228, 136),
+ (129, 203, 126), (71, 214, 153), (60, 218, 178), (49, 223, 203),
+ (86, 239, 197), (124, 255, 192), (136, 244, 193), (149, 234, 195),
+ (161, 255, 59), (139, 221, 82), (118, 188, 105), (127, 161, 117),
+ (137, 134, 130), (175, 141, 155), (214, 148, 180), (241, 139, 182),
+ (255, 141, 148), (255, 131, 88), (226, 140, 53), (197, 149, 19),
+ (154, 162, 23), (111, 175, 28), (97, 144, 36), (83, 113, 44),
+ (28, 116, 15), (24, 161, 33), (20, 206, 51), (46, 188, 43),
+ (72, 170, 36), (94, 177, 26), (116, 184, 17), (184, 149, 2),
+ (199, 126, 1), (196, 136, 24), (158, 153, 50), (120, 170, 77),
+ (99, 159, 86), (78, 148, 96), (80, 130, 98), (83, 113, 100),
+ (168, 36, 79), (206, 26, 89), (244, 17, 100), (239, 50, 86),
+ (234, 84, 73), (204, 99, 63), (175, 115, 53), (150, 91, 40),
+ (130, 140, 78), (81, 175, 82), (83, 178, 51), (85, 181, 20),
+ (92, 179, 17), (99, 178, 15), (128, 195, 13), (155, 195, 67),
+ (232, 202, 205), (224, 183, 220), (216, 165, 235), (230, 151, 236),
+ (245, 138, 237), (248, 139, 234), (251, 141, 231), (242, 144, 209),
+ (220, 133, 211), (210, 54, 133), (214, 64, 137), (218, 74, 141),
+ (222, 90, 153), (226, 106, 165), (222, 149, 205), (204, 152, 231),
+ (208, 187, 179), (200, 157, 122), (193, 127, 66), (172, 134, 66),
+ (152, 141, 66), (129, 132, 103), (128, 100, 141), (147, 88, 208),
+ (199, 92, 222), (201, 81, 218), (146, 43, 157), (92, 5, 97),
+ (46, 2, 48), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (34, 61, 43), (68, 122, 86), (87, 113, 95),
+ (106, 104, 105), (115, 43, 108), (158, 18, 126), (213, 34, 167),
+ (255, 32, 196), (205, 118, 210), (204, 120, 218), (203, 122, 226),
+ (186, 152, 217), (179, 165, 193), (198, 194, 180), (152, 191, 179),
+ (123, 182, 135), (114, 139, 162), (106, 96, 190), (89, 85, 212),
+ (73, 75, 234), (77, 27, 250), (90, 39, 238), (152, 62, 249),
+ (201, 126, 255), (192, 125, 255), (161, 122, 253), (131, 119, 252),
+ (134, 71, 229), (136, 56, 240), (141, 76, 234), (174, 108, 223),
+ (228, 128, 208), (226, 109, 178), (225, 91, 148), (220, 55, 135),
+ (216, 20, 123), (224, 0, 113), (252, 17, 101), (243, 11, 93),
+ (222, 0, 87), (149, 28, 73), (74, 14, 36), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (13, 71, 121), (46, 83, 136), (79, 96, 151), (119, 108, 209),
+ (199, 128, 226), (214, 130, 252), (216, 133, 240), (194, 152, 224),
+ (191, 152, 191), (136, 74, 40), (159, 75, 34), (182, 76, 28),
+ (243, 95, 4), (231, 108, 2), (236, 134, 57), (234, 141, 100),
+ (149, 121, 235), (118, 99, 227), (88, 78, 219), (49, 6, 251),
+ (31, 32, 235), (7, 57, 234), (78, 154, 208), (62, 194, 207),
+ (81, 166, 154), (45, 142, 156), (7, 205, 160), (20, 152, 183),
+ (45, 131, 225), (3, 23, 194), (20, 3, 160), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 54, 146),
+ (15, 82, 169), (40, 144, 169), (48, 193, 133), (94, 176, 130),
+ (91, 179, 93), (117, 182, 97), (205, 149, 49), (246, 149, 67),
+ (211, 183, 125), (242, 193, 159), (226, 156, 164), (233, 115, 172),
+ (224, 121, 195), (208, 118, 202), (203, 73, 167), (209, 75, 144),
+ (202, 47, 136), (212, 36, 127), (200, 50, 139), (184, 32, 152),
+ (153, 8, 170), (99, 23, 163), (54, 13, 215), (47, 23, 239),
+ (77, 26, 182), (101, 59, 152), (107, 49, 118), (54, 88, 121),
+ (55, 92, 88), (76, 121, 103), (121, 94, 169), (139, 75, 203),
+ (172, 33, 212), (175, 22, 221), (175, 34, 247), (193, 87, 231),
+ (193, 122, 255), (218, 149, 253), (222, 151, 253), (225, 154, 251),
+ (232, 150, 250), (233, 159, 247), (229, 166, 249), (240, 171, 252),
+ (244, 227, 199), (237, 245, 152), (243, 236, 115), (250, 206, 91),
+ (253, 194, 39), (253, 169, 69), (242, 212, 114), (225, 238, 149),
+ (237, 245, 152), (235, 246, 152), (221, 253, 170), (213, 235, 208),
+ (224, 222, 223), (233, 205, 244), (236, 209, 202), (227, 243, 154),
+ (223, 246, 140), (181, 231, 50), (181, 212, 34), (189, 203, 15)
+ ),
+
+// 154 Apophysis-040426-163butterflyflwer1
+((158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 140, 238), (158, 141, 238), (158, 142, 238),
+ (161, 145, 241), (162, 148, 242), (163, 152, 243), (161, 149, 241),
+ (159, 146, 239), (159, 145, 239), (160, 144, 240), (159, 143, 239),
+ (159, 143, 239), (159, 142, 239), (159, 141, 239), (159, 141, 239),
+ (159, 141, 239), (159, 141, 239), (158, 140, 238), (158, 140, 238),
+ (158, 140, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (160, 120, 240), (163, 101, 243), (157, 82, 237),
+ (157, 45, 237), (181, 86, 250), (170, 114, 245), (160, 142, 240),
+ (159, 141, 239), (158, 140, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 140, 238),
+ (81, 140, 161), (58, 146, 102), (36, 152, 43), (49, 172, 29),
+ (63, 193, 16), (63, 198, 15), (64, 204, 15), (112, 244, 32),
+ (157, 180, 237), (159, 147, 239), (158, 144, 238), (158, 141, 238),
+ (158, 140, 238), (158, 140, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 140, 238), (159, 142, 239),
+ (161, 145, 241), (171, 161, 251), (178, 178, 248), (185, 195, 246),
+ (189, 209, 241), (194, 223, 237), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (206, 216, 225), (191, 188, 240), (165, 157, 245),
+ (158, 139, 238), (158, 6, 238), (158, 32, 238), (158, 58, 238),
+ (158, 98, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 140, 238), (158, 141, 238), (159, 142, 239), (160, 145, 240),
+ (168, 155, 248), (176, 171, 247), (185, 188, 246), (191, 195, 239),
+ (198, 203, 233), (221, 234, 210), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (191, 225, 240), (180, 210, 245), (170, 196, 250),
+ (161, 166, 241), (158, 151, 238), (159, 151, 239), (161, 158, 241),
+ (162, 178, 242), (166, 194, 246), (171, 210, 251), (176, 207, 250),
+ (182, 205, 249), (182, 200, 249), (175, 202, 255), (166, 187, 246),
+ (162, 166, 242), (159, 147, 239), (158, 145, 238), (158, 143, 238),
+ (158, 141, 238), (158, 140, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 141, 238), (158, 142, 238), (159, 144, 239), (159, 148, 239),
+ (161, 158, 241), (158, 187, 238), (158, 207, 238), (158, 219, 238),
+ (175, 205, 255), (180, 199, 251), (181, 181, 250), (166, 159, 246),
+ (160, 144, 240), (158, 122, 238), (121, 71, 201), (86, 32, 166),
+ (35, 28, 115), (36, 47, 116), (37, 67, 117), (106, 84, 186),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (103, 92, 183), (54, 87, 134),
+ (32, 49, 112), (37, 41, 117), (97, 71, 177), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 140, 238), (159, 142, 239),
+ (160, 145, 240), (160, 147, 240), (163, 153, 243), (165, 169, 245),
+ (174, 197, 254), (180, 208, 251), (186, 237, 245), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (199, 223, 232), (188, 191, 243),
+ (177, 168, 254), (171, 159, 251), (167, 152, 247), (167, 153, 247),
+ (171, 172, 251), (179, 191, 252), (180, 198, 251), (183, 195, 248),
+ (177, 185, 254), (170, 162, 250), (165, 153, 245), (162, 145, 242),
+ (159, 142, 239), (158, 140, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238),
+ (158, 139, 238), (158, 139, 238), (158, 139, 238), (158, 139, 238)
+ ),
+
+// 155 Apophysis-040426-163ButterflySherbert
+((219, 120, 43), (252, 198, 141), (252, 180, 107), (253, 162, 74),
+ (252, 151, 59), (252, 140, 45), (235, 135, 43), (219, 130, 42),
+ (185, 113, 35), (112, 79, 26), (40, 46, 17), (20, 23, 8),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (84, 47, 19), (168, 95, 39),
+ (186, 101, 43), (205, 107, 47), (207, 109, 51), (209, 112, 56),
+ (205, 110, 45), (210, 113, 46), (216, 116, 47), (217, 119, 55),
+ (219, 123, 63), (215, 120, 62), (212, 117, 61), (198, 119, 39),
+ (168, 104, 32), (71, 24, 4), (35, 12, 2), (0, 0, 0),
+ (32, 72, 17), (65, 144, 35), (109, 157, 48), (154, 170, 62),
+ (225, 130, 69), (239, 133, 61), (253, 137, 54), (252, 137, 49),
+ (252, 137, 44), (251, 133, 43), (250, 130, 43), (230, 123, 47),
+ (201, 115, 41), (94, 88, 6), (47, 44, 3), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (29, 8, 7), (58, 17, 15), (115, 55, 34),
+ (172, 94, 53), (178, 102, 60), (185, 110, 68), (190, 121, 85),
+ (181, 117, 89), (100, 176, 154), (114, 182, 143), (128, 189, 133),
+ (141, 194, 137), (154, 199, 141), (117, 183, 128), (94, 173, 113),
+ (106, 159, 50), (127, 156, 33), (148, 153, 16), (173, 142, 21),
+ (198, 132, 26), (194, 123, 31), (190, 115, 36), (172, 119, 27),
+ (112, 138, 15), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (52, 28, 22), (105, 57, 44), (168, 95, 39), (177, 102, 39),
+ (94, 70, 23), (47, 35, 11), (0, 0, 0), (29, 10, 8),
+ (58, 20, 16), (138, 107, 16), (185, 116, 33), (209, 128, 39),
+ (212, 129, 40), (225, 120, 56), (222, 123, 61), (219, 127, 66),
+ (212, 136, 89), (228, 196, 106), (238, 210, 136), (252, 212, 156),
+ (253, 211, 156), (246, 190, 136), (240, 170, 117), (238, 156, 95),
+ (237, 142, 74), (237, 133, 63), (249, 136, 48), (252, 131, 49),
+ (242, 126, 51), (222, 116, 52), (222, 119, 48), (222, 122, 45),
+ (219, 120, 45), (219, 117, 46), (216, 113, 48), (216, 113, 48),
+ (205, 107, 47), (171, 93, 53), (138, 80, 60), (85, 58, 41),
+ (33, 37, 22), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (40, 9, 92), (96, 51, 81), (153, 94, 70),
+ (205, 110, 55), (206, 153, 44), (225, 184, 57), (245, 204, 127),
+ (253, 233, 208), (253, 237, 218), (253, 241, 228), (249, 249, 226),
+ (216, 234, 217), (173, 212, 184), (117, 181, 177), (53, 123, 138),
+ (27, 34, 75), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (9, 52, 12), (94, 146, 30),
+ (173, 163, 108), (196, 158, 109), (219, 154, 111), (253, 193, 124),
+ (253, 204, 143), (253, 208, 157), (243, 199, 169), (225, 187, 172),
+ (177, 160, 175), (77, 125, 150), (64, 46, 67), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (106, 1, 39), (134, 43, 45), (163, 86, 51), (205, 107, 50),
+ (219, 114, 47), (230, 123, 47), (230, 126, 47), (237, 123, 48),
+ (237, 127, 55), (237, 133, 62), (240, 137, 67), (253, 147, 61),
+ (252, 149, 58), (253, 150, 63), (253, 156, 71), (253, 162, 77),
+ (242, 193, 104), (249, 202, 125), (244, 206, 129), (253, 199, 137),
+ (245, 209, 138), (253, 249, 142), (233, 218, 154), (253, 213, 169),
+ (253, 209, 155), (253, 193, 122), (243, 157, 91), (237, 139, 70),
+ (233, 130, 62), (222, 125, 63), (219, 120, 59), (219, 123, 63),
+ (222, 128, 68), (222, 143, 93), (228, 152, 102), (247, 193, 148),
+ (253, 220, 177), (253, 231, 205), (248, 242, 224), (245, 240, 221),
+ (238, 221, 190), (216, 227, 184), (206, 219, 169), (206, 218, 161),
+ (209, 206, 129), (209, 213, 144), (173, 191, 181), (213, 173, 208),
+ (205, 196, 207), (198, 225, 220), (225, 234, 223), (235, 235, 238),
+ (240, 240, 241), (247, 248, 243), (251, 232, 221), (252, 221, 175),
+ (251, 198, 122), (248, 165, 96), (252, 152, 62), (253, 138, 46),
+ (252, 143, 53), (237, 142, 72), (216, 149, 109), (240, 121, 189),
+ (213, 144, 199), (186, 119, 171), (190, 115, 169), (143, 113, 115),
+ (163, 102, 76), (181, 98, 43), (205, 114, 43), (230, 132, 45)
+ ),
+
+// 156 Apophysis-040426-163BFlyGate4
+((19, 21, 16), (0, 0, 0), (39, 1, 22), (78, 2, 45),
+ (128, 27, 95), (179, 53, 146), (170, 92, 170), (162, 131, 195),
+ (150, 152, 150), (106, 108, 127), (63, 65, 104), (46, 49, 83),
+ (30, 33, 63), (16, 23, 46), (3, 14, 29), (1, 7, 14),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (12, 14, 16), (8, 23, 27), (5, 33, 38), (16, 33, 49),
+ (27, 33, 60), (31, 33, 64), (36, 33, 68), (61, 33, 29),
+ (57, 33, 24), (64, 33, 31), (65, 23, 32), (67, 14, 34),
+ (36, 10, 74), (6, 7, 115), (24, 4, 95), (42, 2, 75),
+ (31, 18, 63), (19, 25, 44), (7, 33, 25), (10, 33, 21),
+ (14, 33, 18), (14, 33, 17), (15, 33, 17), (13, 11, 16),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (8, 8, 8), (17, 16, 16), (32, 33, 24),
+ (48, 50, 33), (66, 68, 33), (84, 86, 33), (140, 138, 75),
+ (244, 183, 97), (177, 129, 6), (169, 106, 21), (161, 84, 36),
+ (130, 58, 51), (99, 33, 66), (45, 14, 78), (30, 2, 63),
+ (1, 2, 16), (0, 1, 8), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (23, 14, 9), (50, 48, 33), (25, 81, 32), (0, 115, 32),
+ (30, 102, 30), (61, 90, 28), (65, 67, 16), (47, 33, 14),
+ (45, 33, 12), (59, 52, 14), (73, 71, 16), (101, 58, 14),
+ (130, 46, 13), (160, 87, 31), (160, 90, 28), (113, 111, 2),
+ (95, 93, 16), (86, 41, 53), (93, 37, 60), (100, 33, 67),
+ (100, 33, 67), (101, 33, 68), (105, 33, 72), (106, 33, 73),
+ (97, 239, 129), (103, 204, 189), (110, 169, 250), (91, 122, 242),
+ (73, 75, 235), (44, 46, 234), (148, 106, 181), (221, 121, 188),
+ (239, 164, 206), (232, 230, 246), (230, 230, 231), (228, 230, 217),
+ (247, 216, 214), (235, 185, 167), (159, 117, 126), (108, 36, 75),
+ (34, 36, 33), (29, 33, 20), (24, 31, 7), (34, 38, 11),
+ (44, 46, 16), (60, 75, 27), (84, 82, 16), (103, 101, 2),
+ (152, 94, 0), (163, 99, 21), (161, 92, 27), (160, 86, 33),
+ (88, 86, 41), (86, 33, 53), (78, 33, 45), (70, 33, 37),
+ (54, 33, 21), (38, 33, 38), (22, 33, 55), (27, 33, 64),
+ (32, 34, 74), (4, 76, 116), (26, 125, 128), (58, 60, 152),
+ (96, 98, 173), (205, 131, 237), (214, 126, 246), (223, 122, 255),
+ (223, 208, 255), (248, 250, 207), (28, 30, 16), (45, 47, 16),
+ (95, 93, 2), (98, 96, 2), (101, 99, 2), (95, 93, 2),
+ (81, 79, 16), (68, 69, 16), (47, 52, 14), (38, 33, 5),
+ (26, 28, 2), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (31, 14, 1), (63, 33, 30),
+ (98, 33, 65), (104, 33, 71), (110, 33, 77), (119, 43, 152),
+ (132, 106, 165), (111, 90, 143), (88, 90, 105), (69, 71, 62),
+ (85, 33, 53), (77, 33, 44), (55, 33, 22), (40, 33, 8),
+ (24, 14, 8), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (38, 14, 5), (77, 33, 44),
+ (111, 33, 79), (140, 106, 173), (177, 153, 209), (169, 241, 202),
+ (170, 237, 242), (144, 201, 216), (124, 153, 157), (116, 119, 149),
+ (123, 125, 137), (116, 118, 121), (73, 119, 106), (73, 119, 106),
+ (71, 73, 121), (30, 90, 63), (20, 90, 53), (39, 77, 51),
+ (45, 43, 33), (30, 29, 33), (26, 24, 33), (21, 14, 54),
+ (21, 14, 54), (9, 11, 33), (2, 4, 16), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (32, 14, 0), (41, 33, 8),
+ (51, 53, 2), (73, 75, 16), (77, 75, 16), (76, 74, 16),
+ (72, 70, 16), (70, 33, 37), (43, 33, 76), (44, 33, 77),
+ (46, 33, 79), (87, 17, 54), (87, 14, 54), (80, 1, 47),
+ (66, 14, 33), (53, 14, 20), (37, 14, 4), (32, 18, 0),
+ (32, 33, 0), (31, 33, 2), (24, 33, 7), (17, 33, 15),
+ (13, 33, 19), (1, 33, 31), (6, 33, 39), (8, 33, 41),
+ (4, 6, 62), (14, 16, 152), (32, 30, 162), (50, 33, 83),
+ (98, 33, 65), (105, 33, 72), (106, 33, 73), (100, 33, 67),
+ (92, 33, 59), (79, 33, 46), (65, 33, 32), (46, 33, 13)
+ ),
+
+// 157 Apophysis-040426-163BFlyGate4Inv
+((209, 222, 242), (255, 255, 255), (241, 248, 253), (227, 241, 251),
+ (186, 245, 215), (146, 250, 179), (111, 226, 144), (76, 202, 109),
+ (70, 68, 105), (111, 109, 119), (152, 150, 134), (178, 186, 153),
+ (205, 222, 172), (223, 230, 197), (241, 239, 222), (246, 240, 224),
+ (252, 241, 226), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (254, 238, 239), (254, 222, 224), (245, 222, 214),
+ (237, 222, 204), (232, 222, 199), (228, 222, 195), (219, 222, 187),
+ (194, 222, 226), (197, 222, 230), (193, 222, 226), (189, 222, 222),
+ (202, 231, 202), (215, 241, 182), (232, 244, 161), (249, 248, 140),
+ (217, 241, 184), (225, 231, 192), (234, 222, 201), (237, 222, 219),
+ (241, 222, 237), (241, 222, 237), (241, 222, 237), (240, 222, 238),
+ (242, 244, 239), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (254, 255, 254), (253, 255, 253), (238, 240, 246),
+ (224, 226, 239), (215, 215, 230), (207, 205, 222), (171, 169, 222),
+ (115, 117, 180), (78, 147, 214), (81, 146, 222), (85, 146, 230),
+ (89, 158, 224), (94, 171, 219), (156, 222, 189), (210, 241, 177),
+ (241, 241, 208), (248, 248, 231), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (222, 220, 239), (230, 191, 222), (238, 163, 205),
+ (246, 151, 214), (255, 140, 223), (194, 165, 227), (190, 188, 239),
+ (212, 222, 245), (204, 210, 248), (197, 199, 252), (189, 191, 245),
+ (182, 184, 239), (125, 209, 242), (95, 168, 224), (95, 165, 227),
+ (142, 144, 253), (185, 183, 206), (171, 202, 198), (158, 222, 191),
+ (156, 222, 189), (155, 222, 188), (154, 222, 187), (150, 222, 183),
+ (133, 128, 166), (149, 87, 120), (165, 46, 75), (155, 66, 40),
+ (145, 86, 5), (182, 180, 20), (211, 209, 21), (107, 149, 74),
+ (34, 134, 67), (0, 41, 32), (11, 33, 20), (23, 25, 9),
+ (27, 25, 38), (8, 39, 41), (20, 70, 88), (96, 138, 129),
+ (177, 222, 209), (207, 222, 225), (237, 222, 241), (234, 223, 244),
+ (231, 224, 248), (211, 209, 239), (195, 180, 228), (171, 173, 239),
+ (152, 154, 253), (91, 152, 236), (91, 154, 235), (92, 156, 234),
+ (95, 169, 222), (167, 169, 214), (169, 222, 202), (177, 222, 210),
+ (198, 222, 231), (210, 221, 226), (222, 220, 222), (227, 221, 211),
+ (233, 222, 200), (223, 221, 181), (251, 179, 139), (229, 130, 127),
+ (197, 195, 103), (103, 136, 71), (76, 130, 44), (50, 124, 18),
+ (32, 133, 0), (32, 47, 0), (7, 5, 48), (227, 225, 239),
+ (182, 180, 239), (171, 171, 246), (160, 162, 253), (154, 156, 253),
+ (160, 162, 253), (174, 176, 239), (187, 186, 239), (208, 203, 241),
+ (217, 222, 250), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (224, 241, 254),
+ (166, 222, 199), (161, 222, 194), (157, 222, 190), (145, 222, 178),
+ (136, 212, 103), (123, 149, 90), (144, 165, 112), (167, 165, 150),
+ (186, 184, 193), (170, 222, 202), (178, 222, 211), (200, 222, 233),
+ (215, 222, 247), (231, 241, 247), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (217, 241, 250),
+ (178, 222, 211), (144, 222, 176), (115, 149, 82), (78, 102, 46),
+ (86, 14, 53), (85, 18, 13), (111, 54, 39), (131, 102, 98),
+ (139, 136, 106), (132, 130, 118), (139, 137, 134), (182, 136, 149),
+ (182, 136, 149), (184, 182, 134), (225, 165, 192), (235, 165, 202),
+ (216, 178, 204), (210, 212, 222), (225, 226, 222), (229, 231, 222),
+ (234, 241, 201), (234, 241, 201), (246, 244, 222), (253, 251, 239),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (223, 241, 255),
+ (214, 222, 247), (204, 202, 253), (182, 180, 239), (178, 180, 239),
+ (179, 181, 239), (183, 185, 239), (185, 222, 218), (212, 222, 179),
+ (211, 222, 178), (209, 222, 176), (168, 238, 201), (168, 241, 201),
+ (175, 254, 208), (189, 241, 222), (202, 241, 235), (218, 241, 251),
+ (223, 237, 255), (223, 222, 255), (224, 222, 253), (231, 222, 248),
+ (238, 222, 240), (242, 222, 236), (254, 222, 224), (249, 222, 216),
+ (247, 222, 214), (251, 249, 193), (241, 239, 103), (223, 225, 93),
+ (205, 222, 172), (157, 222, 190), (150, 222, 183), (149, 222, 182),
+ (155, 222, 188), (163, 222, 196), (176, 222, 209), (190, 222, 223)
+ ),
+
+// 158 Apophysis-040426-163CeltCross
+((173, 167, 70), (250, 143, 64), (238, 123, 60), (227, 103, 57),
+ (181, 57, 33), (136, 11, 9), (68, 5, 4), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (29, 35, 0), (58, 71, 0), (111, 99, 38),
+ (165, 127, 76), (198, 119, 69), (231, 112, 62), (250, 120, 51),
+ (241, 130, 66), (195, 159, 64), (162, 142, 58), (130, 125, 53),
+ (96, 106, 54), (62, 88, 56), (31, 44, 28), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (41, 12, 30), (83, 24, 61),
+ (128, 33, 54), (174, 42, 47), (181, 43, 43), (218, 104, 59),
+ (210, 180, 62), (193, 189, 48), (177, 199, 34), (100, 156, 39),
+ (24, 113, 45), (12, 56, 22), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (45, 123, 36), (134, 171, 11),
+ (198, 208, 55), (184, 195, 50), (171, 182, 45), (142, 159, 26),
+ (114, 137, 7), (54, 80, 6), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (21, 96, 1),
+ (117, 175, 89), (159, 163, 84), (201, 151, 80), (213, 137, 77),
+ (226, 123, 75), (196, 80, 67), (168, 46, 54), (96, 51, 67),
+ (27, 23, 69), (84, 49, 8), (120, 86, 33), (156, 123, 58),
+ (218, 104, 59), (233, 117, 63), (247, 140, 65), (251, 141, 60),
+ (252, 146, 62), (252, 149, 62), (253, 153, 63), (251, 156, 57),
+ (245, 185, 65), (213, 214, 57), (219, 225, 64), (223, 228, 59),
+ (232, 229, 67), (231, 228, 47), (222, 225, 45), (214, 222, 44),
+ (225, 210, 50), (245, 185, 65), (245, 182, 64), (245, 186, 65),
+ (211, 212, 57), (219, 193, 59), (228, 174, 61), (225, 135, 90),
+ (204, 117, 81), (197, 134, 116), (136, 143, 73), (69, 152, 22),
+ (31, 95, 3), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (12, 130, 18), (87, 171, 36), (131, 175, 82),
+ (232, 177, 60), (239, 181, 63), (247, 185, 66), (252, 170, 72),
+ (250, 180, 91), (230, 207, 98), (236, 195, 122), (212, 180, 102),
+ (116, 136, 139), (65, 78, 66), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (96, 31, 1), (163, 19, 35), (197, 7, 21),
+ (197, 7, 21), (142, 0, 1), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (39, 87, 1), (58, 121, 25), (118, 131, 65)
+ ),
+
+// 159 Apophysis-040426-163Egg4d
+((168, 128, 78), (252, 247, 220), (252, 244, 215), (252, 242, 211),
+ (251, 238, 205), (251, 235, 200), (250, 235, 200), (250, 235, 201),
+ (227, 239, 216), (229, 239, 216), (232, 240, 216), (241, 236, 206),
+ (251, 232, 196), (241, 220, 182), (232, 209, 168), (231, 200, 157),
+ (230, 191, 147), (201, 153, 106), (196, 142, 94), (192, 131, 83),
+ (172, 145, 99), (153, 160, 116), (146, 176, 142), (139, 193, 168),
+ (151, 202, 188), (179, 216, 201), (207, 230, 215), (227, 222, 193),
+ (247, 214, 172), (247, 207, 163), (247, 200, 155), (228, 185, 139),
+ (193, 168, 123), (153, 160, 116), (153, 160, 116), (153, 160, 116),
+ (153, 160, 116), (153, 160, 116), (153, 160, 116), (153, 160, 116),
+ (153, 160, 116), (155, 141, 94), (158, 122, 72), (160, 107, 58),
+ (163, 92, 45), (178, 50, 39), (194, 9, 34), (181, 8, 38),
+ (109, 1, 37), (138, 79, 33), (155, 100, 52), (172, 121, 71),
+ (190, 151, 103), (208, 181, 135), (216, 189, 145), (225, 197, 155),
+ (248, 231, 195), (240, 235, 206), (233, 240, 217), (226, 235, 210),
+ (220, 231, 203), (223, 219, 185), (227, 207, 167), (212, 188, 143),
+ (185, 156, 110), (111, 71, 24), (75, 39, 30), (40, 8, 36),
+ (49, 15, 26), (58, 23, 17), (70, 35, 6), (81, 47, 3),
+ (143, 76, 29), (170, 89, 42), (198, 103, 55), (220, 134, 86),
+ (243, 165, 117), (247, 173, 125), (252, 182, 134), (247, 201, 153),
+ (250, 209, 167), (237, 216, 177), (242, 218, 178), (247, 221, 180),
+ (249, 225, 186), (252, 229, 192), (250, 231, 194), (252, 236, 200),
+ (247, 249, 226), (241, 245, 230), (235, 242, 234), (228, 239, 228),
+ (222, 237, 222), (218, 236, 225), (206, 227, 218), (192, 219, 215),
+ (153, 196, 197), (133, 181, 187), (150, 193, 195), (168, 206, 203),
+ (180, 213, 209), (193, 221, 216), (202, 227, 216), (202, 227, 216),
+ (149, 197, 193), (131, 180, 184), (113, 163, 175), (133, 161, 145),
+ (153, 160, 116), (153, 160, 116), (190, 164, 118), (218, 153, 106),
+ (239, 148, 98), (212, 141, 91), (201, 149, 100), (190, 158, 110),
+ (191, 164, 118), (216, 171, 125), (235, 176, 128), (250, 172, 125),
+ (222, 115, 69), (237, 57, 40), (252, 0, 12), (244, 1, 17),
+ (236, 2, 22), (222, 2, 25), (211, 1, 30), (185, 5, 30),
+ (141, 72, 26), (133, 80, 35), (127, 82, 35), (121, 84, 35),
+ (121, 95, 49), (97, 115, 71), (63, 72, 25), (62, 50, 4),
+ (121, 71, 22), (107, 110, 66), (93, 149, 111), (70, 148, 117),
+ (47, 147, 123), (75, 111, 67), (38, 40, 29), (2, 8, 35),
+ (13, 8, 37), (139, 107, 59), (162, 130, 82), (185, 153, 106),
+ (208, 176, 130), (224, 197, 154), (235, 216, 177), (247, 232, 196),
+ (240, 246, 226), (241, 245, 223), (242, 245, 221), (252, 239, 206),
+ (252, 230, 192), (242, 217, 177), (232, 201, 158), (216, 194, 151),
+ (205, 182, 137), (153, 160, 116), (123, 162, 125), (94, 164, 135),
+ (71, 153, 156), (58, 147, 149), (76, 138, 155), (87, 153, 163),
+ (100, 167, 171), (94, 164, 168), (89, 161, 165), (84, 166, 160),
+ (107, 162, 126), (153, 160, 116), (185, 164, 118), (205, 182, 137),
+ (222, 199, 158), (230, 210, 171), (242, 222, 182), (251, 227, 188),
+ (250, 239, 207), (252, 242, 208), (252, 242, 212), (252, 245, 215),
+ (252, 242, 213), (252, 242, 212), (252, 242, 211), (252, 240, 208),
+ (250, 236, 203), (252, 234, 199), (252, 224, 185), (248, 216, 175),
+ (242, 210, 168), (227, 195, 151), (212, 185, 140), (201, 175, 128),
+ (198, 170, 125), (190, 164, 118), (190, 156, 108), (201, 133, 83),
+ (216, 129, 80), (218, 153, 106), (225, 176, 128), (245, 197, 153),
+ (252, 212, 168), (242, 217, 178), (245, 224, 186), (247, 224, 185),
+ (250, 218, 176), (250, 211, 167), (251, 187, 138), (242, 179, 130),
+ (248, 171, 121), (250, 180, 133), (232, 191, 145), (218, 195, 153),
+ (208, 188, 144), (201, 180, 135), (164, 175, 133), (153, 160, 116),
+ (153, 160, 116), (172, 138, 91), (185, 125, 75), (181, 116, 71),
+ (185, 118, 71), (201, 127, 79), (190, 127, 80), (185, 129, 80),
+ (177, 135, 88), (177, 143, 96), (166, 120, 95), (156, 97, 84),
+ (143, 107, 59), (116, 84, 37), (105, 66, 19), (116, 66, 20),
+ (121, 90, 40), (143, 103, 55), (177, 118, 70), (198, 143, 95),
+ (205, 174, 128), (225, 181, 133), (232, 188, 142), (215, 191, 147),
+ (205, 184, 141), (144, 184, 151), (89, 165, 138), (46, 149, 136),
+ (16, 82, 39), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (30, 32, 23), (88, 54, 6), (143, 103, 55), (153, 160, 116)
+ ),
+
+// 160 Apophysis-040426-163FlowerFerns
+((147, 231, 75), (140, 223, 68), (143, 229, 57), (147, 236, 46),
+ (150, 244, 40), (154, 253, 35), (155, 252, 39), (156, 251, 44),
+ (140, 250, 57), (137, 244, 41), (135, 238, 25), (128, 208, 20),
+ (121, 179, 16), (91, 137, 42), (62, 95, 68), (39, 81, 70),
+ (17, 68, 73), (1, 76, 119), (6, 68, 142), (12, 61, 166),
+ (25, 79, 137), (39, 97, 109), (48, 98, 104), (58, 100, 99),
+ (105, 74, 88), (163, 74, 82), (221, 75, 77), (211, 127, 84),
+ (202, 179, 92), (199, 189, 95), (196, 200, 99), (149, 232, 77),
+ (137, 220, 66), (103, 210, 27), (115, 203, 34), (128, 196, 42),
+ (129, 200, 46), (131, 205, 51), (126, 222, 63), (122, 240, 75),
+ (120, 202, 49), (91, 152, 57), (62, 103, 65), (57, 93, 69),
+ (52, 83, 73), (40, 74, 89), (29, 66, 105), (22, 76, 106),
+ (10, 98, 92), (60, 152, 35), (81, 144, 19), (102, 137, 4),
+ (108, 101, 21), (114, 66, 38), (127, 53, 39), (140, 41, 40),
+ (83, 103, 11), (75, 110, 6), (67, 117, 1), (59, 119, 4),
+ (51, 121, 8), (50, 117, 6), (50, 114, 4), (68, 111, 3),
+ (53, 86, 16), (55, 76, 40), (63, 50, 22), (71, 24, 4),
+ (48, 21, 5), (25, 18, 6), (53, 2, 19), (83, 4, 3),
+ (97, 18, 35), (66, 24, 49), (36, 31, 63), (33, 57, 57),
+ (30, 84, 51), (32, 103, 47), (35, 122, 43), (63, 168, 50),
+ (101, 205, 65), (54, 154, 57), (40, 127, 76), (26, 101, 95),
+ (13, 121, 101), (1, 142, 108), (0, 77, 117), (8, 77, 105),
+ (8, 62, 95), (11, 47, 90), (14, 32, 86), (8, 34, 79),
+ (3, 37, 73), (20, 27, 65), (34, 26, 66), (21, 47, 74),
+ (14, 76, 103), (63, 80, 201), (99, 70, 207), (135, 60, 213),
+ (128, 56, 220), (122, 52, 228), (126, 16, 221), (73, 39, 210),
+ (4, 33, 140), (12, 55, 119), (20, 77, 98), (30, 79, 90),
+ (40, 81, 82), (72, 113, 63), (93, 159, 44), (123, 182, 37),
+ (146, 206, 51), (111, 190, 18), (106, 197, 13), (102, 205, 9),
+ (93, 209, 9), (97, 190, 4), (95, 186, 4), (110, 181, 13),
+ (101, 176, 31), (103, 165, 20), (106, 154, 9), (99, 147, 6),
+ (92, 141, 3), (80, 138, 16), (113, 142, 18), (107, 173, 19),
+ (112, 168, 32), (85, 95, 218), (103, 90, 228), (121, 85, 238),
+ (132, 87, 242), (146, 90, 249), (181, 75, 247), (176, 93, 218),
+ (143, 203, 152), (139, 222, 119), (136, 241, 87), (159, 227, 102),
+ (183, 214, 118), (200, 220, 164), (143, 180, 177), (120, 165, 191),
+ (80, 168, 161), (106, 154, 119), (102, 169, 79), (98, 184, 40),
+ (133, 201, 47), (148, 220, 65), (175, 177, 102), (190, 174, 114),
+ (102, 152, 9), (94, 140, 7), (87, 129, 6), (73, 120, 8),
+ (53, 118, 36), (51, 70, 63), (37, 54, 38), (13, 63, 9),
+ (7, 46, 37), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (2, 29, 46), (13, 54, 36), (21, 52, 55), (37, 72, 64),
+ (37, 112, 47), (42, 133, 35), (47, 154, 23), (65, 147, 24),
+ (118, 181, 47), (126, 201, 48), (140, 197, 43), (137, 220, 65),
+ (118, 240, 86), (129, 222, 133), (98, 157, 133), (35, 106, 98),
+ (1, 82, 76), (2, 48, 59), (13, 32, 58), (0, 20, 64),
+ (22, 10, 54), (25, 11, 48), (28, 12, 43), (25, 0, 26),
+ (27, 10, 26), (53, 23, 49), (78, 29, 29), (117, 30, 27),
+ (124, 3, 19), (124, 9, 5), (118, 15, 3), (76, 3, 8),
+ (25, 2, 17), (22, 0, 25), (5, 6, 31), (4, 4, 31),
+ (10, 4, 49), (28, 16, 91), (10, 7, 105), (15, 7, 119),
+ (4, 39, 173), (27, 26, 166), (29, 13, 152), (19, 11, 108),
+ (15, 23, 76), (12, 12, 44), (5, 5, 43), (16, 16, 53),
+ (34, 37, 77), (38, 82, 87), (63, 129, 121), (82, 120, 102),
+ (172, 106, 100), (212, 83, 100), (120, 45, 109), (37, 29, 102),
+ (35, 26, 92), (31, 64, 71), (65, 93, 72), (123, 107, 74),
+ (126, 183, 47), (135, 218, 64), (132, 240, 86), (135, 242, 88),
+ (141, 235, 83), (144, 227, 72), (149, 221, 52), (139, 223, 33),
+ (131, 244, 58), (135, 252, 96), (128, 226, 130), (135, 183, 172),
+ (112, 124, 245), (132, 136, 251), (97, 239, 249), (201, 249, 235),
+ (228, 229, 181), (216, 148, 205), (134, 161, 196), (83, 111, 243),
+ (46, 75, 185), (38, 23, 154), (56, 3, 75), (90, 0, 54),
+ (135, 23, 79), (125, 64, 69), (139, 106, 94), (167, 191, 68),
+ (140, 223, 67), (145, 231, 76), (150, 234, 79), (149, 233, 77)
+ ),
+
+// 161 Apophysis-040426-163FlowerFernsInv
+((106, 22, 178), (110, 27, 181), (106, 32, 190), (102, 38, 200),
+ (104, 26, 203), (106, 14, 207), (103, 8, 213), (101, 2, 220),
+ (111, 3, 191), (112, 4, 205), (113, 6, 219), (119, 18, 225),
+ (125, 30, 231), (148, 84, 228), (171, 139, 225), (182, 149, 206),
+ (193, 160, 187), (252, 184, 174), (246, 191, 137), (241, 198, 101),
+ (222, 180, 115), (203, 162, 130), (209, 160, 138), (216, 158, 146),
+ (180, 145, 161), (126, 159, 174), (72, 173, 187), (45, 156, 149),
+ (18, 140, 111), (35, 108, 137), (53, 76, 163), (59, 55, 156),
+ (106, 23, 178), (149, 16, 223), (148, 32, 232), (148, 49, 242),
+ (140, 51, 224), (132, 54, 207), (128, 52, 205), (124, 50, 204),
+ (129, 34, 187), (149, 78, 196), (170, 123, 205), (176, 137, 189),
+ (183, 151, 173), (193, 161, 177), (203, 172, 182), (226, 189, 150),
+ (233, 179, 149), (225, 133, 194), (196, 128, 214), (167, 123, 234),
+ (152, 119, 237), (137, 116, 241), (139, 152, 229), (141, 189, 217),
+ (146, 190, 238), (157, 167, 245), (169, 145, 252), (180, 139, 248),
+ (191, 133, 244), (197, 133, 245), (204, 134, 247), (205, 141, 251),
+ (187, 144, 252), (206, 174, 244), (193, 195, 228), (181, 216, 213),
+ (182, 223, 232), (184, 231, 251), (230, 237, 249), (202, 253, 236),
+ (157, 243, 246), (176, 249, 213), (196, 255, 181), (203, 218, 190),
+ (210, 182, 200), (217, 176, 202), (225, 171, 204), (220, 133, 212),
+ (192, 87, 205), (164, 72, 216), (176, 113, 198), (189, 155, 181),
+ (209, 154, 170), (229, 154, 160), (254, 113, 147), (255, 178, 138),
+ (244, 187, 160), (240, 198, 166), (236, 210, 173), (238, 216, 171),
+ (241, 223, 169), (252, 218, 182), (235, 228, 190), (221, 229, 189),
+ (234, 208, 181), (234, 173, 103), (184, 176, 64), (135, 179, 25),
+ (127, 187, 33), (120, 195, 42), (133, 203, 27), (129, 239, 34),
+ (226, 215, 96), (238, 203, 120), (250, 192, 144), (242, 185, 150),
+ (235, 178, 157), (215, 174, 173), (183, 142, 192), (162, 96, 211),
+ (132, 73, 218), (123, 66, 220), (133, 65, 228), (144, 65, 237),
+ (153, 50, 246), (162, 46, 246), (158, 65, 251), (160, 69, 251),
+ (131, 75, 228), (141, 79, 236), (152, 83, 245), (150, 92, 245),
+ (149, 101, 246), (163, 114, 252), (175, 117, 239), (142, 113, 237),
+ (148, 82, 236), (141, 129, 139), (155, 144, 88), (170, 160, 37),
+ (134, 170, 17), (123, 168, 13), (109, 165, 6), (74, 180, 8),
+ (98, 97, 35), (111, 58, 94), (125, 19, 153), (122, 16, 160),
+ (119, 14, 168), (72, 41, 137), (55, 35, 91), (112, 75, 78),
+ (135, 90, 64), (191, 116, 135), (170, 108, 135), (149, 101, 136),
+ (157, 71, 215), (122, 54, 208), (107, 35, 190), (80, 78, 153),
+ (76, 78, 161), (114, 90, 203), (153, 103, 246), (168, 126, 249),
+ (182, 135, 247), (202, 137, 219), (204, 185, 192), (218, 201, 217),
+ (242, 192, 246), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (253, 226, 209), (242, 201, 219), (234, 203, 200),
+ (210, 179, 195), (214, 161, 201), (218, 143, 208), (208, 101, 232),
+ (190, 108, 231), (137, 74, 208), (129, 54, 207), (115, 58, 212),
+ (118, 35, 190), (137, 15, 169), (126, 33, 122), (157, 98, 122),
+ (220, 149, 157), (254, 173, 179), (253, 207, 196), (242, 223, 197),
+ (246, 248, 167), (239, 246, 184), (233, 245, 201), (227, 243, 212),
+ (230, 255, 229), (228, 245, 229), (202, 232, 206), (177, 226, 226),
+ (138, 225, 228), (131, 252, 236), (131, 246, 250), (137, 240, 252),
+ (179, 252, 247), (230, 253, 238), (233, 255, 230), (250, 249, 224),
+ (251, 251, 224), (245, 251, 206), (227, 239, 164), (245, 248, 150),
+ (240, 248, 136), (251, 216, 82), (228, 229, 89), (226, 242, 103),
+ (236, 244, 147), (240, 232, 179), (243, 243, 211), (250, 250, 212),
+ (239, 239, 202), (221, 218, 178), (217, 173, 168), (192, 126, 134),
+ (173, 135, 153), (83, 149, 155), (43, 172, 155), (135, 210, 146),
+ (218, 226, 153), (220, 229, 163), (224, 191, 184), (190, 162, 183),
+ (132, 148, 181), (129, 72, 208), (120, 37, 191), (123, 15, 169),
+ (120, 13, 167), (114, 20, 172), (111, 28, 183), (106, 34, 203),
+ (116, 32, 222), (124, 11, 197), (120, 3, 159), (127, 29, 125),
+ (120, 72, 83), (143, 131, 10), (123, 119, 4), (158, 16, 6),
+ (54, 6, 20), (27, 26, 74), (39, 107, 50), (121, 94, 59),
+ (172, 144, 12), (209, 180, 70), (217, 232, 101), (199, 252, 180),
+ (165, 255, 201), (120, 232, 176), (130, 191, 186), (116, 149, 161),
+ (88, 64, 187), (115, 32, 188), (110, 24, 179), (105, 21, 176)
+ ),
+
+// 162 Apophysis-040426-163FlwrFernsInv
+((132, 26, 36), (154, 62, 23), (148, 90, 33), (142, 119, 43),
+ (162, 130, 49), (183, 141, 55), (192, 144, 53), (202, 148, 52),
+ (229, 140, 36), (240, 122, 45), (251, 105, 54), (227, 97, 53),
+ (203, 89, 53), (123, 84, 77), (44, 80, 102), (23, 87, 107),
+ (2, 95, 113), (4, 2, 51), (36, 13, 45), (69, 25, 40),
+ (96, 25, 39), (124, 26, 39), (119, 23, 38), (115, 21, 37),
+ (97, 7, 45), (93, 6, 46), (90, 5, 47), (107, 13, 41),
+ (124, 22, 36), (133, 26, 30), (142, 31, 24), (177, 43, 6),
+ (240, 60, 45), (253, 91, 70), (252, 91, 66), (252, 91, 63),
+ (244, 82, 50), (236, 73, 38), (225, 85, 44), (215, 97, 51),
+ (172, 117, 63), (184, 108, 58), (196, 99, 54), (215, 53, 76),
+ (235, 8, 98), (239, 5, 101), (244, 2, 104), (248, 1, 106),
+ (240, 14, 114), (159, 11, 99), (138, 38, 58), (117, 65, 18),
+ (79, 104, 11), (42, 143, 5), (36, 136, 13), (31, 130, 22),
+ (134, 130, 56), (149, 156, 52), (165, 183, 49), (144, 145, 63),
+ (123, 108, 77), (75, 106, 102), (28, 104, 127), (20, 107, 126),
+ (51, 127, 141), (110, 175, 177), (128, 188, 187), (146, 201, 198),
+ (154, 203, 200), (163, 205, 203), (176, 212, 210), (210, 227, 219),
+ (252, 232, 146), (252, 210, 105), (252, 188, 65), (228, 193, 78),
+ (205, 198, 92), (192, 206, 106), (180, 215, 121), (203, 226, 144),
+ (243, 243, 155), (228, 235, 217), (224, 235, 224), (220, 235, 232),
+ (214, 209, 215), (208, 184, 198), (177, 150, 143), (183, 123, 97),
+ (66, 135, 150), (90, 150, 160), (115, 166, 170), (115, 172, 175),
+ (115, 179, 181), (127, 187, 187), (137, 180, 186), (154, 203, 200),
+ (162, 208, 206), (176, 180, 165), (165, 144, 123), (154, 108, 82),
+ (127, 99, 72), (101, 90, 62), (83, 62, 35), (100, 23, 39),
+ (129, 56, 67), (164, 88, 87), (199, 121, 108), (224, 172, 140),
+ (250, 224, 173), (253, 247, 233), (245, 242, 237), (242, 227, 170),
+ (252, 245, 128), (233, 196, 63), (224, 174, 51), (216, 153, 39),
+ (238, 85, 90), (236, 16, 116), (245, 13, 115), (253, 8, 112),
+ (252, 9, 115), (251, 10, 115), (250, 11, 115), (243, 13, 114),
+ (236, 16, 114), (224, 19, 112), (191, 19, 105), (145, 27, 88),
+ (105, 4, 44), (84, 4, 57), (78, 10, 61), (72, 16, 65),
+ (76, 14, 61), (76, 21, 40), (86, 8, 48), (121, 14, 44),
+ (159, 69, 6), (181, 108, 38), (204, 147, 70), (200, 153, 64),
+ (197, 159, 58), (195, 171, 61), (157, 160, 53), (246, 49, 56),
+ (236, 7, 98), (252, 2, 110), (252, 1, 110), (252, 0, 111),
+ (253, 3, 111), (250, 11, 115), (251, 12, 116), (240, 16, 115),
+ (224, 16, 110), (212, 20, 107), (200, 25, 104), (166, 141, 180),
+ (172, 211, 208), (210, 231, 226), (223, 198, 201), (189, 150, 109),
+ (189, 126, 82), (236, 123, 57), (244, 109, 63), (253, 95, 70),
+ (254, 89, 70), (253, 71, 70), (225, 21, 110), (212, 19, 108),
+ (182, 26, 99), (184, 23, 100), (186, 20, 102), (200, 10, 108),
+ (201, 11, 111), (190, 17, 106), (186, 20, 102), (142, 8, 93),
+ (146, 14, 28), (167, 15, 14), (153, 23, 23), (147, 35, 23),
+ (163, 42, 13), (177, 26, 7), (197, 40, 7), (227, 52, 33),
+ (254, 94, 68), (253, 94, 69), (253, 95, 70), (250, 86, 77),
+ (221, 21, 109), (185, 22, 103), (129, 23, 85), (83, 37, 66),
+ (62, 14, 64), (31, 39, 26), (10, 47, 3), (22, 53, 55),
+ (24, 70, 94), (17, 97, 120), (33, 111, 131), (77, 147, 155),
+ (111, 164, 172), (128, 169, 175), (113, 97, 110), (111, 52, 48),
+ (109, 23, 50), (139, 6, 33), (177, 22, 100), (209, 15, 112),
+ (231, 23, 109), (251, 88, 79), (222, 138, 68), (251, 179, 61),
+ (234, 185, 56), (204, 166, 55), (201, 164, 60), (182, 175, 61),
+ (178, 207, 53), (174, 196, 88), (206, 228, 127), (196, 224, 137),
+ (181, 218, 141), (151, 195, 106), (160, 111, 97), (129, 55, 82),
+ (59, 65, 97), (41, 57, 93), (42, 41, 81), (80, 30, 65),
+ (121, 28, 83), (185, 22, 103), (203, 21, 106), (239, 5, 102),
+ (250, 14, 115), (235, 17, 112), (220, 20, 109), (186, 71, 78),
+ (149, 116, 65), (120, 174, 98), (81, 156, 162), (78, 159, 162),
+ (52, 132, 139), (55, 105, 130), (104, 94, 41), (159, 82, 2),
+ (205, 92, 14), (232, 77, 33), (237, 62, 41), (246, 69, 51),
+ (251, 85, 59), (252, 88, 63), (252, 73, 68), (235, 8, 98),
+ (239, 5, 102), (204, 14, 110), (160, 30, 92), (132, 27, 84)
+ ),
+
+// 163 Apophysis-040426-163FloralCascade2
+((129, 89, 30), (193, 158, 128), (186, 174, 134), (180, 190, 140),
+ (135, 164, 147), (91, 138, 154), (95, 154, 163), (100, 171, 173),
+ (172, 201, 197), (202, 222, 213), (233, 244, 230), (237, 219, 206),
+ (241, 195, 182), (213, 170, 123), (186, 145, 65), (170, 124, 45),
+ (155, 104, 25), (89, 60, 28), (97, 34, 36), (106, 9, 44),
+ (105, 9, 44), (104, 10, 44), (101, 9, 45), (99, 9, 47),
+ (62, 2, 56), (123, 8, 80), (185, 15, 104), (203, 17, 107),
+ (222, 19, 111), (227, 18, 111), (232, 17, 111), (235, 6, 99),
+ (205, 9, 31), (150, 49, 19), (192, 87, 27), (234, 126, 35),
+ (241, 150, 50), (248, 174, 65), (250, 153, 66), (252, 133, 67),
+ (246, 66, 51), (238, 62, 42), (230, 59, 33), (218, 93, 52),
+ (207, 128, 71), (208, 142, 63), (209, 157, 55), (240, 198, 62),
+ (220, 202, 56), (178, 121, 32), (184, 61, 18), (190, 1, 5),
+ (197, 19, 12), (205, 38, 19), (218, 45, 28), (232, 52, 37),
+ (167, 64, 67), (144, 44, 55), (121, 24, 44), (96, 39, 63),
+ (71, 55, 82), (55, 66, 87), (40, 77, 93), (21, 80, 110),
+ (27, 103, 126), (47, 131, 142), (81, 150, 158), (116, 169, 175),
+ (127, 179, 181), (139, 189, 188), (209, 212, 193), (240, 241, 207),
+ (173, 199, 174), (122, 168, 161), (71, 137, 149), (43, 108, 130),
+ (16, 79, 112), (9, 70, 105), (2, 62, 99), (10, 47, 89),
+ (30, 56, 9), (39, 146, 8), (56, 112, 29), (73, 79, 51),
+ (74, 64, 61), (75, 50, 71), (114, 23, 82), (185, 17, 102),
+ (224, 12, 115), (230, 14, 114), (237, 17, 113), (237, 17, 114),
+ (237, 17, 115), (244, 15, 116), (244, 12, 114), (243, 3, 104),
+ (244, 2, 104), (253, 7, 114), (252, 8, 114), (251, 10, 115),
+ (251, 5, 113), (251, 1, 111), (244, 2, 104), (243, 3, 104),
+ (232, 39, 66), (232, 50, 51), (233, 62, 36), (242, 69, 48),
+ (252, 76, 61), (233, 129, 56), (206, 144, 71), (176, 156, 61),
+ (170, 157, 53), (64, 158, 10), (55, 151, 11), (47, 144, 13),
+ (71, 72, 38), (53, 55, 42), (52, 26, 73), (40, 42, 81),
+ (47, 67, 102), (70, 56, 98), (94, 46, 94), (134, 50, 99),
+ (175, 54, 105), (194, 20, 105), (164, 2, 13), (141, 2, 31),
+ (125, 22, 41), (100, 114, 127), (98, 124, 138), (97, 134, 150),
+ (92, 150, 161), (70, 149, 156), (92, 169, 117), (101, 159, 98),
+ (145, 138, 128), (139, 154, 153), (134, 171, 179), (162, 176, 179),
+ (190, 182, 180), (224, 194, 158), (203, 155, 132), (188, 95, 88),
+ (199, 21, 105), (213, 13, 112), (220, 16, 111), (227, 20, 110),
+ (213, 78, 72), (221, 148, 80), (231, 204, 125), (250, 249, 143),
+ (204, 227, 123), (190, 210, 102), (176, 193, 81), (102, 149, 55),
+ (39, 83, 94), (20, 96, 120), (15, 108, 125), (7, 85, 108),
+ (8, 84, 108), (67, 76, 81), (77, 75, 87), (88, 75, 93),
+ (125, 89, 103), (128, 115, 109), (153, 105, 91), (117, 107, 56),
+ (156, 63, 29), (149, 49, 23), (143, 36, 18), (133, 29, 28),
+ (110, 10, 44), (93, 23, 59), (97, 67, 57), (100, 143, 61),
+ (160, 164, 44), (173, 183, 71), (230, 237, 108), (252, 252, 118),
+ (232, 241, 116), (233, 172, 117), (227, 128, 71), (251, 96, 78),
+ (253, 92, 64), (252, 103, 67), (252, 115, 71), (226, 152, 53),
+ (251, 176, 57), (233, 208, 63), (223, 217, 69), (182, 202, 91),
+ (162, 196, 47), (153, 175, 40), (129, 150, 29), (91, 151, 29),
+ (102, 105, 34), (100, 70, 46), (123, 80, 61), (144, 103, 107),
+ (158, 110, 74), (176, 117, 49), (201, 117, 70), (247, 100, 80),
+ (252, 86, 74), (253, 87, 63), (254, 85, 64), (253, 81, 71),
+ (252, 71, 60), (235, 17, 112), (231, 17, 113), (216, 22, 109),
+ (190, 17, 106), (109, 21, 81), (54, 23, 64), (44, 48, 86),
+ (25, 73, 109), (21, 75, 101), (26, 56, 94), (6, 45, 88),
+ (23, 40, 84), (51, 23, 71), (82, 10, 58), (102, 6, 52),
+ (80, 3, 57), (54, 9, 64), (44, 5, 52), (16, 19, 72),
+ (18, 28, 77), (38, 26, 74), (39, 30, 33), (19, 34, 15),
+ (51, 32, 34), (61, 28, 37), (64, 65, 8), (105, 101, 12),
+ (123, 137, 52), (175, 171, 48), (184, 150, 52), (177, 127, 42),
+ (158, 74, 64), (149, 91, 67), (180, 132, 70), (198, 166, 93),
+ (251, 205, 156), (243, 235, 189), (253, 250, 209), (245, 248, 227),
+ (249, 246, 239), (248, 248, 214), (214, 176, 199), (209, 91, 125),
+ (224, 19, 112), (235, 17, 112), (248, 65, 57), (234, 70, 35)
+ ),
+
+// 164 Apophysis-040426-163FlowerBurst
+((0, 0, 0), (119, 9, 24), (184, 5, 15), (250, 1, 7),
+ (194, 14, 7), (138, 27, 8), (110, 28, 8), (82, 30, 9),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (88, 15, 3),
+ (177, 31, 6), (177, 33, 5), (177, 35, 5), (132, 41, 20),
+ (87, 48, 35), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (58, 63, 41),
+ (122, 130, 105), (213, 176, 208), (232, 189, 164), (252, 202, 120),
+ (242, 209, 93), (233, 217, 67), (234, 214, 65), (235, 211, 63),
+ (232, 219, 108), (232, 210, 167), (232, 202, 227), (242, 205, 231),
+ (252, 208, 235), (252, 177, 216), (253, 147, 197), (209, 93, 184),
+ (158, 28, 143), (172, 40, 68), (96, 66, 65), (21, 93, 63),
+ (10, 46, 31), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (57, 5, 13), (114, 11, 27), (196, 59, 6),
+ (219, 117, 29), (222, 180, 50), (167, 166, 63), (112, 153, 76),
+ (72, 144, 50), (33, 135, 25), (28, 122, 31), (18, 120, 34),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (49, 13, 52), (99, 26, 105),
+ (126, 24, 123), (153, 23, 142), (202, 11, 148), (233, 69, 169),
+ (231, 123, 187), (138, 99, 129), (45, 75, 71), (22, 37, 35),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (27, 22, 1), (55, 45, 3), (82, 54, 2),
+ (110, 64, 1), (215, 151, 41), (253, 196, 67), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (58, 40, 6), (116, 56, 0), (212, 98, 19), (254, 110, 38),
+ (188, 89, 11), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (2, 92, 7), (2, 126, 38), (33, 135, 25), (40, 140, 21),
+ (88, 152, 31), (127, 150, 32), (151, 162, 41), (163, 166, 39),
+ (166, 181, 35), (143, 198, 66), (127, 188, 45), (103, 170, 39),
+ (83, 167, 34), (117, 185, 17), (201, 217, 56), (205, 218, 78),
+ (208, 188, 52), (185, 162, 41), (128, 133, 68), (52, 103, 14),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (76, 50, 71),
+ (143, 2, 111), (153, 26, 142), (231, 126, 156), (233, 130, 170),
+ (185, 63, 163), (93, 34, 103), (27, 88, 61), (0, 0, 0)
+ ),
+
+// 165 Apophysis-040426-163MaltesePurple
+((154, 94, 148), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (208, 44, 246), (222, 49, 238), (222, 60, 216),
+ (223, 71, 194), (154, 94, 148), (154, 94, 148), (154, 94, 148),
+ (155, 93, 149), (157, 93, 150), (175, 87, 162), (193, 81, 174),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (198, 41, 254),
+ (231, 52, 232), (247, 63, 210), (245, 59, 217), (243, 56, 224),
+ (231, 52, 232), (219, 48, 240), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (196, 40, 254), (198, 41, 254),
+ (211, 45, 245), (225, 50, 236), (235, 67, 202), (229, 69, 198),
+ (241, 65, 206), (231, 57, 222), (222, 49, 238), (208, 44, 246),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (184, 84, 168), (170, 88, 159), (157, 93, 150),
+ (145, 97, 142), (148, 96, 144), (157, 93, 150), (199, 79, 178),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (210, 45, 246),
+ (211, 75, 186), (160, 92, 152), (157, 93, 150), (208, 76, 184),
+ (204, 43, 250), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (195, 40, 255),
+ (195, 40, 255), (195, 40, 255), (195, 40, 255), (178, 86, 164)
+ ),
+
+// 166 Apophysis-040426-163Mycelialg
+((236, 164, 209), (49, 2, 28), (24, 1, 14), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 56, 119), (77, 47, 106), (155, 39, 94), (170, 41, 68),
+ (185, 43, 42), (132, 30, 28), (79, 18, 14), (54, 9, 32),
+ (30, 0, 50), (0, 0, 85), (5, 14, 66), (11, 29, 47),
+ (5, 14, 23), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (5, 18, 15),
+ (11, 36, 30), (51, 69, 55), (92, 103, 80), (142, 179, 137),
+ (197, 211, 212), (255, 198, 255), (255, 179, 255), (255, 160, 255),
+ (254, 167, 233), (254, 175, 212), (250, 176, 212), (246, 178, 212),
+ (238, 187, 212), (230, 191, 212), (223, 196, 212), (228, 193, 212),
+ (233, 190, 212), (244, 199, 214), (255, 208, 216), (255, 219, 181),
+ (205, 208, 211), (181, 214, 255), (142, 160, 183), (103, 106, 111),
+ (92, 91, 114), (82, 76, 117), (40, 8, 135), (35, 9, 136),
+ (120, 63, 179), (167, 98, 199), (215, 134, 220), (184, 119, 196),
+ (153, 105, 173), (143, 100, 166), (134, 96, 159), (136, 99, 163),
+ (167, 107, 200), (222, 147, 212), (232, 154, 212), (242, 162, 212),
+ (248, 166, 212), (254, 170, 212), (248, 166, 212), (231, 146, 240),
+ (212, 132, 228), (214, 139, 220), (216, 146, 212), (215, 142, 212),
+ (214, 139, 212), (166, 132, 146), (86, 127, 90), (0, 103, 80),
+ (0, 44, 49), (0, 0, 0), (5, 10, 0), (11, 21, 0),
+ (27, 21, 0), (43, 22, 0), (112, 120, 62), (168, 177, 103),
+ (252, 171, 212), (232, 154, 212), (213, 138, 212), (183, 125, 183),
+ (154, 113, 155), (95, 82, 123), (49, 62, 81), (0, 55, 36),
+ (4, 39, 45), (96, 81, 126), (113, 94, 151), (130, 107, 176),
+ (173, 127, 255), (194, 124, 249), (200, 91, 255), (209, 91, 243),
+ (69, 40, 145), (34, 20, 142), (0, 0, 140), (0, 1, 112),
+ (0, 2, 85), (0, 6, 86), (6, 12, 96), (28, 26, 104),
+ (62, 46, 129), (89, 61, 145), (92, 70, 138), (95, 79, 132),
+ (60, 72, 82), (44, 57, 80), (0, 41, 38), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (31, 4, 48), (65, 37, 81), (94, 46, 89),
+ (118, 91, 145), (255, 62, 130), (253, 55, 112), (252, 49, 95),
+ (251, 21, 0), (197, 47, 0), (138, 19, 12), (88, 31, 14),
+ (19, 12, 0), (9, 6, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (16, 20, 50),
+ (12, 16, 94), (63, 45, 128), (112, 74, 143), (145, 102, 165),
+ (222, 150, 212), (227, 153, 212), (233, 157, 212), (242, 163, 212),
+ (232, 155, 212), (222, 146, 212), (205, 140, 201), (181, 105, 105),
+ (80, 81, 93), (21, 41, 73), (6, 20, 63), (0, 10, 78),
+ (10, 8, 88), (48, 59, 86), (122, 91, 105), (175, 129, 163),
+ (212, 140, 212), (218, 145, 212), (225, 149, 212), (224, 154, 212),
+ (231, 157, 211), (255, 124, 118), (255, 103, 110), (255, 104, 119),
+ (255, 91, 153), (227, 150, 212), (245, 135, 242), (255, 151, 255),
+ (255, 159, 255), (217, 182, 255), (225, 165, 233), (203, 136, 212),
+ (130, 98, 161), (76, 71, 111), (20, 46, 60), (31, 27, 10),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (29, 3, 56),
+ (39, 31, 114), (74, 53, 140), (107, 72, 159), (108, 70, 160),
+ (111, 74, 160), (144, 100, 167), (210, 138, 212), (221, 149, 212),
+ (245, 169, 212), (255, 198, 212), (255, 227, 213), (255, 255, 255),
+ (255, 235, 255), (255, 198, 255), (238, 187, 212), (242, 181, 212)
+ ),
+
+// 167 Apophysis-040426-163MyceliaInv
+((19, 91, 46), (206, 253, 227), (230, 254, 241), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 199, 136), (177, 207, 148), (100, 216, 161), (85, 214, 187),
+ (70, 212, 213), (123, 224, 227), (176, 237, 241), (200, 246, 223),
+ (225, 255, 205), (255, 255, 170), (249, 240, 189), (244, 226, 208),
+ (249, 240, 231), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (249, 237, 240),
+ (244, 219, 225), (203, 185, 200), (163, 152, 175), (113, 76, 118),
+ (58, 44, 43), (0, 57, 0), (0, 76, 0), (0, 95, 0),
+ (0, 87, 21), (1, 80, 43), (5, 78, 43), (9, 77, 43),
+ (17, 68, 43), (24, 63, 43), (32, 59, 43), (27, 62, 43),
+ (22, 65, 43), (11, 56, 41), (0, 47, 39), (0, 36, 74),
+ (50, 47, 44), (74, 41, 0), (113, 95, 72), (152, 149, 144),
+ (162, 164, 141), (173, 179, 138), (215, 247, 120), (220, 246, 119),
+ (135, 192, 76), (87, 156, 55), (40, 121, 35), (71, 135, 58),
+ (102, 150, 82), (111, 154, 89), (121, 159, 96), (119, 156, 92),
+ (88, 148, 55), (33, 108, 43), (23, 100, 43), (13, 93, 43),
+ (7, 89, 43), (1, 85, 43), (7, 89, 43), (24, 109, 15),
+ (43, 123, 27), (41, 116, 35), (39, 109, 43), (40, 112, 43),
+ (41, 116, 43), (89, 123, 109), (169, 128, 165), (255, 152, 175),
+ (255, 211, 206), (255, 255, 255), (249, 244, 255), (244, 234, 255),
+ (228, 233, 255), (212, 233, 255), (143, 135, 193), (87, 78, 152),
+ (3, 84, 43), (22, 100, 43), (42, 117, 43), (71, 129, 71),
+ (101, 142, 100), (160, 173, 132), (206, 193, 174), (255, 200, 219),
+ (251, 216, 210), (159, 174, 129), (142, 161, 104), (125, 148, 79),
+ (82, 128, 0), (61, 131, 6), (55, 164, 0), (46, 164, 12),
+ (186, 215, 110), (220, 235, 112), (255, 255, 115), (255, 254, 142),
+ (255, 253, 170), (255, 249, 169), (249, 243, 159), (227, 229, 151),
+ (193, 209, 126), (166, 194, 110), (163, 185, 116), (160, 176, 123),
+ (195, 183, 173), (211, 198, 175), (255, 214, 217), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (224, 251, 207), (190, 218, 174), (161, 209, 166),
+ (137, 164, 110), (0, 193, 125), (1, 199, 142), (3, 206, 160),
+ (4, 234, 255), (58, 208, 255), (117, 236, 243), (167, 224, 241),
+ (236, 243, 255), (245, 249, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (239, 235, 205),
+ (243, 239, 161), (192, 210, 127), (143, 181, 112), (110, 153, 90),
+ (33, 105, 43), (27, 101, 43), (22, 98, 43), (13, 92, 43),
+ (23, 100, 43), (33, 109, 43), (50, 115, 54), (74, 150, 150),
+ (175, 174, 162), (234, 214, 182), (249, 235, 192), (255, 245, 177),
+ (245, 247, 167), (207, 196, 169), (133, 164, 150), (80, 126, 92),
+ (43, 115, 43), (37, 110, 43), (30, 106, 43), (31, 101, 43),
+ (24, 98, 44), (0, 131, 137), (0, 152, 145), (0, 151, 136),
+ (0, 164, 102), (28, 105, 43), (10, 120, 13), (0, 104, 0),
+ (0, 96, 0), (38, 73, 0), (30, 90, 22), (52, 119, 43),
+ (125, 157, 94), (179, 184, 144), (235, 209, 195), (224, 228, 245),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (226, 252, 199),
+ (216, 224, 141), (181, 202, 115), (148, 183, 96), (147, 185, 95),
+ (144, 181, 95), (111, 155, 88), (45, 117, 43), (34, 106, 43),
+ (10, 86, 43), (0, 57, 43), (0, 28, 42), (0, 0, 0),
+ (0, 20, 0), (0, 57, 0), (17, 68, 43), (13, 74, 43)
+ ),
+
+// 168 Apophysis-040426-163MrryGRnd
+((6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (12, 55, 12), (14, 54, 13), (16, 54, 15), (59, 78, 24),
+ (102, 103, 33), (132, 100, 30), (162, 98, 27), (154, 87, 22),
+ (146, 77, 18), (76, 50, 25), (41, 57, 24), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (11, 59, 19),
+ (16, 54, 15), (16, 54, 15), (16, 54, 15), (25, 42, 10),
+ (48, 24, 0), (79, 14, 8), (59, 22, 11), (40, 31, 14),
+ (25, 21, 17), (11, 11, 21), (34, 13, 30), (57, 15, 39),
+ (146, 31, 98), (174, 15, 85), (203, 0, 72), (214, 21, 39),
+ (226, 42, 6), (207, 82, 35), (189, 123, 65), (198, 175, 81),
+ (209, 206, 135), (222, 206, 180), (196, 198, 189), (170, 190, 199),
+ (175, 188, 151), (181, 186, 104), (164, 120, 111), (99, 85, 84),
+ (57, 47, 58), (95, 44, 75), (134, 42, 93), (160, 69, 84),
+ (187, 96, 75), (210, 82, 119), (233, 68, 163), (215, 3, 124),
+ (162, 40, 91), (44, 34, 7), (30, 44, 9), (16, 55, 11),
+ (16, 54, 13), (16, 54, 15), (42, 46, 31), (66, 42, 40),
+ (109, 125, 112), (135, 134, 120), (162, 143, 129), (140, 134, 115),
+ (118, 126, 102), (103, 109, 83), (58, 90, 103), (20, 89, 68),
+ (2, 93, 50), (10, 50, 52), (72, 79, 51), (135, 109, 50),
+ (164, 126, 44), (194, 143, 38), (214, 163, 45), (213, 177, 63),
+ (122, 154, 31), (72, 137, 29), (22, 121, 28), (11, 118, 35),
+ (1, 115, 43), (0, 115, 42), (13, 111, 36), (18, 95, 25),
+ (5, 66, 24), (80, 142, 7), (97, 143, 12), (115, 144, 18),
+ (124, 154, 24), (153, 88, 22), (198, 51, 70), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (16, 54, 15), (19, 49, 14), (23, 44, 13),
+ (93, 47, 23), (131, 58, 17), (152, 29, 21), (142, 29, 15),
+ (94, 36, 24), (81, 18, 20), (68, 0, 17), (69, 2, 10),
+ (70, 5, 3), (66, 17, 0), (41, 36, 6), (16, 54, 15),
+ (6, 64, 23), (28, 52, 52), (21, 40, 58), (14, 28, 65),
+ (28, 50, 61), (73, 58, 37), (128, 111, 33), (201, 155, 43),
+ (186, 214, 93), (164, 195, 90), (142, 177, 87), (150, 143, 91),
+ (183, 143, 47), (196, 138, 41), (175, 119, 32), (168, 104, 30),
+ (192, 65, 50), (149, 61, 86), (150, 72, 80), (151, 84, 75),
+ (137, 100, 84), (147, 116, 85), (144, 113, 82), (121, 112, 81),
+ (25, 59, 22), (20, 56, 18), (16, 54, 15), (16, 54, 15),
+ (16, 54, 15), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (16, 54, 15), (86, 48, 12),
+ (121, 31, 30), (165, 0, 6), (215, 3, 0), (194, 0, 24),
+ (158, 20, 20), (106, 31, 8), (53, 25, 4), (17, 47, 9),
+ (13, 54, 14), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (16, 54, 15),
+ (16, 54, 15), (16, 54, 15), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (2, 65, 22), (6, 64, 23), (6, 64, 23),
+ (6, 64, 23), (6, 64, 23), (6, 64, 23), (6, 64, 23)
+ ),
+
+// 169 Apophysis-040426-163SprngFlwrs
+((177, 132, 82), (186, 78, 167), (160, 77, 143), (135, 76, 119),
+ (134, 81, 112), (134, 86, 105), (136, 88, 104), (139, 90, 103),
+ (147, 95, 105), (139, 89, 104), (132, 84, 104), (125, 81, 101),
+ (118, 78, 98), (105, 75, 89), (93, 72, 81), (89, 70, 80),
+ (86, 68, 80), (76, 60, 81), (73, 57, 82), (70, 54, 83),
+ (58, 47, 80), (46, 40, 78), (49, 39, 82), (52, 39, 86),
+ (83, 48, 99), (86, 58, 91), (90, 69, 83), (107, 75, 91),
+ (124, 81, 100), (129, 84, 101), (135, 87, 103), (152, 98, 105),
+ (188, 120, 111), (248, 140, 160), (242, 145, 138), (237, 151, 117),
+ (212, 145, 99), (187, 140, 81), (183, 137, 81), (179, 134, 81),
+ (196, 146, 81), (187, 140, 80), (178, 134, 80), (171, 128, 81),
+ (164, 123, 82), (155, 118, 80), (147, 113, 78), (139, 107, 79),
+ (126, 96, 81), (120, 92, 81), (119, 91, 81), (119, 91, 82),
+ (114, 87, 81), (109, 84, 80), (108, 83, 81), (108, 82, 82),
+ (108, 82, 82), (113, 81, 88), (118, 80, 95), (128, 84, 99),
+ (138, 89, 103), (143, 92, 104), (149, 96, 105), (171, 91, 135),
+ (187, 96, 145), (238, 97, 194), (235, 75, 208), (232, 54, 223),
+ (223, 43, 238), (214, 32, 254), (219, 37, 252), (226, 66, 231),
+ (255, 104, 201), (233, 112, 168), (212, 121, 135), (190, 111, 125),
+ (168, 102, 115), (160, 100, 110), (153, 99, 105), (150, 97, 105),
+ (150, 97, 105), (175, 97, 130), (195, 107, 135), (215, 118, 141),
+ (224, 119, 149), (233, 120, 157), (254, 129, 170), (254, 111, 192),
+ (222, 112, 226), (218, 121, 217), (214, 130, 209), (205, 115, 178),
+ (196, 100, 147), (183, 98, 137), (158, 98, 112), (155, 101, 105),
+ (151, 98, 104), (146, 94, 105), (136, 94, 93), (126, 95, 82),
+ (126, 95, 82), (126, 96, 82), (128, 97, 81), (131, 99, 82),
+ (148, 95, 105), (147, 95, 105), (147, 95, 105), (144, 93, 105),
+ (142, 91, 105), (135, 88, 102), (126, 84, 98), (122, 84, 94),
+ (122, 81, 99), (117, 77, 99), (115, 76, 98), (113, 75, 98),
+ (109, 73, 96), (98, 59, 104), (90, 55, 102), (62, 29, 108),
+ (55, 20, 113), (74, 38, 109), (94, 56, 105), (105, 64, 105),
+ (116, 72, 105), (148, 48, 167), (198, 48, 165), (211, 48, 179),
+ (241, 48, 212), (253, 74, 244), (241, 90, 234), (229, 107, 225),
+ (191, 135, 225), (200, 148, 199), (200, 150, 195), (218, 147, 182),
+ (225, 150, 105), (209, 139, 105), (193, 128, 105), (190, 127, 103),
+ (187, 127, 101), (160, 120, 81), (145, 112, 78), (128, 99, 78),
+ (122, 94, 80), (120, 93, 79), (122, 93, 80), (124, 94, 82),
+ (125, 87, 92), (124, 78, 105), (125, 48, 144), (182, 51, 198),
+ (220, 19, 236), (216, 33, 236), (213, 48, 237), (173, 116, 242),
+ (149, 147, 252), (127, 139, 227), (143, 151, 252), (160, 139, 251),
+ (190, 130, 233), (221, 74, 207), (200, 66, 196), (179, 59, 186),
+ (158, 48, 178), (116, 48, 134), (122, 77, 104), (122, 87, 90),
+ (127, 97, 81), (129, 98, 81), (132, 100, 82), (140, 106, 82),
+ (147, 112, 79), (143, 109, 81), (123, 96, 78), (95, 83, 67),
+ (79, 64, 79), (40, 48, 56), (3, 48, 19), (0, 48, 16),
+ (31, 48, 47), (69, 55, 79), (81, 63, 82), (92, 72, 81),
+ (104, 80, 81), (106, 81, 81), (108, 82, 82), (108, 84, 79),
+ (106, 81, 81), (106, 73, 93), (109, 57, 118), (121, 48, 139),
+ (179, 53, 193), (216, 48, 240), (255, 66, 252), (255, 60, 252),
+ (244, 48, 241), (224, 32, 248), (221, 48, 246), (240, 92, 233),
+ (204, 107, 250), (205, 126, 223), (218, 135, 198), (181, 81, 158),
+ (139, 69, 132), (115, 73, 103), (111, 81, 88), (100, 77, 81),
+ (97, 75, 81), (101, 80, 78), (105, 83, 78), (107, 84, 79),
+ (111, 86, 81), (118, 92, 78), (126, 97, 80), (136, 104, 80),
+ (152, 114, 81), (176, 104, 122), (220, 117, 148), (240, 112, 176),
+ (248, 104, 210), (229, 116, 212), (229, 125, 201), (243, 116, 174),
+ (232, 119, 159), (198, 112, 132), (182, 110, 119), (157, 102, 104),
+ (146, 95, 103), (126, 95, 82), (119, 91, 82), (114, 87, 82),
+ (112, 86, 82), (117, 89, 81), (120, 86, 90), (120, 91, 83),
+ (124, 94, 82), (130, 98, 82), (148, 112, 80), (170, 116, 98),
+ (188, 127, 102), (190, 127, 103), (191, 110, 129), (186, 109, 125),
+ (161, 101, 110), (152, 98, 105), (149, 96, 105), (142, 91, 104),
+ (128, 85, 99), (123, 90, 86), (125, 95, 82), (126, 95, 82),
+ (127, 98, 80), (132, 102, 78), (149, 115, 79), (200, 148, 81)
+ ),
+
+// 170 Apophysis-040426-163SprngFlwersInv
+((147, 173, 173), (147, 173, 173), (142, 174, 166), (137, 175, 160),
+ (127, 170, 156), (117, 166, 152), (111, 162, 151), (106, 159, 150),
+ (68, 159, 110), (42, 158, 85), (17, 158, 61), (20, 179, 46),
+ (23, 201, 32), (29, 209, 17), (36, 218, 3), (32, 203, 13),
+ (29, 189, 24), (0, 151, 54), (21, 142, 87), (43, 134, 120),
+ (65, 143, 130), (87, 153, 140), (94, 154, 145), (102, 156, 150),
+ (105, 158, 150), (92, 158, 137), (80, 158, 125), (60, 147, 119),
+ (40, 137, 114), (31, 136, 106), (22, 135, 98), (1, 126, 85),
+ (1, 144, 63), (33, 143, 29), (37, 134, 37), (41, 125, 46),
+ (56, 141, 82), (72, 157, 118), (84, 157, 130), (97, 157, 143),
+ (104, 157, 151), (106, 159, 150), (109, 161, 150), (119, 160, 161),
+ (129, 160, 173), (129, 159, 173), (129, 159, 173), (127, 158, 174),
+ (124, 156, 173), (107, 160, 150), (107, 160, 150), (108, 160, 150),
+ (114, 163, 151), (120, 167, 153), (124, 169, 155), (129, 171, 157),
+ (133, 174, 156), (135, 176, 156), (138, 178, 156), (142, 180, 157),
+ (146, 182, 159), (151, 189, 155), (157, 196, 151), (165, 200, 153),
+ (193, 226, 147), (200, 235, 142), (180, 217, 146), (161, 199, 150),
+ (150, 191, 150), (139, 183, 150), (107, 207, 88), (57, 207, 90),
+ (14, 207, 43), (8, 194, 27), (2, 181, 11), (33, 150, 20),
+ (64, 120, 30), (59, 113, 43), (55, 107, 56), (55, 105, 60),
+ (37, 108, 73), (30, 105, 150), (46, 116, 150), (62, 127, 150),
+ (65, 127, 152), (68, 128, 154), (95, 135, 174), (110, 143, 177),
+ (133, 161, 175), (134, 161, 175), (135, 162, 176), (133, 161, 174),
+ (131, 161, 173), (130, 168, 163), (131, 177, 150), (130, 207, 111),
+ (73, 204, 57), (35, 236, 19), (58, 187, 16), (82, 139, 13),
+ (94, 123, 8), (106, 108, 3), (128, 116, 28), (112, 104, 3),
+ (65, 125, 22), (49, 153, 35), (34, 181, 48), (55, 188, 58),
+ (76, 196, 69), (97, 207, 77), (139, 207, 121), (133, 178, 151),
+ (133, 168, 165), (128, 158, 174), (125, 156, 173), (123, 155, 173),
+ (115, 149, 173), (108, 143, 176), (112, 146, 174), (132, 159, 177),
+ (176, 191, 176), (214, 199, 206), (252, 207, 236), (253, 207, 237),
+ (255, 207, 239), (224, 207, 208), (186, 200, 176), (174, 192, 173),
+ (163, 183, 174), (151, 175, 174), (149, 174, 173), (147, 173, 173),
+ (147, 171, 176), (149, 174, 174), (149, 182, 162), (146, 198, 137),
+ (76, 202, 62), (38, 195, 32), (0, 189, 3), (0, 192, 3),
+ (0, 195, 3), (11, 207, 14), (31, 223, 7), (34, 207, 9),
+ (15, 163, 22), (50, 129, 32), (43, 124, 44), (37, 120, 57),
+ (74, 174, 97), (116, 186, 123), (140, 182, 152), (144, 174, 167),
+ (158, 180, 174), (156, 177, 175), (154, 175, 177), (150, 172, 177),
+ (148, 171, 176), (144, 169, 174), (137, 163, 177), (129, 158, 175),
+ (119, 151, 175), (79, 151, 133), (57, 144, 120), (35, 138, 107),
+ (15, 143, 79), (7, 151, 45), (26, 139, 43), (26, 130, 54),
+ (23, 136, 96), (40, 139, 109), (57, 143, 123), (73, 145, 136),
+ (98, 153, 151), (109, 160, 152), (129, 160, 173), (136, 164, 173),
+ (141, 168, 173), (143, 169, 173), (138, 166, 174), (135, 169, 165),
+ (135, 164, 172), (131, 161, 173), (125, 157, 173), (107, 143, 175),
+ (67, 128, 153), (66, 128, 152), (65, 128, 152), (64, 145, 126),
+ (69, 146, 130), (94, 154, 145), (103, 157, 150), (106, 159, 150),
+ (113, 164, 151), (127, 170, 156), (132, 165, 169), (130, 160, 173),
+ (129, 160, 173), (128, 157, 175), (123, 153, 177), (106, 140, 176),
+ (55, 107, 174), (78, 123, 173), (46, 140, 21), (69, 177, 88),
+ (93, 186, 100), (120, 179, 136), (121, 170, 150), (121, 169, 150),
+ (116, 165, 152), (113, 164, 150), (108, 160, 150), (109, 161, 150),
+ (123, 171, 151), (127, 174, 150), (137, 177, 157), (152, 176, 174),
+ (162, 183, 174), (169, 187, 175), (178, 195, 173), (179, 195, 174),
+ (180, 199, 171), (185, 201, 172), (196, 208, 173), (209, 215, 177),
+ (203, 216, 169), (192, 222, 150), (172, 207, 156), (170, 204, 152),
+ (165, 186, 172), (147, 180, 162), (131, 174, 155), (120, 168, 152),
+ (103, 157, 150), (67, 135, 144), (29, 120, 127), (7, 115, 95),
+ (8, 112, 115), (18, 104, 138), (39, 110, 150), (68, 115, 174),
+ (76, 121, 174), (72, 119, 173), (59, 109, 174), (68, 115, 174),
+ (77, 121, 175), (83, 126, 174), (91, 132, 173), (108, 142, 177),
+ (116, 148, 176), (129, 159, 174), (133, 162, 174), (135, 163, 174),
+ (135, 163, 174), (136, 164, 173), (143, 168, 176), (146, 171, 175)
+ ),
+
+// 171 Apophysis-040426-163DemMask
+((1, 1, 1), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (5, 7, 4), (63, 74, 49), (121, 142, 95), (166, 145, 116),
+ (212, 149, 138), (136, 104, 99), (60, 60, 60), (32, 32, 31),
+ (4, 5, 2), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (6, 5, 3), (12, 11, 7), (49, 38, 23), (87, 65, 40),
+ (205, 183, 66), (223, 208, 71), (242, 234, 76), (247, 243, 88),
+ (252, 253, 101), (250, 250, 99), (249, 248, 97), (250, 237, 76),
+ (242, 223, 70), (250, 170, 94), (232, 201, 107), (214, 233, 120),
+ (222, 227, 140), (230, 222, 161), (225, 235, 199), (250, 218, 181),
+ (253, 252, 131), (242, 242, 103), (231, 233, 75), (183, 186, 71),
+ (135, 139, 68), (104, 104, 48), (73, 69, 29), (10, 10, 5),
+ (1, 1, 0), (7, 7, 4), (97, 18, 30), (188, 29, 56),
+ (215, 36, 49), (242, 43, 42), (255, 86, 25), (252, 91, 40),
+ (176, 173, 54), (178, 173, 94), (181, 173, 134), (181, 159, 143),
+ (181, 146, 152), (135, 118, 118), (34, 97, 129), (2, 29, 17),
+ (0, 1, 1), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (3, 1, 2), (193, 25, 48), (217, 31, 52), (242, 38, 56),
+ (242, 10, 103), (242, 2, 137), (242, 4, 145), (242, 59, 150),
+ (206, 169, 76), (211, 195, 68), (216, 221, 60), (176, 204, 56),
+ (136, 187, 52), (89, 89, 48), (33, 33, 18), (3, 3, 2),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 1, 1), (4, 4, 2), (8, 7, 3), (45, 46, 46),
+ (162, 72, 80), (238, 45, 63), (224, 57, 87), (184, 81, 103),
+ (143, 83, 94), (51, 38, 26), (4, 3, 2), (14, 0, 5),
+ (81, 6, 54), (114, 66, 99), (153, 93, 115), (82, 63, 80),
+ (2, 2, 1), (1, 1, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 1, 0), (6, 6, 4), (48, 50, 70), (15, 91, 118),
+ (22, 59, 95), (10, 10, 9), (1, 1, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (3, 1, 1), (23, 7, 2), (114, 72, 54),
+ (188, 149, 74), (228, 194, 116), (235, 225, 137), (225, 190, 172),
+ (216, 129, 152), (252, 98, 152), (238, 57, 168), (233, 1, 149),
+ (216, 12, 92), (181, 26, 103), (0, 0, 0), (28, 51, 43)
+ ),
+
+// 172 Apophysis-040426-163ResurectTree
+((103, 134, 255), (95, 126, 248), (89, 120, 242), (83, 114, 236),
+ (72, 103, 225), (62, 93, 215), (53, 84, 206), (45, 76, 198),
+ (6, 24, 146), (20, 44, 166), (34, 65, 187), (49, 80, 202),
+ (65, 96, 218), (91, 122, 229), (118, 149, 240), (127, 158, 231),
+ (136, 167, 222), (161, 192, 197), (164, 195, 193), (168, 199, 190),
+ (174, 205, 183), (181, 212, 177), (185, 216, 172), (190, 221, 168),
+ (206, 237, 152), (228, 233, 130), (250, 230, 108), (248, 223, 101),
+ (247, 216, 94), (246, 215, 93), (246, 215, 93), (244, 213, 91),
+ (244, 213, 91), (215, 184, 62), (225, 194, 72), (236, 205, 83),
+ (239, 221, 99), (242, 238, 116), (236, 243, 121), (231, 249, 127),
+ (207, 238, 151), (215, 246, 143), (223, 254, 135), (221, 252, 136),
+ (220, 251, 138), (217, 248, 140), (215, 246, 143), (214, 245, 144),
+ (199, 230, 159), (188, 219, 170), (184, 215, 174), (180, 211, 178),
+ (170, 201, 187), (161, 192, 197), (152, 183, 205), (144, 175, 214),
+ (118, 149, 240), (112, 143, 245), (107, 138, 251), (102, 133, 251),
+ (98, 129, 251), (101, 132, 252), (105, 136, 253), (114, 145, 244),
+ (125, 156, 233), (150, 181, 208), (164, 195, 194), (178, 209, 180),
+ (184, 215, 173), (191, 222, 167), (193, 224, 165), (189, 220, 169),
+ (178, 209, 180), (167, 198, 190), (157, 188, 201), (152, 183, 205),
+ (148, 179, 210), (152, 183, 206), (156, 187, 202), (169, 200, 189),
+ (184, 215, 174), (198, 229, 160), (203, 234, 155), (208, 239, 150),
+ (204, 235, 153), (201, 232, 157), (199, 230, 159), (198, 229, 160),
+ (185, 216, 173), (181, 212, 177), (177, 208, 181), (173, 204, 184),
+ (170, 201, 188), (164, 195, 194), (153, 184, 205), (139, 170, 219),
+ (128, 159, 230), (109, 140, 249), (92, 123, 239), (76, 107, 229),
+ (71, 102, 224), (67, 98, 220), (64, 95, 217), (51, 82, 204),
+ (44, 75, 197), (56, 87, 209), (69, 100, 222), (79, 110, 232),
+ (89, 120, 242), (118, 149, 240), (140, 171, 218), (164, 195, 194),
+ (183, 214, 175), (205, 236, 153), (225, 235, 132), (246, 234, 112),
+ (166, 135, 13), (161, 130, 8), (151, 120, 1), (144, 113, 8),
+ (85, 54, 67), (60, 60, 128), (36, 67, 189), (41, 72, 194),
+ (46, 77, 199), (61, 92, 214), (65, 96, 218), (68, 99, 221),
+ (71, 102, 224), (75, 106, 228), (77, 108, 230), (79, 110, 232),
+ (80, 111, 233), (86, 117, 239), (87, 118, 240), (90, 121, 243),
+ (93, 124, 246), (88, 119, 241), (83, 114, 236), (81, 112, 234),
+ (80, 111, 233), (74, 105, 227), (69, 100, 222), (65, 96, 218),
+ (54, 85, 207), (51, 82, 204), (55, 86, 208), (60, 91, 213),
+ (67, 98, 220), (75, 106, 228), (83, 114, 236), (91, 122, 244),
+ (90, 121, 243), (87, 118, 240), (85, 116, 238), (81, 112, 234),
+ (80, 111, 233), (79, 110, 232), (80, 111, 233), (85, 116, 238),
+ (92, 123, 245), (106, 137, 252), (107, 138, 250), (109, 140, 249),
+ (111, 142, 247), (113, 144, 245), (114, 145, 244), (115, 146, 243),
+ (118, 149, 240), (119, 150, 239), (120, 151, 238), (125, 156, 233),
+ (124, 155, 234), (120, 151, 238), (118, 149, 240), (118, 149, 240),
+ (118, 149, 240), (118, 149, 240), (122, 153, 236), (126, 157, 232),
+ (128, 159, 230), (138, 169, 220), (151, 182, 207), (158, 189, 200),
+ (175, 206, 183), (177, 208, 180), (180, 211, 178), (184, 215, 174),
+ (186, 217, 172), (189, 220, 169), (191, 222, 167), (196, 227, 162),
+ (199, 230, 159), (205, 236, 153), (219, 250, 139), (231, 249, 127),
+ (242, 238, 116), (249, 231, 109), (255, 225, 103), (251, 220, 98),
+ (251, 220, 98), (250, 230, 108), (234, 246, 124), (233, 247, 125),
+ (230, 250, 128), (206, 237, 152), (194, 225, 164), (180, 211, 178),
+ (164, 195, 194), (146, 177, 212), (127, 158, 231), (118, 149, 240),
+ (111, 142, 247), (108, 139, 250), (103, 134, 255), (101, 132, 254),
+ (103, 134, 255), (105, 136, 253), (106, 137, 252), (107, 138, 251),
+ (105, 136, 253), (102, 133, 255), (102, 133, 255), (102, 133, 255),
+ (101, 132, 254), (101, 132, 254), (101, 132, 254), (104, 135, 254),
+ (107, 138, 251), (110, 141, 248), (114, 145, 244), (117, 148, 241),
+ (117, 148, 241), (118, 149, 240), (118, 149, 240), (118, 149, 240),
+ (118, 149, 240), (123, 154, 235), (126, 157, 232), (135, 166, 223),
+ (142, 173, 216), (145, 176, 213), (150, 181, 208), (143, 174, 215),
+ (135, 166, 223), (129, 160, 229), (127, 158, 231), (126, 157, 232),
+ (126, 157, 232), (126, 157, 232), (131, 162, 227), (145, 176, 213),
+ (160, 191, 198), (168, 199, 190), (208, 239, 150), (186, 217, 172)
+ ),
+
+// 173 Apophysis-040426-163GldBlue
+((152, 121, 0), (160, 129, 7), (166, 135, 13), (172, 141, 19),
+ (182, 151, 29), (193, 162, 40), (201, 170, 48), (210, 179, 57),
+ (249, 231, 109), (235, 210, 88), (221, 190, 68), (205, 174, 52),
+ (190, 159, 37), (163, 132, 26), (137, 106, 15), (128, 97, 24),
+ (119, 88, 33), (94, 63, 58), (90, 59, 61), (87, 56, 65),
+ (80, 49, 71), (74, 43, 78), (69, 38, 82), (65, 34, 87),
+ (49, 18, 103), (27, 21, 125), (5, 25, 147), (6, 32, 154),
+ (8, 39, 161), (8, 39, 161), (9, 40, 162), (11, 42, 164),
+ (11, 42, 164), (40, 71, 193), (29, 60, 182), (19, 50, 172),
+ (16, 33, 155), (13, 17, 139), (18, 11, 133), (24, 6, 128),
+ (48, 17, 104), (40, 9, 112), (32, 1, 120), (33, 2, 118),
+ (35, 4, 117), (37, 6, 114), (40, 9, 112), (41, 10, 111),
+ (56, 25, 96), (67, 36, 85), (71, 40, 81), (75, 44, 77),
+ (84, 53, 67), (94, 63, 58), (102, 71, 49), (111, 80, 41),
+ (137, 106, 15), (142, 111, 9), (148, 117, 4), (152, 121, 4),
+ (157, 126, 4), (153, 122, 3), (150, 119, 2), (141, 110, 11),
+ (130, 99, 22), (105, 74, 47), (91, 60, 61), (77, 46, 75),
+ (70, 39, 81), (64, 33, 88), (62, 31, 90), (66, 35, 86),
+ (77, 46, 75), (87, 56, 64), (98, 67, 54), (102, 71, 49),
+ (107, 76, 45), (103, 72, 49), (99, 68, 53), (86, 55, 66),
+ (71, 40, 81), (57, 26, 95), (52, 21, 100), (47, 16, 105),
+ (50, 19, 101), (54, 23, 98), (56, 25, 96), (57, 26, 95),
+ (70, 39, 82), (74, 43, 78), (78, 47, 74), (81, 50, 70),
+ (85, 54, 67), (91, 60, 61), (102, 71, 50), (116, 85, 36),
+ (127, 96, 25), (146, 115, 6), (162, 131, 16), (179, 148, 26),
+ (183, 152, 30), (188, 157, 35), (191, 160, 38), (204, 173, 51),
+ (211, 180, 58), (198, 167, 45), (186, 155, 33), (176, 145, 23),
+ (166, 135, 13), (137, 106, 15), (115, 84, 37), (91, 60, 61),
+ (72, 41, 80), (50, 19, 102), (29, 20, 122), (9, 21, 143),
+ (89, 120, 242), (94, 125, 247), (104, 135, 254), (111, 142, 247),
+ (170, 201, 188), (194, 194, 127), (219, 188, 66), (214, 183, 61),
+ (209, 178, 56), (194, 163, 41), (190, 159, 37), (187, 156, 34),
+ (184, 153, 31), (180, 149, 27), (178, 147, 25), (176, 145, 23),
+ (175, 144, 22), (169, 138, 16), (168, 137, 15), (165, 134, 12),
+ (162, 131, 9), (167, 136, 14), (172, 141, 19), (173, 142, 20),
+ (175, 144, 22), (181, 150, 28), (186, 155, 33), (190, 159, 37),
+ (201, 170, 48), (204, 173, 51), (199, 168, 46), (195, 164, 42),
+ (188, 157, 35), (180, 149, 27), (172, 141, 19), (164, 133, 11),
+ (165, 134, 12), (167, 136, 14), (170, 139, 17), (174, 143, 21),
+ (175, 144, 22), (176, 145, 23), (175, 144, 22), (170, 139, 17),
+ (163, 132, 10), (149, 118, 3), (147, 116, 4), (146, 115, 6),
+ (144, 113, 8), (142, 111, 10), (141, 110, 11), (140, 109, 12),
+ (137, 106, 15), (136, 105, 16), (135, 104, 17), (130, 99, 22),
+ (131, 100, 21), (135, 104, 17), (137, 106, 15), (137, 106, 15),
+ (137, 106, 15), (137, 106, 15), (133, 102, 19), (129, 98, 23),
+ (127, 96, 25), (117, 86, 35), (104, 73, 48), (97, 66, 55),
+ (80, 49, 72), (77, 46, 74), (75, 44, 77), (71, 40, 81),
+ (69, 38, 83), (66, 35, 86), (64, 33, 88), (59, 28, 93),
+ (56, 25, 96), (50, 19, 102), (36, 5, 116), (24, 6, 128),
+ (13, 17, 139), (6, 24, 146), (0, 30, 152), (4, 35, 157),
+ (4, 35, 157), (5, 25, 147), (21, 9, 131), (22, 8, 130),
+ (25, 5, 127), (49, 18, 103), (61, 30, 91), (75, 44, 77),
+ (91, 60, 61), (109, 78, 43), (128, 97, 24), (137, 106, 15),
+ (144, 113, 8), (147, 116, 5), (152, 121, 0), (154, 123, 1),
+ (152, 121, 0), (150, 119, 2), (149, 118, 3), (148, 117, 4),
+ (150, 119, 2), (153, 122, 0), (153, 122, 0), (153, 122, 0),
+ (154, 123, 1), (154, 123, 1), (154, 123, 1), (151, 120, 1),
+ (148, 117, 4), (145, 114, 7), (141, 110, 11), (138, 107, 14),
+ (138, 107, 14), (137, 106, 15), (137, 106, 15), (137, 106, 15),
+ (137, 106, 15), (132, 101, 20), (129, 98, 23), (120, 89, 32),
+ (113, 82, 39), (110, 79, 42), (105, 74, 47), (112, 81, 40),
+ (120, 89, 32), (126, 95, 26), (128, 97, 24), (129, 98, 23),
+ (129, 98, 23), (129, 98, 23), (124, 93, 28), (110, 79, 42),
+ (95, 64, 57), (87, 56, 65), (47, 16, 105), (69, 38, 83)
+ ),
+
+// 174 Apophysis-040426-163WrldBndr
+((232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (55, 12, 9), (54, 11, 9), (54, 11, 10),
+ (76, 33, 21), (98, 55, 33), (165, 122, 100), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (98, 55, 33), (98, 55, 33), (98, 55, 33), (165, 122, 100),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (98, 55, 33),
+ (98, 55, 33), (73, 73, 73), (48, 91, 113), (61, 104, 126),
+ (94, 137, 159), (183, 226, 248), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (98, 55, 33),
+ (98, 55, 33), (95, 52, 30), (89, 46, 24), (89, 46, 24),
+ (89, 46, 24), (92, 49, 27), (95, 52, 30), (98, 55, 33),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167),
+ (232, 189, 167), (232, 189, 167), (232, 189, 167), (232, 189, 167)
+ ),
+
+// 175 Apophysis-040426-163GrnPrpl
+((85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (77, 19, 74), (69, 11, 66), (61, 3, 58),
+ (37, 20, 34), (5, 52, 2), (5, 52, 2), (5, 52, 2),
+ (29, 28, 26), (53, 4, 50), (57, 3, 54), (61, 3, 58),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (133, 75, 130), (133, 75, 130), (133, 75, 130), (109, 51, 106),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (42, 100, 45),
+ (26, 84, 29), (26, 84, 29), (26, 84, 29), (34, 92, 37),
+ (42, 100, 45), (42, 100, 45), (42, 100, 45), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (101, 43, 98), (121, 63, 118), (141, 83, 138),
+ (157, 99, 154), (173, 115, 170), (189, 131, 186), (221, 163, 218),
+ (146, 204, 149), (122, 180, 125), (98, 156, 101), (90, 148, 93),
+ (42, 100, 45), (26, 84, 29), (10, 68, 13), (5, 52, 2),
+ (21, 36, 18), (53, 4, 50), (61, 3, 58), (77, 19, 74),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (77, 19, 74), (61, 3, 58),
+ (29, 28, 26), (21, 36, 18), (21, 36, 18), (29, 28, 26),
+ (61, 3, 58), (69, 11, 66), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82),
+ (85, 27, 82), (85, 27, 82), (85, 27, 82), (85, 27, 82)
+ ),
+
+// 176 Apophysis-040426-163SphPart2
+((81, 83, 26), (72, 80, 20), (67, 78, 17), (63, 77, 14),
+ (61, 76, 13), (60, 76, 12), (60, 76, 12), (60, 76, 12),
+ (57, 75, 10), (57, 75, 10), (57, 75, 10), (57, 75, 10),
+ (57, 75, 10), (55, 74, 9), (54, 74, 8), (54, 74, 8),
+ (54, 74, 8), (54, 74, 8), (58, 75, 11), (63, 77, 14),
+ (69, 79, 18), (75, 81, 22), (76, 81, 23), (78, 82, 24),
+ (84, 84, 28), (85, 84, 29), (87, 85, 30), (87, 85, 30),
+ (87, 85, 30), (85, 84, 29), (84, 84, 28), (78, 82, 24),
+ (72, 80, 20), (75, 81, 22), (78, 82, 24), (81, 83, 26),
+ (82, 83, 27), (84, 84, 28), (84, 84, 28), (84, 84, 28),
+ (84, 84, 28), (81, 83, 26), (78, 82, 24), (75, 81, 22),
+ (72, 80, 20), (70, 79, 19), (69, 79, 18), (66, 78, 16),
+ (66, 78, 16), (72, 80, 20), (73, 80, 21), (75, 81, 22),
+ (76, 81, 23), (78, 82, 24), (78, 82, 24), (78, 82, 24),
+ (75, 81, 22), (73, 80, 21), (72, 80, 20), (72, 80, 20),
+ (72, 80, 20), (72, 80, 20), (72, 80, 20), (72, 80, 20),
+ (72, 80, 20), (72, 80, 20), (72, 80, 20), (72, 80, 20),
+ (72, 80, 20), (72, 80, 20), (72, 80, 20), (72, 80, 20),
+ (75, 81, 22), (78, 82, 24), (81, 83, 26), (78, 82, 24),
+ (75, 81, 22), (75, 81, 22), (75, 81, 22), (78, 82, 24),
+ (81, 83, 26), (81, 83, 26), (82, 83, 27), (84, 84, 28),
+ (84, 84, 28), (84, 84, 28), (84, 84, 28), (81, 83, 26),
+ (81, 83, 26), (82, 83, 27), (84, 84, 28), (87, 85, 30),
+ (90, 86, 32), (108, 92, 44), (144, 104, 68), (186, 118, 96),
+ (190, 163, 186), (73, 202, 247), (119, 186, 224), (166, 171, 202),
+ (175, 168, 196), (184, 165, 190), (208, 157, 174), (253, 142, 144),
+ (237, 135, 130), (181, 116, 93), (126, 98, 56), (114, 94, 48),
+ (102, 90, 40), (87, 85, 30), (81, 83, 26), (75, 81, 22),
+ (72, 80, 20), (72, 80, 20), (72, 80, 20), (72, 80, 20),
+ (72, 80, 20), (69, 79, 18), (66, 78, 16), (63, 77, 14),
+ (60, 76, 12), (63, 77, 14), (66, 78, 16), (67, 78, 17),
+ (69, 79, 18), (69, 79, 18), (69, 79, 18), (72, 80, 20),
+ (72, 80, 20), (72, 80, 20), (72, 80, 20), (72, 80, 20),
+ (72, 80, 20), (72, 80, 20), (72, 80, 20), (75, 81, 22),
+ (81, 83, 26), (87, 85, 30), (93, 87, 34), (106, 91, 43),
+ (120, 96, 52), (141, 103, 66), (186, 118, 96), (208, 157, 174),
+ (199, 160, 180), (250, 143, 146), (251, 142, 145), (253, 142, 144),
+ (241, 146, 152), (193, 162, 184), (172, 169, 198), (163, 172, 204),
+ (181, 166, 192), (190, 163, 186), (199, 160, 180), (225, 131, 122),
+ (159, 109, 78), (120, 96, 52), (96, 88, 36), (87, 85, 30),
+ (87, 85, 30), (99, 89, 38), (109, 92, 45), (120, 96, 52),
+ (37, 214, 223), (34, 215, 221), (31, 216, 219), (28, 217, 217),
+ (34, 215, 221), (43, 212, 227), (52, 209, 233), (147, 105, 70),
+ (129, 99, 58), (174, 114, 88), (219, 129, 118), (240, 136, 132),
+ (246, 138, 136), (199, 160, 180), (190, 163, 186), (187, 164, 188),
+ (193, 162, 184), (180, 116, 92), (132, 100, 60), (111, 93, 46),
+ (93, 87, 34), (100, 89, 39), (108, 92, 44), (135, 101, 62),
+ (180, 116, 92), (234, 134, 128), (234, 134, 128), (171, 113, 86),
+ (132, 100, 60), (108, 92, 44), (90, 86, 32), (81, 83, 26),
+ (72, 80, 20), (66, 78, 16), (60, 76, 12), (60, 76, 12),
+ (60, 76, 12), (60, 76, 12), (60, 76, 12), (63, 77, 14),
+ (63, 77, 14), (63, 77, 14), (63, 77, 14), (63, 77, 14),
+ (66, 78, 16), (69, 79, 18), (72, 80, 20), (72, 80, 20),
+ (69, 79, 18), (66, 78, 16), (63, 77, 14), (66, 78, 16),
+ (69, 79, 18), (69, 79, 18), (69, 79, 18), (72, 80, 20),
+ (72, 80, 20), (72, 80, 20), (72, 80, 20), (72, 80, 20),
+ (69, 79, 18), (66, 78, 16), (63, 77, 14), (63, 77, 14),
+ (63, 77, 14), (63, 77, 14), (63, 77, 14), (66, 78, 16),
+ (69, 79, 18), (69, 79, 18), (69, 79, 18), (69, 79, 18),
+ (72, 80, 20), (72, 80, 20), (75, 81, 22), (78, 82, 24),
+ (81, 83, 26), (84, 84, 28), (84, 84, 28), (84, 84, 28),
+ (81, 83, 26), (78, 82, 24), (75, 81, 22), (72, 80, 20),
+ (72, 80, 20), (75, 81, 22), (81, 83, 26), (87, 85, 30),
+ (105, 91, 42), (123, 97, 54), (216, 128, 116), (150, 106, 72)
+ ),
+
+// 177 Apophysis-040426-163StAmF
+((0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (66, 36, 8),
+ (133, 72, 16), (115, 96, 84), (98, 121, 152), (100, 132, 158),
+ (103, 144, 165), (114, 178, 190), (118, 186, 199), (122, 194, 209),
+ (117, 189, 201), (113, 185, 194), (99, 171, 174), (86, 158, 155),
+ (121, 133, 30), (125, 125, 20), (130, 118, 10), (130, 108, 21),
+ (130, 99, 33), (132, 104, 32), (134, 110, 32), (140, 111, 37),
+ (146, 120, 151), (129, 168, 196), (138, 184, 209), (148, 201, 223),
+ (119, 170, 187), (90, 139, 151), (107, 127, 93), (124, 116, 36),
+ (141, 88, 34), (137, 94, 99), (134, 100, 164), (131, 108, 169),
+ (129, 116, 174), (131, 107, 168), (133, 99, 162), (123, 92, 152),
+ (138, 75, 36), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (141, 61, 31), (141, 72, 40),
+ (109, 113, 158), (105, 128, 161), (102, 144, 164), (94, 148, 159),
+ (87, 152, 154), (89, 157, 158), (91, 163, 163), (89, 166, 163),
+ (94, 170, 169), (106, 166, 177), (105, 160, 174), (105, 155, 171),
+ (108, 151, 172), (112, 147, 174), (108, 146, 170), (104, 145, 166),
+ (88, 140, 150), (48, 113, 75), (9, 87, 0), (4, 43, 0),
+ (0, 0, 0), (0, 0, 0), (140, 70, 28), (136, 85, 39),
+ (106, 108, 153), (96, 128, 153), (92, 127, 149), (89, 126, 146),
+ (130, 102, 39), (135, 81, 31), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (135, 61, 21), (169, 105, 142), (182, 114, 153), (195, 124, 164),
+ (150, 111, 180), (150, 119, 159), (156, 133, 157), (139, 147, 51),
+ (134, 78, 22), (67, 39, 11), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (119, 123, 34), (101, 130, 90), (84, 138, 146),
+ (91, 146, 155), (92, 146, 156), (97, 127, 154), (105, 111, 154),
+ (139, 66, 26), (69, 33, 13), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (144, 60, 35), (144, 61, 36),
+ (138, 79, 39), (117, 90, 148), (125, 108, 167), (149, 110, 179),
+ (166, 122, 196), (170, 121, 192), (184, 143, 190), (185, 158, 183),
+ (186, 196, 157), (181, 193, 152), (177, 191, 147), (115, 157, 181),
+ (113, 129, 168), (97, 105, 145), (55, 34, 38), (0, 0, 0),
+ (0, 0, 0), (85, 103, 20), (116, 115, 19), (127, 125, 30),
+ (172, 172, 156), (153, 163, 210), (169, 194, 254), (176, 224, 252),
+ (159, 195, 251), (165, 195, 254), (180, 179, 246), (205, 153, 213),
+ (187, 152, 196), (180, 156, 177), (181, 173, 169), (181, 183, 163),
+ (199, 185, 155), (203, 192, 153), (217, 179, 180), (216, 202, 182),
+ (215, 211, 183), (214, 225, 222), (225, 234, 237), (218, 206, 253),
+ (213, 203, 253), (216, 162, 222), (182, 138, 191), (140, 115, 180),
+ (130, 119, 176), (103, 129, 160), (125, 135, 179), (151, 157, 206),
+ (174, 184, 230), (188, 215, 246), (209, 229, 241), (238, 223, 225),
+ (241, 182, 244), (253, 177, 254), (228, 157, 243), (211, 150, 223),
+ (155, 162, 211), (119, 165, 187), (95, 156, 163), (87, 142, 150),
+ (115, 133, 36), (125, 113, 30), (125, 115, 39), (106, 114, 156),
+ (122, 103, 162), (122, 91, 151), (141, 69, 39), (144, 60, 35),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (67, 38, 38), (112, 90, 147), (138, 105, 153)
+ ),
+
+// 178 Apophysis-040426-163StCosOwl
+((90, 143, 129), (43, 93, 69), (45, 69, 77), (48, 45, 86),
+ (53, 49, 107), (58, 53, 128), (51, 42, 151), (44, 32, 175),
+ (25, 20, 87), (23, 10, 57), (22, 0, 28), (14, 2, 19),
+ (6, 5, 11), (21, 12, 8), (37, 20, 5), (45, 19, 2),
+ (53, 19, 0), (75, 30, 8), (70, 49, 37), (65, 68, 66),
+ (73, 72, 105), (81, 76, 145), (94, 87, 181), (108, 98, 217),
+ (184, 172, 255), (214, 200, 255), (244, 228, 255), (241, 225, 255),
+ (238, 222, 255), (234, 218, 255), (231, 215, 255), (211, 196, 255),
+ (177, 165, 255), (105, 91, 255), (94, 84, 202), (84, 78, 150),
+ (98, 91, 175), (113, 105, 201), (130, 120, 223), (147, 135, 246),
+ (185, 172, 255), (209, 194, 255), (233, 217, 255), (243, 226, 255),
+ (253, 236, 255), (254, 238, 255), (255, 241, 255), (255, 249, 255),
+ (255, 254, 255), (255, 255, 255), (255, 253, 255), (255, 251, 255),
+ (255, 245, 255), (255, 240, 255), (251, 235, 255), (247, 230, 255),
+ (184, 171, 255), (141, 131, 214), (98, 91, 174), (132, 116, 155),
+ (167, 141, 137), (191, 158, 144), (215, 176, 152), (245, 196, 162),
+ (236, 234, 233), (201, 187, 255), (163, 152, 238), (125, 117, 222),
+ (98, 92, 175), (72, 67, 128), (40, 37, 79), (23, 26, 31),
+ (4, 4, 7), (24, 10, 7), (45, 17, 7), (76, 34, 12),
+ (107, 52, 18), (103, 59, 35), (100, 66, 53), (76, 67, 63),
+ (61, 74, 75), (68, 64, 122), (60, 56, 108), (53, 49, 94),
+ (44, 41, 78), (35, 33, 63), (25, 23, 45), (15, 14, 26),
+ (21, 6, 0), (33, 9, 4), (46, 13, 9), (30, 6, 21),
+ (15, 0, 33), (8, 3, 79), (3, 3, 80), (6, 0, 80),
+ (12, 6, 80), (37, 26, 28), (66, 31, 34), (95, 37, 41),
+ (100, 50, 51), (106, 64, 61), (92, 70, 67), (112, 95, 91),
+ (71, 67, 127), (73, 68, 130), (75, 70, 133), (79, 73, 140),
+ (83, 77, 147), (197, 24, 173), (208, 30, 187), (153, 138, 255),
+ (173, 161, 255), (182, 169, 255), (183, 170, 255), (184, 172, 255),
+ (185, 172, 255), (189, 176, 255), (211, 197, 255), (229, 213, 255),
+ (225, 215, 255), (194, 185, 252), (164, 156, 250), (129, 122, 209),
+ (95, 88, 168), (71, 67, 127), (42, 38, 90), (26, 25, 47),
+ (3, 1, 21), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 1), (4, 0, 19), (9, 0, 38), (19, 0, 57),
+ (29, 0, 76), (41, 0, 72), (37, 0, 93), (42, 0, 91),
+ (72, 0, 135), (130, 121, 231), (156, 145, 243), (182, 170, 255),
+ (220, 205, 255), (236, 219, 255), (237, 221, 255), (223, 220, 231),
+ (132, 129, 161), (101, 98, 142), (71, 67, 124), (34, 31, 60),
+ (16, 15, 29), (0, 0, 1), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (3, 2, 1), (29, 21, 17), (54, 39, 32), (59, 49, 48),
+ (33, 31, 59), (32, 30, 57), (31, 29, 55), (20, 19, 36),
+ (5, 5, 10), (0, 0, 0), (0, 0, 0), (2, 2, 2),
+ (3, 11, 8), (7, 23, 27), (25, 71, 51), (47, 98, 19),
+ (75, 112, 17), (107, 121, 15), (136, 86, 63), (152, 111, 90),
+ (115, 80, 54), (104, 78, 62), (94, 77, 70), (59, 54, 52),
+ (27, 27, 27), (1, 9, 3), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 7), (19, 18, 34), (48, 45, 86),
+ (80, 75, 143), (130, 121, 231), (169, 160, 255), (206, 192, 255),
+ (236, 220, 255), (255, 238, 255), (255, 247, 255), (255, 254, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 250, 248), (255, 255, 219),
+ (255, 237, 138), (218, 158, 119), (210, 164, 97), (138, 126, 84),
+ (118, 106, 65), (126, 98, 39), (76, 77, 31), (74, 54, 47),
+ (44, 41, 67), (29, 27, 52), (41, 38, 73), (69, 64, 78),
+ (130, 106, 83), (170, 141, 122), (219, 161, 134), (233, 186, 151),
+ (255, 253, 214), (220, 255, 255), (237, 234, 255), (222, 222, 231),
+ (140, 245, 157), (108, 172, 113), (127, 127, 79), (139, 117, 113),
+ (103, 102, 113), (84, 84, 129), (89, 83, 159), (130, 121, 231),
+ (161, 150, 255), (189, 176, 255), (208, 194, 255), (242, 226, 255),
+ (251, 234, 255), (255, 239, 255), (255, 240, 255), (255, 241, 255),
+ (255, 246, 255), (255, 250, 255), (255, 251, 255), (255, 251, 255),
+ (255, 243, 255), (245, 228, 255), (222, 207, 255), (183, 171, 255)
+ ),
+
+// 179 Apophysis-040426-163StGenie
+((64, 50, 36), (23, 82, 142), (13, 68, 124), (3, 55, 107),
+ (32, 45, 59), (61, 36, 12), (71, 39, 7), (81, 42, 3),
+ (89, 44, 0), (105, 52, 0), (121, 60, 0), (150, 75, 0),
+ (179, 90, 0), (201, 101, 1), (224, 113, 2), (230, 116, 3),
+ (236, 120, 4), (254, 139, 25), (254, 143, 32), (254, 147, 39),
+ (254, 141, 28), (254, 135, 17), (253, 134, 16), (253, 134, 15),
+ (245, 136, 28), (233, 142, 52), (221, 149, 77), (228, 161, 95),
+ (235, 174, 114), (243, 175, 108), (251, 176, 102), (249, 165, 81),
+ (242, 149, 56), (252, 138, 23), (251, 135, 18), (250, 132, 14),
+ (252, 129, 7), (254, 127, 0), (252, 126, 0), (251, 125, 0),
+ (226, 115, 3), (221, 112, 2), (217, 110, 2), (195, 99, 3),
+ (173, 89, 4), (161, 83, 5), (150, 78, 7), (136, 69, 3),
+ (135, 68, 0), (149, 77, 5), (173, 88, 2), (198, 99, 0),
+ (208, 104, 0), (219, 110, 0), (223, 112, 0), (228, 115, 1),
+ (250, 126, 1), (251, 127, 1), (253, 128, 2), (245, 126, 6),
+ (237, 124, 10), (231, 120, 8), (225, 116, 7), (204, 107, 10),
+ (169, 85, 1), (119, 60, 0), (100, 51, 0), (82, 42, 1),
+ (78, 45, 12), (75, 49, 23), (30, 40, 50), (19, 52, 84),
+ (49, 111, 173), (63, 89, 115), (78, 68, 58), (133, 82, 32),
+ (189, 97, 6), (200, 102, 5), (211, 107, 4), (217, 111, 5),
+ (210, 106, 2), (145, 75, 4), (114, 58, 2), (83, 42, 0),
+ (75, 43, 10), (68, 45, 21), (19, 39, 59), (5, 48, 92),
+ (3, 68, 133), (10, 53, 95), (17, 38, 58), (30, 38, 46),
+ (43, 39, 35), (82, 42, 2), (103, 52, 0), (128, 68, 8),
+ (146, 85, 24), (211, 173, 135), (206, 169, 132), (201, 166, 130),
+ (167, 149, 130), (134, 132, 131), (144, 90, 35), (133, 72, 12),
+ (137, 70, 4), (136, 69, 3), (135, 69, 3), (133, 68, 3),
+ (132, 67, 3), (128, 66, 3), (121, 61, 2), (118, 59, 0),
+ (124, 63, 2), (141, 72, 4), (147, 76, 5), (153, 80, 7),
+ (187, 110, 34), (203, 158, 114), (204, 171, 138), (222, 188, 155),
+ (251, 202, 153), (249, 188, 127), (247, 175, 102), (231, 155, 79),
+ (216, 136, 56), (214, 113, 12), (196, 100, 3), (156, 78, 0),
+ (129, 66, 2), (99, 51, 2), (104, 53, 2), (110, 56, 3),
+ (127, 65, 3), (149, 75, 1), (187, 94, 0), (202, 101, 0),
+ (193, 97, 1), (169, 86, 3), (146, 75, 5), (137, 70, 3),
+ (128, 65, 2), (116, 58, 1), (98, 50, 1), (80, 49, 17),
+ (73, 71, 69), (90, 152, 213), (78, 155, 231), (67, 158, 249),
+ (94, 170, 245), (152, 199, 246), (200, 218, 237), (232, 234, 236),
+ (121, 148, 176), (86, 127, 168), (52, 106, 160), (22, 44, 66),
+ (90, 70, 49), (98, 58, 17), (118, 60, 1), (152, 76, 0),
+ (200, 101, 1), (229, 149, 68), (234, 157, 80), (240, 166, 92),
+ (252, 175, 97), (254, 153, 52), (253, 140, 27), (252, 133, 14),
+ (236, 119, 2), (228, 115, 1), (221, 111, 0), (207, 103, 0),
+ (185, 92, 0), (152, 80, 7), (138, 72, 5), (124, 71, 18),
+ (130, 87, 44), (82, 122, 162), (47, 141, 235), (21, 124, 226),
+ (8, 110, 213), (1, 122, 244), (1, 127, 253), (55, 147, 239),
+ (187, 216, 246), (188, 216, 244), (190, 216, 243), (130, 188, 246),
+ (55, 155, 254), (4, 129, 254), (2, 118, 234), (4, 107, 210),
+ (5, 105, 205), (6, 105, 204), (0, 89, 177), (0, 87, 173),
+ (8, 101, 195), (79, 141, 203), (130, 157, 185), (141, 151, 160),
+ (208, 172, 137), (217, 175, 132), (219, 165, 111), (229, 147, 65),
+ (229, 127, 25), (229, 118, 7), (225, 113, 1), (231, 117, 4),
+ (236, 121, 5), (238, 121, 4), (239, 123, 7), (248, 130, 12),
+ (252, 132, 11), (251, 130, 9), (241, 124, 7), (236, 122, 8),
+ (223, 114, 4), (222, 111, 1), (198, 100, 2), (161, 82, 4),
+ (149, 76, 4), (144, 74, 4), (142, 73, 5), (147, 75, 2),
+ (160, 81, 2), (190, 95, 1), (211, 106, 1), (217, 111, 5),
+ (215, 109, 3), (198, 99, 0), (160, 81, 2), (150, 77, 3),
+ (147, 76, 5), (142, 74, 6), (146, 78, 10), (149, 86, 24),
+ (194, 120, 45), (209, 160, 110), (219, 183, 147), (234, 193, 153),
+ (254, 217, 181), (225, 211, 197), (227, 225, 222), (252, 222, 192),
+ (239, 208, 178), (216, 179, 142), (234, 178, 123), (250, 170, 89),
+ (252, 152, 52), (253, 143, 32), (243, 132, 20), (235, 121, 7),
+ (229, 119, 8), (215, 132, 50), (196, 148, 101), (174, 138, 102)
+ ),
+
+// 180 Apophysis-040426-163St
+((79, 122, 116), (102, 152, 145), (90, 137, 130), (78, 122, 116),
+ (89, 108, 95), (101, 95, 74), (104, 98, 76), (108, 102, 79),
+ (158, 151, 120), (183, 175, 142), (208, 200, 165), (208, 200, 165),
+ (209, 201, 166), (195, 188, 153), (182, 175, 140), (166, 159, 127),
+ (151, 144, 114), (83, 128, 121), (77, 121, 114), (72, 114, 108),
+ (47, 76, 73), (22, 39, 39), (13, 23, 23), (4, 8, 8),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (16, 17, 12),
+ (28, 24, 19), (50, 45, 35), (73, 67, 52), (128, 122, 96),
+ (171, 165, 131), (227, 172, 227), (237, 197, 238), (248, 223, 249),
+ (245, 231, 245), (242, 239, 241), (236, 238, 238), (254, 240, 223),
+ (230, 220, 187), (166, 186, 166), (103, 152, 145), (75, 115, 110),
+ (48, 78, 75), (31, 51, 50), (14, 25, 25), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (2, 4, 5), (2, 5, 3), (2, 6, 2),
+ (2, 7, 3), (3, 9, 4), (4, 10, 4), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (32, 28, 22), (67, 61, 48),
+ (156, 149, 118), (184, 176, 143), (212, 204, 169), (212, 204, 169),
+ (213, 205, 169), (211, 203, 167), (161, 155, 123), (123, 117, 91),
+ (92, 86, 67), (10, 18, 19), (7, 14, 12), (5, 10, 5),
+ (11, 20, 21), (40, 36, 28), (47, 78, 74), (66, 99, 93),
+ (100, 149, 142), (107, 156, 149), (114, 164, 157), (120, 170, 163),
+ (126, 177, 170), (143, 183, 172), (124, 175, 168), (103, 152, 145),
+ (127, 121, 94), (46, 41, 32), (31, 27, 21), (17, 14, 11),
+ (5, 10, 5), (2, 7, 2), (1, 2, 1), (0, 2, 0),
+ (0, 2, 0), (0, 2, 0), (0, 2, 1), (0, 2, 2),
+ (2, 4, 4), (3, 6, 7), (5, 10, 5), (4, 8, 9),
+ (21, 37, 37), (55, 90, 85), (79, 94, 80), (104, 98, 76),
+ (120, 114, 89), (139, 133, 104), (141, 135, 106), (123, 117, 91),
+ (97, 91, 71), (96, 90, 70), (96, 90, 70), (72, 83, 70),
+ (48, 43, 33), (21, 18, 14), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (4, 10, 4),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (11, 9, 7), (46, 41, 32), (85, 79, 61),
+ (112, 106, 83), (147, 140, 110), (157, 150, 119), (148, 141, 111),
+ (128, 121, 95), (112, 106, 82), (95, 89, 69), (52, 47, 36),
+ (23, 19, 15), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (18, 32, 32), (46, 77, 74), (66, 105, 100), (70, 110, 105),
+ (54, 88, 84), (49, 44, 34), (19, 16, 13), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (5, 10, 5),
+ (5, 10, 5), (5, 10, 5), (5, 10, 5), (12, 10, 8),
+ (15, 27, 27), (35, 60, 58), (43, 72, 69), (40, 68, 65),
+ (27, 46, 45), (15, 26, 27), (5, 10, 5), (5, 10, 5),
+ (4, 9, 4), (6, 5, 4), (4, 4, 3), (1, 2, 1),
+ (1, 4, 1), (3, 7, 2), (5, 10, 5), (18, 32, 32),
+ (16, 48, 112), (61, 99, 94), (82, 126, 120), (95, 89, 69)
+ ),
+
+// 181 Apophysis-040426-163StSatAngel
+((169, 159, 187), (200, 153, 237), (210, 169, 240), (220, 186, 244),
+ (228, 185, 237), (237, 184, 231), (244, 184, 216), (252, 184, 201),
+ (238, 136, 182), (231, 130, 188), (225, 124, 195), (223, 124, 198),
+ (222, 125, 201), (221, 122, 200), (220, 119, 199), (221, 118, 196),
+ (223, 118, 194), (241, 126, 165), (242, 128, 140), (243, 131, 116),
+ (239, 138, 115), (236, 145, 115), (233, 144, 110), (231, 144, 105),
+ (204, 182, 87), (202, 205, 106), (200, 228, 125), (200, 241, 139),
+ (200, 255, 153), (200, 252, 157), (201, 249, 161), (207, 241, 152),
+ (179, 233, 132), (155, 197, 121), (162, 186, 146), (169, 176, 171),
+ (182, 168, 196), (196, 161, 221), (199, 163, 224), (202, 165, 228),
+ (219, 170, 253), (230, 183, 245), (241, 197, 237), (242, 192, 229),
+ (244, 188, 221), (245, 190, 220), (247, 192, 219), (251, 207, 225),
+ (254, 215, 221), (254, 211, 224), (253, 205, 213), (253, 199, 203),
+ (253, 182, 192), (253, 166, 181), (253, 161, 175), (254, 157, 170),
+ (218, 188, 121), (181, 186, 116), (144, 185, 111), (137, 184, 98),
+ (131, 184, 85), (135, 191, 86), (139, 198, 88), (156, 242, 78),
+ (160, 254, 74), (167, 225, 56), (171, 218, 57), (175, 211, 59),
+ (176, 210, 59), (177, 209, 60), (182, 196, 56), (184, 202, 68),
+ (230, 147, 104), (234, 137, 104), (239, 128, 105), (245, 136, 125),
+ (251, 145, 145), (250, 157, 157), (250, 170, 169), (255, 190, 198),
+ (246, 188, 216), (229, 198, 250), (237, 209, 250), (246, 220, 250),
+ (244, 227, 250), (243, 235, 251), (250, 245, 247), (255, 254, 243),
+ (224, 217, 239), (221, 208, 233), (218, 199, 227), (223, 209, 228),
+ (229, 219, 229), (205, 212, 207), (209, 231, 195), (211, 242, 188),
+ (194, 254, 142), (145, 194, 103), (172, 214, 117), (200, 235, 132),
+ (206, 234, 143), (212, 233, 155), (212, 255, 176), (230, 246, 222),
+ (245, 245, 233), (236, 233, 237), (227, 221, 242), (236, 227, 233),
+ (246, 234, 224), (246, 217, 208), (234, 201, 167), (219, 203, 138),
+ (214, 205, 130), (202, 238, 140), (194, 229, 150), (187, 220, 161),
+ (194, 209, 187), (186, 170, 211), (199, 159, 229), (203, 156, 240),
+ (203, 151, 244), (198, 134, 248), (194, 118, 252), (199, 119, 243),
+ (204, 121, 234), (210, 119, 221), (222, 121, 198), (246, 134, 164),
+ (244, 149, 136), (211, 187, 107), (200, 193, 91), (190, 200, 76),
+ (186, 200, 69), (190, 191, 68), (206, 158, 67), (217, 140, 72),
+ (231, 137, 97), (231, 145, 106), (232, 153, 115), (231, 155, 116),
+ (231, 158, 117), (230, 161, 118), (230, 164, 121), (222, 180, 122),
+ (218, 193, 126), (218, 202, 136), (202, 205, 155), (187, 208, 174),
+ (206, 205, 215), (210, 182, 227), (210, 170, 239), (203, 154, 241),
+ (165, 156, 182), (157, 155, 167), (150, 155, 153), (147, 172, 130),
+ (126, 159, 100), (120, 170, 77), (121, 175, 74), (128, 169, 93),
+ (121, 168, 80), (120, 201, 45), (138, 219, 46), (156, 238, 47),
+ (155, 243, 50), (159, 232, 46), (168, 219, 51), (177, 214, 65),
+ (201, 203, 103), (198, 212, 107), (196, 221, 111), (201, 215, 115),
+ (207, 210, 121), (214, 198, 123), (215, 194, 121), (223, 184, 128),
+ (239, 164, 141), (233, 136, 190), (223, 147, 221), (199, 150, 237),
+ (191, 147, 225), (189, 145, 223), (205, 120, 231), (211, 118, 217),
+ (237, 128, 175), (236, 128, 178), (235, 129, 181), (157, 157, 165),
+ (163, 155, 179), (227, 120, 186), (240, 123, 163), (253, 131, 146),
+ (253, 138, 143), (252, 144, 146), (245, 126, 158), (235, 123, 175),
+ (230, 120, 181), (218, 119, 203), (208, 119, 225), (204, 121, 235),
+ (204, 121, 234), (208, 118, 223), (215, 118, 209), (225, 119, 190),
+ (242, 125, 162), (248, 133, 128), (236, 145, 116), (230, 153, 111),
+ (228, 161, 115), (227, 173, 124), (235, 181, 149), (245, 164, 195),
+ (219, 139, 223), (215, 146, 237), (215, 141, 231), (214, 125, 219),
+ (212, 119, 217), (215, 118, 210), (221, 118, 196), (225, 119, 191),
+ (231, 120, 179), (255, 151, 159), (251, 155, 174), (249, 182, 178),
+ (237, 200, 173), (233, 226, 190), (227, 230, 181), (219, 254, 193),
+ (233, 235, 200), (237, 236, 227), (211, 230, 201), (201, 204, 206),
+ (168, 189, 155), (146, 184, 115), (136, 196, 84), (131, 220, 49),
+ (151, 241, 68), (156, 243, 76), (160, 230, 97), (178, 251, 105),
+ (188, 245, 117), (191, 235, 114), (178, 245, 119), (183, 245, 128),
+ (169, 205, 141), (171, 184, 166), (242, 142, 179), (248, 135, 160),
+ (253, 137, 152), (255, 135, 145), (255, 133, 144), (254, 135, 142),
+ (250, 135, 134), (247, 143, 135), (243, 147, 131), (240, 158, 136)
+ ),
+
+// 182 Apophysis-040427-1knotted
+((146, 120, 27), (146, 97, 30), (147, 80, 45), (148, 63, 60),
+ (139, 56, 56), (130, 50, 53), (119, 46, 39), (109, 42, 25),
+ (95, 56, 17), (80, 53, 28), (65, 51, 40), (91, 74, 47),
+ (117, 98, 55), (136, 113, 41), (156, 128, 28), (152, 139, 26),
+ (149, 151, 24), (146, 120, 27), (162, 98, 50), (178, 76, 74),
+ (190, 45, 111), (202, 15, 148), (219, 12, 179), (237, 9, 210),
+ (255, 0, 221), (255, 0, 224), (255, 0, 228), (255, 0, 231),
+ (255, 0, 234), (247, 0, 244), (239, 0, 254), (251, 12, 227),
+ (246, 3, 219), (219, 15, 172), (187, 19, 154), (156, 24, 136),
+ (160, 24, 133), (164, 24, 131), (164, 24, 131), (164, 24, 131),
+ (163, 25, 111), (149, 27, 80), (135, 29, 49), (137, 31, 47),
+ (139, 33, 45), (134, 33, 42), (129, 34, 40), (127, 37, 37),
+ (111, 46, 40), (71, 60, 77), (48, 76, 115), (25, 93, 154),
+ (25, 93, 154), (25, 93, 154), (27, 119, 125), (29, 145, 96),
+ (44, 125, 84), (65, 85, 76), (87, 45, 69), (107, 37, 59),
+ (127, 30, 50), (131, 29, 48), (136, 29, 47), (138, 30, 46),
+ (150, 40, 69), (155, 24, 138), (149, 24, 150), (143, 25, 163),
+ (145, 26, 159), (148, 27, 156), (148, 28, 136), (163, 26, 132),
+ (162, 25, 129), (154, 43, 95), (147, 61, 62), (149, 56, 61),
+ (151, 51, 61), (137, 50, 65), (124, 49, 70), (109, 54, 83),
+ (106, 55, 74), (64, 154, 102), (92, 157, 65), (121, 161, 28),
+ (127, 158, 27), (134, 155, 26), (134, 155, 26), (129, 149, 78),
+ (124, 114, 63), (107, 130, 45), (91, 146, 27), (91, 146, 27),
+ (91, 146, 27), (96, 111, 42), (75, 88, 60), (78, 46, 85),
+ (83, 28, 112), (109, 24, 143), (114, 31, 133), (119, 39, 124),
+ (121, 41, 93), (123, 44, 63), (115, 18, 29), (78, 9, 37),
+ (59, 9, 12), (42, 48, 31), (26, 88, 51), (28, 115, 64),
+ (30, 143, 77), (28, 155, 78), (28, 156, 81), (28, 156, 81),
+ (58, 114, 89), (164, 24, 131), (186, 18, 144), (208, 12, 158),
+ (223, 16, 192), (238, 8, 202), (214, 9, 176), (175, 20, 148),
+ (150, 26, 156), (87, 59, 155), (25, 93, 154), (25, 93, 154),
+ (25, 93, 154), (28, 94, 155), (102, 100, 139), (144, 87, 128),
+ (152, 53, 120), (185, 22, 69), (169, 43, 61), (154, 64, 53),
+ (146, 97, 30), (91, 146, 27), (27, 156, 76), (29, 158, 75),
+ (140, 96, 21), (101, 69, 32), (62, 42, 44), (59, 33, 40),
+ (57, 25, 36), (59, 63, 74), (66, 73, 79), (74, 87, 96),
+ (120, 53, 124), (118, 25, 155), (131, 26, 157), (145, 28, 160),
+ (144, 58, 131), (141, 71, 69), (159, 74, 33), (255, 60, 51),
+ (190, 24, 74), (183, 19, 84), (176, 15, 95), (147, 56, 63),
+ (137, 61, 61), (134, 93, 61), (125, 103, 56), (133, 117, 65),
+ (144, 102, 62), (182, 24, 57), (192, 25, 76), (203, 26, 96),
+ (216, 68, 152), (249, 199, 211), (202, 147, 168), (128, 126, 137),
+ (28, 156, 81), (28, 155, 79), (28, 155, 78), (43, 91, 77),
+ (78, 73, 54), (92, 52, 40), (113, 42, 38), (140, 42, 31),
+ (155, 53, 30), (155, 73, 33), (159, 88, 46), (160, 86, 49),
+ (154, 65, 51), (149, 47, 61), (168, 18, 108), (161, 20, 114),
+ (126, 30, 57), (105, 25, 52), (85, 21, 47), (72, 10, 47),
+ (38, 21, 27), (31, 15, 0), (1, 10, 27), (39, 26, 35),
+ (74, 27, 61), (104, 7, 110), (124, 8, 105), (184, 20, 71),
+ (188, 17, 59), (175, 18, 47), (157, 35, 34), (138, 33, 27),
+ (130, 11, 5), (117, 1, 22), (119, 10, 3), (109, 41, 4),
+ (125, 36, 20), (129, 35, 35), (128, 36, 37), (127, 35, 38),
+ (129, 34, 38), (138, 31, 39), (139, 35, 34), (139, 43, 31),
+ (159, 54, 22), (156, 71, 30), (157, 100, 31), (188, 117, 29),
+ (156, 116, 64), (157, 104, 86), (161, 76, 107), (222, 39, 157),
+ (255, 4, 193), (244, 8, 215), (236, 6, 219), (202, 16, 201),
+ (150, 31, 159), (153, 29, 141), (150, 46, 123), (131, 53, 75),
+ (124, 51, 70), (130, 59, 41), (146, 62, 28), (140, 60, 23),
+ (139, 43, 31), (143, 39, 30), (151, 31, 32), (138, 31, 41),
+ (140, 32, 45), (138, 31, 41), (138, 31, 41), (138, 31, 41),
+ (132, 36, 37), (128, 38, 38), (128, 40, 38), (139, 50, 32),
+ (146, 62, 28), (146, 89, 20), (146, 97, 30), (146, 97, 30),
+ (157, 100, 31), (146, 120, 27), (146, 120, 27), (146, 120, 27),
+ (146, 120, 27), (146, 120, 27), (146, 97, 30), (146, 97, 30)
+ ),
+
+// 183 Apophysis-040427-4AlngSpder
+((88, 35, 3), (69, 26, 7), (67, 25, 6), (65, 24, 6),
+ (71, 27, 6), (77, 31, 7), (79, 31, 5), (81, 31, 4),
+ (82, 33, 3), (77, 30, 3), (72, 27, 4), (67, 24, 4),
+ (63, 22, 4), (62, 22, 6), (62, 23, 8), (67, 24, 6),
+ (72, 25, 5), (100, 33, 4), (107, 39, 4), (115, 46, 5),
+ (120, 47, 8), (126, 48, 12), (122, 45, 12), (118, 43, 12),
+ (100, 40, 16), (92, 38, 11), (85, 36, 6), (86, 35, 3),
+ (88, 34, 0), (87, 32, 0), (87, 31, 0), (83, 32, 1),
+ (83, 34, 4), (77, 33, 8), (77, 30, 7), (78, 27, 6),
+ (80, 28, 7), (82, 30, 8), (82, 31, 8), (83, 33, 8),
+ (102, 48, 10), (115, 54, 18), (129, 60, 27), (131, 62, 22),
+ (133, 65, 18), (134, 63, 17), (136, 62, 17), (131, 61, 12),
+ (121, 57, 11), (113, 46, 0), (116, 44, 0), (119, 43, 0),
+ (123, 47, 0), (127, 52, 0), (133, 55, 0), (140, 58, 0),
+ (127, 49, 13), (116, 47, 12), (105, 45, 11), (101, 45, 11),
+ (98, 45, 11), (96, 41, 7), (94, 38, 3), (102, 36, 0),
+ (109, 36, 0), (109, 41, 6), (102, 41, 8), (95, 42, 10),
+ (91, 41, 8), (87, 41, 7), (81, 36, 3), (73, 29, 2),
+ (60, 23, 5), (59, 21, 3), (58, 19, 2), (61, 20, 3),
+ (64, 21, 4), (64, 21, 4), (64, 21, 5), (58, 20, 7),
+ (57, 21, 5), (40, 27, 0), (42, 21, 2), (45, 15, 5),
+ (47, 14, 2), (49, 13, 0), (56, 17, 2), (61, 21, 11),
+ (82, 34, 11), (99, 47, 19), (117, 61, 28), (127, 65, 27),
+ (137, 70, 27), (129, 88, 32), (133, 74, 16), (132, 70, 13),
+ (133, 60, 7), (124, 57, 4), (124, 57, 7), (125, 57, 10),
+ (131, 59, 10), (138, 62, 10), (146, 75, 13), (161, 89, 17),
+ (251, 49, 39), (215, 90, 51), (179, 132, 64), (174, 112, 41),
+ (170, 92, 18), (145, 91, 17), (147, 76, 14), (154, 68, 7),
+ (155, 59, 19), (128, 60, 13), (125, 58, 13), (123, 56, 14),
+ (116, 52, 8), (105, 45, 8), (102, 39, 6), (100, 36, 0),
+ (87, 27, 0), (79, 27, 3), (72, 27, 6), (71, 27, 6),
+ (70, 28, 6), (73, 31, 9), (78, 37, 5), (82, 44, 8),
+ (97, 43, 15), (110, 50, 16), (112, 51, 12), (115, 52, 9),
+ (115, 47, 10), (107, 48, 8), (99, 46, 2), (86, 40, 0),
+ (69, 28, 0), (66, 25, 2), (64, 23, 5), (63, 23, 5),
+ (62, 24, 5), (59, 24, 5), (61, 24, 5), (64, 23, 5),
+ (70, 21, 4), (72, 15, 4), (71, 19, 6), (71, 23, 9),
+ (75, 28, 10), (72, 34, 11), (74, 39, 7), (86, 41, 12),
+ (105, 53, 16), (111, 57, 10), (117, 62, 5), (117, 58, 2),
+ (122, 53, 11), (124, 50, 11), (116, 46, 10), (103, 44, 10),
+ (86, 37, 7), (74, 32, 7), (74, 31, 7), (75, 30, 7),
+ (77, 31, 5), (82, 37, 6), (86, 40, 4), (93, 41, 4),
+ (97, 35, 0), (93, 34, 0), (89, 33, 0), (74, 28, 5),
+ (68, 27, 5), (61, 26, 6), (56, 24, 1), (50, 18, 5),
+ (45, 18, 23), (44, 16, 15), (54, 11, 0), (66, 17, 0),
+ (75, 29, 3), (93, 41, 4), (110, 51, 9), (126, 50, 14),
+ (135, 72, 19), (147, 73, 15), (159, 75, 11), (163, 83, 0),
+ (180, 75, 10), (157, 46, 0), (137, 42, 10), (131, 40, 9),
+ (124, 50, 11), (120, 54, 2), (117, 54, 0), (117, 50, 7),
+ (112, 48, 10), (106, 47, 17), (103, 44, 12), (98, 38, 10),
+ (94, 37, 7), (90, 38, 1), (92, 36, 0), (89, 35, 0),
+ (82, 36, 0), (76, 32, 3), (72, 25, 0), (71, 25, 2),
+ (72, 28, 3), (80, 29, 2), (91, 31, 3), (96, 36, 2),
+ (100, 40, 3), (104, 39, 0), (105, 42, 1), (118, 47, 0),
+ (111, 46, 4), (104, 45, 5), (96, 35, 7), (89, 33, 6),
+ (82, 28, 4), (77, 23, 0), (81, 23, 0), (86, 12, 1),
+ (106, 29, 0), (108, 35, 2), (112, 43, 10), (119, 49, 15),
+ (115, 47, 28), (118, 54, 16), (126, 58, 21), (121, 53, 16),
+ (110, 44, 12), (106, 37, 6), (101, 33, 0), (102, 29, 10),
+ (96, 29, 20), (111, 36, 13), (129, 49, 16), (142, 63, 20),
+ (150, 65, 26), (159, 82, 36), (158, 79, 20), (158, 85, 16),
+ (158, 78, 15), (153, 72, 19), (148, 71, 15), (145, 68, 14),
+ (137, 62, 4), (128, 67, 0), (134, 60, 0), (133, 55, 6),
+ (127, 52, 12), (131, 47, 13), (165, 48, 30), (172, 68, 13)
+ ),
+
+// 184 Apophysis-040427-4AlienFlwerBwl
+((155, 136, 68), (138, 97, 53), (135, 105, 52), (133, 113, 52),
+ (130, 103, 51), (127, 94, 51), (120, 79, 51), (113, 65, 51),
+ (0, 0, 0), (24, 19, 18), (49, 38, 36), (83, 72, 57),
+ (118, 107, 79), (120, 103, 75), (123, 99, 71), (127, 95, 77),
+ (131, 91, 83), (151, 102, 61), (144, 107, 58), (138, 113, 56),
+ (148, 119, 60), (158, 126, 65), (156, 131, 66), (155, 136, 68),
+ (144, 137, 85), (150, 134, 91), (157, 131, 98), (163, 129, 95),
+ (170, 127, 92), (167, 130, 92), (165, 133, 92), (168, 135, 84),
+ (171, 133, 86), (166, 142, 94), (155, 140, 80), (145, 138, 66),
+ (137, 125, 72), (129, 113, 79), (135, 111, 75), (141, 109, 71),
+ (160, 130, 80), (167, 141, 89), (174, 153, 98), (179, 145, 98),
+ (185, 137, 99), (182, 133, 104), (180, 129, 110), (186, 136, 113),
+ (175, 144, 113), (173, 147, 112), (172, 139, 106), (172, 131, 101),
+ (161, 129, 107), (150, 128, 114), (147, 129, 111), (145, 130, 109),
+ (125, 132, 90), (119, 122, 86), (114, 113, 83), (118, 117, 88),
+ (123, 122, 94), (129, 123, 103), (136, 124, 112), (156, 139, 113),
+ (182, 163, 131), (212, 197, 158), (219, 207, 176), (226, 218, 195),
+ (226, 216, 197), (226, 214, 200), (228, 216, 200), (230, 219, 197),
+ (227, 219, 196), (226, 217, 191), (226, 215, 187), (221, 205, 176),
+ (217, 196, 165), (212, 197, 161), (208, 199, 158), (214, 201, 159),
+ (217, 206, 174), (224, 213, 185), (215, 203, 172), (207, 194, 160),
+ (207, 191, 153), (208, 189, 147), (193, 179, 134), (191, 162, 118),
+ (185, 161, 113), (182, 161, 114), (179, 162, 116), (180, 164, 117),
+ (181, 167, 118), (187, 181, 123), (193, 182, 136), (201, 188, 146),
+ (210, 184, 151), (207, 188, 156), (208, 191, 155), (209, 194, 155),
+ (207, 193, 154), (206, 192, 153), (205, 182, 164), (186, 180, 164),
+ (175, 162, 154), (168, 148, 136), (162, 135, 118), (166, 134, 113),
+ (170, 134, 108), (171, 135, 109), (189, 145, 108), (188, 149, 116),
+ (196, 160, 128), (212, 191, 160), (213, 191, 166), (214, 191, 173),
+ (214, 200, 174), (208, 196, 174), (212, 191, 160), (211, 182, 148),
+ (207, 177, 143), (201, 170, 139), (195, 164, 135), (189, 164, 134),
+ (183, 164, 134), (174, 154, 127), (161, 163, 116), (160, 150, 101),
+ (141, 137, 92), (129, 132, 89), (132, 133, 92), (136, 134, 95),
+ (143, 135, 96), (152, 133, 103), (165, 152, 117), (175, 156, 114),
+ (174, 149, 108), (162, 133, 96), (150, 117, 84), (146, 111, 79),
+ (142, 106, 74), (149, 95, 69), (143, 94, 53), (143, 99, 52),
+ (141, 97, 50), (142, 86, 63), (135, 82, 59), (129, 79, 56),
+ (134, 97, 52), (131, 98, 53), (119, 98, 53), (122, 90, 51),
+ (0, 2, 0), (0, 1, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 2, 1), (113, 64, 32), (132, 75, 46),
+ (124, 69, 48), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (46, 36, 27), (107, 80, 50), (126, 97, 65),
+ (136, 106, 70), (140, 110, 64), (144, 115, 59), (147, 122, 68),
+ (164, 142, 85), (183, 157, 108), (195, 168, 121), (201, 184, 141),
+ (205, 188, 145), (207, 187, 154), (183, 171, 147), (164, 128, 128),
+ (150, 128, 114), (130, 110, 111), (133, 119, 93), (148, 121, 78),
+ (160, 125, 83), (160, 126, 84), (161, 128, 85), (168, 136, 77),
+ (169, 130, 75), (171, 111, 85), (172, 112, 88), (164, 126, 90),
+ (157, 130, 83), (146, 126, 89), (140, 142, 105), (149, 153, 120),
+ (162, 157, 117), (170, 142, 105), (165, 131, 93), (156, 118, 82),
+ (149, 118, 74), (143, 108, 68), (153, 101, 77), (161, 101, 77),
+ (175, 114, 93), (179, 130, 100), (188, 150, 114), (195, 172, 128),
+ (201, 188, 144), (210, 195, 156), (217, 202, 169), (222, 208, 181),
+ (214, 200, 174), (206, 193, 174), (200, 180, 147), (194, 173, 142),
+ (192, 173, 130), (192, 164, 125), (195, 158, 129), (190, 161, 129),
+ (180, 151, 119), (168, 127, 107), (151, 115, 99), (131, 107, 83),
+ (140, 114, 79), (157, 131, 98), (181, 152, 118), (189, 165, 139),
+ (207, 195, 157), (216, 211, 181), (228, 218, 191), (220, 212, 191),
+ (206, 202, 190), (209, 208, 178), (199, 196, 155), (201, 190, 145),
+ (195, 187, 151), (184, 169, 128), (176, 162, 113), (168, 157, 101),
+ (157, 130, 77), (140, 104, 54), (114, 79, 41), (27, 22, 18),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 1, 0), (66, 52, 41),
+ (111, 104, 76), (144, 120, 86), (178, 148, 120), (157, 152, 86)
+ ),
+
+// 185 Apophysis-040427-4AlienFlwrBwl_inv
+((54, 67, 109), (44, 66, 103), (45, 66, 99), (46, 67, 96),
+ (47, 65, 99), (49, 63, 102), (49, 68, 96), (50, 73, 91),
+ (67, 84, 91), (78, 89, 104), (89, 95, 117), (87, 108, 132),
+ (85, 121, 147), (75, 115, 147), (66, 110, 147), (66, 108, 143),
+ (67, 106, 139), (50, 90, 116), (45, 77, 99), (41, 64, 82),
+ (44, 61, 81), (47, 59, 81), (45, 61, 88), (43, 64, 95),
+ (40, 69, 113), (49, 78, 114), (58, 88, 116), (65, 89, 118),
+ (72, 91, 121), (76, 96, 124), (81, 101, 128), (94, 92, 139),
+ (95, 105, 154), (122, 119, 162), (120, 120, 161), (119, 121, 160),
+ (111, 121, 156), (103, 122, 152), (96, 112, 145), (90, 103, 138),
+ (80, 103, 145), (87, 113, 150), (94, 123, 155), (103, 136, 168),
+ (113, 149, 181), (109, 154, 183), (106, 160, 186), (112, 161, 202),
+ (112, 156, 203), (120, 162, 200), (123, 169, 199), (126, 176, 199),
+ (125, 166, 200), (124, 157, 202), (130, 157, 202), (136, 157, 202),
+ (153, 177, 221), (204, 216, 238), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 254, 254), (255, 253, 254), (142, 191, 223),
+ (123, 180, 209), (174, 211, 238), (214, 233, 246), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (209, 219, 228), (148, 175, 205),
+ (132, 148, 181), (121, 144, 188), (111, 140, 196), (101, 126, 183),
+ (91, 113, 170), (81, 105, 158), (72, 98, 147), (60, 87, 134),
+ (54, 71, 114), (48, 68, 101), (69, 97, 114), (91, 127, 127),
+ (98, 127, 134), (105, 127, 141), (125, 145, 144), (122, 136, 162),
+ (101, 135, 172), (97, 131, 171), (94, 127, 170), (90, 123, 174),
+ (87, 119, 178), (86, 125, 180), (84, 144, 170), (83, 143, 167),
+ (91, 129, 165), (109, 129, 166), (107, 115, 150), (106, 102, 135),
+ (99, 100, 136), (93, 98, 138), (85, 113, 150), (90, 124, 162),
+ (106, 137, 181), (104, 145, 179), (102, 154, 178), (98, 154, 178),
+ (94, 154, 178), (80, 141, 162), (76, 125, 155), (67, 105, 141),
+ (60, 83, 127), (45, 60, 99), (41, 56, 92), (38, 53, 86),
+ (33, 47, 74), (41, 55, 81), (49, 62, 81), (55, 75, 108),
+ (63, 82, 125), (61, 89, 125), (60, 97, 126), (62, 95, 126),
+ (65, 94, 126), (75, 104, 136), (87, 128, 148), (104, 140, 156),
+ (124, 148, 172), (98, 124, 157), (86, 113, 147), (74, 103, 137),
+ (66, 90, 116), (48, 60, 98), (39, 44, 74), (27, 37, 64),
+ (49, 53, 65), (52, 56, 82), (56, 59, 100), (55, 62, 105),
+ (54, 65, 110), (60, 68, 104), (71, 86, 127), (79, 93, 142),
+ (87, 98, 154), (115, 151, 201), (128, 163, 207), (141, 176, 214),
+ (228, 233, 237), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 254, 255),
+ (189, 203, 214), (144, 151, 179), (111, 135, 169), (77, 107, 135),
+ (98, 103, 169), (115, 151, 201), (116, 154, 201), (117, 158, 202),
+ (126, 154, 202), (122, 142, 203), (124, 150, 187), (128, 161, 204),
+ (254, 254, 252), (254, 254, 253), (255, 255, 255), (255, 255, 255),
+ (206, 217, 219), (148, 176, 179), (137, 148, 176), (127, 148, 175),
+ (132, 156, 184), (124, 164, 172), (111, 152, 184), (104, 153, 194),
+ (113, 150, 194), (117, 142, 199), (105, 137, 196), (97, 129, 190),
+ (105, 108, 179), (108, 113, 174), (111, 118, 170), (99, 122, 172),
+ (98, 124, 157), (94, 128, 163), (85, 128, 163), (90, 122, 163),
+ (87, 120, 171), (84, 122, 169), (82, 118, 166), (89, 113, 161),
+ (97, 114, 168), (110, 117, 189), (123, 136, 189), (126, 142, 176),
+ (114, 146, 184), (99, 136, 181), (95, 125, 175), (96, 104, 169),
+ (81, 102, 157), (80, 103, 147), (70, 118, 156), (75, 126, 145),
+ (69, 119, 142), (80, 111, 142), (82, 102, 139), (82, 108, 143),
+ (76, 117, 149), (83, 124, 154), (86, 145, 153), (105, 127, 141),
+ (110, 125, 146), (117, 120, 155), (130, 123, 165), (129, 137, 176),
+ (141, 142, 172), (134, 144, 171), (132, 133, 161), (119, 131, 143),
+ (99, 116, 142), (73, 92, 124), (56, 74, 110), (43, 58, 97),
+ (34, 43, 74), (29, 37, 60), (29, 41, 55), (27, 39, 55),
+ (25, 36, 58), (25, 36, 58), (28, 36, 59), (26, 36, 61),
+ (29, 40, 68), (34, 49, 80), (38, 59, 90), (47, 56, 97),
+ (41, 54, 96), (38, 49, 81), (32, 43, 71), (31, 42, 70),
+ (34, 45, 75), (48, 61, 95), (47, 66, 108), (62, 76, 121),
+ (64, 93, 137), (66, 93, 140), (70, 94, 142), (73, 96, 138),
+ (76, 93, 139), (74, 88, 137), (68, 74, 132), (62, 73, 119)
+ ),
+
+// 186 Apophysis-040427-4AmusePrk
+((129, 14, 91), (27, 0, 69), (68, 0, 77), (109, 0, 85),
+ (153, 44, 52), (197, 88, 19), (211, 108, 16), (225, 128, 13),
+ (243, 189, 41), (248, 211, 45), (254, 234, 49), (254, 234, 48),
+ (255, 234, 47), (240, 193, 36), (226, 153, 25), (211, 149, 36),
+ (196, 146, 47), (249, 178, 116), (243, 192, 127), (237, 206, 139),
+ (239, 207, 109), (242, 209, 80), (243, 227, 86), (244, 245, 92),
+ (248, 246, 50), (250, 231, 46), (253, 217, 43), (224, 210, 65),
+ (195, 204, 87), (179, 198, 96), (164, 192, 105), (196, 112, 102),
+ (252, 67, 46), (162, 40, 1), (130, 20, 13), (99, 0, 25),
+ (85, 9, 35), (72, 19, 45), (77, 41, 58), (83, 63, 72),
+ (178, 131, 149), (183, 70, 117), (188, 10, 86), (220, 6, 65),
+ (252, 3, 45), (251, 1, 36), (250, 0, 27), (238, 0, 0),
+ (224, 0, 18), (129, 1, 14), (80, 6, 45), (31, 12, 76),
+ (15, 9, 41), (0, 7, 6), (0, 28, 3), (0, 49, 0),
+ (117, 167, 6), (170, 160, 13), (223, 153, 21), (230, 132, 38),
+ (238, 111, 56), (217, 110, 70), (196, 110, 85), (163, 65, 40),
+ (162, 65, 0), (26, 59, 40), (13, 74, 21), (0, 90, 2),
+ (0, 89, 2), (1, 89, 2), (2, 49, 31), (0, 13, 44),
+ (0, 0, 36), (0, 0, 33), (0, 0, 31), (0, 1, 28),
+ (0, 2, 25), (0, 3, 28), (0, 4, 31), (0, 0, 34),
+ (1, 0, 36), (0, 9, 44), (0, 20, 47), (0, 31, 51),
+ (0, 44, 55), (0, 58, 59), (0, 72, 61), (1, 86, 67),
+ (2, 54, 52), (3, 44, 26), (5, 35, 1), (2, 30, 10),
+ (0, 25, 19), (0, 34, 36), (2, 42, 54), (0, 54, 56),
+ (0, 86, 67), (17, 101, 103), (86, 132, 138), (155, 164, 173),
+ (194, 152, 179), (233, 140, 185), (192, 150, 138), (171, 163, 140),
+ (138, 184, 138), (119, 170, 96), (100, 157, 54), (108, 162, 43),
+ (117, 167, 32), (139, 180, 14), (164, 190, 28), (148, 189, 9),
+ (146, 181, 3), (123, 135, 1), (121, 97, 15), (119, 60, 30),
+ (99, 42, 31), (45, 39, 17), (27, 17, 51), (1, 10, 43),
+ (1, 0, 34), (0, 4, 36), (0, 9, 39), (0, 24, 37),
+ (0, 40, 36), (28, 100, 16), (67, 110, 3), (144, 119, 52),
+ (218, 148, 96), (218, 195, 128), (213, 193, 129), (208, 192, 130),
+ (156, 178, 95), (155, 151, 106), (149, 169, 134), (212, 126, 151),
+ (255, 5, 92), (255, 5, 124), (255, 5, 157), (237, 52, 163),
+ (220, 99, 170), (236, 119, 146), (243, 164, 157), (244, 165, 158),
+ (253, 155, 130), (253, 5, 89), (253, 5, 89), (254, 5, 89),
+ (243, 0, 64), (232, 0, 40), (223, 4, 0), (197, 15, 2),
+ (69, 0, 35), (49, 27, 26), (30, 54, 18), (2, 92, 2),
+ (0, 116, 2), (1, 118, 4), (0, 100, 20), (1, 102, 34),
+ (0, 101, 69), (2, 67, 37), (1, 84, 33), (1, 101, 29),
+ (42, 131, 3), (74, 136, 3), (47, 130, 0), (0, 117, 2),
+ (0, 86, 5), (0, 63, 18), (0, 40, 32), (0, 10, 42),
+ (0, 11, 43), (0, 33, 49), (41, 71, 47), (121, 148, 41),
+ (146, 182, 32), (197, 189, 29), (254, 235, 45), (253, 251, 55),
+ (250, 244, 68), (244, 244, 94), (248, 250, 149), (188, 211, 157),
+ (109, 170, 155), (106, 166, 146), (104, 162, 137), (50, 126, 114),
+ (3, 96, 86), (2, 85, 69), (2, 53, 56), (45, 27, 49),
+ (109, 0, 86), (184, 0, 88), (215, 1, 61), (240, 0, 61),
+ (238, 14, 25), (238, 14, 12), (232, 80, 4), (197, 111, 0),
+ (158, 170, 12), (177, 182, 66), (196, 164, 51), (252, 116, 64),
+ (240, 103, 69), (250, 67, 49), (251, 41, 26), (250, 63, 20),
+ (250, 63, 22), (237, 87, 36), (199, 134, 30), (139, 136, 65),
+ (137, 144, 92), (137, 103, 78), (88, 49, 54), (64, 68, 7),
+ (65, 68, 1), (100, 130, 0), (136, 167, 12), (162, 191, 47),
+ (214, 230, 33), (242, 243, 51), (250, 241, 112), (243, 248, 154),
+ (219, 223, 190), (209, 220, 180), (176, 205, 175), (183, 194, 188),
+ (242, 203, 224), (245, 234, 232), (250, 246, 209), (229, 239, 231),
+ (236, 225, 231), (219, 230, 214), (191, 211, 184), (164, 196, 149),
+ (130, 158, 136), (110, 163, 153), (110, 167, 158), (106, 151, 144),
+ (52, 125, 106), (41, 69, 70), (0, 69, 61), (0, 56, 57),
+ (1, 50, 54), (1, 30, 46), (0, 36, 50), (1, 52, 55),
+ (15, 62, 44), (1, 84, 16), (43, 72, 14), (64, 53, 8),
+ (43, 43, 15), (53, 13, 1), (66, 1, 35), (236, 0, 137)
+ ),
+
+// 187 Apophysis-040427-4AmusePrkInv
+((19, 255, 118), (202, 242, 254), (196, 222, 250), (191, 202, 247),
+ (222, 186, 243), (254, 171, 239), (247, 182, 225), (240, 193, 211),
+ (255, 219, 205), (254, 212, 203), (254, 205, 201), (254, 195, 197),
+ (255, 186, 194), (229, 158, 171), (203, 130, 149), (176, 117, 130),
+ (149, 104, 111), (145, 92, 102), (118, 75, 104), (91, 59, 106),
+ (63, 42, 73), (36, 25, 41), (27, 27, 32), (19, 30, 24),
+ (5, 9, 46), (9, 30, 38), (13, 52, 31), (46, 51, 55),
+ (79, 50, 80), (62, 42, 77), (46, 35, 75), (36, 32, 65),
+ (12, 7, 101), (13, 12, 204), (53, 38, 206), (93, 64, 208),
+ (124, 94, 231), (155, 125, 255), (172, 156, 254), (190, 187, 254),
+ (167, 206, 201), (142, 158, 182), (118, 111, 163), (87, 116, 194),
+ (56, 121, 225), (37, 144, 222), (18, 168, 219), (5, 192, 233),
+ (5, 192, 235), (5, 188, 206), (4, 163, 198), (3, 139, 191),
+ (40, 106, 190), (78, 73, 189), (87, 79, 216), (97, 85, 243),
+ (23, 175, 251), (20, 208, 240), (17, 241, 230), (28, 247, 212),
+ (40, 254, 194), (55, 254, 180), (71, 255, 167), (146, 255, 169),
+ (210, 228, 206), (253, 170, 186), (229, 149, 163), (205, 129, 141),
+ (178, 111, 129), (151, 93, 118), (146, 85, 100), (108, 71, 88),
+ (7, 5, 106), (6, 8, 146), (5, 11, 187), (3, 15, 198),
+ (1, 20, 210), (29, 43, 218), (58, 66, 226), (109, 73, 223),
+ (134, 107, 214), (255, 222, 206), (255, 233, 209), (255, 245, 213),
+ (255, 230, 218), (255, 215, 223), (255, 169, 250), (252, 154, 255),
+ (208, 125, 255), (210, 124, 253), (213, 124, 252), (233, 139, 239),
+ (254, 154, 226), (253, 188, 218), (254, 169, 192), (255, 154, 186),
+ (254, 153, 221), (254, 137, 251), (253, 150, 252), (253, 163, 253),
+ (239, 182, 245), (225, 201, 237), (186, 255, 220), (113, 248, 254),
+ (32, 251, 255), (22, 253, 223), (12, 255, 191), (6, 252, 178),
+ (1, 250, 166), (2, 250, 166), (37, 153, 142), (2, 100, 125),
+ (11, 90, 97), (19, 136, 109), (27, 146, 97), (35, 156, 85),
+ (0, 250, 98), (1, 255, 129), (0, 250, 163), (19, 219, 110),
+ (106, 86, 121), (102, 81, 140), (99, 77, 160), (73, 70, 142),
+ (47, 63, 125), (37, 60, 127), (20, 42, 151), (37, 107, 159),
+ (111, 136, 203), (227, 155, 239), (241, 185, 229), (255, 215, 219),
+ (255, 246, 216), (254, 253, 222), (254, 255, 221), (255, 250, 214),
+ (228, 238, 204), (192, 225, 214), (156, 213, 224), (146, 204, 224),
+ (136, 195, 225), (132, 120, 254), (120, 84, 254), (109, 74, 252),
+ (107, 66, 246), (116, 75, 241), (127, 81, 232), (138, 88, 223),
+ (155, 98, 201), (151, 88, 131), (117, 71, 117), (102, 92, 116),
+ (63, 105, 117), (42, 110, 93), (22, 115, 70), (100, 91, 82),
+ (149, 123, 110), (238, 154, 152), (255, 153, 182), (255, 169, 188),
+ (255, 201, 199), (255, 221, 219), (255, 225, 227), (255, 230, 236),
+ (250, 220, 254), (254, 223, 229), (253, 201, 203), (254, 181, 192),
+ (255, 183, 194), (255, 190, 195), (255, 197, 196), (255, 224, 204),
+ (255, 244, 212), (255, 246, 211), (255, 255, 211), (254, 255, 219),
+ (255, 255, 221), (255, 251, 224), (255, 253, 230), (255, 255, 224),
+ (255, 255, 224), (255, 255, 221), (255, 255, 219), (255, 246, 215),
+ (253, 206, 224), (253, 186, 238), (254, 166, 253), (255, 165, 253),
+ (254, 167, 235), (229, 196, 215), (130, 217, 198), (93, 190, 255),
+ (92, 190, 215), (59, 145, 170), (17, 144, 199), (32, 103, 229),
+ (32, 102, 234), (45, 92, 230), (138, 88, 249), (213, 151, 248),
+ (255, 206, 255), (255, 248, 249), (213, 255, 209), (224, 243, 179),
+ (165, 231, 204), (126, 254, 241), (90, 232, 236), (31, 255, 237),
+ (17, 255, 255), (5, 255, 228), (3, 252, 210), (36, 251, 207),
+ (67, 245, 169), (37, 155, 103), (77, 124, 106), (101, 131, 141),
+ (172, 192, 183), (183, 236, 210), (155, 255, 226), (156, 255, 230),
+ (140, 230, 254), (93, 215, 254), (30, 238, 250), (3, 188, 209),
+ (59, 143, 153), (91, 63, 150), (60, 51, 168), (46, 36, 210),
+ (2, 38, 212), (0, 32, 203), (7, 9, 205), (1, 1, 183),
+ (11, 10, 163), (13, 46, 175), (2, 35, 148), (18, 49, 116),
+ (10, 63, 95), (6, 77, 139), (30, 72, 174), (59, 109, 208),
+ (29, 102, 230), (13, 66, 204), (0, 21, 208), (1, 19, 203),
+ (1, 21, 206), (2, 38, 212), (12, 66, 214), (32, 103, 231),
+ (30, 127, 242), (58, 167, 236), (134, 212, 198), (146, 255, 170),
+ (209, 231, 167), (228, 255, 186), (199, 235, 165), (126, 241, 164)
+ ),
+
+// 188 Apophysis-040427-4AmythIceInv
+((109, 114, 50), (75, 80, 60), (85, 88, 62), (96, 97, 65),
+ (116, 116, 67), (136, 135, 70), (141, 145, 71), (147, 156, 73),
+ (177, 175, 88), (183, 180, 91), (190, 186, 95), (195, 191, 101),
+ (200, 196, 107), (201, 195, 110), (202, 195, 114), (200, 198, 113),
+ (199, 202, 113), (199, 195, 104), (194, 191, 100), (189, 188, 96),
+ (181, 180, 89), (173, 173, 83), (161, 162, 75), (149, 151, 68),
+ (64, 164, 48), (64, 164, 50), (64, 164, 52), (85, 134, 69),
+ (106, 105, 87), (107, 109, 76), (108, 114, 66), (128, 134, 62),
+ (131, 139, 62), (172, 172, 82), (179, 177, 90), (187, 182, 98),
+ (190, 187, 100), (193, 193, 103), (193, 190, 101), (194, 188, 100),
+ (187, 188, 94), (172, 172, 83), (157, 156, 73), (136, 136, 61),
+ (116, 117, 49), (96, 94, 42), (76, 72, 35), (70, 66, 37),
+ (55, 60, 38), (85, 97, 75), (123, 129, 86), (162, 162, 98),
+ (177, 176, 100), (192, 190, 103), (197, 194, 106), (202, 198, 109),
+ (218, 220, 121), (227, 222, 140), (236, 225, 159), (245, 231, 176),
+ (254, 237, 193), (247, 230, 184), (240, 224, 175), (234, 213, 170),
+ (225, 213, 131), (204, 200, 111), (210, 205, 118), (217, 211, 125),
+ (221, 213, 132), (225, 216, 139), (234, 217, 165), (255, 237, 223),
+ (255, 233, 225), (241, 224, 186), (228, 215, 147), (214, 206, 127),
+ (201, 197, 108), (193, 189, 101), (185, 181, 94), (155, 158, 77),
+ (116, 126, 66), (19, 49, 25), (18, 43, 34), (18, 37, 43),
+ (29, 45, 48), (41, 53, 53), (69, 84, 63), (91, 170, 91),
+ (148, 219, 141), (169, 204, 122), (190, 190, 104), (193, 192, 103),
+ (196, 195, 103), (196, 195, 103), (197, 196, 103), (197, 196, 103),
+ (197, 196, 103), (198, 198, 102), (199, 199, 103), (200, 200, 104),
+ (199, 200, 103), (199, 201, 102), (199, 199, 103), (199, 199, 103),
+ (196, 195, 103), (194, 192, 100), (193, 189, 98), (192, 185, 94),
+ (192, 181, 91), (182, 181, 91), (179, 178, 88), (166, 166, 78),
+ (151, 153, 69), (158, 157, 74), (166, 165, 81), (174, 174, 88),
+ (185, 186, 92), (188, 190, 93), (195, 191, 100), (196, 195, 102),
+ (193, 193, 103), (195, 193, 102), (197, 193, 102), (196, 193, 101),
+ (195, 194, 101), (196, 195, 103), (196, 195, 103), (197, 196, 103),
+ (197, 196, 103), (203, 199, 110), (204, 198, 113), (206, 198, 117),
+ (212, 198, 127), (216, 203, 135), (230, 213, 161), (248, 224, 196),
+ (242, 247, 253), (248, 251, 250), (255, 255, 247), (254, 255, 245),
+ (253, 255, 244), (253, 255, 242), (246, 242, 230), (234, 213, 170),
+ (219, 211, 136), (203, 200, 107), (204, 202, 106), (205, 205, 105),
+ (205, 207, 108), (190, 219, 109), (216, 241, 121), (222, 229, 123),
+ (213, 220, 117), (208, 214, 114), (204, 208, 111), (204, 208, 111),
+ (222, 229, 123), (233, 219, 144), (234, 219, 162), (229, 212, 158),
+ (226, 209, 139), (206, 196, 127), (206, 195, 124), (207, 195, 121),
+ (196, 189, 108), (193, 186, 105), (192, 183, 106), (160, 163, 120),
+ (139, 145, 85), (142, 151, 98), (146, 158, 112), (126, 139, 121),
+ (101, 193, 106), (92, 191, 109), (82, 179, 72), (65, 168, 51),
+ (53, 158, 39), (53, 156, 38), (63, 91, 50), (71, 79, 56),
+ (76, 79, 52), (74, 85, 51), (76, 89, 45), (46, 147, 25),
+ (57, 158, 40), (62, 162, 45), (67, 167, 51), (145, 152, 72),
+ (165, 165, 79), (180, 179, 89), (182, 187, 95), (189, 190, 97),
+ (195, 188, 107), (189, 196, 128), (144, 213, 166), (149, 219, 195),
+ (173, 230, 224), (197, 221, 171), (183, 198, 155), (203, 194, 129),
+ (205, 196, 117), (203, 199, 112), (203, 200, 105), (200, 200, 104),
+ (199, 199, 103), (198, 197, 104), (201, 197, 108), (201, 197, 108),
+ (206, 197, 118), (208, 196, 122), (216, 197, 129), (217, 206, 144),
+ (229, 208, 177), (219, 238, 219), (251, 255, 238), (239, 252, 224),
+ (221, 235, 173), (227, 235, 152), (229, 219, 132), (219, 214, 130),
+ (212, 206, 122), (204, 195, 116), (172, 168, 123), (151, 156, 124),
+ (117, 128, 98), (94, 97, 76), (75, 83, 62), (73, 78, 71),
+ (83, 84, 88), (105, 102, 97), (133, 136, 91), (151, 154, 77),
+ (163, 162, 79), (168, 173, 73), (148, 188, 89), (72, 179, 65),
+ (51, 166, 49), (43, 153, 30), (37, 151, 30), (32, 150, 30),
+ (19, 129, 14), (19, 128, 13), (29, 139, 18), (26, 133, 19),
+ (54, 77, 35), (61, 75, 40), (44, 49, 45), (31, 44, 34),
+ (28, 24, 15), (24, 33, 4), (46, 42, 4), (55, 56, 25),
+ (57, 64, 30), (87, 94, 52), (102, 100, 52), (115, 113, 54)
+ ),
+
+// 189 Apophysis-040427-4AmythIce
+((146, 141, 205), (180, 175, 195), (169, 166, 192), (159, 158, 190),
+ (139, 139, 187), (119, 120, 185), (113, 109, 183), (108, 99, 182),
+ (78, 80, 167), (71, 74, 163), (65, 69, 160), (60, 64, 154),
+ (55, 59, 148), (54, 59, 144), (53, 60, 141), (54, 56, 141),
+ (56, 53, 142), (56, 60, 151), (61, 63, 155), (66, 67, 159),
+ (74, 74, 165), (82, 82, 172), (94, 93, 179), (106, 104, 187),
+ (191, 91, 207), (191, 91, 205), (191, 91, 203), (170, 120, 185),
+ (149, 150, 168), (148, 145, 178), (147, 141, 189), (127, 121, 193),
+ (124, 116, 193), (83, 83, 173), (75, 78, 165), (68, 73, 157),
+ (65, 67, 154), (62, 62, 152), (61, 64, 153), (61, 67, 155),
+ (68, 67, 161), (83, 83, 171), (98, 99, 182), (118, 118, 194),
+ (139, 138, 206), (159, 160, 213), (179, 183, 220), (185, 189, 218),
+ (200, 195, 217), (170, 158, 180), (131, 125, 168), (93, 93, 157),
+ (78, 79, 154), (63, 65, 152), (58, 61, 149), (53, 57, 146),
+ (37, 35, 134), (28, 32, 115), (19, 30, 96), (10, 24, 79),
+ (1, 18, 62), (8, 24, 71), (15, 31, 80), (21, 42, 85),
+ (30, 42, 124), (51, 55, 144), (44, 49, 137), (38, 44, 130),
+ (34, 41, 123), (30, 39, 116), (21, 38, 90), (0, 18, 32),
+ (0, 22, 30), (13, 31, 69), (27, 40, 108), (40, 49, 127),
+ (54, 58, 147), (62, 66, 154), (70, 74, 161), (100, 97, 178),
+ (139, 129, 189), (236, 206, 230), (236, 212, 221), (237, 218, 212),
+ (225, 210, 207), (214, 202, 202), (186, 171, 192), (164, 85, 164),
+ (107, 36, 114), (86, 50, 132), (65, 65, 151), (62, 62, 151),
+ (59, 60, 152), (59, 60, 152), (58, 59, 152), (58, 59, 152),
+ (58, 59, 152), (57, 57, 153), (56, 56, 152), (55, 55, 151),
+ (55, 54, 152), (56, 54, 153), (56, 56, 152), (56, 56, 152),
+ (59, 60, 152), (60, 63, 154), (62, 66, 157), (62, 70, 160),
+ (63, 74, 164), (73, 74, 164), (76, 77, 167), (89, 89, 177),
+ (104, 102, 186), (97, 98, 181), (89, 89, 174), (81, 81, 167),
+ (70, 69, 163), (67, 65, 162), (60, 64, 155), (59, 60, 153),
+ (62, 62, 152), (60, 62, 152), (58, 62, 153), (59, 61, 153),
+ (60, 61, 154), (59, 60, 152), (59, 60, 152), (58, 59, 152),
+ (58, 59, 152), (52, 56, 145), (50, 56, 141), (49, 57, 138),
+ (43, 57, 128), (39, 52, 120), (25, 42, 94), (7, 31, 59),
+ (13, 8, 2), (6, 4, 5), (0, 0, 8), (1, 0, 9),
+ (2, 0, 11), (2, 0, 13), (9, 13, 25), (21, 42, 85),
+ (36, 44, 119), (52, 55, 148), (51, 52, 149), (50, 50, 150),
+ (50, 48, 147), (65, 36, 146), (39, 14, 134), (33, 26, 132),
+ (42, 35, 138), (46, 41, 141), (51, 47, 144), (51, 47, 144),
+ (33, 26, 132), (22, 36, 111), (21, 36, 93), (26, 43, 97),
+ (29, 46, 116), (49, 59, 128), (48, 59, 131), (48, 60, 134),
+ (59, 66, 147), (62, 69, 150), (63, 72, 149), (95, 92, 135),
+ (116, 110, 170), (112, 103, 156), (109, 97, 143), (129, 116, 134),
+ (154, 62, 149), (163, 64, 146), (173, 76, 183), (190, 87, 204),
+ (202, 97, 216), (202, 99, 217), (192, 164, 205), (184, 176, 199),
+ (179, 176, 203), (181, 170, 204), (179, 166, 210), (209, 108, 230),
+ (198, 97, 215), (193, 92, 209), (188, 88, 204), (110, 103, 183),
+ (90, 90, 176), (75, 76, 166), (73, 68, 160), (66, 65, 158),
+ (60, 67, 148), (66, 59, 127), (111, 42, 89), (106, 36, 60),
+ (82, 25, 31), (58, 34, 84), (72, 57, 100), (52, 61, 126),
+ (50, 59, 138), (52, 56, 143), (52, 55, 150), (55, 55, 151),
+ (56, 56, 152), (57, 58, 151), (54, 58, 147), (54, 58, 147),
+ (49, 58, 137), (47, 59, 133), (39, 58, 126), (38, 49, 111),
+ (26, 47, 78), (36, 17, 36), (4, 0, 17), (16, 3, 31),
+ (34, 20, 82), (28, 20, 103), (26, 36, 123), (36, 41, 125),
+ (43, 49, 133), (51, 60, 139), (83, 87, 132), (104, 99, 131),
+ (138, 127, 157), (161, 158, 179), (180, 172, 193), (182, 177, 184),
+ (172, 171, 167), (150, 153, 158), (122, 119, 164), (104, 101, 178),
+ (92, 93, 176), (87, 82, 182), (107, 67, 166), (183, 76, 190),
+ (204, 89, 206), (212, 102, 225), (218, 104, 225), (223, 105, 225),
+ (236, 126, 241), (236, 127, 242), (226, 116, 237), (229, 122, 236),
+ (201, 178, 220), (194, 180, 215), (211, 206, 210), (224, 211, 221),
+ (227, 231, 240), (231, 222, 251), (209, 213, 251), (200, 199, 230),
+ (198, 191, 225), (168, 161, 203), (153, 155, 203), (140, 142, 201)
+ ),
+
+// 190 Apophysis-040427-4AngOrchid
+((173, 229, 200), (192, 204, 200), (167, 156, 200), (143, 108, 200),
+ (122, 88, 172), (101, 69, 144), (101, 67, 145), (101, 66, 146),
+ (103, 73, 161), (104, 74, 174), (105, 75, 187), (98, 70, 189),
+ (92, 66, 191), (90, 62, 170), (88, 59, 149), (84, 56, 139),
+ (81, 53, 130), (91, 65, 188), (89, 70, 201), (87, 76, 215),
+ (78, 92, 205), (69, 109, 196), (71, 119, 192), (73, 129, 188),
+ (39, 99, 91), (19, 56, 57), (0, 13, 24), (19, 56, 58),
+ (39, 100, 92), (40, 100, 93), (41, 100, 94), (41, 102, 94),
+ (41, 104, 95), (41, 102, 94), (40, 101, 93), (39, 100, 92),
+ (40, 102, 93), (41, 104, 95), (41, 104, 95), (42, 105, 96),
+ (43, 113, 102), (49, 134, 110), (56, 156, 118), (56, 158, 123),
+ (56, 161, 128), (54, 159, 124), (53, 157, 120), (57, 161, 126),
+ (57, 162, 131), (70, 173, 152), (84, 183, 169), (99, 194, 186),
+ (130, 209, 199), (162, 224, 213), (163, 224, 213), (164, 224, 214),
+ (108, 191, 171), (86, 179, 154), (64, 167, 138), (59, 164, 135),
+ (55, 162, 132), (55, 162, 132), (56, 163, 133), (56, 165, 136),
+ (64, 176, 154), (107, 184, 192), (137, 198, 197), (167, 213, 203),
+ (175, 215, 205), (184, 217, 208), (188, 223, 216), (189, 236, 216),
+ (181, 228, 220), (180, 227, 219), (179, 226, 218), (174, 223, 217),
+ (169, 221, 217), (163, 212, 214), (157, 204, 212), (120, 185, 177),
+ (89, 150, 132), (51, 108, 101), (62, 78, 111), (74, 48, 122),
+ (75, 48, 122), (76, 48, 123), (77, 50, 127), (79, 52, 131),
+ (102, 92, 191), (107, 88, 203), (112, 85, 216), (119, 101, 219),
+ (127, 118, 223), (112, 166, 204), (99, 186, 177), (77, 170, 141),
+ (58, 154, 126), (42, 108, 98), (41, 104, 95), (40, 101, 93),
+ (39, 100, 92), (39, 100, 92), (39, 100, 92), (41, 102, 94),
+ (43, 109, 99), (53, 133, 118), (64, 157, 138), (72, 158, 154),
+ (80, 160, 171), (103, 181, 183), (128, 194, 190), (152, 189, 215),
+ (156, 166, 225), (116, 89, 218), (109, 83, 219), (103, 78, 221),
+ (93, 82, 221), (89, 76, 216), (95, 83, 209), (107, 122, 213),
+ (65, 162, 169), (65, 160, 153), (66, 158, 137), (60, 160, 137),
+ (55, 163, 137), (57, 169, 145), (65, 172, 152), (66, 175, 156),
+ (72, 180, 164), (65, 173, 157), (63, 171, 147), (61, 169, 137),
+ (61, 162, 128), (62, 162, 126), (67, 163, 126), (68, 165, 130),
+ (58, 163, 132), (57, 163, 134), (57, 164, 136), (56, 164, 137),
+ (56, 164, 138), (61, 170, 151), (74, 168, 176), (94, 172, 192),
+ (105, 181, 197), (143, 216, 209), (137, 205, 205), (132, 195, 202),
+ (118, 189, 173), (88, 171, 163), (55, 150, 144), (48, 121, 110),
+ (43, 109, 99), (43, 109, 99), (43, 109, 99), (46, 116, 105),
+ (62, 157, 125), (69, 172, 145), (101, 189, 167), (120, 202, 196),
+ (143, 204, 189), (169, 227, 177), (161, 218, 187), (153, 209, 198),
+ (154, 203, 208), (156, 219, 211), (166, 235, 204), (153, 208, 189),
+ (183, 224, 168), (184, 226, 172), (186, 229, 176), (181, 235, 199),
+ (182, 239, 206), (181, 221, 213), (190, 220, 212), (198, 239, 205),
+ (198, 240, 204), (194, 228, 201), (191, 222, 190), (177, 222, 163),
+ (152, 178, 165), (110, 182, 168), (78, 171, 142), (66, 165, 134),
+ (92, 185, 166), (101, 189, 172), (111, 193, 179), (134, 201, 184),
+ (173, 221, 161), (176, 220, 159), (181, 221, 158), (177, 219, 156),
+ (162, 195, 140), (102, 156, 142), (80, 171, 140), (93, 181, 156),
+ (127, 195, 172), (159, 208, 163), (173, 221, 159), (175, 219, 158),
+ (165, 196, 139), (153, 179, 131), (88, 146, 122), (74, 131, 161),
+ (106, 84, 157), (136, 106, 178), (176, 143, 230), (167, 184, 227),
+ (181, 214, 219), (195, 230, 224), (208, 244, 216), (212, 243, 225),
+ (206, 239, 222), (194, 239, 216), (194, 239, 218), (195, 230, 226),
+ (207, 230, 222), (206, 238, 225), (208, 235, 230), (211, 237, 228),
+ (210, 237, 228), (202, 228, 225), (186, 216, 218), (174, 188, 225),
+ (176, 155, 232), (149, 116, 221), (135, 99, 205), (107, 82, 210),
+ (104, 80, 218), (127, 103, 225), (111, 139, 213), (103, 161, 201),
+ (84, 152, 191), (64, 136, 151), (45, 117, 106), (43, 109, 99),
+ (41, 104, 95), (40, 101, 93), (41, 100, 94), (41, 100, 94),
+ (74, 48, 122), (77, 49, 124), (80, 52, 129), (86, 58, 143),
+ (87, 57, 131), (52, 109, 102), (42, 105, 96), (41, 104, 95),
+ (42, 108, 98), (43, 113, 102), (67, 138, 122), (90, 147, 154),
+ (127, 193, 183), (132, 213, 206), (167, 237, 201), (181, 238, 203)
+ ),
+
+// 191 Apophysis-040427-4Leaves
+((186, 178, 193), (87, 98, 68), (64, 60, 46), (41, 22, 24),
+ (49, 22, 23), (57, 23, 22), (77, 40, 24), (98, 57, 27),
+ (159, 95, 33), (173, 122, 69), (188, 150, 105), (180, 163, 127),
+ (172, 176, 149), (166, 170, 160), (160, 165, 171), (159, 165, 173),
+ (159, 166, 176), (188, 198, 187), (193, 200, 187), (198, 202, 187),
+ (202, 195, 176), (207, 189, 165), (197, 184, 153), (188, 180, 141),
+ (192, 133, 29), (200, 137, 21), (209, 141, 14), (218, 156, 16),
+ (227, 172, 19), (227, 182, 19), (228, 192, 20), (228, 172, 25),
+ (226, 162, 26), (210, 142, 19), (194, 125, 29), (179, 109, 39),
+ (176, 118, 26), (174, 127, 13), (192, 141, 12), (211, 156, 11),
+ (221, 189, 90), (217, 196, 132), (214, 203, 175), (207, 212, 200),
+ (201, 222, 225), (198, 222, 229), (196, 223, 234), (188, 220, 243),
+ (198, 211, 243), (209, 217, 238), (205, 213, 217), (201, 209, 196),
+ (196, 191, 177), (192, 173, 158), (192, 172, 133), (192, 172, 109),
+ (232, 210, 46), (225, 216, 68), (219, 222, 91), (214, 213, 128),
+ (210, 205, 165), (206, 204, 171), (203, 203, 177), (197, 199, 185),
+ (179, 189, 181), (148, 141, 113), (125, 103, 67), (103, 66, 21),
+ (100, 61, 13), (97, 57, 6), (66, 37, 0), (38, 21, 14),
+ (21, 17, 34), (36, 30, 24), (52, 43, 14), (74, 52, 21),
+ (97, 61, 29), (107, 66, 34), (117, 72, 39), (132, 108, 74),
+ (171, 135, 109), (154, 163, 142), (154, 161, 155), (155, 159, 168),
+ (154, 158, 161), (153, 158, 154), (147, 156, 153), (150, 147, 140),
+ (168, 164, 129), (168, 182, 154), (168, 200, 179), (175, 208, 183),
+ (183, 216, 187), (208, 214, 210), (218, 223, 217), (214, 223, 218),
+ (207, 223, 213), (209, 200, 185), (206, 192, 149), (203, 185, 113),
+ (200, 183, 105), (198, 182, 97), (200, 190, 95), (210, 178, 91),
+ (203, 165, 64), (206, 137, 50), (210, 109, 37), (198, 98, 35),
+ (187, 88, 33), (158, 88, 19), (163, 97, 19), (158, 118, 57),
+ (176, 125, 98), (163, 168, 188), (168, 168, 197), (173, 169, 206),
+ (171, 193, 214), (173, 200, 217), (196, 204, 206), (201, 200, 198),
+ (209, 207, 194), (212, 207, 198), (215, 208, 202), (218, 210, 216),
+ (222, 213, 230), (231, 221, 219), (221, 215, 199), (217, 185, 170),
+ (200, 142, 96), (191, 130, 47), (193, 125, 39), (195, 121, 32),
+ (195, 146, 41), (189, 163, 88), (184, 172, 132), (186, 189, 178),
+ (187, 202, 197), (182, 195, 195), (177, 188, 194), (175, 188, 187),
+ (173, 188, 181), (165, 180, 187), (160, 185, 192), (163, 193, 204),
+ (181, 194, 200), (204, 212, 223), (210, 218, 225), (216, 224, 227),
+ (222, 231, 240), (227, 233, 233), (228, 232, 218), (222, 226, 212),
+ (212, 196, 173), (212, 194, 157), (212, 192, 141), (212, 176, 116),
+ (219, 156, 85), (177, 126, 60), (124, 86, 39), (116, 62, 26),
+ (82, 19, 27), (18, 18, 6), (14, 17, 6), (11, 17, 7),
+ (17, 9, 7), (15, 14, 12), (33, 22, 18), (35, 68, 23),
+ (164, 93, 123), (177, 125, 150), (191, 158, 177), (207, 193, 190),
+ (207, 205, 210), (210, 213, 220), (216, 220, 223), (205, 224, 222),
+ (190, 225, 227), (196, 209, 218), (201, 201, 201), (201, 195, 169),
+ (199, 191, 145), (178, 174, 129), (174, 169, 129), (174, 172, 134),
+ (175, 167, 165), (179, 176, 182), (184, 186, 199), (196, 200, 209),
+ (209, 211, 224), (205, 227, 241), (212, 233, 250), (221, 232, 250),
+ (209, 236, 245), (197, 224, 241), (212, 226, 226), (216, 229, 209),
+ (228, 233, 213), (236, 235, 171), (238, 208, 156), (217, 205, 119),
+ (205, 185, 90), (213, 169, 60), (215, 169, 58), (233, 180, 50),
+ (227, 201, 46), (221, 205, 34), (232, 206, 25), (236, 218, 20),
+ (231, 203, 34), (239, 187, 23), (232, 181, 30), (234, 177, 26),
+ (232, 164, 27), (218, 143, 15), (193, 124, 3), (152, 86, 12),
+ (108, 78, 14), (79, 68, 48), (120, 114, 90), (167, 157, 145),
+ (185, 187, 186), (212, 208, 223), (221, 209, 231), (213, 210, 229),
+ (209, 223, 232), (209, 219, 228), (197, 211, 224), (189, 203, 206),
+ (174, 187, 193), (153, 178, 174), (100, 176, 163), (134, 146, 134),
+ (120, 133, 141), (98, 122, 132), (111, 120, 135), (140, 141, 101),
+ (148, 142, 90), (179, 138, 50), (197, 107, 10), (166, 78, 7),
+ (143, 45, 20), (100, 55, 22), (62, 24, 15), (31, 9, 11),
+ (28, 4, 17), (50, 12, 11), (74, 38, 6), (115, 76, 0),
+ (133, 86, 30), (156, 96, 44), (145, 131, 86), (146, 124, 110),
+ (142, 158, 87), (135, 143, 94), (111, 118, 124), (102, 104, 103)
+ ),
+
+// 192 Apophysis-040427-4Bdlnds
+((65, 55, 19), (44, 34, 24), (40, 28, 15), (36, 23, 7),
+ (38, 22, 7), (40, 22, 8), (45, 46, 9), (50, 70, 11),
+ (63, 89, 26), (78, 97, 52), (93, 106, 78), (110, 111, 99),
+ (127, 116, 120), (163, 122, 115), (200, 129, 111), (196, 142, 119),
+ (193, 156, 127), (195, 223, 226), (193, 221, 227), (191, 220, 228),
+ (185, 192, 183), (180, 164, 139), (183, 161, 134), (186, 159, 129),
+ (189, 168, 151), (194, 197, 188), (200, 226, 225), (207, 231, 230),
+ (215, 237, 235), (217, 238, 236), (220, 240, 238), (222, 243, 238),
+ (220, 238, 238), (220, 232, 230), (220, 232, 229), (221, 232, 228),
+ (214, 229, 230), (207, 226, 232), (210, 228, 232), (213, 231, 233),
+ (210, 234, 236), (209, 231, 233), (209, 229, 230), (206, 226, 226),
+ (204, 224, 222), (203, 196, 190), (203, 169, 159), (175, 151, 141),
+ (147, 128, 124), (133, 104, 100), (127, 109, 104), (122, 115, 109),
+ (131, 121, 120), (140, 128, 132), (157, 143, 136), (175, 158, 140),
+ (180, 223, 230), (184, 223, 227), (189, 223, 225), (179, 184, 179),
+ (170, 146, 134), (162, 134, 123), (155, 123, 112), (149, 115, 87),
+ (137, 113, 75), (99, 93, 35), (98, 88, 34), (97, 83, 34),
+ (98, 91, 39), (100, 99, 45), (111, 105, 81), (119, 104, 97),
+ (128, 117, 125), (133, 109, 105), (138, 102, 86), (125, 106, 80),
+ (113, 110, 75), (96, 106, 70), (80, 102, 66), (80, 102, 63),
+ (85, 101, 56), (80, 87, 36), (85, 85, 32), (90, 83, 28),
+ (87, 82, 28), (84, 81, 28), (82, 95, 16), (64, 90, 17),
+ (63, 66, 11), (73, 73, 15), (84, 80, 19), (102, 90, 27),
+ (121, 100, 35), (159, 100, 42), (147, 106, 74), (157, 99, 77),
+ (158, 113, 90), (175, 163, 115), (177, 167, 120), (180, 172, 126),
+ (186, 169, 131), (192, 167, 136), (218, 173, 154), (210, 225, 222),
+ (222, 238, 238), (226, 240, 239), (230, 242, 240), (230, 242, 240),
+ (231, 243, 241), (228, 243, 240), (228, 242, 243), (226, 241, 244),
+ (230, 240, 242), (245, 251, 247), (245, 251, 247), (245, 251, 247),
+ (241, 252, 246), (236, 248, 244), (230, 245, 242), (223, 239, 239),
+ (214, 233, 239), (203, 227, 236), (193, 221, 233), (192, 221, 230),
+ (191, 222, 227), (186, 163, 149), (154, 143, 137), (138, 132, 134),
+ (124, 113, 129), (105, 121, 121), (114, 128, 116), (123, 135, 111),
+ (147, 145, 106), (152, 132, 125), (176, 157, 153), (169, 213, 226),
+ (167, 215, 227), (150, 175, 179), (134, 136, 131), (124, 123, 108),
+ (115, 111, 86), (95, 93, 55), (102, 88, 41), (130, 100, 76),
+ (179, 139, 139), (117, 112, 48), (151, 123, 74), (185, 135, 100),
+ (203, 175, 154), (192, 221, 225), (187, 221, 230), (182, 222, 224),
+ (151, 134, 108), (137, 123, 100), (123, 112, 92), (96, 87, 58),
+ (95, 76, 46), (93, 69, 35), (104, 65, 34), (119, 76, 25),
+ (93, 82, 37), (126, 94, 73), (133, 107, 91), (140, 120, 109),
+ (180, 147, 132), (203, 169, 157), (207, 222, 225), (223, 234, 236),
+ (247, 253, 249), (250, 253, 248), (253, 254, 248), (246, 254, 255),
+ (247, 251, 252), (242, 251, 246), (233, 245, 241), (227, 239, 237),
+ (216, 232, 231), (202, 225, 219), (203, 183, 150), (193, 173, 122),
+ (178, 135, 93), (145, 119, 62), (121, 92, 58), (115, 90, 70),
+ (95, 110, 113), (106, 130, 136), (117, 150, 159), (150, 158, 179),
+ (163, 205, 229), (183, 218, 240), (194, 227, 236), (213, 232, 238),
+ (223, 237, 240), (228, 242, 242), (221, 239, 241), (212, 231, 238),
+ (211, 231, 230), (205, 230, 226), (209, 224, 229), (213, 199, 188),
+ (201, 154, 144), (177, 140, 132), (144, 122, 111), (138, 109, 79),
+ (119, 112, 70), (94, 109, 50), (84, 101, 46), (108, 102, 66),
+ (129, 108, 103), (146, 128, 142), (171, 161, 169), (184, 221, 227),
+ (186, 223, 231), (189, 224, 230), (198, 229, 231), (198, 230, 229),
+ (206, 226, 225), (215, 201, 190), (204, 174, 148), (180, 150, 124),
+ (139, 118, 65), (114, 105, 38), (103, 96, 28), (92, 92, 42),
+ (94, 94, 58), (114, 110, 98), (151, 158, 127), (176, 191, 188),
+ (182, 220, 231), (193, 221, 232), (201, 224, 232), (211, 229, 233),
+ (214, 232, 236), (217, 237, 235), (220, 240, 239), (217, 238, 241),
+ (213, 238, 243), (217, 236, 242), (217, 236, 242), (211, 233, 244),
+ (206, 230, 240), (188, 225, 243), (183, 219, 233), (186, 221, 227),
+ (193, 168, 161), (190, 147, 131), (171, 135, 135), (173, 126, 136),
+ (153, 119, 135), (148, 121, 138), (142, 126, 136), (145, 119, 132),
+ (131, 117, 108), (107, 102, 83), (80, 71, 64), (79, 76, 35)
+ ),
+
+// 193 Apophysis-040427-4BnnySurp
+((246, 152, 80), (121, 73, 209), (160, 91, 174), (200, 109, 140),
+ (218, 122, 116), (237, 136, 92), (241, 143, 85), (245, 151, 79),
+ (254, 163, 72), (254, 165, 71), (255, 168, 71), (254, 165, 71),
+ (254, 163, 72), (254, 165, 71), (254, 167, 70), (254, 167, 70),
+ (255, 168, 71), (255, 169, 72), (245, 186, 62), (235, 204, 52),
+ (225, 197, 40), (216, 191, 29), (220, 181, 44), (224, 171, 59),
+ (223, 144, 103), (219, 137, 103), (215, 131, 103), (204, 126, 117),
+ (194, 121, 132), (182, 113, 150), (171, 105, 169), (140, 85, 187),
+ (117, 70, 208), (82, 51, 253), (96, 57, 235), (111, 64, 218),
+ (139, 82, 194), (168, 101, 170), (173, 105, 167), (179, 110, 165),
+ (203, 121, 109), (209, 126, 104), (216, 131, 100), (210, 125, 104),
+ (204, 120, 109), (198, 119, 116), (193, 118, 123), (184, 113, 145),
+ (132, 87, 154), (96, 73, 83), (149, 96, 65), (202, 120, 47),
+ (219, 133, 64), (236, 147, 81), (241, 149, 80), (246, 152, 80),
+ (255, 166, 70), (254, 168, 73), (253, 170, 76), (249, 161, 92),
+ (246, 153, 109), (230, 149, 119), (215, 146, 130), (219, 117, 128),
+ (188, 112, 161), (187, 114, 143), (201, 122, 123), (216, 130, 103),
+ (219, 133, 98), (223, 136, 93), (229, 142, 88), (241, 148, 79),
+ (253, 162, 71), (252, 159, 73), (251, 156, 76), (245, 152, 77),
+ (239, 148, 78), (236, 146, 81), (234, 144, 84), (232, 140, 89),
+ (230, 138, 89), (222, 131, 104), (222, 133, 98), (223, 136, 93),
+ (220, 136, 92), (217, 136, 91), (220, 136, 92), (226, 137, 95),
+ (235, 145, 83), (244, 152, 76), (254, 159, 69), (245, 158, 61),
+ (236, 157, 54), (232, 143, 83), (219, 134, 97), (201, 115, 118),
+ (182, 112, 149), (172, 106, 170), (176, 107, 162), (180, 108, 154),
+ (187, 112, 138), (194, 117, 123), (202, 117, 110), (210, 123, 103),
+ (205, 122, 108), (179, 109, 136), (153, 96, 165), (146, 90, 175),
+ (139, 84, 185), (106, 46, 180), (79, 36, 203), (62, 26, 238),
+ (50, 32, 242), (109, 63, 221), (109, 64, 222), (109, 65, 224),
+ (85, 60, 240), (82, 51, 253), (82, 50, 255), (80, 51, 255),
+ (81, 49, 255), (84, 49, 253), (87, 50, 252), (97, 56, 238),
+ (107, 62, 225), (125, 76, 204), (142, 88, 184), (179, 106, 162),
+ (199, 118, 114), (229, 139, 89), (235, 144, 84), (241, 150, 80),
+ (248, 155, 77), (255, 169, 69), (253, 187, 64), (248, 202, 20),
+ (250, 210, 1), (252, 190, 36), (254, 170, 71), (254, 167, 72),
+ (255, 164, 73), (251, 156, 76), (243, 148, 80), (235, 141, 89),
+ (220, 139, 94), (195, 119, 121), (182, 114, 134), (169, 109, 147),
+ (151, 94, 173), (121, 69, 203), (105, 62, 229), (97, 45, 251),
+ (74, 53, 254), (73, 53, 253), (72, 54, 252), (70, 51, 255),
+ (74, 51, 255), (75, 50, 253), (76, 51, 255), (80, 51, 255),
+ (82, 51, 253), (105, 62, 229), (108, 63, 222), (111, 65, 215),
+ (113, 67, 215), (116, 72, 209), (116, 72, 209), (126, 78, 198),
+ (115, 70, 212), (119, 72, 207), (124, 75, 203), (116, 76, 191),
+ (96, 66, 104), (76, 56, 19), (74, 53, 34), (5, 0, 110),
+ (8, 0, 177), (10, 0, 181), (20, 4, 225), (27, 8, 250),
+ (34, 14, 253), (53, 44, 255), (65, 46, 252), (63, 33, 251),
+ (31, 9, 255), (30, 9, 253), (29, 10, 252), (31, 12, 254),
+ (48, 24, 255), (67, 43, 255), (68, 49, 255), (70, 51, 255),
+ (73, 52, 255), (74, 53, 254), (74, 51, 255), (83, 51, 255),
+ (111, 67, 216), (127, 77, 198), (152, 90, 173), (177, 103, 136),
+ (199, 116, 112), (216, 129, 99), (219, 133, 98), (224, 135, 91),
+ (233, 142, 85), (235, 145, 83), (239, 145, 81), (235, 147, 84),
+ (234, 144, 84), (224, 138, 91), (219, 133, 98), (207, 121, 108),
+ (184, 113, 143), (143, 87, 184), (113, 67, 215), (84, 32, 241),
+ (38, 17, 255), (26, 7, 247), (27, 7, 244), (34, 7, 182),
+ (66, 42, 154), (113, 70, 178), (166, 100, 162), (189, 118, 136),
+ (215, 129, 104), (227, 139, 93), (240, 148, 81), (249, 156, 78),
+ (254, 163, 72), (255, 164, 71), (254, 164, 68), (255, 164, 71),
+ (254, 163, 72), (254, 163, 72), (246, 155, 76), (229, 157, 81),
+ (205, 171, 99), (172, 152, 93), (160, 115, 120), (166, 112, 146),
+ (180, 109, 149), (195, 116, 119), (202, 118, 107), (211, 128, 98),
+ (222, 134, 96), (228, 138, 88), (234, 144, 84), (242, 149, 80),
+ (243, 150, 80), (244, 150, 80), (255, 146, 80), (255, 150, 74),
+ (253, 157, 73), (255, 161, 71), (251, 156, 74), (243, 150, 80)
+ ),
+
+// 194 Apophysis-040427-4BorgEY
+((136, 117, 102), (140, 124, 101), (139, 127, 100), (139, 130, 99),
+ (139, 132, 100), (140, 134, 102), (140, 134, 102), (140, 134, 102),
+ (139, 135, 100), (140, 137, 99), (141, 139, 98), (140, 138, 97),
+ (140, 137, 96), (140, 138, 97), (141, 139, 98), (140, 138, 98),
+ (140, 138, 99), (142, 138, 101), (140, 130, 100), (138, 123, 100),
+ (138, 125, 100), (139, 127, 101), (138, 123, 101), (137, 120, 102),
+ (135, 110, 103), (130, 100, 103), (126, 90, 104), (121, 64, 99),
+ (117, 38, 95), (104, 26, 91), (92, 15, 87), (79, 2, 80),
+ (29, 0, 80), (2, 0, 1), (38, 8, 21), (74, 16, 41),
+ (79, 8, 53), (85, 0, 65), (81, 0, 70), (77, 1, 75),
+ (118, 23, 105), (122, 48, 107), (126, 74, 110), (128, 84, 111),
+ (131, 94, 112), (132, 96, 112), (134, 98, 112), (135, 104, 112),
+ (136, 106, 106), (133, 105, 104), (132, 104, 104), (132, 103, 105),
+ (134, 104, 107), (136, 105, 110), (135, 107, 108), (135, 110, 106),
+ (140, 115, 110), (139, 117, 107), (138, 119, 104), (137, 122, 103),
+ (137, 125, 103), (137, 125, 101), (138, 126, 100), (140, 129, 99),
+ (139, 130, 99), (140, 131, 102), (141, 129, 104), (143, 128, 107),
+ (143, 129, 107), (143, 131, 107), (143, 132, 104), (142, 133, 104),
+ (139, 129, 102), (140, 132, 102), (142, 136, 102), (140, 131, 103),
+ (139, 127, 105), (138, 126, 104), (138, 126, 104), (138, 126, 104),
+ (140, 125, 104), (138, 123, 104), (138, 119, 104), (138, 116, 105),
+ (137, 113, 106), (136, 111, 107), (136, 108, 105), (134, 108, 107),
+ (130, 97, 108), (131, 98, 107), (133, 100, 107), (133, 102, 106),
+ (134, 104, 106), (135, 107, 104), (136, 111, 106), (136, 113, 107),
+ (137, 114, 108), (137, 119, 105), (138, 122, 103), (140, 125, 102),
+ (139, 126, 102), (139, 127, 103), (139, 128, 100), (138, 126, 100),
+ (139, 124, 101), (138, 122, 102), (138, 121, 103), (137, 120, 102),
+ (137, 120, 102), (137, 120, 102), (136, 117, 103), (136, 114, 103),
+ (137, 118, 104), (138, 123, 104), (138, 123, 104), (138, 123, 104),
+ (139, 124, 105), (139, 124, 105), (137, 125, 103), (135, 123, 99),
+ (135, 116, 99), (138, 119, 104), (142, 123, 109), (144, 126, 112),
+ (147, 129, 115), (143, 112, 117), (135, 96, 117), (131, 92, 110),
+ (128, 83, 112), (123, 77, 106), (120, 70, 105), (118, 63, 105),
+ (118, 59, 105), (116, 57, 105), (117, 57, 111), (116, 45, 113),
+ (117, 63, 99), (112, 60, 84), (108, 58, 69), (105, 52, 71),
+ (103, 47, 74), (96, 22, 85), (89, 8, 85), (90, 20, 83),
+ (93, 38, 69), (113, 85, 71), (119, 92, 78), (125, 99, 86),
+ (130, 98, 101), (131, 103, 99), (136, 103, 84), (116, 82, 70),
+ (112, 80, 67), (117, 76, 78), (123, 72, 89), (130, 91, 94),
+ (132, 94, 107), (130, 97, 108), (133, 104, 109), (135, 109, 108),
+ (135, 109, 108), (137, 113, 111), (138, 114, 111), (140, 116, 112),
+ (140, 117, 109), (143, 126, 110), (146, 124, 113), (160, 141, 111),
+ (141, 140, 94), (140, 141, 93), (139, 143, 92), (140, 139, 95),
+ (139, 137, 96), (139, 137, 96), (140, 136, 99), (140, 128, 102),
+ (138, 123, 100), (137, 115, 104), (134, 105, 109), (131, 92, 113),
+ (138, 71, 122), (148, 58, 110), (153, 67, 132), (180, 88, 153),
+ (136, 103, 114), (134, 102, 110), (133, 102, 107), (130, 94, 104),
+ (120, 68, 106), (111, 45, 106), (103, 14, 104), (100, 25, 90),
+ (109, 46, 101), (125, 76, 105), (130, 114, 89), (136, 133, 80),
+ (143, 161, 85), (151, 167, 94), (147, 151, 100), (146, 151, 95),
+ (143, 142, 94), (140, 137, 92), (139, 136, 93), (138, 129, 98),
+ (138, 122, 99), (136, 119, 99), (132, 113, 99), (134, 110, 100),
+ (130, 100, 102), (129, 96, 103), (121, 75, 104), (105, 52, 80),
+ (72, 29, 48), (72, 27, 47), (72, 25, 35), (90, 59, 38),
+ (108, 79, 61), (124, 93, 88), (126, 88, 99), (128, 84, 107),
+ (124, 76, 114), (128, 81, 113), (130, 88, 110), (132, 93, 111),
+ (136, 106, 108), (138, 126, 100), (143, 146, 91), (144, 172, 85),
+ (167, 184, 90), (170, 208, 99), (152, 174, 109), (156, 167, 109),
+ (170, 178, 165), (149, 150, 116), (147, 149, 102), (141, 139, 98),
+ (138, 132, 96), (138, 132, 96), (137, 132, 94), (133, 124, 91),
+ (137, 123, 97), (136, 117, 103), (137, 114, 106), (135, 111, 107),
+ (137, 108, 110), (137, 108, 110), (137, 108, 110), (139, 110, 112),
+ (138, 115, 107), (137, 117, 106), (137, 117, 106), (137, 118, 104),
+ (136, 117, 103), (134, 114, 105), (134, 115, 101), (136, 114, 101)
+ ),
+
+// 195 Apophysis-040427-4BB4
+((156, 137, 8), (161, 145, 10), (162, 146, 7), (164, 147, 5),
+ (163, 146, 7), (162, 146, 9), (161, 144, 10), (160, 143, 11),
+ (157, 143, 12), (158, 143, 12), (160, 143, 13), (161, 144, 13),
+ (163, 146, 14), (164, 146, 11), (165, 147, 9), (165, 147, 9),
+ (166, 148, 10), (166, 149, 9), (167, 147, 8), (169, 146, 8),
+ (166, 147, 10), (164, 148, 13), (164, 147, 14), (164, 147, 15),
+ (167, 146, 18), (165, 146, 17), (164, 147, 17), (162, 147, 16),
+ (161, 147, 16), (162, 146, 15), (163, 146, 14), (166, 148, 14),
+ (171, 153, 15), (184, 166, 8), (217, 202, 7), (250, 238, 6),
+ (252, 243, 7), (254, 249, 9), (254, 246, 9), (254, 244, 9),
+ (188, 171, 19), (176, 158, 19), (164, 146, 20), (150, 122, 42),
+ (137, 98, 65), (166, 79, 64), (196, 60, 64), (194, 41, 46),
+ (176, 37, 42), (174, 38, 42), (170, 36, 41), (166, 35, 40),
+ (166, 35, 40), (167, 36, 41), (161, 85, 35), (155, 134, 29),
+ (188, 172, 24), (220, 200, 17), (253, 228, 11), (254, 227, 10),
+ (255, 227, 9), (253, 227, 9), (252, 227, 10), (198, 174, 6),
+ (182, 166, 19), (92, 171, 44), (81, 159, 33), (71, 147, 23),
+ (69, 143, 23), (67, 140, 23), (117, 101, 6), (145, 109, 31),
+ (134, 121, 7), (144, 130, 9), (155, 140, 11), (159, 143, 12),
+ (163, 146, 14), (165, 149, 15), (168, 152, 17), (179, 162, 22),
+ (184, 169, 26), (195, 181, 58), (197, 183, 59), (200, 186, 61),
+ (220, 210, 39), (240, 234, 18), (252, 251, 13), (251, 255, 8),
+ (255, 255, 6), (255, 249, 4), (255, 244, 2), (253, 238, 5),
+ (251, 233, 9), (241, 214, 19), (183, 168, 17), (169, 151, 13),
+ (154, 137, 7), (114, 100, 3), (133, 114, 15), (152, 128, 28),
+ (154, 133, 21), (157, 139, 15), (155, 137, 9), (155, 138, 8),
+ (159, 141, 13), (160, 141, 18), (162, 141, 24), (162, 134, 40),
+ (162, 128, 57), (188, 100, 90), (198, 67, 73), (200, 65, 71),
+ (206, 90, 93), (201, 187, 64), (209, 196, 51), (218, 205, 39),
+ (254, 231, 13), (255, 250, 14), (255, 243, 22), (253, 226, 12),
+ (178, 167, 52), (176, 150, 47), (174, 133, 43), (169, 132, 55),
+ (165, 131, 68), (148, 110, 87), (128, 128, 190), (121, 120, 190),
+ (100, 98, 181), (74, 83, 174), (70, 74, 166), (66, 65, 159),
+ (66, 65, 159), (65, 64, 158), (65, 64, 158), (65, 64, 157),
+ (62, 62, 152), (98, 81, 111), (135, 100, 70), (135, 100, 71),
+ (135, 100, 72), (63, 63, 153), (64, 63, 156), (58, 56, 140),
+ (64, 137, 22), (127, 131, 10), (131, 128, 6), (135, 125, 2),
+ (154, 137, 5), (155, 138, 8), (156, 139, 9), (158, 141, 11),
+ (161, 147, 16), (162, 147, 16), (164, 147, 17), (170, 152, 18),
+ (183, 167, 22), (188, 176, 56), (209, 200, 97), (209, 200, 97),
+ (216, 210, 148), (234, 198, 200), (228, 174, 176), (222, 150, 153),
+ (204, 191, 76), (183, 172, 56), (170, 158, 36), (154, 135, 33),
+ (142, 117, 50), (106, 132, 36), (71, 147, 23), (74, 155, 26),
+ (76, 159, 27), (121, 186, 82), (135, 191, 100), (134, 190, 99),
+ (92, 171, 46), (75, 161, 26), (73, 154, 25), (71, 150, 25),
+ (68, 143, 24), (68, 143, 24), (136, 104, 66), (137, 108, 68),
+ (177, 161, 22), (191, 171, 20), (205, 181, 19), (254, 227, 13),
+ (255, 248, 9), (255, 254, 9), (255, 255, 14), (255, 251, 9),
+ (249, 229, 10), (189, 166, 28), (151, 124, 57), (141, 107, 69),
+ (149, 112, 85), (154, 122, 61), (175, 151, 55), (182, 153, 61),
+ (188, 152, 56), (167, 149, 23), (165, 151, 20), (167, 153, 18),
+ (164, 150, 17), (163, 149, 18), (165, 147, 21), (172, 158, 36),
+ (178, 166, 54), (154, 197, 126), (231, 201, 201), (228, 227, 223),
+ (199, 216, 184), (144, 191, 111), (157, 186, 106), (145, 165, 54),
+ (163, 148, 21), (164, 147, 17), (165, 148, 16), (167, 151, 16),
+ (169, 153, 18), (170, 153, 23), (179, 162, 20), (181, 164, 22),
+ (175, 157, 21), (168, 152, 17), (162, 148, 17), (162, 148, 15),
+ (162, 145, 15), (159, 145, 14), (159, 144, 17), (162, 145, 15),
+ (160, 141, 12), (158, 140, 12), (156, 138, 12), (160, 141, 12),
+ (160, 142, 16), (161, 143, 19), (162, 144, 18), (163, 146, 16),
+ (162, 145, 15), (164, 145, 14), (162, 145, 13), (162, 144, 10),
+ (160, 144, 5), (157, 141, 4), (155, 139, 4), (156, 137, 6),
+ (156, 139, 7), (156, 139, 9), (159, 142, 12), (159, 142, 12),
+ (162, 143, 12), (162, 145, 13), (160, 143, 11), (160, 143, 13)
+ ),
+
+// 196 Apophysis-040427-4BflyWindw2
+((2, 2, 2), (28, 75, 93), (34, 90, 96), (41, 106, 100),
+ (61, 80, 100), (81, 55, 100), (100, 61, 117), (120, 68, 134),
+ (188, 12, 147), (172, 8, 111), (156, 5, 76), (105, 3, 58),
+ (54, 2, 40), (43, 4, 38), (33, 6, 37), (35, 8, 39),
+ (37, 10, 41), (96, 19, 99), (125, 34, 121), (154, 49, 144),
+ (150, 39, 145), (147, 30, 147), (132, 29, 128), (117, 28, 110),
+ (54, 17, 61), (32, 8, 34), (11, 0, 8), (6, 1, 5),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (2, 2, 2), (16, 21, 17), (44, 35, 15), (73, 49, 13),
+ (99, 68, 19), (126, 88, 25), (138, 94, 27), (151, 101, 30),
+ (188, 113, 11), (210, 112, 22), (232, 112, 34), (212, 136, 41),
+ (192, 160, 49), (216, 188, 58), (241, 217, 67), (228, 220, 145),
+ (254, 254, 246), (255, 253, 253), (255, 252, 250), (255, 251, 248),
+ (253, 153, 233), (252, 56, 218), (230, 58, 201), (209, 61, 185),
+ (146, 41, 134), (96, 26, 89), (46, 12, 45), (30, 8, 26),
+ (14, 5, 8), (23, 8, 10), (33, 11, 13), (87, 53, 15),
+ (123, 82, 30), (185, 196, 104), (190, 191, 137), (195, 186, 171),
+ (175, 166, 140), (155, 147, 110), (142, 139, 122), (116, 76, 128),
+ (53, 114, 132), (48, 134, 105), (43, 155, 79), (47, 129, 93),
+ (51, 104, 108), (44, 101, 108), (38, 98, 109), (37, 99, 114),
+ (45, 102, 129), (65, 108, 115), (109, 131, 141), (153, 155, 168),
+ (178, 178, 177), (204, 201, 186), (228, 246, 250), (255, 255, 217),
+ (130, 195, 191), (140, 130, 179), (150, 65, 168), (156, 67, 173),
+ (162, 70, 179), (241, 44, 209), (254, 15, 222), (255, 4, 247),
+ (255, 18, 234), (174, 75, 168), (138, 70, 148), (102, 66, 128),
+ (100, 70, 125), (99, 75, 123), (86, 86, 78), (124, 102, 63),
+ (117, 147, 113), (119, 115, 120), (121, 84, 128), (113, 67, 122),
+ (106, 51, 116), (78, 40, 123), (66, 37, 83), (46, 12, 39),
+ (24, 6, 22), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (1, 2, 4), (12, 10, 24), (23, 19, 44), (31, 22, 46),
+ (39, 25, 48), (65, 37, 62), (64, 38, 67), (47, 21, 60),
+ (18, 38, 49), (12, 15, 30), (6, 7, 20), (0, 0, 11),
+ (2, 2, 2), (1, 3, 0), (2, 2, 2), (2, 2, 2),
+ (2, 0, 1), (1, 0, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (2, 2, 2),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (2, 2, 2), (2, 2, 2), (17, 23, 19), (14, 69, 37),
+ (68, 156, 10), (75, 168, 10), (82, 181, 10), (57, 219, 11),
+ (70, 205, 40), (62, 148, 39), (48, 137, 57), (66, 106, 69),
+ (68, 104, 30), (55, 65, 30), (39, 43, 25), (23, 22, 20),
+ (6, 14, 1), (2, 2, 2), (17, 21, 0), (65, 78, 9),
+ (101, 85, 33), (110, 98, 40), (119, 111, 48), (125, 101, 55),
+ (107, 97, 48), (72, 59, 43), (23, 32, 31), (9, 20, 16),
+ (2, 2, 2), (2, 2, 2), (25, 14, 0), (48, 34, 5),
+ (58, 40, 0), (55, 59, 0), (56, 81, 0), (49, 114, 14),
+ (157, 183, 22), (166, 186, 15), (175, 189, 8), (163, 172, 45),
+ (149, 126, 32), (93, 85, 72), (100, 23, 79), (84, 14, 50),
+ (55, 17, 56), (25, 34, 51), (20, 68, 68), (36, 70, 72),
+ (47, 86, 85), (69, 79, 78), (69, 67, 89), (106, 24, 90),
+ (181, 12, 113), (219, 13, 148), (255, 8, 208), (247, 26, 219),
+ (233, 86, 128), (165, 137, 133), (190, 159, 102), (207, 141, 57),
+ (176, 119, 40), (135, 86, 27), (136, 35, 49), (109, 5, 66),
+ (78, 29, 94), (35, 50, 73), (42, 67, 89), (46, 63, 83),
+ (61, 35, 72), (70, 32, 73), (78, 19, 65), (74, 12, 61),
+ (64, 5, 51), (44, 1, 31), (33, 8, 30), (29, 3, 28),
+ (26, 2, 24), (23, 10, 30), (15, 28, 37), (17, 44, 35),
+ (22, 64, 24), (66, 76, 16), (99, 76, 24), (98, 77, 34),
+ (116, 74, 24), (110, 67, 16), (114, 66, 0), (127, 79, 13),
+ (138, 76, 29), (159, 108, 77), (132, 45, 90), (144, 43, 135),
+ (171, 27, 151), (145, 51, 147), (82, 61, 120), (67, 76, 115),
+ (66, 78, 76), (60, 46, 59), (75, 45, 53), (70, 55, 48),
+ (53, 54, 38), (14, 37, 43), (12, 35, 41), (16, 13, 22),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2)
+ ),
+
+// 197 Apophysis-040427-4BflyWndw3
+((49, 55, 81), (81, 40, 96), (82, 31, 94), (83, 22, 92),
+ (68, 17, 67), (53, 12, 42), (26, 6, 21), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 1, 0),
+ (2, 3, 0), (11, 27, 35), (21, 52, 70), (33, 50, 75),
+ (46, 49, 80), (78, 41, 93), (94, 37, 100), (111, 33, 108),
+ (117, 28, 111), (123, 24, 114), (126, 23, 115), (129, 22, 116),
+ (140, 31, 120), (136, 26, 118), (132, 21, 116), (125, 24, 114),
+ (119, 27, 112), (114, 35, 108), (109, 43, 105), (150, 147, 116),
+ (192, 187, 183), (249, 243, 209), (251, 235, 172), (253, 228, 135),
+ (226, 193, 116), (199, 159, 98), (191, 141, 72), (183, 124, 46),
+ (137, 99, 37), (108, 77, 26), (80, 55, 15), (40, 27, 7),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (50, 26, 3), (100, 53, 7), (156, 103, 41),
+ (212, 153, 75), (232, 179, 91), (252, 206, 108), (252, 218, 128),
+ (183, 190, 138), (125, 161, 147), (106, 116, 86), (88, 71, 25),
+ (92, 70, 22), (96, 70, 19), (94, 80, 15), (100, 99, 17),
+ (183, 71, 7), (202, 44, 72), (221, 17, 138), (235, 15, 145),
+ (250, 13, 153), (228, 103, 148), (207, 193, 144), (252, 217, 133),
+ (252, 219, 122), (187, 144, 31), (138, 107, 20), (90, 70, 9),
+ (79, 68, 19), (69, 67, 29), (38, 51, 60), (29, 49, 73),
+ (35, 58, 76), (48, 78, 52), (61, 98, 29), (66, 120, 26),
+ (71, 142, 24), (67, 161, 47), (84, 158, 45), (109, 172, 67),
+ (167, 143, 81), (240, 173, 69), (225, 154, 47), (211, 135, 25),
+ (191, 119, 27), (172, 104, 29), (136, 77, 7), (113, 67, 7),
+ (28, 62, 48), (28, 59, 60), (28, 57, 73), (33, 54, 75),
+ (39, 51, 77), (49, 43, 81), (74, 39, 93), (87, 39, 97),
+ (95, 33, 100), (98, 39, 103), (95, 41, 102), (93, 43, 102),
+ (91, 39, 101), (74, 44, 94), (69, 53, 90), (62, 58, 85),
+ (57, 50, 84), (52, 48, 82), (48, 47, 81), (48, 43, 68),
+ (48, 39, 56), (69, 45, 19), (83, 54, 14), (85, 64, 17),
+ (95, 103, 18), (96, 126, 2), (95, 119, 6), (95, 113, 11),
+ (95, 108, 16), (81, 99, 23), (76, 60, 86), (92, 38, 100),
+ (110, 27, 107), (106, 28, 105), (102, 30, 103), (103, 31, 103),
+ (104, 33, 103), (117, 33, 111), (128, 30, 117), (132, 27, 119),
+ (137, 23, 118), (221, 1, 153), (209, 3, 149), (198, 6, 145),
+ (146, 27, 129), (131, 31, 117), (110, 37, 108), (146, 115, 97),
+ (169, 199, 237), (204, 224, 238), (239, 249, 240), (255, 254, 253),
+ (247, 244, 225), (246, 191, 161), (198, 173, 119), (218, 13, 142),
+ (249, 3, 150), (247, 3, 160), (240, 4, 160), (234, 5, 160),
+ (198, 6, 145), (138, 19, 119), (141, 5, 113), (134, 1, 106),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 1, 1), (23, 30, 56), (45, 45, 79), (46, 56, 81),
+ (38, 49, 77), (31, 41, 71), (25, 34, 65), (27, 9, 33),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (29, 41, 39), (54, 79, 40), (65, 109, 20), (69, 132, 2),
+ (53, 139, 16), (10, 121, 3), (8, 107, 25), (15, 91, 44),
+ (22, 76, 63), (20, 56, 70), (22, 53, 71), (21, 61, 73),
+ (22, 62, 70), (6, 80, 55), (1, 102, 36), (29, 133, 12),
+ (64, 142, 23), (87, 148, 27), (112, 148, 22), (98, 107, 14),
+ (63, 101, 26), (65, 60, 83), (75, 53, 92), (87, 50, 94),
+ (83, 53, 91), (130, 161, 101), (135, 190, 106), (114, 174, 148),
+ (110, 137, 128), (77, 58, 88), (67, 49, 87), (51, 33, 73),
+ (24, 32, 78), (2, 20, 42), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (57, 37, 10),
+ (73, 101, 24), (81, 103, 21), (66, 90, 32), (75, 59, 85),
+ (79, 42, 94), (88, 38, 99), (89, 47, 97), (78, 54, 90),
+ (67, 58, 85), (64, 60, 83), (52, 60, 81), (47, 67, 74),
+ (40, 72, 69), (44, 52, 37), (67, 43, 17), (56, 58, 34),
+ (36, 46, 38), (30, 53, 45), (33, 51, 75), (46, 58, 80)
+ ),
+
+// 198 Apophysis-040427-4ChalLghtDrknss
+((93, 98, 130), (225, 205, 198), (232, 213, 201), (240, 221, 204),
+ (241, 221, 200), (243, 221, 197), (244, 221, 196), (246, 222, 196),
+ (240, 216, 188), (231, 212, 194), (222, 209, 201), (157, 158, 178),
+ (93, 107, 156), (85, 95, 138), (78, 84, 120), (86, 87, 115),
+ (94, 91, 110), (238, 214, 180), (241, 219, 188), (245, 224, 197),
+ (239, 222, 204), (234, 221, 212), (234, 221, 213), (235, 222, 214),
+ (228, 218, 219), (222, 213, 219), (217, 209, 220), (223, 214, 219),
+ (230, 220, 218), (230, 220, 218), (230, 220, 218), (235, 222, 214),
+ (237, 225, 213), (244, 226, 204), (242, 227, 211), (241, 228, 219),
+ (242, 231, 222), (244, 234, 225), (242, 232, 225), (240, 231, 226),
+ (240, 228, 216), (232, 221, 211), (225, 215, 206), (157, 152, 185),
+ (90, 90, 164), (61, 72, 165), (33, 55, 167), (20, 31, 146),
+ (23, 43, 114), (41, 45, 70), (51, 54, 67), (62, 63, 65),
+ (68, 71, 83), (74, 79, 101), (76, 83, 113), (79, 87, 126),
+ (106, 109, 178), (135, 137, 200), (165, 166, 222), (197, 192, 219),
+ (229, 218, 216), (233, 220, 211), (238, 222, 207), (244, 226, 206),
+ (247, 226, 205), (240, 216, 188), (239, 207, 167), (238, 198, 146),
+ (193, 164, 118), (148, 130, 90), (115, 103, 81), (81, 78, 69),
+ (69, 66, 51), (69, 65, 48), (70, 65, 45), (72, 72, 52),
+ (75, 80, 60), (81, 85, 66), (88, 91, 72), (119, 99, 46),
+ (213, 154, 60), (241, 212, 178), (241, 213, 181), (242, 215, 185),
+ (239, 214, 183), (236, 213, 182), (217, 200, 180), (113, 114, 116),
+ (71, 70, 68), (67, 65, 60), (63, 60, 53), (62, 60, 50),
+ (62, 60, 48), (62, 58, 47), (58, 57, 52), (56, 55, 51),
+ (51, 49, 50), (27, 30, 39), (16, 18, 25), (5, 6, 11),
+ (3, 3, 10), (2, 1, 9), (0, 3, 36), (10, 22, 48),
+ (57, 57, 93), (86, 85, 99), (116, 113, 106), (157, 137, 107),
+ (198, 161, 108), (246, 199, 143), (234, 188, 126), (121, 114, 106),
+ (83, 79, 78), (17, 26, 31), (14, 21, 26), (11, 16, 22),
+ (17, 14, 35), (31, 30, 38), (49, 49, 49), (52, 53, 48),
+ (59, 58, 40), (63, 60, 45), (67, 63, 51), (69, 65, 49),
+ (72, 67, 47), (76, 69, 50), (75, 68, 50), (72, 69, 60),
+ (73, 71, 82), (70, 74, 111), (64, 68, 113), (59, 62, 115),
+ (50, 66, 177), (95, 104, 209), (108, 115, 222), (176, 177, 221),
+ (228, 220, 217), (214, 210, 217), (201, 200, 218), (181, 180, 219),
+ (162, 161, 221), (104, 114, 167), (78, 87, 130), (60, 69, 108),
+ (54, 60, 74), (27, 26, 32), (18, 18, 22), (10, 11, 13),
+ (10, 4, 4), (11, 11, 11), (24, 28, 29), (33, 33, 45),
+ (49, 50, 54), (52, 52, 54), (55, 55, 55), (55, 56, 61),
+ (62, 62, 62), (65, 64, 59), (64, 63, 58), (67, 63, 51),
+ (66, 62, 50), (55, 52, 61), (51, 50, 61), (47, 49, 61),
+ (37, 45, 64), (39, 32, 65), (11, 21, 46), (26, 30, 39),
+ (59, 58, 66), (64, 64, 70), (69, 70, 75), (91, 92, 96),
+ (133, 126, 120), (216, 192, 158), (240, 211, 177), (241, 215, 180),
+ (240, 216, 190), (244, 226, 206), (242, 225, 209), (247, 225, 202),
+ (242, 222, 198), (241, 216, 185), (230, 214, 191), (192, 182, 181),
+ (88, 93, 131), (82, 87, 122), (77, 82, 114), (72, 79, 108),
+ (67, 79, 103), (73, 78, 100), (75, 73, 94), (77, 80, 69),
+ (71, 68, 59), (71, 67, 55), (72, 66, 52), (72, 66, 50),
+ (68, 66, 54), (72, 68, 56), (71, 61, 69), (67, 67, 67),
+ (62, 62, 62), (60, 59, 65), (51, 54, 63), (50, 52, 65),
+ (55, 52, 63), (62, 62, 64), (65, 69, 70), (63, 66, 75),
+ (69, 73, 85), (72, 76, 101), (69, 75, 101), (68, 70, 82),
+ (66, 67, 71), (65, 66, 71), (65, 67, 79), (67, 65, 89),
+ (67, 65, 89), (65, 65, 89), (57, 62, 81), (50, 52, 67),
+ (52, 52, 60), (53, 55, 54), (53, 55, 50), (52, 52, 50),
+ (50, 51, 46), (44, 44, 42), (34, 35, 29), (41, 39, 1),
+ (44, 47, 40), (51, 52, 46), (52, 52, 50), (54, 55, 50),
+ (61, 61, 53), (63, 63, 63), (69, 69, 67), (71, 75, 74),
+ (80, 81, 76), (80, 83, 92), (87, 87, 89), (104, 94, 95),
+ (115, 112, 97), (95, 94, 99), (79, 78, 92), (77, 81, 110),
+ (78, 83, 115), (98, 97, 111), (120, 130, 122), (204, 191, 183),
+ (240, 216, 182), (241, 215, 182), (243, 210, 169), (229, 197, 150),
+ (118, 109, 110), (68, 71, 80), (18, 27, 56), (56, 62, 96)
+ ),
+
+// 199 Apophysis-040427-4ChalicDrknsIce
+((153, 141, 41), (36, 39, 30), (25, 32, 35), (14, 26, 40),
+ (12, 28, 49), (11, 31, 58), (11, 33, 62), (12, 35, 67),
+ (105, 106, 111), (131, 131, 127), (158, 156, 143), (163, 161, 154),
+ (168, 167, 165), (169, 168, 167), (170, 170, 170), (171, 171, 170),
+ (173, 172, 170), (168, 168, 168), (167, 168, 176), (166, 169, 184),
+ (164, 167, 193), (162, 166, 203), (165, 168, 194), (168, 171, 186),
+ (171, 173, 185), (174, 176, 184), (178, 179, 184), (175, 176, 183),
+ (173, 173, 183), (169, 167, 182), (166, 161, 181), (158, 164, 180),
+ (160, 163, 170), (160, 155, 133), (155, 149, 118), (151, 143, 104),
+ (92, 93, 77), (34, 43, 50), (27, 36, 45), (21, 29, 40),
+ (10, 24, 35), (9, 25, 40), (9, 26, 46), (10, 30, 56),
+ (11, 34, 66), (10, 34, 68), (9, 35, 70), (14, 58, 129),
+ (102, 116, 161), (160, 157, 148), (160, 159, 154), (161, 161, 161),
+ (162, 161, 164), (163, 162, 167), (164, 164, 166), (166, 166, 166),
+ (166, 173, 179), (174, 178, 181), (183, 183, 183), (192, 193, 191),
+ (201, 203, 200), (201, 202, 203), (202, 201, 207), (201, 204, 223),
+ (198, 203, 225), (179, 180, 184), (157, 155, 160), (135, 130, 136),
+ (114, 110, 116), (93, 90, 97), (25, 42, 60), (11, 31, 56),
+ (15, 31, 47), (52, 58, 61), (89, 85, 76), (121, 116, 101),
+ (153, 148, 126), (156, 154, 136), (159, 161, 147), (164, 177, 149),
+ (173, 171, 158), (181, 178, 143), (178, 172, 138), (176, 167, 134),
+ (167, 162, 135), (158, 157, 137), (153, 158, 136), (163, 161, 149),
+ (174, 178, 163), (186, 189, 175), (199, 201, 187), (201, 199, 185),
+ (203, 197, 183), (223, 209, 172), (214, 204, 145), (201, 188, 153),
+ (186, 182, 171), (163, 166, 181), (161, 164, 175), (159, 162, 169),
+ (159, 160, 165), (159, 159, 161), (148, 156, 145), (142, 143, 129),
+ (11, 48, 101), (19, 64, 142), (27, 80, 184), (38, 88, 193),
+ (49, 96, 202), (91, 117, 192), (105, 124, 183), (141, 150, 183),
+ (150, 155, 161), (144, 145, 150), (114, 120, 143), (84, 96, 136),
+ (28, 42, 68), (13, 33, 60), (9, 29, 56), (7, 25, 47),
+ (5, 22, 40), (7, 21, 36), (9, 21, 33), (9, 19, 28),
+ (10, 17, 23), (8, 15, 21), (14, 19, 25), (18, 26, 28),
+ (38, 40, 27), (106, 117, 83), (129, 130, 95), (152, 144, 107),
+ (179, 164, 143), (195, 192, 183), (221, 213, 194), (233, 221, 199),
+ (241, 226, 193), (226, 217, 209), (212, 208, 225), (208, 209, 228),
+ (204, 210, 232), (233, 227, 241), (238, 232, 244), (224, 225, 207),
+ (218, 221, 202), (190, 187, 180), (186, 181, 178), (182, 176, 176),
+ (168, 168, 166), (162, 158, 146), (146, 143, 128), (116, 116, 106),
+ (27, 36, 45), (33, 37, 43), (39, 39, 41), (93, 96, 85),
+ (124, 125, 120), (153, 150, 141), (185, 172, 163), (195, 191, 182),
+ (206, 202, 201), (212, 206, 218), (208, 202, 214), (205, 199, 211),
+ (185, 185, 193), (186, 186, 188), (178, 179, 184), (173, 174, 179),
+ (175, 175, 177), (176, 176, 175), (177, 178, 173), (182, 179, 172),
+ (185, 177, 175), (191, 181, 171), (190, 181, 172), (186, 185, 181),
+ (187, 185, 186), (182, 183, 188), (181, 181, 191), (181, 180, 198),
+ (183, 184, 189), (183, 183, 185), (183, 183, 183), (178, 177, 182),
+ (173, 173, 181), (172, 172, 180), (171, 171, 179), (173, 173, 173),
+ (174, 171, 166), (168, 167, 163), (175, 172, 163), (177, 175, 152),
+ (180, 174, 138), (162, 157, 138), (159, 159, 151), (163, 162, 158),
+ (167, 168, 163), (172, 172, 164), (167, 167, 159), (167, 164, 155),
+ (154, 153, 133), (149, 136, 119), (118, 119, 113), (75, 75, 63),
+ (34, 44, 43), (19, 28, 35), (15, 24, 31), (13, 22, 29),
+ (13, 22, 29), (8, 18, 30), (7, 17, 27), (4, 16, 28),
+ (7, 19, 31), (6, 20, 33), (6, 19, 35), (11, 23, 35),
+ (13, 22, 31), (14, 23, 30), (14, 24, 36), (15, 24, 41),
+ (7, 24, 42), (11, 26, 45), (8, 30, 54), (7, 30, 61),
+ (9, 29, 56), (12, 28, 53), (9, 27, 51), (11, 29, 53),
+ (11, 30, 60), (11, 35, 69), (55, 59, 94), (93, 108, 151),
+ (134, 146, 188), (151, 158, 186), (162, 159, 150), (154, 143, 115),
+ (142, 132, 79), (75, 74, 26), (55, 56, 25), (37, 41, 26),
+ (19, 27, 29), (18, 26, 29), (18, 26, 28), (17, 25, 27),
+ (15, 24, 29), (17, 24, 30), (18, 26, 29), (24, 33, 40),
+ (48, 51, 24), (61, 63, 24), (143, 133, 38), (164, 149, 48),
+ (201, 178, 64), (177, 156, 101), (158, 150, 113), (143, 140, 121)
+ ),
+
+// 200 Apophysis-040427-4CactusFlwer
+((130, 133, 104), (131, 131, 103), (155, 120, 100), (180, 110, 98),
+ (191, 135, 116), (202, 160, 135), (189, 164, 134), (177, 169, 133),
+ (134, 134, 108), (128, 126, 108), (122, 118, 109), (119, 123, 100),
+ (116, 128, 92), (118, 118, 84), (120, 109, 77), (117, 106, 77),
+ (114, 104, 77), (123, 97, 84), (129, 99, 78), (135, 101, 73),
+ (123, 106, 73), (111, 111, 73), (111, 112, 73), (111, 113, 74),
+ (97, 121, 63), (93, 105, 58), (90, 90, 54), (94, 94, 63),
+ (99, 99, 73), (101, 101, 78), (104, 103, 83), (124, 106, 104),
+ (132, 126, 114), (183, 182, 162), (216, 203, 200), (249, 225, 239),
+ (235, 205, 212), (222, 186, 186), (227, 167, 162), (233, 149, 138),
+ (151, 133, 97), (133, 124, 89), (115, 116, 82), (122, 120, 91),
+ (129, 125, 100), (135, 126, 108), (142, 128, 117), (169, 168, 147),
+ (190, 189, 171), (201, 198, 215), (211, 216, 218), (221, 235, 222),
+ (215, 231, 215), (210, 227, 208), (207, 216, 200), (205, 206, 192),
+ (178, 198, 186), (171, 195, 163), (164, 192, 141), (164, 197, 159),
+ (165, 203, 178), (175, 193, 174), (186, 184, 171), (181, 180, 162),
+ (170, 171, 153), (124, 132, 134), (108, 117, 107), (93, 102, 81),
+ (91, 92, 72), (90, 83, 64), (91, 73, 59), (70, 71, 53),
+ (61, 61, 51), (60, 56, 43), (60, 51, 36), (61, 51, 34),
+ (63, 52, 32), (66, 58, 32), (70, 65, 33), (77, 74, 41),
+ (78, 87, 56), (117, 121, 96), (136, 137, 116), (155, 154, 136),
+ (158, 157, 135), (161, 161, 135), (157, 157, 129), (155, 148, 104),
+ (115, 130, 73), (104, 105, 60), (94, 81, 47), (86, 78, 45),
+ (78, 75, 44), (80, 77, 42), (98, 63, 25), (106, 73, 32),
+ (104, 84, 49), (111, 114, 93), (122, 129, 116), (134, 145, 139),
+ (149, 154, 139), (164, 164, 140), (172, 172, 148), (176, 175, 154),
+ (189, 182, 153), (175, 173, 149), (162, 165, 146), (142, 159, 142),
+ (122, 154, 139), (107, 120, 113), (88, 106, 92), (84, 92, 71),
+ (78, 82, 55), (79, 100, 59), (87, 98, 62), (95, 96, 65),
+ (105, 109, 76), (117, 127, 102), (123, 146, 118), (156, 167, 133),
+ (162, 162, 138), (149, 150, 116), (137, 138, 94), (133, 123, 87),
+ (130, 109, 80), (134, 89, 60), (146, 72, 69), (123, 74, 60),
+ (122, 83, 42), (68, 52, 36), (63, 46, 27), (59, 41, 19),
+ (29, 20, 11), (27, 21, 0), (20, 20, 8), (20, 20, 8),
+ (24, 24, 12), (36, 35, 19), (49, 47, 26), (52, 46, 25),
+ (56, 45, 25), (53, 43, 16), (42, 39, 6), (48, 46, 0),
+ (62, 53, 0), (55, 52, 19), (56, 52, 20), (57, 52, 22),
+ (54, 56, 34), (63, 64, 32), (66, 68, 31), (66, 65, 37),
+ (72, 72, 46), (68, 70, 44), (65, 69, 42), (62, 65, 38),
+ (61, 61, 35), (45, 51, 37), (39, 44, 21), (29, 32, 21),
+ (24, 28, 11), (43, 59, 32), (50, 61, 36), (58, 63, 41),
+ (82, 78, 49), (106, 87, 54), (112, 94, 72), (108, 109, 75),
+ (110, 116, 56), (109, 109, 58), (108, 103, 61), (105, 106, 75),
+ (114, 97, 67), (129, 111, 49), (131, 97, 33), (136, 105, 59),
+ (138, 118, 65), (148, 113, 81), (151, 110, 80), (161, 101, 90),
+ (143, 126, 100), (129, 104, 97), (110, 96, 83), (90, 90, 54),
+ (64, 74, 37), (62, 69, 32), (61, 65, 28), (65, 63, 22),
+ (60, 66, 28), (57, 63, 35), (58, 67, 36), (70, 71, 40),
+ (78, 77, 46), (91, 91, 55), (99, 99, 75), (106, 97, 92),
+ (128, 109, 102), (133, 130, 115), (161, 161, 137), (194, 177, 147),
+ (227, 215, 81), (238, 224, 65), (229, 215, 67), (161, 183, 118),
+ (172, 169, 134), (172, 171, 151), (174, 158, 158), (169, 157, 159),
+ (134, 154, 189), (163, 163, 175), (186, 184, 169), (186, 187, 173),
+ (193, 194, 178), (189, 200, 192), (225, 217, 181), (254, 252, 178),
+ (255, 252, 199), (250, 247, 228), (238, 254, 243), (238, 246, 255),
+ (224, 230, 252), (233, 244, 250), (254, 255, 197), (255, 244, 144),
+ (249, 225, 115), (255, 252, 103), (248, 246, 145), (222, 201, 174),
+ (198, 160, 149), (188, 150, 139), (160, 131, 117), (136, 135, 104),
+ (130, 131, 100), (130, 125, 96), (128, 114, 85), (106, 100, 78),
+ (93, 97, 72), (92, 91, 60), (94, 77, 59), (96, 74, 60),
+ (76, 71, 49), (69, 71, 47), (59, 63, 40), (62, 55, 39),
+ (45, 54, 33), (46, 49, 20), (43, 43, 15), (50, 51, 17),
+ (57, 57, 21), (70, 75, 34), (90, 89, 24), (97, 90, 48),
+ (96, 97, 66), (102, 103, 72), (107, 108, 74), (151, 142, 113)
+ ),
+
+// 201 Apophysis-040427-4ChrryBlssmT
+((254, 188, 202), (254, 220, 208), (253, 227, 196), (253, 235, 185),
+ (230, 212, 157), (208, 189, 130), (171, 179, 118), (135, 170, 106),
+ (31, 109, 83), (62, 136, 109), (94, 164, 136), (152, 177, 136),
+ (211, 190, 137), (233, 197, 148), (255, 204, 159), (255, 211, 173),
+ (255, 218, 187), (255, 225, 212), (253, 224, 211), (252, 224, 210),
+ (240, 212, 192), (228, 201, 174), (223, 199, 159), (218, 198, 145),
+ (208, 178, 128), (211, 183, 132), (214, 188, 137), (221, 205, 151),
+ (228, 223, 165), (231, 228, 170), (235, 233, 176), (235, 233, 176),
+ (233, 233, 179), (235, 235, 181), (233, 230, 174), (231, 226, 168),
+ (225, 215, 158), (219, 204, 149), (216, 195, 142), (213, 187, 136),
+ (208, 174, 128), (205, 169, 122), (202, 164, 117), (173, 149, 128),
+ (145, 134, 140), (124, 135, 130), (103, 137, 120), (47, 101, 75),
+ (11, 50, 32), (38, 21, 5), (32, 10, 15), (27, 0, 26),
+ (35, 3, 38), (44, 7, 50), (45, 19, 54), (47, 31, 58),
+ (103, 114, 84), (163, 165, 119), (223, 217, 155), (238, 224, 183),
+ (253, 232, 211), (254, 231, 212), (255, 230, 213), (252, 237, 206),
+ (252, 241, 211), (241, 243, 196), (230, 224, 173), (220, 205, 150),
+ (214, 190, 143), (209, 175, 137), (220, 139, 148), (228, 122, 145),
+ (234, 111, 174), (242, 134, 181), (250, 157, 188), (249, 161, 189),
+ (248, 165, 191), (227, 151, 179), (206, 137, 168), (198, 135, 164),
+ (198, 147, 144), (202, 164, 117), (202, 166, 120), (203, 169, 123),
+ (203, 170, 124), (204, 172, 125), (206, 176, 126), (211, 181, 131),
+ (229, 215, 150), (224, 220, 171), (219, 226, 193), (235, 223, 201),
+ (252, 220, 209), (255, 207, 203), (254, 197, 203), (248, 186, 191),
+ (251, 172, 177), (199, 161, 114), (194, 149, 106), (190, 138, 98),
+ (190, 136, 98), (191, 135, 98), (188, 129, 95), (187, 128, 94),
+ (180, 120, 86), (184, 113, 76), (188, 106, 66), (176, 88, 51),
+ (164, 71, 37), (111, 38, 19), (108, 24, 24), (37, 11, 36),
+ (10, 0, 53), (8, 0, 52), (10, 0, 43), (12, 0, 34),
+ (18, 16, 21), (0, 19, 38), (10, 59, 64), (62, 113, 57),
+ (191, 139, 99), (183, 137, 118), (176, 136, 137), (134, 131, 128),
+ (92, 127, 120), (60, 85, 81), (57, 41, 67), (41, 31, 58),
+ (28, 7, 48), (15, 39, 77), (32, 53, 76), (49, 68, 75),
+ (53, 111, 99), (79, 150, 120), (102, 161, 129), (137, 179, 143),
+ (180, 140, 149), (193, 156, 137), (207, 173, 125), (211, 177, 134),
+ (215, 181, 143), (237, 195, 181), (230, 194, 198), (246, 194, 206),
+ (252, 193, 211), (253, 196, 202), (250, 191, 198), (248, 187, 195),
+ (255, 188, 183), (255, 166, 166), (216, 175, 143), (197, 148, 131),
+ (102, 76, 89), (77, 58, 77), (53, 41, 65), (40, 13, 48),
+ (19, 1, 53), (12, 2, 52), (6, 0, 53), (3, 0, 53),
+ (3, 0, 53), (1, 50, 46), (7, 53, 30), (14, 57, 14),
+ (8, 96, 38), (56, 82, 17), (45, 111, 37), (109, 112, 93),
+ (184, 124, 90), (180, 113, 82), (177, 103, 74), (154, 78, 46),
+ (110, 71, 32), (54, 34, 36), (33, 29, 44), (47, 36, 66),
+ (71, 64, 72), (171, 113, 75), (224, 99, 93), (214, 140, 91),
+ (199, 156, 113), (204, 168, 120), (204, 170, 124), (206, 172, 124),
+ (203, 166, 121), (200, 160, 115), (198, 155, 110), (191, 142, 101),
+ (191, 139, 99), (187, 128, 94), (185, 132, 92), (162, 164, 81),
+ (157, 175, 117), (119, 173, 147), (140, 182, 132), (194, 193, 129),
+ (223, 210, 155), (232, 227, 171), (235, 242, 191), (243, 245, 195),
+ (248, 247, 203), (253, 245, 206), (251, 243, 207), (250, 239, 207),
+ (253, 228, 208), (254, 214, 206), (255, 204, 195), (241, 177, 194),
+ (251, 163, 188), (228, 132, 170), (195, 128, 135), (111, 84, 63),
+ (70, 40, 52), (41, 48, 17), (56, 74, 16), (142, 101, 49),
+ (177, 114, 81), (196, 147, 106), (210, 181, 137), (232, 215, 163),
+ (233, 234, 176), (246, 244, 196), (249, 244, 204), (253, 242, 212),
+ (255, 242, 207), (254, 240, 203), (236, 236, 182), (228, 222, 164),
+ (218, 196, 139), (208, 177, 130), (203, 167, 119), (200, 157, 114),
+ (196, 151, 109), (194, 150, 105), (196, 151, 109), (195, 146, 114),
+ (197, 152, 113), (198, 155, 112), (216, 156, 122), (225, 169, 122),
+ (250, 159, 156), (242, 194, 180), (239, 241, 194), (247, 246, 202),
+ (250, 246, 217), (252, 244, 223), (249, 255, 216), (242, 251, 206),
+ (245, 247, 200), (245, 247, 197), (241, 243, 193), (235, 235, 181),
+ (232, 233, 175), (230, 231, 173), (223, 212, 156), (228, 230, 165)
+ ),
+
+// 202 Apophysis-040427-4ChrryBlssm2
+((221, 222, 178), (228, 234, 188), (234, 236, 177), (241, 238, 167),
+ (246, 227, 171), (252, 217, 175), (253, 199, 183), (255, 182, 191),
+ (253, 202, 207), (254, 210, 220), (255, 219, 234), (255, 220, 223),
+ (255, 222, 213), (252, 232, 213), (250, 243, 214), (248, 244, 212),
+ (246, 246, 210), (250, 244, 222), (251, 243, 223), (253, 242, 224),
+ (246, 244, 214), (239, 246, 205), (238, 245, 202), (237, 244, 200),
+ (233, 238, 198), (229, 234, 190), (225, 231, 183), (208, 211, 169),
+ (191, 191, 155), (173, 186, 143), (155, 182, 131), (85, 149, 115),
+ (0, 88, 106), (0, 44, 75), (35, 73, 99), (70, 102, 123),
+ (126, 166, 151), (183, 231, 179), (196, 239, 189), (209, 247, 200),
+ (237, 241, 206), (244, 242, 219), (252, 244, 233), (253, 246, 235),
+ (255, 249, 238), (255, 246, 232), (255, 243, 227), (251, 241, 214),
+ (246, 243, 208), (231, 239, 192), (229, 236, 189), (227, 233, 187),
+ (220, 220, 177), (213, 208, 168), (205, 193, 157), (198, 179, 147),
+ (165, 111, 101), (94, 72, 59), (23, 34, 17), (11, 53, 8),
+ (0, 73, 0), (0, 80, 34), (0, 87, 69), (78, 121, 112),
+ (124, 162, 125), (91, 169, 121), (45, 139, 118), (0, 110, 116),
+ (27, 118, 129), (55, 127, 142), (129, 141, 139), (180, 152, 130),
+ (198, 169, 125), (205, 194, 124), (213, 219, 123), (219, 224, 151),
+ (225, 229, 179), (225, 230, 182), (226, 232, 186), (229, 235, 191),
+ (230, 236, 190), (228, 236, 189), (226, 232, 186), (225, 228, 183),
+ (223, 225, 181), (222, 223, 179), (217, 216, 172), (197, 198, 164),
+ (199, 180, 148), (202, 186, 151), (206, 192, 155), (205, 193, 155),
+ (204, 195, 156), (227, 203, 159), (228, 189, 150), (216, 160, 133),
+ (239, 129, 142), (235, 108, 179), (215, 115, 173), (196, 123, 168),
+ (179, 117, 134), (162, 112, 101), (65, 78, 87), (31, 34, 69),
+ (0, 0, 64), (0, 3, 64), (1, 7, 65), (0, 14, 66),
+ (0, 21, 68), (44, 64, 91), (111, 114, 123), (169, 126, 110),
+ (171, 123, 109), (76, 100, 100), (66, 75, 68), (56, 50, 36),
+ (36, 15, 46), (0, 3, 48), (1, 1, 51), (0, 0, 52),
+ (0, 1, 58), (0, 13, 66), (0, 26, 75), (0, 35, 72),
+ (1, 45, 70), (39, 81, 80), (159, 137, 96), (176, 137, 120),
+ (185, 153, 132), (195, 172, 141), (194, 169, 140), (193, 167, 140),
+ (187, 157, 131), (184, 152, 131), (184, 150, 125), (186, 156, 130),
+ (194, 171, 140), (200, 182, 148), (207, 193, 156), (220, 195, 155),
+ (234, 197, 155), (249, 217, 170), (253, 207, 207), (253, 203, 214),
+ (253, 196, 213), (222, 200, 213), (220, 203, 198), (219, 207, 183),
+ (193, 163, 175), (187, 155, 134), (179, 137, 121), (180, 117, 136),
+ (118, 21, 30), (95, 18, 22), (72, 16, 15), (34, 16, 2),
+ (20, 32, 8), (22, 63, 57), (89, 113, 97), (176, 138, 119),
+ (198, 179, 147), (223, 229, 183), (222, 228, 182), (222, 228, 182),
+ (207, 203, 158), (196, 173, 142), (180, 142, 123), (176, 96, 109),
+ (85, 33, 22), (69, 20, 21), (54, 8, 21), (39, 0, 8),
+ (14, 8, 34), (0, 0, 47), (0, 0, 56), (1, 0, 57),
+ (1, 1, 55), (0, 0, 52), (0, 1, 47), (0, 26, 11),
+ (0, 32, 0), (0, 5, 0), (23, 0, 12), (30, 0, 5),
+ (33, 22, 4), (20, 23, 5), (8, 25, 6), (0, 14, 38),
+ (0, 28, 61), (0, 34, 83), (4, 67, 98), (59, 127, 146),
+ (151, 132, 138), (175, 133, 117), (174, 132, 116), (124, 148, 86),
+ (33, 83, 74), (17, 18, 62), (1, 5, 69), (0, 0, 57),
+ (0, 0, 56), (0, 0, 56), (1, 1, 61), (2, 1, 71),
+ (0, 4, 71), (0, 13, 68), (12, 28, 62), (55, 89, 101),
+ (167, 117, 106), (216, 101, 140), (228, 102, 149), (244, 139, 146),
+ (253, 144, 186), (255, 144, 193), (247, 131, 194), (255, 141, 215),
+ (251, 151, 205), (255, 157, 198), (252, 178, 213), (254, 190, 214),
+ (254, 209, 214), (254, 216, 215), (254, 221, 212), (248, 220, 206),
+ (238, 210, 198), (227, 210, 194), (218, 217, 173), (211, 203, 164),
+ (199, 180, 148), (195, 169, 146), (190, 158, 137), (180, 142, 123),
+ (178, 140, 121), (129, 145, 108), (80, 111, 103), (18, 59, 61),
+ (0, 53, 56), (0, 74, 88), (17, 127, 128), (107, 157, 132),
+ (142, 161, 97), (168, 163, 121), (190, 160, 134), (193, 169, 141),
+ (225, 162, 181), (222, 133, 179), (225, 137, 187), (255, 183, 207),
+ (251, 211, 212), (253, 224, 216), (251, 243, 206), (240, 237, 204),
+ (238, 246, 199), (237, 245, 198), (232, 239, 195), (227, 233, 187)
+ ),
+
+// 203 Apophysis-040427-4CircAmbr
+((40, 17, 1), (38, 16, 2), (40, 16, 2), (43, 17, 2),
+ (49, 20, 1), (55, 23, 0), (65, 26, 3), (75, 29, 6),
+ (124, 75, 6), (155, 99, 9), (187, 123, 13), (209, 138, 26),
+ (231, 154, 40), (215, 142, 29), (200, 130, 18), (197, 123, 13),
+ (194, 117, 9), (155, 90, 0), (156, 87, 1), (157, 85, 3),
+ (177, 105, 6), (197, 126, 10), (202, 129, 15), (208, 132, 20),
+ (222, 145, 29), (212, 138, 18), (202, 131, 7), (176, 109, 3),
+ (151, 87, 0), (130, 72, 0), (110, 58, 0), (88, 43, 1),
+ (60, 24, 0), (86, 37, 4), (119, 63, 2), (153, 89, 1),
+ (198, 127, 27), (243, 165, 54), (248, 173, 63), (253, 181, 73),
+ (253, 184, 80), (238, 165, 55), (224, 147, 31), (216, 138, 25),
+ (208, 130, 19), (206, 131, 20), (204, 132, 21), (198, 122, 12),
+ (172, 98, 3), (114, 89, 49), (91, 61, 25), (69, 33, 1),
+ (59, 26, 1), (49, 20, 2), (48, 19, 1), (47, 19, 0),
+ (44, 18, 1), (43, 17, 1), (42, 16, 1), (42, 16, 1),
+ (42, 16, 1), (42, 16, 1), (42, 16, 1), (42, 16, 1),
+ (42, 16, 1), (42, 16, 1), (42, 15, 1), (42, 14, 2),
+ (41, 14, 1), (40, 14, 0), (40, 14, 0), (39, 16, 0),
+ (38, 15, 0), (38, 15, 0), (38, 15, 1), (38, 15, 0),
+ (38, 15, 0), (38, 15, 0), (39, 16, 0), (42, 15, 0),
+ (43, 14, 0), (42, 16, 1), (42, 16, 0), (43, 17, 0),
+ (43, 18, 0), (44, 19, 0), (44, 19, 0), (45, 18, 1),
+ (45, 18, 1), (45, 18, 1), (45, 18, 1), (45, 18, 1),
+ (45, 18, 1), (45, 18, 1), (45, 18, 0), (46, 19, 0),
+ (49, 21, 0), (68, 29, 0), (93, 46, 1), (118, 64, 2),
+ (132, 72, 5), (147, 80, 9), (156, 109, 39), (142, 134, 87),
+ (255, 195, 97), (254, 202, 107), (253, 210, 118), (252, 211, 121),
+ (252, 212, 125), (234, 211, 131), (252, 225, 158), (251, 218, 123),
+ (251, 206, 113), (228, 150, 39), (212, 136, 26), (197, 123, 14),
+ (159, 95, 7), (130, 72, 0), (106, 55, 0), (75, 35, 0),
+ (47, 18, 0), (43, 17, 0), (39, 16, 0), (38, 15, 0),
+ (38, 15, 1), (38, 15, 1), (39, 16, 0), (39, 16, 0),
+ (39, 16, 0), (43, 17, 0), (43, 17, 0), (44, 17, 0),
+ (44, 17, 0), (44, 18, 1), (45, 18, 1), (45, 18, 1),
+ (47, 19, 0), (47, 19, 0), (48, 20, 0), (48, 21, 0),
+ (49, 22, 0), (52, 21, 0), (52, 21, 0), (52, 21, 0),
+ (52, 21, 0), (48, 20, 0), (47, 19, 0), (46, 19, 0),
+ (45, 18, 0), (43, 17, 0), (42, 16, 0), (39, 16, 0),
+ (39, 16, 0), (39, 16, 0), (39, 16, 0), (39, 16, 0),
+ (39, 16, 0), (42, 16, 0), (43, 17, 0), (44, 17, 0),
+ (44, 17, 0), (45, 18, 1), (45, 18, 1), (45, 18, 1),
+ (45, 18, 1), (45, 18, 1), (45, 18, 1), (45, 18, 1),
+ (47, 18, 0), (47, 18, 0), (48, 19, 1), (50, 22, 1),
+ (49, 20, 2), (93, 46, 4), (108, 58, 9), (113, 55, 5),
+ (101, 51, 0), (75, 37, 1), (60, 24, 0), (52, 21, 0),
+ (52, 21, 0), (48, 20, 0), (45, 18, 0), (45, 18, 1),
+ (46, 19, 0), (46, 19, 0), (47, 20, 0), (52, 21, 1),
+ (61, 25, 0), (73, 33, 0), (94, 47, 5), (108, 56, 0),
+ (110, 58, 0), (111, 56, 0), (97, 49, 0), (72, 28, 0),
+ (58, 23, 1), (53, 22, 2), (51, 20, 0), (45, 18, 0),
+ (43, 17, 0), (42, 16, 1), (42, 16, 1), (42, 16, 1),
+ (43, 16, 0), (43, 17, 0), (43, 17, 0), (43, 17, 0),
+ (42, 16, 1), (41, 15, 0), (39, 16, 0), (39, 16, 0),
+ (39, 16, 0), (39, 16, 0), (41, 15, 0), (44, 15, 0),
+ (49, 13, 0), (52, 18, 0), (53, 21, 0), (60, 24, 0),
+ (82, 38, 0), (101, 50, 3), (109, 58, 1), (119, 65, 3),
+ (137, 78, 0), (147, 81, 3), (160, 90, 2), (142, 84, 2),
+ (133, 74, 0), (132, 74, 1), (119, 83, 9), (125, 71, 0),
+ (123, 68, 1), (114, 67, 0), (87, 54, 0), (70, 31, 0),
+ (56, 26, 2), (51, 20, 0), (47, 18, 0), (44, 17, 0),
+ (42, 16, 0), (39, 16, 0), (38, 15, 1), (37, 15, 1),
+ (37, 15, 1), (37, 15, 1), (35, 14, 0), (28, 8, 0),
+ (36, 12, 0), (37, 15, 1), (37, 15, 1), (37, 15, 1),
+ (38, 15, 1), (38, 17, 0), (39, 18, 1), (41, 20, 3)
+ ),
+
+// 204 Apophysis-040427-4CsmcOwl
+((63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (52, 37, 138), (36, 20, 87), (21, 4, 36), (10, 2, 18),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 1), (4, 0, 22), (7, 0, 44),
+ (5, 0, 57), (4, 1, 70), (12, 4, 83), (20, 7, 97),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (67, 52, 157), (116, 104, 187), (166, 156, 217), (140, 130, 208),
+ (115, 104, 200), (89, 76, 177), (64, 49, 154), (63, 47, 154),
+ (63, 47, 154), (85, 82, 113), (115, 100, 92), (145, 118, 71),
+ (167, 114, 74), (190, 110, 77), (178, 108, 87), (166, 106, 98),
+ (66, 55, 147), (64, 51, 150), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (69, 51, 171),
+ (134, 121, 211), (203, 197, 211), (209, 201, 206), (216, 205, 201),
+ (211, 203, 206), (207, 201, 211), (204, 185, 205), (179, 171, 220),
+ (36, 191, 193), (48, 214, 164), (61, 237, 136), (62, 170, 136),
+ (63, 104, 136), (63, 75, 145), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 44, 152),
+ (23, 17, 63), (11, 11, 31), (0, 5, 0), (0, 4, 0),
+ (1, 3, 0), (3, 0, 28), (28, 10, 60), (22, 9, 97),
+ (59, 43, 152), (63, 47, 154), (62, 46, 153), (61, 45, 152),
+ (50, 35, 137), (40, 26, 123), (36, 0, 68), (32, 19, 26),
+ (4, 29, 0), (45, 30, 1), (87, 32, 2), (96, 30, 1),
+ (106, 29, 0), (104, 29, 8), (133, 11, 32), (120, 9, 41),
+ (105, 3, 68), (61, 45, 154), (53, 36, 147), (45, 28, 140),
+ (17, 4, 92), (5, 0, 64), (0, 0, 44), (3, 3, 31),
+ (21, 0, 63), (29, 14, 97), (37, 29, 132), (49, 37, 142),
+ (62, 46, 153), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (138, 115, 187), (157, 130, 174), (177, 146, 161),
+ (215, 185, 177), (164, 160, 174), (94, 158, 170), (80, 160, 151),
+ (128, 104, 78), (145, 91, 59), (162, 78, 41), (148, 73, 33),
+ (135, 68, 26), (69, 72, 65), (58, 65, 109), (63, 47, 154),
+ (63, 47, 154), (57, 65, 114), (72, 73, 97), (87, 81, 81),
+ (121, 98, 56), (168, 136, 51), (214, 133, 42), (228, 114, 17),
+ (190, 110, 75), (192, 112, 80), (194, 115, 85), (185, 182, 103),
+ (225, 183, 169), (211, 197, 196), (215, 186, 178), (216, 167, 153),
+ (213, 154, 136), (192, 113, 82), (170, 110, 82), (149, 107, 83),
+ (88, 86, 63), (77, 95, 99), (87, 127, 126), (108, 108, 198),
+ (100, 83, 195), (81, 66, 176), (62, 49, 157), (63, 47, 154),
+ (63, 47, 154), (70, 48, 95), (60, 48, 148), (63, 47, 154),
+ (69, 50, 142), (114, 84, 56), (142, 57, 37), (136, 52, 16),
+ (136, 52, 15), (128, 40, 2), (111, 32, 2), (105, 37, 2),
+ (81, 18, 45), (73, 9, 66), (66, 0, 87), (61, 46, 151),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (67, 55, 103), (76, 43, 62),
+ (101, 44, 24), (111, 18, 62), (62, 47, 152), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (61, 46, 149), (44, 42, 63), (62, 56, 4), (68, 40, 0),
+ (65, 36, 4), (37, 22, 27), (29, 0, 2), (6, 0, 4),
+ (33, 2, 0), (70, 7, 0), (88, 1, 0), (118, 32, 0),
+ (132, 48, 4), (134, 49, 12), (132, 57, 28), (94, 56, 81),
+ (70, 48, 149), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154),
+ (63, 47, 154), (63, 47, 154), (63, 47, 154), (63, 47, 154)
+ ),
+
+// 205 Apophysis-040427-4DblBeetle
+((174, 77, 26), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (177, 80, 29), (174, 77, 26),
+ (174, 77, 26), (175, 77, 25), (177, 77, 25), (179, 80, 29),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (174, 77, 26),
+ (171, 74, 23), (68, 29, 92), (37, 22, 118), (7, 16, 145),
+ (20, 31, 164), (33, 46, 184), (43, 56, 181), (54, 66, 178),
+ (40, 48, 157), (56, 40, 122), (72, 33, 88), (123, 55, 57),
+ (174, 77, 26), (177, 80, 29), (181, 84, 33), (181, 84, 33),
+ (188, 93, 35), (192, 92, 40), (200, 100, 47), (208, 109, 54),
+ (158, 108, 120), (109, 108, 186), (110, 117, 202), (111, 126, 219),
+ (204, 176, 190), (224, 171, 137), (245, 167, 84), (227, 138, 68),
+ (209, 110, 53), (200, 101, 46), (192, 92, 40), (173, 76, 25),
+ (140, 48, 0), (55, 0, 58), (67, 5, 47), (80, 10, 36),
+ (108, 27, 18), (136, 45, 1), (173, 76, 25), (174, 77, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (183, 84, 33),
+ (192, 92, 40), (200, 100, 47), (208, 109, 54), (216, 117, 60),
+ (231, 132, 75), (240, 167, 122), (245, 156, 107), (250, 146, 93),
+ (247, 146, 91), (245, 146, 89), (228, 129, 72), (223, 123, 71),
+ (201, 106, 48), (196, 98, 43), (191, 91, 39), (186, 87, 36),
+ (181, 84, 33), (174, 77, 26), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (130, 100, 110), (128, 109, 120), (127, 119, 130),
+ (147, 118, 113), (168, 117, 96), (200, 100, 48), (192, 92, 40),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (174, 77, 26),
+ (147, 52, 4), (83, 26, 43), (19, 0, 82), (11, 1, 97),
+ (3, 3, 113), (0, 8, 132), (5, 14, 131), (20, 23, 94),
+ (67, 2, 45), (171, 74, 23), (172, 75, 24), (174, 77, 26),
+ (180, 87, 26), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (211, 98, 32), (204, 98, 37), (197, 98, 43), (198, 99, 45),
+ (200, 100, 48), (199, 99, 47), (192, 92, 40), (192, 92, 40),
+ (192, 92, 40), (192, 92, 40), (192, 92, 40), (192, 92, 40),
+ (191, 91, 39), (191, 91, 39), (186, 89, 36), (181, 84, 33),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (174, 77, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (181, 84, 33), (181, 84, 33), (174, 77, 26), (174, 77, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (174, 77, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (173, 76, 25),
+ (94, 22, 7), (73, 13, 33), (52, 5, 59), (18, 9, 88),
+ (5, 13, 94), (1, 14, 108), (16, 26, 95), (40, 8, 73),
+ (118, 47, 45), (174, 77, 26), (174, 77, 26), (173, 75, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (174, 77, 26),
+ (181, 84, 33), (181, 84, 33), (181, 84, 33), (181, 84, 33),
+ (184, 87, 34), (192, 92, 40), (200, 100, 48), (208, 109, 52),
+ (234, 147, 70), (238, 191, 135), (253, 245, 164), (255, 248, 178),
+ (212, 211, 219), (203, 216, 233), (164, 160, 211), (153, 181, 202),
+ (182, 178, 141), (174, 110, 64), (195, 98, 45), (192, 92, 40),
+ (181, 84, 33), (179, 82, 29), (174, 77, 26), (174, 77, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (174, 77, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (174, 77, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (174, 77, 26),
+ (174, 77, 26), (174, 77, 26), (174, 77, 26), (174, 77, 26),
+ (181, 84, 33), (109, 97, 111), (63, 76, 190), (48, 72, 198),
+ (66, 81, 226), (67, 80, 236), (115, 124, 251), (134, 135, 251),
+ (132, 147, 240), (107, 122, 249), (74, 85, 201), (66, 78, 196),
+ (65, 76, 194), (84, 91, 179), (119, 88, 147), (90, 75, 94)
+ ),
+
+// 206 Apophysis-040427-4DrkMantis
+((45, 96, 1), (96, 132, 0), (69, 113, 0), (43, 94, 1),
+ (37, 90, 0), (31, 87, 0), (31, 77, 0), (31, 68, 0),
+ (27, 66, 0), (28, 75, 0), (29, 84, 0), (39, 90, 0),
+ (49, 96, 0), (86, 97, 0), (123, 99, 0), (116, 99, 0),
+ (109, 100, 0), (44, 95, 0), (39, 84, 0), (34, 74, 1),
+ (58, 81, 0), (82, 88, 0), (86, 91, 0), (90, 94, 0),
+ (144, 107, 0), (158, 126, 0), (173, 145, 0), (166, 155, 0),
+ (160, 165, 0), (159, 164, 0), (158, 163, 0), (143, 145, 0),
+ (125, 147, 2), (90, 129, 0), (63, 128, 1), (36, 128, 3),
+ (31, 106, 1), (26, 84, 0), (21, 77, 0), (17, 70, 0),
+ (9, 51, 3), (8, 40, 2), (7, 30, 1), (8, 37, 1),
+ (9, 45, 1), (13, 48, 1), (18, 52, 1), (21, 51, 1),
+ (28, 50, 1), (44, 41, 0), (58, 33, 1), (72, 26, 3),
+ (91, 46, 1), (110, 67, 0), (113, 72, 0), (116, 77, 0),
+ (168, 74, 0), (145, 82, 0), (122, 91, 0), (129, 100, 0),
+ (136, 110, 0), (136, 116, 0), (137, 123, 0), (163, 140, 2),
+ (183, 161, 0), (205, 168, 1), (194, 163, 0), (183, 159, 0),
+ (176, 151, 0), (169, 144, 0), (155, 135, 2), (125, 115, 0),
+ (50, 73, 1), (42, 64, 0), (35, 56, 0), (33, 58, 0),
+ (31, 61, 1), (32, 62, 1), (33, 63, 1), (43, 68, 0),
+ (53, 66, 0), (96, 84, 0), (93, 72, 0), (91, 61, 0),
+ (74, 57, 0), (57, 54, 0), (36, 60, 0), (31, 61, 1),
+ (21, 67, 2), (18, 68, 1), (16, 69, 1), (15, 69, 0),
+ (14, 70, 0), (14, 62, 0), (15, 53, 6), (17, 54, 0),
+ (21, 54, 1), (27, 58, 0), (28, 72, 0), (30, 86, 0),
+ (30, 88, 0), (31, 90, 0), (36, 93, 0), (35, 90, 0),
+ (33, 68, 0), (33, 66, 0), (33, 65, 0), (32, 63, 0),
+ (32, 62, 0), (39, 59, 0), (53, 50, 0), (62, 55, 3),
+ (78, 67, 5), (98, 75, 0), (87, 72, 0), (77, 69, 0),
+ (42, 69, 0), (29, 57, 0), (19, 52, 0), (7, 32, 3),
+ (6, 17, 3), (6, 19, 1), (6, 21, 0), (8, 26, 0),
+ (10, 31, 0), (24, 37, 7), (41, 44, 1), (52, 45, 0),
+ (56, 38, 0), (52, 52, 0), (49, 57, 0), (46, 62, 0),
+ (42, 67, 1), (43, 81, 0), (66, 108, 0), (97, 147, 0),
+ (123, 161, 0), (151, 159, 0), (180, 157, 1), (183, 148, 16),
+ (187, 140, 32), (218, 129, 0), (229, 100, 0), (229, 101, 0),
+ (195, 136, 0), (131, 87, 0), (124, 81, 0), (118, 76, 0),
+ (96, 60, 0), (80, 60, 1), (76, 55, 2), (53, 49, 1),
+ (30, 60, 0), (27, 62, 0), (24, 64, 1), (24, 66, 0),
+ (26, 67, 0), (29, 68, 1), (33, 75, 1), (29, 87, 0),
+ (20, 78, 1), (15, 71, 0), (17, 68, 0), (20, 66, 1),
+ (24, 64, 1), (26, 53, 0), (35, 42, 1), (44, 18, 3),
+ (62, 4, 0), (75, 8, 0), (89, 13, 0), (106, 0, 2),
+ (87, 19, 0), (77, 19, 0), (60, 38, 0), (43, 51, 0),
+ (31, 54, 0), (29, 53, 1), (26, 50, 0), (22, 45, 0),
+ (31, 42, 0), (32, 33, 1), (36, 38, 0), (32, 50, 0),
+ (39, 59, 0), (42, 59, 0), (45, 59, 0), (54, 54, 0),
+ (76, 60, 1), (93, 75, 0), (108, 86, 3), (123, 116, 0),
+ (121, 127, 1), (129, 132, 1), (119, 129, 0), (106, 140, 1),
+ (74, 110, 0), (46, 96, 0), (40, 94, 0), (36, 93, 0),
+ (34, 88, 0), (33, 68, 0), (41, 63, 0), (50, 53, 0),
+ (61, 51, 0), (92, 75, 0), (121, 91, 1), (125, 108, 0),
+ (133, 116, 0), (135, 124, 0), (126, 114, 2), (123, 97, 0),
+ (107, 82, 0), (81, 72, 7), (46, 65, 1), (35, 64, 0),
+ (32, 60, 1), (32, 57, 0), (40, 62, 0), (43, 65, 0),
+ (49, 54, 0), (49, 47, 0), (40, 46, 0), (39, 52, 6),
+ (28, 51, 0), (23, 53, 1), (23, 53, 1), (22, 55, 2),
+ (20, 53, 0), (18, 53, 0), (17, 61, 0), (16, 62, 0),
+ (20, 62, 0), (19, 57, 0), (22, 55, 0), (27, 58, 1),
+ (21, 63, 0), (21, 61, 0), (23, 58, 0), (28, 57, 0),
+ (24, 54, 0), (18, 52, 1), (11, 47, 3), (7, 32, 0),
+ (4, 30, 0), (5, 25, 0), (5, 23, 0), (8, 28, 0),
+ (9, 28, 0), (23, 27, 0), (22, 9, 0), (31, 15, 0),
+ (36, 21, 0), (26, 33, 0), (35, 59, 0), (99, 123, 1)
+ ),
+
+// 207 Apophysis-040427-4HolidyBull
+((13, 0, 193), (12, 0, 68), (20, 0, 47), (29, 0, 27),
+ (21, 5, 29), (13, 11, 32), (10, 12, 36), (7, 14, 40),
+ (0, 18, 49), (4, 20, 55), (8, 22, 61), (11, 16, 61),
+ (15, 11, 62), (13, 9, 47), (11, 7, 32), (12, 3, 28),
+ (14, 0, 25), (14, 8, 8), (20, 20, 13), (26, 32, 18),
+ (26, 16, 20), (26, 0, 23), (22, 6, 19), (18, 12, 16),
+ (4, 7, 24), (23, 20, 26), (42, 33, 28), (51, 62, 38),
+ (61, 92, 48), (30, 73, 65), (0, 54, 83), (30, 82, 157),
+ (25, 82, 234), (27, 6, 133), (21, 5, 84), (16, 5, 35),
+ (8, 3, 22), (0, 1, 9), (3, 7, 16), (6, 13, 23),
+ (35, 33, 57), (33, 113, 99), (31, 194, 141), (15, 133, 188),
+ (0, 73, 235), (4, 50, 235), (8, 28, 236), (27, 14, 215),
+ (34, 5, 121), (32, 0, 31), (29, 0, 15), (26, 1, 0),
+ (35, 0, 0), (44, 0, 0), (51, 6, 0), (59, 13, 0),
+ (156, 5, 10), (184, 14, 5), (213, 23, 0), (217, 19, 6),
+ (221, 16, 13), (201, 24, 6), (182, 33, 0), (124, 43, 16),
+ (97, 43, 0), (58, 13, 0), (44, 14, 0), (30, 15, 0),
+ (29, 13, 0), (28, 11, 0), (21, 0, 0), (14, 0, 0),
+ (0, 29, 0), (8, 27, 0), (16, 26, 0), (16, 18, 9),
+ (17, 10, 18), (15, 12, 32), (14, 15, 46), (8, 11, 80),
+ (18, 19, 112), (15, 12, 215), (12, 15, 235), (10, 19, 255),
+ (14, 19, 255), (19, 20, 255), (40, 5, 255), (17, 13, 255),
+ (10, 10, 255), (11, 6, 252), (12, 3, 250), (11, 4, 251),
+ (11, 5, 253), (13, 13, 255), (29, 0, 246), (50, 1, 232),
+ (60, 16, 237), (157, 10, 255), (179, 98, 248), (202, 187, 242),
+ (225, 210, 240), (249, 234, 239), (255, 221, 201), (255, 255, 159),
+ (255, 193, 125), (247, 157, 75), (239, 121, 25), (235, 123, 12),
+ (231, 126, 0), (234, 128, 10), (254, 200, 12), (255, 221, 17),
+ (255, 230, 21), (255, 238, 32), (255, 246, 45), (255, 255, 59),
+ (255, 238, 50), (236, 212, 54), (250, 206, 37), (254, 182, 35),
+ (255, 119, 26), (237, 106, 34), (219, 93, 42), (212, 90, 34),
+ (206, 88, 26), (203, 125, 14), (152, 100, 63), (85, 39, 114),
+ (56, 12, 195), (1, 19, 243), (2, 26, 249), (3, 34, 255),
+ (9, 71, 242), (38, 77, 255), (44, 94, 251), (0, 206, 254),
+ (20, 255, 238), (28, 243, 235), (37, 231, 233), (31, 216, 244),
+ (26, 201, 255), (5, 74, 255), (15, 71, 244), (0, 38, 229),
+ (2, 10, 155), (3, 0, 89), (1, 0, 68), (0, 0, 48),
+ (0, 9, 23), (0, 12, 5), (0, 15, 0), (6, 9, 0),
+ (30, 16, 0), (35, 20, 1), (40, 25, 2), (68, 52, 1),
+ (106, 50, 3), (134, 95, 18), (169, 152, 22), (224, 197, 0),
+ (244, 203, 0), (255, 186, 62), (225, 158, 64), (195, 130, 66),
+ (109, 90, 50), (35, 64, 124), (34, 60, 153), (16, 52, 234),
+ (8, 17, 246), (11, 13, 246), (14, 10, 247), (12, 15, 255),
+ (5, 19, 255), (0, 23, 255), (6, 12, 244), (4, 0, 254),
+ (0, 2, 251), (1, 8, 246), (6, 1, 218), (9, 17, 190),
+ (0, 0, 144), (0, 3, 106), (23, 0, 131), (2, 2, 212),
+ (0, 0, 249), (0, 1, 246), (0, 2, 243), (0, 4, 213),
+ (11, 14, 145), (0, 74, 44), (0, 144, 0), (8, 228, 40),
+ (106, 197, 102), (115, 194, 189), (139, 175, 201), (168, 145, 153),
+ (187, 163, 75), (128, 118, 5), (107, 66, 12), (112, 41, 0),
+ (158, 17, 0), (210, 25, 0), (216, 47, 0), (255, 73, 15),
+ (248, 81, 10), (195, 90, 7), (128, 63, 0), (119, 47, 9),
+ (80, 35, 56), (60, 16, 39), (60, 39, 34), (76, 35, 0),
+ (90, 22, 1), (150, 86, 12), (184, 144, 33), (207, 170, 27),
+ (229, 202, 35), (241, 229, 23), (255, 235, 22), (255, 248, 36),
+ (255, 251, 41), (245, 239, 39), (247, 244, 43), (216, 205, 123),
+ (127, 245, 149), (145, 158, 175), (157, 146, 178), (162, 62, 132),
+ (117, 44, 237), (151, 149, 188), (200, 155, 196), (195, 155, 145),
+ (161, 173, 127), (177, 209, 64), (130, 174, 37), (118, 68, 7),
+ (144, 26, 0), (204, 6, 19), (254, 8, 29), (237, 38, 97),
+ (176, 0, 165), (45, 11, 134), (7, 9, 96), (0, 0, 78),
+ (3, 3, 41), (0, 0, 18), (3, 2, 0), (7, 1, 1),
+ (14, 0, 0), (6, 3, 0), (4, 6, 0), (0, 8, 0),
+ (0, 3, 30), (0, 14, 46), (1, 9, 94), (6, 18, 78)
+ ),
+
+// 208 Apophysis-040427-4DrkFlorCnpy
+((107, 203, 67), (111, 205, 69), (110, 204, 66), (110, 203, 63),
+ (109, 201, 62), (109, 200, 61), (109, 201, 61), (109, 202, 62),
+ (116, 213, 71), (120, 217, 74), (124, 222, 77), (129, 229, 81),
+ (134, 237, 86), (127, 229, 79), (121, 221, 73), (119, 218, 71),
+ (117, 215, 70), (90, 168, 49), (92, 165, 48), (94, 163, 47),
+ (88, 156, 45), (83, 150, 44), (80, 140, 40), (77, 131, 37),
+ (50, 77, 24), (49, 69, 22), (49, 61, 21), (47, 55, 19),
+ (46, 49, 18), (45, 50, 18), (44, 51, 18), (46, 61, 22),
+ (49, 64, 21), (48, 67, 21), (46, 74, 21), (44, 82, 21),
+ (43, 74, 20), (43, 66, 20), (39, 58, 17), (36, 50, 15),
+ (21, 25, 11), (15, 16, 7), (9, 8, 4), (10, 13, 5),
+ (11, 19, 6), (13, 27, 7), (15, 35, 8), (29, 65, 17),
+ (37, 94, 26), (77, 142, 40), (89, 162, 47), (101, 183, 55),
+ (103, 188, 57), (106, 193, 60), (105, 192, 59), (105, 191, 58),
+ (99, 184, 57), (98, 176, 53), (97, 168, 50), (95, 164, 48),
+ (94, 161, 46), (87, 159, 45), (80, 157, 45), (85, 143, 41),
+ (71, 137, 39), (58, 107, 28), (54, 101, 27), (51, 96, 27),
+ (50, 95, 26), (49, 94, 25), (50, 95, 26), (52, 99, 27),
+ (68, 134, 37), (80, 148, 41), (92, 162, 46), (94, 166, 47),
+ (96, 170, 49), (94, 170, 50), (93, 171, 51), (86, 158, 46),
+ (74, 145, 41), (71, 114, 34), (59, 95, 28), (47, 77, 23),
+ (44, 70, 21), (42, 63, 20), (28, 45, 13), (16, 31, 8),
+ (16, 36, 9), (25, 54, 13), (34, 73, 18), (41, 83, 21),
+ (48, 93, 24), (50, 95, 26), (47, 77, 23), (45, 50, 20),
+ (44, 2, 48), (47, 3, 52), (46, 27, 35), (46, 51, 19),
+ (50, 63, 21), (55, 75, 24), (77, 128, 36), (101, 177, 53),
+ (158, 251, 108), (166, 243, 116), (174, 236, 125), (145, 216, 98),
+ (117, 197, 72), (98, 172, 51), (82, 140, 40), (57, 103, 28),
+ (47, 81, 21), (29, 51, 13), (23, 44, 11), (18, 37, 9),
+ (19, 35, 9), (23, 29, 15), (22, 22, 10), (21, 21, 11),
+ (19, 10, 13), (26, 5, 25), (34, 0, 37), (36, 0, 40),
+ (38, 1, 44), (41, 2, 47), (36, 0, 44), (29, 0, 31),
+ (26, 0, 29), (14, 0, 13), (13, 1, 9), (12, 3, 6),
+ (10, 6, 5), (12, 8, 7), (18, 18, 8), (23, 23, 13),
+ (52, 69, 24), (66, 104, 31), (81, 139, 39), (87, 148, 42),
+ (94, 158, 46), (97, 176, 51), (102, 181, 54), (96, 181, 54),
+ (85, 159, 46), (65, 130, 36), (58, 114, 31), (51, 98, 26),
+ (41, 74, 19), (24, 50, 15), (16, 34, 8), (14, 32, 8),
+ (15, 21, 7), (16, 19, 7), (18, 18, 8), (19, 23, 9),
+ (19, 23, 9), (27, 23, 12), (27, 30, 13), (43, 50, 19),
+ (50, 67, 22), (66, 122, 33), (69, 134, 37), (73, 146, 41),
+ (81, 178, 63), (102, 193, 62), (109, 201, 64), (116, 213, 71),
+ (140, 245, 90), (145, 247, 97), (150, 249, 104), (166, 252, 119),
+ (161, 252, 113), (152, 252, 100), (142, 247, 85), (128, 224, 72),
+ (123, 223, 75), (116, 217, 75), (113, 210, 68), (110, 198, 60),
+ (104, 185, 56), (92, 159, 46), (72, 140, 41), (54, 102, 28),
+ (34, 47, 19), (30, 41, 15), (27, 35, 12), (16, 31, 8),
+ (16, 31, 8), (19, 39, 11), (36, 68, 18), (51, 98, 26),
+ (64, 129, 35), (80, 152, 44), (93, 163, 47), (103, 184, 55),
+ (101, 191, 59), (97, 186, 60), (96, 176, 53), (91, 169, 50),
+ (92, 162, 48), (91, 171, 50), (93, 171, 51), (101, 180, 53),
+ (103, 186, 56), (106, 193, 60), (110, 198, 60), (111, 202, 62),
+ (114, 207, 66), (114, 208, 68), (115, 210, 68), (113, 210, 68),
+ (112, 209, 68), (114, 207, 66), (112, 203, 64), (114, 198, 58),
+ (109, 197, 59), (105, 192, 59), (97, 182, 55), (88, 167, 50),
+ (74, 140, 40), (55, 101, 28), (47, 76, 22), (45, 63, 21),
+ (38, 40, 16), (20, 12, 10), (19, 2, 21), (25, 1, 27),
+ (23, 1, 24), (19, 0, 20), (19, 0, 20), (14, 0, 15),
+ (13, 0, 10), (8, 2, 4), (10, 6, 5), (12, 18, 6),
+ (14, 18, 4), (12, 18, 6), (14, 13, 9), (17, 6, 10),
+ (22, 0, 21), (31, 0, 36), (41, 2, 47), (50, 6, 59),
+ (61, 10, 69), (75, 18, 87), (63, 11, 73), (54, 4, 65),
+ (48, 4, 55), (53, 64, 24), (57, 89, 26), (77, 123, 35),
+ (87, 152, 50), (99, 178, 53), (108, 194, 59), (108, 199, 62)
+ ),
+
+// 209 Apophysis-040427-4DethstrDemis
+((189, 180, 171), (110, 91, 84), (110, 75, 55), (110, 60, 27),
+ (97, 45, 13), (84, 31, 0), (72, 17, 0), (61, 3, 1),
+ (2, 10, 23), (16, 26, 40), (30, 42, 58), (48, 60, 77),
+ (66, 79, 96), (72, 82, 98), (78, 85, 101), (74, 82, 99),
+ (71, 79, 98), (49, 59, 71), (55, 50, 53), (61, 42, 35),
+ (89, 61, 48), (118, 81, 62), (122, 89, 78), (126, 98, 94),
+ (153, 150, 157), (164, 170, 183), (176, 191, 210), (186, 199, 220),
+ (196, 208, 230), (193, 208, 229), (191, 208, 228), (168, 194, 219),
+ (172, 185, 201), (169, 180, 198), (163, 175, 191), (158, 170, 184),
+ (148, 157, 170), (139, 145, 157), (142, 143, 151), (146, 141, 145),
+ (152, 133, 116), (164, 132, 111), (177, 131, 107), (179, 122, 86),
+ (181, 113, 66), (176, 94, 45), (171, 75, 25), (143, 49, 11),
+ (77, 28, 14), (1, 11, 23), (0, 7, 19), (0, 3, 15),
+ (13, 14, 27), (27, 25, 39), (56, 35, 38), (86, 46, 38),
+ (153, 80, 45), (157, 90, 53), (162, 100, 61), (157, 109, 81),
+ (152, 119, 102), (147, 119, 105), (142, 120, 109), (125, 129, 141),
+ (123, 130, 146), (117, 123, 139), (113, 119, 134), (110, 116, 130),
+ (106, 112, 127), (102, 109, 125), (93, 99, 115), (93, 99, 115),
+ (112, 118, 132), (118, 125, 141), (124, 133, 150), (134, 144, 162),
+ (145, 156, 174), (149, 161, 180), (154, 167, 186), (159, 170, 188),
+ (148, 156, 175), (128, 131, 146), (118, 125, 142), (109, 120, 138),
+ (97, 110, 132), (86, 100, 126), (87, 94, 110), (92, 92, 100),
+ (93, 99, 115), (108, 114, 130), (123, 130, 146), (134, 143, 159),
+ (145, 157, 173), (161, 172, 190), (176, 191, 210), (194, 212, 234),
+ (202, 222, 247), (206, 227, 248), (205, 225, 248), (204, 224, 248),
+ (203, 223, 248), (203, 223, 248), (191, 218, 239), (193, 209, 232),
+ (196, 196, 196), (188, 171, 158), (180, 146, 121), (168, 139, 121),
+ (156, 132, 122), (127, 129, 141), (122, 130, 143), (123, 130, 146),
+ (123, 130, 146), (124, 128, 139), (128, 128, 137), (132, 129, 136),
+ (124, 130, 144), (131, 140, 155), (128, 146, 170), (140, 156, 181),
+ (159, 172, 189), (152, 163, 182), (146, 154, 175), (145, 152, 172),
+ (144, 151, 169), (135, 144, 159), (137, 147, 159), (144, 153, 170),
+ (145, 155, 180), (169, 180, 198), (170, 181, 199), (171, 182, 200),
+ (158, 171, 188), (141, 141, 151), (130, 126, 127), (142, 118, 108),
+ (95, 92, 87), (79, 81, 85), (63, 71, 84), (53, 66, 81),
+ (44, 61, 79), (28, 38, 65), (25, 41, 64), (23, 40, 58),
+ (28, 41, 57), (32, 45, 64), (36, 48, 66), (40, 52, 68),
+ (58, 65, 81), (65, 74, 89), (72, 76, 87), (87, 80, 87),
+ (135, 90, 61), (143, 89, 61), (152, 88, 61), (132, 97, 78),
+ (121, 98, 90), (95, 95, 105), (93, 99, 115), (93, 99, 115),
+ (93, 99, 115), (83, 85, 98), (82, 80, 89), (81, 76, 80),
+ (84, 83, 89), (79, 88, 103), (73, 94, 113), (80, 89, 122),
+ (93, 99, 115), (93, 99, 115), (93, 99, 115), (100, 106, 122),
+ (105, 114, 129), (95, 101, 115), (93, 99, 115), (85, 94, 109),
+ (81, 76, 80), (63, 52, 60), (46, 35, 31), (61, 21, 9),
+ (57, 19, 8), (31, 29, 34), (33, 42, 57), (53, 52, 58),
+ (102, 70, 55), (104, 83, 73), (107, 96, 92), (100, 108, 119),
+ (120, 120, 128), (140, 129, 125), (152, 129, 115), (152, 124, 110),
+ (146, 118, 106), (134, 107, 98), (125, 97, 83), (115, 98, 90),
+ (121, 117, 114), (116, 125, 142), (120, 131, 149), (135, 144, 159),
+ (154, 166, 182), (168, 181, 198), (174, 190, 206), (186, 201, 222),
+ (194, 212, 234), (221, 234, 227), (249, 233, 234), (209, 227, 249),
+ (197, 218, 239), (189, 211, 232), (179, 191, 213), (175, 186, 204),
+ (169, 180, 198), (158, 169, 187), (141, 152, 170), (123, 130, 146),
+ (117, 119, 131), (101, 109, 122), (94, 100, 114), (99, 102, 109),
+ (128, 100, 89), (148, 107, 85), (194, 121, 80), (232, 139, 78),
+ (249, 172, 104), (221, 186, 154), (197, 171, 154), (189, 171, 169),
+ (159, 168, 183), (145, 152, 168), (129, 138, 153), (105, 121, 144),
+ (93, 99, 115), (81, 87, 101), (64, 70, 84), (38, 42, 54),
+ (20, 33, 49), (4, 19, 38), (11, 31, 42), (18, 34, 50),
+ (34, 41, 59), (52, 61, 76), (64, 71, 87), (77, 84, 100),
+ (93, 99, 115), (105, 111, 125), (122, 130, 149), (145, 154, 171),
+ (163, 174, 192), (168, 179, 199), (168, 181, 200), (171, 182, 200),
+ (178, 188, 200), (188, 187, 193), (189, 180, 175), (202, 178, 166)
+ ),
+
+// 210 Apophysis-040427-4DethstrDems
+((46, 26, 0), (52, 32, 7), (57, 39, 15), (62, 46, 23),
+ (60, 52, 41), (59, 59, 59), (54, 76, 89), (49, 93, 120),
+ (99, 123, 133), (116, 124, 122), (133, 125, 112), (132, 125, 110),
+ (132, 125, 109), (131, 126, 112), (131, 127, 116), (127, 126, 117),
+ (123, 126, 119), (124, 115, 100), (119, 107, 87), (115, 99, 74),
+ (105, 91, 70), (96, 83, 66), (97, 85, 67), (98, 87, 69),
+ (111, 104, 86), (114, 106, 91), (118, 108, 96), (114, 104, 85),
+ (110, 100, 75), (103, 92, 71), (96, 85, 67), (86, 75, 57),
+ (84, 73, 55), (114, 114, 104), (113, 125, 125), (113, 137, 147),
+ (136, 150, 157), (160, 163, 168), (165, 167, 167), (171, 172, 166),
+ (211, 194, 176), (220, 204, 183), (230, 214, 191), (228, 214, 194),
+ (227, 214, 198), (227, 212, 195), (227, 210, 192), (223, 210, 191),
+ (215, 203, 187), (190, 181, 166), (179, 178, 167), (168, 175, 168),
+ (144, 170, 181), (120, 165, 194), (111, 166, 194), (103, 167, 194),
+ (134, 157, 165), (148, 156, 152), (162, 156, 140), (162, 156, 140),
+ (162, 156, 140), (166, 162, 142), (170, 168, 145), (172, 170, 157),
+ (174, 179, 175), (176, 167, 152), (175, 166, 142), (175, 166, 133),
+ (168, 161, 136), (162, 156, 140), (162, 156, 140), (162, 156, 140),
+ (150, 141, 126), (156, 148, 133), (162, 156, 140), (168, 167, 157),
+ (174, 179, 175), (183, 191, 185), (192, 203, 195), (209, 220, 224),
+ (194, 234, 246), (224, 226, 221), (213, 214, 209), (202, 203, 197),
+ (190, 197, 185), (178, 191, 173), (153, 185, 200), (148, 159, 163),
+ (135, 135, 127), (119, 130, 133), (103, 126, 140), (103, 128, 142),
+ (103, 131, 145), (109, 137, 149), (121, 148, 157), (130, 158, 172),
+ (140, 157, 165), (139, 130, 113), (129, 120, 104), (120, 111, 96),
+ (110, 100, 84), (101, 89, 73), (87, 74, 57), (81, 65, 49),
+ (61, 43, 21), (33, 32, 21), (6, 22, 21), (26, 25, 13),
+ (46, 28, 6), (58, 37, 16), (66, 44, 23), (76, 64, 42),
+ (80, 69, 51), (97, 86, 68), (105, 94, 76), (114, 103, 85),
+ (132, 125, 109), (138, 136, 124), (154, 146, 133), (161, 155, 141),
+ (127, 155, 166), (94, 144, 170), (61, 134, 175), (42, 125, 176),
+ (23, 116, 177), (6, 83, 151), (34, 69, 101), (58, 84, 101),
+ (66, 84, 86), (110, 103, 87), (118, 110, 94), (126, 117, 102),
+ (150, 134, 111), (162, 156, 140), (174, 168, 154), (191, 185, 171),
+ (235, 222, 206), (239, 223, 209), (244, 224, 213), (240, 222, 209),
+ (237, 221, 205), (221, 214, 196), (203, 194, 179), (191, 184, 168),
+ (178, 171, 155), (150, 144, 130), (141, 134, 118), (133, 125, 106),
+ (110, 101, 84), (92, 81, 63), (87, 76, 56), (87, 74, 55),
+ (77, 67, 55), (72, 67, 58), (67, 68, 62), (66, 75, 80),
+ (53, 77, 89), (66, 75, 84), (153, 147, 131), (145, 164, 171),
+ (147, 185, 204), (160, 233, 252), (165, 228, 253), (171, 224, 255),
+ (194, 252, 254), (247, 255, 253), (253, 245, 232), (255, 238, 222),
+ (198, 189, 174), (193, 182, 166), (189, 176, 159), (183, 173, 148),
+ (177, 170, 154), (184, 176, 157), (198, 187, 169), (206, 196, 184),
+ (198, 209, 215), (194, 213, 220), (153, 196, 215), (137, 174, 193),
+ (129, 157, 161), (123, 126, 119), (102, 105, 98), (93, 80, 63),
+ (66, 53, 34), (62, 50, 29), (59, 47, 25), (64, 47, 27),
+ (87, 61, 36), (83, 70, 54), (86, 73, 56), (86, 75, 57),
+ (90, 77, 58), (97, 85, 71), (108, 99, 82), (116, 110, 98),
+ (109, 114, 110), (108, 122, 122), (103, 122, 139), (81, 118, 144),
+ (78, 124, 148), (72, 136, 182), (74, 142, 189), (84, 180, 230),
+ (112, 206, 244), (178, 227, 241), (247, 239, 226), (254, 244, 232),
+ (255, 243, 237), (255, 252, 240), (247, 244, 237), (228, 230, 216),
+ (169, 209, 217), (108, 191, 233), (102, 175, 210), (92, 161, 200),
+ (93, 155, 194), (93, 146, 178), (103, 136, 153), (113, 135, 146),
+ (130, 126, 114), (132, 125, 109), (132, 125, 109), (138, 132, 116),
+ (144, 133, 115), (145, 139, 125), (153, 146, 130), (162, 156, 140),
+ (162, 156, 140), (152, 146, 132), (143, 137, 123), (132, 125, 109),
+ (131, 122, 105), (121, 112, 97), (110, 99, 81), (101, 88, 69),
+ (96, 85, 67), (107, 99, 80), (119, 112, 96), (127, 124, 109),
+ (132, 125, 109), (146, 135, 117), (169, 155, 129), (168, 161, 145),
+ (163, 163, 155), (162, 156, 140), (162, 156, 140), (153, 144, 129),
+ (132, 125, 109), (110, 98, 82), (94, 83, 65), (79, 64, 45),
+ (61, 43, 21), (53, 33, 8), (51, 31, 7), (49, 28, 7)
+ ),
+
+// 211 Apophysis-040427-4DeerDemMsk
+((164, 151, 181), (1, 5, 16), (1, 2, 10), (1, 0, 4),
+ (0, 0, 2), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 1, 0), (0, 1, 0),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 1), (0, 0, 2), (0, 0, 2), (2, 0, 1),
+ (3, 4, 6), (21, 25, 22), (39, 46, 39), (115, 101, 68),
+ (192, 156, 98), (216, 184, 100), (240, 212, 102), (225, 244, 118),
+ (253, 253, 131), (252, 188, 78), (225, 139, 47), (199, 91, 16),
+ (120, 63, 20), (42, 36, 24), (8, 8, 8), (3, 3, 3),
+ (1, 1, 1), (0, 1, 1), (0, 2, 1), (0, 2, 0),
+ (0, 2, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 1),
+ (5, 6, 0), (28, 35, 4), (52, 65, 9), (94, 120, 16),
+ (136, 175, 24), (226, 214, 66), (243, 238, 82), (243, 222, 69),
+ (249, 195, 73), (39, 143, 46), (23, 97, 32), (7, 52, 19),
+ (7, 7, 5), (3, 3, 3), (2, 2, 2), (3, 1, 2),
+ (0, 1, 6), (0, 0, 4), (1, 0, 2), (1, 1, 2),
+ (2, 2, 2), (5, 5, 5), (11, 12, 7), (73, 61, 21),
+ (179, 156, 28), (255, 249, 89), (253, 250, 96), (252, 252, 104),
+ (245, 254, 101), (216, 235, 83), (157, 195, 56), (118, 98, 65),
+ (8, 7, 5), (5, 4, 6), (3, 2, 7), (0, 4, 7),
+ (1, 1, 1), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 1), (1, 1, 1), (2, 2, 2),
+ (5, 5, 5), (11, 11, 9), (70, 56, 30), (150, 146, 55),
+ (171, 168, 127), (179, 151, 150), (187, 135, 173), (168, 111, 146),
+ (226, 143, 103), (251, 161, 98), (236, 131, 112), (224, 102, 81),
+ (146, 127, 59), (39, 43, 29), (11, 11, 9), (4, 4, 2),
+ (2, 3, 0), (3, 2, 0), (3, 3, 3), (7, 6, 4),
+ (159, 40, 18), (185, 56, 28), (212, 72, 39), (190, 69, 104),
+ (92, 62, 54), (16, 12, 9), (5, 5, 5), (3, 3, 3),
+ (4, 4, 4), (9, 9, 9), (41, 30, 28), (108, 104, 93),
+ (176, 206, 146), (242, 218, 172), (241, 207, 179), (213, 163, 128),
+ (211, 161, 100), (141, 117, 71), (80, 51, 82), (134, 56, 140),
+ (218, 46, 122), (242, 183, 203), (251, 194, 201), (254, 237, 247),
+ (218, 236, 214), (194, 224, 160), (130, 135, 69), (36, 77, 59),
+ (15, 17, 12), (6, 6, 6), (2, 2, 2), (1, 1, 1),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 0, 0),
+ (1, 0, 0), (3, 0, 0), (8, 0, 0), (6, 5, 3),
+ (14, 11, 4), (170, 36, 25), (243, 31, 56), (247, 10, 62),
+ (242, 15, 84), (247, 1, 146), (239, 3, 147), (248, 71, 152),
+ (223, 134, 118), (167, 210, 33), (126, 184, 22), (63, 143, 8),
+ (19, 20, 14), (8, 8, 6), (3, 3, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (3, 3, 3), (8, 3, 7),
+ (16, 7, 12), (121, 28, 72), (240, 3, 143), (243, 0, 156),
+ (204, 185, 213), (238, 225, 235), (250, 250, 212), (195, 223, 182)
+ ),
+
+// 212 Apophysis-040427-4CrouchDragn
+((172, 5, 83), (177, 6, 84), (176, 6, 84), (175, 7, 85),
+ (168, 52, 89), (162, 97, 93), (175, 114, 68), (189, 132, 43),
+ (233, 166, 13), (236, 193, 6), (240, 220, 0), (241, 221, 0),
+ (242, 222, 1), (238, 215, 14), (234, 209, 28), (239, 212, 41),
+ (244, 216, 55), (254, 213, 63), (242, 196, 67), (230, 179, 72),
+ (228, 173, 53), (227, 167, 35), (221, 165, 38), (215, 163, 41),
+ (158, 133, 30), (153, 106, 37), (149, 79, 45), (157, 42, 62),
+ (166, 6, 80), (169, 5, 81), (172, 5, 83), (176, 5, 84),
+ (178, 5, 85), (178, 5, 85), (178, 5, 85), (178, 5, 85),
+ (177, 5, 85), (177, 6, 85), (176, 5, 84), (176, 5, 84),
+ (177, 4, 84), (177, 4, 84), (177, 4, 84), (176, 4, 84),
+ (176, 5, 84), (175, 5, 84), (174, 6, 84), (172, 6, 82),
+ (166, 6, 80), (151, 4, 72), (141, 4, 67), (132, 4, 63),
+ (122, 4, 58), (112, 4, 53), (115, 48, 27), (118, 93, 1),
+ (136, 111, 21), (132, 64, 43), (128, 18, 65), (135, 10, 66),
+ (142, 3, 68), (146, 3, 70), (151, 4, 72), (159, 3, 74),
+ (161, 3, 77), (172, 6, 82), (169, 5, 81), (167, 5, 80),
+ (164, 4, 79), (162, 4, 78), (159, 5, 77), (158, 4, 74),
+ (140, 4, 68), (137, 4, 66), (134, 4, 64), (127, 4, 61),
+ (121, 4, 59), (111, 4, 54), (101, 4, 49), (105, 79, 5),
+ (128, 100, 0), (173, 116, 11), (178, 115, 16), (184, 115, 22),
+ (172, 98, 52), (160, 82, 82), (150, 38, 84), (170, 15, 83),
+ (174, 6, 83), (175, 5, 83), (176, 5, 83), (176, 4, 83),
+ (177, 4, 84), (176, 5, 83), (173, 5, 82), (170, 5, 81),
+ (167, 5, 80), (162, 4, 78), (164, 4, 79), (167, 5, 80),
+ (167, 5, 80), (167, 5, 80), (172, 5, 83), (177, 6, 85),
+ (174, 113, 108), (189, 144, 114), (205, 175, 121), (228, 208, 168),
+ (251, 241, 216), (254, 248, 234), (243, 207, 123), (234, 191, 97),
+ (255, 211, 60), (242, 222, 3), (242, 222, 6), (242, 223, 9),
+ (233, 207, 32), (205, 186, 66), (192, 145, 65), (173, 110, 101),
+ (147, 88, 48), (164, 101, 43), (181, 115, 39), (190, 130, 38),
+ (199, 145, 37), (206, 140, 27), (209, 145, 19), (214, 148, 8),
+ (200, 124, 2), (196, 137, 19), (205, 137, 24), (214, 137, 29),
+ (225, 155, 33), (216, 156, 32), (205, 146, 30), (186, 135, 46),
+ (166, 48, 100), (170, 27, 92), (174, 6, 84), (175, 6, 84),
+ (177, 6, 85), (179, 6, 86), (180, 4, 85), (178, 5, 84),
+ (177, 4, 83), (173, 5, 82), (173, 5, 82), (173, 5, 82),
+ (173, 5, 82), (174, 6, 83), (174, 6, 83), (174, 6, 83),
+ (152, 72, 73), (159, 89, 45), (166, 107, 17), (186, 126, 12),
+ (189, 127, 8), (185, 125, 5), (162, 127, 1), (172, 112, 0),
+ (152, 100, 16), (145, 9, 71), (152, 7, 73), (159, 5, 75),
+ (160, 6, 76), (165, 5, 79), (167, 5, 80), (172, 6, 82),
+ (172, 19, 86), (175, 51, 97), (178, 84, 108), (186, 141, 60),
+ (204, 145, 43), (221, 162, 36), (229, 170, 40), (227, 171, 48),
+ (219, 168, 61), (232, 179, 67), (234, 180, 54), (242, 189, 31),
+ (239, 186, 12), (240, 185, 6), (241, 187, 1), (224, 174, 1),
+ (180, 121, 19), (164, 103, 13), (148, 85, 8), (135, 12, 66),
+ (145, 5, 68), (159, 5, 75), (161, 5, 76), (165, 5, 79),
+ (166, 6, 80), (167, 5, 80), (167, 5, 80), (170, 5, 81),
+ (172, 6, 82), (173, 5, 82), (173, 5, 82), (173, 5, 82),
+ (172, 5, 83), (172, 5, 83), (169, 4, 80), (165, 5, 79),
+ (160, 4, 77), (152, 5, 73), (140, 4, 68), (122, 3, 59),
+ (107, 4, 51), (111, 64, 10), (117, 92, 0), (129, 101, 1),
+ (145, 93, 9), (160, 94, 7), (144, 94, 21), (136, 84, 45),
+ (153, 21, 78), (159, 8, 77), (166, 6, 80), (172, 6, 82),
+ (176, 5, 83), (177, 4, 84), (177, 4, 84), (178, 5, 85),
+ (178, 5, 85), (178, 5, 85), (178, 5, 85), (178, 5, 85),
+ (178, 5, 85), (178, 5, 85), (176, 5, 84), (173, 5, 82),
+ (166, 4, 79), (158, 4, 74), (142, 2, 65), (125, 4, 58),
+ (110, 4, 53), (101, 4, 49), (101, 4, 49), (111, 3, 53),
+ (129, 8, 62), (148, 88, 15), (184, 128, 33), (206, 153, 41),
+ (212, 191, 38), (224, 204, 19), (239, 216, 0), (242, 188, 0),
+ (227, 175, 1), (226, 160, 20), (197, 136, 21), (155, 61, 87),
+ (153, 24, 81), (162, 8, 78), (166, 6, 80), (176, 5, 84)
+ ),
+
+// 213 Apophysis-040427-4CopprMapleleaf
+((24, 5, 0), (33, 1, 4), (45, 10, 7), (57, 20, 11),
+ (65, 28, 18), (74, 36, 25), (74, 36, 24), (74, 36, 23),
+ (68, 30, 19), (57, 26, 15), (47, 23, 11), (44, 19, 7),
+ (42, 16, 3), (35, 10, 7), (28, 5, 11), (26, 7, 12),
+ (24, 9, 14), (53, 15, 12), (82, 41, 33), (112, 68, 55),
+ (145, 96, 82), (178, 125, 109), (193, 138, 120), (208, 151, 132),
+ (242, 196, 160), (244, 197, 164), (246, 199, 169), (239, 186, 162),
+ (232, 173, 155), (225, 167, 149), (219, 162, 143), (208, 151, 132),
+ (195, 139, 122), (170, 119, 102), (152, 103, 87), (135, 88, 72),
+ (116, 71, 56), (97, 55, 41), (92, 51, 38), (87, 47, 35),
+ (85, 45, 33), (99, 57, 44), (113, 69, 56), (141, 99, 78),
+ (169, 130, 101), (182, 141, 111), (196, 153, 121), (227, 182, 149),
+ (243, 188, 168), (253, 203, 180), (251, 205, 176), (250, 207, 172),
+ (245, 193, 166), (240, 179, 160), (224, 165, 147), (209, 152, 135),
+ (168, 117, 100), (144, 96, 81), (121, 75, 62), (111, 67, 53),
+ (101, 59, 45), (99, 57, 43), (98, 56, 42), (96, 54, 42),
+ (91, 49, 37), (102, 58, 45), (103, 59, 46), (104, 60, 47),
+ (102, 59, 45), (100, 58, 44), (87, 56, 35), (79, 41, 30),
+ (79, 39, 29), (91, 49, 38), (104, 60, 47), (112, 67, 54),
+ (120, 74, 61), (182, 129, 113), (245, 184, 165), (208, 151, 132),
+ (171, 118, 102), (141, 94, 78), (132, 85, 70), (123, 77, 62),
+ (124, 78, 63), (125, 79, 64), (142, 95, 79), (156, 107, 92),
+ (175, 122, 106), (178, 125, 109), (181, 128, 112), (175, 123, 107),
+ (170, 119, 102), (151, 102, 87), (135, 88, 72), (124, 78, 63),
+ (112, 69, 52), (110, 66, 53), (117, 72, 58), (124, 78, 63),
+ (134, 87, 72), (145, 96, 81), (163, 111, 97), (186, 133, 115),
+ (227, 168, 150), (232, 185, 165), (238, 202, 180), (237, 203, 185),
+ (237, 205, 190), (233, 210, 192), (235, 209, 194), (240, 204, 188),
+ (243, 200, 181), (241, 195, 161), (238, 192, 158), (235, 189, 155),
+ (211, 166, 135), (209, 166, 132), (203, 164, 133), (207, 163, 134),
+ (237, 179, 159), (237, 192, 173), (238, 205, 188), (235, 207, 189),
+ (232, 209, 191), (235, 206, 190), (237, 202, 180), (242, 185, 165),
+ (223, 164, 146), (187, 131, 114), (172, 118, 103), (158, 106, 92),
+ (138, 91, 75), (123, 77, 64), (107, 69, 56), (105, 61, 48),
+ (112, 69, 53), (123, 84, 62), (135, 100, 72), (144, 108, 81),
+ (154, 117, 90), (169, 130, 101), (197, 141, 124), (216, 159, 140),
+ (246, 185, 166), (247, 190, 171), (242, 191, 164), (238, 192, 158),
+ (211, 168, 134), (187, 146, 114), (176, 123, 107), (173, 122, 105),
+ (178, 137, 107), (187, 138, 115), (196, 140, 123), (202, 146, 129),
+ (203, 147, 130), (200, 153, 133), (204, 148, 131), (192, 136, 119),
+ (173, 120, 104), (152, 103, 88), (151, 102, 87), (151, 102, 87),
+ (147, 98, 83), (149, 100, 85), (155, 106, 91), (158, 109, 94),
+ (167, 116, 99), (163, 113, 97), (160, 111, 96), (154, 105, 90),
+ (145, 96, 81), (144, 95, 80), (135, 87, 73), (124, 78, 63),
+ (124, 78, 63), (123, 77, 62), (113, 70, 54), (112, 69, 53),
+ (104, 70, 45), (113, 79, 54), (132, 96, 70), (152, 103, 88),
+ (183, 130, 112), (186, 133, 115), (190, 137, 119), (199, 143, 126),
+ (206, 149, 130), (206, 161, 130), (223, 164, 146), (235, 177, 157),
+ (240, 182, 162), (250, 189, 170), (251, 198, 180), (250, 202, 182),
+ (248, 206, 192), (246, 215, 195), (239, 212, 193), (238, 205, 190),
+ (243, 201, 187), (250, 202, 182), (253, 199, 187), (251, 206, 187),
+ (249, 206, 187), (249, 206, 190), (236, 208, 194), (231, 214, 196),
+ (234, 221, 205), (232, 225, 207), (240, 240, 216), (245, 239, 223),
+ (233, 224, 207), (231, 222, 205), (229, 224, 205), (227, 220, 204),
+ (227, 220, 204), (226, 220, 204), (225, 218, 202), (224, 221, 204),
+ (202, 240, 219), (222, 231, 204), (225, 223, 200), (227, 220, 202),
+ (227, 218, 203), (229, 217, 203), (227, 214, 198), (235, 209, 196),
+ (247, 200, 192), (250, 200, 193), (248, 213, 194), (238, 216, 195),
+ (233, 216, 198), (232, 220, 204), (232, 213, 206), (231, 214, 198),
+ (235, 206, 190), (231, 187, 152), (195, 143, 122), (157, 108, 93),
+ (123, 77, 64), (73, 61, 49), (48, 20, 9), (21, 10, 8),
+ (16, 21, 17), (30, 24, 10), (60, 23, 14), (75, 37, 26),
+ (87, 47, 35), (91, 49, 37), (104, 60, 47), (95, 53, 39),
+ (83, 43, 31), (72, 34, 23), (51, 17, 7), (31, 5, 8)
+ ),
+
+// 214 Apophysis-040427-4Circulations
+((243, 231, 189), (255, 250, 221), (253, 248, 226), (252, 246, 232),
+ (252, 244, 236), (253, 243, 241), (254, 243, 241), (255, 244, 242),
+ (253, 245, 242), (253, 247, 241), (253, 249, 240), (254, 248, 239),
+ (255, 248, 238), (253, 250, 240), (251, 253, 242), (251, 254, 246),
+ (252, 255, 251), (254, 254, 254), (254, 254, 254), (255, 255, 255),
+ (254, 254, 254), (254, 254, 254), (254, 254, 254), (254, 254, 254),
+ (255, 245, 253), (254, 249, 253), (254, 254, 254), (254, 254, 254),
+ (254, 254, 254), (252, 250, 252), (251, 246, 250), (252, 244, 241),
+ (251, 243, 222), (242, 220, 171), (228, 198, 124), (214, 176, 77),
+ (164, 129, 42), (115, 83, 8), (83, 61, 4), (52, 40, 0),
+ (11, 3, 0), (13, 7, 1), (15, 11, 2), (29, 20, 1),
+ (43, 30, 0), (57, 40, 0), (71, 51, 1), (105, 75, 2),
+ (150, 109, 4), (187, 144, 32), (204, 163, 54), (221, 183, 76),
+ (230, 202, 118), (240, 222, 160), (243, 224, 170), (247, 226, 181),
+ (250, 242, 221), (250, 242, 221), (250, 242, 221), (248, 237, 208),
+ (246, 232, 195), (241, 226, 178), (236, 220, 161), (237, 202, 118),
+ (217, 182, 82), (164, 121, 9), (126, 93, 4), (88, 65, 0),
+ (81, 58, 0), (74, 51, 0), (71, 51, 1), (73, 52, 0),
+ (94, 65, 0), (116, 83, 2), (139, 101, 4), (149, 107, 3),
+ (160, 114, 2), (160, 116, 4), (160, 118, 6), (163, 120, 5),
+ (160, 117, 2), (166, 121, 6), (177, 133, 19), (188, 145, 32),
+ (203, 161, 57), (218, 178, 82), (233, 203, 130), (242, 223, 167),
+ (248, 233, 210), (250, 239, 219), (253, 246, 228), (252, 244, 225),
+ (251, 243, 222), (250, 234, 211), (248, 234, 205), (246, 232, 193),
+ (244, 227, 181), (246, 232, 193), (248, 233, 203), (250, 235, 214),
+ (249, 240, 222), (248, 245, 230), (245, 244, 242), (249, 247, 250),
+ (252, 255, 255), (252, 252, 248), (252, 249, 242), (252, 248, 235),
+ (252, 247, 228), (247, 244, 213), (244, 231, 199), (235, 207, 160),
+ (219, 189, 116), (148, 106, 8), (119, 86, 5), (91, 67, 3),
+ (50, 38, 0), (29, 15, 2), (23, 18, 0), (33, 20, 12),
+ (65, 48, 2), (88, 61, 1), (111, 75, 0), (120, 84, 0),
+ (130, 94, 0), (146, 105, 0), (157, 113, 4), (151, 109, 1),
+ (139, 98, 6), (68, 50, 0), (52, 39, 0), (36, 29, 1),
+ (32, 21, 1), (43, 32, 2), (76, 55, 0), (112, 91, 38),
+ (228, 209, 167), (236, 219, 185), (245, 229, 203), (248, 234, 216),
+ (252, 239, 230), (251, 243, 240), (252, 244, 241), (253, 245, 243),
+ (253, 245, 243), (253, 245, 243), (253, 245, 243), (254, 246, 244),
+ (254, 246, 244), (254, 243, 247), (255, 244, 248), (255, 246, 251),
+ (253, 242, 248), (251, 244, 247), (250, 246, 247), (253, 245, 243),
+ (255, 248, 246), (255, 249, 247), (255, 245, 244), (253, 245, 243),
+ (253, 245, 243), (252, 248, 237), (252, 247, 233), (252, 246, 230),
+ (253, 246, 228), (250, 243, 224), (250, 231, 214), (247, 230, 210),
+ (251, 246, 226), (251, 248, 225), (252, 250, 225), (255, 250, 226),
+ (252, 247, 228), (252, 246, 232), (251, 247, 238), (252, 244, 241),
+ (253, 243, 241), (253, 243, 241), (252, 248, 237), (253, 246, 228),
+ (251, 236, 215), (248, 234, 199), (246, 227, 185), (242, 220, 163),
+ (217, 181, 87), (212, 177, 81), (208, 174, 76), (189, 147, 35),
+ (174, 131, 18), (169, 124, 9), (161, 118, 3), (143, 102, 0),
+ (120, 88, 3), (104, 72, 0), (84, 60, 0), (78, 57, 0),
+ (86, 56, 2), (109, 80, 20), (172, 130, 20), (208, 166, 68),
+ (223, 189, 102), (239, 210, 154), (248, 219, 163), (244, 226, 178),
+ (246, 232, 193), (247, 234, 199), (247, 234, 199), (248, 234, 205),
+ (248, 234, 205), (242, 229, 210), (248, 225, 209), (248, 226, 205),
+ (247, 226, 205), (245, 231, 205), (247, 234, 199), (247, 233, 198),
+ (255, 235, 182), (254, 211, 143), (222, 182, 94), (212, 174, 75),
+ (187, 148, 47), (181, 138, 23), (197, 155, 43), (214, 176, 77),
+ (232, 200, 123), (243, 216, 169), (248, 226, 189), (247, 235, 209),
+ (251, 246, 227), (253, 247, 233), (252, 244, 241), (253, 245, 243),
+ (253, 248, 242), (251, 249, 237), (252, 246, 230), (253, 246, 228),
+ (253, 246, 228), (253, 246, 230), (252, 248, 237), (251, 249, 237),
+ (251, 249, 236), (252, 246, 230), (253, 246, 230), (253, 246, 228),
+ (253, 246, 228), (251, 246, 226), (251, 244, 226), (251, 236, 213),
+ (248, 232, 209), (245, 227, 203), (245, 225, 188), (244, 221, 179),
+ (239, 215, 155), (237, 213, 143), (230, 195, 114), (222, 192, 102)
+ ),
+
+// 215 Apophysis-040427-4DmnContaind
+((245, 179, 83), (251, 216, 174), (253, 207, 146), (255, 199, 119),
+ (251, 196, 107), (248, 194, 96), (251, 193, 92), (255, 193, 89),
+ (255, 170, 87), (252, 179, 95), (250, 188, 103), (252, 198, 124),
+ (254, 208, 146), (251, 213, 165), (248, 218, 184), (231, 214, 203),
+ (214, 211, 222), (177, 148, 254), (163, 141, 184), (149, 134, 115),
+ (162, 121, 68), (175, 108, 21), (182, 108, 10), (190, 108, 0),
+ (236, 132, 1), (245, 146, 20), (255, 160, 39), (253, 177, 82),
+ (251, 194, 125), (240, 201, 154), (229, 209, 184), (175, 164, 204),
+ (99, 81, 131), (79, 56, 24), (79, 51, 16), (79, 47, 9),
+ (56, 39, 23), (33, 32, 38), (32, 19, 68), (31, 6, 98),
+ (63, 9, 217), (86, 32, 236), (109, 55, 255), (118, 68, 255),
+ (128, 81, 255), (132, 86, 253), (137, 91, 251), (143, 103, 254),
+ (146, 106, 254), (180, 152, 254), (192, 177, 234), (205, 203, 214),
+ (229, 197, 162), (254, 191, 111), (254, 182, 90), (255, 174, 69),
+ (255, 145, 4), (255, 141, 2), (255, 138, 0), (235, 129, 0),
+ (215, 121, 0), (211, 119, 0), (207, 117, 0), (202, 115, 0),
+ (194, 109, 0), (192, 107, 0), (179, 100, 0), (167, 94, 0),
+ (164, 90, 1), (161, 87, 2), (147, 83, 0), (132, 72, 0),
+ (89, 55, 10), (60, 28, 65), (32, 1, 121), (47, 0, 177),
+ (62, 0, 233), (66, 2, 244), (71, 4, 255), (72, 19, 245),
+ (74, 29, 194), (64, 59, 81), (95, 66, 42), (127, 74, 4),
+ (136, 77, 2), (145, 80, 0), (157, 90, 1), (143, 94, 35),
+ (172, 147, 241), (177, 151, 248), (182, 156, 255), (181, 155, 254),
+ (180, 154, 253), (179, 152, 255), (168, 137, 254), (155, 119, 255),
+ (141, 100, 254), (113, 60, 255), (86, 37, 212), (59, 15, 170),
+ (45, 7, 146), (32, 0, 123), (22, 0, 79), (13, 0, 48),
+ (7, 5, 19), (11, 2, 39), (15, 0, 59), (20, 0, 79),
+ (26, 0, 99), (39, 0, 143), (57, 1, 212), (85, 23, 254),
+ (108, 53, 255), (130, 84, 255), (135, 92, 255), (141, 100, 255),
+ (145, 105, 255), (154, 118, 254), (145, 123, 205), (160, 115, 60),
+ (241, 141, 4), (248, 143, 4), (255, 145, 4), (255, 145, 4),
+ (255, 145, 4), (254, 148, 10), (255, 160, 40), (247, 175, 93),
+ (241, 192, 116), (177, 148, 254), (161, 127, 254), (146, 106, 254),
+ (142, 102, 250), (139, 98, 255), (132, 91, 247), (124, 84, 232),
+ (136, 94, 255), (134, 90, 255), (132, 86, 255), (132, 86, 255),
+ (132, 86, 255), (122, 74, 255), (110, 56, 254), (88, 53, 197),
+ (62, 26, 160), (18, 3, 58), (15, 1, 52), (12, 0, 46),
+ (2, 4, 17), (2, 0, 3), (3, 0, 0), (2, 2, 2),
+ (21, 5, 68), (28, 2, 100), (36, 0, 132), (59, 0, 214),
+ (87, 25, 255), (96, 39, 255), (100, 44, 255), (95, 38, 255),
+ (80, 17, 254), (41, 2, 127), (33, 1, 113), (26, 0, 99),
+ (17, 1, 66), (11, 0, 51), (15, 0, 55), (21, 0, 77),
+ (52, 22, 136), (65, 25, 166), (78, 29, 196), (105, 54, 245),
+ (112, 60, 255), (120, 72, 255), (122, 74, 255), (127, 80, 255),
+ (128, 81, 255), (132, 86, 255), (136, 94, 254), (140, 99, 255),
+ (144, 103, 255), (150, 111, 255), (154, 117, 255), (160, 129, 255),
+ (188, 163, 255), (192, 168, 255), (196, 174, 255), (204, 184, 255),
+ (242, 220, 196), (255, 215, 164), (255, 206, 140), (255, 192, 112),
+ (255, 190, 108), (254, 198, 123), (251, 214, 169), (210, 206, 223),
+ (189, 164, 255), (178, 149, 255), (169, 139, 253), (157, 121, 255),
+ (176, 147, 255), (184, 159, 253), (194, 178, 240), (198, 197, 211),
+ (254, 208, 146), (255, 193, 106), (255, 162, 48), (222, 127, 1),
+ (166, 97, 20), (84, 83, 91), (76, 65, 107), (72, 41, 160),
+ (99, 58, 216), (129, 83, 254), (155, 119, 255), (156, 120, 255),
+ (161, 129, 255), (161, 129, 252), (157, 121, 255), (146, 106, 255),
+ (132, 86, 255), (117, 66, 255), (107, 58, 255), (104, 49, 254),
+ (96, 39, 255), (95, 38, 255), (78, 15, 255), (63, 1, 236),
+ (69, 37, 162), (66, 55, 97), (112, 63, 23), (165, 95, 0),
+ (208, 124, 2), (236, 134, 0), (255, 144, 2), (255, 160, 0),
+ (255, 152, 17), (254, 173, 68), (255, 186, 83), (255, 174, 69),
+ (253, 167, 64), (228, 158, 44), (170, 117, 49), (104, 81, 65),
+ (101, 79, 65), (137, 93, 32), (148, 87, 6), (183, 104, 3),
+ (194, 109, 3), (199, 129, 43), (182, 141, 75), (147, 141, 167),
+ (177, 151, 252), (201, 180, 255), (222, 217, 213), (246, 195, 129)
+ ),
+
+// 216 Apophysis-040427-4DmnCntndWP
+((116, 190, 251), (121, 191, 251), (123, 192, 249), (126, 193, 248),
+ (131, 196, 250), (137, 200, 253), (138, 200, 253), (140, 200, 254),
+ (171, 216, 255), (172, 215, 252), (174, 214, 249), (197, 215, 230),
+ (220, 217, 212), (228, 214, 201), (237, 212, 190), (231, 212, 197),
+ (226, 213, 204), (161, 205, 240), (149, 201, 246), (137, 198, 252),
+ (133, 193, 245), (130, 188, 238), (130, 188, 238), (130, 188, 238),
+ (132, 185, 229), (141, 167, 194), (150, 150, 160), (201, 150, 114),
+ (253, 151, 69), (252, 137, 46), (252, 124, 23), (245, 127, 40),
+ (255, 155, 77), (208, 171, 142), (177, 162, 151), (146, 153, 161),
+ (115, 132, 144), (84, 111, 128), (71, 103, 128), (59, 95, 129),
+ (84, 138, 184), (90, 156, 211), (96, 174, 238), (83, 171, 244),
+ (70, 169, 250), (59, 163, 248), (48, 158, 247), (35, 154, 254),
+ (21, 148, 253), (5, 135, 245), (2, 133, 243), (0, 132, 241),
+ (2, 129, 235), (4, 127, 230), (2, 121, 220), (0, 115, 210),
+ (1, 68, 123), (0, 59, 108), (0, 51, 94), (2, 47, 86),
+ (4, 44, 79), (8, 46, 80), (13, 49, 81), (8, 61, 105),
+ (4, 67, 121), (17, 126, 217), (75, 152, 217), (133, 178, 217),
+ (149, 183, 215), (165, 189, 213), (201, 201, 201), (244, 189, 148),
+ (212, 169, 137), (186, 178, 174), (160, 188, 212), (147, 189, 226),
+ (135, 191, 240), (133, 194, 245), (132, 197, 251), (127, 196, 255),
+ (124, 193, 252), (130, 197, 252), (150, 195, 234), (171, 193, 216),
+ (192, 192, 194), (213, 192, 173), (217, 164, 122), (238, 147, 76),
+ (183, 82, 0), (169, 83, 16), (155, 85, 33), (162, 88, 30),
+ (170, 92, 28), (198, 90, 2), (235, 106, 4), (253, 113, 0),
+ (204, 121, 53), (128, 81, 35), (100, 96, 89), (72, 111, 144),
+ (60, 105, 144), (48, 99, 144), (41, 97, 144), (31, 110, 177),
+ (15, 122, 218), (24, 137, 234), (34, 152, 250), (53, 161, 252),
+ (72, 171, 254), (89, 180, 253), (102, 185, 255), (105, 186, 252),
+ (106, 185, 251), (54, 160, 248), (46, 158, 251), (38, 156, 254),
+ (28, 151, 254), (24, 147, 250), (10, 133, 236), (0, 130, 236),
+ (11, 80, 137), (25, 60, 90), (39, 40, 44), (56, 47, 43),
+ (73, 55, 43), (142, 66, 6), (143, 60, 0), (126, 55, 1),
+ (54, 24, 0), (22, 18, 15), (11, 19, 26), (1, 20, 37),
+ (3, 33, 59), (1, 20, 35), (4, 5, 7), (18, 6, 0),
+ (8, 17, 24), (10, 36, 59), (12, 56, 95), (26, 68, 105),
+ (41, 81, 116), (50, 94, 133), (63, 98, 128), (55, 100, 141),
+ (56, 107, 150), (61, 126, 180), (66, 138, 198), (72, 150, 216),
+ (93, 163, 223), (132, 174, 216), (171, 169, 170), (127, 192, 248),
+ (135, 200, 254), (137, 200, 254), (140, 200, 254), (145, 199, 246),
+ (172, 200, 224), (211, 206, 202), (240, 203, 174), (245, 205, 170),
+ (252, 207, 168), (224, 214, 205), (203, 205, 207), (183, 197, 210),
+ (158, 202, 239), (150, 204, 250), (153, 202, 243), (180, 202, 223),
+ (254, 202, 162), (254, 190, 140), (254, 178, 118), (236, 165, 109),
+ (255, 169, 98), (250, 158, 85), (188, 134, 96), (143, 95, 57),
+ (137, 70, 18), (76, 42, 15), (52, 61, 70), (54, 94, 129),
+ (28, 116, 190), (39, 147, 237), (70, 166, 250), (91, 179, 253),
+ (113, 188, 253), (115, 190, 253), (118, 192, 253), (108, 186, 252),
+ (77, 173, 250), (49, 159, 254), (34, 152, 252), (29, 145, 244),
+ (10, 127, 223), (7, 115, 205), (36, 89, 133), (31, 66, 96),
+ (39, 31, 28), (47, 33, 24), (30, 60, 88), (47, 91, 128),
+ (63, 114, 157), (36, 114, 180), (26, 130, 217), (21, 130, 223),
+ (32, 146, 242), (27, 149, 255), (25, 151, 253), (16, 144, 251),
+ (11, 132, 236), (10, 121, 213), (31, 109, 175), (25, 78, 122),
+ (9, 65, 114), (5, 65, 117), (19, 78, 138), (10, 109, 190),
+ (7, 116, 209), (9, 119, 208), (19, 110, 189), (24, 91, 146),
+ (34, 81, 123), (36, 64, 88), (120, 74, 38), (143, 65, 1),
+ (171, 77, 3), (186, 94, 21), (216, 116, 30), (154, 108, 82),
+ (127, 122, 119), (122, 153, 181), (102, 149, 191), (34, 136, 221),
+ (32, 145, 239), (37, 145, 235), (66, 168, 253), (84, 176, 253),
+ (91, 179, 253), (100, 183, 251), (101, 180, 247), (88, 175, 246),
+ (78, 173, 253), (72, 171, 255), (65, 166, 254), (68, 168, 253),
+ (91, 179, 253), (98, 181, 251), (105, 183, 249), (109, 178, 237),
+ (106, 172, 230), (109, 179, 238), (113, 187, 250), (112, 187, 252),
+ (106, 184, 248), (111, 187, 249), (115, 185, 245), (115, 190, 248)
+ ),
+
+// 217 Apophysis-040427-4DmnDimensn
+((139, 118, 97), (129, 113, 124), (123, 110, 111), (118, 108, 98),
+ (92, 91, 95), (67, 74, 93), (72, 55, 56), (78, 37, 19),
+ (77, 36, 18), (86, 40, 44), (95, 45, 70), (99, 45, 84),
+ (104, 45, 99), (112, 52, 97), (120, 60, 96), (124, 56, 87),
+ (129, 53, 79), (161, 45, 84), (145, 68, 101), (130, 91, 118),
+ (119, 90, 115), (108, 90, 112), (99, 77, 105), (91, 64, 99),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (98, 55, 47),
+ (120, 74, 77), (146, 93, 103), (173, 112, 130), (228, 158, 166),
+ (230, 182, 196), (228, 166, 181), (190, 153, 118), (153, 141, 55),
+ (149, 143, 55), (145, 145, 55), (139, 135, 57), (134, 125, 60),
+ (164, 111, 61), (166, 78, 64), (168, 46, 67), (169, 50, 72),
+ (171, 55, 78), (172, 48, 77), (173, 42, 76), (162, 29, 58),
+ (166, 28, 51), (162, 4, 19), (134, 3, 22), (107, 3, 26),
+ (92, 19, 22), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (78, 37, 19), (102, 74, 54),
+ (126, 111, 90), (142, 117, 104), (159, 124, 118), (214, 117, 128),
+ (224, 107, 133), (190, 123, 141), (157, 118, 136), (125, 114, 131),
+ (112, 116, 131), (100, 118, 132), (94, 120, 121), (114, 117, 126),
+ (138, 94, 119), (152, 64, 87), (167, 34, 55), (163, 18, 37),
+ (159, 2, 19), (153, 1, 14), (148, 0, 10), (142, 0, 43),
+ (99, 0, 108), (101, 15, 106), (117, 7, 70), (133, 0, 34),
+ (128, 0, 28), (124, 0, 23), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (78, 49, 56), (80, 63, 95), (89, 79, 109),
+ (99, 96, 123), (113, 118, 114), (111, 116, 96), (102, 110, 97),
+ (106, 78, 93), (78, 37, 19), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (78, 37, 19),
+ (127, 55, 59), (132, 101, 55), (143, 105, 79), (155, 110, 104),
+ (151, 129, 106), (143, 122, 93), (114, 142, 83), (37, 158, 79),
+ (85, 123, 136), (100, 126, 120), (116, 130, 104), (126, 155, 108),
+ (136, 181, 112), (156, 219, 78), (165, 157, 85), (178, 141, 112),
+ (239, 174, 180), (249, 220, 240), (252, 232, 247), (255, 244, 255),
+ (230, 227, 234), (222, 220, 242), (245, 211, 236), (224, 195, 215),
+ (142, 105, 139), (91, 61, 118), (41, 18, 98), (46, 12, 96),
+ (52, 6, 94), (63, 37, 66), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (99, 30, 59),
+ (135, 39, 67), (157, 36, 71), (162, 18, 45), (137, 7, 33),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (76, 38, 2), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (50, 68, 56), (55, 93, 80), (92, 95, 88),
+ (141, 135, 57), (20, 13, 106), (25, 13, 111), (44, 13, 107),
+ (71, 0, 101), (104, 64, 153), (140, 125, 132), (167, 119, 143),
+ (230, 138, 159), (224, 134, 153), (218, 131, 147), (225, 110, 125),
+ (210, 100, 111), (207, 86, 101), (187, 47, 94), (174, 44, 92),
+ (164, 41, 72), (152, 30, 55), (150, 28, 41), (143, 38, 53),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (77, 36, 18), (77, 36, 18), (77, 36, 18),
+ (77, 36, 18), (128, 5, 23), (140, 0, 35), (156, 3, 21),
+ (146, 18, 33), (144, 19, 49), (139, 31, 65), (120, 24, 98),
+ (97, 41, 90), (87, 59, 100), (81, 71, 98), (88, 84, 111),
+ (82, 65, 120), (52, 43, 126), (48, 24, 136), (0, 73, 143),
+ (38, 99, 156), (75, 100, 120), (84, 125, 111), (82, 139, 133),
+ (99, 134, 140), (118, 139, 170), (133, 156, 172), (224, 153, 171),
+ (230, 159, 173), (217, 132, 151), (183, 92, 109), (163, 58, 73),
+ (149, 53, 64), (78, 37, 19), (77, 36, 18), (77, 36, 18),
+ (79, 38, 20), (137, 92, 59), (122, 108, 79), (164, 70, 96),
+ (191, 59, 70), (199, 83, 94), (179, 88, 105), (167, 73, 99),
+ (166, 71, 95), (153, 58, 102), (134, 44, 98), (135, 21, 106),
+ (118, 51, 105), (109, 72, 105), (114, 91, 120), (100, 107, 117),
+ (85, 97, 135), (95, 110, 139), (121, 101, 128), (139, 103, 117)
+ ),
+
+// 218 Apophysis-040427-4SatnFlorlSwag
+((115, 96, 79), (58, 30, 44), (42, 31, 43), (26, 33, 43),
+ (13, 47, 45), (0, 62, 48), (15, 63, 53), (30, 65, 59),
+ (120, 89, 71), (146, 108, 87), (172, 127, 104), (190, 142, 121),
+ (209, 158, 139), (215, 158, 152), (221, 158, 166), (229, 157, 172),
+ (238, 156, 178), (227, 181, 168), (209, 196, 154), (191, 211, 140),
+ (163, 201, 135), (136, 192, 131), (133, 190, 130), (131, 189, 130),
+ (127, 190, 143), (143, 193, 153), (159, 196, 163), (151, 195, 153),
+ (144, 194, 143), (145, 197, 137), (147, 200, 132), (187, 158, 118),
+ (174, 129, 106), (170, 128, 104), (181, 155, 115), (193, 182, 126),
+ (205, 188, 138), (218, 195, 151), (220, 198, 152), (223, 201, 154),
+ (224, 168, 169), (212, 154, 153), (200, 141, 137), (181, 122, 116),
+ (163, 104, 96), (159, 100, 93), (156, 97, 91), (140, 113, 86),
+ (116, 130, 105), (28, 102, 129), (20, 82, 122), (12, 62, 115),
+ (6, 45, 102), (0, 29, 89), (5, 17, 84), (10, 6, 80),
+ (46, 40, 88), (76, 60, 78), (107, 80, 69), (107, 73, 65),
+ (108, 67, 61), (111, 66, 57), (114, 66, 54), (111, 65, 52),
+ (110, 61, 57), (119, 65, 63), (122, 64, 67), (126, 63, 72),
+ (124, 62, 70), (122, 61, 68), (119, 57, 68), (108, 55, 63),
+ (50, 26, 50), (25, 14, 25), (1, 3, 0), (1, 2, 0),
+ (2, 2, 0), (11, 14, 13), (21, 27, 27), (55, 29, 38),
+ (81, 39, 49), (109, 60, 56), (114, 71, 64), (119, 82, 73),
+ (126, 86, 78), (134, 91, 84), (149, 94, 87), (153, 94, 90),
+ (167, 98, 103), (185, 128, 119), (203, 158, 135), (194, 175, 140),
+ (185, 193, 146), (189, 189, 189), (146, 170, 172), (127, 127, 127),
+ (111, 92, 78), (62, 40, 52), (52, 29, 47), (43, 19, 43),
+ (45, 21, 43), (48, 23, 44), (70, 38, 49), (99, 57, 59),
+ (102, 75, 68), (92, 66, 60), (82, 57, 52), (65, 55, 44),
+ (49, 53, 36), (32, 46, 29), (47, 31, 32), (79, 44, 48),
+ (105, 56, 62), (131, 66, 74), (130, 66, 74), (130, 67, 75),
+ (124, 75, 68), (122, 82, 70), (109, 79, 68), (90, 74, 77),
+ (37, 56, 96), (25, 43, 94), (14, 30, 92), (14, 21, 87),
+ (15, 12, 83), (36, 25, 68), (56, 21, 61), (53, 30, 56),
+ (55, 28, 47), (49, 103, 105), (62, 130, 125), (75, 157, 145),
+ (76, 154, 164), (67, 156, 160), (50, 109, 123), (52, 84, 122),
+ (70, 117, 111), (83, 131, 112), (96, 145, 113), (103, 154, 115),
+ (110, 163, 117), (115, 184, 155), (105, 181, 169), (108, 178, 154),
+ (109, 156, 136), (94, 81, 75), (97, 78, 71), (100, 75, 68),
+ (86, 50, 64), (65, 39, 76), (56, 34, 55), (46, 22, 48),
+ (14, 17, 50), (13, 14, 55), (13, 11, 60), (24, 12, 62),
+ (56, 33, 53), (84, 53, 51), (102, 56, 56), (105, 54, 59),
+ (108, 58, 57), (120, 60, 68), (124, 62, 71), (128, 65, 74),
+ (141, 81, 80), (150, 89, 88), (152, 100, 89), (145, 90, 83),
+ (113, 61, 63), (101, 58, 59), (89, 55, 56), (50, 60, 36),
+ (9, 74, 40), (6, 84, 42), (0, 90, 68), (70, 78, 91),
+ (80, 81, 99), (81, 114, 97), (105, 139, 123), (105, 145, 144),
+ (114, 162, 148), (142, 173, 168), (185, 185, 185), (190, 190, 190),
+ (193, 193, 193), (198, 199, 200), (204, 205, 207), (224, 224, 224),
+ (225, 225, 217), (195, 195, 195), (194, 194, 184), (189, 194, 188),
+ (191, 191, 191), (196, 192, 191), (214, 181, 146), (207, 163, 150),
+ (195, 142, 128), (184, 113, 121), (164, 90, 107), (169, 105, 105),
+ (192, 128, 128), (205, 138, 145), (203, 143, 143), (198, 150, 130),
+ (184, 138, 115), (183, 126, 115), (184, 145, 116), (199, 152, 132),
+ (206, 158, 138), (209, 152, 135), (185, 121, 121), (170, 94, 107),
+ (246, 39, 49), (154, 83, 89), (149, 82, 89), (137, 70, 79),
+ (130, 70, 72), (135, 77, 75), (139, 96, 79), (142, 100, 84),
+ (137, 99, 80), (137, 99, 80), (133, 90, 74), (120, 73, 65),
+ (119, 63, 62), (119, 65, 63), (112, 75, 66), (113, 81, 70),
+ (108, 81, 70), (110, 76, 66), (115, 75, 65), (109, 66, 59),
+ (103, 62, 56), (99, 61, 52), (95, 45, 46), (66, 32, 48),
+ (40, 13, 44), (5, 3, 8), (0, 0, 0), (0, 0, 0),
+ (10, 12, 60), (0, 0, 69), (0, 0, 74), (2, 19, 89),
+ (0, 35, 128), (0, 67, 136), (0, 69, 137), (12, 99, 118),
+ (29, 101, 126), (59, 118, 116), (91, 138, 120), (125, 125, 125),
+ (162, 131, 102), (165, 130, 102), (152, 122, 94), (147, 117, 83)
+ ),
+
+// 219 Apophysis-040427-4DDragHeart
+((114, 84, 22), (131, 106, 50), (178, 143, 91), (225, 181, 132),
+ (225, 181, 132), (225, 181, 132), (200, 168, 113), (175, 155, 94),
+ (114, 88, 29), (114, 86, 26), (114, 84, 24), (114, 83, 23),
+ (115, 83, 22), (115, 82, 21), (116, 82, 21), (116, 82, 21),
+ (116, 82, 21), (113, 83, 19), (111, 80, 19), (110, 78, 19),
+ (106, 77, 20), (103, 76, 21), (89, 61, 28), (75, 47, 35),
+ (99, 73, 22), (103, 75, 22), (107, 78, 22), (108, 78, 23),
+ (109, 78, 24), (109, 79, 24), (110, 81, 25), (109, 83, 24),
+ (109, 83, 22), (110, 86, 24), (111, 86, 26), (113, 87, 28),
+ (124, 99, 37), (136, 111, 47), (154, 133, 69), (173, 155, 91),
+ (189, 174, 115), (153, 127, 88), (118, 81, 62), (115, 82, 44),
+ (112, 83, 27), (111, 82, 26), (111, 82, 26), (112, 81, 24),
+ (111, 80, 25), (110, 81, 25), (110, 81, 25), (111, 82, 26),
+ (111, 82, 24), (112, 83, 23), (112, 83, 23), (113, 83, 23),
+ (113, 84, 26), (113, 85, 27), (113, 87, 28), (112, 86, 26),
+ (111, 85, 24), (111, 85, 24), (111, 85, 24), (112, 83, 23),
+ (113, 83, 23), (113, 81, 24), (112, 81, 24), (112, 81, 24),
+ (112, 81, 24), (112, 81, 24), (112, 82, 22), (112, 82, 20),
+ (111, 83, 20), (111, 82, 20), (111, 81, 21), (110, 80, 20),
+ (110, 80, 20), (110, 80, 20), (111, 81, 21), (112, 81, 24),
+ (112, 83, 25), (112, 83, 25), (112, 82, 23), (113, 81, 22),
+ (113, 81, 22), (113, 81, 22), (112, 82, 20), (110, 82, 17),
+ (113, 81, 22), (112, 81, 22), (112, 82, 22), (111, 82, 22),
+ (111, 82, 22), (109, 83, 22), (110, 84, 23), (111, 85, 24),
+ (111, 85, 26), (113, 87, 28), (115, 88, 30), (118, 89, 33),
+ (179, 75, 49), (240, 61, 65), (255, 82, 86), (252, 210, 62),
+ (253, 246, 77), (254, 235, 41), (255, 225, 5), (250, 222, 5),
+ (246, 219, 5), (221, 197, 3), (215, 192, 2), (237, 211, 2),
+ (255, 220, 4), (255, 255, 85), (255, 255, 84), (255, 255, 83),
+ (255, 227, 71), (254, 110, 102), (255, 83, 87), (255, 112, 116),
+ (208, 199, 166), (224, 210, 181), (241, 221, 197), (241, 221, 197),
+ (241, 221, 197), (216, 209, 183), (225, 181, 134), (225, 181, 134),
+ (254, 98, 99), (255, 78, 84), (254, 76, 81), (254, 75, 78),
+ (255, 73, 75), (247, 62, 67), (214, 37, 47), (119, 85, 22),
+ (113, 83, 23), (113, 84, 24), (114, 85, 25), (114, 84, 25),
+ (114, 83, 26), (113, 84, 26), (112, 83, 25), (112, 83, 23),
+ (111, 82, 22), (109, 78, 23), (108, 77, 23), (108, 77, 23),
+ (105, 80, 26), (104, 79, 23), (105, 76, 18), (101, 72, 16),
+ (95, 5, 7), (101, 24, 3), (107, 44, 0), (100, 74, 17),
+ (107, 77, 17), (108, 77, 20), (107, 78, 18), (108, 80, 17),
+ (109, 79, 15), (109, 77, 16), (109, 77, 17), (109, 77, 18),
+ (110, 78, 19), (111, 79, 20), (112, 80, 19), (113, 83, 19),
+ (117, 83, 20), (117, 83, 20), (118, 84, 21), (118, 84, 23),
+ (207, 40, 47), (241, 60, 65), (254, 68, 73), (254, 73, 78),
+ (255, 72, 76), (255, 66, 70), (240, 61, 65), (120, 86, 25),
+ (118, 87, 23), (117, 86, 22), (117, 85, 24), (116, 86, 24),
+ (124, 94, 34), (157, 123, 28), (191, 152, 23), (227, 165, 32),
+ (234, 179, 37), (184, 165, 1), (154, 126, 17), (118, 89, 23),
+ (119, 88, 23), (117, 86, 21), (116, 85, 21), (115, 86, 20),
+ (114, 84, 22), (113, 83, 21), (113, 83, 21), (112, 82, 20),
+ (112, 80, 19), (113, 79, 18), (114, 80, 19), (113, 78, 20),
+ (112, 80, 21), (113, 81, 22), (113, 81, 22), (115, 83, 22),
+ (116, 81, 23), (207, 35, 47), (237, 41, 55), (247, 64, 68),
+ (254, 69, 74), (251, 64, 59), (119, 90, 24), (118, 89, 23),
+ (117, 86, 22), (113, 87, 26), (110, 86, 24), (110, 84, 23),
+ (109, 83, 22), (109, 83, 22), (109, 83, 22), (109, 80, 22),
+ (110, 79, 22), (109, 78, 21), (110, 78, 19), (109, 77, 18),
+ (109, 79, 17), (111, 79, 18), (111, 79, 18), (110, 78, 19),
+ (110, 78, 19), (111, 79, 20), (111, 79, 20), (112, 80, 21),
+ (112, 80, 21), (113, 81, 22), (113, 81, 22), (113, 81, 22),
+ (114, 82, 21), (115, 83, 22), (116, 84, 23), (116, 82, 21),
+ (117, 83, 20), (116, 85, 21), (117, 86, 22), (118, 89, 23),
+ (120, 89, 25), (138, 103, 13), (196, 103, 25), (253, 79, 81),
+ (254, 84, 87), (224, 180, 133), (196, 184, 124), (173, 154, 96)
+ ),
+
+// 220 Apophysis-040427-4DimesPathsE
+((212, 252, 226), (139, 125, 160), (98, 90, 114), (57, 55, 69),
+ (35, 28, 42), (13, 1, 15), (9, 1, 8), (6, 2, 1),
+ (2, 2, 2), (5, 1, 2), (8, 0, 2), (11, 0, 3),
+ (14, 0, 5), (32, 0, 18), (50, 0, 32), (67, 13, 50),
+ (84, 27, 68), (140, 63, 71), (148, 74, 65), (156, 86, 60),
+ (117, 66, 58), (78, 46, 57), (66, 42, 39), (55, 38, 22),
+ (39, 86, 92), (39, 88, 111), (39, 91, 131), (85, 101, 142),
+ (132, 111, 154), (137, 104, 160), (143, 98, 167), (144, 96, 144),
+ (96, 88, 112), (80, 45, 109), (91, 63, 123), (102, 81, 137),
+ (149, 107, 122), (197, 133, 108), (213, 144, 114), (230, 156, 121),
+ (233, 217, 217), (224, 235, 225), (216, 254, 233), (199, 242, 226),
+ (183, 231, 219), (173, 222, 210), (163, 213, 202), (166, 195, 190),
+ (168, 188, 176), (208, 231, 202), (230, 243, 228), (252, 255, 255),
+ (253, 252, 253), (254, 250, 251), (254, 241, 253), (255, 232, 255),
+ (248, 250, 249), (235, 242, 249), (222, 234, 250), (158, 217, 252),
+ (94, 200, 255), (109, 186, 202), (125, 173, 149), (112, 86, 111),
+ (110, 45, 88), (159, 67, 130), (167, 64, 185), (176, 61, 240),
+ (196, 85, 247), (216, 109, 255), (200, 147, 237), (193, 196, 239),
+ (219, 143, 241), (227, 132, 234), (235, 122, 228), (224, 129, 231),
+ (213, 137, 235), (213, 151, 223), (213, 166, 212), (192, 230, 121),
+ (184, 208, 34), (87, 164, 0), (105, 156, 58), (124, 149, 117),
+ (154, 139, 117), (184, 130, 118), (198, 167, 185), (254, 187, 196),
+ (186, 222, 72), (134, 162, 39), (83, 103, 6), (58, 70, 10),
+ (34, 38, 15), (17, 6, 10), (6, 9, 0), (0, 17, 0),
+ (0, 30, 18), (17, 135, 47), (8, 163, 23), (0, 191, 0),
+ (56, 182, 58), (113, 174, 117), (163, 185, 164), (158, 213, 158),
+ (133, 212, 103), (117, 195, 93), (101, 178, 84), (94, 174, 58),
+ (88, 170, 33), (57, 245, 46), (170, 255, 30), (247, 255, 43),
+ (254, 253, 38), (245, 244, 226), (248, 239, 239), (252, 235, 253),
+ (255, 221, 252), (226, 208, 208), (192, 178, 165), (193, 161, 84),
+ (207, 190, 12), (204, 104, 7), (202, 19, 3), (184, 14, 1),
+ (167, 9, 0), (111, 18, 1), (66, 111, 6), (41, 141, 71),
+ (15, 93, 41), (12, 38, 55), (17, 33, 58), (22, 28, 62),
+ (37, 0, 75), (43, 0, 76), (42, 9, 90), (18, 1, 116),
+ (27, 13, 186), (24, 6, 127), (21, 0, 68), (13, 1, 58),
+ (5, 2, 49), (0, 0, 26), (11, 0, 23), (28, 6, 19),
+ (45, 16, 0), (95, 69, 80), (115, 74, 87), (136, 79, 94),
+ (178, 114, 166), (175, 132, 185), (189, 130, 188), (162, 55, 219),
+ (110, 76, 173), (115, 61, 167), (120, 46, 161), (118, 40, 150),
+ (114, 40, 153), (91, 21, 154), (70, 20, 153), (45, 0, 101),
+ (50, 0, 83), (91, 33, 118), (94, 40, 117), (98, 47, 116),
+ (73, 50, 79), (95, 19, 57), (122, 13, 81), (130, 56, 135),
+ (145, 36, 225), (159, 40, 238), (173, 45, 252), (147, 52, 198),
+ (103, 24, 149), (59, 2, 97), (53, 3, 66), (19, 0, 55),
+ (13, 4, 31), (0, 12, 20), (0, 18, 24), (7, 22, 45),
+ (4, 45, 99), (17, 29, 131), (62, 32, 118), (72, 90, 90),
+ (96, 148, 125), (126, 127, 111), (156, 106, 97), (164, 69, 67),
+ (181, 149, 90), (202, 142, 108), (196, 175, 172), (190, 186, 209),
+ (208, 186, 209), (221, 215, 217), (200, 209, 208), (186, 177, 232),
+ (193, 126, 170), (240, 79, 129), (169, 77, 40), (179, 28, 0),
+ (152, 15, 9), (116, 1, 4), (48, 5, 0), (18, 0, 12),
+ (8, 7, 3), (2, 14, 0), (0, 21, 0), (25, 25, 13),
+ (43, 18, 40), (60, 23, 64), (68, 39, 95), (50, 76, 150),
+ (14, 104, 201), (39, 237, 240), (31, 192, 174), (72, 177, 120),
+ (38, 95, 89), (17, 53, 67), (24, 34, 61), (20, 18, 32),
+ (6, 7, 11), (3, 3, 3), (4, 9, 3), (4, 10, 6),
+ (5, 6, 10), (0, 11, 17), (0, 1, 15), (0, 0, 2),
+ (1, 1, 1), (0, 2, 1), (0, 5, 0), (0, 7, 3),
+ (7, 3, 17), (39, 4, 46), (63, 0, 80), (63, 10, 142),
+ (81, 65, 164), (71, 82, 148), (70, 55, 112), (48, 35, 78),
+ (56, 18, 77), (36, 22, 57), (25, 0, 35), (18, 0, 26),
+ (3, 0, 17), (3, 3, 15), (2, 1, 19), (0, 2, 23),
+ (0, 0, 43), (11, 0, 58), (32, 2, 76), (61, 36, 101),
+ (110, 68, 144), (145, 107, 182), (202, 237, 207), (176, 153, 205)
+ ),
+
+// 221 Apophysis-040427-4DimensPathsE2
+((255, 234, 255), (204, 132, 244), (181, 127, 233), (158, 123, 223),
+ (148, 116, 203), (139, 109, 183), (137, 119, 161), (136, 130, 140),
+ (81, 135, 51), (72, 112, 68), (63, 89, 86), (39, 65, 68),
+ (15, 42, 51), (9, 29, 38), (3, 16, 25), (1, 12, 20),
+ (0, 8, 15), (1, 1, 1), (2, 2, 6), (4, 4, 12),
+ (9, 21, 14), (14, 38, 16), (22, 41, 20), (30, 45, 24),
+ (61, 99, 14), (100, 85, 35), (140, 71, 56), (133, 69, 87),
+ (126, 68, 119), (110, 80, 153), (94, 93, 187), (107, 64, 197),
+ (103, 26, 180), (57, 22, 102), (57, 37, 106), (57, 52, 110),
+ (72, 71, 140), (87, 90, 171), (123, 114, 187), (160, 139, 204),
+ (192, 224, 235), (154, 192, 230), (116, 161, 226), (106, 112, 201),
+ (96, 63, 176), (77, 45, 145), (58, 28, 114), (33, 2, 80),
+ (25, 0, 81), (24, 0, 57), (24, 0, 47), (25, 0, 37),
+ (21, 0, 29), (17, 0, 21), (15, 4, 17), (13, 8, 14),
+ (17, 0, 38), (14, 0, 42), (12, 0, 47), (6, 2, 30),
+ (0, 4, 14), (0, 2, 10), (1, 0, 7), (1, 1, 1),
+ (0, 2, 0), (1, 1, 1), (0, 2, 0), (0, 3, 0),
+ (0, 8, 0), (0, 14, 0), (9, 36, 3), (17, 69, 21),
+ (67, 141, 54), (103, 138, 36), (140, 135, 18), (122, 115, 22),
+ (105, 95, 26), (84, 95, 34), (63, 96, 43), (56, 34, 36),
+ (65, 22, 41), (128, 54, 107), (124, 51, 149), (121, 48, 191),
+ (115, 45, 187), (110, 43, 184), (132, 13, 181), (108, 17, 200),
+ (84, 0, 174), (56, 0, 126), (29, 0, 78), (33, 0, 68),
+ (37, 0, 58), (29, 0, 43), (15, 1, 24), (8, 1, 17),
+ (0, 0, 12), (7, 2, 9), (9, 1, 11), (11, 0, 14),
+ (8, 0, 16), (5, 1, 18), (20, 0, 27), (29, 2, 21),
+ (37, 5, 28), (39, 19, 24), (42, 34, 21), (31, 33, 16),
+ (20, 32, 12), (16, 11, 34), (1, 17, 43), (26, 35, 50),
+ (61, 47, 64), (137, 108, 138), (156, 122, 151), (176, 137, 164),
+ (211, 164, 232), (255, 191, 230), (235, 186, 171), (236, 179, 160),
+ (165, 205, 57), (142, 189, 70), (119, 174, 83), (143, 173, 78),
+ (167, 173, 73), (181, 80, 24), (181, 27, 77), (167, 70, 165),
+ (145, 76, 143), (141, 73, 50), (164, 84, 40), (187, 95, 30),
+ (217, 69, 5), (195, 67, 0), (179, 91, 4), (144, 79, 21),
+ (67, 19, 0), (39, 9, 0), (11, 0, 0), (8, 6, 1),
+ (5, 13, 2), (9, 43, 0), (43, 106, 0), (64, 173, 0),
+ (19, 242, 11), (99, 222, 95), (124, 210, 128), (149, 199, 162),
+ (186, 239, 197), (210, 197, 188), (220, 196, 170), (198, 177, 114),
+ (205, 187, 17), (185, 186, 11), (166, 185, 5), (139, 186, 30),
+ (129, 112, 84), (77, 72, 79), (81, 47, 84), (67, 25, 91),
+ (63, 0, 77), (20, 14, 16), (16, 8, 13), (13, 2, 10),
+ (9, 0, 0), (3, 0, 0), (4, 0, 0), (18, 5, 0),
+ (50, 0, 0), (67, 11, 3), (85, 22, 7), (115, 5, 0),
+ (132, 59, 16), (151, 62, 30), (134, 58, 44), (123, 52, 30),
+ (59, 38, 55), (39, 31, 70), (0, 64, 133), (20, 96, 112),
+ (69, 141, 104), (107, 157, 122), (109, 165, 154), (126, 117, 144),
+ (29, 88, 86), (25, 86, 70), (21, 84, 55), (0, 26, 0),
+ (8, 0, 38), (11, 4, 37), (11, 0, 22), (10, 8, 21),
+ (0, 29, 19), (16, 43, 24), (43, 34, 37), (58, 49, 66),
+ (65, 64, 106), (66, 87, 150), (81, 135, 101), (68, 129, 87),
+ (75, 134, 90), (80, 151, 93), (116, 174, 87), (144, 160, 121),
+ (206, 157, 160), (241, 233, 187), (241, 255, 215), (231, 255, 218),
+ (244, 255, 246), (255, 241, 255), (216, 213, 240), (207, 179, 168),
+ (147, 142, 113), (97, 86, 103), (77, 72, 79), (140, 69, 47),
+ (158, 84, 35), (173, 107, 21), (196, 140, 105), (154, 119, 143),
+ (142, 110, 121), (86, 65, 106), (43, 48, 70), (38, 25, 53),
+ (41, 14, 31), (28, 8, 20), (22, 0, 18), (24, 1, 11),
+ (15, 0, 8), (6, 0, 0), (1, 0, 4), (5, 2, 13),
+ (8, 5, 16), (11, 0, 23), (22, 0, 35), (34, 7, 50),
+ (49, 18, 60), (58, 8, 45), (59, 4, 43), (68, 22, 25),
+ (59, 10, 6), (39, 0, 0), (25, 0, 0), (28, 0, 13),
+ (46, 26, 28), (79, 56, 66), (86, 89, 104), (135, 130, 137),
+ (134, 169, 188), (135, 238, 235), (129, 238, 241), (90, 187, 168),
+ (98, 211, 149), (164, 221, 214), (238, 246, 225), (255, 252, 255)
+ ),
+
+// 222 Apophysis-040427-4DimensPathE2
+((224, 151, 145), (12, 8, 7), (12, 6, 4), (13, 5, 2),
+ (16, 6, 1), (20, 8, 0), (19, 4, 0), (19, 0, 0),
+ (28, 0, 0), (30, 3, 0), (32, 7, 0), (39, 7, 0),
+ (47, 7, 0), (52, 3, 12), (58, 0, 24), (66, 4, 24),
+ (75, 8, 25), (73, 44, 46), (58, 132, 126), (44, 220, 207),
+ (50, 224, 204), (56, 228, 202), (76, 238, 165), (96, 248, 129),
+ (154, 200, 200), (195, 227, 220), (237, 255, 241), (246, 238, 247),
+ (255, 222, 254), (255, 211, 227), (255, 200, 201), (250, 185, 103),
+ (251, 239, 5), (180, 250, 14), (196, 208, 17), (212, 166, 21),
+ (184, 169, 21), (156, 172, 21), (169, 197, 31), (183, 222, 41),
+ (124, 180, 0), (124, 153, 30), (124, 126, 61), (161, 106, 30),
+ (198, 86, 0), (202, 85, 16), (206, 85, 32), (187, 58, 36),
+ (189, 43, 54), (100, 0, 16), (103, 23, 8), (107, 46, 0),
+ (98, 110, 0), (90, 174, 0), (100, 214, 36), (111, 255, 72),
+ (144, 197, 81), (195, 142, 90), (247, 87, 99), (228, 58, 100),
+ (209, 29, 102), (220, 35, 89), (231, 41, 77), (189, 69, 44),
+ (182, 70, 33), (81, 24, 4), (77, 23, 2), (74, 22, 0),
+ (68, 24, 0), (62, 26, 0), (72, 37, 7), (72, 60, 48),
+ (144, 112, 117), (164, 136, 126), (185, 161, 135), (186, 176, 139),
+ (188, 191, 144), (183, 182, 131), (178, 173, 118), (183, 148, 118),
+ (182, 156, 105), (218, 144, 55), (208, 105, 61), (199, 66, 67),
+ (212, 74, 71), (225, 82, 76), (221, 59, 108), (211, 84, 135),
+ (168, 21, 189), (114, 33, 179), (61, 45, 169), (70, 42, 108),
+ (80, 40, 48), (65, 23, 35), (36, 29, 36), (41, 32, 25),
+ (49, 10, 13), (16, 7, 0), (8, 4, 0), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (8, 0, 5), (18, 0, 0),
+ (51, 9, 10), (86, 23, 39), (122, 37, 68), (138, 59, 83),
+ (155, 81, 98), (167, 114, 130), (201, 147, 173), (241, 211, 211),
+ (255, 224, 219), (240, 163, 145), (216, 146, 145), (192, 129, 146),
+ (143, 103, 91), (96, 79, 72), (96, 67, 59), (112, 80, 81),
+ (130, 116, 113), (133, 118, 112), (137, 120, 112), (134, 127, 114),
+ (132, 135, 116), (152, 138, 129), (174, 154, 153), (181, 157, 155),
+ (177, 166, 144), (148, 138, 102), (155, 138, 98), (163, 139, 95),
+ (215, 171, 46), (202, 199, 10), (174, 245, 17), (126, 234, 9),
+ (25, 191, 3), (27, 154, 1), (29, 118, 0), (24, 101, 0),
+ (19, 85, 0), (16, 38, 0), (56, 29, 2), (82, 137, 0),
+ (22, 158, 0), (61, 183, 0), (77, 162, 7), (93, 142, 14),
+ (134, 66, 27), (109, 47, 52), (103, 48, 41), (92, 49, 43),
+ (157, 110, 82), (167, 138, 100), (177, 167, 118), (193, 187, 171),
+ (255, 224, 241), (255, 251, 234), (255, 255, 242), (255, 246, 243),
+ (255, 224, 255), (213, 224, 182), (192, 212, 179), (172, 200, 177),
+ (159, 152, 142), (114, 117, 132), (66, 78, 74), (43, 90, 70),
+ (55, 25, 0), (53, 16, 0), (51, 8, 1), (44, 0, 0),
+ (49, 0, 17), (45, 0, 44), (43, 7, 55), (56, 0, 114),
+ (75, 35, 167), (94, 78, 200), (89, 127, 202), (85, 160, 189),
+ (137, 167, 103), (147, 133, 94), (133, 108, 101), (138, 95, 89),
+ (133, 52, 49), (135, 30, 51), (138, 8, 54), (129, 0, 71),
+ (144, 0, 71), (158, 43, 138), (159, 65, 149), (165, 106, 124),
+ (196, 128, 119), (161, 114, 108), (171, 72, 90), (183, 66, 110),
+ (230, 79, 72), (252, 102, 17), (238, 31, 15), (232, 21, 28),
+ (218, 33, 38), (219, 32, 23), (193, 13, 14), (101, 1, 0),
+ (96, 0, 0), (83, 18, 0), (82, 2, 3), (81, 0, 8),
+ (80, 0, 0), (75, 0, 1), (52, 1, 0), (29, 5, 3),
+ (27, 0, 0), (29, 0, 0), (41, 0, 0), (67, 0, 8),
+ (93, 1, 2), (123, 10, 40), (178, 61, 70), (216, 141, 164),
+ (221, 194, 199), (255, 240, 241), (255, 252, 228), (223, 234, 191),
+ (198, 171, 160), (168, 117, 88), (144, 76, 41), (109, 55, 27),
+ (80, 20, 22), (77, 20, 11), (61, 13, 9), (61, 10, 7),
+ (51, 7, 8), (57, 0, 0), (55, 0, 0), (50, 0, 0),
+ (42, 8, 0), (28, 9, 0), (19, 16, 0), (14, 6, 3),
+ (10, 1, 0), (0, 6, 0), (0, 6, 2), (1, 1, 1),
+ (14, 0, 0), (17, 0, 0), (18, 2, 3), (14, 0, 0),
+ (5, 0, 4), (0, 0, 7), (1, 5, 6), (7, 7, 7),
+ (24, 25, 0), (59, 58, 37), (142, 102, 90), (255, 175, 156)
+ ),
+
+// 223 Apophysis-040427-4Doodles
+((145, 106, 3), (181, 151, 125), (169, 173, 151), (157, 196, 177),
+ (154, 193, 174), (152, 191, 172), (158, 189, 173), (165, 187, 175),
+ (161, 161, 161), (154, 154, 154), (148, 148, 148), (148, 141, 144),
+ (149, 134, 141), (105, 114, 124), (61, 95, 107), (51, 84, 113),
+ (41, 73, 120), (17, 28, 134), (8, 30, 94), (0, 32, 54),
+ (15, 33, 54), (30, 35, 54), (38, 41, 51), (46, 47, 49),
+ (185, 150, 120), (219, 193, 125), (254, 237, 131), (210, 177, 72),
+ (166, 117, 14), (158, 112, 8), (150, 107, 2), (148, 91, 22),
+ (152, 56, 16), (145, 141, 96), (166, 164, 140), (187, 187, 185),
+ (195, 194, 192), (203, 202, 200), (202, 202, 201), (202, 202, 202),
+ (193, 193, 193), (176, 197, 187), (160, 202, 182), (98, 205, 180),
+ (36, 209, 179), (35, 174, 148), (34, 140, 117), (11, 72, 73),
+ (38, 50, 62), (88, 64, 28), (103, 75, 59), (119, 87, 90),
+ (137, 122, 127), (155, 158, 165), (172, 173, 176), (189, 189, 187),
+ (233, 237, 240), (241, 245, 247), (250, 253, 255), (252, 254, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (242, 253, 249),
+ (232, 232, 208), (159, 159, 159), (124, 124, 124), (89, 89, 89),
+ (82, 81, 82), (76, 74, 75), (64, 65, 57), (73, 55, 31),
+ (69, 40, 6), (58, 37, 9), (47, 35, 13), (46, 23, 7),
+ (46, 12, 2), (54, 18, 5), (63, 24, 9), (71, 14, 5),
+ (60, 13, 3), (31, 7, 43), (37, 18, 31), (44, 30, 19),
+ (53, 39, 19), (63, 48, 19), (78, 55, 13), (114, 85, 27),
+ (168, 153, 84), (162, 174, 130), (156, 195, 176), (145, 205, 205),
+ (134, 215, 234), (173, 255, 253), (217, 255, 250), (230, 255, 255),
+ (231, 255, 253), (198, 198, 196), (165, 165, 163), (133, 133, 131),
+ (117, 114, 108), (102, 95, 85), (82, 77, 74), (61, 79, 83),
+ (138, 137, 142), (156, 156, 158), (175, 175, 175), (182, 182, 182),
+ (189, 189, 189), (191, 191, 189), (176, 174, 175), (151, 151, 151),
+ (119, 119, 119), (62, 95, 4), (58, 70, 14), (54, 46, 25),
+ (45, 45, 45), (45, 45, 45), (41, 52, 56), (52, 59, 140),
+ (178, 81, 249), (162, 115, 223), (146, 150, 197), (125, 142, 183),
+ (105, 135, 169), (48, 165, 95), (4, 139, 34), (5, 48, 38),
+ (15, 15, 15), (37, 29, 6), (35, 32, 17), (34, 35, 29),
+ (45, 45, 45), (49, 55, 67), (60, 86, 99), (128, 128, 128),
+ (243, 162, 254), (241, 193, 254), (240, 225, 254), (235, 228, 242),
+ (231, 231, 231), (226, 215, 211), (212, 203, 206), (208, 208, 206),
+ (206, 206, 204), (203, 203, 201), (202, 202, 200), (202, 202, 200),
+ (198, 198, 198), (194, 194, 192), (190, 190, 188), (185, 185, 185),
+ (148, 146, 151), (154, 147, 151), (160, 148, 152), (183, 168, 173),
+ (193, 193, 191), (208, 214, 210), (219, 251, 240), (236, 255, 255),
+ (247, 255, 253), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (254, 255, 247), (254, 255, 191),
+ (252, 246, 148), (253, 247, 126), (255, 249, 105), (211, 255, 95),
+ (229, 223, 87), (237, 93, 56), (227, 4, 97), (173, 0, 72),
+ (160, 28, 23), (105, 118, 124), (126, 70, 69), (0, 6, 0),
+ (11, 9, 10), (27, 26, 24), (48, 35, 29), (47, 25, 64),
+ (78, 10, 121), (97, 31, 78), (116, 53, 35), (162, 44, 18),
+ (205, 61, 53), (242, 85, 94), (218, 112, 70), (190, 165, 85),
+ (204, 186, 114), (193, 186, 178), (210, 193, 201), (222, 220, 208),
+ (247, 247, 245), (254, 249, 253), (255, 254, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (251, 253, 252), (255, 236, 222),
+ (255, 250, 189), (252, 247, 183), (247, 231, 146), (251, 222, 142),
+ (209, 177, 192), (187, 187, 185), (179, 179, 179), (160, 160, 160),
+ (154, 154, 154), (141, 147, 145), (141, 141, 141), (141, 141, 141),
+ (140, 140, 140), (133, 149, 139), (130, 164, 148), (129, 171, 196),
+ (130, 205, 224), (160, 174, 235), (179, 131, 230), (201, 134, 250),
+ (206, 156, 229), (191, 191, 191), (160, 199, 180), (161, 181, 170),
+ (145, 145, 145), (120, 120, 120), (121, 89, 51), (90, 71, 57),
+ (101, 70, 39), (113, 48, 28), (118, 33, 13), (144, 55, 11)
+ ),
+
+// 224 Apophysis-040427-4Doodles2
+((191, 182, 107), (176, 142, 19), (182, 145, 11), (189, 148, 4),
+ (188, 147, 3), (188, 146, 2), (183, 142, 3), (179, 139, 5),
+ (150, 128, 42), (131, 120, 76), (113, 112, 110), (89, 89, 89),
+ (66, 67, 69), (43, 47, 39), (20, 27, 9), (25, 26, 13),
+ (30, 26, 17), (56, 61, 21), (101, 88, 12), (147, 115, 4),
+ (172, 134, 4), (197, 153, 5), (208, 161, 5), (219, 170, 5),
+ (239, 187, 5), (243, 191, 4), (248, 195, 3), (249, 195, 4),
+ (250, 195, 6), (250, 195, 6), (250, 195, 6), (250, 195, 6),
+ (250, 195, 6), (250, 195, 6), (250, 195, 6), (250, 195, 6),
+ (240, 187, 5), (230, 180, 5), (221, 172, 5), (213, 165, 5),
+ (170, 92, 82), (144, 75, 71), (119, 59, 61), (101, 66, 62),
+ (83, 73, 64), (80, 68, 67), (77, 64, 71), (90, 75, 80),
+ (115, 98, 91), (178, 172, 156), (202, 192, 182), (227, 212, 209),
+ (207, 176, 185), (188, 141, 161), (159, 128, 137), (130, 116, 113),
+ (163, 127, 65), (185, 144, 35), (207, 161, 5), (221, 172, 5),
+ (235, 184, 5), (240, 188, 4), (246, 192, 4), (251, 193, 5),
+ (245, 191, 7), (219, 170, 5), (207, 161, 5), (195, 153, 5),
+ (186, 146, 5), (178, 140, 5), (167, 132, 4), (163, 128, 2),
+ (165, 130, 2), (174, 137, 3), (183, 144, 4), (199, 156, 4),
+ (216, 169, 5), (219, 171, 4), (222, 174, 4), (230, 180, 5),
+ (236, 186, 5), (229, 179, 6), (219, 172, 5), (210, 165, 4),
+ (206, 161, 4), (202, 157, 4), (195, 151, 2), (180, 141, 4),
+ (167, 129, 4), (168, 130, 4), (169, 131, 4), (174, 135, 4),
+ (179, 139, 5), (191, 149, 3), (208, 162, 4), (222, 174, 4),
+ (231, 180, 3), (246, 192, 6), (248, 193, 6), (250, 195, 6),
+ (250, 195, 6), (250, 195, 6), (250, 195, 6), (250, 195, 6),
+ (250, 195, 6), (244, 190, 6), (238, 186, 6), (233, 181, 5),
+ (228, 176, 4), (210, 162, 4), (185, 143, 5), (156, 121, 3),
+ (123, 94, 2), (57, 25, 2), (43, 22, 5), (30, 20, 8),
+ (21, 15, 3), (0, 18, 6), (5, 28, 8), (0, 41, 9),
+ (17, 71, 21), (72, 44, 11), (127, 17, 2), (151, 21, 5),
+ (175, 25, 8), (193, 13, 24), (153, 31, 26), (140, 108, 5),
+ (146, 112, 4), (139, 49, 38), (135, 50, 39), (131, 51, 40),
+ (127, 77, 6), (137, 105, 4), (147, 115, 4), (163, 127, 4),
+ (201, 158, 4), (211, 166, 4), (222, 174, 4), (224, 174, 5),
+ (226, 175, 6), (226, 179, 5), (228, 177, 6), (231, 179, 5),
+ (238, 186, 4), (250, 195, 6), (250, 195, 6), (250, 195, 6),
+ (250, 195, 6), (252, 194, 6), (252, 194, 6), (51, 0, 9),
+ (26, 45, 13), (24, 65, 19), (22, 86, 26), (18, 90, 27),
+ (12, 90, 28), (17, 85, 28), (15, 55, 20), (19, 34, 11),
+ (24, 11, 2), (44, 5, 8), (38, 3, 8), (32, 1, 9),
+ (12, 4, 1), (5, 4, 2), (0, 1, 0), (0, 2, 1),
+ (50, 34, 44), (54, 57, 54), (59, 80, 65), (105, 101, 98),
+ (120, 116, 113), (124, 121, 116), (135, 128, 120), (161, 160, 158),
+ (169, 103, 105), (205, 107, 94), (182, 90, 79), (180, 78, 64),
+ (115, 92, 60), (110, 85, 54), (107, 93, 93), (115, 106, 107),
+ (175, 147, 37), (186, 150, 21), (198, 154, 6), (214, 166, 4),
+ (226, 179, 3), (238, 186, 4), (248, 193, 5), (249, 194, 5),
+ (248, 193, 5), (247, 193, 5), (239, 187, 5), (224, 176, 4),
+ (200, 156, 5), (175, 160, 93), (129, 123, 109), (112, 108, 105),
+ (82, 68, 83), (64, 57, 65), (53, 49, 24), (79, 48, 4),
+ (75, 58, 2), (103, 80, 2), (124, 100, 2), (144, 112, 1),
+ (157, 122, 2), (160, 119, 5), (160, 119, 5), (162, 119, 6),
+ (163, 122, 6), (160, 124, 4), (162, 126, 3), (165, 130, 4),
+ (172, 133, 2), (187, 146, 2), (199, 155, 4), (214, 166, 4),
+ (222, 174, 4), (224, 176, 4), (222, 174, 4), (220, 172, 4),
+ (209, 164, 3), (193, 148, 5), (172, 133, 2), (159, 125, 2),
+ (139, 107, 4), (87, 81, 5), (48, 56, 5), (24, 18, 2),
+ (3, 0, 0), (0, 0, 0), (11, 6, 2), (41, 18, 2),
+ (85, 19, 3), (78, 23, 26), (117, 51, 39), (162, 115, 7),
+ (169, 125, 2), (177, 139, 4), (190, 148, 4), (198, 154, 5),
+ (202, 159, 3), (204, 159, 4), (208, 162, 4), (208, 162, 4),
+ (210, 165, 4), (216, 166, 5), (224, 173, 4), (226, 174, 3),
+ (224, 176, 4), (217, 167, 6), (194, 173, 82), (204, 191, 112)
+ ),
+
+// 225 Apophysis-040427-4doodles3
+((255, 255, 253), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (254, 254, 253), (254, 253, 251), (246, 245, 244), (238, 238, 238),
+ (132, 129, 206), (73, 79, 156), (14, 30, 107), (16, 24, 62),
+ (19, 19, 17), (9, 9, 9), (0, 0, 2), (0, 0, 11),
+ (0, 0, 21), (7, 22, 105), (73, 11, 63), (140, 1, 22),
+ (140, 0, 16), (141, 0, 11), (133, 0, 36), (125, 1, 61),
+ (8, 0, 135), (15, 5, 158), (23, 11, 181), (33, 38, 166),
+ (43, 65, 151), (23, 97, 156), (3, 130, 162), (8, 149, 231),
+ (9, 147, 235), (91, 118, 231), (146, 116, 166), (201, 115, 102),
+ (206, 100, 82), (212, 86, 63), (212, 126, 103), (212, 167, 144),
+ (244, 244, 244), (249, 249, 249), (255, 255, 255), (254, 254, 254),
+ (254, 254, 254), (248, 248, 248), (243, 243, 243), (210, 210, 210),
+ (174, 174, 174), (167, 63, 38), (151, 33, 19), (135, 3, 1),
+ (95, 5, 0), (56, 7, 0), (28, 3, 0), (1, 0, 0),
+ (15, 15, 15), (29, 39, 27), (44, 64, 39), (71, 92, 75),
+ (98, 121, 111), (126, 147, 138), (154, 174, 165), (203, 203, 203),
+ (246, 246, 246), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (254, 255, 255), (254, 254, 254),
+ (239, 243, 255), (156, 175, 169), (99, 121, 168), (42, 67, 168),
+ (29, 33, 171), (17, 0, 174), (11, 0, 178), (10, 0, 175),
+ (6, 0, 110), (3, 0, 56), (0, 0, 2), (0, 0, 1),
+ (0, 0, 0), (5, 6, 8), (48, 24, 24), (100, 51, 55),
+ (161, 109, 95), (243, 224, 220), (247, 238, 236), (252, 252, 252),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (248, 248, 248), (230, 230, 230), (213, 213, 213),
+ (201, 185, 185), (209, 153, 138), (182, 92, 68), (132, 53, 49),
+ (84, 31, 13), (80, 32, 15), (76, 33, 17), (81, 31, 15),
+ (87, 30, 13), (110, 13, 24), (120, 43, 23), (129, 46, 40),
+ (142, 37, 31), (207, 15, 0), (200, 32, 0), (193, 49, 0),
+ (184, 43, 23), (173, 56, 39), (183, 77, 51), (186, 86, 60),
+ (214, 73, 46), (220, 69, 32), (227, 65, 19), (223, 74, 50),
+ (218, 105, 87), (220, 161, 145), (238, 205, 196), (206, 206, 206),
+ (207, 193, 192), (176, 176, 176), (153, 153, 153), (130, 130, 130),
+ (100, 100, 100), (67, 97, 85), (43, 109, 73), (34, 95, 61),
+ (19, 130, 61), (46, 136, 81), (74, 142, 101), (167, 166, 164),
+ (196, 196, 196), (240, 240, 240), (254, 254, 254), (255, 255, 255),
+ (255, 255, 255), (252, 255, 255), (242, 241, 239), (200, 198, 199),
+ (171, 171, 171), (124, 124, 124), (126, 95, 66), (160, 67, 60),
+ (178, 97, 54), (188, 103, 71), (198, 110, 88), (213, 175, 166),
+ (229, 220, 221), (251, 251, 251), (254, 255, 255), (255, 255, 255),
+ (255, 255, 255), (254, 255, 255), (253, 253, 253), (229, 229, 229),
+ (180, 184, 211), (120, 116, 203), (68, 107, 226), (6, 144, 180),
+ (68, 82, 143), (135, 43, 130), (128, 87, 91), (117, 77, 65),
+ (102, 60, 48), (95, 51, 42), (88, 31, 37), (92, 31, 36),
+ (117, 49, 30), (102, 54, 50), (114, 69, 72), (113, 112, 108),
+ (177, 177, 177), (222, 222, 224), (245, 245, 245), (254, 254, 254),
+ (255, 255, 255), (250, 250, 250), (223, 223, 223), (191, 193, 192),
+ (138, 146, 185), (97, 103, 153), (40, 73, 124), (5, 22, 104),
+ (4, 32, 69), (14, 14, 16), (1, 0, 0), (1, 0, 0),
+ (0, 0, 0), (1, 1, 1), (40, 15, 18), (52, 52, 52),
+ (116, 84, 73), (131, 101, 91), (161, 161, 161), (178, 178, 180),
+ (180, 181, 183), (182, 182, 182), (183, 182, 180), (179, 179, 179),
+ (158, 158, 158), (106, 132, 119), (73, 128, 96), (52, 116, 81),
+ (64, 90, 79), (32, 46, 117), (10, 26, 121), (43, 60, 142),
+ (63, 84, 89), (104, 103, 101), (151, 143, 141), (186, 186, 188),
+ (230, 228, 229), (250, 250, 250), (255, 255, 253), (255, 255, 255)
+ ),
+
+// 226 Apophysis-040427-4Doodle3inv
+((124, 154, 164), (77, 77, 75), (75, 75, 74), (73, 73, 73),
+ (74, 74, 74), (76, 76, 76), (86, 86, 86), (97, 97, 97),
+ (182, 127, 159), (186, 146, 167), (191, 165, 176), (218, 197, 155),
+ (245, 229, 134), (218, 200, 150), (192, 171, 166), (171, 161, 160),
+ (151, 152, 154), (69, 69, 67), (37, 37, 36), (5, 5, 5),
+ (2, 2, 2), (0, 0, 0), (0, 0, 1), (0, 0, 2),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 1, 2),
+ (1, 2, 4), (9, 9, 10), (17, 17, 17), (61, 57, 56),
+ (123, 126, 49), (241, 225, 148), (238, 230, 193), (236, 236, 238),
+ (245, 245, 245), (255, 255, 253), (255, 255, 243), (255, 255, 234),
+ (248, 233, 150), (181, 243, 191), (115, 254, 233), (114, 254, 238),
+ (114, 255, 244), (122, 254, 219), (130, 254, 194), (188, 250, 113),
+ (247, 255, 120), (232, 244, 74), (222, 217, 89), (212, 190, 104),
+ (229, 148, 64), (247, 106, 24), (246, 107, 22), (246, 108, 20),
+ (164, 137, 24), (109, 138, 88), (54, 140, 153), (48, 154, 172),
+ (43, 169, 192), (43, 128, 151), (43, 88, 111), (28, 47, 53),
+ (11, 11, 11), (0, 0, 0), (0, 0, 0), (1, 1, 1),
+ (6, 6, 6), (12, 12, 12), (45, 45, 45), (81, 81, 81),
+ (88, 192, 217), (104, 222, 235), (120, 252, 254), (159, 250, 254),
+ (199, 248, 255), (226, 251, 255), (254, 255, 255), (255, 254, 255),
+ (240, 240, 240), (211, 191, 216), (184, 162, 180), (157, 134, 144),
+ (129, 107, 117), (101, 81, 90), (52, 52, 52), (9, 9, 9),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 0, 0), (1, 1, 1), (16, 12, 0),
+ (99, 80, 86), (156, 134, 86), (213, 188, 87), (225, 221, 84),
+ (238, 255, 81), (244, 255, 77), (245, 255, 80), (244, 255, 81),
+ (249, 255, 145), (255, 255, 253), (255, 255, 254), (255, 255, 255),
+ (250, 249, 247), (207, 231, 231), (155, 204, 200), (94, 146, 160),
+ (12, 31, 35), (6, 15, 17), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (7, 7, 7), (24, 24, 24), (42, 42, 42), (54, 70, 70),
+ (46, 102, 117), (73, 163, 187), (123, 202, 206), (138, 211, 230),
+ (171, 224, 242), (179, 222, 238), (173, 223, 240), (168, 225, 242),
+ (145, 242, 231), (135, 212, 232), (126, 209, 215), (113, 218, 224),
+ (48, 240, 255), (55, 223, 255), (62, 206, 255), (71, 212, 232),
+ (82, 199, 216), (72, 178, 204), (69, 169, 195), (45, 184, 205),
+ (41, 182, 209), (28, 190, 236), (32, 181, 205), (37, 150, 168),
+ (35, 94, 110), (17, 50, 59), (49, 49, 49), (48, 62, 63),
+ (79, 79, 79), (102, 102, 102), (125, 125, 125), (155, 155, 155),
+ (188, 158, 170), (212, 146, 182), (221, 160, 194), (246, 171, 194),
+ (236, 125, 194), (181, 113, 154), (88, 89, 91), (59, 59, 59),
+ (15, 15, 15), (1, 1, 1), (0, 0, 0), (0, 0, 0),
+ (3, 0, 0), (13, 14, 16), (55, 57, 56), (84, 84, 84),
+ (131, 131, 131), (129, 160, 189), (95, 188, 195), (79, 158, 199),
+ (77, 158, 201), (57, 145, 167), (42, 80, 89), (26, 35, 34),
+ (4, 4, 4), (1, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 0, 0), (2, 2, 2), (26, 26, 26), (75, 71, 44),
+ (135, 139, 52), (187, 148, 29), (249, 111, 75), (187, 173, 112),
+ (120, 212, 125), (127, 168, 164), (138, 178, 190), (153, 195, 207),
+ (160, 204, 213), (167, 224, 218), (163, 224, 219), (138, 206, 225),
+ (153, 201, 205), (141, 186, 183), (142, 143, 147), (78, 78, 78),
+ (33, 33, 31), (10, 10, 10), (1, 1, 1), (0, 0, 0),
+ (5, 5, 5), (32, 32, 32), (64, 62, 63), (117, 109, 70),
+ (158, 152, 102), (215, 182, 131), (250, 233, 151), (251, 223, 186),
+ (241, 241, 239), (254, 255, 255), (254, 255, 255), (255, 255, 255),
+ (254, 254, 254), (215, 240, 237), (203, 203, 203), (139, 171, 182)
+ ),
+
+// 227 Apophysis-040427-6DoublEagles2
+((127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (126, 50, 0), (126, 50, 0), (112, 44, 0),
+ (1, 5, 50), (1, 5, 50), (21, 27, 83), (42, 49, 117),
+ (58, 65, 128), (75, 81, 139), (75, 81, 139), (75, 81, 139),
+ (127, 35, 108), (100, 44, 55), (73, 53, 2), (37, 29, 26),
+ (1, 5, 50), (1, 5, 50), (1, 5, 50), (1, 5, 50),
+ (1, 5, 50), (1, 5, 50), (1, 5, 53), (2, 5, 56),
+ (22, 27, 86), (42, 49, 117), (18, 70, 172), (32, 93, 156),
+ (196, 197, 181), (213, 185, 110), (230, 173, 40), (216, 158, 20),
+ (202, 144, 0), (195, 138, 0), (189, 132, 0), (167, 80, 1),
+ (149, 59, 0), (127, 51, 1), (127, 52, 2), (127, 54, 3),
+ (115, 63, 15), (104, 73, 27), (77, 84, 77), (75, 81, 139),
+ (75, 81, 139), (75, 81, 139), (75, 81, 139), (88, 86, 101),
+ (102, 91, 63), (134, 68, 16), (122, 50, 0), (88, 30, 6),
+ (1, 0, 42), (1, 5, 50), (21, 27, 83), (42, 49, 117),
+ (42, 49, 117), (42, 49, 117), (42, 49, 117), (143, 15, 98),
+ (162, 108, 38), (154, 82, 19), (146, 57, 1), (139, 55, 0),
+ (133, 53, 0), (128, 52, 2), (127, 51, 1), (127, 51, 1),
+ (229, 175, 27), (163, 111, 35), (151, 102, 17), (140, 94, 0),
+ (135, 54, 1), (128, 50, 1), (128, 50, 1), (133, 53, 0),
+ (178, 80, 9), (199, 123, 26), (221, 167, 43), (232, 193, 95),
+ (243, 219, 147), (232, 219, 184), (234, 246, 246), (225, 250, 255),
+ (208, 211, 200), (232, 165, 76), (224, 150, 62), (217, 135, 49),
+ (232, 93, 2), (183, 72, 0), (130, 54, 4), (98, 64, 27),
+ (1, 5, 50), (1, 7, 70), (1, 9, 90), (21, 29, 103),
+ (42, 49, 117), (42, 49, 117), (42, 49, 117), (16, 13, 90),
+ (1, 5, 50), (1, 5, 50), (1, 5, 50), (1, 5, 50),
+ (1, 5, 50), (1, 5, 50), (1, 5, 50), (1, 5, 50),
+ (1, 5, 50), (1, 5, 50), (1, 5, 50), (0, 11, 85),
+ (42, 49, 117), (75, 81, 139), (75, 81, 139), (76, 81, 139),
+ (145, 155, 165), (211, 226, 229), (200, 225, 230), (190, 225, 231),
+ (150, 212, 253), (97, 187, 250), (75, 81, 139), (75, 81, 139),
+ (120, 193, 244), (140, 207, 247), (161, 222, 250), (172, 219, 247),
+ (170, 216, 232), (125, 110, 105), (167, 116, 59), (136, 60, 10),
+ (127, 54, 3), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (134, 53, 0), (148, 58, 0), (163, 64, 0), (193, 3, 89),
+ (221, 5, 102), (246, 40, 122), (233, 49, 119), (168, 117, 60),
+ (158, 99, 29), (145, 66, 7), (128, 50, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (125, 52, 1),
+ (118, 47, 1), (39, 28, 0), (1, 0, 42), (1, 5, 50),
+ (1, 5, 50), (1, 5, 50), (100, 41, 1), (126, 50, 0),
+ (126, 50, 0), (124, 50, 1), (118, 14, 93), (79, 33, 141),
+ (75, 81, 139), (75, 81, 139), (33, 117, 190), (59, 167, 240),
+ (72, 120, 184), (137, 142, 146), (175, 149, 74), (170, 118, 43),
+ (154, 100, 0), (138, 55, 1), (133, 53, 0), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1),
+ (127, 51, 1), (127, 51, 1), (127, 51, 1), (127, 51, 1)
+ ),
+
+// 228 Apophysis-040427-6Equinox
+((114, 110, 231), (112, 110, 233), (113, 110, 231), (115, 110, 230),
+ (116, 110, 227), (118, 111, 225), (119, 112, 225), (120, 113, 225),
+ (120, 114, 224), (120, 114, 224), (120, 114, 224), (120, 114, 224),
+ (120, 114, 224), (120, 114, 223), (121, 115, 223), (122, 115, 222),
+ (123, 116, 222), (130, 123, 219), (139, 132, 216), (149, 141, 214),
+ (164, 148, 193), (180, 156, 172), (176, 155, 177), (173, 154, 182),
+ (140, 127, 206), (139, 125, 207), (138, 124, 209), (154, 135, 191),
+ (171, 147, 173), (181, 150, 154), (192, 153, 136), (219, 153, 69),
+ (199, 128, 46), (176, 95, 29), (163, 96, 70), (150, 98, 111),
+ (142, 110, 160), (135, 123, 209), (132, 121, 208), (130, 120, 207),
+ (119, 115, 200), (116, 78, 120), (113, 42, 40), (148, 74, 34),
+ (183, 106, 28), (203, 133, 51), (223, 161, 74), (251, 202, 100),
+ (254, 231, 101), (255, 235, 102), (254, 241, 109), (254, 247, 117),
+ (254, 241, 116), (254, 235, 115), (243, 222, 116), (233, 210, 117),
+ (202, 187, 158), (200, 184, 159), (199, 181, 161), (214, 175, 128),
+ (229, 169, 96), (228, 169, 87), (228, 169, 79), (237, 176, 83),
+ (237, 183, 87), (200, 183, 153), (181, 163, 173), (163, 143, 194),
+ (150, 133, 201), (138, 124, 209), (122, 117, 219), (111, 110, 230),
+ (99, 100, 242), (98, 100, 243), (98, 101, 244), (99, 99, 244),
+ (101, 97, 244), (102, 99, 241), (103, 102, 238), (107, 106, 236),
+ (108, 105, 236), (108, 105, 234), (111, 107, 232), (114, 110, 231),
+ (117, 111, 228), (120, 113, 225), (124, 116, 219), (134, 121, 211),
+ (170, 148, 187), (177, 155, 180), (184, 162, 174), (183, 157, 167),
+ (183, 152, 160), (161, 127, 154), (170, 151, 155), (178, 159, 153),
+ (196, 176, 167), (206, 184, 147), (209, 191, 149), (212, 198, 151),
+ (211, 192, 153), (210, 187, 155), (195, 170, 174), (174, 155, 183),
+ (136, 124, 210), (132, 121, 212), (128, 118, 215), (125, 116, 218),
+ (123, 114, 221), (120, 113, 225), (115, 110, 230), (109, 107, 234),
+ (108, 105, 234), (107, 106, 236), (107, 106, 236), (107, 106, 236),
+ (103, 102, 240), (102, 101, 239), (96, 93, 242), (80, 97, 247),
+ (89, 96, 255), (104, 105, 239), (120, 114, 224), (127, 119, 218),
+ (135, 125, 212), (155, 136, 200), (183, 160, 178), (195, 175, 166),
+ (197, 178, 163), (168, 151, 187), (155, 141, 197), (142, 131, 207),
+ (130, 129, 207), (130, 121, 214), (125, 117, 218), (122, 115, 221),
+ (123, 114, 221), (122, 114, 221), (122, 115, 221), (121, 114, 222),
+ (120, 114, 224), (120, 112, 223), (120, 113, 225), (120, 113, 225),
+ (116, 111, 229), (112, 110, 233), (110, 108, 233), (109, 107, 234),
+ (108, 105, 234), (109, 106, 235), (112, 110, 233), (114, 115, 241),
+ (118, 119, 237), (119, 121, 230), (121, 123, 224), (125, 117, 218),
+ (128, 118, 215), (128, 118, 215), (124, 116, 219), (122, 115, 219),
+ (113, 105, 214), (102, 101, 237), (78, 76, 222), (55, 51, 208),
+ (22, 39, 189), (0, 24, 151), (49, 11, 72), (69, 14, 53),
+ (126, 40, 5), (139, 53, 6), (153, 67, 8), (168, 84, 20),
+ (168, 85, 19), (171, 90, 24), (176, 100, 84), (162, 128, 119),
+ (153, 115, 164), (134, 122, 204), (134, 121, 209), (135, 122, 212),
+ (133, 120, 212), (130, 121, 214), (129, 118, 212), (132, 118, 213),
+ (128, 118, 215), (128, 118, 215), (128, 118, 215), (124, 116, 219),
+ (122, 115, 221), (120, 114, 224), (120, 113, 225), (116, 111, 227),
+ (114, 110, 230), (110, 108, 231), (109, 107, 234), (106, 106, 238),
+ (108, 110, 247), (108, 113, 243), (114, 113, 240), (113, 112, 232),
+ (120, 113, 225), (123, 114, 221), (130, 121, 214), (136, 124, 210),
+ (154, 128, 189), (181, 149, 124), (221, 152, 75), (227, 169, 62),
+ (207, 136, 54), (198, 121, 49), (203, 132, 50), (210, 142, 61),
+ (218, 156, 69), (182, 154, 132), (172, 135, 143), (145, 129, 200),
+ (111, 112, 218), (99, 100, 240), (84, 90, 236), (56, 56, 188),
+ (3, 26, 156), (0, 7, 88), (38, 8, 72), (53, 16, 59),
+ (125, 49, 15), (161, 77, 13), (177, 95, 37), (199, 126, 49),
+ (184, 151, 136), (166, 149, 181), (146, 134, 200), (135, 122, 210),
+ (133, 120, 210), (129, 119, 216), (124, 116, 219), (122, 115, 221),
+ (121, 115, 223), (120, 113, 225), (116, 111, 227), (112, 111, 231),
+ (109, 107, 234), (108, 105, 234), (107, 106, 234), (103, 103, 233),
+ (102, 104, 227), (107, 104, 233), (108, 105, 234), (108, 105, 234),
+ (109, 107, 234), (114, 110, 231), (120, 113, 225), (121, 115, 223),
+ (126, 119, 225), (122, 116, 222), (124, 118, 216), (122, 115, 221)
+ ),
+
+// 229 Apophysis-040427-6Equinox2
+((46, 5, 49), (137, 106, 112), (140, 156, 106), (144, 207, 100),
+ (141, 207, 99), (139, 207, 98), (140, 206, 100), (141, 206, 102),
+ (152, 194, 94), (158, 142, 115), (164, 91, 137), (140, 130, 132),
+ (116, 169, 127), (129, 187, 116), (143, 205, 106), (140, 206, 103),
+ (138, 207, 100), (132, 212, 99), (135, 208, 103), (138, 204, 107),
+ (142, 191, 123), (146, 178, 139), (161, 164, 146), (177, 151, 154),
+ (193, 152, 156), (194, 154, 153), (195, 156, 151), (175, 179, 129),
+ (156, 203, 107), (150, 208, 102), (145, 214, 97), (147, 223, 91),
+ (151, 234, 84), (154, 255, 69), (155, 250, 70), (156, 246, 71),
+ (150, 240, 77), (145, 234, 84), (142, 227, 81), (139, 220, 79),
+ (146, 221, 92), (146, 218, 93), (146, 216, 94), (145, 215, 93),
+ (144, 215, 93), (144, 215, 93), (145, 216, 94), (146, 216, 94),
+ (145, 214, 97), (144, 215, 95), (145, 217, 94), (147, 219, 94),
+ (147, 219, 94), (148, 220, 94), (148, 220, 94), (148, 220, 94),
+ (151, 233, 87), (153, 235, 86), (155, 238, 86), (153, 236, 85),
+ (152, 235, 85), (152, 233, 85), (152, 231, 86), (149, 227, 89),
+ (146, 222, 90), (154, 196, 94), (191, 175, 91), (229, 154, 89),
+ (242, 160, 78), (255, 167, 68), (249, 122, 43), (238, 116, 69),
+ (211, 126, 62), (213, 107, 53), (216, 89, 44), (221, 100, 55),
+ (226, 111, 66), (230, 129, 83), (234, 148, 101), (205, 159, 135),
+ (200, 159, 137), (172, 69, 72), (179, 50, 43), (187, 32, 14),
+ (177, 30, 15), (167, 29, 16), (160, 19, 9), (140, 8, 0),
+ (19, 4, 23), (84, 27, 41), (150, 50, 60), (177, 60, 46),
+ (205, 71, 33), (241, 110, 68), (247, 160, 80), (255, 167, 93),
+ (230, 189, 110), (143, 225, 99), (172, 207, 122), (202, 189, 145),
+ (213, 184, 146), (225, 180, 147), (209, 168, 138), (147, 208, 104),
+ (139, 215, 55), (144, 228, 62), (149, 241, 70), (151, 241, 73),
+ (153, 241, 77), (152, 240, 78), (152, 235, 85), (152, 235, 85),
+ (152, 235, 85), (155, 238, 86), (155, 238, 86), (155, 238, 86),
+ (155, 238, 86), (154, 239, 86), (154, 239, 84), (153, 246, 80),
+ (146, 255, 71), (149, 249, 74), (152, 243, 77), (152, 239, 81),
+ (152, 235, 85), (151, 237, 88), (151, 233, 87), (148, 229, 90),
+ (147, 223, 91), (149, 221, 95), (155, 213, 103), (161, 206, 111),
+ (200, 168, 145), (199, 157, 141), (146, 189, 118), (141, 198, 101),
+ (144, 196, 113), (163, 176, 135), (183, 157, 158), (188, 154, 156),
+ (194, 152, 154), (211, 165, 142), (241, 172, 107), (253, 187, 91),
+ (255, 199, 89), (157, 218, 89), (154, 223, 91), (152, 228, 93),
+ (153, 230, 90), (153, 232, 89), (156, 230, 91), (153, 230, 90),
+ (148, 220, 94), (145, 215, 96), (143, 211, 98), (141, 207, 101),
+ (142, 198, 107), (147, 170, 128), (167, 146, 165), (162, 137, 166),
+ (143, 171, 172), (181, 180, 185), (176, 181, 179), (172, 182, 174),
+ (157, 195, 148), (143, 184, 142), (142, 200, 116), (143, 205, 106),
+ (147, 219, 94), (148, 220, 91), (149, 222, 89), (149, 227, 89),
+ (149, 227, 89), (155, 229, 92), (163, 234, 102), (232, 210, 124),
+ (251, 201, 128), (240, 193, 115), (223, 175, 111), (204, 158, 143),
+ (196, 155, 149), (194, 153, 149), (187, 153, 154), (146, 188, 124),
+ (143, 209, 99), (143, 211, 97), (144, 213, 96), (147, 219, 94),
+ (147, 223, 91), (150, 228, 90), (151, 229, 91), (149, 227, 91),
+ (146, 221, 92), (144, 215, 93), (142, 208, 98), (143, 200, 95),
+ (142, 195, 103), (169, 87, 76), (192, 62, 28), (195, 52, 20),
+ (169, 27, 15), (108, 8, 18), (22, 56, 5), (23, 67, 4),
+ (30, 82, 18), (57, 98, 0), (68, 113, 18), (99, 152, 64),
+ (130, 214, 90), (141, 216, 89), (144, 215, 93), (144, 215, 95),
+ (144, 213, 97), (144, 213, 97), (145, 214, 97), (144, 219, 92),
+ (146, 221, 92), (147, 225, 89), (147, 229, 82), (151, 230, 85),
+ (150, 232, 85), (152, 235, 85), (152, 235, 85), (152, 235, 85),
+ (153, 232, 89), (149, 227, 89), (147, 223, 91), (147, 223, 91),
+ (146, 221, 92), (146, 217, 87), (154, 216, 71), (149, 224, 69),
+ (149, 232, 64), (133, 233, 72), (142, 236, 86), (148, 233, 90),
+ (151, 229, 91), (149, 227, 89), (147, 223, 91), (147, 223, 91),
+ (147, 223, 91), (147, 223, 91), (147, 223, 91), (148, 220, 92),
+ (146, 216, 94), (143, 211, 98), (144, 200, 109), (141, 185, 126),
+ (140, 181, 147), (139, 175, 171), (169, 143, 168), (186, 147, 168),
+ (182, 152, 160), (195, 148, 154), (198, 155, 146), (195, 152, 146)
+ ),
+
+// 230 Apophysis-040427-6BluBrd
+((254, 169, 16), (252, 167, 16), (252, 161, 15), (252, 155, 14),
+ (245, 143, 14), (238, 132, 14), (238, 132, 14), (238, 132, 14),
+ (112, 170, 8), (106, 149, 35), (100, 129, 63), (105, 139, 73),
+ (110, 149, 84), (117, 117, 85), (125, 86, 87), (117, 89, 112),
+ (110, 93, 137), (20, 70, 195), (27, 102, 225), (35, 135, 255),
+ (19, 93, 227), (4, 51, 199), (9, 42, 166), (15, 33, 133),
+ (7, 4, 61), (20, 11, 43), (33, 18, 25), (17, 17, 37),
+ (1, 17, 50), (8, 13, 33), (16, 9, 17), (40, 17, 0),
+ (33, 35, 0), (65, 49, 33), (92, 81, 49), (119, 113, 65),
+ (142, 137, 79), (166, 161, 93), (209, 167, 68), (253, 174, 43),
+ (255, 182, 27), (255, 176, 23), (255, 170, 19), (253, 162, 16),
+ (252, 155, 14), (245, 143, 14), (238, 132, 14), (238, 124, 12),
+ (246, 113, 10), (238, 111, 14), (237, 115, 14), (236, 119, 14),
+ (237, 123, 13), (239, 128, 13), (239, 128, 13), (239, 129, 14),
+ (253, 153, 15), (253, 157, 14), (253, 161, 14), (253, 157, 14),
+ (253, 153, 15), (250, 146, 14), (248, 140, 14), (244, 130, 16),
+ (240, 129, 14), (240, 129, 14), (239, 126, 13), (238, 124, 12),
+ (238, 124, 12), (238, 124, 12), (225, 122, 17), (204, 143, 60),
+ (141, 151, 88), (141, 177, 97), (141, 203, 106), (148, 182, 100),
+ (155, 162, 94), (149, 150, 88), (143, 138, 82), (124, 147, 91),
+ (118, 113, 94), (85, 158, 165), (46, 103, 169), (8, 49, 173),
+ (9, 41, 152), (10, 34, 132), (0, 20, 81), (48, 54, 40),
+ (38, 25, 35), (19, 25, 73), (0, 25, 112), (10, 26, 123),
+ (20, 27, 134), (13, 19, 117), (90, 47, 56), (94, 51, 6),
+ (69, 46, 12), (85, 52, 7), (96, 80, 3), (107, 108, 0),
+ (160, 98, 4), (213, 88, 8), (222, 91, 11), (221, 90, 10),
+ (163, 81, 7), (141, 82, 35), (120, 83, 64), (140, 89, 69),
+ (160, 95, 75), (220, 89, 11), (221, 100, 11), (233, 111, 12),
+ (232, 114, 14), (217, 92, 10), (168, 100, 40), (120, 108, 70),
+ (101, 65, 93), (69, 24, 177), (5, 31, 152), (0, 33, 186),
+ (107, 104, 113), (174, 138, 72), (241, 172, 32), (246, 176, 34),
+ (252, 180, 36), (251, 169, 43), (171, 141, 91), (139, 110, 80),
+ (123, 93, 67), (42, 90, 30), (48, 77, 33), (54, 64, 37),
+ (91, 53, 34), (101, 47, 83), (132, 78, 101), (180, 117, 86),
+ (231, 115, 12), (231, 110, 19), (232, 105, 26), (230, 81, 50),
+ (228, 57, 75), (186, 84, 147), (133, 30, 199), (95, 29, 225),
+ (63, 67, 236), (55, 141, 216), (49, 143, 212), (44, 146, 208),
+ (41, 191, 218), (134, 172, 195), (92, 60, 255), (142, 0, 242),
+ (123, 12, 194), (167, 33, 132), (211, 54, 71), (227, 96, 14),
+ (233, 111, 12), (231, 115, 12), (232, 116, 13), (233, 118, 11),
+ (234, 119, 12), (239, 128, 13), (243, 134, 13), (248, 140, 14),
+ (253, 153, 15), (255, 163, 16), (255, 170, 19), (255, 170, 19),
+ (252, 182, 24), (250, 190, 24), (249, 199, 24), (249, 204, 25),
+ (253, 201, 29), (254, 196, 27), (255, 183, 23), (254, 170, 19),
+ (248, 147, 15), (207, 132, 15), (172, 128, 89), (140, 123, 80),
+ (205, 101, 12), (230, 114, 11), (240, 129, 14), (253, 152, 20),
+ (255, 192, 29), (254, 202, 29), (253, 213, 29), (197, 254, 19),
+ (111, 255, 11), (138, 249, 20), (235, 237, 52), (255, 200, 41),
+ (255, 201, 30), (255, 201, 30), (255, 202, 28), (255, 201, 30),
+ (255, 190, 26), (255, 183, 23), (255, 183, 23), (255, 183, 23),
+ (255, 183, 23), (255, 183, 23), (255, 183, 23), (255, 182, 27),
+ (255, 185, 28), (254, 190, 30), (255, 192, 29), (255, 187, 26),
+ (255, 182, 27), (255, 173, 27), (255, 171, 20), (255, 170, 19),
+ (255, 171, 20), (255, 181, 24), (255, 183, 23), (255, 183, 28),
+ (255, 185, 30), (254, 183, 29), (255, 182, 27), (255, 178, 22),
+ (255, 170, 19), (255, 170, 19), (252, 163, 17), (249, 148, 14),
+ (232, 116, 13), (177, 108, 67), (138, 94, 91), (103, 15, 177),
+ (128, 11, 203), (146, 21, 226), (151, 23, 224), (176, 83, 190),
+ (169, 164, 132), (227, 173, 41), (248, 184, 26), (253, 183, 25),
+ (255, 183, 23), (255, 196, 17), (253, 198, 17), (255, 191, 5),
+ (245, 183, 14), (254, 177, 19), (255, 177, 19), (255, 182, 23),
+ (244, 185, 21), (235, 192, 27), (213, 209, 22), (169, 213, 16),
+ (150, 204, 28), (129, 228, 41), (60, 176, 49), (101, 152, 73),
+ (112, 153, 85), (134, 160, 89), (150, 124, 37), (231, 125, 5)
+ ),
+
+// 231 Apophysis-040427-6BluBrdInv
+((231, 125, 5), (134, 160, 89), (117, 156, 81), (101, 152, 73),
+ (115, 190, 57), (129, 228, 41), (139, 216, 34), (150, 204, 28),
+ (213, 209, 22), (228, 197, 21), (244, 185, 21), (249, 181, 20),
+ (255, 177, 19), (250, 180, 16), (245, 183, 14), (250, 187, 9),
+ (255, 191, 5), (255, 196, 17), (254, 189, 21), (253, 183, 25),
+ (240, 178, 33), (227, 173, 41), (198, 168, 86), (169, 164, 132),
+ (151, 23, 224), (139, 17, 213), (128, 11, 203), (133, 52, 147),
+ (138, 94, 91), (157, 101, 79), (177, 108, 67), (232, 116, 13),
+ (249, 148, 14), (255, 170, 19), (255, 174, 20), (255, 178, 22),
+ (254, 180, 25), (254, 183, 29), (254, 184, 29), (255, 185, 30),
+ (255, 183, 23), (255, 177, 21), (255, 171, 20), (255, 171, 20),
+ (255, 171, 20), (255, 172, 23), (255, 173, 27), (255, 182, 27),
+ (255, 187, 26), (254, 190, 30), (254, 186, 28), (255, 182, 27),
+ (255, 182, 25), (255, 183, 23), (255, 183, 23), (255, 183, 23),
+ (255, 183, 23), (255, 186, 24), (255, 190, 26), (255, 196, 27),
+ (255, 202, 28), (255, 201, 29), (255, 201, 30), (255, 201, 30),
+ (255, 200, 41), (138, 249, 20), (167, 251, 19), (197, 254, 19),
+ (225, 233, 24), (253, 213, 29), (255, 192, 29), (255, 173, 25),
+ (240, 129, 14), (222, 115, 13), (205, 101, 12), (188, 114, 50),
+ (172, 128, 89), (189, 130, 52), (207, 132, 15), (248, 147, 15),
+ (254, 170, 19), (254, 196, 27), (251, 200, 26), (249, 204, 25),
+ (249, 201, 24), (249, 199, 24), (252, 182, 24), (255, 172, 18),
+ (255, 170, 19), (254, 161, 17), (253, 153, 15), (250, 146, 14),
+ (248, 140, 14), (239, 128, 13), (238, 124, 12), (234, 119, 12),
+ (233, 118, 11), (231, 115, 12), (229, 105, 13), (227, 96, 14),
+ (219, 75, 42), (211, 54, 71), (123, 12, 194), (146, 15, 231),
+ (92, 60, 255), (66, 125, 236), (41, 191, 218), (42, 168, 213),
+ (44, 146, 208), (55, 141, 216), (61, 94, 199), (63, 67, 236),
+ (95, 29, 225), (186, 84, 147), (207, 70, 111), (228, 57, 75),
+ (232, 105, 26), (231, 115, 12), (231, 115, 12), (224, 115, 14),
+ (132, 78, 101), (111, 65, 67), (91, 53, 34), (72, 58, 35),
+ (54, 64, 37), (42, 90, 30), (70, 71, 53), (123, 93, 67),
+ (139, 110, 80), (251, 169, 43), (251, 174, 39), (252, 180, 36),
+ (241, 172, 32), (165, 136, 94), (107, 104, 113), (25, 43, 171),
+ (5, 31, 152), (53, 48, 122), (101, 65, 93), (110, 86, 81),
+ (120, 108, 70), (217, 92, 10), (227, 109, 13), (232, 114, 14),
+ (233, 111, 12), (220, 89, 11), (190, 92, 43), (160, 95, 75),
+ (120, 83, 64), (94, 67, 56), (163, 81, 7), (215, 81, 8),
+ (222, 91, 11), (217, 89, 9), (213, 88, 8), (107, 108, 0),
+ (107, 76, 12), (85, 52, 7), (60, 41, 1), (69, 46, 12),
+ (94, 51, 6), (13, 19, 117), (16, 23, 125), (20, 27, 134),
+ (0, 25, 112), (3, 18, 75), (38, 25, 35), (56, 42, 29),
+ (0, 20, 81), (5, 27, 106), (10, 34, 132), (8, 49, 173),
+ (41, 152, 182), (85, 158, 165), (132, 108, 140), (118, 113, 94),
+ (124, 147, 91), (143, 138, 82), (155, 162, 94), (143, 182, 103),
+ (141, 203, 106), (113, 163, 94), (141, 151, 88), (173, 133, 84),
+ (225, 122, 17), (231, 123, 14), (238, 124, 12), (238, 124, 12),
+ (238, 126, 14), (240, 129, 14), (239, 128, 13), (240, 129, 14),
+ (244, 130, 16), (248, 140, 14), (253, 153, 15), (252, 155, 14),
+ (253, 161, 14), (255, 161, 17), (253, 153, 15), (249, 141, 15),
+ (239, 129, 14), (239, 128, 13), (238, 124, 12), (236, 119, 14),
+ (235, 113, 14), (238, 111, 14), (252, 111, 6), (246, 113, 10),
+ (238, 124, 12), (238, 132, 14), (252, 155, 14), (254, 164, 16),
+ (255, 170, 19), (255, 171, 20), (255, 182, 27), (255, 176, 29),
+ (253, 174, 43), (166, 161, 93), (137, 117, 80), (119, 113, 65),
+ (88, 72, 59), (65, 49, 33), (42, 27, 4), (33, 35, 0),
+ (40, 17, 0), (16, 9, 17), (1, 17, 50), (8, 17, 60),
+ (33, 18, 25), (4, 14, 49), (7, 4, 61), (16, 11, 69),
+ (15, 33, 133), (4, 51, 199), (11, 132, 255), (35, 135, 255),
+ (41, 101, 223), (20, 70, 195), (55, 78, 145), (110, 93, 137),
+ (125, 86, 87), (134, 105, 75), (110, 149, 84), (107, 152, 87),
+ (100, 129, 63), (96, 138, 0), (112, 170, 8), (183, 172, 22),
+ (238, 132, 14), (238, 132, 14), (249, 148, 14), (252, 155, 14),
+ (253, 163, 17), (252, 167, 16), (255, 170, 19), (254, 169, 16)
+ ),
+
+// 232 Apophysis-040427-6FaerieKng
+((1, 1, 1), (76, 14, 63), (84, 18, 80), (93, 22, 98),
+ (95, 31, 68), (98, 40, 39), (95, 35, 36), (93, 31, 34),
+ (3, 3, 3), (3, 5, 7), (3, 8, 12), (44, 26, 18),
+ (85, 44, 24), (108, 71, 39), (132, 99, 54), (134, 109, 71),
+ (136, 119, 89), (155, 162, 180), (128, 119, 200), (102, 77, 221),
+ (95, 48, 163), (89, 19, 105), (89, 17, 99), (90, 16, 93),
+ (103, 50, 56), (120, 62, 28), (138, 75, 0), (163, 93, 0),
+ (189, 112, 0), (194, 108, 0), (199, 104, 0), (162, 94, 47),
+ (141, 62, 57), (71, 20, 97), (35, 27, 120), (0, 34, 144),
+ (48, 26, 119), (97, 19, 95), (91, 31, 103), (85, 44, 112),
+ (71, 23, 97), (55, 13, 71), (39, 4, 46), (20, 2, 23),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (0, 3, 0),
+ (5, 21, 0), (8, 112, 0), (44, 120, 27), (81, 129, 55),
+ (109, 120, 77), (138, 111, 100), (125, 107, 116), (112, 103, 132),
+ (69, 137, 184), (154, 178, 184), (239, 219, 184), (219, 207, 170),
+ (200, 195, 157), (172, 167, 147), (145, 140, 137), (94, 86, 99),
+ (65, 42, 96), (24, 20, 47), (22, 36, 46), (21, 52, 46),
+ (15, 55, 53), (10, 58, 60), (8, 91, 71), (22, 98, 86),
+ (145, 64, 159), (150, 103, 170), (155, 143, 181), (157, 117, 162),
+ (159, 92, 143), (147, 106, 125), (135, 121, 108), (153, 145, 108),
+ (204, 189, 122), (127, 172, 115), (111, 137, 82), (96, 103, 49),
+ (66, 69, 42), (37, 35, 36), (12, 12, 12), (3, 3, 3),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (25, 11, 44), (40, 22, 67), (55, 34, 91),
+ (37, 33, 88), (19, 32, 85), (0, 23, 83), (0, 43, 78),
+ (4, 89, 68), (5, 52, 41), (7, 16, 15), (4, 8, 10),
+ (2, 1, 6), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (5, 7, 2), (33, 30, 17), (62, 54, 33), (74, 42, 49),
+ (86, 30, 65), (120, 43, 95), (176, 68, 128), (177, 70, 150),
+ (150, 48, 157), (140, 42, 117), (142, 50, 107), (145, 59, 98),
+ (134, 58, 68), (104, 58, 45), (107, 98, 67), (151, 121, 61),
+ (109, 164, 96), (114, 108, 100), (119, 52, 105), (117, 35, 105),
+ (115, 19, 106), (106, 11, 101), (131, 8, 71), (139, 58, 73),
+ (177, 91, 76), (177, 108, 5), (172, 110, 8), (167, 112, 11),
+ (155, 119, 43), (148, 142, 58), (149, 151, 67), (161, 136, 72),
+ (201, 121, 194), (209, 106, 212), (218, 91, 230), (204, 111, 202),
+ (122, 95, 140), (42, 86, 121), (14, 86, 85), (31, 100, 115),
+ (85, 101, 152), (247, 88, 234), (251, 97, 244), (255, 107, 255),
+ (255, 108, 206), (210, 120, 158), (203, 156, 100), (185, 135, 82),
+ (134, 53, 85), (135, 55, 100), (136, 58, 116), (155, 67, 128),
+ (189, 63, 145), (189, 63, 147), (194, 65, 157), (178, 45, 188),
+ (180, 67, 183), (168, 77, 157), (100, 65, 129), (96, 77, 99),
+ (52, 47, 54), (21, 22, 24), (4, 4, 6), (1, 1, 1),
+ (5, 1, 2), (23, 8, 1), (41, 15, 0), (82, 41, 19),
+ (94, 35, 41), (61, 42, 44), (32, 17, 48), (9, 4, 24),
+ (4, 4, 4), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (4, 0, 1),
+ (7, 2, 8), (13, 5, 46), (32, 20, 56), (18, 14, 51),
+ (6, 1, 68), (8, 1, 43), (0, 0, 30), (0, 0, 4),
+ (0, 0, 2), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (0, 0, 0), (1, 0, 0), (1, 0, 0), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (0, 1, 3), (0, 8, 14), (0, 35, 30), (11, 80, 49),
+ (5, 103, 28), (22, 112, 42), (87, 63, 25), (118, 56, 41),
+ (144, 78, 46), (136, 88, 12), (132, 79, 25), (92, 43, 28),
+ (36, 28, 26), (6, 9, 0), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (2, 2, 0), (9, 10, 0),
+ (41, 59, 33), (89, 45, 32), (132, 57, 28), (154, 87, 6)
+ ),
+
+// 233 Apophysis-040427-6FireDemnOrch
+((42, 230, 232), (8, 250, 199), (4, 218, 181), (1, 187, 164),
+ (0, 140, 149), (0, 93, 135), (0, 84, 119), (0, 75, 104),
+ (5, 13, 85), (8, 15, 96), (11, 18, 108), (6, 35, 106),
+ (2, 52, 105), (1, 71, 101), (1, 90, 98), (8, 80, 86),
+ (16, 71, 74), (24, 10, 87), (68, 46, 77), (112, 83, 67),
+ (132, 131, 74), (153, 179, 82), (181, 195, 65), (210, 212, 49),
+ (225, 211, 150), (232, 224, 111), (239, 238, 72), (221, 222, 60),
+ (203, 207, 48), (183, 184, 65), (163, 162, 82), (134, 111, 70),
+ (114, 80, 68), (15, 14, 131), (34, 33, 161), (53, 52, 192),
+ (68, 63, 201), (83, 75, 210), (81, 72, 221), (80, 69, 233),
+ (76, 61, 252), (109, 61, 253), (143, 62, 255), (175, 74, 234),
+ (208, 87, 214), (204, 80, 214), (201, 74, 215), (184, 55, 218),
+ (173, 38, 228), (124, 66, 226), (148, 57, 226), (173, 48, 226),
+ (141, 26, 191), (110, 5, 157), (81, 6, 135), (53, 8, 113),
+ (12, 4, 87), (17, 5, 82), (22, 6, 77), (56, 14, 64),
+ (91, 22, 51), (89, 18, 44), (87, 15, 37), (95, 16, 35),
+ (100, 26, 51), (110, 30, 39), (125, 36, 36), (140, 42, 33),
+ (153, 66, 40), (167, 90, 48), (171, 96, 65), (211, 111, 85),
+ (187, 58, 96), (182, 31, 77), (178, 5, 59), (165, 6, 39),
+ (153, 7, 20), (150, 10, 21), (148, 14, 23), (147, 21, 6),
+ (147, 6, 15), (139, 23, 0), (135, 45, 0), (132, 68, 0),
+ (138, 65, 3), (144, 63, 7), (133, 55, 55), (137, 70, 64),
+ (134, 127, 37), (80, 148, 53), (27, 169, 69), (31, 156, 98),
+ (36, 143, 127), (4, 147, 145), (3, 156, 151), (0, 182, 164),
+ (36, 165, 187), (169, 166, 209), (197, 127, 183), (226, 89, 157),
+ (235, 103, 147), (244, 117, 138), (224, 136, 134), (204, 165, 126),
+ (210, 207, 76), (175, 175, 78), (141, 143, 80), (137, 134, 88),
+ (134, 125, 96), (108, 65, 144), (100, 67, 208), (120, 63, 194),
+ (184, 57, 164), (137, 68, 97), (94, 68, 116), (51, 69, 135),
+ (45, 78, 121), (24, 70, 119), (4, 62, 162), (27, 69, 177),
+ (174, 77, 192), (197, 83, 200), (221, 89, 209), (182, 126, 213),
+ (143, 164, 217), (70, 205, 198), (25, 238, 190), (10, 241, 197),
+ (5, 239, 190), (102, 169, 188), (105, 152, 165), (108, 135, 142),
+ (157, 68, 150), (180, 56, 178), (200, 38, 175), (196, 42, 172),
+ (198, 51, 121), (197, 86, 118), (196, 121, 115), (203, 129, 120),
+ (210, 138, 126), (222, 126, 137), (245, 103, 125), (239, 130, 99),
+ (246, 179, 88), (254, 83, 31), (220, 76, 40), (187, 70, 50),
+ (112, 84, 73), (47, 95, 141), (32, 87, 154), (98, 145, 139),
+ (223, 136, 170), (223, 157, 161), (223, 179, 152), (239, 213, 176),
+ (207, 170, 178), (101, 187, 212), (75, 213, 252), (43, 206, 213),
+ (3, 163, 185), (0, 70, 129), (15, 48, 125), (30, 26, 121),
+ (57, 1, 108), (104, 0, 75), (119, 11, 43), (117, 14, 15),
+ (129, 24, 0), (147, 26, 4), (165, 28, 9), (187, 49, 20),
+ (216, 79, 37), (211, 83, 74), (194, 90, 77), (193, 65, 80),
+ (213, 61, 100), (209, 70, 159), (188, 70, 193), (197, 50, 200),
+ (153, 55, 200), (91, 53, 214), (68, 53, 204), (32, 49, 155),
+ (16, 8, 94), (24, 9, 101), (32, 10, 108), (36, 18, 118),
+ (36, 53, 161), (63, 82, 187), (89, 84, 202), (72, 188, 229),
+ (49, 227, 237), (23, 242, 210), (13, 231, 183), (4, 219, 152),
+ (93, 149, 76), (164, 92, 44), (224, 34, 0), (225, 23, 1),
+ (215, 8, 0), (204, 7, 1), (190, 13, 0), (177, 15, 4),
+ (152, 16, 28), (133, 43, 42), (169, 13, 112), (180, 35, 176),
+ (200, 39, 203), (187, 58, 213), (159, 53, 211), (117, 60, 201),
+ (89, 55, 191), (69, 26, 115), (72, 8, 92), (102, 3, 70),
+ (100, 11, 41), (150, 2, 26), (160, 9, 24), (181, 13, 10),
+ (230, 4, 5), (243, 7, 19), (254, 68, 17), (255, 93, 0),
+ (188, 170, 2), (158, 166, 55), (131, 196, 30), (86, 147, 43),
+ (70, 138, 35), (16, 82, 78), (1, 47, 73), (8, 4, 89),
+ (42, 4, 91), (84, 12, 86), (155, 9, 92), (193, 47, 148),
+ (177, 56, 187), (164, 66, 211), (129, 69, 217), (97, 68, 236),
+ (104, 94, 245), (62, 169, 223), (52, 180, 217), (14, 201, 180),
+ (6, 195, 163), (7, 201, 177), (0, 208, 184), (1, 228, 185),
+ (1, 233, 185), (16, 225, 170), (20, 212, 161), (90, 180, 116),
+ (107, 130, 52), (133, 60, 51), (120, 59, 4), (133, 41, 30)
+ ),
+
+// 234 Apophysis-040427-6CsmcLottoWhl
+((110, 68, 10), (206, 107, 22), (230, 139, 25), (255, 172, 28),
+ (255, 212, 33), (255, 252, 39), (255, 253, 38), (255, 255, 38),
+ (250, 242, 9), (221, 204, 9), (193, 167, 10), (189, 148, 5),
+ (186, 129, 0), (190, 125, 7), (194, 122, 14), (203, 123, 10),
+ (213, 124, 6), (217, 131, 18), (220, 133, 9), (223, 136, 0),
+ (239, 155, 10), (255, 174, 20), (255, 174, 22), (255, 175, 24),
+ (254, 215, 14), (254, 203, 21), (255, 192, 29), (231, 153, 30),
+ (207, 115, 32), (181, 101, 36), (155, 87, 40), (116, 75, 29),
+ (80, 51, 19), (17, 10, 17), (12, 9, 12), (8, 8, 8),
+ (27, 15, 4), (47, 23, 0), (61, 32, 0), (75, 42, 1),
+ (145, 74, 28), (158, 84, 28), (172, 94, 28), (152, 94, 16),
+ (132, 95, 4), (119, 89, 2), (107, 84, 0), (104, 69, 5),
+ (87, 54, 11), (20, 6, 0), (14, 7, 4), (8, 8, 8),
+ (9, 9, 9), (10, 10, 10), (23, 15, 5), (36, 20, 0),
+ (87, 52, 14), (92, 46, 9), (97, 41, 4), (100, 42, 5),
+ (104, 44, 7), (110, 50, 3), (116, 57, 0), (116, 70, 10),
+ (114, 79, 11), (171, 102, 1), (165, 86, 3), (160, 71, 5),
+ (147, 71, 2), (135, 72, 0), (116, 56, 0), (86, 36, 0),
+ (11, 7, 6), (7, 5, 4), (3, 3, 3), (2, 2, 2),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (2, 2, 2),
+ (2, 2, 2), (4, 16, 6), (5, 16, 13), (7, 16, 21),
+ (36, 33, 26), (66, 51, 32), (97, 84, 32), (134, 85, 19),
+ (172, 104, 5), (148, 90, 2), (125, 76, 0), (118, 68, 0),
+ (112, 61, 0), (79, 46, 13), (49, 28, 9), (12, 12, 10),
+ (9, 9, 9), (40, 30, 0), (67, 33, 0), (94, 36, 0),
+ (106, 47, 4), (118, 58, 8), (127, 56, 10), (114, 52, 5),
+ (63, 24, 0), (36, 16, 4), (9, 9, 9), (8, 8, 8),
+ (8, 8, 8), (6, 6, 6), (4, 4, 4), (3, 3, 3),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (3, 3, 3),
+ (4, 4, 4), (6, 6, 6), (7, 7, 7), (7, 7, 7),
+ (3, 3, 3), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (2, 2, 2), (2, 2, 2), (1, 1, 3), (1, 0, 5),
+ (2, 2, 2), (2, 2, 2), (2, 2, 2), (2, 2, 2),
+ (3, 3, 3), (3, 3, 3), (3, 3, 3), (3, 3, 3),
+ (3, 3, 3), (3, 3, 3), (3, 3, 3), (5, 5, 5),
+ (9, 9, 9), (69, 39, 11), (86, 51, 21), (104, 63, 31),
+ (126, 96, 34), (181, 132, 39), (197, 189, 202), (255, 250, 192),
+ (210, 182, 0), (215, 180, 0), (221, 179, 0), (241, 186, 0),
+ (255, 177, 19), (254, 176, 28), (255, 173, 28), (255, 165, 33),
+ (219, 155, 21), (144, 87, 18), (128, 73, 12), (112, 59, 7),
+ (83, 35, 0), (36, 20, 0), (9, 9, 9), (4, 4, 4),
+ (1, 1, 1), (2, 0, 0), (3, 0, 0), (5, 1, 0),
+ (3, 3, 1), (2, 2, 2), (2, 2, 2), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (0, 0, 0),
+ (0, 0, 0), (1, 1, 1), (2, 2, 2), (4, 4, 4),
+ (8, 8, 8), (7, 7, 6), (7, 7, 5), (12, 0, 0),
+ (8, 7, 3), (6, 6, 6), (5, 10, 6), (9, 9, 9),
+ (9, 9, 9), (21, 7, 7), (54, 31, 0), (82, 44, 0),
+ (104, 64, 5), (103, 67, 7), (103, 58, 16), (77, 41, 7),
+ (64, 29, 0), (23, 9, 0), (16, 5, 1), (22, 14, 0),
+ (53, 43, 7), (81, 61, 24), (123, 96, 25), (157, 125, 22),
+ (191, 119, 11), (221, 105, 0), (234, 116, 18), (253, 120, 15),
+ (255, 139, 23), (254, 162, 25), (232, 146, 35), (193, 120, 18),
+ (162, 118, 0), (146, 104, 6), (122, 77, 12), (116, 72, 11),
+ (132, 76, 29), (167, 74, 15), (179, 83, 9), (188, 94, 4),
+ (192, 93, 12), (186, 111, 10), (171, 93, 18), (148, 86, 9),
+ (144, 87, 6), (131, 76, 0), (137, 96, 0), (135, 117, 0),
+ (142, 118, 0), (159, 129, 0), (184, 150, 0), (199, 177, 3),
+ (240, 179, 10), (253, 175, 17), (239, 141, 6), (245, 112, 11),
+ (212, 104, 16), (161, 115, 30), (121, 91, 31), (114, 81, 30),
+ (117, 72, 7), (128, 48, 0), (131, 24, 0), (153, 37, 0),
+ (129, 52, 0), (128, 55, 10), (143, 60, 18), (138, 67, 0),
+ (156, 62, 0), (169, 76, 7), (245, 109, 23), (209, 86, 8)
+ ),
+
+// 235 Apophysis-040427-6DreamFaeriRlm
+((3, 0, 0), (1, 1, 1), (19, 10, 6), (38, 19, 12),
+ (62, 34, 17), (87, 50, 23), (106, 60, 30), (125, 71, 37),
+ (155, 92, 77), (157, 111, 89), (160, 131, 101), (161, 126, 102),
+ (162, 121, 103), (151, 120, 98), (141, 120, 93), (135, 114, 90),
+ (130, 109, 88), (94, 66, 52), (87, 58, 39), (81, 51, 27),
+ (79, 50, 28), (78, 50, 29), (78, 52, 26), (78, 55, 24),
+ (124, 83, 51), (138, 93, 46), (153, 103, 42), (156, 95, 48),
+ (160, 87, 54), (165, 85, 43), (170, 84, 33), (156, 83, 42),
+ (146, 88, 42), (104, 58, 32), (97, 51, 30), (90, 44, 28),
+ (81, 44, 26), (73, 45, 24), (77, 46, 21), (81, 47, 19),
+ (88, 43, 1), (88, 45, 9), (88, 47, 17), (94, 58, 38),
+ (100, 70, 60), (114, 76, 64), (128, 82, 69), (155, 112, 80),
+ (165, 122, 80), (198, 146, 89), (209, 178, 128), (220, 211, 168),
+ (229, 216, 187), (239, 222, 206), (237, 238, 199), (235, 255, 192),
+ (231, 205, 144), (220, 182, 130), (209, 160, 117), (204, 171, 142),
+ (200, 183, 167), (203, 180, 156), (206, 177, 145), (210, 176, 139),
+ (210, 173, 131), (218, 203, 148), (236, 228, 158), (254, 254, 168),
+ (254, 254, 174), (255, 255, 180), (246, 255, 196), (252, 235, 241),
+ (222, 196, 183), (202, 165, 147), (182, 134, 111), (180, 131, 100),
+ (178, 129, 89), (176, 127, 89), (175, 125, 90), (154, 119, 77),
+ (155, 109, 75), (134, 72, 35), (112, 56, 27), (91, 40, 19),
+ (85, 37, 11), (79, 34, 3), (78, 33, 2), (78, 33, 2),
+ (78, 34, 0), (78, 34, 0), (79, 35, 0), (79, 35, 0),
+ (79, 35, 0), (78, 33, 2), (79, 34, 3), (85, 33, 0),
+ (84, 35, 3), (93, 42, 21), (106, 54, 33), (119, 67, 46),
+ (125, 77, 48), (132, 88, 51), (156, 104, 64), (167, 114, 64),
+ (180, 121, 81), (191, 129, 83), (203, 137, 85), (198, 143, 78),
+ (193, 150, 72), (176, 125, 68), (189, 148, 8), (187, 130, 15),
+ (150, 97, 3), (105, 53, 39), (95, 45, 37), (86, 38, 36),
+ (67, 38, 32), (60, 36, 26), (54, 35, 20), (52, 38, 29),
+ (87, 58, 52), (108, 86, 72), (129, 114, 93), (144, 122, 103),
+ (160, 131, 113), (188, 145, 128), (182, 149, 140), (184, 156, 142),
+ (179, 158, 131), (182, 165, 135), (184, 158, 146), (186, 151, 158),
+ (175, 145, 157), (154, 135, 131), (158, 117, 121), (141, 122, 108),
+ (66, 80, 63), (54, 56, 46), (42, 32, 30), (38, 32, 29),
+ (34, 33, 28), (53, 31, 18), (70, 27, 11), (77, 32, 3),
+ (77, 32, 3), (78, 33, 2), (78, 33, 2), (78, 33, 2),
+ (77, 34, 2), (75, 34, 2), (53, 25, 11), (49, 12, 0),
+ (9, 0, 0), (4, 0, 3), (0, 1, 7), (0, 5, 11),
+ (23, 18, 15), (55, 37, 17), (82, 52, 26), (115, 71, 32),
+ (128, 95, 44), (129, 83, 67), (121, 82, 59), (113, 82, 51),
+ (93, 58, 38), (71, 38, 23), (41, 24, 17), (33, 19, 19),
+ (31, 30, 25), (46, 35, 30), (61, 40, 35), (80, 56, 32),
+ (109, 69, 43), (112, 77, 49), (124, 71, 40), (105, 63, 39),
+ (88, 58, 30), (79, 57, 34), (71, 61, 52), (85, 66, 52),
+ (124, 85, 68), (149, 111, 88), (173, 133, 107), (182, 153, 119),
+ (164, 153, 135), (171, 149, 132), (179, 146, 129), (173, 134, 105),
+ (169, 116, 84), (153, 109, 84), (147, 113, 86), (152, 112, 86),
+ (154, 119, 81), (147, 113, 76), (139, 98, 66), (103, 92, 60),
+ (94, 62, 37), (93, 52, 30), (80, 42, 23), (62, 34, 13),
+ (54, 27, 8), (42, 20, 9), (37, 11, 0), (26, 0, 0),
+ (7, 0, 0), (1, 1, 1), (0, 0, 0), (0, 0, 0),
+ (1, 1, 1), (0, 2, 2), (0, 4, 8), (2, 7, 10),
+ (27, 12, 7), (40, 7, 0), (61, 9, 13), (76, 13, 4),
+ (71, 32, 1), (75, 34, 2), (77, 32, 1), (77, 32, 1),
+ (78, 33, 2), (79, 32, 2), (79, 32, 2), (78, 33, 2),
+ (78, 33, 2), (78, 33, 2), (78, 33, 2), (78, 32, 6),
+ (83, 46, 20), (82, 44, 23), (78, 40, 19), (70, 35, 16),
+ (58, 29, 21), (52, 30, 17), (40, 21, 14), (32, 17, 12),
+ (33, 16, 8), (22, 11, 0), (4, 4, 4), (1, 1, 1),
+ (1, 1, 1), (4, 4, 2), (22, 19, 2), (40, 22, 10),
+ (56, 29, 18), (71, 35, 19), (76, 41, 22), (75, 37, 26),
+ (75, 37, 26), (78, 42, 28), (79, 44, 24), (86, 44, 20),
+ (95, 53, 29), (114, 75, 46), (145, 108, 100), (132, 90, 65)
+ ),
+
+// 236 Apophysis-040427-6EyeUniv
+((236, 112, 100), (209, 107, 103), (206, 102, 97), (204, 97, 91),
+ (203, 90, 83), (202, 83, 75), (201, 83, 74), (201, 84, 74),
+ (197, 79, 75), (197, 79, 73), (198, 79, 71), (194, 76, 69),
+ (191, 74, 67), (193, 75, 68), (195, 76, 70), (197, 77, 69),
+ (199, 78, 69), (238, 94, 60), (234, 91, 57), (231, 88, 54),
+ (211, 76, 53), (191, 65, 53), (187, 60, 50), (183, 56, 47),
+ (181, 57, 47), (184, 60, 52), (187, 64, 57), (190, 70, 62),
+ (194, 77, 68), (194, 78, 70), (194, 79, 72), (192, 73, 65),
+ (190, 71, 63), (187, 66, 58), (186, 64, 56), (186, 63, 55),
+ (186, 64, 56), (187, 66, 58), (188, 69, 62), (190, 73, 66),
+ (198, 83, 76), (203, 88, 77), (209, 93, 78), (205, 87, 74),
+ (202, 81, 70), (200, 79, 69), (199, 78, 69), (191, 70, 61),
+ (189, 68, 59), (187, 64, 56), (189, 71, 64), (191, 78, 72),
+ (197, 89, 82), (204, 101, 92), (208, 107, 100), (213, 114, 109),
+ (221, 133, 119), (218, 129, 122), (216, 126, 125), (194, 114, 127),
+ (173, 103, 129), (179, 98, 118), (186, 94, 107), (187, 101, 86),
+ (196, 84, 80), (134, 154, 152), (117, 139, 137), (100, 125, 122),
+ (109, 104, 120), (118, 84, 119), (36, 53, 61), (9, 26, 69),
+ (43, 2, 18), (111, 22, 25), (180, 43, 33), (187, 59, 50),
+ (194, 75, 67), (199, 85, 77), (204, 95, 88), (215, 114, 104),
+ (222, 136, 123), (219, 160, 118), (177, 167, 96), (136, 174, 75),
+ (131, 170, 72), (126, 166, 69), (121, 139, 53), (84, 80, 53),
+ (15, 31, 18), (27, 15, 22), (39, 0, 27), (39, 0, 27),
+ (40, 0, 27), (40, 1, 22), (38, 3, 9), (47, 5, 7),
+ (81, 50, 19), (183, 56, 47), (190, 70, 64), (197, 85, 81),
+ (199, 92, 88), (202, 100, 96), (209, 112, 103), (210, 125, 122),
+ (226, 169, 139), (232, 188, 162), (238, 207, 186), (239, 211, 189),
+ (240, 215, 193), (227, 240, 187), (216, 242, 181), (213, 226, 173),
+ (230, 178, 156), (227, 154, 147), (223, 150, 142), (220, 147, 138),
+ (223, 148, 129), (214, 183, 136), (194, 178, 119), (169, 166, 97),
+ (209, 111, 102), (155, 93, 79), (102, 75, 56), (72, 39, 44),
+ (43, 4, 33), (36, 4, 5), (15, 5, 6), (15, 0, 9),
+ (37, 2, 6), (76, 33, 14), (127, 37, 23), (179, 42, 32),
+ (182, 48, 37), (180, 52, 43), (184, 60, 52), (190, 72, 62),
+ (204, 100, 91), (212, 116, 105), (221, 133, 119), (225, 143, 120),
+ (229, 154, 122), (230, 178, 139), (236, 210, 177), (243, 229, 190),
+ (238, 207, 187), (228, 168, 158), (225, 156, 149), (222, 144, 140),
+ (215, 129, 128), (209, 110, 104), (203, 98, 92), (198, 86, 82),
+ (185, 62, 54), (183, 58, 50), (182, 55, 46), (187, 53, 42),
+ (185, 51, 40), (167, 77, 24), (134, 88, 29), (108, 99, 30),
+ (125, 119, 45), (196, 84, 80), (200, 89, 85), (204, 95, 90),
+ (214, 108, 92), (217, 115, 100), (214, 117, 108), (210, 115, 113),
+ (214, 126, 124), (214, 123, 122), (214, 120, 120), (212, 119, 112),
+ (210, 106, 103), (207, 98, 91), (200, 91, 84), (200, 89, 82),
+ (199, 87, 83), (196, 85, 78), (193, 80, 74), (148, 120, 55),
+ (102, 105, 78), (86, 52, 77), (76, 32, 65), (83, 49, 22),
+ (98, 89, 32), (102, 92, 33), (106, 96, 34), (125, 132, 55),
+ (147, 151, 75), (152, 159, 82), (145, 179, 85), (202, 190, 132),
+ (211, 229, 169), (205, 230, 164), (186, 213, 142), (171, 215, 126),
+ (164, 211, 119), (201, 184, 132), (203, 187, 136), (213, 203, 154),
+ (215, 226, 170), (230, 229, 183), (234, 197, 178), (229, 184, 145),
+ (219, 186, 141), (220, 182, 137), (224, 165, 125), (220, 137, 131),
+ (216, 128, 124), (213, 114, 109), (205, 107, 106), (211, 113, 110),
+ (216, 128, 116), (218, 136, 124), (219, 135, 125), (218, 131, 121),
+ (216, 119, 110), (207, 102, 98), (200, 91, 84), (198, 79, 71),
+ (194, 70, 60), (187, 64, 56), (185, 62, 54), (190, 59, 49),
+ (190, 57, 48), (192, 61, 51), (193, 66, 57), (194, 77, 70),
+ (200, 86, 76), (200, 87, 79), (201, 92, 85), (204, 93, 86),
+ (204, 93, 84), (204, 96, 84), (206, 95, 84), (209, 99, 86),
+ (216, 116, 93), (238, 129, 46), (235, 124, 43), (214, 95, 37),
+ (203, 94, 29), (190, 86, 31), (180, 71, 50), (184, 63, 54),
+ (189, 61, 50), (192, 64, 53), (199, 76, 61), (230, 92, 55),
+ (238, 110, 47), (246, 114, 49), (250, 105, 61), (239, 95, 61),
+ (225, 90, 61), (214, 86, 73), (210, 100, 87), (224, 112, 101)
+ ),
+
+// 237 Apophysis-040427-6FaeriRob
+((156, 68, 4), (118, 44, 0), (119, 47, 1), (121, 51, 2),
+ (111, 74, 52), (102, 97, 103), (90, 85, 117), (79, 74, 132),
+ (71, 77, 161), (71, 76, 180), (72, 76, 199), (86, 101, 219),
+ (100, 127, 240), (104, 113, 244), (109, 99, 248), (86, 81, 229),
+ (64, 64, 210), (102, 88, 165), (110, 106, 173), (118, 124, 182),
+ (128, 137, 187), (138, 150, 192), (143, 160, 193), (149, 171, 194),
+ (179, 207, 132), (192, 229, 117), (206, 252, 102), (210, 252, 96),
+ (215, 253, 90), (223, 254, 81), (231, 255, 73), (242, 255, 80),
+ (255, 250, 79), (250, 212, 65), (237, 181, 53), (224, 150, 41),
+ (208, 123, 24), (192, 97, 7), (183, 88, 5), (175, 79, 3),
+ (173, 90, 0), (175, 125, 23), (178, 161, 47), (215, 177, 53),
+ (253, 193, 60), (253, 191, 59), (254, 190, 58), (249, 166, 38),
+ (234, 149, 42), (178, 98, 9), (168, 78, 11), (159, 58, 14),
+ (147, 57, 7), (135, 56, 0), (136, 56, 6), (138, 57, 12),
+ (150, 68, 12), (162, 78, 12), (174, 88, 13), (186, 101, 11),
+ (198, 115, 9), (203, 132, 14), (209, 149, 19), (254, 175, 48),
+ (247, 185, 50), (191, 150, 70), (175, 135, 97), (160, 121, 124),
+ (150, 126, 133), (141, 131, 142), (123, 135, 157), (111, 108, 75),
+ (112, 60, 0), (112, 50, 0), (113, 41, 1), (106, 38, 0),
+ (100, 35, 0), (98, 34, 0), (97, 34, 1), (103, 38, 0),
+ (105, 40, 0), (113, 46, 1), (108, 42, 0), (104, 39, 0),
+ (100, 37, 0), (97, 35, 0), (90, 29, 0), (96, 22, 0),
+ (96, 33, 0), (96, 33, 0), (97, 34, 1), (97, 36, 0),
+ (97, 38, 0), (99, 37, 0), (107, 42, 0), (107, 43, 0),
+ (100, 37, 0), (20, 9, 17), (12, 8, 37), (5, 7, 58),
+ (9, 8, 60), (13, 10, 63), (19, 8, 77), (30, 7, 61),
+ (42, 25, 61), (40, 29, 77), (38, 34, 93), (35, 33, 104),
+ (32, 33, 116), (43, 48, 140), (32, 36, 123), (53, 40, 93),
+ (75, 42, 69), (114, 49, 11), (123, 49, 14), (132, 49, 17),
+ (126, 53, 2), (125, 54, 2), (121, 49, 0), (100, 37, 6),
+ (44, 21, 67), (43, 24, 81), (42, 27, 96), (47, 29, 108),
+ (52, 32, 121), (43, 30, 122), (32, 31, 124), (50, 37, 145),
+ (69, 49, 162), (43, 39, 150), (42, 40, 159), (42, 41, 168),
+ (49, 57, 181), (36, 50, 208), (58, 52, 224), (93, 97, 207),
+ (149, 149, 211), (147, 162, 184), (145, 176, 158), (140, 163, 162),
+ (135, 151, 166), (141, 167, 166), (160, 175, 170), (154, 159, 179),
+ (140, 149, 188), (111, 120, 199), (102, 98, 194), (94, 77, 189),
+ (78, 79, 161), (96, 107, 137), (147, 110, 127), (168, 116, 69),
+ (206, 142, 55), (223, 142, 56), (241, 142, 57), (254, 179, 52),
+ (255, 194, 56), (255, 193, 60), (255, 193, 69), (242, 179, 84),
+ (192, 162, 110), (176, 139, 112), (186, 127, 86), (196, 115, 60),
+ (195, 117, 32), (202, 108, 12), (207, 110, 13), (210, 114, 14),
+ (227, 133, 17), (230, 136, 21), (234, 140, 26), (225, 127, 20),
+ (213, 116, 22), (210, 126, 30), (185, 135, 64), (192, 182, 113),
+ (197, 200, 93), (195, 233, 120), (192, 254, 111), (193, 248, 95),
+ (222, 227, 72), (203, 188, 63), (171, 146, 54), (155, 131, 59),
+ (177, 169, 107), (155, 160, 125), (134, 151, 143), (139, 163, 149),
+ (164, 154, 165), (175, 153, 139), (196, 186, 125), (207, 250, 100),
+ (244, 250, 102), (241, 250, 79), (252, 241, 87), (255, 212, 73),
+ (255, 211, 63), (255, 188, 57), (255, 159, 34), (255, 168, 27),
+ (248, 213, 61), (246, 225, 48), (244, 224, 51), (218, 232, 95),
+ (173, 205, 122), (136, 154, 178), (101, 98, 203), (80, 73, 166),
+ (52, 49, 164), (57, 57, 143), (64, 44, 115), (112, 85, 100),
+ (161, 103, 57), (196, 104, 21), (195, 100, 18), (203, 105, 18),
+ (204, 94, 33), (200, 103, 60), (144, 108, 96), (106, 87, 142),
+ (106, 89, 143), (115, 116, 102), (139, 103, 41), (167, 74, 30),
+ (169, 75, 5), (161, 66, 0), (170, 77, 0), (181, 79, 5),
+ (188, 92, 8), (198, 103, 11), (206, 114, 13), (213, 126, 11),
+ (236, 142, 26), (239, 145, 31), (243, 153, 31), (250, 154, 33),
+ (248, 152, 31), (242, 149, 28), (234, 140, 24), (212, 116, 16),
+ (189, 86, 7), (174, 79, 0), (163, 72, 1), (155, 70, 6),
+ (157, 72, 7), (166, 89, 21), (166, 98, 13), (162, 84, 10),
+ (153, 78, 0), (145, 61, 1), (144, 62, 4), (119, 70, 0),
+ (128, 53, 0), (145, 55, 0), (150, 60, 0), (164, 73, 2)
+ ),
+
+// 238 Apophysis-040427-6FaeriRob2
+((174, 71, 2), (128, 50, 2), (118, 46, 1), (109, 42, 0),
+ (104, 38, 0), (100, 34, 0), (96, 33, 0), (92, 33, 1),
+ (91, 32, 0), (87, 30, 0), (83, 28, 0), (80, 22, 5),
+ (77, 16, 11), (40, 16, 47), (3, 16, 84), (7, 14, 97),
+ (12, 12, 110), (25, 1, 51), (51, 12, 25), (78, 24, 0),
+ (79, 24, 0), (81, 25, 0), (82, 26, 0), (83, 27, 0),
+ (76, 25, 0), (77, 24, 0), (79, 23, 0), (82, 24, 0),
+ (86, 26, 0), (89, 29, 0), (92, 32, 0), (92, 33, 1),
+ (89, 30, 0), (74, 44, 52), (50, 35, 86), (26, 27, 120),
+ (44, 15, 76), (62, 3, 33), (68, 15, 22), (75, 28, 12),
+ (35, 31, 92), (35, 31, 86), (35, 31, 81), (59, 30, 43),
+ (83, 29, 5), (88, 32, 4), (94, 35, 3), (102, 31, 9),
+ (105, 31, 0), (128, 50, 1), (141, 56, 0), (155, 63, 0),
+ (172, 75, 5), (190, 87, 10), (190, 89, 12), (191, 91, 15),
+ (231, 125, 23), (240, 134, 23), (249, 143, 23), (252, 172, 39),
+ (255, 201, 56), (253, 212, 59), (252, 224, 62), (255, 206, 60),
+ (255, 184, 53), (224, 165, 63), (196, 142, 76), (168, 119, 89),
+ (151, 115, 105), (134, 111, 121), (84, 93, 132), (68, 70, 111),
+ (95, 51, 64), (127, 98, 71), (160, 145, 78), (184, 182, 83),
+ (208, 219, 89), (219, 230, 93), (230, 242, 98), (229, 255, 97),
+ (211, 251, 93), (246, 234, 52), (248, 229, 47), (250, 224, 43),
+ (248, 223, 46), (246, 223, 49), (226, 225, 83), (166, 215, 90),
+ (141, 158, 186), (118, 128, 209), (95, 99, 232), (77, 79, 228),
+ (60, 59, 225), (65, 69, 220), (97, 106, 235), (125, 119, 219),
+ (136, 147, 192), (185, 204, 148), (168, 194, 138), (151, 184, 129),
+ (147, 177, 113), (144, 170, 97), (134, 129, 97), (150, 79, 27),
+ (128, 52, 3), (140, 54, 3), (152, 57, 3), (158, 64, 1),
+ (165, 71, 0), (175, 78, 7), (174, 77, 9), (166, 72, 2),
+ (155, 60, 6), (132, 52, 1), (134, 54, 2), (137, 56, 3),
+ (158, 66, 1), (173, 66, 0), (184, 81, 6), (186, 93, 0),
+ (180, 89, 10), (169, 106, 8), (159, 124, 6), (170, 126, 14),
+ (181, 128, 22), (185, 153, 66), (145, 143, 128), (142, 147, 187),
+ (141, 127, 214), (65, 78, 208), (60, 66, 199), (55, 54, 190),
+ (83, 76, 169), (63, 49, 124), (54, 40, 127), (40, 38, 148),
+ (78, 72, 255), (92, 87, 246), (106, 102, 238), (92, 100, 233),
+ (79, 98, 229), (82, 85, 180), (82, 91, 106), (102, 90, 42),
+ (130, 65, 0), (162, 71, 1), (160, 72, 9), (159, 74, 17),
+ (164, 89, 31), (158, 98, 64), (121, 127, 65), (103, 118, 111),
+ (74, 87, 155), (85, 88, 141), (97, 89, 128), (131, 117, 117),
+ (134, 146, 122), (151, 194, 104), (191, 209, 89), (212, 229, 71),
+ (247, 224, 66), (244, 243, 65), (242, 244, 58), (240, 246, 52),
+ (240, 253, 60), (211, 255, 80), (189, 255, 78), (218, 248, 74),
+ (246, 195, 54), (238, 181, 51), (230, 168, 49), (234, 148, 49),
+ (246, 167, 64), (222, 167, 87), (219, 174, 141), (168, 197, 117),
+ (183, 230, 114), (168, 245, 163), (184, 236, 128), (208, 247, 104),
+ (249, 226, 110), (252, 218, 67), (247, 189, 55), (255, 160, 34),
+ (244, 141, 23), (247, 138, 25), (250, 135, 28), (236, 131, 24),
+ (226, 109, 16), (210, 97, 3), (198, 98, 12), (192, 94, 19),
+ (203, 106, 12), (198, 109, 19), (193, 114, 22), (182, 121, 40),
+ (198, 129, 62), (194, 157, 86), (167, 176, 113), (136, 159, 143),
+ (164, 145, 167), (158, 94, 131), (139, 93, 78), (158, 85, 42),
+ (148, 84, 22), (129, 55, 8), (123, 36, 6), (122, 31, 0),
+ (112, 44, 0), (111, 48, 17), (119, 81, 36), (100, 82, 58),
+ (74, 70, 129), (87, 93, 169), (115, 131, 182), (122, 152, 163),
+ (133, 149, 164), (157, 122, 126), (139, 108, 103), (119, 72, 42),
+ (98, 57, 13), (64, 24, 0), (47, 11, 15), (32, 0, 1),
+ (27, 5, 8), (23, 3, 15), (15, 2, 22), (8, 3, 44),
+ (11, 16, 74), (37, 0, 51), (73, 19, 7), (97, 37, 9),
+ (119, 46, 11), (141, 65, 7), (162, 94, 21), (181, 106, 38),
+ (184, 109, 44), (196, 98, 27), (177, 88, 20), (170, 78, 11),
+ (152, 69, 3), (130, 53, 1), (110, 46, 0), (103, 41, 4),
+ (99, 42, 0), (101, 36, 4), (115, 44, 12), (108, 60, 37),
+ (45, 57, 97), (35, 42, 149), (39, 38, 176), (48, 46, 205),
+ (58, 72, 203), (104, 108, 208), (175, 175, 147), (229, 244, 99)
+ ),
+
+// 239 Apophysis-040427-6FaeriRobDet
+((4, 7, 84), (0, 0, 93), (19, 12, 150), (38, 24, 208),
+ (49, 40, 222), (60, 56, 237), (73, 71, 246), (86, 86, 255),
+ (21, 47, 206), (11, 23, 142), (1, 0, 78), (0, 0, 70),
+ (0, 1, 62), (3, 6, 90), (7, 11, 119), (19, 26, 126),
+ (32, 41, 134), (31, 29, 162), (58, 21, 94), (85, 13, 27),
+ (91, 21, 15), (97, 30, 3), (97, 27, 1), (97, 25, 0),
+ (97, 25, 1), (106, 31, 2), (116, 37, 4), (143, 53, 2),
+ (170, 69, 1), (182, 80, 0), (194, 91, 0), (206, 99, 3),
+ (255, 123, 27), (255, 174, 43), (248, 167, 42), (241, 160, 42),
+ (217, 125, 22), (194, 90, 3), (177, 75, 1), (160, 61, 0),
+ (113, 37, 1), (112, 35, 0), (112, 33, 0), (112, 51, 0),
+ (112, 70, 0), (123, 101, 40), (134, 132, 81), (164, 162, 150),
+ (154, 164, 163), (79, 87, 186), (40, 45, 133), (2, 4, 81),
+ (12, 4, 56), (23, 5, 31), (31, 5, 18), (39, 5, 6),
+ (77, 9, 6), (78, 9, 3), (80, 10, 0), (81, 13, 0),
+ (82, 17, 0), (83, 16, 0), (84, 15, 0), (85, 16, 1),
+ (86, 17, 1), (85, 16, 0), (91, 20, 0), (97, 25, 0),
+ (106, 30, 0), (115, 35, 0), (139, 48, 0), (172, 69, 2),
+ (203, 106, 3), (216, 120, 1), (230, 134, 0), (241, 148, 2),
+ (252, 162, 4), (253, 168, 14), (255, 175, 24), (245, 168, 26),
+ (216, 143, 30), (205, 98, 0), (204, 96, 0), (204, 95, 0),
+ (200, 91, 0), (196, 88, 0), (172, 68, 0), (144, 46, 0),
+ (107, 30, 2), (96, 23, 1), (86, 17, 1), (91, 11, 0),
+ (96, 5, 0), (103, 26, 0), (115, 35, 0), (135, 44, 0),
+ (171, 68, 0), (216, 110, 0), (217, 121, 2), (218, 133, 4),
+ (207, 136, 18), (197, 140, 33), (187, 121, 25), (175, 89, 4),
+ (119, 42, 0), (104, 30, 3), (90, 18, 6), (85, 15, 3),
+ (81, 13, 0), (79, 11, 0), (77, 9, 0), (70, 9, 0),
+ (41, 2, 3), (52, 0, 5), (64, 4, 3), (77, 8, 1),
+ (84, 15, 0), (95, 23, 0), (108, 37, 0), (117, 39, 1),
+ (156, 62, 0), (167, 67, 0), (179, 72, 0), (179, 73, 0),
+ (180, 74, 0), (178, 75, 0), (180, 77, 2), (182, 76, 2),
+ (194, 97, 3), (233, 155, 5), (239, 170, 12), (246, 185, 19),
+ (253, 173, 24), (227, 164, 51), (177, 144, 31), (138, 141, 62),
+ (149, 176, 157), (142, 167, 164), (136, 158, 171), (125, 142, 179),
+ (115, 127, 187), (86, 91, 209), (67, 68, 161), (93, 72, 53),
+ (90, 40, 5), (86, 18, 0), (89, 21, 2), (93, 25, 4),
+ (110, 31, 0), (122, 40, 0), (135, 53, 0), (147, 67, 0),
+ (201, 97, 0), (214, 110, 0), (227, 124, 0), (235, 153, 27),
+ (254, 181, 42), (255, 201, 48), (255, 224, 68), (251, 231, 58),
+ (244, 236, 63), (246, 253, 61), (249, 254, 62), (253, 255, 63),
+ (254, 244, 61), (249, 249, 57), (228, 255, 56), (218, 255, 90),
+ (184, 254, 129), (193, 234, 108), (202, 214, 88), (231, 211, 52),
+ (246, 194, 46), (243, 192, 41), (255, 174, 38), (255, 172, 34),
+ (255, 158, 21), (255, 159, 18), (254, 171, 33), (249, 188, 38),
+ (246, 208, 49), (237, 202, 72), (201, 199, 124), (172, 188, 143),
+ (149, 166, 192), (130, 146, 223), (112, 127, 255), (104, 113, 244),
+ (101, 109, 244), (104, 117, 213), (106, 88, 126), (128, 59, 17),
+ (130, 38, 1), (132, 33, 2), (120, 30, 3), (116, 36, 1),
+ (134, 43, 0), (131, 51, 0), (147, 65, 0), (164, 76, 0),
+ (195, 92, 0), (209, 97, 0), (219, 113, 3), (234, 142, 19),
+ (250, 148, 14), (255, 142, 4), (247, 139, 13), (239, 135, 10),
+ (228, 133, 3), (202, 134, 37), (198, 122, 46), (164, 128, 92),
+ (157, 140, 148), (107, 117, 166), (47, 42, 145), (89, 39, 42),
+ (78, 31, 23), (105, 34, 2), (124, 47, 1), (139, 63, 14),
+ (104, 110, 98), (149, 195, 120), (167, 216, 125), (170, 226, 101),
+ (183, 247, 91), (199, 220, 89), (195, 197, 124), (173, 197, 119),
+ (162, 181, 162), (140, 158, 162), (153, 113, 173), (122, 103, 228),
+ (92, 101, 255), (65, 68, 209), (53, 53, 141), (129, 73, 50),
+ (132, 51, 4), (127, 46, 0), (123, 41, 1), (129, 35, 0),
+ (136, 43, 0), (146, 44, 4), (155, 28, 0), (162, 56, 4),
+ (172, 67, 1), (173, 73, 0), (177, 70, 0), (180, 66, 0),
+ (163, 61, 0), (154, 54, 0), (154, 53, 1), (151, 57, 3),
+ (158, 92, 14), (178, 114, 27), (203, 255, 108), (189, 176, 80)
+ ),
+
+// 240 Apophysis-040427-6FlakWhorls
+((114, 150, 80), (61, 59, 44), (34, 33, 22), (8, 8, 0),
+ (4, 4, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (11, 8, 1),
+ (23, 17, 3), (63, 45, 24), (104, 73, 45), (122, 89, 65),
+ (141, 106, 86), (183, 136, 80), (168, 151, 68), (153, 167, 56),
+ (134, 123, 57), (116, 80, 58), (111, 69, 61), (107, 58, 64),
+ (105, 52, 38), (107, 63, 44), (110, 74, 50), (129, 87, 42),
+ (149, 100, 34), (158, 113, 31), (168, 126, 28), (202, 138, 38),
+ (244, 128, 45), (255, 205, 93), (255, 220, 144), (255, 235, 195),
+ (232, 214, 150), (209, 193, 105), (192, 193, 77), (176, 194, 50),
+ (109, 171, 44), (70, 144, 38), (32, 117, 32), (33, 108, 21),
+ (34, 100, 10), (35, 101, 20), (36, 102, 30), (46, 79, 52),
+ (52, 61, 66), (67, 68, 73), (77, 66, 92), (87, 65, 112),
+ (104, 68, 97), (122, 72, 83), (118, 74, 81), (115, 76, 79),
+ (97, 91, 75), (99, 78, 74), (102, 65, 73), (92, 72, 69),
+ (83, 80, 65), (86, 73, 67), (89, 67, 69), (74, 58, 61),
+ (87, 73, 60), (81, 77, 52), (83, 76, 48), (86, 75, 45),
+ (88, 73, 41), (90, 71, 38), (85, 67, 43), (82, 66, 43),
+ (78, 62, 36), (72, 69, 40), (66, 77, 45), (60, 79, 47),
+ (54, 81, 50), (61, 76, 50), (69, 71, 50), (71, 58, 49),
+ (66, 58, 47), (61, 59, 0), (52, 65, 11), (44, 72, 23),
+ (44, 70, 40), (45, 68, 58), (50, 75, 54), (56, 89, 42),
+ (109, 57, 36), (127, 41, 28), (145, 26, 20), (161, 26, 20),
+ (178, 26, 21), (173, 72, 42), (172, 95, 51), (158, 104, 78),
+ (147, 97, 98), (163, 130, 139), (158, 127, 133), (154, 125, 127),
+ (136, 108, 121), (119, 91, 116), (88, 54, 81), (54, 31, 41),
+ (2, 0, 5), (1, 0, 2), (0, 0, 0), (2, 2, 0),
+ (4, 5, 0), (17, 15, 2), (43, 57, 42), (63, 97, 62),
+ (83, 120, 66), (138, 120, 98), (136, 114, 104), (134, 108, 111),
+ (138, 108, 108), (142, 108, 99), (137, 128, 95), (133, 144, 84),
+ (130, 158, 39), (159, 169, 44), (189, 180, 49), (188, 181, 52),
+ (188, 183, 55), (231, 187, 92), (249, 209, 75), (199, 192, 52),
+ (184, 194, 43), (124, 143, 54), (118, 140, 68), (113, 138, 83),
+ (111, 117, 73), (124, 92, 81), (143, 94, 90), (174, 95, 90),
+ (228, 149, 80), (240, 178, 76), (253, 207, 72), (250, 209, 76),
+ (248, 211, 81), (233, 202, 158), (228, 193, 135), (194, 155, 100),
+ (146, 132, 83), (94, 101, 49), (91, 95, 47), (89, 90, 46),
+ (39, 87, 37), (42, 102, 28), (41, 134, 17), (70, 143, 12),
+ (54, 106, 23), (68, 100, 32), (82, 95, 42), (79, 131, 31),
+ (109, 134, 50), (114, 127, 48), (124, 106, 34), (148, 126, 43),
+ (178, 145, 40), (159, 131, 24), (157, 129, 39), (156, 128, 55),
+ (141, 111, 73), (109, 99, 74), (89, 94, 64), (89, 83, 59),
+ (108, 93, 38), (108, 108, 39), (108, 123, 40), (114, 120, 48),
+ (113, 81, 68), (109, 73, 75), (102, 68, 84), (97, 68, 90),
+ (119, 77, 99), (135, 84, 99), (170, 108, 85), (183, 119, 94),
+ (189, 135, 99), (185, 135, 112), (195, 142, 108), (216, 173, 104),
+ (233, 157, 95), (225, 147, 87), (217, 138, 79), (235, 121, 48),
+ (219, 151, 50), (194, 135, 33), (188, 107, 44), (186, 83, 24),
+ (201, 47, 37), (194, 42, 41), (179, 46, 37), (153, 55, 46),
+ (152, 73, 58), (119, 67, 71), (98, 62, 74), (88, 63, 69),
+ (88, 58, 68), (85, 55, 53), (94, 45, 41), (90, 37, 33),
+ (88, 43, 20), (93, 43, 34), (87, 60, 53), (94, 61, 78),
+ (88, 70, 86), (84, 63, 82), (70, 54, 81), (69, 51, 77),
+ (65, 60, 66), (57, 53, 42), (22, 22, 22), (2, 4, 3),
+ (0, 0, 0), (3, 0, 0), (13, 7, 7), (62, 26, 38),
+ (80, 14, 41), (124, 42, 44), (146, 49, 66), (157, 89, 40),
+ (185, 104, 49), (161, 102, 44), (127, 82, 53), (88, 74, 61),
+ (73, 78, 58), (61, 79, 53), (62, 81, 51), (83, 90, 48),
+ (115, 91, 43), (139, 82, 29), (180, 86, 35), (206, 107, 26),
+ (238, 95, 25), (228, 98, 38), (207, 112, 32), (208, 116, 39),
+ (219, 137, 35), (209, 123, 62), (180, 126, 66), (115, 89, 64),
+ (92, 74, 50), (68, 45, 31), (58, 22, 6), (15, 12, 5),
+ (1, 0, 2), (5, 6, 10), (30, 24, 34), (46, 49, 104),
+ (82, 69, 115), (83, 76, 120), (104, 90, 141), (144, 192, 46)
+ ),
+
+// 241 Apophysis-040427-11FlarCelebrat
+((218, 193, 173), (217, 187, 163), (212, 177, 148), (208, 168, 133),
+ (124, 193, 73), (41, 218, 14), (40, 227, 8), (39, 237, 2),
+ (55, 197, 49), (131, 168, 73), (207, 140, 98), (135, 197, 50),
+ (64, 255, 2), (58, 255, 2), (52, 255, 3), (51, 255, 1),
+ (50, 255, 0), (48, 243, 1), (123, 184, 38), (199, 125, 76),
+ (197, 103, 51), (196, 81, 26), (221, 73, 13), (247, 65, 0),
+ (255, 79, 1), (255, 87, 1), (255, 95, 1), (255, 112, 21),
+ (255, 129, 42), (228, 128, 61), (202, 128, 81), (203, 129, 84),
+ (201, 128, 83), (61, 255, 0), (31, 234, 24), (1, 213, 49),
+ (38, 144, 100), (76, 75, 151), (79, 51, 194), (82, 28, 238),
+ (98, 22, 255), (90, 24, 250), (83, 26, 245), (87, 62, 217),
+ (91, 98, 189), (151, 132, 163), (211, 166, 137), (214, 187, 160),
+ (218, 191, 170), (219, 208, 190), (218, 202, 182), (217, 196, 175),
+ (216, 189, 165), (216, 182, 155), (215, 177, 149), (214, 173, 143),
+ (208, 146, 105), (205, 137, 93), (202, 128, 81), (198, 103, 52),
+ (195, 78, 24), (193, 72, 17), (192, 67, 11), (241, 38, 0),
+ (246, 13, 0), (219, 0, 95), (190, 0, 119), (162, 1, 143),
+ (130, 1, 137), (98, 1, 132), (159, 1, 140), (174, 18, 127),
+ (211, 144, 102), (211, 153, 116), (212, 163, 131), (214, 177, 151),
+ (217, 192, 172), (218, 197, 180), (219, 203, 188), (220, 219, 214),
+ (232, 255, 242), (221, 231, 223), (218, 212, 197), (215, 193, 172),
+ (212, 177, 148), (209, 161, 125), (203, 129, 84), (200, 108, 57),
+ (244, 65, 0), (243, 32, 0), (242, 0, 1), (241, 0, 0),
+ (241, 1, 0), (165, 1, 0), (162, 0, 0), (158, 0, 27),
+ (117, 1, 76), (114, 27, 253), (117, 13, 254), (121, 0, 255),
+ (123, 0, 254), (126, 0, 254), (174, 0, 185), (193, 0, 132),
+ (203, 129, 84), (207, 141, 100), (211, 153, 116), (214, 164, 132),
+ (217, 176, 148), (216, 188, 164), (218, 192, 169), (255, 218, 145),
+ (255, 185, 116), (212, 173, 140), (212, 170, 137), (213, 168, 135),
+ (210, 161, 129), (90, 111, 178), (93, 78, 203), (95, 68, 211),
+ (1, 146, 237), (0, 167, 201), (0, 188, 166), (0, 186, 139),
+ (1, 185, 113), (0, 193, 88), (0, 202, 58), (0, 200, 65),
+ (76, 167, 98), (215, 181, 153), (216, 186, 161), (217, 192, 170),
+ (218, 196, 175), (222, 199, 181), (255, 226, 156), (254, 216, 143),
+ (208, 146, 105), (209, 155, 117), (210, 164, 130), (212, 172, 141),
+ (215, 181, 153), (216, 194, 171), (233, 235, 195), (234, 255, 224),
+ (246, 253, 211), (255, 241, 172), (255, 238, 171), (255, 236, 170),
+ (254, 231, 163), (215, 182, 151), (239, 206, 163), (225, 134, 87),
+ (94, 64, 214), (100, 45, 233), (107, 26, 253), (117, 21, 255),
+ (99, 23, 255), (83, 26, 242), (116, 47, 112), (200, 114, 67),
+ (201, 109, 58), (141, 130, 48), (94, 170, 38), (47, 211, 28),
+ (34, 231, 1), (1, 255, 1), (0, 255, 7), (0, 226, 38),
+ (39, 173, 172), (128, 191, 183), (218, 209, 194), (223, 231, 207),
+ (233, 255, 234), (237, 243, 207), (219, 203, 187), (212, 177, 147),
+ (80, 159, 112), (1, 172, 200), (0, 159, 219), (31, 112, 255),
+ (39, 64, 255), (34, 46, 252), (33, 37, 250), (41, 6, 220),
+ (91, 1, 148), (125, 0, 154), (160, 0, 160), (175, 0, 136),
+ (167, 0, 134), (164, 56, 90), (200, 118, 68), (206, 135, 91),
+ (206, 135, 91), (209, 140, 98), (255, 151, 66), (255, 138, 50),
+ (254, 112, 14), (255, 108, 12), (254, 110, 14), (202, 108, 56),
+ (201, 109, 58), (199, 105, 54), (199, 105, 53), (197, 96, 42),
+ (197, 82, 27), (255, 78, 2), (254, 79, 0), (255, 88, 0),
+ (255, 98, 3), (254, 127, 34), (255, 164, 87), (213, 167, 133),
+ (212, 175, 146), (157, 168, 186), (92, 83, 202), (86, 26, 244),
+ (109, 26, 254), (118, 1, 255), (86, 17, 255), (37, 0, 219),
+ (39, 0, 213), (39, 0, 205), (57, 1, 188), (67, 0, 175),
+ (108, 2, 103), (149, 0, 56), (172, 31, 1), (186, 44, 0),
+ (196, 75, 22), (195, 84, 28), (198, 95, 37), (197, 94, 36),
+ (194, 79, 24), (195, 78, 24), (192, 71, 16), (191, 64, 9),
+ (188, 54, 1), (179, 35, 0), (180, 33, 0), (236, 0, 2),
+ (230, 0, 36), (225, 0, 63), (226, 0, 76), (200, 0, 122),
+ (167, 0, 157), (137, 0, 238), (132, 0, 247), (161, 0, 156),
+ (183, 0, 140), (203, 0, 120), (219, 0, 94), (203, 112, 65),
+ (208, 137, 95), (210, 160, 125), (214, 177, 148), (217, 190, 169)
+ ),
+
+// 242 Apophysis-040427-11SpacTrees
+((83, 77, 3), (38, 15, 33), (56, 10, 57), (74, 6, 81),
+ (93, 6, 87), (112, 6, 94), (111, 3, 89), (110, 1, 84),
+ (135, 6, 70), (156, 23, 61), (178, 40, 53), (199, 67, 79),
+ (220, 94, 106), (221, 85, 94), (222, 77, 82), (219, 77, 62),
+ (216, 78, 42), (192, 59, 40), (194, 60, 41), (196, 61, 42),
+ (200, 61, 45), (204, 62, 48), (214, 59, 49), (224, 57, 51),
+ (241, 59, 46), (243, 62, 55), (246, 66, 65), (245, 68, 72),
+ (244, 70, 80), (241, 71, 81), (239, 73, 83), (235, 78, 87),
+ (233, 76, 85), (189, 58, 40), (144, 45, 23), (99, 32, 6),
+ (89, 31, 29), (79, 30, 52), (103, 20, 66), (127, 10, 80),
+ (140, 7, 62), (141, 6, 43), (143, 6, 24), (116, 17, 14),
+ (90, 28, 5), (87, 26, 4), (85, 24, 3), (36, 29, 13),
+ (23, 8, 11), (53, 2, 61), (92, 5, 63), (132, 9, 66),
+ (138, 7, 45), (145, 6, 25), (144, 6, 24), (143, 6, 24),
+ (90, 23, 4), (94, 25, 34), (99, 27, 64), (112, 34, 82),
+ (126, 42, 101), (147, 74, 95), (169, 106, 89), (199, 138, 31),
+ (218, 163, 46), (164, 255, 22), (168, 249, 23), (173, 243, 25),
+ (205, 237, 18), (238, 232, 12), (246, 197, 16), (236, 189, 15),
+ (216, 119, 16), (206, 103, 12), (197, 87, 8), (182, 93, 8),
+ (167, 100, 9), (164, 99, 8), (162, 98, 8), (160, 94, 8),
+ (148, 82, 8), (120, 85, 43), (104, 70, 30), (88, 56, 17),
+ (86, 51, 10), (85, 46, 3), (86, 35, 0), (107, 45, 6),
+ (157, 47, 22), (183, 51, 21), (210, 56, 20), (215, 54, 16),
+ (220, 52, 13), (211, 79, 4), (231, 91, 14), (208, 135, 24),
+ (197, 130, 17), (183, 120, 49), (163, 71, 48), (144, 22, 47),
+ (140, 19, 54), (136, 16, 61), (135, 48, 80), (121, 109, 121),
+ (124, 206, 106), (124, 193, 112), (125, 181, 118), (121, 169, 104),
+ (118, 157, 90), (177, 81, 95), (160, 52, 50), (156, 32, 22),
+ (138, 37, 9), (45, 29, 6), (33, 19, 8), (22, 10, 10),
+ (22, 8, 8), (17, 10, 18), (20, 25, 19), (7, 51, 28),
+ (5, 59, 35), (7, 60, 30), (9, 61, 25), (8, 67, 26),
+ (7, 73, 27), (7, 62, 23), (11, 52, 12), (7, 51, 2),
+ (7, 49, 1), (70, 57, 5), (94, 55, 7), (118, 54, 10),
+ (148, 39, 6), (158, 50, 47), (166, 76, 39), (163, 97, 10),
+ (196, 86, 7), (202, 73, 12), (208, 61, 17), (206, 63, 31),
+ (205, 66, 45), (215, 63, 52), (213, 65, 29), (196, 57, 14),
+ (200, 45, 27), (166, 54, 30), (155, 56, 17), (145, 58, 5),
+ (124, 54, 5), (117, 51, 3), (93, 54, 0), (71, 85, 0),
+ (21, 68, 14), (17, 56, 9), (13, 45, 4), (24, 37, 9),
+ (22, 11, 9), (19, 8, 12), (22, 6, 16), (20, 3, 13),
+ (16, 4, 16), (11, 5, 9), (14, 5, 11), (18, 5, 14),
+ (19, 6, 15), (22, 6, 17), (22, 8, 33), (40, 2, 53),
+ (93, 12, 91), (103, 9, 93), (113, 7, 95), (168, 7, 147),
+ (161, 45, 142), (161, 110, 167), (156, 115, 119), (159, 162, 119),
+ (183, 188, 122), (162, 139, 98), (161, 116, 93), (155, 111, 110),
+ (179, 100, 93), (190, 113, 85), (204, 126, 106), (202, 109, 140),
+ (255, 255, 251), (252, 249, 250), (249, 244, 250), (247, 87, 157),
+ (246, 84, 105), (243, 108, 76), (231, 106, 86), (213, 113, 90),
+ (170, 144, 95), (151, 175, 115), (129, 178, 157), (125, 181, 156),
+ (130, 193, 172), (121, 196, 155), (122, 201, 122), (123, 213, 90),
+ (147, 244, 27), (120, 230, 35), (191, 120, 12), (159, 93, 7),
+ (118, 50, 5), (113, 38, 9), (96, 31, 3), (103, 37, 5),
+ (128, 54, 15), (143, 68, 10), (150, 96, 6), (159, 107, 5),
+ (167, 102, 10), (187, 118, 14), (215, 148, 17), (226, 173, 17),
+ (238, 196, 22), (230, 153, 25), (219, 151, 18), (219, 106, 48),
+ (240, 84, 43), (231, 77, 41), (222, 61, 53), (212, 82, 46),
+ (223, 103, 53), (235, 111, 75), (218, 134, 46), (231, 143, 79),
+ (171, 131, 96), (130, 98, 113), (71, 52, 54), (31, 27, 16),
+ (31, 35, 8), (69, 77, 18), (132, 117, 22), (159, 145, 57),
+ (229, 150, 84), (235, 123, 85), (224, 83, 91), (197, 60, 76),
+ (175, 30, 45), (145, 21, 55), (137, 40, 59), (141, 87, 27),
+ (157, 150, 43), (131, 233, 35), (170, 246, 36), (148, 245, 26),
+ (123, 228, 50), (103, 212, 85), (82, 202, 104), (103, 208, 113),
+ (163, 206, 88), (152, 177, 86), (123, 168, 73), (126, 136, 40)
+ ),
+
+// 243 Apophysis-040427-11FloralQult
+((88, 3, 68), (62, 75, 83), (59, 87, 68), (57, 100, 54),
+ (58, 114, 59), (60, 129, 64), (58, 120, 73), (57, 112, 83),
+ (116, 92, 116), (139, 105, 148), (162, 118, 181), (159, 147, 177),
+ (157, 176, 174), (162, 185, 170), (168, 194, 167), (147, 204, 154),
+ (127, 215, 141), (124, 201, 99), (133, 183, 124), (143, 166, 150),
+ (144, 147, 156), (145, 128, 162), (124, 133, 159), (103, 138, 157),
+ (58, 117, 113), (43, 83, 95), (29, 50, 77), (19, 36, 62),
+ (10, 22, 48), (5, 15, 48), (0, 8, 49), (1, 21, 71),
+ (21, 37, 71), (88, 84, 119), (129, 125, 143), (170, 166, 167),
+ (181, 172, 172), (193, 179, 178), (187, 169, 175), (181, 159, 172),
+ (151, 136, 131), (112, 83, 100), (73, 31, 69), (55, 22, 62),
+ (37, 14, 56), (20, 8, 54), (3, 3, 53), (4, 0, 51),
+ (2, 4, 53), (1, 5, 50), (0, 5, 46), (0, 6, 42),
+ (14, 3, 40), (28, 0, 38), (37, 0, 49), (46, 0, 61),
+ (23, 14, 77), (11, 10, 66), (0, 6, 56), (6, 16, 62),
+ (13, 26, 68), (16, 31, 73), (19, 36, 79), (77, 58, 88),
+ (94, 68, 93), (186, 147, 166), (200, 171, 165), (214, 195, 165),
+ (222, 207, 171), (231, 219, 177), (225, 235, 162), (188, 223, 159),
+ (180, 224, 173), (191, 229, 181), (202, 235, 190), (206, 217, 199),
+ (211, 200, 208), (209, 198, 193), (207, 196, 178), (211, 212, 180),
+ (207, 216, 151), (196, 184, 172), (169, 141, 165), (142, 98, 159),
+ (142, 71, 143), (143, 44, 127), (116, 6, 55), (116, 2, 51),
+ (112, 2, 51), (126, 33, 79), (141, 64, 108), (163, 86, 101),
+ (186, 108, 95), (177, 127, 104), (167, 137, 101), (166, 124, 108),
+ (125, 109, 75), (59, 48, 52), (46, 47, 35), (34, 47, 19),
+ (45, 64, 31), (56, 82, 43), (67, 138, 44), (103, 173, 57),
+ (126, 236, 87), (156, 227, 99), (186, 218, 111), (195, 219, 112),
+ (204, 220, 113), (197, 168, 126), (185, 147, 100), (170, 99, 77),
+ (140, 37, 66), (113, 2, 45), (109, 5, 42), (105, 8, 39),
+ (112, 26, 51), (128, 49, 45), (147, 67, 56), (177, 100, 72),
+ (183, 111, 87), (159, 76, 73), (135, 41, 59), (124, 22, 63),
+ (114, 4, 67), (106, 4, 43), (106, 12, 48), (81, 23, 45),
+ (82, 40, 52), (136, 173, 80), (143, 172, 86), (151, 172, 93),
+ (150, 137, 118), (168, 142, 117), (167, 128, 147), (153, 123, 157),
+ (134, 103, 101), (137, 61, 81), (141, 20, 61), (139, 26, 67),
+ (138, 33, 73), (181, 88, 80), (195, 114, 95), (225, 154, 126),
+ (245, 224, 131), (220, 212, 139), (215, 192, 140), (211, 172, 141),
+ (198, 157, 139), (164, 148, 112), (183, 131, 110), (200, 141, 147),
+ (205, 184, 155), (208, 185, 159), (211, 187, 163), (218, 193, 162),
+ (227, 198, 164), (230, 208, 167), (222, 203, 170), (214, 206, 170),
+ (204, 192, 176), (158, 169, 175), (146, 155, 168), (135, 142, 161),
+ (81, 159, 117), (82, 165, 111), (51, 109, 68), (59, 77, 53),
+ (47, 31, 18), (54, 16, 22), (62, 2, 27), (78, 0, 47),
+ (104, 1, 54), (96, 0, 46), (90, 0, 35), (54, 0, 18),
+ (44, 1, 18), (25, 2, 22), (7, 2, 43), (4, 8, 45),
+ (15, 15, 23), (31, 21, 30), (81, 19, 40), (77, 39, 26),
+ (103, 97, 61), (103, 139, 67), (104, 182, 73), (127, 220, 79),
+ (157, 246, 102), (193, 217, 103), (234, 231, 124), (220, 219, 136),
+ (202, 197, 129), (173, 161, 119), (137, 108, 90), (84, 84, 86),
+ (94, 109, 88), (128, 131, 150), (145, 132, 158), (165, 167, 164),
+ (155, 178, 168), (138, 200, 101), (129, 238, 97), (119, 240, 101),
+ (109, 222, 90), (86, 218, 96), (89, 201, 101), (79, 176, 73),
+ (93, 155, 92), (80, 73, 55), (65, 14, 71), (77, 5, 69),
+ (62, 16, 45), (50, 29, 48), (76, 59, 33), (64, 56, 45),
+ (45, 41, 56), (32, 47, 54), (11, 31, 38), (14, 37, 53),
+ (12, 32, 65), (29, 45, 68), (64, 53, 67), (87, 50, 102),
+ (123, 37, 82), (123, 14, 105), (82, 2, 91), (81, 5, 69),
+ (110, 0, 48), (120, 4, 49), (129, 33, 60), (152, 48, 71),
+ (175, 101, 102), (184, 154, 128), (198, 166, 128), (176, 173, 132),
+ (135, 172, 105), (112, 149, 106), (92, 77, 72), (89, 45, 72),
+ (99, 35, 59), (121, 42, 48), (142, 41, 59), (181, 95, 82),
+ (194, 121, 106), (196, 140, 149), (201, 164, 171), (193, 152, 166),
+ (173, 125, 177), (156, 130, 157), (120, 124, 151), (89, 154, 132),
+ (90, 207, 137), (106, 219, 139), (174, 225, 156), (196, 213, 168)
+ ),
+
+// 244 Apophysis-040427-20FlwrFrnsBFly
+((238, 199, 80), (204, 175, 73), (201, 168, 80), (199, 161, 88),
+ (167, 149, 79), (136, 137, 71), (120, 120, 62), (104, 104, 54),
+ (105, 89, 29), (124, 96, 26), (144, 103, 23), (138, 101, 21),
+ (133, 100, 19), (115, 98, 30), (98, 97, 41), (72, 91, 40),
+ (47, 86, 39), (53, 64, 50), (36, 66, 53), (20, 68, 56),
+ (27, 85, 49), (35, 103, 42), (17, 132, 40), (0, 161, 38),
+ (26, 64, 13), (43, 55, 6), (61, 46, 0), (76, 50, 0),
+ (91, 55, 0), (95, 48, 7), (99, 42, 15), (121, 50, 6),
+ (122, 74, 10), (89, 67, 30), (81, 62, 17), (73, 57, 5),
+ (81, 34, 2), (90, 11, 0), (79, 9, 11), (69, 7, 22),
+ (111, 46, 68), (144, 40, 74), (177, 35, 81), (165, 30, 80),
+ (154, 25, 79), (135, 32, 64), (116, 40, 50), (115, 80, 22),
+ (133, 92, 26), (161, 120, 41), (172, 129, 48), (183, 138, 55),
+ (181, 136, 62), (179, 135, 70), (179, 132, 72), (179, 130, 74),
+ (167, 148, 80), (164, 144, 91), (162, 140, 103), (138, 156, 144),
+ (114, 172, 186), (86, 211, 214), (59, 250, 243), (93, 183, 194),
+ (106, 152, 168), (136, 192, 117), (166, 182, 103), (197, 172, 90),
+ (199, 159, 87), (201, 147, 85), (177, 139, 76), (156, 133, 81),
+ (101, 101, 101), (91, 106, 93), (82, 112, 86), (89, 123, 90),
+ (97, 135, 94), (123, 133, 72), (149, 132, 50), (150, 122, 25),
+ (154, 118, 0), (151, 117, 17), (160, 133, 26), (169, 149, 36),
+ (178, 159, 43), (188, 169, 51), (199, 174, 71), (208, 174, 85),
+ (251, 235, 100), (251, 241, 96), (252, 247, 93), (253, 245, 88),
+ (255, 243, 83), (255, 236, 70), (250, 234, 61), (255, 205, 69),
+ (222, 158, 48), (155, 62, 73), (130, 52, 70), (106, 42, 68),
+ (101, 34, 69), (97, 26, 70), (72, 18, 41), (77, 20, 29),
+ (75, 3, 43), (48, 13, 40), (22, 24, 37), (16, 24, 40),
+ (10, 25, 44), (16, 38, 17), (39, 46, 38), (53, 50, 31),
+ (61, 57, 32), (86, 50, 52), (83, 49, 58), (81, 48, 65),
+ (102, 33, 87), (86, 29, 124), (51, 32, 122), (20, 47, 102),
+ (33, 73, 98), (49, 88, 133), (66, 104, 169), (77, 127, 169),
+ (89, 150, 169), (140, 196, 219), (174, 217, 234), (197, 216, 150),
+ (223, 200, 107), (255, 255, 216), (255, 237, 235), (255, 220, 255),
+ (255, 136, 250), (189, 160, 152), (182, 114, 129), (172, 70, 120),
+ (120, 38, 74), (118, 24, 73), (116, 10, 72), (121, 11, 67),
+ (126, 12, 63), (126, 27, 73), (162, 60, 84), (158, 78, 105),
+ (125, 67, 92), (53, 97, 74), (52, 98, 78), (52, 99, 83),
+ (27, 92, 72), (3, 68, 48), (21, 46, 42), (44, 49, 29),
+ (99, 82, 12), (122, 97, 6), (146, 113, 0), (189, 133, 12),
+ (195, 159, 45), (196, 197, 57), (182, 223, 33), (190, 161, 43),
+ (183, 144, 23), (172, 122, 25), (164, 110, 25), (157, 99, 26),
+ (142, 85, 16), (135, 88, 0), (122, 86, 2), (133, 101, 0),
+ (146, 88, 4), (143, 84, 6), (140, 80, 8), (130, 100, 36),
+ (126, 115, 83), (131, 133, 111), (128, 177, 130), (125, 187, 138),
+ (132, 255, 180), (164, 214, 143), (185, 196, 136), (196, 199, 118),
+ (182, 189, 83), (167, 184, 72), (167, 124, 55), (147, 107, 46),
+ (69, 127, 77), (65, 127, 78), (62, 128, 80), (60, 126, 64),
+ (40, 75, 51), (34, 43, 16), (22, 21, 1), (18, 8, 0),
+ (0, 18, 0), (2, 3, 7), (3, 26, 44), (0, 15, 53),
+ (14, 10, 45), (18, 12, 40), (22, 27, 5), (47, 44, 13),
+ (70, 79, 14), (83, 103, 14), (89, 104, 49), (73, 93, 68),
+ (65, 88, 46), (79, 74, 32), (97, 75, 0), (120, 84, 0),
+ (134, 111, 0), (147, 138, 33), (157, 144, 50), (155, 159, 48),
+ (177, 154, 58), (183, 144, 41), (173, 127, 29), (162, 127, 33),
+ (164, 112, 36), (164, 119, 28), (151, 118, 23), (158, 115, 2),
+ (163, 116, 0), (178, 151, 12), (184, 176, 67), (178, 154, 126),
+ (127, 152, 252), (113, 128, 247), (44, 41, 158), (14, 45, 128),
+ (6, 31, 95), (21, 55, 65), (39, 38, 54), (31, 27, 44),
+ (51, 38, 56), (107, 37, 73), (165, 73, 114), (253, 18, 207),
+ (192, 51, 117), (182, 84, 83), (177, 110, 104), (113, 119, 85),
+ (83, 107, 83), (79, 103, 79), (71, 102, 68), (49, 72, 43),
+ (39, 65, 26), (38, 55, 23), (2, 35, 6), (12, 24, 0),
+ (40, 55, 0), (43, 55, 0), (57, 41, 18), (68, 28, 26),
+ (74, 31, 38), (72, 61, 65), (96, 103, 69), (105, 139, 104)
+ ),
+
+// 245 Apophysis-040427-24FracrameE
+((255, 255, 253), (254, 255, 253), (253, 255, 253), (253, 255, 254),
+ (249, 255, 253), (245, 255, 252), (246, 252, 252), (248, 249, 253),
+ (213, 215, 212), (174, 175, 175), (135, 136, 138), (105, 104, 103),
+ (76, 73, 68), (59, 51, 43), (43, 29, 18), (38, 28, 19),
+ (34, 27, 21), (44, 22, 9), (34, 20, 11), (24, 19, 13),
+ (19, 15, 16), (14, 11, 20), (12, 9, 20), (10, 8, 21),
+ (6, 13, 21), (6, 14, 21), (6, 15, 22), (3, 12, 14),
+ (0, 9, 6), (2, 5, 4), (5, 1, 2), (13, 6, 0),
+ (25, 15, 5), (21, 21, 21), (20, 19, 26), (20, 18, 32),
+ (19, 29, 46), (18, 40, 61), (22, 43, 62), (27, 46, 63),
+ (39, 44, 50), (45, 49, 55), (51, 54, 61), (62, 65, 78),
+ (74, 77, 96), (82, 86, 98), (91, 96, 100), (116, 112, 111),
+ (128, 120, 109), (126, 128, 141), (145, 148, 156), (165, 169, 172),
+ (184, 193, 198), (204, 217, 225), (210, 225, 234), (216, 233, 243),
+ (235, 246, 252), (243, 248, 253), (252, 250, 255), (253, 252, 255),
+ (254, 255, 255), (254, 255, 255), (254, 255, 255), (255, 254, 255),
+ (255, 254, 251), (252, 250, 238), (214, 217, 212), (176, 184, 187),
+ (153, 159, 162), (130, 135, 138), (95, 103, 106), (62, 72, 73),
+ (36, 41, 47), (33, 33, 32), (30, 26, 17), (21, 16, 8),
+ (13, 6, 0), (12, 3, 0), (12, 1, 0), (7, 10, 15),
+ (4, 22, 26), (22, 41, 74), (35, 47, 70), (48, 54, 66),
+ (47, 55, 64), (47, 56, 63), (50, 60, 70), (55, 59, 68),
+ (65, 62, 55), (74, 73, 68), (84, 84, 82), (94, 94, 91),
+ (105, 104, 100), (140, 143, 158), (124, 124, 126), (219, 211, 198),
+ (182, 180, 181), (126, 134, 136), (104, 114, 118), (83, 94, 100),
+ (80, 87, 93), (77, 80, 87), (86, 81, 75), (82, 87, 91),
+ (79, 86, 96), (85, 93, 99), (91, 101, 103), (91, 103, 109),
+ (91, 105, 116), (104, 111, 129), (124, 131, 141), (144, 167, 183),
+ (156, 182, 209), (174, 179, 182), (168, 167, 164), (163, 156, 146),
+ (150, 129, 110), (125, 104, 85), (103, 78, 58), (75, 53, 39),
+ (62, 53, 36), (54, 48, 35), (47, 44, 35), (43, 42, 40),
+ (40, 41, 45), (40, 37, 54), (42, 46, 55), (43, 55, 69),
+ (43, 74, 95), (74, 79, 85), (81, 86, 94), (89, 93, 104),
+ (84, 98, 109), (97, 98, 103), (110, 106, 94), (114, 105, 96),
+ (123, 115, 104), (118, 120, 120), (113, 125, 137), (119, 128, 143),
+ (125, 132, 150), (177, 184, 192), (224, 219, 213), (244, 241, 222),
+ (255, 240, 228), (195, 183, 169), (177, 159, 152), (159, 135, 135),
+ (117, 108, 101), (86, 79, 73), (63, 58, 54), (60, 47, 31),
+ (57, 35, 22), (53, 33, 19), (50, 31, 16), (45, 36, 27),
+ (50, 45, 39), (48, 44, 45), (55, 60, 66), (60, 77, 97),
+ (61, 88, 115), (95, 119, 147), (107, 131, 162), (120, 143, 177),
+ (163, 168, 187), (172, 185, 191), (168, 178, 188), (158, 162, 171),
+ (136, 129, 121), (141, 133, 124), (146, 137, 128), (159, 167, 169),
+ (175, 179, 182), (203, 180, 166), (201, 177, 165), (183, 176, 157),
+ (168, 150, 130), (142, 128, 117), (139, 126, 107), (109, 102, 92),
+ (80, 77, 70), (60, 59, 54), (36, 41, 44), (16, 25, 34),
+ (9, 12, 29), (14, 16, 28), (20, 20, 28), (35, 40, 46),
+ (41, 43, 42), (55, 54, 52), (77, 70, 64), (100, 77, 59),
+ (102, 80, 57), (99, 85, 74), (107, 90, 74), (99, 87, 75),
+ (86, 83, 68), (84, 70, 59), (83, 67, 54), (77, 70, 64),
+ (76, 67, 58), (76, 75, 70), (71, 72, 77), (84, 89, 95),
+ (89, 98, 107), (91, 100, 107), (108, 103, 97), (109, 99, 89),
+ (97, 84, 67), (78, 67, 49), (62, 53, 46), (53, 48, 44),
+ (56, 52, 53), (67, 60, 54), (74, 61, 52), (57, 66, 63),
+ (48, 57, 66), (41, 54, 63), (25, 45, 69), (29, 36, 52),
+ (25, 18, 34), (19, 11, 26), (11, 0, 6), (8, 0, 0),
+ (3, 0, 0), (6, 1, 5), (0, 4, 10), (5, 4, 12),
+ (2, 4, 16), (4, 8, 19), (1, 7, 23), (2, 7, 26),
+ (6, 11, 31), (10, 17, 33), (19, 38, 55), (49, 62, 70),
+ (83, 99, 114), (130, 139, 146), (203, 209, 207), (226, 234, 237),
+ (226, 233, 249), (227, 231, 232), (219, 211, 198), (214, 191, 160),
+ (176, 162, 151), (182, 156, 139), (217, 178, 145), (220, 198, 184),
+ (247, 230, 214), (255, 253, 225), (255, 251, 239), (253, 248, 242),
+ (251, 254, 247), (255, 254, 251), (255, 255, 253), (255, 255, 253)
+ ),
+
+// 246 Apophysis-040427-24FNouveau
+((157, 97, 97), (100, 75, 115), (135, 65, 69), (170, 55, 24),
+ (173, 49, 12), (177, 44, 1), (181, 47, 4), (186, 50, 8),
+ (164, 97, 29), (130, 113, 67), (97, 129, 106), (104, 122, 133),
+ (112, 115, 160), (97, 93, 129), (82, 72, 99), (83, 50, 81),
+ (85, 28, 63), (81, 22, 50), (94, 48, 30), (108, 74, 11),
+ (127, 81, 13), (147, 89, 16), (159, 104, 17), (171, 119, 18),
+ (171, 158, 28), (184, 161, 15), (198, 165, 2), (226, 188, 16),
+ (255, 211, 30), (255, 210, 41), (255, 209, 52), (240, 202, 69),
+ (255, 183, 94), (231, 203, 226), (231, 167, 212), (232, 131, 199),
+ (242, 130, 149), (253, 130, 99), (248, 138, 72), (244, 146, 45),
+ (245, 162, 30), (222, 163, 37), (200, 164, 44), (174, 127, 33),
+ (149, 90, 22), (130, 84, 16), (111, 78, 11), (111, 77, 6),
+ (105, 69, 9), (131, 78, 60), (124, 97, 109), (118, 117, 159),
+ (118, 116, 162), (118, 116, 165), (118, 115, 161), (118, 115, 158),
+ (161, 44, 60), (193, 37, 62), (226, 31, 65), (197, 45, 59),
+ (168, 59, 54), (163, 74, 60), (158, 90, 67), (131, 94, 50),
+ (161, 97, 69), (200, 129, 87), (203, 98, 57), (207, 68, 27),
+ (209, 82, 34), (211, 96, 42), (218, 123, 75), (239, 123, 84),
+ (247, 87, 95), (212, 113, 104), (177, 140, 114), (147, 128, 139),
+ (118, 116, 165), (118, 116, 165), (118, 116, 165), (118, 116, 165),
+ (118, 116, 165), (118, 116, 165), (149, 130, 158), (181, 144, 152),
+ (189, 148, 135), (197, 153, 118), (215, 151, 126), (209, 162, 118),
+ (195, 179, 68), (177, 163, 53), (159, 147, 39), (153, 129, 33),
+ (147, 111, 27), (150, 94, 20), (163, 86, 0), (174, 45, 3),
+ (176, 45, 1), (178, 100, 26), (163, 106, 56), (149, 113, 87),
+ (144, 115, 115), (140, 117, 143), (119, 116, 163), (118, 116, 165),
+ (123, 113, 166), (149, 130, 177), (176, 148, 189), (196, 166, 207),
+ (216, 185, 226), (194, 186, 233), (185, 212, 233), (154, 197, 213),
+ (133, 134, 201), (118, 116, 165), (118, 116, 165), (118, 116, 165),
+ (118, 116, 165), (118, 116, 165), (118, 116, 165), (118, 116, 165),
+ (118, 116, 165), (131, 114, 151), (145, 113, 137), (166, 115, 116),
+ (188, 117, 95), (192, 128, 100), (208, 144, 116), (212, 148, 139),
+ (149, 122, 141), (131, 126, 166), (170, 143, 156), (210, 161, 147),
+ (251, 174, 118), (255, 160, 103), (237, 190, 72), (231, 205, 58),
+ (173, 133, 11), (141, 100, 5), (110, 68, 0), (93, 59, 5),
+ (76, 51, 10), (73, 53, 3), (72, 60, 10), (76, 66, 17),
+ (114, 55, 23), (185, 19, 21), (195, 19, 31), (206, 20, 41),
+ (174, 45, 14), (172, 94, 32), (179, 132, 40), (183, 145, 74),
+ (200, 136, 100), (174, 129, 109), (148, 123, 118), (111, 105, 153),
+ (84, 83, 114), (59, 94, 62), (68, 51, 41), (53, 7, 18),
+ (48, 32, 6), (84, 40, 11), (104, 56, 40), (124, 73, 69),
+ (123, 50, 70), (98, 14, 48), (64, 1, 71), (41, 0, 68),
+ (30, 0, 28), (28, 0, 19), (27, 0, 11), (19, 0, 36),
+ (17, 8, 51), (24, 0, 36), (33, 21, 21), (30, 32, 29),
+ (28, 34, 32), (14, 1, 73), (0, 43, 95), (83, 84, 128),
+ (112, 105, 159), (113, 112, 170), (118, 116, 165), (118, 116, 165),
+ (118, 116, 165), (122, 125, 173), (127, 135, 182), (190, 173, 130),
+ (210, 217, 139), (203, 194, 165), (222, 159, 170), (182, 151, 149),
+ (119, 116, 163), (118, 116, 165), (118, 116, 165), (118, 116, 165),
+ (118, 116, 165), (118, 116, 165), (118, 116, 165), (118, 116, 165),
+ (118, 116, 165), (131, 109, 147), (161, 112, 107), (167, 146, 63),
+ (193, 138, 48), (191, 114, 8), (171, 91, 2), (188, 100, 11),
+ (199, 111, 22), (210, 130, 33), (187, 120, 31), (184, 111, 42),
+ (175, 113, 40), (175, 106, 37), (156, 107, 40), (156, 96, 42),
+ (127, 105, 82), (116, 113, 156), (118, 116, 165), (118, 116, 165),
+ (118, 116, 165), (118, 116, 165), (118, 116, 165), (140, 107, 136),
+ (148, 101, 85), (148, 102, 40), (156, 112, 23), (184, 130, 0),
+ (197, 106, 0), (170, 96, 1), (134, 108, 34), (62, 108, 69),
+ (84, 85, 115), (89, 83, 129), (103, 93, 145), (109, 107, 156),
+ (92, 89, 120), (82, 67, 106), (47, 10, 64), (30, 6, 68),
+ (8, 0, 58), (8, 4, 41), (15, 34, 14), (10, 38, 15),
+ (11, 40, 9), (67, 54, 1), (74, 59, 2), (102, 84, 18),
+ (103, 84, 16), (114, 97, 7), (126, 101, 0), (145, 130, 15),
+ (159, 134, 15), (175, 111, 21), (181, 108, 57), (138, 106, 145)
+ ),
+
+// 247 Apophysis-040427-24GuardFaeriR
+((224, 121, 86), (96, 113, 68), (48, 103, 70), (0, 94, 73),
+ (43, 131, 112), (87, 168, 151), (86, 147, 129), (85, 127, 107),
+ (188, 117, 11), (199, 120, 7), (210, 124, 3), (167, 83, 49),
+ (125, 42, 96), (112, 36, 85), (99, 30, 75), (92, 32, 53),
+ (85, 34, 31), (9, 29, 17), (5, 15, 9), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (3, 3, 0),
+ (5, 5, 0), (9, 10, 5), (14, 15, 10), (62, 54, 17),
+ (101, 89, 63), (122, 143, 100), (155, 150, 98), (188, 158, 96),
+ (211, 177, 58), (234, 197, 20), (228, 184, 10), (223, 171, 0),
+ (103, 43, 32), (60, 25, 21), (17, 8, 11), (10, 4, 6),
+ (4, 0, 1), (2, 0, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (0, 4, 8), (25, 12, 32), (51, 21, 57),
+ (76, 25, 67), (102, 30, 78), (100, 25, 85), (98, 21, 93),
+ (89, 42, 26), (111, 58, 15), (134, 75, 5), (134, 74, 8),
+ (134, 74, 12), (109, 55, 18), (84, 36, 24), (37, 8, 2),
+ (11, 0, 7), (0, 34, 68), (27, 36, 72), (55, 39, 76),
+ (74, 37, 55), (93, 35, 34), (103, 28, 22), (104, 24, 0),
+ (31, 3, 0), (16, 2, 0), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (0, 3, 4),
+ (6, 4, 17), (18, 0, 96), (15, 1, 57), (13, 2, 19),
+ (7, 2, 11), (2, 2, 4), (1, 1, 1), (1, 1, 1),
+ (0, 2, 2), (6, 13, 18), (12, 25, 34), (32, 25, 46),
+ (52, 25, 58), (85, 55, 81), (75, 71, 85), (64, 78, 53),
+ (87, 39, 35), (90, 41, 26), (110, 48, 69), (131, 56, 112),
+ (144, 59, 137), (158, 63, 163), (200, 70, 178), (205, 84, 190),
+ (138, 51, 130), (117, 41, 107), (96, 32, 84), (93, 29, 91),
+ (90, 27, 98), (57, 45, 93), (9, 40, 120), (17, 12, 141),
+ (44, 44, 144), (68, 47, 104), (72, 34, 99), (77, 21, 94),
+ (52, 14, 75), (35, 1, 75), (20, 0, 19), (5, 3, 4),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (4, 0, 21), (9, 0, 45), (15, 0, 69),
+ (12, 10, 107), (102, 28, 115), (127, 42, 143), (150, 58, 169),
+ (183, 25, 171), (153, 24, 157), (124, 23, 143), (122, 24, 130),
+ (121, 26, 118), (111, 26, 111), (137, 28, 119), (152, 49, 130),
+ (151, 68, 146), (122, 108, 47), (109, 99, 50), (96, 91, 53),
+ (77, 59, 21), (27, 19, 0), (7, 6, 1), (2, 3, 0),
+ (4, 5, 0), (2, 16, 8), (0, 27, 17), (0, 63, 13),
+ (0, 80, 3), (15, 77, 14), (88, 41, 25), (173, 42, 0),
+ (231, 49, 1), (156, 100, 53), (154, 111, 73), (152, 122, 94),
+ (167, 110, 153), (182, 133, 119), (236, 116, 125), (216, 137, 96),
+ (154, 70, 46), (147, 57, 27), (141, 44, 9), (83, 38, 19),
+ (15, 6, 0), (6, 2, 3), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (2, 3, 0),
+ (4, 86, 2), (12, 103, 14), (21, 120, 27), (50, 85, 29),
+ (96, 71, 17), (146, 113, 20), (170, 102, 3), (191, 94, 0),
+ (197, 117, 2), (194, 119, 2), (196, 108, 0), (175, 75, 0),
+ (166, 49, 0), (120, 36, 0), (83, 38, 19), (15, 23, 26),
+ (6, 21, 28), (29, 35, 67), (63, 44, 76), (108, 61, 105),
+ (119, 65, 117), (131, 100, 131), (137, 118, 148), (152, 115, 148),
+ (143, 139, 166), (125, 131, 147), (117, 102, 131), (84, 55, 103),
+ (6, 62, 85), (3, 78, 81), (6, 69, 60), (0, 84, 19),
+ (6, 78, 15), (33, 43, 18), (83, 42, 24), (92, 36, 37),
+ (145, 78, 85), (145, 90, 119), (168, 155, 199), (195, 184, 178),
+ (200, 213, 144), (175, 188, 132), (119, 117, 102), (68, 65, 84),
+ (13, 61, 73), (7, 42, 22), (14, 5, 6), (35, 4, 1),
+ (94, 21, 2), (116, 32, 0), (139, 47, 0), (131, 60, 30),
+ (139, 70, 63), (136, 46, 108), (171, 41, 137), (191, 40, 145),
+ (228, 73, 201), (223, 159, 183), (209, 199, 200), (198, 193, 213),
+ (165, 200, 222), (186, 210, 176), (200, 202, 178), (212, 202, 200),
+ (241, 119, 238), (243, 100, 214), (202, 97, 225), (180, 162, 204),
+ (136, 136, 134), (127, 149, 113), (143, 170, 129), (185, 154, 100)
+ ),
+
+// 248 Apophysis-040427-24GoldenRays
+((0, 0, 0), (0, 0, 0), (1, 0, 0), (3, 0, 0),
+ (36, 30, 25), (70, 60, 50), (86, 72, 61), (102, 84, 72),
+ (139, 121, 85), (151, 133, 105), (164, 146, 126), (173, 154, 132),
+ (183, 163, 138), (177, 158, 142), (171, 154, 146), (172, 151, 138),
+ (174, 148, 131), (167, 146, 119), (146, 129, 119), (126, 113, 120),
+ (120, 114, 120), (115, 116, 120), (112, 111, 122), (110, 107, 124),
+ (99, 102, 121), (88, 96, 119), (77, 91, 118), (67, 72, 87),
+ (58, 53, 57), (36, 33, 35), (14, 14, 14), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (22, 17, 13), (45, 35, 26), (57, 46, 34),
+ (69, 57, 43), (68, 54, 39), (67, 51, 35), (47, 28, 21),
+ (1, 0, 0), (0, 0, 0), (28, 23, 24), (57, 47, 48),
+ (67, 66, 78), (78, 86, 109), (80, 94, 119), (82, 102, 129),
+ (92, 112, 147), (91, 113, 145), (91, 115, 143), (78, 86, 104),
+ (65, 58, 66), (65, 49, 51), (65, 41, 37), (1, 1, 1),
+ (0, 0, 0), (0, 1, 0), (40, 34, 28), (81, 67, 56),
+ (99, 84, 72), (117, 101, 88), (165, 147, 133), (207, 190, 170),
+ (249, 248, 246), (251, 251, 250), (254, 254, 254), (252, 248, 243),
+ (251, 242, 233), (237, 226, 218), (224, 211, 203), (223, 200, 168),
+ (204, 177, 166), (181, 164, 144), (187, 175, 158), (194, 186, 173),
+ (202, 186, 169), (211, 186, 166), (244, 231, 212), (253, 253, 251),
+ (254, 254, 254), (254, 254, 254), (254, 254, 254), (251, 251, 251),
+ (249, 249, 249), (219, 203, 187), (172, 161, 143), (141, 122, 108),
+ (91, 82, 73), (1, 1, 1), (0, 0, 0), (0, 0, 0),
+ (3, 3, 3), (7, 7, 7), (58, 46, 46), (61, 65, 77),
+ (82, 83, 103), (70, 63, 73), (58, 44, 44), (31, 24, 24),
+ (5, 5, 5), (0, 0, 0), (0, 0, 0), (1, 1, 1),
+ (51, 39, 27), (98, 81, 65), (107, 87, 67), (116, 94, 70),
+ (137, 106, 77), (139, 112, 83), (132, 116, 82), (130, 102, 78),
+ (87, 65, 51), (44, 32, 25), (1, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (35, 16, 22), (65, 47, 43),
+ (89, 77, 65), (143, 112, 91), (147, 118, 94), (151, 124, 97),
+ (164, 133, 102), (171, 144, 114), (171, 145, 120), (145, 133, 121),
+ (116, 112, 137), (116, 116, 142), (116, 120, 147), (143, 140, 157),
+ (171, 160, 168), (235, 221, 212), (251, 250, 246), (255, 254, 252),
+ (246, 240, 224), (166, 156, 164), (158, 147, 155), (150, 139, 147),
+ (152, 138, 138), (150, 135, 138), (143, 127, 128), (144, 130, 121),
+ (149, 126, 94), (146, 123, 91), (144, 121, 89), (132, 105, 78),
+ (112, 90, 77), (105, 89, 74), (92, 82, 81), (80, 78, 91),
+ (77, 88, 110), (104, 92, 94), (108, 97, 91), (112, 103, 88),
+ (109, 107, 108), (142, 124, 104), (141, 121, 96), (120, 101, 87),
+ (92, 81, 75), (83, 69, 66), (74, 58, 58), (66, 47, 41),
+ (36, 20, 5), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 0, 0),
+ (48, 32, 19), (70, 58, 44), (93, 85, 64), (112, 99, 83),
+ (143, 121, 98), (155, 123, 110), (144, 124, 100), (147, 120, 90),
+ (146, 119, 98), (137, 120, 100), (123, 123, 125), (131, 131, 131),
+ (158, 138, 137), (167, 153, 140), (181, 166, 147), (198, 169, 135),
+ (255, 255, 6), (209, 185, 151), (215, 178, 151), (188, 161, 132),
+ (183, 162, 131), (180, 160, 135), (160, 138, 115), (111, 94, 87),
+ (74, 65, 56), (55, 38, 28), (3, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (5, 4, 9), (50, 48, 61), (86, 100, 126)
+ ),
+
+// 249 Apophysis-040427-24HunterSunset
+((255, 217, 0), (220, 148, 38), (141, 118, 40), (62, 88, 43),
+ (35, 71, 25), (8, 54, 7), (10, 50, 4), (13, 46, 1),
+ (54, 65, 0), (85, 85, 26), (117, 106, 52), (180, 120, 40),
+ (243, 134, 29), (190, 147, 23), (137, 160, 17), (110, 146, 27),
+ (83, 133, 38), (44, 91, 0), (37, 89, 3), (31, 88, 7),
+ (24, 83, 3), (18, 78, 0), (20, 82, 6), (23, 87, 13),
+ (27, 133, 32), (23, 132, 40), (19, 131, 49), (19, 130, 53),
+ (20, 130, 57), (22, 125, 66), (25, 120, 76), (43, 116, 96),
+ (29, 104, 107), (37, 87, 112), (56, 93, 82), (76, 99, 53),
+ (114, 141, 46), (152, 184, 39), (180, 207, 36), (208, 230, 33),
+ (253, 240, 3), (254, 237, 3), (255, 234, 3), (255, 231, 2),
+ (255, 229, 2), (255, 230, 1), (255, 232, 0), (254, 234, 0),
+ (255, 240, 0), (255, 240, 1), (253, 240, 1), (252, 241, 1),
+ (252, 240, 0), (252, 239, 0), (252, 237, 0), (253, 236, 0),
+ (253, 223, 3), (254, 213, 29), (255, 203, 55), (201, 170, 81),
+ (148, 137, 107), (139, 126, 94), (130, 115, 82), (78, 110, 47),
+ (45, 94, 3), (27, 63, 0), (20, 51, 0), (13, 39, 0),
+ (26, 39, 2), (39, 39, 5), (81, 32, 0), (100, 30, 0),
+ (108, 35, 3), (113, 41, 18), (119, 47, 33), (183, 88, 20),
+ (248, 130, 7), (251, 141, 7), (254, 152, 7), (253, 159, 1),
+ (236, 164, 2), (231, 150, 0), (242, 135, 1), (253, 120, 2),
+ (254, 117, 7), (255, 115, 12), (220, 112, 24), (98, 97, 30),
+ (90, 140, 67), (112, 155, 93), (134, 171, 120), (129, 164, 108),
+ (124, 158, 97), (82, 136, 50), (50, 122, 22), (34, 116, 6),
+ (11, 91, 0), (0, 52, 4), (0, 68, 5), (0, 84, 6),
+ (0, 86, 3), (0, 88, 1), (1, 98, 1), (31, 105, 8),
+ (135, 115, 0), (187, 152, 0), (239, 190, 0), (246, 204, 1),
+ (254, 219, 3), (252, 229, 3), (247, 242, 26), (239, 233, 49),
+ (168, 165, 88), (24, 128, 65), (21, 127, 53), (19, 127, 42),
+ (31, 123, 36), (18, 106, 28), (2, 88, 13), (2, 81, 2),
+ (1, 69, 0), (2, 72, 1), (3, 76, 3), (4, 80, 3),
+ (5, 84, 3), (20, 93, 14), (45, 128, 36), (124, 179, 85),
+ (192, 215, 111), (249, 249, 63), (252, 248, 40), (255, 248, 17),
+ (253, 244, 3), (249, 243, 0), (255, 246, 0), (254, 249, 0),
+ (255, 248, 0), (255, 246, 0), (255, 244, 0), (254, 246, 0),
+ (254, 249, 0), (254, 249, 0), (254, 249, 0), (254, 249, 0),
+ (254, 249, 0), (254, 249, 0), (254, 244, 0), (255, 240, 0),
+ (254, 227, 0), (245, 204, 0), (236, 178, 19), (175, 163, 43),
+ (70, 95, 12), (60, 87, 6), (51, 80, 0), (53, 69, 0),
+ (58, 77, 0), (70, 84, 7), (83, 102, 36), (126, 132, 98),
+ (158, 188, 98), (233, 204, 148), (192, 182, 172), (152, 160, 196),
+ (110, 135, 155), (61, 107, 141), (42, 104, 81), (28, 104, 32),
+ (6, 70, 10), (8, 66, 9), (10, 63, 9), (13, 85, 21),
+ (40, 92, 53), (39, 91, 78), (77, 109, 98), (71, 96, 75),
+ (50, 81, 49), (42, 84, 8), (44, 74, 0), (51, 48, 0),
+ (75, 47, 0), (88, 79, 12), (81, 101, 4), (132, 149, 0),
+ (243, 198, 7), (247, 210, 4), (252, 222, 2), (255, 228, 0),
+ (255, 235, 1), (254, 239, 0), (253, 242, 0), (255, 240, 1),
+ (255, 234, 1), (255, 228, 0), (255, 223, 1), (255, 214, 0),
+ (250, 189, 0), (253, 171, 1), (255, 169, 8), (245, 190, 2),
+ (255, 221, 2), (254, 225, 1), (254, 227, 0), (254, 225, 1),
+ (255, 221, 0), (237, 181, 0), (149, 165, 32), (84, 146, 47),
+ (78, 129, 52), (74, 118, 43), (74, 119, 36), (81, 112, 19),
+ (82, 86, 2), (89, 78, 0), (114, 76, 1), (221, 123, 26),
+ (245, 132, 12), (129, 72, 3), (91, 72, 6), (69, 78, 0),
+ (32, 75, 4), (28, 85, 6), (19, 77, 3), (8, 44, 0),
+ (13, 22, 0), (20, 33, 5), (32, 34, 0), (41, 52, 10),
+ (47, 80, 35), (83, 131, 71), (95, 122, 89), (88, 131, 138),
+ (96, 106, 141), (51, 100, 114), (33, 96, 101), (34, 87, 61),
+ (30, 96, 25), (22, 84, 11), (48, 72, 0), (63, 75, 9),
+ (88, 82, 50), (99, 100, 58), (118, 98, 87), (105, 91, 78),
+ (73, 96, 78), (37, 119, 35), (8, 107, 16), (6, 102, 12),
+ (0, 103, 1), (19, 104, 0), (46, 114, 15), (85, 127, 19),
+ (163, 168, 4), (240, 201, 2), (253, 249, 0), (253, 224, 0)
+ ),
+
+// 250 Apophysis-040427-25IntoWeave
+((0, 32, 174), (0, 0, 30), (5, 1, 20), (10, 3, 10),
+ (52, 42, 20), (94, 82, 30), (100, 93, 64), (107, 104, 99),
+ (172, 158, 85), (183, 157, 48), (194, 156, 11), (191, 190, 74),
+ (188, 224, 137), (187, 226, 160), (186, 229, 183), (181, 227, 174),
+ (177, 225, 165), (238, 228, 97), (246, 216, 50), (255, 205, 4),
+ (253, 169, 3), (251, 134, 2), (216, 109, 1), (182, 85, 0),
+ (185, 128, 0), (206, 146, 0), (227, 164, 1), (240, 192, 0),
+ (253, 220, 0), (249, 224, 0), (246, 228, 0), (253, 226, 0),
+ (255, 215, 1), (246, 171, 28), (239, 165, 95), (232, 160, 163),
+ (211, 191, 155), (191, 223, 148), (201, 227, 142), (212, 232, 137),
+ (254, 219, 0), (219, 221, 49), (184, 224, 99), (174, 224, 130),
+ (165, 225, 161), (171, 224, 174), (178, 224, 187), (181, 223, 211),
+ (197, 228, 210), (198, 235, 191), (181, 228, 186), (165, 222, 181),
+ (145, 204, 193), (126, 187, 205), (116, 157, 188), (107, 128, 171),
+ (17, 31, 94), (10, 15, 53), (4, 0, 12), (3, 0, 8),
+ (3, 0, 4), (3, 0, 3), (3, 0, 2), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (6, 0, 9),
+ (55, 55, 107), (96, 101, 132), (138, 148, 158), (130, 128, 143),
+ (122, 109, 129), (99, 98, 104), (76, 87, 79), (82, 42, 50),
+ (18, 4, 0), (6, 0, 7), (3, 0, 4), (1, 1, 1),
+ (0, 0, 1), (0, 0, 2), (1, 1, 9), (0, 0, 22),
+ (5, 48, 142), (23, 73, 178), (41, 98, 214), (39, 101, 226),
+ (37, 105, 238), (48, 119, 223), (23, 158, 216), (57, 154, 251),
+ (98, 176, 225), (119, 180, 209), (68, 105, 155), (18, 30, 102),
+ (10, 18, 78), (3, 7, 55), (1, 0, 10), (1, 0, 5),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (0, 1, 0), (0, 2, 0), (0, 2, 0),
+ (0, 1, 0), (0, 0, 0), (0, 0, 0), (1, 1, 0),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (0, 2, 8),
+ (0, 8, 9), (72, 84, 98), (91, 99, 128), (110, 114, 159),
+ (141, 159, 205), (133, 191, 202), (129, 192, 201), (139, 207, 226),
+ (129, 195, 230), (133, 198, 220), (138, 202, 211), (136, 199, 203),
+ (134, 196, 195), (160, 203, 186), (156, 118, 159), (116, 99, 143),
+ (73, 75, 116), (3, 1, 14), (1, 2, 10), (0, 3, 6),
+ (0, 3, 4), (0, 2, 7), (0, 0, 7), (0, 1, 15),
+ (3, 49, 127), (13, 53, 154), (24, 58, 182), (41, 105, 205),
+ (113, 111, 160), (196, 154, 130), (242, 207, 89), (251, 191, 5),
+ (251, 178, 14), (171, 129, 0), (94, 178, 5), (18, 227, 11),
+ (23, 47, 73), (46, 60, 133), (82, 105, 149), (99, 140, 184),
+ (63, 104, 230), (54, 106, 224), (46, 108, 219), (12, 28, 165),
+ (0, 13, 70), (0, 4, 23), (1, 0, 9), (0, 0, 2),
+ (0, 0, 2), (1, 1, 1), (1, 1, 1), (1, 0, 0),
+ (1, 0, 0), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (0, 2, 0), (0, 2, 0), (0, 2, 0), (0, 5, 0),
+ (0, 5, 0), (0, 6, 0), (0, 6, 0), (0, 6, 0),
+ (0, 4, 1), (1, 1, 1), (3, 0, 0), (11, 0, 0),
+ (17, 8, 13), (73, 25, 67), (110, 99, 131), (153, 160, 168),
+ (140, 205, 199), (136, 206, 206), (136, 196, 230), (143, 166, 244),
+ (111, 159, 221), (60, 97, 141), (47, 35, 71), (50, 21, 26),
+ (50, 8, 0), (90, 45, 3), (85, 64, 0), (69, 38, 0),
+ (39, 11, 0), (15, 3, 3), (10, 0, 0), (3, 0, 0),
+ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (6, 0, 2), (8, 0, 0), (12, 0, 0),
+ (20, 0, 0), (38, 2, 0), (91, 42, 1), (123, 55, 0),
+ (150, 81, 3), (206, 148, 5), (251, 191, 5), (255, 217, 0),
+ (255, 226, 0), (253, 231, 0), (255, 225, 0), (255, 214, 1),
+ (250, 211, 0), (253, 160, 0), (245, 152, 0), (229, 153, 15),
+ (230, 188, 52), (251, 202, 136), (245, 215, 204), (223, 213, 203),
+ (169, 216, 182), (137, 204, 171), (62, 109, 135), (36, 63, 84),
+ (0, 7, 23), (13, 0, 9), (40, 21, 14), (94, 35, 0),
+ (173, 61, 0), (181, 107, 0), (255, 219, 0), (223, 149, 0)
+ ),
+
+// 251 Apophysis-040427-26AlienMind
+((82, 105, 198), (62, 83, 166), (52, 71, 149), (42, 60, 132),
+ (33, 49, 116), (25, 39, 100), (23, 36, 97), (22, 34, 94),
+ (15, 27, 79), (15, 27, 79), (15, 27, 79), (15, 26, 79),
+ (15, 26, 80), (17, 28, 84), (19, 31, 89), (21, 33, 93),
+ (24, 35, 97), (36, 53, 123), (39, 57, 128), (43, 61, 133),
+ (43, 61, 134), (43, 61, 135), (40, 58, 130), (37, 56, 125),
+ (28, 42, 105), (22, 35, 93), (17, 28, 82), (14, 24, 77),
+ (11, 21, 72), (9, 18, 67), (8, 16, 62), (21, 20, 26),
+ (65, 46, 6), (43, 27, 2), (23, 18, 25), (4, 9, 49),
+ (8, 16, 61), (12, 24, 74), (13, 25, 75), (14, 26, 76),
+ (77, 62, 31), (94, 74, 30), (111, 86, 29), (97, 83, 45),
+ (84, 81, 62), (93, 89, 72), (103, 97, 83), (103, 99, 87),
+ (107, 111, 136), (97, 121, 219), (119, 140, 223), (142, 159, 228),
+ (130, 147, 210), (119, 136, 192), (101, 121, 195), (83, 106, 199),
+ (99, 103, 114), (149, 133, 98), (199, 164, 83), (192, 160, 90),
+ (186, 157, 97), (156, 135, 93), (126, 114, 90), (85, 86, 104),
+ (61, 70, 113), (28, 44, 106), (22, 35, 93), (16, 27, 81),
+ (14, 26, 78), (13, 25, 75), (10, 18, 65), (26, 31, 37),
+ (65, 53, 31), (105, 80, 29), (146, 108, 27), (168, 131, 51),
+ (190, 154, 76), (181, 143, 61), (173, 133, 46), (125, 99, 38),
+ (97, 86, 58), (19, 32, 87), (17, 29, 84), (16, 27, 81),
+ (18, 30, 87), (21, 33, 93), (23, 38, 97), (27, 46, 105),
+ (34, 51, 120), (34, 51, 120), (34, 51, 120), (33, 50, 118),
+ (32, 50, 116), (26, 41, 106), (21, 36, 95), (16, 27, 81),
+ (15, 26, 80), (14, 26, 78), (13, 25, 76), (13, 25, 75),
+ (13, 25, 76), (14, 26, 78), (14, 26, 78), (15, 26, 80),
+ (26, 40, 101), (35, 51, 118), (44, 62, 136), (51, 71, 148),
+ (59, 80, 161), (72, 96, 184), (90, 113, 209), (100, 125, 218),
+ (138, 157, 234), (131, 156, 240), (142, 161, 226), (154, 167, 212),
+ (167, 172, 194), (172, 173, 193), (185, 180, 184), (191, 184, 178),
+ (244, 204, 134), (240, 202, 120), (236, 200, 106), (227, 197, 129),
+ (218, 195, 153), (202, 186, 170), (196, 183, 174), (183, 178, 185),
+ (135, 140, 169), (59, 80, 159), (54, 74, 151), (49, 68, 144),
+ (70, 73, 92), (80, 80, 82), (86, 94, 115), (62, 83, 166),
+ (86, 112, 205), (79, 104, 195), (72, 96, 186), (68, 91, 178),
+ (64, 86, 171), (56, 75, 154), (55, 74, 153), (51, 70, 147),
+ (52, 71, 148), (62, 83, 166), (67, 88, 173), (72, 94, 180),
+ (82, 105, 198), (91, 115, 211), (97, 123, 220), (123, 150, 253),
+ (116, 144, 243), (104, 131, 228), (92, 118, 213), (75, 99, 189),
+ (61, 82, 165), (46, 64, 140), (35, 52, 121), (25, 36, 100),
+ (17, 28, 82), (7, 15, 62), (6, 15, 60), (6, 15, 58),
+ (4, 9, 28), (1, 8, 52), (9, 15, 65), (10, 18, 65),
+ (10, 20, 69), (10, 20, 69), (10, 20, 69), (10, 20, 69),
+ (10, 20, 69), (10, 20, 69), (12, 24, 74), (13, 25, 75),
+ (14, 26, 76), (14, 26, 78), (15, 26, 80), (15, 26, 80),
+ (20, 32, 90), (23, 37, 98), (30, 48, 112), (34, 52, 118),
+ (40, 58, 130), (42, 60, 133), (44, 62, 136), (57, 75, 157),
+ (68, 92, 180), (76, 100, 190), (90, 114, 210), (98, 122, 220),
+ (143, 161, 223), (170, 172, 197), (188, 183, 179), (192, 187, 167),
+ (206, 181, 127), (186, 165, 134), (110, 99, 81), (69, 69, 69),
+ (21, 36, 95), (19, 31, 89), (21, 36, 95), (29, 44, 109),
+ (39, 58, 127), (56, 75, 154), (101, 110, 143), (123, 124, 128),
+ (147, 160, 202), (138, 156, 228), (93, 119, 216), (81, 104, 197),
+ (66, 90, 176), (61, 82, 165), (54, 75, 154), (50, 69, 146),
+ (49, 67, 143), (49, 68, 144), (52, 71, 148), (54, 75, 154),
+ (51, 70, 147), (47, 66, 142), (42, 60, 132), (33, 51, 117),
+ (29, 44, 109), (23, 37, 98), (19, 31, 89), (18, 28, 87),
+ (19, 31, 89), (20, 32, 90), (21, 36, 95), (25, 36, 98),
+ (31, 45, 110), (35, 52, 121), (43, 61, 133), (48, 66, 142),
+ (60, 81, 162), (69, 93, 179), (71, 95, 183), (65, 87, 172),
+ (59, 80, 161), (49, 68, 145), (37, 56, 125), (29, 47, 111),
+ (21, 36, 95), (16, 29, 84), (15, 26, 80), (14, 26, 78),
+ (13, 25, 75), (13, 25, 75), (12, 24, 74), (14, 24, 75),
+ (29, 32, 47), (62, 56, 40), (178, 146, 69), (106, 90, 54)
+ ),
+
+// 252 Apophysis-040427-26ISpher4
+((33, 87, 0), (60, 100, 29), (78, 109, 54), (96, 118, 80),
+ (100, 118, 85), (104, 119, 90), (105, 122, 90), (106, 126, 91),
+ (100, 143, 90), (85, 125, 64), (71, 108, 39), (54, 99, 23),
+ (38, 90, 7), (32, 80, 3), (27, 70, 0), (26, 69, 0),
+ (26, 69, 0), (27, 68, 0), (27, 71, 0), (28, 74, 1),
+ (31, 81, 1), (35, 89, 1), (39, 93, 5), (43, 97, 9),
+ (72, 126, 38), (96, 145, 63), (120, 164, 89), (125, 168, 96),
+ (131, 172, 104), (132, 173, 105), (133, 174, 106), (132, 171, 104),
+ (128, 169, 101), (86, 127, 59), (63, 116, 42), (40, 105, 25),
+ (40, 100, 17), (41, 95, 9), (40, 94, 7), (40, 94, 6),
+ (34, 88, 0), (36, 90, 2), (38, 92, 4), (48, 95, 15),
+ (58, 98, 27), (62, 100, 36), (67, 102, 46), (91, 91, 91),
+ (99, 101, 100), (110, 109, 107), (115, 128, 108), (120, 148, 110),
+ (129, 163, 112), (139, 178, 115), (141, 179, 117), (143, 181, 120),
+ (153, 166, 138), (156, 169, 141), (159, 172, 144), (155, 179, 137),
+ (152, 187, 131), (148, 185, 127), (145, 183, 124), (142, 170, 121),
+ (137, 175, 116), (133, 174, 108), (118, 158, 102), (104, 143, 96),
+ (100, 138, 89), (97, 134, 82), (77, 127, 64), (70, 113, 42),
+ (62, 116, 28), (80, 133, 48), (99, 151, 68), (114, 161, 85),
+ (130, 171, 103), (131, 172, 105), (133, 174, 108), (133, 174, 108),
+ (133, 174, 108), (131, 172, 104), (130, 171, 103), (130, 171, 103),
+ (129, 170, 102), (128, 169, 101), (121, 149, 108), (123, 123, 115),
+ (109, 108, 106), (118, 138, 103), (128, 169, 101), (129, 170, 102),
+ (130, 171, 103), (130, 171, 103), (124, 167, 96), (108, 157, 78),
+ (86, 135, 53), (71, 110, 47), (84, 114, 66), (97, 118, 85),
+ (99, 120, 87), (102, 123, 90), (84, 124, 62), (71, 110, 45),
+ (45, 99, 11), (38, 91, 6), (32, 84, 1), (30, 79, 0),
+ (29, 75, 0), (26, 65, 2), (25, 60, 2), (23, 56, 1),
+ (24, 59, 1), (23, 61, 0), (24, 63, 1), (26, 65, 2),
+ (27, 70, 0), (27, 73, 0), (31, 72, 4), (30, 79, 0),
+ (31, 80, 1), (32, 84, 0), (34, 88, 0), (35, 89, 1),
+ (36, 90, 2), (38, 90, 7), (45, 78, 25), (58, 58, 50),
+ (67, 69, 55), (76, 102, 54), (73, 104, 50), (71, 107, 46),
+ (66, 107, 41), (66, 107, 41), (66, 107, 39), (62, 108, 35),
+ (46, 98, 13), (43, 96, 10), (41, 95, 7), (43, 97, 9),
+ (45, 99, 11), (51, 103, 20), (60, 114, 26), (72, 126, 38),
+ (86, 129, 58), (103, 141, 90), (103, 132, 90), (103, 124, 91),
+ (105, 125, 90), (111, 133, 95), (116, 149, 92), (127, 168, 100),
+ (114, 160, 85), (106, 155, 76), (99, 151, 68), (78, 132, 44),
+ (72, 115, 44), (68, 117, 51), (94, 146, 61), (109, 158, 79),
+ (124, 167, 96), (130, 171, 103), (129, 170, 102), (128, 169, 101),
+ (124, 167, 96), (106, 144, 95), (107, 141, 91), (108, 137, 89),
+ (95, 132, 65), (91, 122, 64), (88, 112, 64), (74, 110, 48),
+ (72, 105, 48), (68, 109, 43), (66, 107, 39), (70, 109, 44),
+ (79, 112, 55), (92, 112, 77), (110, 108, 96), (107, 106, 104),
+ (102, 102, 102), (97, 97, 97), (87, 87, 87), (69, 69, 57),
+ (46, 75, 21), (40, 71, 14), (34, 68, 8), (29, 70, 4),
+ (26, 69, 0), (26, 69, 0), (29, 75, 2), (32, 84, 1),
+ (39, 93, 5), (51, 105, 17), (61, 115, 27), (72, 126, 38),
+ (104, 153, 72), (123, 166, 95), (129, 170, 102), (126, 169, 100),
+ (109, 149, 99), (103, 135, 86), (83, 104, 65), (58, 58, 50),
+ (46, 45, 41), (43, 42, 38), (28, 64, 3), (30, 76, 1),
+ (33, 87, 1), (39, 93, 7), (52, 95, 23), (60, 91, 32),
+ (76, 94, 56), (89, 89, 89), (94, 92, 95), (91, 91, 91),
+ (72, 99, 58), (67, 93, 48), (54, 83, 27), (53, 82, 26),
+ (51, 85, 24), (40, 89, 8), (36, 85, 6), (33, 74, 4),
+ (47, 80, 25), (63, 82, 36), (77, 93, 56), (93, 93, 93),
+ (100, 100, 100), (87, 87, 87), (67, 89, 50), (58, 93, 27),
+ (44, 93, 12), (40, 94, 6), (37, 91, 3), (36, 90, 2),
+ (35, 89, 1), (35, 89, 1), (37, 91, 3), (39, 93, 5),
+ (42, 96, 8), (50, 102, 19), (65, 109, 34), (99, 148, 67),
+ (114, 160, 88), (133, 174, 108), (155, 185, 133), (195, 209, 184),
+ (204, 216, 196), (220, 231, 217), (222, 230, 217), (206, 218, 198),
+ (201, 213, 193), (164, 179, 150), (139, 164, 135), (126, 144, 104)
+ ),
+
+// 253 Apophysis-040427-26ISph2
+((153, 146, 180), (163, 169, 195), (165, 170, 198), (168, 171, 202),
+ (168, 171, 202), (168, 171, 202), (166, 164, 199), (164, 158, 196),
+ (144, 139, 169), (135, 134, 158), (127, 130, 147), (133, 136, 147),
+ (139, 142, 147), (156, 159, 168), (174, 176, 189), (174, 178, 195),
+ (175, 180, 202), (180, 187, 205), (181, 182, 206), (182, 177, 207),
+ (177, 177, 207), (173, 178, 207), (173, 177, 207), (173, 176, 207),
+ (169, 172, 205), (168, 171, 203), (167, 170, 201), (160, 157, 190),
+ (154, 144, 179), (150, 144, 173), (146, 144, 168), (136, 140, 149),
+ (125, 128, 143), (120, 126, 138), (115, 116, 138), (110, 106, 139),
+ (116, 110, 145), (123, 115, 152), (128, 119, 161), (133, 124, 171),
+ (154, 147, 189), (159, 157, 194), (165, 168, 199), (166, 169, 200),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (170, 173, 204),
+ (173, 177, 206), (175, 179, 204), (173, 178, 203), (172, 178, 202),
+ (173, 177, 200), (174, 176, 199), (172, 176, 198), (170, 176, 198),
+ (168, 173, 202), (167, 172, 201), (167, 171, 200), (163, 168, 192),
+ (160, 165, 185), (158, 159, 174), (157, 154, 163), (146, 150, 153),
+ (130, 133, 148), (129, 116, 38), (165, 149, 36), (202, 182, 35),
+ (207, 210, 32), (212, 238, 29), (161, 201, 42), (113, 166, 60),
+ (110, 106, 133), (109, 103, 148), (109, 100, 163), (119, 112, 160),
+ (130, 124, 158), (132, 125, 159), (134, 127, 160), (145, 140, 170),
+ (157, 161, 188), (173, 168, 191), (170, 171, 193), (168, 174, 196),
+ (167, 173, 196), (167, 173, 197), (165, 170, 200), (167, 172, 202),
+ (160, 164, 193), (158, 162, 189), (156, 160, 185), (148, 149, 179),
+ (140, 139, 173), (128, 134, 150), (129, 132, 149), (135, 136, 154),
+ (144, 139, 179), (155, 155, 189), (158, 161, 188), (161, 168, 187),
+ (162, 169, 188), (164, 171, 190), (162, 169, 187), (160, 167, 185),
+ (162, 169, 187), (168, 173, 195), (174, 178, 203), (179, 179, 209),
+ (185, 181, 216), (194, 199, 219), (203, 206, 223), (203, 206, 225),
+ (203, 206, 225), (205, 208, 227), (210, 210, 226), (216, 212, 226),
+ (226, 229, 236), (232, 231, 236), (233, 230, 239), (233, 232, 238),
+ (230, 236, 236), (223, 229, 229), (216, 222, 222), (208, 213, 220),
+ (201, 204, 219), (196, 199, 216), (175, 179, 208), (171, 175, 204),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (168, 171, 202),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (168, 171, 204),
+ (168, 171, 204), (168, 171, 204), (168, 171, 204), (168, 171, 203),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (167, 172, 202),
+ (167, 172, 202), (171, 177, 203), (171, 177, 201), (171, 177, 199),
+ (170, 177, 196), (168, 175, 193), (168, 174, 186), (159, 166, 185),
+ (132, 134, 155), (129, 133, 149), (126, 132, 144), (125, 129, 141),
+ (125, 126, 144), (130, 125, 157), (129, 124, 156), (115, 107, 167),
+ (113, 103, 166), (124, 123, 181), (131, 127, 182), (139, 132, 183),
+ (148, 145, 190), (158, 161, 196), (167, 170, 201), (168, 171, 202),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (168, 171, 202),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (168, 171, 202),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (168, 171, 202),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (168, 171, 202),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (168, 171, 202),
+ (168, 171, 202), (168, 171, 202), (168, 171, 202), (168, 171, 202),
+ (168, 171, 202), (168, 172, 201), (171, 171, 199), (170, 176, 198),
+ (169, 175, 197), (166, 172, 198), (160, 164, 191), (150, 143, 187),
+ (127, 120, 164), (100, 90, 159), (82, 68, 127), (48, 33, 92),
+ (30, 37, 83), (26, 28, 79), (35, 29, 91), (89, 75, 128),
+ (116, 109, 153), (141, 136, 176), (159, 165, 187), (175, 181, 205),
+ (189, 188, 219), (198, 203, 223), (198, 205, 221), (197, 200, 215),
+ (184, 186, 201), (171, 165, 201), (142, 136, 196), (134, 125, 178),
+ (113, 103, 164), (100, 88, 138), (100, 88, 138), (99, 87, 135),
+ (97, 88, 135), (92, 80, 130), (77, 85, 134), (86, 80, 126),
+ (61, 57, 107), (48, 33, 92), (68, 61, 141), (71, 62, 141),
+ (89, 85, 159), (102, 108, 170), (136, 134, 173), (157, 162, 191),
+ (165, 168, 199), (172, 172, 200), (180, 178, 200), (178, 180, 201),
+ (180, 181, 201), (190, 185, 208), (200, 196, 213), (202, 199, 220),
+ (208, 204, 221), (210, 207, 228), (222, 217, 224), (209, 213, 214),
+ (205, 208, 223), (202, 205, 222), (196, 192, 215), (183, 177, 203),
+ (178, 171, 202), (165, 172, 191), (160, 166, 188), (163, 172, 189)
+ ),
+
+// 254 Apophysis-040427-26ISph11
+((146, 62, 86), (85, 25, 95), (86, 20, 83), (87, 16, 72),
+ (84, 16, 64), (82, 17, 57), (76, 20, 66), (70, 23, 75),
+ (72, 28, 113), (83, 40, 107), (95, 53, 101), (111, 70, 98),
+ (127, 87, 95), (154, 94, 107), (182, 101, 120), (197, 109, 119),
+ (212, 118, 118), (206, 155, 170), (191, 151, 165), (176, 148, 160),
+ (153, 121, 155), (130, 95, 151), (119, 88, 151), (109, 82, 151),
+ (128, 78, 147), (135, 100, 151), (143, 122, 155), (145, 145, 177),
+ (148, 169, 200), (151, 179, 218), (155, 189, 237), (156, 204, 242),
+ (140, 174, 202), (74, 189, 172), (100, 175, 156), (126, 161, 141),
+ (138, 148, 148), (150, 135, 156), (150, 133, 153), (150, 131, 151),
+ (114, 139, 133), (98, 149, 145), (83, 159, 157), (126, 166, 180),
+ (170, 173, 204), (172, 170, 202), (174, 167, 201), (179, 179, 205),
+ (191, 180, 220), (200, 212, 228), (180, 201, 219), (160, 191, 211),
+ (154, 166, 202), (148, 141, 193), (151, 132, 176), (154, 124, 160),
+ (152, 112, 138), (150, 121, 132), (149, 130, 126), (167, 130, 134),
+ (186, 130, 143), (201, 122, 133), (216, 115, 123), (222, 142, 145),
+ (219, 173, 175), (216, 178, 193), (202, 179, 204), (188, 181, 215),
+ (174, 174, 213), (160, 167, 211), (141, 142, 196), (131, 133, 184),
+ (108, 86, 132), (98, 77, 104), (89, 68, 77), (61, 96, 79),
+ (34, 125, 82), (54, 152, 110), (75, 180, 139), (62, 181, 175),
+ (67, 179, 191), (106, 77, 144), (102, 60, 134), (98, 43, 124),
+ (93, 46, 120), (88, 49, 116), (91, 54, 108), (102, 66, 112),
+ (134, 93, 123), (150, 94, 113), (167, 96, 104), (165, 101, 99),
+ (163, 107, 94), (134, 94, 95), (130, 89, 95), (120, 86, 100),
+ (115, 83, 94), (125, 59, 73), (108, 41, 77), (92, 24, 81),
+ (88, 20, 77), (85, 16, 73), (84, 31, 99), (69, 42, 113),
+ (88, 113, 135), (99, 119, 139), (110, 125, 144), (118, 128, 137),
+ (126, 132, 130), (131, 121, 129), (105, 95, 145), (103, 77, 124),
+ (90, 65, 97), (91, 65, 66), (107, 74, 73), (124, 83, 81),
+ (125, 82, 89), (128, 87, 93), (124, 87, 94), (123, 85, 106),
+ (108, 69, 100), (88, 54, 100), (68, 40, 101), (67, 40, 105),
+ (66, 41, 109), (27, 69, 127), (29, 71, 131), (57, 19, 130),
+ (66, 43, 147), (105, 60, 155), (137, 65, 171), (170, 71, 187),
+ (224, 95, 149), (217, 154, 165), (226, 180, 180), (237, 195, 197),
+ (246, 230, 230), (246, 231, 231), (246, 232, 232), (245, 230, 230),
+ (245, 229, 229), (222, 216, 226), (175, 180, 209), (135, 150, 189),
+ (130, 138, 157), (123, 101, 139), (115, 100, 144), (107, 99, 150),
+ (96, 90, 160), (47, 80, 173), (87, 97, 184), (107, 109, 186),
+ (167, 142, 161), (184, 149, 166), (201, 157, 172), (212, 167, 164),
+ (195, 186, 181), (183, 178, 175), (174, 164, 162), (175, 132, 160),
+ (197, 139, 153), (229, 187, 189), (230, 201, 204), (231, 216, 219),
+ (244, 228, 229), (241, 211, 211), (230, 196, 197), (217, 156, 171),
+ (187, 138, 71), (182, 130, 80), (178, 122, 89), (143, 104, 109),
+ (131, 92, 113), (120, 105, 108), (85, 142, 99), (58, 153, 72),
+ (56, 158, 56), (44, 123, 44), (76, 115, 62), (76, 53, 61),
+ (53, 38, 41), (53, 26, 61), (54, 32, 68), (70, 55, 86),
+ (112, 79, 134), (127, 83, 140), (142, 88, 146), (156, 108, 124),
+ (142, 121, 116), (165, 130, 111), (186, 129, 118), (173, 120, 136),
+ (161, 113, 129), (142, 113, 118), (131, 123, 120), (123, 142, 120),
+ (90, 157, 103), (82, 177, 119), (76, 181, 140), (56, 139, 109),
+ (85, 86, 107), (118, 91, 100), (112, 81, 122), (129, 96, 127),
+ (138, 107, 148), (139, 127, 151), (137, 127, 164), (138, 121, 165),
+ (127, 117, 169), (112, 114, 189), (110, 113, 164), (112, 103, 156),
+ (103, 96, 148), (100, 71, 129), (94, 65, 129), (107, 71, 117),
+ (120, 69, 112), (157, 61, 98), (165, 59, 79), (159, 80, 85),
+ (126, 79, 85), (124, 87, 94), (125, 89, 93), (128, 88, 96),
+ (147, 103, 116), (175, 105, 133), (192, 134, 149), (197, 139, 153),
+ (173, 137, 137), (169, 116, 134), (140, 95, 126), (113, 70, 115),
+ (101, 62, 107), (95, 36, 100), (85, 34, 101), (73, 47, 86),
+ (76, 53, 61), (70, 49, 54), (78, 20, 45), (77, 19, 41),
+ (77, 19, 41), (81, 18, 49), (57, 27, 61), (64, 37, 68),
+ (69, 45, 77), (77, 53, 85), (101, 62, 109), (116, 66, 125),
+ (158, 75, 147), (182, 101, 120), (219, 114, 119), (223, 113, 116),
+ (184, 109, 113), (152, 112, 113), (123, 107, 120), (74, 115, 117)
+ ),
+
+// 255 Apophysis-040427-43HeartFlwr
+((65, 126, 131), (77, 88, 58), (78, 81, 46), (79, 74, 34),
+ (78, 75, 28), (78, 77, 23), (101, 75, 22), (124, 74, 21),
+ (173, 66, 12), (169, 54, 23), (166, 43, 35), (157, 37, 31),
+ (149, 31, 27), (119, 46, 33), (89, 61, 40), (71, 63, 32),
+ (53, 65, 25), (49, 81, 31), (32, 75, 38), (16, 70, 46),
+ (33, 80, 37), (51, 91, 28), (49, 78, 25), (47, 65, 23),
+ (22, 44, 58), (24, 76, 61), (27, 108, 65), (92, 159, 66),
+ (157, 210, 68), (177, 209, 71), (198, 208, 75), (232, 157, 42),
+ (222, 131, 52), (209, 52, 9), (197, 40, 17), (186, 28, 25),
+ (162, 20, 44), (139, 12, 63), (130, 31, 61), (121, 51, 59),
+ (117, 115, 103), (126, 135, 130), (136, 156, 157), (173, 167, 196),
+ (211, 178, 235), (188, 172, 214), (165, 166, 194), (133, 123, 134),
+ (72, 102, 113), (0, 95, 41), (12, 83, 21), (25, 72, 2),
+ (28, 92, 7), (31, 113, 13), (30, 122, 6), (29, 131, 0),
+ (23, 107, 19), (35, 82, 9), (47, 57, 0), (38, 52, 30),
+ (29, 47, 61), (14, 55, 80), (0, 63, 99), (0, 78, 80),
+ (13, 78, 84), (72, 97, 119), (75, 87, 91), (79, 77, 64),
+ (87, 70, 58), (95, 63, 52), (165, 67, 58), (224, 56, 55),
+ (247, 77, 104), (223, 71, 83), (199, 65, 62), (182, 45, 58),
+ (166, 26, 55), (173, 13, 55), (181, 0, 55), (216, 0, 15),
+ (255, 12, 28), (255, 11, 42), (246, 36, 21), (238, 61, 0),
+ (238, 115, 0), (239, 170, 0), (246, 199, 61), (222, 247, 57),
+ (229, 205, 73), (237, 212, 134), (245, 219, 196), (250, 208, 210),
+ (255, 197, 225), (222, 223, 218), (218, 196, 219), (138, 150, 190),
+ (89, 120, 151), (74, 141, 150), (93, 143, 138), (112, 145, 126),
+ (126, 144, 129), (141, 144, 133), (161, 171, 163), (210, 152, 202),
+ (236, 91, 108), (225, 66, 76), (215, 42, 44), (193, 37, 37),
+ (172, 33, 30), (149, 31, 27), (123, 34, 28), (86, 50, 50),
+ (77, 53, 51), (60, 56, 73), (55, 59, 63), (50, 63, 54),
+ (60, 44, 31), (68, 39, 43), (79, 53, 38), (81, 65, 39),
+ (71, 65, 49), (70, 75, 50), (69, 86, 52), (80, 85, 57),
+ (92, 84, 63), (83, 119, 58), (146, 112, 85), (141, 136, 80),
+ (140, 149, 102), (194, 241, 125), (202, 238, 133), (211, 235, 141),
+ (227, 255, 96), (247, 244, 105), (234, 226, 151), (218, 237, 158),
+ (232, 199, 208), (146, 176, 175), (60, 153, 142), (66, 131, 127),
+ (72, 110, 113), (78, 87, 66), (69, 71, 57), (84, 82, 43),
+ (139, 90, 49), (210, 88, 37), (215, 73, 42), (220, 58, 47),
+ (198, 42, 20), (175, 9, 47), (194, 0, 32), (193, 0, 12),
+ (174, 0, 1), (170, 0, 0), (166, 0, 0), (173, 8, 6),
+ (193, 0, 10), (184, 11, 5), (166, 14, 11), (169, 57, 9),
+ (178, 69, 2), (164, 69, 3), (159, 68, 9), (155, 68, 15),
+ (155, 67, 19), (169, 40, 34), (154, 29, 37), (132, 38, 39),
+ (90, 57, 38), (92, 56, 30), (94, 55, 22), (96, 33, 0),
+ (77, 7, 17), (85, 23, 38), (102, 44, 56), (104, 14, 78),
+ (78, 45, 92), (79, 59, 71), (118, 71, 55), (136, 86, 75),
+ (150, 89, 71), (179, 71, 33), (222, 41, 0), (239, 47, 0),
+ (199, 58, 12), (183, 63, 10), (168, 68, 8), (143, 79, 5),
+ (85, 79, 1), (73, 89, 0), (73, 86, 4), (63, 85, 13),
+ (85, 83, 24), (137, 79, 33), (172, 45, 38), (179, 30, 26),
+ (182, 13, 10), (183, 14, 11), (189, 15, 14), (200, 44, 0),
+ (219, 32, 0), (214, 12, 10), (252, 5, 0), (255, 28, 0),
+ (223, 51, 1), (179, 65, 2), (148, 74, 13), (99, 48, 0),
+ (79, 42, 15), (50, 43, 1), (13, 54, 0), (43, 41, 0),
+ (83, 23, 15), (115, 29, 16), (117, 20, 31), (117, 34, 28),
+ (99, 48, 17), (85, 59, 2), (72, 69, 14), (72, 66, 32),
+ (79, 68, 40), (75, 93, 41), (79, 135, 48), (78, 136, 77),
+ (69, 135, 107), (68, 129, 121), (64, 109, 76), (70, 92, 56),
+ (42, 105, 35), (31, 135, 58), (70, 145, 42), (129, 216, 24),
+ (173, 239, 17), (171, 213, 51), (88, 152, 66), (64, 161, 80),
+ (101, 183, 39), (113, 220, 2), (120, 178, 14), (103, 170, 29),
+ (80, 165, 0), (43, 126, 10), (57, 84, 15), (53, 84, 25),
+ (62, 88, 23), (73, 77, 26), (83, 68, 27), (131, 65, 17),
+ (159, 32, 0), (194, 31, 0), (204, 48, 0), (189, 52, 8),
+ (170, 36, 27), (127, 30, 24), (90, 49, 45), (68, 76, 63)
+ ),
+
+// 256 Apophysis-040427-43JunglThron
+((59, 170, 52), (18, 118, 46), (18, 105, 52), (18, 92, 59),
+ (19, 94, 62), (20, 97, 65), (19, 100, 66), (19, 103, 67),
+ (33, 138, 54), (25, 124, 55), (17, 110, 57), (14, 97, 57),
+ (11, 85, 58), (15, 76, 54), (19, 67, 51), (25, 61, 56),
+ (31, 56, 61), (31, 77, 51), (25, 91, 55), (20, 106, 59),
+ (16, 106, 65), (13, 107, 71), (13, 104, 74), (13, 101, 77),
+ (14, 103, 81), (25, 112, 79), (36, 122, 77), (46, 142, 74),
+ (57, 163, 71), (71, 173, 77), (86, 184, 83), (115, 206, 113),
+ (154, 208, 150), (225, 189, 199), (207, 197, 156), (190, 205, 114),
+ (132, 179, 90), (74, 154, 67), (69, 146, 64), (64, 138, 61),
+ (24, 104, 79), (23, 97, 77), (23, 91, 76), (17, 86, 67),
+ (12, 82, 58), (14, 83, 49), (16, 85, 41), (10, 91, 35),
+ (25, 94, 40), (33, 142, 37), (49, 148, 46), (65, 155, 55),
+ (50, 153, 56), (36, 151, 58), (34, 148, 59), (32, 146, 61),
+ (36, 139, 56), (31, 127, 60), (27, 115, 64), (26, 101, 67),
+ (25, 88, 71), (22, 78, 70), (19, 69, 70), (19, 69, 70),
+ (16, 79, 71), (16, 120, 67), (32, 139, 73), (49, 158, 79),
+ (50, 162, 93), (52, 167, 108), (67, 158, 78), (67, 164, 71),
+ (49, 157, 72), (38, 144, 66), (28, 131, 60), (18, 121, 59),
+ (8, 112, 59), (7, 111, 58), (7, 110, 57), (2, 106, 55),
+ (11, 98, 66), (16, 75, 57), (12, 73, 59), (8, 71, 62),
+ (8, 70, 62), (9, 70, 62), (20, 64, 65), (43, 73, 73),
+ (97, 71, 100), (84, 55, 90), (71, 40, 81), (64, 57, 69),
+ (58, 75, 57), (61, 75, 50), (38, 67, 65), (21, 67, 67),
+ (10, 95, 66), (12, 114, 67), (13, 116, 60), (14, 119, 53),
+ (14, 117, 45), (15, 116, 38), (20, 118, 31), (18, 100, 26),
+ (0, 37, 20), (13, 28, 45), (27, 20, 71), (28, 28, 68),
+ (29, 36, 65), (20, 46, 59), (25, 67, 63), (28, 107, 60),
+ (51, 139, 79), (103, 183, 110), (99, 185, 105), (95, 187, 100),
+ (82, 164, 82), (61, 142, 76), (46, 124, 76), (29, 110, 77),
+ (0, 96, 81), (3, 87, 65), (6, 79, 50), (5, 83, 44),
+ (5, 87, 38), (14, 73, 19), (1, 69, 44), (7, 74, 67),
+ (6, 80, 65), (11, 81, 73), (15, 84, 73), (19, 87, 74),
+ (30, 85, 88), (20, 85, 81), (14, 87, 70), (8, 78, 50),
+ (0, 31, 0), (3, 18, 7), (7, 6, 14), (20, 24, 24),
+ (33, 43, 34), (110, 60, 59), (126, 77, 81), (127, 102, 105),
+ (161, 112, 82), (189, 137, 80), (190, 169, 96), (192, 202, 113),
+ (157, 211, 115), (169, 210, 150), (179, 212, 157), (198, 217, 136),
+ (239, 250, 130), (247, 229, 122), (255, 208, 115), (217, 180, 162),
+ (228, 186, 200), (232, 177, 200), (238, 176, 197), (238, 180, 205),
+ (230, 183, 201), (219, 212, 170), (195, 212, 162), (172, 213, 155),
+ (118, 199, 123), (108, 156, 82), (43, 130, 95), (26, 99, 80),
+ (36, 90, 77), (43, 85, 78), (50, 80, 80), (90, 89, 103),
+ (119, 91, 79), (126, 118, 131), (142, 122, 123), (117, 187, 98),
+ (107, 190, 82), (136, 209, 104), (143, 211, 98), (154, 210, 135),
+ (146, 206, 144), (130, 205, 123), (117, 203, 102), (128, 207, 79),
+ (71, 168, 65), (64, 164, 63), (57, 161, 62), (52, 155, 64),
+ (44, 148, 71), (36, 133, 82), (27, 116, 68), (24, 107, 63),
+ (16, 110, 57), (13, 110, 57), (13, 99, 60), (12, 98, 73),
+ (6, 99, 72), (4, 100, 72), (9, 99, 74), (12, 99, 83),
+ (12, 98, 87), (10, 93, 73), (6, 95, 73), (2, 86, 63),
+ (0, 86, 61), (10, 82, 58), (3, 90, 55), (8, 100, 53),
+ (10, 106, 43), (15, 113, 40), (16, 117, 39), (30, 141, 47),
+ (49, 161, 51), (58, 176, 53), (65, 186, 59), (69, 185, 60),
+ (72, 189, 57), (80, 181, 59), (107, 182, 79), (155, 193, 108),
+ (174, 139, 97), (231, 154, 62), (226, 153, 59), (188, 94, 42),
+ (178, 125, 75), (131, 189, 104), (132, 208, 118), (145, 208, 153),
+ (150, 206, 167), (192, 220, 205), (217, 197, 190), (217, 195, 182),
+ (184, 213, 165), (141, 203, 162), (131, 203, 140), (129, 211, 101),
+ (111, 207, 84), (79, 189, 68), (68, 173, 55), (64, 155, 62),
+ (41, 136, 70), (26, 125, 79), (18, 116, 75), (21, 111, 76),
+ (17, 108, 75), (18, 110, 85), (28, 113, 84), (23, 117, 83),
+ (30, 138, 86), (63, 161, 74), (100, 191, 88), (98, 204, 93),
+ (84, 192, 72), (61, 174, 58), (21, 124, 41), (42, 151, 60)
+ ),
+
+// 257 Apophysis-040427-44jawa
+((121, 90, 72), (121, 91, 83), (130, 101, 92), (139, 112, 101),
+ (148, 117, 112), (157, 123, 124), (161, 130, 125), (166, 138, 127),
+ (156, 122, 123), (151, 117, 117), (146, 112, 111), (129, 95, 91),
+ (112, 79, 72), (100, 69, 62), (89, 60, 52), (86, 57, 49),
+ (83, 54, 46), (76, 51, 46), (81, 54, 48), (87, 58, 50),
+ (99, 68, 61), (112, 79, 72), (120, 88, 80), (128, 98, 88),
+ (175, 151, 139), (198, 182, 162), (221, 214, 185), (224, 209, 201),
+ (227, 205, 217), (223, 200, 208), (220, 195, 199), (195, 163, 176),
+ (179, 144, 151), (142, 108, 107), (127, 97, 92), (113, 86, 77),
+ (104, 76, 69), (95, 66, 62), (93, 63, 57), (91, 61, 53),
+ (79, 52, 43), (75, 47, 41), (71, 43, 39), (68, 42, 36),
+ (65, 42, 34), (63, 42, 33), (62, 42, 33), (62, 39, 31),
+ (62, 39, 31), (60, 37, 29), (57, 37, 24), (55, 38, 20),
+ (59, 40, 22), (63, 42, 25), (63, 43, 25), (63, 45, 25),
+ (88, 59, 51), (103, 74, 69), (119, 89, 87), (147, 115, 117),
+ (176, 141, 148), (185, 151, 161), (195, 161, 175), (216, 185, 203),
+ (228, 196, 207), (212, 181, 199), (190, 157, 169), (168, 133, 139),
+ (156, 122, 124), (145, 111, 109), (131, 101, 91), (122, 91, 86),
+ (113, 80, 73), (105, 74, 66), (98, 68, 60), (92, 62, 54),
+ (87, 57, 49), (83, 55, 46), (80, 53, 44), (77, 50, 41),
+ (72, 45, 36), (64, 41, 33), (63, 40, 32), (62, 39, 31),
+ (61, 38, 30), (60, 37, 29), (53, 33, 26), (50, 31, 24),
+ (50, 31, 24), (55, 34, 27), (60, 37, 31), (61, 38, 31),
+ (62, 39, 31), (62, 39, 31), (67, 43, 33), (73, 46, 37),
+ (79, 52, 43), (101, 69, 56), (108, 76, 66), (116, 83, 76),
+ (116, 83, 76), (117, 84, 77), (115, 82, 75), (115, 82, 75),
+ (97, 68, 60), (92, 63, 55), (87, 58, 50), (83, 55, 46),
+ (79, 52, 43), (76, 49, 40), (72, 45, 36), (72, 45, 36),
+ (74, 47, 38), (78, 51, 42), (78, 51, 42), (78, 51, 42),
+ (77, 50, 43), (75, 48, 41), (70, 45, 38), (71, 44, 35),
+ (71, 44, 35), (69, 44, 34), (68, 44, 34), (67, 43, 33),
+ (67, 43, 33), (64, 41, 33), (60, 37, 31), (55, 35, 28),
+ (49, 30, 23), (40, 26, 17), (38, 24, 16), (37, 22, 15),
+ (36, 15, 10), (28, 9, 2), (40, 17, 9), (39, 22, 15),
+ (56, 33, 27), (61, 37, 29), (66, 42, 32), (66, 42, 32),
+ (67, 43, 33), (70, 43, 34), (72, 44, 33), (71, 44, 35),
+ (69, 45, 35), (75, 48, 39), (76, 49, 40), (78, 51, 42),
+ (81, 54, 45), (87, 58, 50), (92, 62, 54), (93, 63, 55),
+ (90, 61, 53), (87, 58, 50), (84, 55, 47), (79, 52, 43),
+ (76, 49, 40), (72, 45, 36), (68, 44, 34), (67, 43, 33),
+ (66, 44, 33), (64, 41, 33), (63, 40, 32), (63, 40, 32),
+ (62, 39, 31), (62, 39, 31), (62, 39, 31), (65, 38, 29),
+ (60, 37, 29), (57, 36, 28), (55, 35, 28), (53, 33, 26),
+ (52, 33, 26), (51, 31, 24), (57, 27, 25), (60, 37, 29),
+ (61, 37, 33), (62, 39, 33), (65, 42, 34), (69, 44, 37),
+ (78, 51, 42), (83, 56, 47), (92, 62, 54), (94, 64, 56),
+ (111, 78, 71), (111, 78, 71), (112, 79, 72), (110, 77, 70),
+ (101, 71, 63), (96, 67, 59), (94, 64, 56), (98, 68, 60),
+ (106, 76, 74), (114, 86, 82), (132, 99, 94), (153, 119, 118),
+ (174, 139, 146), (189, 156, 167), (201, 169, 184), (213, 187, 200),
+ (204, 173, 188), (201, 169, 184), (209, 178, 196), (225, 192, 209),
+ (228, 203, 224), (227, 214, 208), (249, 243, 227), (255, 232, 254),
+ (242, 223, 245), (224, 193, 208), (187, 153, 167), (167, 131, 133),
+ (148, 114, 115), (134, 100, 98), (122, 89, 84), (112, 79, 72),
+ (100, 70, 62), (93, 63, 55), (88, 58, 50), (86, 57, 49),
+ (83, 56, 49), (86, 57, 49), (92, 63, 55), (94, 64, 56),
+ (103, 78, 47), (106, 80, 67), (113, 83, 72), (117, 84, 79),
+ (127, 94, 89), (136, 107, 101), (138, 117, 114), (156, 122, 123),
+ (165, 130, 134), (172, 137, 143), (172, 140, 145), (171, 136, 142),
+ (163, 128, 134), (153, 119, 118), (146, 116, 108), (137, 114, 98),
+ (123, 97, 82), (128, 101, 84), (139, 117, 93), (145, 122, 108),
+ (173, 162, 116), (153, 140, 121), (139, 118, 75), (107, 87, 50),
+ (96, 80, 46), (90, 61, 53), (82, 55, 46), (79, 52, 43),
+ (79, 52, 43), (81, 59, 35), (88, 59, 51), (95, 65, 57)
+ ),
+
+// 258 Apophysis-040427-51KaosGrn
+((241, 232, 227), (155, 72, 56), (137, 55, 41), (120, 38, 26),
+ (109, 31, 18), (98, 24, 11), (98, 22, 9), (98, 20, 8),
+ (99, 17, 5), (98, 19, 6), (97, 21, 8), (95, 26, 12),
+ (94, 32, 17), (81, 61, 35), (69, 91, 53), (64, 96, 53),
+ (59, 101, 53), (68, 84, 47), (80, 57, 31), (93, 31, 16),
+ (93, 22, 11), (93, 13, 6), (92, 10, 6), (91, 7, 7),
+ (79, 6, 0), (79, 6, 0), (79, 6, 0), (80, 4, 0),
+ (81, 3, 1), (81, 2, 0), (81, 1, 0), (82, 2, 1),
+ (83, 2, 0), (90, 6, 4), (91, 21, 12), (93, 37, 20),
+ (86, 78, 12), (79, 119, 5), (97, 133, 3), (115, 147, 2),
+ (125, 221, 147), (140, 230, 163), (155, 239, 179), (117, 204, 139),
+ (80, 170, 100), (70, 162, 96), (60, 154, 92), (71, 113, 67),
+ (81, 85, 48), (93, 36, 19), (80, 63, 11), (67, 91, 3),
+ (68, 90, 1), (70, 90, 0), (83, 65, 2), (96, 40, 5),
+ (100, 13, 3), (94, 6, 2), (89, 0, 1), (88, 2, 1),
+ (88, 5, 1), (90, 5, 0), (92, 5, 0), (94, 7, 0),
+ (97, 8, 0), (96, 9, 0), (95, 8, 0), (94, 7, 0),
+ (94, 7, 0), (94, 7, 0), (94, 7, 0), (94, 7, 0),
+ (84, 11, 5), (87, 14, 2), (90, 17, 0), (92, 24, 7),
+ (94, 31, 14), (94, 36, 18), (94, 41, 23), (62, 87, 45),
+ (58, 120, 69), (49, 139, 75), (59, 130, 44), (69, 121, 13),
+ (83, 113, 8), (98, 106, 3), (105, 67, 2), (98, 34, 6),
+ (96, 19, 1), (95, 20, 4), (95, 22, 7), (94, 20, 6),
+ (94, 18, 5), (93, 17, 1), (96, 12, 1), (95, 10, 3),
+ (98, 10, 0), (103, 15, 3), (100, 18, 5), (97, 21, 8),
+ (98, 24, 10), (100, 28, 13), (99, 33, 17), (99, 30, 15),
+ (113, 21, 10), (106, 20, 9), (99, 19, 8), (98, 19, 7),
+ (97, 19, 7), (97, 15, 3), (92, 13, 0), (85, 6, 1),
+ (85, 4, 1), (84, 3, 0), (85, 3, 0), (87, 4, 0),
+ (93, 5, 1), (94, 6, 2), (91, 6, 1), (86, 6, 0),
+ (85, 6, 1), (90, 15, 0), (96, 24, 0), (97, 40, 3),
+ (98, 56, 6), (62, 90, 3), (57, 89, 6), (52, 88, 0),
+ (48, 88, 0), (46, 86, 0), (46, 86, 0), (46, 86, 0),
+ (46, 86, 0), (45, 83, 0), (45, 84, 3), (46, 85, 2),
+ (60, 86, 0), (79, 60, 9), (98, 35, 18), (96, 34, 18),
+ (95, 33, 18), (97, 30, 14), (95, 29, 13), (95, 33, 18),
+ (94, 41, 23), (72, 105, 0), (70, 97, 0), (69, 89, 0),
+ (95, 38, 19), (93, 34, 18), (92, 27, 9), (97, 21, 8),
+ (96, 24, 0), (96, 24, 0), (96, 24, 0), (96, 23, 8),
+ (95, 29, 15), (90, 29, 24), (93, 40, 22), (62, 88, 1),
+ (66, 93, 0), (100, 66, 3), (97, 50, 11), (94, 35, 19),
+ (97, 25, 11), (100, 18, 6), (105, 5, 3), (113, 5, 2),
+ (128, 25, 0), (135, 26, 6), (143, 27, 12), (152, 34, 22),
+ (155, 62, 31), (116, 114, 63), (141, 191, 106), (195, 200, 142),
+ (220, 226, 120), (248, 246, 159), (231, 186, 157), (232, 195, 177),
+ (226, 227, 209), (230, 241, 185), (190, 228, 189), (173, 222, 167),
+ (165, 180, 139), (145, 141, 106), (126, 102, 74), (107, 78, 48),
+ (102, 37, 19), (107, 68, 3), (129, 114, 13), (80, 131, 12),
+ (69, 140, 74), (63, 170, 114), (61, 182, 115), (51, 175, 112),
+ (56, 152, 89), (58, 120, 53), (69, 111, 9), (66, 89, 0),
+ (95, 40, 20), (95, 28, 12), (97, 21, 7), (92, 16, 0),
+ (90, 17, 0), (86, 23, 6), (93, 35, 13), (66, 87, 0),
+ (56, 92, 0), (54, 92, 0), (56, 85, 1), (63, 85, 0),
+ (94, 35, 17), (94, 27, 11), (96, 24, 2), (96, 24, 0),
+ (96, 24, 0), (100, 35, 3), (128, 86, 10), (137, 113, 27),
+ (156, 134, 14), (168, 175, 131), (192, 203, 163), (196, 225, 220),
+ (231, 251, 223), (255, 251, 252), (241, 236, 240), (241, 230, 208),
+ (164, 192, 151), (121, 138, 94), (132, 97, 57), (110, 55, 34),
+ (96, 40, 23), (94, 41, 23), (60, 86, 0), (51, 85, 0),
+ (49, 85, 0), (47, 85, 0), (48, 88, 0), (49, 89, 3),
+ (59, 99, 2), (55, 102, 48), (53, 137, 75), (52, 151, 87),
+ (54, 134, 73), (96, 101, 61), (96, 44, 23), (109, 37, 22),
+ (137, 54, 38), (164, 64, 48), (162, 52, 39), (163, 29, 28),
+ (158, 0, 0), (134, 26, 13), (116, 27, 13), (109, 42, 25)
+ ),
+
+// 259 Apophysis-040427-51KaosFish
+((75, 31, 90), (79, 34, 89), (77, 32, 89), (75, 31, 90),
+ (75, 31, 90), (75, 31, 90), (77, 32, 89), (79, 34, 89),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (77, 32, 89),
+ (75, 31, 90), (75, 31, 90), (75, 31, 90), (75, 31, 90),
+ (75, 31, 90), (75, 31, 90), (75, 31, 90), (75, 31, 90),
+ (77, 32, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (80, 33, 90), (82, 32, 91), (128, 73, 80),
+ (175, 114, 70), (199, 135, 70), (224, 157, 70), (225, 158, 71),
+ (224, 157, 70), (198, 125, 46), (194, 127, 33), (190, 130, 20),
+ (184, 137, 25), (178, 145, 30), (176, 145, 33), (174, 146, 36),
+ (163, 146, 38), (122, 92, 64), (81, 38, 91), (80, 36, 90),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (79, 34, 89), (77, 32, 89), (75, 31, 90),
+ (65, 39, 54), (56, 47, 18), (62, 51, 15), (69, 56, 12),
+ (104, 75, 0), (144, 107, 16), (184, 140, 33), (205, 149, 51),
+ (226, 159, 70), (225, 159, 71), (225, 159, 72), (227, 161, 74),
+ (231, 164, 73), (225, 189, 49), (205, 169, 41), (186, 149, 34),
+ (199, 157, 53), (212, 165, 73), (226, 167, 75), (216, 157, 101),
+ (192, 169, 137), (196, 146, 167), (200, 124, 198), (188, 116, 206),
+ (177, 108, 214), (127, 104, 179), (78, 101, 145), (81, 33, 93),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (77, 32, 89), (75, 31, 90), (75, 31, 90), (78, 28, 91),
+ (80, 32, 90), (114, 48, 109), (149, 64, 129), (158, 93, 121),
+ (167, 123, 114), (178, 137, 115), (190, 148, 110), (195, 153, 113),
+ (215, 156, 100), (224, 157, 70), (202, 130, 45), (181, 103, 20),
+ (179, 98, 19), (177, 94, 18), (133, 84, 15), (84, 49, 17),
+ (75, 31, 90), (77, 32, 89), (79, 34, 89), (53, 25, 52),
+ (28, 16, 16), (13, 0, 17), (37, 31, 19), (51, 11, 61),
+ (80, 35, 90), (177, 112, 90), (184, 127, 88), (192, 143, 87),
+ (195, 153, 113), (193, 159, 122), (200, 171, 129), (199, 165, 127),
+ (178, 137, 115), (152, 117, 104), (127, 98, 94), (103, 66, 91),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (81, 34, 88), (177, 113, 75), (197, 123, 76), (218, 133, 78),
+ (224, 158, 71), (226, 165, 72), (231, 168, 75), (226, 169, 82),
+ (190, 155, 115), (185, 145, 112), (181, 135, 109), (184, 126, 88),
+ (170, 114, 79), (169, 142, 61), (166, 144, 43), (167, 145, 46),
+ (158, 117, 99), (77, 139, 196), (75, 139, 181), (74, 140, 166),
+ (64, 115, 119), (87, 127, 54), (137, 107, 45), (177, 95, 19),
+ (182, 110, 8), (179, 105, 10), (177, 101, 13), (124, 90, 3),
+ (79, 65, 20), (71, 29, 79), (75, 31, 90), (79, 34, 89),
+ (98, 102, 51), (113, 118, 36), (116, 103, 50), (71, 88, 43),
+ (71, 29, 77), (78, 33, 88), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (76, 33, 67), (74, 32, 46), (68, 43, 13),
+ (69, 43, 10), (52, 28, 2), (52, 48, 10), (36, 61, 19),
+ (39, 78, 11), (56, 108, 10), (91, 86, 22), (134, 98, 24),
+ (175, 93, 17), (169, 80, 0), (142, 26, 3), (69, 57, 17),
+ (35, 84, 28), (29, 66, 58), (48, 78, 28), (87, 71, 12),
+ (140, 88, 13), (177, 94, 18), (182, 102, 17), (178, 96, 20),
+ (136, 59, 49), (84, 36, 84), (79, 34, 89), (79, 34, 89),
+ (75, 31, 90), (75, 31, 90), (75, 31, 90), (75, 31, 90),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (81, 37, 70), (92, 80, 20), (141, 92, 23), (170, 123, 19),
+ (186, 128, 18), (193, 114, 19), (179, 121, 21), (162, 123, 32),
+ (116, 110, 26), (69, 60, 17), (17, 44, 0), (23, 27, 4),
+ (0, 5, 4), (17, 0, 26), (34, 1, 46), (58, 16, 54),
+ (71, 29, 79), (75, 31, 90), (74, 33, 93), (37, 68, 115),
+ (26, 93, 109), (51, 119, 104), (62, 107, 126), (50, 89, 122),
+ (39, 69, 121), (78, 34, 95), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (79, 34, 89), (79, 34, 89), (79, 34, 89),
+ (79, 34, 89), (75, 31, 90), (75, 31, 90), (75, 31, 90)
+ ),
+
+// 260 Apophysis-040427-51KKlown
+((41, 23, 105), (134, 59, 141), (137, 63, 125), (140, 67, 110),
+ (182, 109, 89), (224, 152, 68), (237, 165, 81), (250, 178, 94),
+ (252, 211, 61), (240, 232, 50), (229, 254, 39), (221, 219, 46),
+ (213, 184, 54), (158, 175, 67), (103, 167, 81), (86, 153, 94),
+ (70, 139, 108), (78, 106, 120), (133, 76, 126), (189, 47, 133),
+ (205, 25, 133), (222, 3, 133), (202, 1, 127), (182, 0, 121),
+ (62, 28, 44), (42, 37, 38), (23, 47, 33), (74, 74, 38),
+ (126, 101, 44), (158, 128, 38), (191, 155, 33), (226, 159, 46),
+ (255, 136, 63), (226, 146, 95), (217, 138, 120), (208, 130, 146),
+ (159, 103, 144), (111, 76, 142), (70, 65, 139), (30, 55, 137),
+ (47, 50, 57), (30, 83, 72), (13, 116, 87), (62, 113, 116),
+ (111, 111, 145), (130, 115, 138), (149, 119, 131), (213, 170, 115),
+ (255, 190, 121), (255, 240, 76), (254, 222, 109), (253, 205, 143),
+ (222, 191, 164), (191, 178, 185), (156, 162, 177), (122, 146, 170),
+ (151, 198, 143), (126, 187, 129), (102, 176, 115), (75, 113, 111),
+ (48, 50, 107), (35, 42, 102), (23, 34, 98), (4, 95, 100),
+ (23, 92, 61), (33, 111, 27), (84, 120, 22), (136, 130, 18),
+ (147, 124, 9), (159, 118, 0), (236, 118, 31), (220, 91, 23),
+ (95, 113, 5), (64, 96, 27), (33, 79, 50), (33, 107, 60),
+ (34, 136, 71), (39, 136, 62), (44, 136, 53), (61, 160, 17),
+ (50, 144, 8), (113, 98, 7), (146, 115, 56), (179, 132, 106),
+ (189, 144, 90), (199, 157, 75), (145, 180, 64), (135, 160, 43),
+ (132, 94, 45), (153, 65, 35), (174, 36, 26), (202, 22, 13),
+ (231, 8, 0), (251, 8, 12), (214, 20, 44), (204, 22, 11),
+ (188, 64, 13), (147, 33, 58), (107, 34, 37), (67, 36, 16),
+ (59, 53, 12), (52, 70, 8), (37, 132, 2), (41, 134, 2),
+ (117, 191, 6), (139, 189, 24), (162, 187, 43), (171, 202, 48),
+ (180, 218, 53), (194, 226, 67), (195, 200, 106), (173, 187, 151),
+ (202, 178, 174), (214, 174, 87), (211, 166, 93), (208, 159, 100),
+ (211, 136, 141), (188, 134, 186), (220, 115, 197), (254, 110, 208),
+ (222, 51, 117), (230, 44, 85), (239, 38, 54), (197, 35, 44),
+ (155, 32, 34), (107, 35, 23), (76, 36, 24), (53, 29, 27),
+ (92, 19, 26), (165, 11, 81), (167, 7, 88), (169, 4, 96),
+ (168, 10, 133), (185, 21, 136), (184, 26, 121), (218, 18, 117),
+ (222, 5, 60), (223, 2, 47), (224, 0, 34), (224, 0, 19),
+ (224, 0, 4), (184, 2, 17), (121, 11, 0), (97, 39, 17),
+ (72, 54, 30), (16, 92, 17), (14, 106, 9), (13, 121, 2),
+ (18, 136, 58), (46, 146, 74), (67, 136, 92), (126, 169, 115),
+ (215, 231, 70), (234, 240, 94), (253, 250, 119), (245, 251, 155),
+ (255, 246, 185), (255, 240, 188), (254, 243, 213), (242, 197, 220),
+ (226, 185, 203), (227, 132, 176), (237, 124, 182), (248, 116, 189),
+ (237, 72, 176), (255, 49, 169), (253, 14, 157), (229, 25, 94),
+ (254, 4, 14), (253, 3, 11), (252, 3, 9), (241, 5, 5),
+ (223, 1, 0), (186, 20, 0), (125, 20, 1), (122, 54, 9),
+ (101, 53, 33), (99, 96, 55), (121, 122, 114), (96, 148, 112),
+ (49, 141, 130), (0, 128, 109), (0, 133, 76), (0, 123, 75),
+ (21, 111, 60), (16, 106, 61), (11, 101, 63), (1, 62, 54),
+ (7, 32, 52), (61, 28, 57), (61, 6, 61), (155, 2, 82),
+ (206, 12, 47), (219, 34, 75), (180, 43, 125), (170, 25, 128),
+ (150, 82, 165), (146, 129, 165), (164, 149, 214), (198, 230, 225),
+ (224, 217, 211), (239, 193, 196), (255, 206, 173), (242, 213, 135),
+ (218, 237, 60), (186, 222, 38), (195, 170, 18), (171, 162, 5),
+ (69, 140, 10), (46, 107, 27), (52, 69, 0), (99, 58, 14),
+ (147, 47, 21), (188, 87, 77), (207, 95, 49), (217, 92, 72),
+ (234, 106, 95), (239, 75, 102), (210, 92, 108), (185, 82, 109),
+ (146, 68, 144), (140, 121, 140), (156, 208, 134), (169, 220, 117),
+ (163, 230, 124), (177, 209, 168), (250, 252, 187), (249, 242, 200),
+ (255, 241, 222), (255, 253, 243), (232, 228, 255), (241, 234, 228),
+ (255, 237, 204), (255, 206, 173), (179, 185, 113), (102, 169, 66),
+ (64, 158, 10), (62, 141, 0), (100, 79, 22), (149, 21, 20),
+ (170, 11, 31), (209, 0, 41), (234, 0, 61), (255, 11, 129),
+ (239, 3, 148), (248, 0, 140), (255, 0, 75), (241, 0, 26),
+ (255, 5, 17), (242, 8, 7), (237, 11, 0), (242, 7, 3),
+ (228, 0, 0), (215, 40, 9), (210, 42, 0), (219, 63, 4)
+ ),
+
+// 261 Apophysis-040427-51KaosEgg
+((113, 89, 87), (97, 73, 69), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (98, 73, 69),
+ (110, 89, 86), (129, 130, 114), (138, 137, 125), (148, 145, 136),
+ (132, 121, 112), (116, 98, 88), (114, 91, 84), (113, 85, 81),
+ (100, 75, 71), (112, 85, 80), (125, 96, 90), (148, 124, 110),
+ (171, 153, 131), (183, 167, 152), (195, 182, 173), (216, 213, 208),
+ (245, 241, 242), (214, 211, 204), (188, 184, 179), (163, 158, 155),
+ (155, 150, 146), (148, 143, 137), (136, 122, 122), (125, 108, 92),
+ (112, 114, 101), (130, 134, 116), (149, 154, 132), (162, 157, 134),
+ (176, 160, 137), (177, 161, 138), (178, 162, 139), (178, 168, 143),
+ (175, 170, 148), (184, 175, 166), (191, 177, 169), (198, 179, 173),
+ (192, 169, 162), (186, 159, 152), (170, 150, 125), (138, 104, 95),
+ (106, 83, 75), (101, 77, 71), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (96, 71, 67), (82, 63, 66), (69, 56, 65), (63, 50, 60),
+ (58, 45, 55), (63, 43, 45), (55, 48, 42), (60, 42, 38),
+ (59, 41, 37), (53, 46, 40), (50, 44, 39), (47, 42, 39),
+ (39, 30, 31), (38, 24, 21), (43, 24, 28), (52, 32, 33),
+ (78, 54, 52), (84, 60, 58), (90, 66, 64), (89, 66, 63),
+ (88, 67, 62), (84, 65, 61), (80, 56, 54), (72, 46, 47),
+ (63, 42, 41), (78, 54, 52), (81, 55, 52), (85, 57, 53),
+ (89, 61, 57), (96, 68, 65), (95, 70, 66), (90, 66, 62),
+ (70, 50, 49), (56, 37, 39), (43, 24, 30), (37, 23, 26),
+ (32, 22, 23), (39, 26, 20), (39, 35, 26), (47, 43, 32),
+ (61, 59, 47), (94, 70, 66), (95, 70, 66), (96, 71, 67),
+ (97, 72, 68), (97, 72, 68), (96, 72, 70), (100, 81, 74),
+ (133, 116, 124), (145, 127, 134), (158, 139, 145), (164, 154, 153),
+ (163, 158, 154), (159, 146, 153), (149, 130, 124), (138, 104, 95),
+ (122, 100, 102), (112, 94, 106), (115, 97, 108), (118, 101, 111),
+ (130, 114, 124), (142, 139, 130), (159, 154, 148), (162, 157, 151),
+ (150, 140, 141), (143, 131, 139), (136, 122, 137), (137, 122, 129),
+ (134, 117, 125), (117, 112, 108), (117, 115, 103), (110, 102, 100),
+ (104, 86, 82), (91, 75, 88), (81, 63, 77), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (98, 80, 70),
+ (105, 109, 94), (106, 106, 94), (107, 104, 95), (106, 99, 91),
+ (97, 99, 85), (95, 95, 83), (96, 75, 70), (97, 72, 68),
+ (98, 76, 65), (99, 80, 65), (113, 90, 76), (126, 102, 90),
+ (137, 123, 114), (146, 150, 133), (160, 155, 149), (156, 161, 141),
+ (152, 157, 135), (141, 130, 124), (118, 111, 103), (111, 93, 89),
+ (98, 78, 71), (94, 75, 69), (89, 73, 60), (79, 66, 50),
+ (69, 52, 45), (59, 41, 37), (50, 31, 37), (47, 28, 34),
+ (56, 31, 34), (53, 32, 39), (63, 45, 45), (72, 72, 62),
+ (73, 73, 65), (78, 78, 66), (81, 82, 68), (93, 75, 63),
+ (96, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (95, 71, 67), (90, 65, 60), (85, 60, 53),
+ (75, 54, 51), (60, 42, 38), (44, 25, 31), (38, 18, 27),
+ (31, 17, 17), (30, 16, 15), (24, 12, 12), (23, 11, 11),
+ (30, 16, 15), (35, 20, 17), (38, 21, 29), (44, 39, 33),
+ (56, 46, 44), (71, 52, 48), (81, 60, 59), (94, 70, 66),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68),
+ (97, 72, 68), (97, 72, 68), (97, 72, 68), (97, 72, 68)
+ ),
+
+// 262 Apophysis-040427-51LavLace
+((253, 226, 233), (255, 184, 235), (246, 195, 223), (238, 206, 211),
+ (229, 208, 210), (221, 211, 210), (210, 202, 198), (200, 193, 187),
+ (212, 212, 210), (226, 214, 223), (241, 216, 237), (243, 202, 235),
+ (245, 188, 233), (247, 208, 230), (249, 229, 228), (247, 236, 237),
+ (246, 244, 247), (255, 229, 246), (252, 238, 249), (249, 247, 252),
+ (235, 248, 234), (222, 249, 216), (225, 239, 218), (228, 229, 221),
+ (230, 227, 210), (236, 229, 218), (242, 231, 227), (241, 221, 229),
+ (240, 211, 231), (244, 195, 232), (248, 179, 234), (255, 175, 231),
+ (255, 181, 222), (240, 171, 225), (234, 176, 219), (229, 182, 214),
+ (215, 171, 192), (202, 160, 170), (192, 137, 165), (183, 114, 161),
+ (180, 139, 153), (205, 190, 161), (230, 242, 170), (218, 243, 201),
+ (207, 245, 232), (191, 241, 210), (175, 237, 188), (185, 204, 172),
+ (165, 160, 214), (137, 100, 133), (105, 63, 103), (74, 26, 74),
+ (67, 25, 64), (60, 25, 55), (60, 23, 51), (61, 21, 47),
+ (47, 10, 41), (51, 13, 39), (55, 16, 37), (69, 22, 44),
+ (83, 29, 52), (80, 31, 62), (78, 33, 72), (76, 36, 73),
+ (76, 36, 73), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (95, 41, 77),
+ (151, 88, 135), (174, 121, 158), (197, 154, 182), (212, 147, 188),
+ (227, 140, 195), (212, 148, 183), (198, 157, 171), (179, 134, 137),
+ (145, 84, 128), (80, 35, 74), (82, 37, 78), (85, 40, 83),
+ (109, 57, 99), (133, 75, 116), (160, 88, 154), (171, 105, 151),
+ (127, 65, 114), (102, 51, 94), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (81, 43, 80),
+ (152, 81, 147), (163, 103, 155), (175, 125, 163), (180, 152, 167),
+ (186, 179, 171), (187, 197, 173), (171, 184, 167), (176, 165, 159),
+ (168, 152, 129), (128, 109, 103), (113, 88, 89), (99, 68, 76),
+ (76, 38, 75), (75, 37, 74), (75, 37, 74), (75, 37, 74),
+ (77, 36, 76), (116, 65, 105), (156, 94, 135), (174, 129, 158),
+ (193, 164, 182), (226, 221, 201), (244, 238, 216), (255, 254, 227),
+ (255, 243, 222), (221, 212, 183), (206, 201, 180), (192, 190, 178),
+ (163, 155, 134), (138, 111, 128), (116, 58, 96), (82, 30, 76),
+ (126, 83, 110), (156, 121, 136), (186, 160, 163), (193, 162, 167),
+ (200, 165, 172), (204, 165, 186), (202, 157, 177), (202, 141, 174),
+ (174, 107, 158), (83, 38, 81), (79, 36, 76), (75, 35, 72),
+ (71, 26, 69), (66, 26, 63), (61, 25, 63), (68, 23, 62),
+ (66, 27, 71), (71, 28, 72), (76, 29, 73), (76, 36, 73),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (74, 36, 75), (75, 37, 78), (83, 44, 91), (138, 62, 126),
+ (178, 0, 122), (93, 37, 86), (80, 35, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 72), (87, 31, 66),
+ (102, 44, 68), (145, 84, 81), (166, 97, 115), (145, 96, 118),
+ (88, 50, 87), (75, 40, 80), (75, 37, 76), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (77, 37, 74), (77, 37, 74), (77, 37, 74), (77, 37, 74),
+ (117, 75, 85), (149, 126, 120), (188, 156, 169), (229, 171, 193),
+ (240, 193, 213), (255, 186, 223), (240, 165, 221), (235, 170, 224),
+ (222, 168, 202), (207, 172, 204), (195, 177, 199), (203, 180, 188),
+ (212, 191, 190), (229, 190, 195), (233, 192, 210), (224, 189, 211),
+ (213, 184, 176), (179, 178, 160), (167, 164, 145), (181, 155, 138),
+ (195, 148, 156), (219, 183, 149), (245, 210, 180), (255, 235, 219),
+ (251, 251, 241), (254, 255, 244), (252, 255, 250), (252, 254, 251),
+ (252, 247, 254), (255, 248, 255), (255, 254, 255), (248, 255, 253),
+ (244, 255, 253), (243, 253, 252), (229, 255, 235), (246, 255, 248)
+ ),
+
+// 263 Apophysis-040427-51mudding
+((171, 134, 128), (227, 182, 163), (227, 197, 170), (227, 213, 178),
+ (205, 187, 161), (183, 162, 145), (174, 156, 134), (166, 150, 124),
+ (135, 112, 78), (123, 94, 64), (111, 77, 50), (123, 80, 44),
+ (136, 83, 39), (140, 90, 51), (144, 98, 64), (144, 98, 78),
+ (145, 98, 92), (132, 121, 137), (151, 132, 141), (170, 144, 145),
+ (170, 150, 153), (171, 156, 161), (169, 157, 165), (168, 158, 169),
+ (181, 157, 145), (186, 160, 134), (191, 163, 123), (195, 169, 134),
+ (199, 176, 145), (198, 181, 143), (198, 187, 141), (200, 185, 146),
+ (217, 193, 165), (188, 184, 136), (192, 179, 112), (196, 174, 89),
+ (187, 166, 99), (179, 159, 109), (174, 155, 94), (170, 152, 80),
+ (170, 140, 104), (181, 141, 105), (193, 143, 106), (200, 148, 122),
+ (207, 154, 138), (220, 166, 153), (233, 179, 169), (230, 216, 203),
+ (248, 232, 235), (255, 255, 255), (252, 253, 253), (250, 252, 251),
+ (237, 244, 244), (225, 236, 238), (216, 218, 214), (207, 200, 190),
+ (162, 157, 153), (143, 139, 141), (125, 122, 129), (107, 103, 110),
+ (90, 85, 92), (88, 75, 83), (87, 66, 75), (90, 62, 40),
+ (75, 55, 30), (62, 33, 19), (54, 33, 13), (46, 34, 8),
+ (50, 37, 9), (55, 40, 11), (59, 50, 9), (59, 48, 18),
+ (65, 49, 15), (68, 53, 19), (71, 58, 24), (95, 81, 42),
+ (119, 104, 61), (130, 115, 72), (141, 126, 83), (161, 152, 113),
+ (199, 194, 154), (255, 244, 229), (251, 248, 227), (247, 253, 225),
+ (238, 242, 228), (230, 232, 231), (213, 195, 183), (222, 188, 160),
+ (151, 167, 190), (157, 161, 181), (164, 155, 172), (166, 147, 151),
+ (168, 139, 131), (156, 130, 113), (146, 110, 88), (138, 108, 72),
+ (129, 99, 63), (133, 107, 84), (141, 129, 106), (150, 152, 128),
+ (156, 168, 145), (163, 185, 162), (179, 213, 197), (175, 197, 236),
+ (188, 218, 180), (194, 210, 160), (201, 203, 140), (187, 200, 129),
+ (174, 197, 119), (171, 161, 92), (179, 128, 97), (173, 101, 87),
+ (177, 91, 68), (131, 117, 90), (123, 115, 89), (115, 113, 88),
+ (105, 97, 94), (100, 99, 81), (100, 92, 73), (92, 71, 68),
+ (71, 48, 34), (60, 41, 28), (49, 35, 22), (51, 35, 21),
+ (53, 35, 21), (62, 35, 16), (65, 41, 3), (67, 39, 2),
+ (93, 39, 13), (106, 76, 38), (117, 81, 44), (129, 86, 51),
+ (134, 100, 62), (151, 119, 72), (157, 117, 68), (160, 128, 67),
+ (166, 137, 93), (165, 132, 97), (165, 128, 101), (160, 124, 93),
+ (155, 121, 86), (145, 113, 102), (125, 109, 86), (123, 87, 71),
+ (112, 75, 59), (93, 52, 34), (91, 57, 29), (90, 62, 25),
+ (93, 63, 27), (98, 66, 27), (109, 55, 17), (117, 69, 20),
+ (110, 71, 30), (112, 77, 34), (114, 83, 39), (119, 94, 53),
+ (109, 97, 49), (112, 88, 44), (104, 80, 46), (97, 69, 30),
+ (83, 65, 19), (58, 41, 0), (56, 38, 5), (55, 35, 10),
+ (45, 29, 0), (37, 27, 0), (34, 15, 1), (26, 23, 6),
+ (36, 28, 15), (40, 32, 15), (45, 37, 16), (55, 46, 17),
+ (76, 47, 13), (74, 60, 23), (81, 68, 26), (86, 70, 36),
+ (97, 79, 55), (111, 87, 77), (122, 101, 116), (130, 135, 155),
+ (166, 169, 212), (192, 180, 226), (174, 169, 175), (195, 179, 146),
+ (202, 170, 145), (197, 165, 143), (193, 160, 141), (197, 164, 133),
+ (179, 143, 107), (153, 121, 100), (135, 100, 72), (124, 84, 59),
+ (106, 80, 53), (95, 76, 43), (90, 73, 47), (94, 70, 42),
+ (98, 69, 39), (98, 74, 36), (93, 71, 32), (93, 69, 35),
+ (88, 57, 36), (78, 56, 33), (84, 55, 25), (86, 60, 27),
+ (97, 66, 37), (99, 72, 51), (109, 93, 67), (119, 97, 73),
+ (114, 125, 95), (124, 131, 98), (136, 124, 100), (147, 135, 119),
+ (138, 138, 126), (130, 116, 107), (137, 116, 95), (134, 109, 79),
+ (132, 106, 73), (122, 90, 69), (123, 102, 75), (123, 108, 89),
+ (129, 116, 107), (143, 130, 114), (167, 140, 121), (171, 140, 119),
+ (150, 134, 101), (146, 127, 85), (137, 113, 77), (123, 94, 64),
+ (118, 95, 61), (110, 93, 65), (99, 86, 67), (91, 84, 76),
+ (79, 88, 87), (100, 92, 79), (114, 96, 76), (117, 92, 72),
+ (118, 94, 70), (112, 92, 65), (115, 88, 59), (105, 83, 60),
+ (115, 80, 58), (121, 90, 61), (127, 100, 55), (145, 93, 56),
+ (149, 76, 67), (141, 76, 48), (143, 72, 40), (104, 73, 45),
+ (79, 71, 50), (50, 62, 58), (76, 63, 55), (85, 58, 37),
+ (86, 65, 36), (92, 74, 54), (99, 85, 74), (94, 74, 65)
+ ),
+
+// 264 Apophysis-040427-51pane;
+((154, 121, 5), (154, 121, 5), (154, 121, 5), (154, 121, 5),
+ (152, 120, 5), (151, 119, 6), (149, 117, 6), (147, 115, 6),
+ (135, 113, 37), (131, 118, 32), (127, 124, 27), (121, 118, 34),
+ (115, 112, 41), (96, 94, 59), (77, 77, 77), (76, 76, 76),
+ (76, 76, 76), (42, 54, 14), (36, 42, 10), (31, 31, 7),
+ (38, 37, 7), (46, 43, 8), (64, 61, 11), (83, 79, 15),
+ (142, 115, 70), (149, 127, 97), (156, 140, 125), (163, 154, 132),
+ (170, 169, 139), (172, 172, 139), (175, 175, 139), (169, 168, 137),
+ (147, 172, 140), (178, 144, 98), (171, 140, 63), (164, 136, 29),
+ (157, 127, 17), (150, 118, 5), (146, 114, 5), (142, 111, 5),
+ (120, 95, 5), (105, 83, 4), (90, 71, 3), (66, 51, 4),
+ (42, 32, 5), (37, 30, 4), (33, 29, 4), (28, 30, 6),
+ (33, 28, 6), (58, 55, 10), (76, 65, 10), (94, 76, 10),
+ (88, 78, 12), (82, 81, 14), (83, 82, 15), (84, 83, 16),
+ (129, 119, 24), (142, 124, 25), (156, 129, 26), (149, 123, 44),
+ (142, 117, 63), (134, 116, 58), (127, 116, 54), (123, 121, 46),
+ (129, 126, 29), (115, 113, 30), (99, 98, 23), (84, 83, 16),
+ (75, 73, 14), (66, 64, 13), (41, 41, 7), (31, 31, 7),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (8, 6, 3),
+ (16, 13, 6), (32, 16, 6), (49, 20, 6), (82, 34, 12),
+ (100, 59, 15), (113, 88, 4), (125, 96, 17), (138, 104, 30),
+ (139, 112, 38), (140, 120, 47), (143, 139, 68), (141, 128, 83),
+ (158, 160, 155), (178, 165, 155), (198, 170, 156), (199, 179, 163),
+ (201, 188, 171), (190, 184, 150), (181, 177, 140), (173, 172, 128),
+ (163, 162, 118), (163, 142, 53), (175, 130, 69), (187, 118, 85),
+ (173, 124, 79), (159, 130, 74), (148, 126, 68), (131, 123, 50),
+ (152, 121, 5), (153, 121, 5), (154, 121, 5), (154, 121, 5),
+ (154, 121, 5), (153, 120, 5), (150, 118, 5), (135, 106, 4),
+ (123, 97, 4), (93, 99, 27), (97, 99, 28), (102, 99, 30),
+ (108, 98, 26), (117, 99, 27), (134, 105, 5), (148, 116, 5),
+ (151, 119, 6), (147, 102, 12), (143, 86, 19), (157, 76, 19),
+ (172, 67, 19), (136, 87, 18), (137, 108, 6), (150, 118, 5),
+ (152, 121, 5), (154, 121, 5), (154, 121, 5), (154, 121, 5),
+ (154, 121, 5), (154, 121, 5), (154, 121, 5), (153, 120, 4),
+ (151, 118, 5), (141, 111, 4), (132, 104, 4), (128, 101, 4),
+ (124, 98, 5), (123, 97, 4), (123, 96, 5), (106, 94, 18),
+ (113, 111, 24), (130, 127, 24), (148, 134, 32), (166, 141, 41),
+ (172, 148, 42), (164, 134, 24), (159, 127, 14), (156, 120, 6),
+ (154, 121, 5), (154, 121, 5), (154, 121, 5), (154, 121, 5),
+ (153, 120, 5), (150, 118, 5), (139, 110, 6), (130, 102, 3),
+ (117, 91, 4), (79, 77, 16), (72, 70, 14), (66, 64, 13),
+ (73, 36, 9), (86, 51, 13), (102, 73, 15), (95, 76, 10),
+ (104, 83, 2), (100, 80, 8), (96, 78, 14), (105, 88, 18),
+ (101, 95, 19), (102, 96, 18), (101, 98, 17), (112, 108, 19),
+ (135, 106, 6), (149, 117, 4), (153, 120, 4), (154, 121, 5),
+ (154, 121, 5), (154, 121, 5), (154, 121, 5), (154, 121, 5),
+ (150, 122, 15), (146, 129, 20), (142, 136, 26), (134, 131, 24),
+ (128, 125, 22), (127, 123, 23), (128, 125, 22), (149, 117, 6),
+ (142, 111, 5), (134, 105, 3), (121, 96, 4), (104, 82, 6),
+ (92, 72, 3), (53, 48, 10), (39, 32, 6), (31, 29, 6),
+ (32, 30, 7), (46, 43, 8), (79, 75, 14), (82, 81, 14),
+ (73, 71, 12), (48, 46, 8), (34, 30, 5), (27, 26, 6),
+ (2, 7, 3), (0, 0, 0), (0, 0, 0), (3, 3, 3),
+ (25, 29, 6), (46, 40, 8), (94, 74, 3), (108, 86, 3),
+ (132, 104, 4), (150, 118, 5), (153, 120, 4), (154, 121, 5),
+ (154, 121, 5), (154, 121, 5), (154, 121, 5), (154, 121, 5),
+ (154, 121, 5), (153, 120, 5), (150, 118, 5), (148, 116, 5),
+ (138, 109, 5), (133, 104, 4), (134, 105, 3), (148, 116, 5),
+ (153, 120, 4), (151, 120, 4), (145, 115, 5), (131, 103, 4),
+ (116, 92, 4), (95, 75, 4), (55, 54, 10), (36, 35, 5),
+ (31, 31, 7), (36, 35, 5), (47, 45, 7), (93, 73, 2),
+ (115, 91, 3), (131, 103, 4), (145, 115, 5), (152, 119, 4),
+ (153, 120, 4), (154, 121, 5), (154, 121, 5), (154, 121, 5),
+ (154, 121, 5), (154, 121, 5), (154, 121, 5), (154, 121, 5)
+ ),
+
+// 265 Apophysis-040427-51RiftAO
+((172, 134, 37), (141, 80, 23), (110, 58, 23), (80, 36, 23),
+ (60, 40, 22), (41, 45, 22), (40, 45, 21), (40, 46, 20),
+ (52, 23, 19), (49, 21, 12), (47, 19, 5), (46, 16, 8),
+ (45, 14, 11), (48, 16, 11), (51, 18, 11), (53, 19, 12),
+ (55, 20, 14), (61, 24, 16), (67, 29, 19), (74, 34, 22),
+ (78, 34, 13), (82, 35, 5), (92, 42, 7), (102, 49, 9),
+ (98, 70, 20), (85, 64, 31), (72, 59, 42), (54, 50, 47),
+ (37, 41, 53), (36, 40, 52), (36, 40, 52), (33, 47, 21),
+ (28, 54, 17), (38, 44, 18), (36, 41, 13), (35, 38, 9),
+ (42, 28, 9), (49, 19, 9), (50, 21, 8), (52, 23, 7),
+ (68, 28, 18), (66, 27, 17), (65, 27, 16), (58, 23, 14),
+ (52, 19, 12), (48, 16, 11), (44, 13, 10), (27, 7, 8),
+ (21, 3, 3), (8, 5, 0), (8, 3, 0), (8, 1, 0),
+ (16, 6, 1), (25, 11, 2), (31, 13, 3), (37, 15, 4),
+ (36, 36, 8), (33, 38, 8), (31, 40, 9), (33, 39, 9),
+ (35, 38, 9), (37, 38, 11), (39, 39, 13), (53, 35, 23),
+ (69, 32, 26), (102, 70, 31), (123, 88, 57), (145, 107, 84),
+ (145, 112, 92), (146, 117, 101), (161, 124, 72), (164, 141, 73),
+ (131, 79, 81), (124, 79, 59), (117, 80, 38), (98, 58, 29),
+ (80, 37, 20), (84, 45, 23), (89, 54, 26), (76, 65, 37),
+ (56, 65, 34), (35, 38, 55), (29, 32, 45), (24, 27, 36),
+ (21, 22, 31), (18, 18, 26), (16, 11, 5), (10, 7, 2),
+ (15, 7, 4), (16, 12, 15), (18, 18, 26), (21, 22, 31),
+ (24, 27, 36), (24, 27, 36), (24, 27, 36), (18, 18, 26),
+ (0, 1, 32), (0, 1, 0), (7, 4, 0), (14, 7, 1),
+ (22, 10, 2), (30, 13, 3), (53, 24, 8), (72, 37, 15),
+ (124, 62, 13), (154, 73, 26), (185, 84, 40), (187, 105, 47),
+ (190, 126, 54), (148, 108, 116), (94, 106, 158), (82, 94, 146),
+ (70, 80, 133), (50, 54, 66), (55, 59, 53), (60, 64, 41),
+ (80, 70, 35), (115, 88, 77), (166, 137, 129), (154, 160, 150),
+ (231, 199, 238), (233, 214, 198), (236, 229, 159), (217, 201, 148),
+ (199, 173, 138), (183, 148, 118), (173, 133, 107), (167, 126, 94),
+ (154, 111, 79), (140, 88, 64), (141, 96, 63), (143, 104, 63),
+ (150, 105, 86), (124, 94, 86), (84, 82, 96), (64, 62, 73),
+ (46, 49, 64), (41, 44, 58), (36, 40, 52), (32, 36, 49),
+ (29, 32, 47), (25, 27, 40), (22, 25, 42), (24, 28, 37),
+ (24, 27, 36), (24, 27, 36), (24, 27, 36), (24, 27, 36),
+ (22, 26, 35), (17, 17, 25), (19, 5, 4), (25, 0, 0),
+ (45, 12, 7), (51, 12, 5), (57, 13, 4), (71, 23, 0),
+ (75, 24, 3), (74, 6, 0), (41, 5, 0), (36, 8, 5),
+ (30, 12, 2), (23, 3, 2), (22, 3, 2), (21, 3, 3),
+ (21, 2, 0), (13, 0, 0), (9, 6, 0), (12, 9, 0),
+ (38, 16, 3), (36, 27, 6), (35, 38, 9), (39, 45, 19),
+ (52, 55, 24), (45, 54, 27), (37, 46, 19), (36, 42, 16),
+ (35, 38, 9), (35, 38, 9), (35, 38, 9), (35, 38, 9),
+ (36, 16, 5), (29, 11, 1), (18, 9, 0), (16, 9, 0),
+ (31, 11, 0), (33, 12, 0), (36, 14, 1), (37, 15, 2),
+ (38, 16, 3), (38, 18, 7), (35, 38, 9), (35, 38, 9),
+ (47, 19, 7), (44, 18, 5), (44, 18, 5), (44, 18, 5),
+ (41, 17, 5), (40, 16, 4), (40, 16, 4), (41, 17, 5),
+ (44, 18, 5), (59, 22, 14), (71, 32, 17), (94, 48, 24),
+ (122, 88, 42), (150, 107, 75), (171, 136, 106), (215, 190, 149),
+ (229, 211, 173), (251, 216, 194), (203, 200, 207), (173, 175, 196),
+ (143, 144, 172), (179, 186, 194), (204, 231, 226), (204, 208, 211),
+ (222, 208, 159), (167, 171, 136), (146, 158, 118), (137, 135, 114),
+ (100, 100, 126), (71, 74, 89), (48, 49, 69), (54, 56, 34),
+ (39, 45, 19), (35, 38, 9), (31, 16, 11), (18, 18, 26),
+ (24, 27, 36), (24, 27, 36), (24, 27, 36), (24, 27, 36),
+ (24, 27, 36), (25, 28, 37), (25, 28, 37), (34, 32, 35),
+ (46, 14, 15), (48, 19, 13), (47, 20, 13), (24, 27, 34),
+ (24, 27, 36), (24, 27, 36), (24, 27, 36), (24, 27, 36),
+ (24, 28, 37), (26, 29, 44), (32, 36, 48), (34, 37, 54),
+ (29, 31, 52), (22, 23, 71), (30, 38, 61), (46, 49, 66),
+ (57, 58, 76), (84, 75, 94), (158, 138, 105), (139, 128, 110)
+ ),
+
+// 266 Apophysis-040427-51ylwAlien
+((6, 7, 2), (0, 1, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 1, 1), (13, 0, 0), (96, 38, 2), (180, 76, 5),
+ (194, 110, 25), (208, 144, 46), (213, 146, 45), (219, 148, 44),
+ (234, 179, 50), (224, 176, 55), (214, 174, 60), (199, 173, 52),
+ (184, 173, 45), (169, 159, 38), (155, 145, 32), (69, 120, 0),
+ (60, 107, 11), (202, 105, 26), (224, 113, 40), (247, 122, 55),
+ (218, 95, 35), (190, 69, 16), (138, 59, 17), (86, 50, 18),
+ (2, 2, 4), (1, 1, 2), (0, 0, 0), (0, 0, 1),
+ (0, 0, 2), (0, 0, 3), (0, 1, 4), (0, 0, 7),
+ (0, 2, 8), (46, 105, 23), (137, 147, 40), (228, 190, 57),
+ (232, 201, 58), (237, 212, 60), (239, 219, 68), (244, 218, 69),
+ (240, 204, 64), (241, 187, 58), (242, 170, 52), (240, 166, 48),
+ (239, 162, 44), (239, 173, 48), (239, 185, 53), (245, 217, 58),
+ (247, 221, 64), (255, 242, 77), (253, 243, 69), (251, 245, 61),
+ (252, 235, 66), (254, 225, 71), (243, 218, 74), (244, 212, 161),
+ (245, 218, 225), (248, 229, 235), (252, 241, 245), (252, 245, 241),
+ (252, 250, 238), (245, 246, 238), (243, 212, 207), (246, 223, 81),
+ (249, 224, 72), (230, 182, 54), (174, 128, 38), (118, 75, 22),
+ (79, 46, 16), (41, 18, 10), (5, 2, 9), (1, 0, 4),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (2, 2, 2),
+ (101, 129, 52), (148, 153, 47), (196, 178, 42), (200, 181, 45),
+ (204, 184, 49), (217, 150, 46), (177, 134, 39), (81, 54, 11),
+ (9, 5, 4), (15, 1, 0), (40, 17, 3), (65, 34, 6),
+ (114, 71, 36), (185, 134, 45), (222, 151, 45), (248, 174, 51),
+ (250, 185, 57), (237, 169, 48), (225, 154, 40), (202, 105, 26),
+ (133, 33, 17), (45, 8, 0), (3, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (10, 0, 0),
+ (45, 18, 7), (113, 44, 5), (191, 113, 41), (218, 151, 47),
+ (234, 205, 209), (235, 210, 221), (237, 216, 233), (241, 222, 242),
+ (230, 233, 224), (240, 229, 207), (211, 220, 173), (234, 213, 70),
+ (241, 216, 72), (246, 222, 64), (247, 224, 66), (248, 222, 65),
+ (247, 220, 67), (243, 216, 63), (234, 187, 55), (235, 184, 56),
+ (235, 184, 57), (209, 188, 69), (170, 170, 100), (91, 119, 35),
+ (55, 51, 26), (5, 3, 8), (0, 0, 2), (2, 1, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 2, 0), (7, 3, 0), (66, 35, 15), (125, 143, 83),
+ (172, 172, 148), (195, 204, 175), (211, 220, 193), (213, 191, 116),
+ (235, 211, 75), (232, 211, 68), (228, 199, 71), (213, 193, 46),
+ (175, 154, 11), (104, 83, 30), (30, 20, 18), (3, 3, 1),
+ (1, 1, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 1), (11, 1, 0), (77, 57, 0),
+ (144, 158, 13), (185, 187, 24), (206, 148, 51), (165, 117, 45),
+ (61, 42, 36), (15, 11, 10), (1, 1, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (3, 0, 0)
+ ),
+
+// 267 Apophysis-040427-51elecforest
+((0, 0, 0), (0, 0, 0), (0, 1, 0), (0, 2, 1),
+ (7, 6, 10), (14, 11, 20), (32, 30, 33), (50, 49, 47),
+ (130, 35, 129), (92, 45, 86), (54, 56, 43), (65, 64, 44),
+ (77, 73, 46), (100, 74, 63), (124, 75, 81), (143, 61, 100),
+ (162, 48, 120), (223, 15, 163), (231, 57, 141), (239, 100, 119),
+ (221, 139, 102), (204, 179, 86), (197, 172, 86), (191, 166, 86),
+ (142, 159, 166), (130, 117, 149), (119, 76, 132), (77, 58, 81),
+ (35, 41, 31), (18, 22, 19), (2, 3, 8), (0, 0, 5),
+ (0, 0, 5), (0, 0, 4), (1, 4, 4), (3, 9, 5),
+ (44, 45, 31), (86, 82, 57), (110, 96, 80), (135, 110, 103),
+ (223, 204, 200), (238, 225, 219), (253, 246, 238), (199, 218, 182),
+ (145, 191, 126), (149, 197, 109), (153, 203, 92), (160, 189, 73),
+ (142, 168, 95), (85, 117, 78), (45, 76, 53), (5, 36, 28),
+ (2, 21, 14), (0, 6, 0), (0, 4, 0), (0, 2, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 1), (7, 3, 4), (33, 20, 0),
+ (121, 45, 11), (129, 49, 14), (138, 54, 18), (117, 58, 26),
+ (97, 62, 34), (82, 50, 29), (68, 39, 25), (12, 7, 4),
+ (13, 0, 2), (3, 0, 4), (10, 10, 15), (17, 20, 27),
+ (38, 47, 23), (59, 74, 19), (98, 104, 66), (121, 148, 81),
+ (186, 199, 119), (204, 210, 113), (222, 222, 108), (213, 198, 106),
+ (204, 175, 105), (243, 136, 56), (171, 99, 74), (169, 35, 86),
+ (138, 17, 112), (105, 49, 26), (52, 31, 13), (0, 14, 0),
+ (0, 10, 0), (0, 6, 0), (3, 3, 11), (11, 50, 55),
+ (8, 109, 105), (89, 122, 99), (170, 135, 93), (188, 125, 104),
+ (207, 116, 115), (220, 138, 124), (220, 130, 165), (255, 211, 214),
+ (255, 222, 208), (224, 135, 67), (199, 102, 37), (174, 70, 7),
+ (164, 54, 17), (131, 50, 5), (85, 64, 0), (43, 33, 0),
+ (0, 3, 0), (0, 2, 0), (0, 1, 0), (0, 1, 0),
+ (0, 1, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (3, 3, 3), (6, 3, 7), (10, 3, 11), (50, 43, 35),
+ (82, 76, 54), (76, 123, 69), (42, 136, 22), (43, 113, 14),
+ (38, 97, 3), (10, 30, 2), (1, 3, 0), (1, 1, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 0, 0), (3, 0, 0), (7, 7, 0), (32, 36, 3),
+ (92, 112, 15), (109, 138, 56), (162, 129, 58), (170, 150, 1),
+ (150, 89, 22), (149, 67, 56), (89, 30, 24), (31, 0, 2),
+ (5, 0, 3), (1, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 1, 0), (9, 7, 0), (65, 37, 15), (107, 74, 41),
+ (170, 120, 61), (186, 163, 67), (173, 160, 82), (131, 118, 84),
+ (79, 75, 74), (14, 25, 29), (3, 0, 11), (1, 0, 8),
+ (0, 0, 4), (0, 0, 4), (0, 0, 2), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (3, 0, 0),
+ (8, 3, 0), (25, 0, 0), (91, 22, 25), (154, 32, 81),
+ (157, 7, 45), (147, 24, 6), (171, 25, 12), (177, 38, 7),
+ (245, 0, 0), (209, 14, 12), (185, 24, 58), (233, 4, 107),
+ (244, 23, 152), (253, 79, 166), (246, 94, 155), (249, 74, 81),
+ (249, 76, 72), (240, 95, 90), (199, 112, 69), (163, 124, 85),
+ (81, 94, 76), (27, 76, 93), (16, 82, 96), (60, 71, 54)
+ ),
+
+// 268 Apophysis-040427-51ReachMoon
+((140, 144, 33), (114, 88, 29), (73, 79, 38), (32, 70, 47),
+ (32, 51, 34), (32, 32, 22), (42, 32, 20), (52, 33, 19),
+ (103, 76, 29), (141, 113, 28), (180, 150, 28), (191, 164, 32),
+ (203, 178, 36), (191, 169, 35), (180, 160, 35), (166, 143, 34),
+ (152, 127, 34), (76, 35, 53), (83, 52, 43), (90, 70, 33),
+ (110, 92, 34), (131, 114, 36), (146, 124, 38), (161, 135, 40),
+ (192, 143, 41), (205, 142, 39), (218, 141, 37), (181, 130, 33),
+ (144, 119, 29), (136, 109, 30), (129, 100, 32), (115, 80, 22),
+ (108, 77, 22), (52, 35, 27), (56, 29, 34), (60, 23, 41),
+ (64, 24, 47), (69, 26, 54), (68, 27, 55), (67, 28, 57),
+ (66, 29, 60), (62, 20, 59), (58, 12, 59), (58, 11, 58),
+ (59, 10, 57), (59, 10, 57), (60, 11, 58), (60, 11, 58),
+ (60, 11, 58), (59, 13, 60), (59, 29, 47), (59, 45, 34),
+ (95, 74, 26), (131, 103, 19), (141, 119, 28), (152, 136, 38),
+ (183, 163, 38), (176, 156, 36), (169, 149, 34), (142, 122, 33),
+ (116, 96, 33), (103, 85, 34), (90, 75, 36), (39, 78, 51),
+ (33, 97, 125), (103, 143, 93), (66, 100, 91), (29, 58, 90),
+ (29, 53, 86), (29, 49, 82), (25, 39, 68), (47, 14, 59),
+ (46, 13, 58), (51, 14, 45), (56, 15, 33), (51, 14, 21),
+ (47, 14, 9), (47, 14, 9), (47, 14, 9), (56, 31, 9),
+ (54, 31, 17), (59, 34, 14), (60, 41, 22), (61, 48, 31),
+ (66, 53, 34), (71, 59, 37), (96, 87, 48), (126, 117, 60),
+ (122, 115, 60), (104, 87, 38), (87, 60, 17), (78, 53, 14),
+ (70, 46, 12), (55, 36, 22), (57, 24, 45), (66, 27, 54),
+ (69, 26, 54), (69, 26, 54), (63, 24, 54), (57, 22, 55),
+ (58, 16, 55), (60, 11, 56), (59, 10, 57), (55, 11, 60),
+ (54, 12, 60), (56, 11, 57), (59, 10, 55), (57, 11, 48),
+ (56, 13, 41), (55, 14, 30), (55, 14, 30), (53, 15, 30),
+ (54, 15, 33), (47, 14, 59), (39, 18, 67), (31, 22, 75),
+ (28, 32, 95), (26, 43, 87), (36, 36, 88), (50, 35, 78),
+ (71, 24, 70), (68, 26, 65), (66, 29, 60), (66, 29, 60),
+ (66, 29, 60), (69, 26, 54), (69, 26, 54), (69, 26, 54),
+ (69, 26, 54), (55, 27, 52), (55, 27, 52), (55, 27, 52),
+ (50, 27, 53), (52, 31, 40), (57, 41, 28), (68, 47, 20),
+ (108, 94, 49), (135, 113, 74), (162, 133, 99), (163, 133, 87),
+ (164, 133, 76), (147, 136, 54), (168, 144, 36), (186, 156, 32),
+ (203, 163, 39), (227, 178, 120), (226, 199, 116), (225, 221, 113),
+ (225, 191, 153), (240, 212, 175), (250, 240, 230), (179, 181, 202),
+ (163, 157, 133), (150, 140, 141), (137, 123, 149), (123, 109, 98),
+ (89, 55, 69), (68, 29, 58), (69, 26, 54), (69, 26, 54),
+ (69, 26, 54), (69, 26, 54), (70, 29, 52), (72, 33, 51),
+ (87, 71, 48), (123, 118, 54), (165, 152, 40), (191, 184, 34),
+ (211, 196, 45), (210, 203, 47), (210, 210, 50), (216, 191, 49),
+ (216, 186, 40), (203, 176, 33), (182, 156, 33), (143, 127, 39),
+ (104, 93, 47), (74, 35, 53), (69, 26, 54), (69, 26, 54),
+ (69, 26, 54), (69, 26, 54), (72, 33, 51), (101, 73, 23),
+ (116, 96, 33), (114, 101, 44), (112, 106, 56), (36, 142, 42),
+ (30, 98, 97), (23, 61, 100), (36, 56, 81), (53, 36, 80),
+ (65, 28, 61), (66, 29, 60), (68, 33, 65), (66, 29, 60),
+ (67, 28, 57), (69, 26, 54), (69, 26, 54), (66, 27, 54),
+ (56, 27, 55), (51, 14, 58), (47, 9, 58), (53, 11, 59),
+ (54, 12, 60), (55, 11, 60), (55, 11, 60), (59, 10, 57),
+ (59, 12, 54), (67, 22, 51), (69, 26, 54), (66, 27, 54),
+ (56, 26, 52), (51, 14, 58), (55, 25, 51), (53, 30, 50),
+ (44, 33, 29), (24, 26, 47), (19, 25, 51), (23, 24, 44),
+ (50, 28, 49), (67, 28, 57), (76, 35, 53), (71, 53, 29),
+ (76, 50, 13), (64, 40, 12), (53, 23, 31), (60, 12, 52),
+ (59, 10, 55), (59, 10, 55), (59, 10, 55), (59, 10, 57),
+ (59, 10, 57), (59, 10, 55), (59, 12, 54), (57, 25, 49),
+ (57, 22, 44), (57, 22, 44), (57, 24, 45), (51, 31, 42),
+ (27, 24, 45), (18, 25, 53), (14, 41, 84), (15, 58, 77),
+ (20, 61, 105), (37, 40, 95), (36, 35, 93), (36, 37, 91),
+ (37, 38, 92), (48, 35, 89), (53, 30, 74), (52, 30, 51),
+ (53, 32, 47), (49, 29, 38), (52, 29, 35), (53, 24, 29)
+ ),
+
+// 269 Apophysis-040427-51satPhlox
+((137, 75, 14), (98, 74, 46), (91, 85, 80), (84, 97, 114),
+ (64, 79, 96), (44, 61, 79), (36, 57, 78), (28, 54, 77),
+ (81, 64, 46), (95, 67, 39), (110, 71, 32), (155, 89, 23),
+ (200, 107, 14), (186, 123, 59), (173, 140, 105), (170, 145, 116),
+ (168, 150, 128), (179, 219, 255), (164, 205, 244), (150, 192, 234),
+ (130, 187, 244), (111, 183, 255), (106, 184, 255), (102, 186, 255),
+ (35, 157, 255), (29, 150, 255), (23, 144, 255), (40, 152, 255),
+ (57, 160, 255), (61, 156, 248), (65, 153, 242), (55, 158, 253),
+ (40, 164, 254), (19, 152, 255), (22, 152, 255), (25, 152, 255),
+ (49, 163, 255), (73, 175, 255), (86, 180, 255), (99, 186, 255),
+ (137, 207, 255), (144, 207, 254), (151, 207, 254), (131, 203, 253),
+ (112, 199, 253), (108, 192, 254), (105, 185, 255), (80, 158, 233),
+ (17, 111, 201), (1, 78, 150), (1, 67, 133), (2, 56, 116),
+ (25, 97, 169), (49, 138, 222), (79, 154, 228), (110, 171, 234),
+ (210, 232, 253), (232, 243, 253), (255, 255, 253), (249, 251, 254),
+ (244, 247, 255), (224, 242, 255), (205, 238, 255), (203, 243, 251),
+ (197, 241, 254), (198, 235, 254), (169, 212, 248), (140, 190, 243),
+ (129, 175, 222), (119, 161, 201), (110, 118, 131), (96, 80, 65),
+ (17, 18, 22), (9, 37, 67), (1, 56, 112), (1, 79, 160),
+ (1, 102, 208), (0, 110, 224), (0, 118, 241), (0, 137, 255),
+ (2, 125, 254), (1, 100, 202), (1, 74, 152), (2, 49, 103),
+ (7, 36, 71), (12, 24, 40), (0, 10, 22), (1, 9, 22),
+ (33, 23, 13), (47, 30, 13), (62, 38, 14), (71, 45, 19),
+ (80, 53, 24), (110, 67, 25), (112, 67, 25), (114, 67, 23),
+ (121, 68, 16), (119, 75, 30), (124, 83, 38), (129, 91, 46),
+ (139, 115, 87), (149, 139, 129), (118, 136, 150), (109, 144, 174),
+ (71, 114, 156), (76, 107, 138), (82, 100, 120), (89, 92, 96),
+ (97, 85, 73), (94, 70, 42), (106, 68, 23), (77, 51, 24),
+ (61, 30, 1), (31, 15, 0), (24, 11, 0), (17, 8, 1),
+ (9, 4, 0), (0, 0, 0), (0, 0, 0), (1, 1, 1),
+ (0, 17, 43), (8, 44, 84), (16, 71, 125), (15, 85, 154),
+ (15, 100, 183), (10, 111, 215), (9, 133, 255), (35, 133, 232),
+ (68, 150, 234), (85, 145, 207), (88, 136, 185), (92, 128, 164),
+ (92, 117, 139), (55, 63, 74), (37, 36, 34), (18, 15, 10),
+ (2, 1, 0), (1, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (7, 4, 0), (12, 8, 0), (34, 17, 1),
+ (50, 26, 0), (89, 60, 30), (93, 70, 45), (98, 80, 60),
+ (113, 102, 98), (98, 112, 123), (94, 110, 125), (99, 98, 96),
+ (64, 51, 42), (56, 46, 37), (49, 42, 32), (30, 26, 25),
+ (31, 32, 34), (1, 35, 73), (0, 60, 118), (0, 82, 168),
+ (0, 105, 214), (0, 139, 255), (18, 145, 255), (36, 152, 255),
+ (47, 162, 255), (58, 168, 255), (64, 170, 254), (70, 160, 248),
+ (38, 130, 217), (31, 118, 198), (24, 106, 180), (48, 101, 153),
+ (62, 97, 129), (60, 65, 69), (77, 51, 24), (66, 31, 1),
+ (62, 28, 0), (58, 26, 1), (53, 25, 1), (44, 23, 2),
+ (36, 17, 0), (39, 18, 1), (40, 26, 13), (53, 40, 23),
+ (58, 63, 69), (58, 67, 78), (58, 71, 87), (43, 82, 123),
+ (20, 70, 119), (1, 75, 150), (6, 87, 168), (0, 91, 186),
+ (13, 106, 202), (37, 135, 232), (73, 161, 250), (112, 198, 255),
+ (144, 216, 254), (181, 225, 254), (187, 236, 253), (189, 234, 253),
+ (191, 233, 255), (195, 226, 255), (201, 240, 255), (225, 248, 254),
+ (250, 254, 255), (224, 240, 255), (206, 231, 253), (183, 222, 255),
+ (146, 208, 255), (102, 169, 237), (33, 127, 223), (0, 102, 205),
+ (3, 82, 161), (14, 56, 98), (30, 47, 63), (14, 17, 22),
+ (0, 8, 21), (1, 4, 13), (1, 4, 13), (0, 7, 15),
+ (10, 20, 30), (19, 52, 85), (35, 92, 147), (35, 107, 181),
+ (100, 161, 218), (119, 169, 220), (112, 165, 219), (111, 147, 183),
+ (129, 115, 104), (99, 83, 68), (106, 66, 31), (70, 41, 11),
+ (64, 30, 2), (59, 28, 0), (64, 31, 0), (83, 45, 6),
+ (113, 66, 22), (115, 67, 18), (110, 66, 17), (70, 34, 0),
+ (49, 23, 0), (23, 11, 0), (8, 3, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (7, 3, 0),
+ (11, 6, 2), (35, 28, 20), (50, 43, 35), (87, 77, 67),
+ (102, 106, 109), (119, 152, 187), (190, 214, 238), (150, 185, 223)
+ ),
+
+// 270 Apophysis-040427-51SnikRchg
+((234, 180, 156), (154, 82, 60), (130, 60, 45), (107, 39, 30),
+ (82, 29, 32), (57, 19, 34), (58, 19, 36), (59, 20, 38),
+ (102, 56, 66), (146, 87, 75), (191, 118, 85), (191, 119, 87),
+ (191, 120, 90), (177, 106, 83), (164, 92, 77), (161, 70, 64),
+ (158, 49, 52), (184, 18, 56), (191, 22, 75), (198, 27, 95),
+ (206, 64, 130), (215, 102, 166), (202, 122, 153), (190, 142, 140),
+ (145, 99, 101), (105, 65, 76), (66, 31, 51), (49, 20, 35),
+ (32, 9, 19), (43, 12, 28), (54, 16, 37), (82, 44, 59),
+ (133, 75, 74), (209, 131, 95), (226, 154, 104), (243, 178, 114),
+ (246, 201, 114), (250, 224, 114), (250, 227, 125), (251, 231, 136),
+ (244, 225, 166), (244, 228, 202), (245, 232, 239), (249, 243, 242),
+ (254, 255, 245), (252, 250, 228), (250, 246, 211), (243, 238, 182),
+ (231, 207, 147), (203, 142, 113), (197, 130, 103), (191, 119, 94),
+ (169, 68, 76), (148, 17, 59), (128, 24, 53), (108, 31, 47),
+ (42, 11, 17), (38, 9, 14), (34, 7, 12), (67, 9, 26),
+ (101, 12, 40), (119, 28, 33), (137, 44, 27), (142, 45, 28),
+ (137, 54, 84), (154, 118, 118), (187, 130, 152), (221, 142, 187),
+ (221, 134, 185), (222, 127, 183), (242, 129, 149), (204, 112, 125),
+ (212, 18, 55), (208, 15, 54), (204, 13, 54), (201, 13, 54),
+ (199, 14, 55), (201, 14, 54), (203, 14, 54), (200, 26, 51),
+ (173, 84, 52), (161, 66, 48), (172, 45, 50), (183, 24, 52),
+ (180, 19, 41), (177, 14, 31), (185, 15, 44), (188, 17, 69),
+ (172, 141, 149), (187, 146, 145), (202, 152, 141), (198, 142, 127),
+ (194, 133, 114), (196, 120, 96), (185, 88, 79), (161, 31, 69),
+ (103, 26, 78), (25, 60, 64), (26, 34, 42), (27, 9, 21),
+ (26, 9, 19), (25, 10, 17), (15, 5, 16), (2, 6, 7),
+ (4, 13, 22), (12, 11, 21), (20, 10, 21), (20, 8, 22),
+ (21, 7, 24), (15, 9, 23), (11, 8, 25), (20, 5, 34),
+ (41, 8, 55), (98, 66, 89), (113, 85, 105), (129, 105, 121),
+ (155, 125, 135), (99, 129, 181), (88, 142, 170), (100, 155, 176),
+ (190, 225, 159), (206, 211, 147), (222, 198, 136), (229, 199, 137),
+ (236, 200, 138), (235, 171, 123), (206, 150, 123), (190, 195, 129),
+ (197, 233, 161), (168, 218, 241), (163, 217, 240), (159, 217, 239),
+ (155, 221, 233), (154, 215, 199), (192, 227, 171), (169, 212, 140),
+ (200, 140, 112), (197, 126, 99), (194, 113, 86), (197, 69, 72),
+ (200, 25, 58), (201, 16, 47), (198, 16, 41), (192, 15, 35),
+ (191, 8, 39), (195, 17, 49), (199, 16, 49), (203, 15, 50),
+ (202, 14, 49), (201, 14, 45), (202, 16, 39), (208, 13, 43),
+ (220, 24, 62), (218, 29, 68), (217, 35, 75), (209, 96, 82),
+ (216, 135, 79), (219, 121, 82), (234, 80, 88), (222, 31, 82),
+ (222, 25, 78), (228, 90, 88), (233, 119, 93), (238, 148, 98),
+ (246, 163, 111), (243, 157, 122), (238, 195, 140), (252, 214, 165),
+ (233, 157, 203), (226, 166, 187), (220, 175, 172), (218, 166, 168),
+ (200, 172, 171), (194, 162, 163), (162, 185, 133), (170, 211, 132),
+ (183, 218, 150), (210, 232, 167), (231, 202, 222), (224, 240, 253),
+ (238, 224, 224), (228, 238, 177), (237, 212, 156), (252, 195, 128),
+ (241, 165, 105), (239, 160, 102), (238, 156, 100), (235, 154, 99),
+ (233, 147, 98), (203, 126, 100), (160, 97, 90), (107, 72, 78),
+ (88, 56, 80), (96, 61, 94), (80, 114, 162), (98, 173, 196),
+ (159, 211, 233), (169, 215, 239), (194, 237, 194), (192, 231, 166),
+ (204, 228, 152), (192, 227, 171), (187, 225, 244), (176, 227, 246),
+ (180, 217, 243), (170, 202, 227), (185, 158, 167), (178, 152, 155),
+ (123, 159, 123), (130, 197, 104), (109, 185, 110), (106, 152, 123),
+ (99, 172, 187), (109, 213, 206), (133, 216, 234), (142, 217, 238),
+ (148, 215, 232), (138, 215, 233), (130, 215, 235), (116, 205, 223),
+ (115, 196, 217), (109, 153, 188), (171, 148, 156), (176, 156, 167),
+ (163, 211, 163), (151, 216, 186), (154, 224, 232), (154, 225, 243),
+ (167, 230, 248), (161, 226, 244), (155, 223, 242), (153, 224, 242),
+ (152, 223, 225), (163, 225, 184), (161, 216, 132), (143, 192, 110),
+ (116, 140, 104), (108, 77, 83), (111, 54, 61), (96, 47, 32),
+ (109, 22, 28), (106, 54, 41), (98, 47, 64), (100, 32, 73),
+ (100, 69, 84), (120, 82, 103), (163, 103, 115), (180, 113, 105),
+ (180, 130, 97), (198, 131, 102), (204, 139, 101), (205, 131, 94),
+ (211, 130, 100), (230, 141, 101), (245, 139, 125), (233, 191, 166)
+ ),
+
+// 271 Apophysis-040427-51SmwhrDream
+((40, 44, 29), (132, 60, 64), (142, 89, 47), (153, 119, 30),
+ (173, 136, 35), (193, 153, 40), (186, 153, 59), (179, 153, 78),
+ (193, 153, 118), (188, 139, 90), (183, 125, 62), (173, 91, 31),
+ (163, 58, 0), (170, 100, 47), (177, 143, 95), (184, 152, 111),
+ (192, 162, 128), (189, 164, 142), (177, 166, 141), (166, 169, 140),
+ (159, 167, 144), (153, 166, 148), (157, 162, 143), (161, 158, 139),
+ (169, 160, 93), (134, 144, 59), (100, 128, 26), (91, 107, 14),
+ (82, 86, 2), (89, 76, 1), (96, 67, 1), (75, 64, 2),
+ (64, 64, 2), (63, 49, 2), (71, 48, 1), (79, 47, 0),
+ (75, 43, 0), (71, 39, 0), (72, 35, 3), (73, 31, 6),
+ (13, 10, 5), (7, 5, 3), (1, 1, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 0, 0),
+ (2, 1, 0), (26, 19, 1), (52, 45, 1), (78, 71, 1),
+ (108, 104, 55), (138, 138, 110), (160, 158, 138), (182, 178, 166),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (252, 230, 204),
+ (249, 206, 153), (239, 189, 149), (229, 173, 146), (215, 195, 160),
+ (212, 193, 160), (173, 163, 101), (145, 137, 55), (117, 112, 10),
+ (124, 104, 5), (131, 97, 0), (140, 103, 12), (143, 124, 32),
+ (143, 105, 68), (122, 108, 41), (101, 111, 15), (96, 103, 8),
+ (92, 96, 1), (97, 91, 4), (103, 86, 8), (124, 81, 2),
+ (136, 67, 0), (171, 73, 2), (161, 88, 11), (151, 103, 21),
+ (161, 127, 27), (172, 151, 34), (177, 151, 76), (143, 146, 93),
+ (137, 60, 70), (125, 55, 60), (114, 50, 51), (104, 47, 27),
+ (94, 45, 4), (69, 51, 5), (46, 34, 12), (27, 39, 1),
+ (40, 48, 1), (74, 76, 1), (68, 80, 0), (63, 85, 0),
+ (53, 80, 0), (44, 75, 0), (35, 84, 3), (15, 79, 1),
+ (28, 46, 0), (31, 61, 6), (34, 76, 12), (39, 78, 10),
+ (45, 81, 9), (58, 80, 7), (65, 84, 3), (65, 104, 21),
+ (71, 109, 26), (70, 70, 0), (71, 75, 1), (73, 80, 2),
+ (137, 125, 25), (102, 104, 7), (72, 86, 0), (47, 61, 0),
+ (54, 53, 0), (67, 50, 1), (80, 47, 2), (84, 50, 2),
+ (89, 53, 3), (97, 49, 0), (100, 50, 0), (95, 56, 0),
+ (80, 64, 5), (83, 77, 0), (85, 88, 0), (87, 99, 1),
+ (94, 87, 0), (105, 79, 4), (121, 94, 3), (126, 84, 2),
+ (81, 56, 0), (67, 57, 2), (54, 59, 5), (47, 64, 7),
+ (41, 69, 10), (40, 80, 9), (39, 95, 30), (24, 98, 73),
+ (4, 89, 58), (63, 80, 10), (72, 87, 7), (81, 94, 4),
+ (100, 94, 0), (125, 95, 0), (131, 117, 8), (170, 159, 5),
+ (195, 173, 12), (199, 176, 39), (203, 180, 66), (185, 167, 85),
+ (169, 155, 58), (139, 129, 32), (91, 114, 24), (86, 109, 19),
+ (101, 121, 22), (206, 143, 4), (222, 162, 6), (239, 181, 9),
+ (219, 203, 6), (180, 167, 9), (129, 124, 4), (97, 100, 0),
+ (63, 110, 32), (54, 108, 53), (45, 106, 75), (85, 135, 100),
+ (116, 129, 76), (132, 128, 81), (141, 120, 31), (130, 101, 1),
+ (163, 111, 2), (190, 121, 0), (201, 117, 1), (221, 102, 0),
+ (194, 102, 1), (158, 86, 1), (134, 74, 1), (121, 84, 31),
+ (136, 46, 58), (138, 58, 29), (140, 70, 1), (143, 85, 1),
+ (179, 106, 1), (228, 153, 10), (255, 181, 20), (253, 197, 22),
+ (255, 234, 45), (250, 234, 60), (208, 180, 141), (215, 168, 152),
+ (240, 183, 114), (240, 200, 25), (245, 180, 14), (218, 116, 15),
+ (175, 99, 3), (141, 97, 2), (140, 97, 5), (148, 105, 1),
+ (185, 103, 1), (228, 112, 3), (234, 108, 6), (252, 142, 17),
+ (228, 132, 12), (197, 141, 28), (183, 168, 87), (170, 150, 123),
+ (163, 156, 138), (139, 152, 124), (140, 134, 72), (161, 131, 19),
+ (176, 137, 10), (166, 118, 7), (147, 113, 3), (141, 90, 1),
+ (127, 91, 3), (118, 81, 1), (104, 59, 2), (78, 55, 1),
+ (31, 38, 0), (7, 30, 1), (0, 4, 0), (0, 1, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 3, 0),
+ (7, 10, 0), (18, 25, 7), (64, 35, 5), (97, 39, 2),
+ (135, 56, 0), (146, 48, 3), (127, 44, 0), (80, 37, 2),
+ (60, 7, 13), (24, 12, 0), (8, 1, 0), (2, 1, 0),
+ (1, 1, 1), (0, 0, 0), (0, 0, 0), (0, 0, 2),
+ (1, 0, 2), (1, 1, 1), (7, 15, 2), (16, 30, 4)
+ ),
+
+// 272 Apophysis-040427-51eyepuzzl
+((68, 193, 221), (51, 242, 255), (48, 241, 208), (46, 241, 162),
+ (43, 246, 96), (41, 251, 30), (25, 223, 32), (9, 195, 34),
+ (0, 226, 97), (0, 228, 159), (0, 231, 221), (0, 199, 201),
+ (0, 168, 181), (58, 109, 130), (117, 51, 79), (127, 32, 61),
+ (137, 14, 43), (198, 7, 50), (217, 19, 46), (237, 31, 43),
+ (195, 51, 21), (153, 71, 0), (127, 53, 18), (101, 35, 36),
+ (47, 112, 130), (59, 137, 153), (71, 163, 176), (35, 153, 165),
+ (0, 143, 154), (2, 123, 144), (5, 104, 135), (45, 68, 112),
+ (126, 8, 157), (204, 4, 190), (223, 18, 206), (242, 33, 222),
+ (219, 32, 205), (197, 31, 189), (184, 22, 205), (172, 14, 221),
+ (138, 11, 216), (144, 7, 187), (151, 3, 159), (155, 23, 110),
+ (159, 44, 61), (141, 65, 40), (124, 87, 19), (134, 103, 39),
+ (143, 121, 20), (150, 133, 17), (151, 135, 16), (153, 137, 16),
+ (149, 133, 15), (146, 129, 15), (144, 127, 15), (143, 125, 15),
+ (116, 107, 12), (112, 99, 13), (108, 92, 14), (102, 88, 9),
+ (96, 85, 5), (98, 85, 6), (101, 85, 7), (101, 90, 10),
+ (107, 92, 7), (107, 90, 12), (115, 93, 12), (123, 97, 13),
+ (118, 97, 11), (113, 97, 9), (114, 102, 4), (115, 94, 3),
+ (110, 96, 8), (120, 105, 8), (131, 114, 8), (150, 139, 8),
+ (169, 164, 8), (163, 174, 4), (158, 184, 0), (135, 221, 28),
+ (154, 207, 15), (168, 155, 0), (143, 130, 4), (118, 105, 9),
+ (113, 102, 6), (109, 99, 4), (93, 112, 0), (44, 108, 21),
+ (11, 174, 121), (26, 159, 109), (42, 145, 98), (61, 137, 68),
+ (80, 129, 38), (131, 124, 56), (159, 127, 44), (220, 150, 36),
+ (212, 207, 45), (223, 187, 31), (195, 164, 29), (168, 141, 28),
+ (164, 142, 32), (161, 144, 36), (158, 137, 20), (158, 138, 17),
+ (152, 133, 15), (147, 128, 14), (142, 124, 14), (134, 117, 14),
+ (127, 111, 15), (113, 97, 9), (97, 101, 17), (63, 109, 44),
+ (16, 136, 74), (0, 136, 103), (1, 138, 74), (3, 141, 46),
+ (12, 152, 21), (61, 135, 0), (71, 151, 2), (51, 144, 14),
+ (12, 141, 121), (26, 128, 102), (40, 115, 84), (56, 94, 61),
+ (72, 73, 39), (99, 90, 11), (102, 87, 6), (103, 88, 5),
+ (103, 88, 5), (105, 91, 3), (109, 92, 1), (114, 93, 0),
+ (128, 101, 0), (138, 119, 0), (143, 123, 11), (142, 124, 12),
+ (124, 104, 15), (107, 125, 31), (90, 146, 47), (87, 150, 64),
+ (84, 154, 82), (51, 228, 62), (13, 235, 10), (28, 203, 2),
+ (74, 158, 8), (140, 116, 20), (142, 122, 17), (145, 128, 14),
+ (149, 129, 14), (144, 127, 13), (142, 124, 14), (122, 101, 18),
+ (92, 93, 15), (68, 91, 20), (44, 90, 26), (16, 114, 65),
+ (19, 172, 108), (0, 204, 135), (1, 251, 162), (16, 227, 174),
+ (17, 211, 138), (56, 212, 17), (53, 189, 8), (51, 166, 0),
+ (103, 167, 0), (116, 179, 4), (129, 144, 0), (126, 107, 4),
+ (117, 105, 0), (128, 113, 5), (140, 122, 10), (143, 125, 15),
+ (144, 127, 13), (144, 126, 16), (137, 118, 15), (125, 104, 21),
+ (126, 87, 30), (152, 21, 26), (136, 20, 20), (113, 39, 36),
+ (108, 69, 26), (105, 87, 13), (103, 92, 10), (106, 91, 8),
+ (105, 86, 9), (105, 86, 8), (105, 86, 7), (106, 91, 6),
+ (117, 86, 3), (113, 84, 18), (111, 44, 2), (89, 70, 2),
+ (80, 70, 0), (89, 74, 5), (94, 80, 0), (98, 86, 10),
+ (80, 80, 6), (50, 80, 8), (12, 125, 0), (29, 137, 17),
+ (42, 131, 23), (74, 130, 29), (77, 123, 15), (96, 96, 10),
+ (101, 93, 10), (116, 100, 13), (122, 112, 50), (121, 118, 63),
+ (88, 129, 147), (55, 165, 192), (95, 153, 255), (44, 77, 193),
+ (106, 40, 200), (135, 28, 220), (193, 9, 243), (231, 36, 254),
+ (229, 18, 221), (249, 7, 154), (191, 0, 100), (244, 107, 39),
+ (251, 138, 42), (250, 226, 12), (250, 255, 38), (219, 255, 51),
+ (170, 238, 41), (156, 230, 13), (174, 156, 18), (163, 149, 14),
+ (158, 138, 17), (156, 135, 16), (155, 136, 16), (152, 133, 15),
+ (150, 135, 10), (146, 141, 15), (150, 133, 15), (135, 124, 9),
+ (124, 129, 9), (101, 154, 50), (68, 181, 91), (50, 243, 124),
+ (85, 238, 121), (71, 203, 83), (131, 218, 28), (176, 191, 38),
+ (209, 185, 37), (195, 185, 113), (200, 188, 114), (225, 126, 157),
+ (247, 23, 122), (192, 100, 37), (166, 114, 31), (163, 103, 0),
+ (154, 114, 29), (128, 123, 42), (159, 147, 75), (87, 221, 255)
+ ),
+
+// 273 Apophysis-040427-51SpherInBlm
+((144, 139, 107), (30, 25, 29), (38, 32, 37), (46, 39, 46),
+ (44, 43, 51), (43, 47, 56), (41, 50, 56), (39, 54, 57),
+ (47, 54, 62), (44, 58, 62), (42, 62, 63), (49, 80, 70),
+ (57, 99, 77), (79, 130, 119), (101, 161, 161), (111, 176, 177),
+ (121, 192, 194), (139, 224, 219), (132, 218, 207), (125, 212, 195),
+ (122, 200, 160), (119, 188, 125), (110, 167, 108), (102, 147, 92),
+ (82, 64, 62), (69, 42, 54), (57, 21, 47), (42, 26, 32),
+ (28, 32, 17), (28, 31, 17), (29, 31, 17), (27, 21, 9),
+ (29, 21, 8), (31, 29, 16), (41, 34, 16), (51, 39, 17),
+ (60, 47, 23), (70, 56, 29), (91, 67, 35), (113, 79, 41),
+ (130, 113, 85), (167, 119, 86), (205, 126, 87), (197, 137, 85),
+ (189, 148, 84), (164, 139, 89), (140, 130, 95), (106, 106, 108),
+ (113, 119, 91), (152, 148, 100), (177, 156, 101), (202, 164, 102),
+ (206, 156, 101), (211, 149, 100), (197, 144, 99), (184, 139, 98),
+ (122, 114, 125), (117, 118, 121), (113, 122, 117), (122, 143, 142),
+ (131, 165, 167), (142, 179, 179), (154, 193, 192), (212, 199, 191),
+ (229, 237, 213), (138, 218, 215), (128, 192, 198), (119, 167, 181),
+ (108, 160, 167), (98, 154, 153), (86, 150, 126), (81, 139, 115),
+ (96, 149, 155), (111, 169, 174), (126, 189, 194), (125, 194, 194),
+ (125, 200, 195), (125, 203, 189), (125, 207, 184), (177, 217, 154),
+ (211, 198, 145), (231, 201, 149), (209, 211, 154), (187, 221, 160),
+ (169, 216, 160), (152, 212, 161), (122, 207, 188), (121, 204, 184),
+ (76, 117, 119), (56, 89, 80), (37, 62, 41), (34, 49, 30),
+ (32, 36, 19), (24, 28, 14), (16, 22, 12), (12, 10, 11),
+ (15, 11, 12), (24, 22, 25), (30, 28, 33), (37, 34, 41),
+ (37, 35, 42), (38, 37, 43), (36, 36, 38), (23, 23, 25),
+ (16, 21, 15), (14, 18, 13), (13, 15, 12), (13, 14, 12),
+ (13, 13, 13), (13, 12, 8), (22, 18, 7), (22, 18, 7),
+ (17, 17, 7), (12, 11, 7), (12, 11, 7), (12, 11, 7),
+ (10, 10, 8), (9, 9, 7), (10, 10, 8), (11, 11, 9),
+ (11, 12, 7), (10, 10, 7), (10, 9, 7), (11, 8, 7),
+ (12, 8, 7), (12, 8, 7), (14, 8, 8), (14, 8, 8),
+ (13, 11, 12), (34, 39, 45), (47, 46, 54), (61, 53, 64),
+ (125, 83, 107), (169, 124, 105), (221, 115, 129), (212, 131, 137),
+ (199, 178, 125), (174, 192, 141), (150, 206, 157), (141, 216, 179),
+ (133, 227, 201), (141, 233, 220), (137, 227, 215), (126, 205, 199),
+ (126, 187, 188), (85, 91, 107), (77, 90, 103), (69, 89, 100),
+ (54, 80, 81), (56, 73, 81), (56, 66, 76), (54, 64, 74),
+ (48, 63, 70), (51, 60, 69), (55, 57, 69), (45, 55, 64),
+ (58, 48, 56), (68, 75, 44), (80, 80, 46), (68, 67, 37),
+ (64, 64, 36), (55, 53, 64), (51, 58, 67), (47, 64, 71),
+ (47, 64, 71), (50, 65, 72), (53, 77, 77), (71, 80, 89),
+ (123, 121, 83), (153, 139, 90), (184, 158, 97), (170, 182, 108),
+ (142, 196, 147), (107, 178, 148), (82, 128, 126), (69, 102, 109),
+ (50, 71, 76), (43, 40, 47), (22, 26, 25), (19, 21, 18),
+ (20, 30, 21), (21, 31, 23), (24, 35, 29), (31, 47, 46),
+ (61, 75, 86), (69, 95, 104), (77, 116, 123), (102, 161, 159),
+ (118, 177, 171), (128, 190, 187), (141, 196, 164), (177, 219, 156),
+ (202, 218, 156), (215, 189, 138), (220, 188, 137), (216, 186, 134),
+ (209, 182, 135), (200, 176, 116), (204, 170, 98), (196, 172, 112),
+ (165, 145, 147), (124, 165, 133), (109, 167, 129), (90, 137, 103),
+ (71, 113, 77), (64, 110, 84), (72, 113, 81), (79, 116, 83),
+ (85, 131, 105), (100, 160, 160), (112, 194, 171), (118, 191, 162),
+ (104, 177, 147), (88, 135, 101), (56, 85, 83), (47, 57, 66),
+ (31, 41, 43), (21, 31, 20), (18, 28, 19), (15, 15, 7),
+ (13, 12, 8), (16, 12, 13), (22, 18, 19), (23, 29, 17),
+ (27, 44, 28), (30, 51, 36), (31, 50, 44), (39, 48, 55),
+ (47, 46, 54), (51, 42, 47), (52, 52, 40), (67, 60, 32),
+ (49, 51, 30), (33, 50, 44), (37, 61, 48), (39, 70, 52),
+ (50, 78, 55), (57, 80, 86), (95, 96, 98), (94, 102, 104),
+ (97, 90, 108), (65, 79, 90), (59, 56, 67), (48, 61, 70),
+ (44, 69, 63), (51, 80, 75), (62, 94, 93), (80, 133, 115),
+ (116, 173, 164), (147, 196, 175), (186, 231, 172), (213, 213, 201),
+ (200, 226, 187), (179, 224, 169), (124, 200, 162), (112, 182, 146)
+ ),
+
+// 274 Apophysis-040427-51SunrisSpacTim
+((13, 63, 152), (76, 120, 215), (111, 148, 198), (147, 176, 182),
+ (169, 191, 176), (191, 207, 171), (193, 215, 166), (195, 223, 162),
+ (205, 235, 149), (219, 242, 138), (233, 249, 127), (234, 232, 119),
+ (235, 216, 111), (236, 235, 115), (237, 255, 119), (241, 246, 115),
+ (246, 238, 111), (236, 169, 64), (219, 158, 63), (202, 148, 62),
+ (177, 131, 68), (153, 114, 75), (138, 113, 100), (123, 112, 126),
+ (120, 159, 224), (123, 161, 231), (126, 164, 239), (128, 160, 213),
+ (131, 156, 187), (112, 139, 177), (94, 123, 167), (135, 110, 79),
+ (154, 129, 62), (176, 159, 115), (173, 181, 150), (170, 203, 186),
+ (154, 187, 199), (139, 171, 212), (140, 174, 208), (142, 177, 205),
+ (169, 201, 212), (161, 198, 199), (154, 195, 187), (155, 176, 170),
+ (157, 158, 153), (166, 144, 124), (175, 131, 96), (170, 120, 59),
+ (186, 122, 24), (128, 76, 0), (119, 67, 0), (111, 59, 1),
+ (100, 53, 16), (90, 47, 31), (84, 65, 58), (79, 83, 86),
+ (43, 87, 182), (62, 111, 212), (82, 136, 242), (96, 144, 239),
+ (110, 152, 236), (114, 153, 235), (118, 155, 235), (125, 164, 223),
+ (127, 167, 218), (161, 195, 207), (186, 195, 165), (212, 195, 123),
+ (221, 189, 94), (230, 183, 65), (227, 169, 59), (221, 154, 47),
+ (195, 132, 26), (181, 119, 13), (168, 107, 0), (167, 105, 0),
+ (167, 103, 0), (157, 97, 7), (148, 92, 15), (131, 104, 61),
+ (168, 133, 93), (189, 221, 154), (204, 236, 138), (219, 252, 122),
+ (233, 251, 118), (248, 250, 115), (243, 230, 90), (245, 193, 84),
+ (229, 167, 56), (207, 154, 60), (185, 142, 64), (163, 133, 63),
+ (141, 125, 63), (128, 112, 96), (93, 105, 155), (49, 99, 184),
+ (60, 104, 199), (77, 121, 216), (79, 123, 218), (81, 125, 220),
+ (78, 122, 217), (75, 119, 214), (74, 118, 213), (72, 118, 212),
+ (53, 94, 184), (65, 84, 137), (78, 74, 91), (82, 59, 68),
+ (87, 45, 46), (66, 27, 58), (56, 14, 54), (47, 12, 52),
+ (38, 16, 98), (106, 91, 88), (114, 94, 89), (123, 98, 91),
+ (130, 125, 106), (143, 151, 153), (147, 169, 180), (143, 169, 184),
+ (145, 124, 105), (162, 133, 91), (180, 142, 77), (194, 161, 72),
+ (208, 181, 68), (211, 195, 120), (191, 209, 151), (183, 206, 164),
+ (142, 194, 172), (159, 171, 69), (171, 166, 64), (183, 161, 60),
+ (210, 163, 55), (205, 141, 33), (187, 125, 14), (177, 114, 9),
+ (124, 77, 9), (94, 53, 34), (64, 29, 59), (49, 18, 67),
+ (34, 7, 76), (2, 30, 93), (7, 14, 105), (0, 32, 130),
+ (4, 47, 141), (44, 88, 183), (55, 99, 194), (67, 111, 206),
+ (82, 124, 208), (94, 139, 240), (111, 153, 239), (81, 129, 205),
+ (107, 97, 85), (110, 96, 69), (114, 95, 53), (126, 75, 18),
+ (110, 60, 1), (96, 47, 0), (81, 29, 18), (81, 38, 29),
+ (72, 43, 29), (93, 42, 21), (97, 47, 15), (102, 53, 10),
+ (111, 61, 10), (123, 73, 4), (141, 85, 0), (161, 99, 0),
+ (150, 93, 3), (146, 85, 4), (142, 78, 6), (120, 68, 10),
+ (83, 43, 33), (57, 38, 60), (9, 34, 116), (17, 61, 156),
+ (16, 64, 162), (21, 65, 160), (22, 66, 161), (20, 64, 159),
+ (19, 56, 136), (29, 36, 106), (47, 45, 82), (56, 46, 83),
+ (85, 46, 31), (95, 53, 21), (106, 60, 11), (130, 77, 7),
+ (144, 87, 6), (147, 97, 2), (156, 99, 0), (162, 102, 0),
+ (156, 97, 0), (153, 97, 2), (142, 92, 3), (136, 103, 10),
+ (145, 95, 46), (135, 101, 73), (105, 96, 79), (84, 98, 124),
+ (67, 102, 170), (54, 101, 193), (49, 102, 208), (49, 93, 188),
+ (43, 87, 182), (21, 83, 202), (14, 78, 214), (2, 58, 181),
+ (22, 66, 161), (24, 71, 163), (41, 75, 165), (75, 73, 122),
+ (102, 83, 85), (104, 75, 57), (112, 80, 29), (94, 71, 19),
+ (91, 47, 22), (84, 42, 26), (81, 44, 26), (84, 46, 27),
+ (98, 53, 32), (127, 74, 58), (138, 103, 81), (132, 115, 97),
+ (132, 127, 89), (130, 117, 82), (117, 110, 82), (119, 100, 44),
+ (128, 72, 25), (103, 49, 15), (78, 41, 35), (62, 27, 57),
+ (61, 55, 69), (110, 66, 57), (124, 85, 54), (133, 104, 88),
+ (118, 105, 123), (100, 134, 198), (101, 143, 225), (111, 155, 228),
+ (127, 164, 190), (145, 166, 161), (179, 149, 87), (206, 160, 62),
+ (216, 152, 44), (202, 138, 30), (192, 128, 18), (183, 125, 17),
+ (192, 128, 30), (201, 137, 31), (212, 148, 42), (219, 151, 42),
+ (214, 146, 35), (204, 141, 10), (162, 124, 41), (186, 134, 25)
+ ),
+
+// 275 Apophysis-040427-51synaps
+((170, 150, 97), (201, 224, 56), (223, 239, 55), (246, 255, 54),
+ (246, 255, 66), (246, 255, 78), (231, 247, 70), (216, 239, 63),
+ (185, 180, 54), (202, 193, 60), (219, 206, 66), (229, 220, 87),
+ (239, 235, 109), (241, 222, 90), (243, 210, 71), (217, 192, 65),
+ (192, 175, 59), (204, 51, 71), (210, 27, 107), (216, 3, 143),
+ (206, 43, 105), (197, 84, 68), (193, 125, 77), (190, 167, 87),
+ (184, 195, 65), (200, 208, 79), (217, 222, 93), (234, 234, 111),
+ (252, 247, 129), (247, 242, 133), (242, 237, 137), (204, 209, 83),
+ (154, 202, 6), (78, 168, 55), (87, 146, 38), (97, 124, 21),
+ (109, 125, 27), (121, 126, 34), (124, 122, 33), (128, 118, 33),
+ (150, 167, 65), (188, 193, 83), (226, 219, 102), (237, 236, 164),
+ (248, 254, 226), (249, 254, 240), (251, 255, 255), (255, 251, 255),
+ (250, 253, 244), (209, 200, 193), (178, 177, 175), (147, 155, 158),
+ (153, 114, 118), (159, 74, 79), (159, 80, 82), (160, 86, 85),
+ (112, 68, 93), (133, 34, 104), (155, 0, 116), (182, 0, 140),
+ (210, 0, 164), (223, 5, 172), (236, 10, 180), (252, 20, 228),
+ (246, 8, 241), (238, 7, 173), (246, 17, 123), (254, 27, 73),
+ (248, 17, 50), (243, 7, 27), (235, 6, 37), (229, 36, 91),
+ (225, 183, 219), (230, 210, 227), (236, 238, 235), (224, 192, 236),
+ (213, 147, 237), (217, 118, 219), (221, 90, 202), (202, 33, 186),
+ (189, 52, 158), (167, 156, 170), (172, 171, 183), (177, 187, 197),
+ (191, 192, 202), (205, 197, 208), (218, 164, 213), (193, 168, 163),
+ (200, 119, 125), (195, 76, 144), (190, 33, 164), (197, 18, 163),
+ (205, 4, 162), (217, 0, 145), (198, 0, 149), (197, 0, 134),
+ (192, 9, 65), (132, 21, 2), (94, 19, 20), (57, 18, 39),
+ (51, 14, 40), (46, 11, 41), (22, 13, 34), (47, 28, 50),
+ (32, 37, 75), (32, 31, 76), (33, 26, 77), (40, 21, 87),
+ (48, 17, 97), (90, 22, 83), (79, 48, 66), (47, 82, 62),
+ (33, 97, 73), (135, 101, 76), (157, 99, 78), (179, 98, 81),
+ (184, 155, 95), (203, 154, 122), (174, 151, 97), (130, 109, 54),
+ (71, 42, 34), (52, 26, 31), (33, 10, 28), (26, 5, 26),
+ (20, 0, 25), (42, 11, 0), (52, 36, 13), (94, 57, 5),
+ (68, 72, 13), (58, 86, 2), (56, 75, 15), (54, 64, 29),
+ (24, 81, 0), (32, 113, 8), (22, 81, 0), (15, 58, 30),
+ (71, 41, 77), (98, 48, 101), (126, 55, 125), (148, 43, 136),
+ (171, 32, 147), (176, 10, 144), (169, 18, 125), (139, 71, 94),
+ (154, 73, 70), (169, 40, 35), (152, 26, 55), (135, 12, 75),
+ (177, 0, 129), (211, 8, 188), (241, 32, 211), (255, 41, 249),
+ (255, 46, 234), (242, 34, 215), (229, 23, 196), (231, 1, 161),
+ (222, 10, 146), (248, 11, 57), (251, 5, 26), (249, 29, 15),
+ (212, 18, 27), (183, 0, 107), (191, 0, 135), (199, 0, 164),
+ (198, 9, 171), (203, 23, 172), (175, 41, 166), (152, 66, 127),
+ (90, 69, 52), (66, 55, 52), (42, 42, 52), (36, 60, 60),
+ (64, 72, 85), (71, 48, 94), (99, 51, 99), (110, 31, 96),
+ (113, 28, 147), (127, 23, 122), (150, 4, 105), (163, 0, 116),
+ (171, 0, 101), (209, 9, 48), (215, 1, 25), (179, 16, 35),
+ (110, 77, 68), (109, 83, 66), (109, 89, 64), (161, 94, 39),
+ (172, 142, 18), (145, 126, 57), (141, 86, 83), (170, 13, 120),
+ (200, 11, 140), (211, 8, 159), (240, 34, 179), (240, 29, 184),
+ (231, 30, 188), (193, 51, 173), (152, 102, 139), (132, 138, 102),
+ (80, 162, 122), (43, 120, 150), (45, 108, 97), (37, 79, 93),
+ (68, 50, 74), (89, 44, 64), (129, 13, 52), (163, 0, 15),
+ (168, 1, 8), (161, 7, 7), (158, 1, 30), (136, 0, 81),
+ (140, 22, 116), (148, 76, 140), (123, 123, 161), (93, 181, 185),
+ (140, 219, 214), (82, 245, 242), (66, 173, 229), (94, 185, 176),
+ (113, 153, 82), (180, 154, 93), (198, 167, 100), (199, 186, 94),
+ (213, 187, 126), (240, 217, 147), (211, 155, 138), (151, 125, 134),
+ (112, 113, 97), (97, 97, 97), (89, 92, 107), (138, 103, 127),
+ (185, 101, 134), (201, 124, 144), (240, 85, 189), (222, 30, 193),
+ (189, 20, 171), (174, 0, 156), (151, 0, 118), (112, 4, 105),
+ (92, 28, 65), (65, 28, 36), (53, 34, 66), (67, 81, 46),
+ (92, 83, 54), (107, 70, 62), (113, 28, 93), (104, 17, 86),
+ (76, 6, 69), (53, 22, 56), (66, 47, 33), (80, 56, 30),
+ (93, 72, 53), (117, 94, 78), (154, 115, 58), (196, 125, 93)
+ ),
+
+// 276 Apophysis-040427-51StPeacocl
+((18, 8, 193), (33, 37, 48), (45, 21, 35), (58, 5, 23),
+ (101, 9, 34), (144, 13, 45), (161, 6, 52), (179, 0, 60),
+ (230, 13, 21), (235, 6, 11), (241, 0, 2), (237, 3, 4),
+ (234, 6, 7), (237, 46, 13), (241, 86, 20), (232, 95, 37),
+ (224, 104, 54), (194, 162, 79), (169, 188, 42), (144, 214, 6),
+ (110, 159, 9), (76, 105, 13), (57, 79, 13), (39, 54, 13),
+ (10, 4, 0), (5, 2, 0), (0, 1, 0), (0, 2, 0),
+ (0, 4, 0), (8, 6, 0), (16, 9, 1), (41, 17, 33),
+ (38, 9, 149), (27, 68, 192), (39, 55, 118), (52, 43, 44),
+ (49, 58, 33), (46, 73, 22), (53, 70, 20), (61, 67, 19),
+ (109, 80, 14), (131, 95, 35), (154, 111, 56), (125, 103, 80),
+ (97, 96, 104), (101, 94, 125), (106, 93, 147), (127, 44, 134),
+ (74, 4, 137), (0, 16, 224), (28, 13, 223), (56, 10, 222),
+ (65, 54, 234), (75, 99, 247), (75, 78, 205), (76, 57, 164),
+ (82, 30, 69), (120, 26, 47), (158, 22, 26), (185, 16, 20),
+ (213, 10, 14), (220, 7, 13), (228, 4, 12), (228, 3, 9),
+ (248, 1, 9), (245, 1, 3), (238, 6, 8), (232, 12, 14),
+ (227, 35, 19), (222, 59, 24), (239, 96, 40), (242, 116, 66),
+ (218, 166, 212), (193, 116, 189), (169, 67, 167), (147, 79, 114),
+ (126, 91, 61), (103, 75, 48), (81, 59, 36), (60, 54, 38),
+ (57, 61, 11), (17, 40, 0), (10, 21, 0), (3, 3, 0),
+ (2, 2, 0), (1, 1, 1), (8, 0, 0), (31, 0, 0),
+ (79, 0, 4), (123, 0, 2), (167, 0, 0), (173, 2, 4),
+ (179, 4, 9), (213, 10, 16), (202, 52, 15), (201, 98, 55),
+ (169, 146, 50), (221, 85, 71), (238, 135, 65), (255, 185, 60),
+ (254, 192, 53), (253, 199, 47), (247, 140, 12), (229, 95, 22),
+ (131, 58, 26), (88, 45, 14), (46, 32, 3), (43, 40, 1),
+ (41, 48, 0), (22, 52, 0), (36, 80, 5), (52, 137, 80),
+ (54, 205, 108), (53, 235, 186), (61, 173, 171), (70, 111, 157),
+ (98, 95, 90), (126, 31, 71), (168, 5, 52), (181, 1, 64),
+ (198, 5, 10), (206, 2, 5), (214, 0, 0), (201, 15, 0),
+ (188, 30, 0), (162, 50, 10), (169, 94, 0), (168, 131, 17),
+ (158, 125, 22), (89, 153, 41), (61, 160, 20), (34, 167, 0),
+ (59, 181, 60), (101, 184, 92), (70, 181, 113), (75, 220, 187),
+ (123, 150, 117), (141, 120, 83), (160, 91, 50), (152, 90, 57),
+ (144, 90, 64), (132, 89, 54), (95, 87, 51), (82, 109, 64),
+ (54, 109, 70), (96, 102, 0), (121, 94, 3), (147, 86, 6),
+ (177, 32, 5), (206, 10, 0), (215, 2, 0), (225, 0, 1),
+ (227, 0, 9), (224, 3, 7), (221, 7, 5), (199, 29, 0),
+ (220, 61, 5), (240, 74, 0), (239, 74, 29), (255, 82, 14),
+ (255, 108, 14), (224, 82, 10), (221, 86, 15), (218, 91, 20),
+ (192, 107, 26), (181, 70, 24), (160, 83, 27), (152, 58, 33),
+ (76, 5, 11), (70, 5, 5), (65, 6, 0), (47, 0, 0),
+ (41, 14, 0), (38, 16, 3), (28, 16, 0), (36, 26, 14),
+ (26, 37, 23), (53, 55, 5), (52, 52, 0), (59, 47, 5),
+ (56, 46, 11), (68, 24, 25), (81, 55, 40), (121, 59, 36),
+ (210, 30, 104), (212, 17, 142), (215, 4, 181), (144, 18, 153),
+ (105, 32, 166), (120, 0, 156), (92, 2, 125), (57, 20, 74),
+ (53, 4, 25), (106, 0, 14), (138, 0, 7), (158, 0, 0),
+ (170, 8, 19), (151, 6, 9), (135, 12, 15), (122, 60, 13),
+ (109, 51, 14), (101, 49, 0), (69, 34, 0), (74, 66, 4),
+ (76, 77, 11), (60, 109, 30), (52, 107, 68), (54, 83, 61),
+ (42, 78, 42), (60, 87, 20), (56, 61, 5), (19, 31, 21),
+ (7, 0, 7), (1, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 1, 0), (1, 0, 0),
+ (3, 0, 0), (20, 0, 0), (45, 2, 11), (59, 32, 73),
+ (124, 19, 75), (118, 0, 109), (92, 6, 117), (96, 19, 101),
+ (102, 42, 104), (99, 77, 63), (131, 88, 45), (112, 97, 38),
+ (91, 88, 37), (53, 80, 61), (72, 70, 58), (113, 79, 44),
+ (137, 62, 22), (200, 84, 25), (207, 69, 7), (219, 68, 0),
+ (216, 80, 22), (205, 82, 48), (222, 60, 81), (182, 81, 63),
+ (162, 106, 69), (148, 83, 61), (174, 53, 70), (185, 14, 23),
+ (190, 3, 10), (193, 5, 6), (181, 0, 7), (175, 0, 0),
+ (171, 0, 0), (147, 0, 0), (87, 16, 34), (131, 5, 27)
+ ),
+
+// 277 Apophysis-040427-51TmplWatrs2
+((58, 31, 10), (30, 12, 2), (33, 29, 15), (37, 46, 29),
+ (47, 48, 28), (58, 50, 27), (60, 55, 26), (63, 60, 25),
+ (104, 56, 16), (139, 64, 20), (175, 73, 25), (199, 39, 12),
+ (224, 5, 0), (182, 26, 3), (141, 48, 7), (125, 57, 10),
+ (110, 67, 14), (102, 61, 29), (83, 40, 15), (65, 20, 1),
+ (61, 10, 7), (57, 0, 13), (54, 2, 8), (52, 4, 4),
+ (23, 0, 8), (25, 5, 4), (28, 11, 1), (43, 16, 2),
+ (59, 22, 4), (75, 36, 7), (92, 50, 10), (127, 51, 15),
+ (132, 70, 29), (133, 89, 40), (133, 95, 47), (133, 102, 55),
+ (139, 119, 63), (145, 137, 72), (148, 145, 78), (152, 153, 85),
+ (189, 154, 88), (213, 145, 83), (237, 137, 78), (201, 132, 80),
+ (165, 127, 82), (156, 119, 79), (147, 111, 77), (120, 91, 61),
+ (98, 81, 63), (98, 59, 28), (102, 52, 18), (106, 46, 9),
+ (117, 64, 21), (128, 82, 33), (132, 84, 34), (137, 87, 36),
+ (144, 105, 50), (137, 115, 60), (131, 126, 70), (140, 124, 67),
+ (149, 123, 64), (155, 124, 63), (161, 125, 63), (150, 110, 49),
+ (153, 98, 44), (167, 104, 51), (168, 104, 47), (169, 105, 44),
+ (165, 98, 41), (161, 91, 39), (148, 67, 14), (133, 44, 2),
+ (110, 0, 5), (91, 0, 3), (72, 0, 1), (61, 6, 1),
+ (50, 12, 1), (52, 20, 4), (55, 28, 7), (61, 39, 16),
+ (85, 49, 23), (134, 100, 55), (158, 126, 70), (183, 152, 85),
+ (203, 160, 96), (223, 169, 107), (239, 179, 129), (250, 213, 142),
+ (236, 166, 107), (213, 136, 80), (190, 107, 53), (181, 100, 46),
+ (173, 93, 40), (161, 94, 42), (153, 94, 38), (145, 98, 46),
+ (135, 88, 36), (135, 73, 24), (142, 55, 12), (149, 37, 0),
+ (142, 22, 2), (135, 7, 4), (130, 8, 3), (131, 47, 13),
+ (155, 102, 48), (161, 113, 55), (168, 124, 63), (162, 120, 59),
+ (157, 117, 56), (156, 93, 39), (161, 62, 20), (145, 30, 1),
+ (108, 3, 0), (81, 31, 20), (78, 43, 24), (76, 56, 29),
+ (77, 66, 38), (88, 82, 48), (121, 89, 51), (130, 86, 37),
+ (167, 76, 31), (165, 66, 21), (164, 57, 11), (161, 44, 5),
+ (159, 32, 0), (155, 52, 9), (157, 61, 19), (158, 62, 20),
+ (149, 59, 22), (100, 55, 16), (91, 50, 18), (82, 46, 20),
+ (68, 55, 21), (60, 43, 27), (56, 41, 20), (50, 16, 40),
+ (15, 0, 55), (31, 0, 30), (47, 0, 6), (59, 0, 4),
+ (72, 0, 3), (98, 3, 1), (120, 0, 2), (123, 1, 0),
+ (124, 2, 25), (80, 58, 34), (79, 70, 42), (79, 82, 51),
+ (87, 90, 59), (113, 99, 54), (126, 104, 54), (141, 102, 43),
+ (133, 86, 34), (126, 79, 33), (120, 72, 32), (116, 75, 29),
+ (127, 84, 31), (136, 91, 36), (144, 106, 44), (154, 105, 47),
+ (173, 109, 47), (198, 146, 73), (190, 127, 62), (183, 108, 51),
+ (179, 89, 36), (145, 67, 18), (111, 46, 4), (89, 23, 1),
+ (90, 0, 0), (88, 1, 0), (86, 2, 0), (79, 0, 0),
+ (76, 12, 2), (71, 13, 1), (70, 14, 1), (85, 39, 5),
+ (96, 53, 19), (100, 70, 34), (106, 92, 43), (105, 107, 60),
+ (126, 120, 70), (133, 129, 65), (136, 135, 78), (136, 137, 79),
+ (124, 127, 70), (122, 123, 69), (121, 119, 68), (95, 88, 78),
+ (73, 74, 56), (69, 66, 31), (52, 67, 36), (62, 61, 33),
+ (77, 56, 27), (104, 60, 21), (121, 74, 28), (156, 90, 40),
+ (179, 102, 46), (223, 127, 77), (240, 168, 110), (227, 204, 186),
+ (235, 236, 222), (238, 237, 235), (235, 236, 230), (236, 237, 221),
+ (200, 200, 202), (210, 189, 124), (193, 139, 105), (153, 136, 126),
+ (130, 101, 85), (123, 99, 87), (122, 102, 75), (111, 103, 64),
+ (107, 94, 60), (89, 83, 59), (84, 70, 44), (84, 55, 25),
+ (94, 44, 7), (78, 20, 0), (71, 23, 0), (94, 45, 13),
+ (116, 74, 26), (133, 93, 57), (139, 118, 75), (172, 142, 106),
+ (185, 180, 124), (207, 198, 123), (226, 227, 159), (235, 236, 218),
+ (236, 237, 231), (244, 243, 223), (237, 238, 194), (238, 235, 166),
+ (234, 235, 159), (236, 217, 149), (232, 199, 132), (221, 172, 105),
+ (163, 129, 68), (132, 96, 48), (101, 78, 36), (68, 44, 18),
+ (50, 21, 3), (55, 18, 0), (67, 37, 13), (94, 51, 19),
+ (124, 97, 50), (149, 150, 92), (156, 176, 105), (186, 199, 130),
+ (190, 186, 113), (182, 171, 105), (159, 154, 88), (150, 151, 83),
+ (157, 132, 68), (167, 141, 80), (172, 175, 104), (168, 148, 89)
+ ),
+
+// 278 Apophysis-040427-51TeddyScare
+((176, 153, 163), (59, 219, 255), (48, 197, 238), (37, 175, 222),
+ (39, 134, 230), (42, 93, 238), (38, 73, 228), (35, 54, 219),
+ (38, 111, 216), (41, 137, 215), (44, 164, 214), (38, 181, 212),
+ (32, 198, 210), (37, 209, 205), (42, 221, 200), (45, 216, 199),
+ (49, 211, 198), (23, 157, 186), (11, 114, 121), (0, 71, 56),
+ (0, 40, 32), (0, 10, 8), (0, 9, 8), (0, 9, 8),
+ (20, 63, 53), (20, 94, 86), (21, 126, 119), (18, 101, 94),
+ (16, 77, 70), (14, 60, 55), (13, 43, 41), (0, 0, 14),
+ (1, 3, 2), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 1, 0), (0, 3, 0), (0, 8, 3), (0, 13, 6),
+ (18, 87, 84), (24, 107, 133), (31, 128, 183), (101, 147, 172),
+ (171, 166, 162), (184, 161, 103), (198, 156, 44), (201, 181, 32),
+ (158, 133, 32), (39, 145, 135), (41, 153, 157), (44, 161, 179),
+ (45, 178, 197), (47, 196, 216), (69, 196, 222), (92, 197, 229),
+ (179, 183, 218), (117, 173, 227), (55, 163, 236), (45, 190, 224),
+ (36, 217, 212), (37, 218, 208), (39, 220, 205), (39, 220, 205),
+ (36, 211, 194), (39, 180, 226), (39, 149, 220), (40, 119, 214),
+ (37, 89, 216), (35, 59, 219), (42, 37, 228), (35, 54, 219),
+ (39, 76, 217), (35, 107, 223), (31, 139, 229), (31, 175, 224),
+ (31, 212, 219), (38, 227, 216), (46, 243, 213), (36, 223, 206),
+ (37, 215, 201), (38, 175, 217), (34, 165, 201), (30, 155, 185),
+ (28, 165, 182), (26, 175, 179), (28, 174, 174), (29, 145, 136),
+ (30, 147, 131), (21, 111, 99), (13, 76, 68), (10, 60, 60),
+ (7, 44, 53), (19, 7, 17), (3, 1, 4), (0, 0, 2),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (1, 0, 2),
+ (24, 0, 22), (29, 16, 67), (35, 32, 113), (28, 34, 160),
+ (22, 36, 207), (35, 54, 219), (31, 58, 211), (35, 61, 208),
+ (51, 24, 139), (19, 0, 21), (10, 0, 13), (1, 0, 5),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 1, 0),
+ (0, 2, 0), (0, 6, 3), (0, 10, 9), (0, 45, 45),
+ (19, 80, 75), (17, 173, 162), (23, 189, 175), (30, 205, 188),
+ (36, 199, 196), (29, 167, 154), (29, 133, 126), (16, 69, 61),
+ (1, 5, 4), (0, 2, 2), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 2, 4), (0, 1, 10), (0, 0, 16),
+ (0, 35, 51), (26, 62, 136), (18, 80, 203), (45, 112, 219),
+ (145, 130, 135), (166, 92, 150), (188, 54, 165), (195, 34, 189),
+ (192, 38, 210), (174, 36, 183), (142, 20, 141), (56, 3, 59),
+ (32, 0, 36), (22, 5, 23), (5, 3, 8), (1, 1, 1),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 2), (0, 1, 4), (0, 2, 6), (4, 14, 13),
+ (7, 52, 55), (33, 114, 141), (24, 135, 191), (28, 109, 198),
+ (28, 51, 189), (54, 59, 140), (53, 17, 61), (53, 1, 47),
+ (32, 4, 26), (11, 0, 0), (3, 1, 2), (2, 12, 11),
+ (9, 51, 47), (21, 115, 89), (27, 151, 125), (19, 160, 144),
+ (20, 173, 155), (25, 161, 151), (20, 137, 119), (17, 59, 57),
+ (7, 18, 22), (1, 5, 4), (0, 2, 2), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 2), (0, 4, 7),
+ (0, 22, 20), (0, 51, 47), (0, 85, 96), (27, 103, 163),
+ (28, 143, 200), (33, 153, 188), (25, 153, 202), (32, 169, 215),
+ (36, 161, 215), (26, 150, 212), (26, 134, 222), (25, 123, 212),
+ (34, 95, 210), (28, 75, 213), (70, 80, 203), (105, 116, 232),
+ (161, 130, 210), (218, 222, 231), (226, 235, 250), (250, 224, 237),
+ (193, 79, 255), (203, 27, 222), (199, 28, 218), (191, 33, 214),
+ (170, 33, 183), (75, 47, 124), (47, 50, 101), (39, 25, 58),
+ (29, 5, 31), (16, 4, 14), (3, 7, 10), (7, 22, 17),
+ (8, 61, 53), (19, 123, 114), (32, 163, 158), (33, 202, 181),
+ (27, 218, 187), (23, 214, 183), (15, 187, 165), (15, 168, 150)
+ ),
+
+// 279 Apophysis-040427-51kaosGardenr
+((59, 0, 80), (4, 81, 87), (27, 106, 102), (50, 132, 118),
+ (42, 172, 97), (34, 212, 76), (44, 226, 89), (55, 240, 103),
+ (83, 241, 94), (128, 244, 117), (174, 247, 140), (209, 242, 72),
+ (244, 238, 4), (211, 197, 51), (178, 156, 99), (168, 168, 105),
+ (159, 180, 111), (118, 201, 121), (133, 196, 120), (148, 191, 119),
+ (159, 164, 109), (171, 137, 99), (175, 120, 94), (179, 103, 89),
+ (187, 51, 53), (201, 27, 56), (216, 3, 59), (196, 8, 40),
+ (177, 13, 22), (161, 17, 34), (145, 21, 47), (83, 48, 72),
+ (4, 0, 173), (0, 5, 40), (0, 2, 20), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 1, 6), (0, 1, 5), (0, 1, 4), (0, 0, 2),
+ (0, 0, 0), (0, 1, 0), (0, 2, 0), (0, 43, 34),
+ (0, 111, 17), (39, 201, 79), (75, 203, 97), (112, 205, 116),
+ (77, 225, 110), (42, 245, 104), (29, 246, 95), (17, 247, 87),
+ (32, 208, 136), (21, 210, 161), (11, 213, 187), (32, 178, 139),
+ (53, 143, 91), (85, 136, 82), (118, 129, 73), (126, 120, 60),
+ (134, 111, 69), (126, 90, 78), (135, 100, 75), (144, 110, 73),
+ (154, 116, 78), (165, 123, 83), (181, 144, 102), (229, 132, 149),
+ (249, 161, 235), (249, 148, 224), (249, 136, 214), (204, 153, 164),
+ (160, 171, 115), (148, 176, 116), (137, 181, 118), (108, 187, 106),
+ (100, 181, 89), (139, 159, 8), (150, 132, 41), (162, 105, 75),
+ (182, 128, 71), (202, 152, 67), (255, 137, 109), (232, 145, 138),
+ (243, 120, 166), (239, 109, 157), (236, 98, 149), (222, 99, 147),
+ (208, 101, 145), (177, 119, 134), (157, 113, 166), (121, 27, 177),
+ (137, 4, 181), (116, 27, 45), (131, 13, 22), (147, 0, 0),
+ (126, 12, 22), (106, 25, 44), (70, 48, 50), (73, 44, 40),
+ (147, 57, 23), (154, 48, 19), (162, 40, 16), (143, 49, 14),
+ (125, 58, 13), (85, 91, 5), (22, 64, 0), (55, 111, 20),
+ (92, 114, 31), (149, 85, 73), (166, 93, 80), (184, 102, 88),
+ (241, 102, 121), (247, 93, 127), (230, 104, 125), (234, 163, 131),
+ (200, 184, 133), (157, 190, 118), (115, 196, 103), (103, 205, 89),
+ (92, 215, 75), (112, 196, 111), (141, 207, 120), (181, 199, 141),
+ (207, 217, 156), (241, 236, 180), (243, 226, 178), (246, 217, 177),
+ (233, 174, 156), (243, 120, 166), (255, 114, 164), (243, 102, 154),
+ (227, 137, 146), (192, 156, 131), (157, 175, 117), (151, 189, 121),
+ (146, 203, 126), (153, 204, 127), (177, 188, 122), (202, 182, 123),
+ (216, 152, 142), (196, 124, 102), (174, 113, 86), (152, 103, 70),
+ (94, 109, 44), (80, 114, 19), (27, 206, 78), (6, 233, 64),
+ (0, 239, 67), (9, 240, 77), (18, 241, 88), (50, 231, 92),
+ (68, 200, 81), (81, 205, 81), (99, 176, 82), (120, 178, 93),
+ (136, 133, 92), (146, 125, 80), (142, 133, 87), (139, 142, 95),
+ (124, 166, 103), (120, 196, 106), (131, 185, 109), (128, 172, 113),
+ (121, 107, 106), (119, 91, 95), (117, 76, 84), (175, 47, 36),
+ (177, 42, 38), (189, 55, 52), (161, 55, 59), (102, 71, 68),
+ (66, 84, 94), (28, 2, 161), (92, 0, 217), (134, 78, 227),
+ (120, 106, 193), (175, 125, 137), (177, 140, 134), (154, 100, 98),
+ (134, 61, 20), (134, 61, 18), (135, 61, 16), (139, 53, 18),
+ (162, 33, 27), (157, 54, 19), (183, 98, 0), (126, 91, 0),
+ (42, 40, 0), (8, 10, 9), (0, 3, 0), (3, 0, 2),
+ (18, 6, 0), (57, 57, 59), (94, 84, 75), (133, 110, 78),
+ (167, 161, 109), (186, 186, 126), (189, 196, 129), (190, 204, 142),
+ (232, 198, 153), (231, 189, 165), (209, 171, 126), (173, 155, 115),
+ (164, 132, 109), (181, 124, 107), (199, 102, 111), (183, 106, 114),
+ (148, 128, 104), (145, 175, 105), (147, 183, 121), (142, 212, 126),
+ (152, 233, 141), (159, 255, 154), (174, 252, 153), (155, 247, 120),
+ (125, 202, 106), (85, 186, 92), (105, 157, 93), (74, 102, 87),
+ (118, 100, 100), (150, 98, 76), (199, 102, 57), (241, 76, 70),
+ (222, 42, 43), (186, 8, 84), (202, 12, 164), (137, 110, 103),
+ (69, 189, 92), (15, 226, 69), (2, 235, 66), (2, 236, 63),
+ (3, 235, 63), (25, 218, 73), (55, 202, 87), (113, 218, 125),
+ (179, 232, 160), (222, 247, 153), (242, 240, 165), (243, 236, 168),
+ (234, 223, 169), (233, 188, 165), (234, 200, 172), (243, 221, 182),
+ (244, 240, 166), (241, 224, 178), (237, 182, 161), (236, 133, 154),
+ (232, 94, 143), (221, 100, 141), (190, 132, 131), (179, 157, 107)
+ ),
+
+// 280 Apophysis-040427-51Thatway4
+((108, 55, 21), (208, 161, 89), (219, 198, 105), (231, 235, 122),
+ (235, 215, 156), (240, 195, 190), (236, 177, 193), (233, 159, 196),
+ (162, 127, 229), (154, 120, 227), (146, 113, 226), (175, 154, 204),
+ (204, 196, 183), (222, 194, 141), (241, 192, 99), (223, 163, 90),
+ (206, 135, 81), (134, 91, 46), (129, 75, 39), (124, 60, 33),
+ (126, 64, 19), (129, 69, 6), (129, 67, 5), (130, 66, 4),
+ (126, 55, 13), (118, 67, 15), (110, 80, 18), (114, 73, 22),
+ (118, 66, 27), (131, 78, 32), (144, 91, 37), (166, 96, 34),
+ (205, 123, 37), (197, 148, 71), (216, 189, 79), (236, 231, 88),
+ (228, 193, 73), (221, 155, 59), (209, 137, 54), (198, 119, 50),
+ (135, 65, 29), (109, 51, 16), (83, 37, 4), (48, 24, 10),
+ (13, 11, 16), (8, 14, 19), (4, 17, 23), (19, 37, 47),
+ (102, 68, 41), (144, 106, 33), (178, 105, 40), (213, 104, 47),
+ (196, 100, 34), (179, 97, 21), (166, 84, 13), (153, 72, 6),
+ (131, 55, 0), (140, 56, 5), (149, 57, 10), (135, 64, 19),
+ (122, 71, 28), (128, 71, 25), (135, 71, 23), (141, 77, 15),
+ (136, 68, 3), (145, 65, 0), (140, 49, 0), (136, 34, 0),
+ (130, 34, 0), (124, 34, 0), (93, 34, 2), (72, 28, 0),
+ (16, 22, 0), (12, 14, 5), (9, 7, 10), (16, 9, 14),
+ (24, 11, 18), (32, 15, 14), (40, 20, 11), (88, 37, 0),
+ (124, 54, 0), (151, 66, 35), (141, 76, 43), (131, 87, 52),
+ (138, 83, 52), (146, 79, 52), (155, 78, 50), (154, 81, 48),
+ (118, 68, 35), (119, 62, 32), (120, 56, 29), (125, 49, 24),
+ (130, 42, 20), (147, 46, 18), (133, 45, 7), (121, 39, 0),
+ (107, 40, 0), (70, 10, 0), (46, 5, 0), (23, 0, 0),
+ (22, 0, 5), (21, 0, 10), (2, 0, 19), (4, 6, 21),
+ (9, 0, 36), (16, 2, 49), (23, 5, 63), (21, 10, 59),
+ (20, 15, 55), (22, 22, 48), (62, 12, 21), (92, 28, 0),
+ (116, 34, 0), (95, 12, 0), (86, 6, 0), (78, 0, 0),
+ (82, 21, 0), (100, 40, 12), (122, 39, 23), (130, 59, 15),
+ (160, 78, 28), (164, 79, 23), (169, 81, 18), (172, 71, 9),
+ (176, 62, 0), (177, 74, 15), (216, 111, 45), (229, 114, 57),
+ (237, 132, 77), (233, 145, 74), (224, 144, 69), (216, 143, 64),
+ (231, 136, 44), (218, 125, 45), (184, 102, 26), (163, 87, 11),
+ (116, 63, 0), (97, 62, 10), (79, 61, 21), (50, 45, 29),
+ (22, 29, 37), (21, 19, 30), (40, 26, 26), (98, 54, 17),
+ (122, 55, 13), (128, 48, 0), (124, 50, 0), (120, 53, 0),
+ (106, 46, 0), (103, 52, 9), (105, 46, 14), (113, 47, 13),
+ (109, 44, 14), (108, 49, 18), (107, 54, 23), (111, 64, 20),
+ (121, 78, 25), (125, 83, 25), (154, 95, 15), (186, 121, 39),
+ (202, 132, 60), (220, 131, 63), (227, 137, 68), (234, 143, 73),
+ (244, 153, 80), (255, 168, 108), (240, 173, 102), (216, 178, 131),
+ (232, 229, 194), (232, 231, 211), (233, 234, 228), (233, 232, 188),
+ (216, 203, 169), (209, 211, 189), (231, 225, 239), (240, 226, 241),
+ (249, 215, 248), (255, 225, 248), (252, 241, 239), (255, 229, 190),
+ (223, 196, 143), (181, 157, 87), (160, 123, 43), (156, 90, 40),
+ (152, 73, 30), (152, 75, 25), (153, 78, 20), (140, 76, 28),
+ (133, 83, 34), (136, 76, 50), (115, 68, 38), (102, 69, 36),
+ (98, 64, 26), (104, 55, 23), (97, 50, 20), (59, 9, 10),
+ (32, 6, 9), (25, 6, 0), (42, 6, 0), (51, 23, 0),
+ (79, 49, 0), (99, 48, 0), (95, 33, 0), (92, 34, 0),
+ (74, 19, 0), (56, 17, 0), (34, 4, 0), (20, 0, 0),
+ (18, 0, 0), (0, 11, 0), (14, 13, 0), (17, 7, 5),
+ (9, 6, 17), (19, 5, 18), (47, 17, 17), (90, 69, 38),
+ (75, 71, 104), (124, 96, 121), (122, 127, 227), (97, 111, 236),
+ (117, 94, 244), (82, 47, 235), (67, 36, 95), (77, 9, 84),
+ (108, 45, 76), (121, 55, 31), (148, 62, 27), (158, 76, 20),
+ (160, 71, 13), (150, 66, 19), (136, 60, 28), (121, 57, 29),
+ (123, 60, 27), (142, 64, 18), (168, 80, 34), (187, 106, 61),
+ (229, 150, 91), (253, 221, 120), (242, 232, 119), (231, 242, 103),
+ (233, 229, 103), (192, 170, 110), (188, 123, 91), (142, 95, 53),
+ (121, 70, 49), (96, 72, 28), (93, 62, 16), (50, 24, 9),
+ (26, 20, 8), (20, 26, 22), (97, 58, 29), (106, 76, 38),
+ (118, 63, 42), (142, 78, 43), (226, 125, 57), (173, 89, 29)
+ ),
+
+// 281 Apophysis-040427-51ThatwayGrn
+((79, 66, 13), (83, 51, 0), (100, 55, 0), (118, 59, 0),
+ (119, 65, 0), (120, 72, 0), (119, 72, 0), (119, 72, 0),
+ (78, 55, 5), (66, 48, 5), (54, 41, 6), (56, 39, 10),
+ (58, 38, 14), (70, 61, 16), (82, 85, 18), (74, 109, 39),
+ (67, 133, 61), (67, 133, 62), (65, 125, 61), (64, 117, 61),
+ (67, 82, 33), (71, 48, 6), (68, 41, 3), (65, 35, 0),
+ (70, 53, 1), (69, 95, 25), (69, 137, 50), (67, 144, 51),
+ (66, 152, 53), (63, 156, 52), (61, 160, 52), (59, 163, 52),
+ (59, 163, 52), (58, 161, 52), (60, 161, 52), (62, 161, 53),
+ (61, 160, 52), (61, 160, 52), (61, 158, 52), (62, 157, 53),
+ (64, 134, 64), (67, 128, 69), (71, 123, 74), (72, 121, 78),
+ (73, 119, 82), (73, 119, 82), (73, 119, 82), (73, 119, 82),
+ (73, 121, 79), (68, 148, 53), (66, 150, 53), (65, 153, 53),
+ (66, 151, 53), (68, 149, 54), (70, 146, 54), (73, 143, 54),
+ (144, 90, 0), (125, 98, 6), (106, 107, 13), (86, 119, 39),
+ (67, 132, 66), (67, 131, 70), (68, 131, 74), (71, 129, 79),
+ (74, 127, 85), (75, 120, 87), (75, 119, 86), (75, 119, 86),
+ (75, 119, 86), (75, 119, 86), (76, 122, 86), (76, 119, 89),
+ (75, 119, 86), (68, 121, 82), (61, 124, 79), (62, 132, 69),
+ (64, 141, 59), (63, 145, 57), (63, 150, 55), (67, 148, 53),
+ (66, 141, 59), (70, 146, 55), (66, 149, 55), (62, 152, 56),
+ (63, 154, 54), (64, 157, 53), (61, 160, 52), (61, 160, 52),
+ (65, 153, 53), (67, 150, 53), (70, 147, 53), (85, 123, 34),
+ (101, 99, 16), (122, 84, 0), (107, 57, 0), (85, 42, 0),
+ (60, 32, 0), (53, 34, 1), (70, 38, 1), (88, 43, 2),
+ (95, 49, 1), (102, 56, 0), (117, 64, 0), (118, 71, 1),
+ (92, 84, 22), (80, 103, 46), (69, 123, 71), (64, 86, 48),
+ (60, 50, 25), (45, 32, 16), (37, 28, 11), (32, 18, 7),
+ (45, 32, 13), (70, 118, 70), (71, 119, 75), (72, 120, 80),
+ (76, 119, 91), (75, 120, 100), (76, 119, 100), (76, 119, 100),
+ (75, 122, 86), (115, 115, 45), (155, 108, 4), (158, 114, 3),
+ (162, 120, 2), (104, 137, 48), (71, 146, 55), (70, 146, 55),
+ (68, 136, 61), (67, 133, 62), (67, 133, 62), (67, 133, 62),
+ (67, 126, 68), (70, 120, 69), (109, 69, 17), (127, 82, 0),
+ (148, 78, 6), (137, 70, 3), (126, 62, 1), (113, 57, 2),
+ (100, 52, 3), (76, 30, 7), (63, 29, 1), (58, 22, 0),
+ (54, 21, 2), (61, 28, 0), (66, 30, 2), (72, 33, 4),
+ (103, 56, 4), (131, 73, 0), (157, 97, 0), (170, 133, 0),
+ (162, 148, 43), (124, 152, 39), (86, 157, 35), (72, 154, 56),
+ (66, 154, 52), (65, 156, 53), (65, 156, 53), (64, 155, 52),
+ (65, 156, 53), (63, 158, 54), (62, 159, 53), (62, 161, 53),
+ (60, 164, 53), (60, 164, 53), (62, 161, 53), (63, 158, 54),
+ (66, 152, 53), (67, 148, 53), (69, 145, 54), (106, 118, 32),
+ (154, 108, 0), (164, 115, 0), (143, 108, 16), (82, 118, 90),
+ (80, 119, 98), (78, 120, 100), (75, 119, 102), (78, 120, 100),
+ (79, 119, 95), (75, 119, 86), (71, 120, 75), (62, 70, 19),
+ (45, 28, 0), (44, 24, 3), (44, 21, 7), (37, 19, 5),
+ (45, 17, 3), (47, 21, 0), (49, 34, 1), (56, 48, 2),
+ (74, 54, 0), (98, 57, 1), (123, 59, 0), (128, 69, 0),
+ (130, 86, 0), (108, 98, 49), (73, 119, 80), (76, 119, 92),
+ (75, 120, 100), (72, 120, 108), (73, 119, 108), (75, 119, 102),
+ (76, 119, 100), (76, 119, 91), (73, 119, 80), (71, 120, 75),
+ (56, 57, 15), (51, 40, 8), (47, 36, 8), (44, 41, 8),
+ (47, 44, 11), (47, 50, 7), (53, 65, 1), (60, 91, 34),
+ (71, 120, 75), (75, 127, 89), (75, 134, 90), (71, 129, 79),
+ (64, 134, 62), (68, 148, 53), (67, 151, 55), (67, 151, 53),
+ (68, 148, 53), (67, 134, 63), (73, 124, 81), (76, 119, 91),
+ (79, 119, 95), (78, 120, 98), (80, 119, 98), (80, 119, 98),
+ (80, 119, 100), (80, 119, 98), (80, 119, 98), (78, 122, 97),
+ (75, 122, 88), (72, 127, 85), (69, 130, 73), (65, 139, 64),
+ (68, 148, 53), (68, 148, 53), (68, 141, 59), (70, 133, 62),
+ (67, 125, 67), (92, 71, 18), (62, 40, 19), (51, 29, 8),
+ (46, 25, 4), (57, 32, 1), (73, 46, 1), (105, 58, 4),
+ (131, 80, 1), (154, 99, 0), (178, 160, 62), (170, 124, 2)
+ ),
+
+// 282 Apophysis-040427-51TreeLife1
+((199, 144, 17), (41, 30, 44), (89, 62, 36), (138, 94, 29),
+ (161, 115, 26), (184, 137, 23), (190, 143, 30), (197, 149, 38),
+ (206, 169, 62), (214, 187, 99), (223, 206, 136), (222, 207, 148),
+ (221, 209, 161), (207, 169, 114), (193, 129, 68), (191, 133, 53),
+ (190, 138, 39), (173, 120, 6), (172, 119, 4), (171, 118, 2),
+ (166, 111, 1), (161, 105, 0), (162, 102, 0), (164, 100, 0),
+ (148, 76, 0), (142, 68, 0), (137, 61, 0), (131, 43, 0),
+ (125, 26, 0), (116, 22, 0), (107, 18, 0), (74, 0, 28),
+ (33, 0, 29), (7, 6, 12), (45, 10, 9), (84, 14, 6),
+ (106, 30, 3), (129, 47, 0), (137, 60, 0), (146, 74, 0),
+ (170, 113, 6), (176, 122, 8), (182, 132, 11), (194, 142, 17),
+ (206, 153, 23), (209, 160, 28), (212, 168, 33), (214, 181, 42),
+ (228, 189, 50), (238, 212, 65), (240, 213, 68), (243, 215, 72),
+ (233, 199, 62), (224, 184, 53), (217, 177, 51), (211, 171, 49),
+ (195, 147, 23), (187, 138, 15), (179, 129, 8), (171, 115, 6),
+ (164, 101, 4), (159, 94, 2), (155, 88, 1), (149, 77, 1),
+ (146, 74, 2), (152, 81, 1), (155, 90, 1), (159, 99, 1),
+ (158, 98, 1), (157, 97, 1), (144, 87, 0), (138, 68, 0),
+ (116, 69, 0), (116, 65, 0), (117, 61, 0), (121, 52, 0),
+ (125, 44, 1), (121, 42, 0), (117, 41, 0), (109, 42, 0),
+ (125, 44, 1), (139, 61, 0), (149, 81, 1), (159, 101, 2),
+ (164, 108, 4), (170, 116, 7), (177, 124, 10), (182, 132, 11),
+ (183, 133, 12), (184, 135, 10), (185, 137, 9), (185, 136, 10),
+ (185, 135, 12), (186, 136, 13), (190, 140, 15), (196, 149, 19),
+ (208, 162, 25), (221, 180, 40), (224, 184, 44), (228, 189, 49),
+ (225, 186, 46), (222, 183, 43), (216, 172, 37), (211, 162, 34),
+ (198, 151, 21), (190, 141, 16), (182, 132, 11), (176, 125, 8),
+ (171, 118, 6), (160, 100, 2), (148, 76, 0), (138, 64, 0),
+ (138, 61, 5), (145, 77, 6), (155, 91, 5), (165, 106, 4),
+ (181, 130, 12), (193, 143, 22), (204, 157, 25), (211, 165, 30),
+ (211, 167, 32), (206, 159, 35), (201, 151, 38), (195, 145, 27),
+ (189, 139, 16), (173, 120, 6), (161, 97, 7), (140, 67, 16),
+ (112, 35, 7), (54, 4, 29), (55, 13, 38), (56, 22, 47),
+ (32, 29, 36), (49, 35, 52), (43, 47, 85), (80, 52, 103),
+ (68, 77, 76), (82, 78, 89), (97, 79, 103), (104, 85, 84),
+ (112, 92, 65), (147, 95, 45), (165, 105, 9), (170, 116, 7),
+ (182, 132, 11), (192, 142, 17), (196, 147, 20), (200, 153, 23),
+ (205, 161, 28), (211, 165, 30), (203, 159, 26), (197, 150, 20),
+ (179, 121, 22), (173, 116, 33), (167, 112, 45), (176, 138, 161),
+ (165, 153, 203), (168, 156, 206), (171, 158, 228), (201, 201, 227),
+ (207, 195, 209), (255, 230, 156), (250, 235, 142), (246, 240, 128),
+ (246, 248, 115), (254, 245, 92), (255, 235, 96), (255, 233, 97),
+ (239, 202, 59), (237, 201, 58), (235, 200, 58), (237, 198, 59),
+ (232, 194, 61), (233, 203, 105), (211, 162, 155), (160, 101, 103),
+ (145, 88, 45), (131, 74, 31), (139, 65, 18), (138, 63, 5),
+ (137, 61, 0), (134, 63, 1), (134, 63, 1), (137, 62, 0),
+ (131, 49, 1), (130, 48, 0), (129, 47, 0), (132, 52, 1),
+ (139, 63, 0), (144, 72, 0), (147, 78, 0), (154, 91, 0),
+ (161, 101, 3), (164, 109, 8), (160, 125, 0), (173, 124, 3),
+ (182, 132, 11), (192, 142, 17), (204, 157, 27), (209, 159, 38),
+ (214, 170, 35), (221, 182, 42), (228, 189, 49), (229, 192, 49),
+ (231, 194, 53), (232, 193, 53), (227, 188, 48), (222, 181, 41),
+ (213, 169, 34), (201, 154, 24), (189, 132, 19), (163, 106, 16),
+ (118, 76, 34), (93, 69, 93), (110, 89, 108), (114, 75, 104),
+ (128, 70, 50), (153, 94, 24), (168, 116, 6), (173, 122, 7),
+ (181, 131, 10), (175, 124, 7), (172, 119, 5), (168, 106, 7),
+ (169, 89, 4), (150, 65, 0), (128, 46, 0), (117, 35, 0),
+ (109, 28, 0), (88, 0, 0), (65, 0, 26), (33, 0, 27),
+ (8, 0, 15), (38, 5, 26), (98, 14, 3), (116, 26, 15),
+ (117, 29, 15), (122, 43, 28), (111, 94, 110), (149, 131, 179),
+ (159, 145, 180), (131, 112, 134), (158, 97, 113), (167, 99, 38),
+ (176, 123, 11), (181, 130, 12), (188, 138, 15), (197, 151, 16),
+ (199, 164, 18), (213, 172, 32), (234, 189, 12), (255, 197, 35),
+ (240, 201, 44), (229, 190, 50), (220, 176, 41), (210, 161, 32)
+ ),
+
+// 283 Apophysis-040427-51TreeLife
+((160, 85, 2), (162, 86, 2), (159, 84, 6), (157, 83, 10),
+ (161, 87, 6), (166, 92, 3), (167, 95, 2), (168, 98, 2),
+ (164, 90, 3), (157, 83, 2), (150, 76, 1), (144, 69, 0),
+ (138, 62, 0), (132, 55, 0), (127, 49, 0), (123, 46, 0),
+ (120, 43, 1), (118, 40, 1), (119, 39, 0), (120, 39, 0),
+ (123, 44, 0), (127, 49, 1), (130, 53, 1), (134, 57, 1),
+ (153, 110, 78), (186, 152, 121), (219, 194, 164), (234, 209, 131),
+ (250, 225, 99), (239, 209, 77), (229, 193, 55), (208, 157, 30),
+ (169, 98, 8), (134, 57, 1), (124, 48, 0), (115, 40, 0),
+ (111, 35, 0), (107, 31, 0), (106, 31, 0), (105, 32, 0),
+ (110, 36, 1), (114, 38, 1), (118, 40, 1), (120, 44, 2),
+ (123, 49, 4), (128, 52, 2), (133, 56, 0), (139, 64, 0),
+ (146, 69, 1), (161, 85, 7), (164, 98, 3), (167, 112, 0),
+ (164, 111, 28), (162, 111, 56), (153, 105, 60), (145, 99, 65),
+ (162, 97, 17), (154, 83, 13), (146, 70, 10), (133, 57, 5),
+ (121, 44, 0), (116, 40, 0), (112, 36, 0), (106, 31, 0),
+ (98, 26, 1), (96, 24, 0), (93, 30, 0), (90, 36, 0),
+ (95, 34, 0), (100, 32, 0), (111, 37, 0), (120, 43, 1),
+ (136, 66, 17), (160, 104, 58), (184, 142, 100), (196, 162, 141),
+ (209, 183, 182), (228, 208, 155), (247, 233, 128), (255, 245, 130),
+ (252, 238, 116), (253, 236, 104), (250, 233, 104), (248, 230, 104),
+ (246, 222, 94), (244, 215, 85), (221, 176, 49), (185, 129, 46),
+ (154, 78, 2), (144, 66, 1), (134, 54, 1), (127, 48, 3),
+ (121, 43, 5), (118, 39, 6), (113, 42, 14), (111, 35, 9),
+ (108, 33, 1), (108, 33, 1), (111, 36, 1), (115, 40, 1),
+ (116, 39, 0), (117, 39, 0), (120, 43, 1), (123, 46, 4),
+ (132, 55, 0), (133, 57, 0), (135, 59, 1), (134, 57, 0),
+ (133, 56, 0), (132, 55, 0), (131, 52, 0), (125, 47, 1),
+ (127, 46, 3), (132, 55, 1), (133, 57, 1), (135, 59, 1),
+ (140, 65, 0), (141, 71, 0), (141, 82, 0), (141, 72, 0),
+ (130, 53, 1), (124, 47, 0), (119, 42, 0), (117, 41, 0),
+ (115, 40, 1), (113, 37, 1), (108, 34, 0), (104, 33, 1),
+ (105, 32, 0), (108, 33, 1), (108, 33, 0), (109, 34, 0),
+ (112, 36, 0), (116, 38, 0), (117, 39, 0), (113, 38, 0),
+ (106, 31, 0), (103, 28, 0), (100, 26, 0), (98, 25, 0),
+ (97, 25, 1), (97, 25, 1), (95, 28, 2), (98, 26, 1),
+ (102, 28, 1), (104, 30, 1), (104, 31, 0), (105, 32, 0),
+ (104, 31, 0), (102, 28, 1), (99, 27, 2), (98, 25, 0),
+ (96, 24, 0), (95, 23, 0), (95, 23, 1), (96, 24, 0),
+ (96, 24, 0), (97, 25, 1), (102, 28, 1), (108, 34, 0),
+ (115, 40, 0), (135, 58, 2), (140, 63, 7), (145, 68, 12),
+ (151, 76, 9), (156, 101, 60), (177, 134, 81), (202, 169, 152),
+ (220, 203, 237), (219, 203, 238), (219, 203, 240), (225, 211, 202),
+ (252, 248, 138), (243, 222, 95), (211, 162, 31), (213, 133, 20),
+ (189, 115, 20), (164, 93, 3), (155, 79, 1), (148, 75, 0),
+ (147, 73, 0), (145, 71, 0), (146, 72, 1), (148, 71, 3),
+ (132, 55, 1), (128, 51, 1), (125, 47, 1), (120, 42, 0),
+ (118, 40, 1), (116, 41, 1), (115, 43, 0), (119, 42, 0),
+ (121, 44, 0), (126, 48, 0), (132, 52, 0), (134, 57, 1),
+ (130, 63, 8), (140, 70, 11), (139, 72, 20), (146, 122, 76),
+ (198, 164, 136), (207, 180, 189), (207, 182, 204), (211, 190, 199),
+ (224, 203, 212), (237, 224, 231), (241, 240, 173), (247, 223, 101),
+ (220, 175, 82), (183, 132, 69), (165, 94, 14), (154, 78, 2),
+ (141, 63, 0), (126, 50, 0), (118, 40, 1), (108, 33, 1),
+ (102, 28, 1), (93, 23, 0), (85, 18, 1), (70, 14, 0),
+ (70, 10, 0), (75, 9, 0), (87, 19, 0), (96, 24, 0),
+ (103, 29, 0), (110, 36, 0), (118, 41, 0), (127, 49, 1),
+ (134, 58, 0), (139, 63, 1), (142, 67, 0), (143, 68, 0),
+ (144, 66, 2), (138, 62, 2), (139, 60, 1), (137, 61, 1),
+ (135, 59, 1), (134, 58, 0), (137, 58, 1), (141, 59, 0),
+ (145, 68, 0), (150, 76, 1), (160, 88, 3), (169, 102, 0),
+ (190, 127, 13), (199, 141, 16), (205, 152, 24), (206, 151, 25),
+ (200, 136, 28), (176, 107, 14), (163, 88, 7), (150, 72, 8),
+ (142, 57, 0), (128, 51, 9), (130, 35, 0), (125, 36, 4)
+ ),
+
+// 284 Apophysis-040427-51triflwr
+((105, 58, 4), (155, 91, 4), (157, 94, 12), (160, 98, 21),
+ (177, 101, 60), (194, 105, 99), (189, 109, 109), (185, 114, 120),
+ (148, 101, 21), (96, 61, 17), (44, 21, 13), (22, 11, 6),
+ (0, 1, 0), (0, 0, 13), (0, 0, 27), (1, 34, 60),
+ (2, 68, 94), (1, 57, 106), (57, 91, 147), (114, 125, 189),
+ (129, 153, 202), (145, 181, 215), (158, 195, 213), (172, 210, 211),
+ (115, 95, 156), (100, 54, 124), (85, 14, 92), (42, 9, 49),
+ (0, 4, 7), (0, 2, 3), (0, 0, 0), (1, 0, 0),
+ (6, 0, 0), (113, 36, 10), (128, 65, 5), (143, 94, 1),
+ (139, 110, 3), (136, 126, 5), (122, 128, 6), (109, 131, 7),
+ (40, 117, 1), (40, 116, 0), (41, 116, 0), (71, 107, 1),
+ (102, 99, 2), (102, 83, 4), (102, 68, 7), (115, 74, 20),
+ (93, 72, 45), (107, 55, 78), (132, 83, 104), (158, 111, 131),
+ (178, 159, 143), (198, 208, 155), (204, 203, 173), (211, 198, 192),
+ (179, 147, 158), (178, 137, 142), (178, 127, 126), (171, 140, 144),
+ (165, 154, 162), (154, 149, 172), (144, 144, 182), (117, 139, 197),
+ (54, 87, 202), (46, 59, 199), (23, 35, 180), (1, 11, 161),
+ (0, 28, 138), (0, 46, 116), (0, 50, 113), (7, 55, 129),
+ (66, 100, 210), (87, 137, 222), (109, 175, 235), (136, 191, 231),
+ (163, 208, 227), (160, 214, 218), (158, 220, 209), (148, 178, 204),
+ (128, 116, 162), (54, 45, 174), (38, 52, 128), (23, 59, 83),
+ (43, 65, 62), (63, 72, 41), (87, 78, 19), (128, 85, 7),
+ (153, 80, 1), (143, 46, 0), (133, 13, 0), (142, 10, 0),
+ (151, 7, 0), (172, 0, 23), (140, 0, 37), (136, 15, 4),
+ (137, 48, 4), (113, 71, 21), (68, 71, 48), (23, 71, 75),
+ (12, 72, 82), (1, 74, 89), (0, 66, 98), (0, 52, 110),
+ (80, 23, 126), (100, 42, 116), (121, 62, 106), (134, 65, 94),
+ (147, 69, 83), (142, 100, 16), (150, 93, 6), (162, 84, 2),
+ (170, 77, 0), (170, 83, 6), (167, 77, 3), (164, 72, 0),
+ (144, 56, 18), (129, 15, 25), (114, 13, 43), (124, 0, 62),
+ (185, 11, 34), (205, 16, 19), (226, 21, 4), (225, 31, 5),
+ (224, 41, 7), (176, 74, 0), (174, 76, 1), (165, 84, 5),
+ (152, 92, 6), (102, 95, 41), (70, 85, 42), (39, 76, 43),
+ (10, 81, 77), (0, 50, 113), (11, 0, 159), (18, 0, 168),
+ (0, 5, 183), (9, 15, 188), (18, 25, 193), (19, 24, 191),
+ (20, 23, 190), (0, 30, 136), (1, 60, 104), (22, 79, 72),
+ (60, 103, 13), (127, 129, 2), (132, 125, 4), (137, 122, 7),
+ (150, 93, 6), (157, 87, 1), (166, 83, 3), (163, 82, 1),
+ (150, 69, 6), (135, 56, 16), (120, 43, 27), (113, 27, 76),
+ (81, 3, 102), (47, 20, 99), (19, 43, 103), (38, 55, 73),
+ (1, 6, 10), (0, 0, 0), (3, 0, 0), (7, 0, 0),
+ (68, 59, 28), (108, 69, 4), (139, 103, 6), (136, 120, 7),
+ (133, 106, 0), (114, 90, 8), (96, 74, 17), (65, 69, 32),
+ (29, 79, 42), (14, 85, 71), (4, 84, 93), (16, 105, 83),
+ (6, 107, 49), (1, 108, 26), (1, 110, 19), (42, 122, 37),
+ (111, 96, 13), (145, 94, 5), (156, 91, 9), (169, 83, 6),
+ (219, 75, 49), (224, 92, 58), (229, 110, 67), (230, 84, 47),
+ (228, 70, 7), (176, 76, 0), (173, 81, 6), (188, 96, 71),
+ (215, 143, 103), (171, 192, 175), (173, 223, 220), (173, 228, 222),
+ (156, 244, 220), (149, 235, 255), (174, 233, 241), (174, 231, 240),
+ (178, 226, 238), (198, 202, 240), (203, 198, 228), (194, 230, 220),
+ (180, 225, 205), (196, 190, 174), (175, 164, 160), (182, 119, 138),
+ (143, 66, 110), (128, 34, 87), (137, 33, 82), (136, 28, 80),
+ (150, 30, 57), (167, 36, 68), (152, 93, 25), (169, 83, 6),
+ (179, 97, 0), (213, 101, 19), (233, 116, 72), (255, 187, 82),
+ (245, 255, 172), (232, 203, 247), (232, 178, 253), (239, 159, 228),
+ (221, 199, 201), (215, 169, 153), (228, 121, 75), (223, 120, 19),
+ (224, 93, 11), (206, 85, 2), (176, 76, 1), (170, 91, 0),
+ (161, 86, 3), (155, 88, 1), (152, 79, 0), (124, 54, 2),
+ (129, 35, 0), (131, 13, 0), (128, 12, 31), (106, 23, 43),
+ (75, 28, 62), (52, 7, 112), (40, 8, 145), (15, 2, 144),
+ (24, 11, 127), (64, 34, 88), (63, 45, 59), (73, 68, 26),
+ (120, 69, 4), (148, 81, 3), (164, 78, 1), (171, 78, 0),
+ (167, 69, 0), (171, 39, 62), (127, 64, 107), (136, 55, 98)
+ ),
+
+// 285 Apophysis-040427-51mitosis
+((78, 82, 109), (113, 49, 65), (84, 46, 45), (55, 44, 26),
+ (53, 48, 29), (51, 53, 32), (45, 49, 38), (40, 46, 44),
+ (45, 37, 52), (47, 44, 55), (49, 52, 59), (59, 72, 83),
+ (70, 93, 107), (96, 119, 134), (122, 145, 161), (136, 156, 172),
+ (151, 168, 184), (119, 165, 189), (119, 174, 191), (120, 184, 194),
+ (163, 219, 214), (206, 255, 234), (224, 255, 243), (242, 255, 253),
+ (250, 250, 255), (233, 211, 215), (217, 172, 175), (229, 167, 134),
+ (242, 163, 94), (244, 149, 92), (247, 136, 90), (240, 130, 71),
+ (206, 149, 106), (180, 98, 134), (204, 98, 92), (229, 99, 50),
+ (200, 91, 51), (172, 83, 53), (163, 74, 72), (155, 65, 91),
+ (113, 101, 115), (118, 113, 117), (124, 125, 119), (139, 138, 133),
+ (155, 152, 147), (154, 157, 156), (154, 162, 165), (149, 144, 164),
+ (126, 129, 138), (82, 92, 93), (64, 74, 74), (47, 57, 56),
+ (47, 41, 47), (48, 26, 38), (51, 23, 28), (54, 20, 19),
+ (51, 5, 7), (89, 7, 3), (127, 9, 0), (151, 11, 5),
+ (175, 13, 10), (194, 31, 38), (213, 50, 67), (233, 33, 20),
+ (211, 21, 5), (159, 34, 12), (161, 45, 42), (164, 56, 72),
+ (156, 54, 72), (148, 53, 73), (123, 83, 71), (124, 33, 42),
+ (80, 24, 33), (67, 12, 16), (54, 0, 0), (30, 1, 0),
+ (6, 2, 1), (4, 3, 0), (3, 4, 0), (15, 4, 2),
+ (14, 4, 5), (16, 31, 26), (30, 36, 42), (45, 42, 59),
+ (51, 49, 69), (58, 56, 80), (79, 74, 104), (84, 78, 106),
+ (66, 65, 83), (55, 59, 69), (45, 53, 56), (38, 48, 48),
+ (31, 43, 41), (15, 30, 23), (10, 8, 9), (8, 6, 0),
+ (14, 6, 4), (22, 26, 12), (29, 35, 10), (37, 45, 8),
+ (36, 53, 8), (35, 62, 9), (48, 58, 6), (53, 59, 57),
+ (90, 101, 123), (91, 121, 140), (92, 141, 158), (91, 130, 149),
+ (91, 119, 140), (105, 117, 143), (96, 112, 128), (89, 105, 128),
+ (89, 116, 107), (63, 113, 124), (65, 111, 117), (68, 109, 111),
+ (81, 104, 112), (91, 97, 123), (126, 96, 134), (163, 111, 160),
+ (191, 180, 196), (195, 195, 201), (199, 211, 207), (222, 228, 231),
+ (246, 246, 255), (252, 249, 255), (252, 253, 255), (255, 251, 255),
+ (251, 255, 255), (196, 212, 211), (181, 197, 195), (167, 182, 179),
+ (151, 150, 156), (124, 116, 137), (98, 96, 109), (80, 86, 84),
+ (42, 59, 51), (37, 53, 51), (33, 48, 51), (29, 45, 43),
+ (26, 43, 35), (21, 32, 36), (20, 14, 26), (29, 14, 21),
+ (30, 29, 27), (54, 28, 27), (60, 26, 26), (67, 25, 26),
+ (90, 32, 44), (66, 51, 46), (61, 70, 87), (87, 85, 96),
+ (141, 98, 141), (149, 101, 146), (158, 105, 151), (141, 84, 119),
+ (106, 79, 114), (87, 78, 105), (69, 83, 86), (63, 66, 71),
+ (48, 59, 55), (44, 51, 61), (45, 58, 70), (46, 65, 80),
+ (59, 92, 81), (62, 88, 101), (61, 110, 117), (60, 87, 98),
+ (41, 51, 63), (39, 54, 58), (38, 57, 53), (39, 61, 49),
+ (48, 64, 53), (53, 76, 68), (85, 85, 83), (112, 113, 73),
+ (113, 113, 103), (125, 127, 124), (158, 156, 144), (158, 170, 170),
+ (161, 165, 174), (158, 149, 178), (127, 153, 150), (114, 120, 154),
+ (121, 153, 178), (143, 166, 178), (165, 179, 179), (175, 190, 195),
+ (210, 249, 248), (241, 255, 254), (247, 255, 254), (228, 237, 242),
+ (190, 173, 215), (148, 138, 162), (111, 99, 139), (100, 105, 101),
+ (67, 99, 86), (50, 73, 65), (49, 62, 55), (56, 65, 60),
+ (61, 86, 67), (58, 103, 82), (52, 102, 109), (70, 118, 128),
+ (76, 130, 142), (84, 115, 133), (80, 109, 127), (71, 117, 130),
+ (71, 117, 130), (74, 110, 122), (76, 100, 112), (70, 78, 97),
+ (59, 56, 75), (58, 39, 58), (80, 41, 44), (61, 20, 24),
+ (47, 8, 9), (59, 0, 2), (38, 4, 2), (26, 16, 25),
+ (37, 38, 40), (39, 48, 57), (48, 55, 73), (66, 68, 91),
+ (92, 91, 105), (103, 129, 116), (128, 136, 139), (142, 157, 162),
+ (130, 172, 150), (126, 147, 140), (127, 116, 110), (115, 88, 61),
+ (67, 62, 59), (50, 45, 49), (37, 49, 45), (34, 41, 34),
+ (25, 34, 31), (34, 36, 25), (24, 49, 7), (17, 40, 0),
+ (15, 20, 0), (8, 15, 0), (6, 6, 0), (14, 4, 2),
+ (23, 3, 2), (39, 1, 0), (38, 5, 0), (48, 11, 2),
+ (51, 21, 21), (39, 33, 33), (21, 32, 28), (13, 17, 16),
+ (27, 12, 15), (35, 23, 35), (30, 27, 38), (45, 31, 31)
+ ),
+
+// 286 Apophysis-040427-51triflwer
+((142, 104, 5), (140, 108, 9), (121, 111, 10), (102, 114, 12),
+ (83, 73, 43), (64, 33, 74), (88, 73, 103), (113, 114, 132),
+ (160, 203, 186), (163, 207, 205), (167, 211, 224), (144, 200, 229),
+ (122, 189, 234), (121, 200, 242), (120, 212, 251), (133, 221, 244),
+ (147, 230, 238), (203, 237, 202), (201, 210, 196), (199, 184, 191),
+ (179, 151, 157), (159, 118, 124), (126, 110, 73), (93, 102, 23),
+ (0, 49, 115), (2, 28, 128), (4, 8, 141), (27, 24, 158),
+ (50, 40, 175), (58, 68, 190), (66, 96, 206), (99, 139, 208),
+ (149, 163, 212), (234, 235, 203), (230, 219, 194), (226, 203, 185),
+ (218, 221, 143), (211, 239, 102), (223, 220, 120), (235, 201, 138),
+ (215, 94, 13), (210, 103, 9), (205, 112, 6), (195, 105, 3),
+ (185, 99, 0), (179, 89, 2), (173, 79, 5), (167, 82, 2),
+ (165, 78, 1), (182, 65, 0), (163, 42, 0), (145, 20, 0),
+ (135, 20, 2), (126, 20, 4), (132, 12, 7), (139, 4, 11),
+ (118, 0, 61), (85, 13, 76), (52, 26, 91), (40, 16, 87),
+ (28, 7, 84), (15, 5, 42), (3, 4, 0), (0, 0, 0),
+ (0, 0, 0), (79, 54, 34), (95, 52, 20), (112, 51, 6),
+ (120, 37, 3), (129, 23, 0), (129, 18, 1), (131, 7, 5),
+ (108, 4, 57), (77, 19, 115), (47, 35, 173), (71, 51, 186),
+ (95, 68, 199), (92, 67, 178), (90, 67, 158), (89, 62, 157),
+ (99, 47, 130), (97, 50, 130), (128, 84, 133), (159, 118, 136),
+ (161, 117, 133), (163, 117, 130), (189, 133, 120), (188, 91, 58),
+ (155, 91, 4), (154, 89, 3), (154, 88, 2), (155, 84, 1),
+ (157, 80, 0), (169, 77, 0), (182, 74, 12), (188, 62, 66),
+ (165, 94, 112), (94, 93, 169), (103, 110, 178), (113, 128, 187),
+ (120, 148, 200), (127, 168, 214), (156, 178, 192), (113, 136, 190),
+ (93, 89, 165), (113, 96, 154), (134, 103, 144), (134, 95, 138),
+ (134, 87, 133), (159, 78, 93), (162, 40, 79), (127, 52, 13),
+ (143, 51, 2), (122, 69, 15), (119, 60, 21), (116, 52, 27),
+ (84, 19, 53), (34, 51, 79), (8, 66, 88), (7, 99, 84),
+ (5, 88, 78), (6, 93, 56), (8, 98, 34), (7, 89, 57),
+ (6, 80, 81), (8, 63, 93), (11, 62, 93), (0, 60, 104),
+ (0, 60, 107), (42, 26, 89), (48, 25, 88), (55, 25, 87),
+ (83, 57, 34), (116, 22, 12), (127, 13, 21), (124, 0, 52),
+ (125, 9, 72), (116, 43, 108), (108, 77, 145), (112, 80, 143),
+ (117, 84, 141), (130, 98, 139), (133, 111, 157), (90, 67, 158),
+ (17, 46, 186), (63, 103, 224), (80, 111, 209), (97, 119, 195),
+ (160, 174, 177), (210, 173, 214), (230, 215, 148), (231, 201, 147),
+ (211, 97, 71), (210, 93, 69), (210, 89, 68), (213, 81, 56),
+ (194, 65, 69), (185, 51, 60), (169, 42, 69), (155, 30, 72),
+ (163, 7, 46), (170, 1, 30), (164, 1, 37), (158, 1, 44),
+ (147, 0, 44), (133, 0, 45), (125, 15, 28), (124, 65, 25),
+ (133, 97, 0), (111, 101, 8), (89, 105, 16), (51, 90, 23),
+ (18, 67, 81), (14, 52, 97), (4, 27, 133), (10, 6, 142),
+ (25, 3, 138), (33, 0, 149), (50, 0, 126), (82, 24, 108),
+ (133, 39, 89), (156, 39, 81), (156, 40, 79), (191, 55, 59),
+ (248, 79, 10), (224, 89, 8), (200, 100, 6), (164, 85, 6),
+ (151, 90, 1), (149, 92, 2), (133, 88, 3), (119, 58, 1),
+ (84, 63, 20), (79, 75, 30), (67, 74, 23), (8, 5, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 2, 1), (2, 16, 104), (0, 37, 125), (2, 9, 142),
+ (4, 0, 147), (11, 0, 154), (16, 0, 150), (22, 1, 158),
+ (6, 0, 177), (13, 36, 210), (1, 38, 249), (0, 48, 221),
+ (18, 12, 180), (62, 10, 137), (69, 26, 69), (112, 67, 25),
+ (147, 72, 7), (163, 90, 11), (198, 118, 111), (211, 158, 116),
+ (204, 143, 114), (140, 89, 104), (56, 50, 60), (43, 58, 61),
+ (2, 2, 2), (0, 0, 0), (7, 14, 0), (80, 80, 10),
+ (106, 128, 1), (98, 129, 0), (76, 124, 4), (70, 124, 2),
+ (10, 97, 19), (1, 111, 16), (30, 126, 28), (78, 126, 6),
+ (130, 131, 1), (133, 129, 3), (137, 124, 9), (139, 112, 5),
+ (146, 95, 6), (150, 94, 7), (160, 88, 6), (171, 79, 2),
+ (175, 71, 0), (184, 71, 0), (176, 76, 0), (168, 77, 0),
+ (163, 80, 0), (154, 87, 0), (150, 88, 1), (140, 89, 0),
+ (117, 58, 0), (111, 40, 10), (58, 12, 0), (0, 0, 0)
+ ),
+
+// 287 Apophysis-040427-51yggF
+((47, 48, 42), (64, 65, 59), (76, 77, 71), (88, 89, 84),
+ (90, 90, 93), (92, 92, 102), (93, 93, 103), (94, 94, 104),
+ (100, 101, 96), (95, 96, 91), (91, 92, 87), (81, 84, 79),
+ (72, 77, 71), (61, 65, 63), (50, 54, 55), (48, 50, 52),
+ (47, 47, 49), (42, 41, 39), (42, 42, 38), (42, 43, 38),
+ (41, 42, 38), (41, 41, 39), (43, 43, 41), (45, 45, 43),
+ (54, 53, 49), (52, 55, 47), (50, 58, 45), (50, 54, 46),
+ (50, 50, 48), (50, 47, 46), (51, 45, 45), (52, 42, 40),
+ (48, 46, 47), (56, 59, 64), (64, 67, 74), (72, 75, 84),
+ (74, 78, 88), (77, 81, 92), (82, 84, 94), (87, 87, 97),
+ (84, 94, 83), (81, 87, 79), (79, 80, 75), (69, 70, 70),
+ (60, 61, 66), (57, 58, 63), (55, 56, 61), (53, 52, 57),
+ (50, 49, 54), (46, 45, 50), (43, 43, 44), (41, 41, 39),
+ (36, 36, 37), (31, 32, 36), (31, 31, 36), (32, 31, 36),
+ (22, 21, 26), (14, 16, 18), (6, 12, 10), (16, 19, 16),
+ (26, 27, 22), (28, 28, 25), (30, 30, 28), (36, 36, 34),
+ (42, 43, 38), (54, 56, 45), (56, 58, 49), (59, 60, 54),
+ (59, 60, 55), (60, 61, 56), (60, 60, 58), (59, 63, 64),
+ (59, 62, 71), (63, 65, 67), (68, 69, 64), (64, 64, 61),
+ (60, 60, 58), (59, 59, 57), (59, 59, 57), (56, 56, 54),
+ (52, 52, 50), (46, 47, 42), (45, 45, 41), (45, 44, 40),
+ (45, 44, 41), (45, 45, 43), (46, 46, 44), (46, 45, 50),
+ (45, 44, 49), (42, 41, 46), (39, 38, 43), (38, 37, 42),
+ (38, 37, 42), (42, 42, 40), (43, 43, 45), (47, 46, 51),
+ (50, 49, 54), (50, 49, 54), (48, 47, 51), (46, 46, 48),
+ (43, 43, 43), (41, 41, 39), (36, 36, 34), (32, 32, 30),
+ (32, 32, 30), (37, 37, 34), (42, 43, 38), (48, 49, 44),
+ (54, 55, 50), (62, 63, 58), (74, 70, 67), (81, 82, 76),
+ (84, 85, 80), (79, 80, 74), (78, 78, 74), (77, 77, 75),
+ (73, 74, 69), (73, 73, 71), (73, 73, 81), (75, 75, 85),
+ (89, 92, 99), (112, 105, 101), (135, 119, 103), (159, 120, 68),
+ (183, 122, 33), (175, 109, 22), (166, 103, 10), (121, 72, 3),
+ (104, 68, 8), (108, 111, 120), (121, 124, 132), (134, 137, 144),
+ (163, 162, 167), (184, 186, 181), (175, 190, 185), (167, 166, 172),
+ (127, 128, 133), (111, 112, 112), (96, 97, 91), (96, 97, 91),
+ (97, 98, 92), (117, 117, 119), (135, 141, 131), (143, 144, 148),
+ (166, 165, 161), (185, 185, 193), (205, 202, 212), (226, 220, 232),
+ (251, 229, 208), (254, 224, 200), (242, 213, 157), (243, 189, 129),
+ (144, 147, 126), (131, 133, 127), (119, 119, 129), (105, 105, 103),
+ (86, 87, 82), (73, 73, 71), (68, 68, 66), (64, 65, 60),
+ (60, 61, 56), (58, 59, 53), (58, 59, 54), (59, 60, 55),
+ (59, 60, 55), (60, 61, 55), (62, 61, 57), (63, 64, 59),
+ (67, 67, 65), (68, 69, 65), (70, 71, 66), (71, 72, 67),
+ (76, 76, 74), (93, 92, 88), (106, 107, 102), (159, 129, 101),
+ (215, 162, 94), (216, 165, 102), (217, 205, 181), (226, 227, 231),
+ (240, 243, 232), (253, 227, 200), (254, 217, 188), (248, 196, 139),
+ (180, 128, 29), (149, 98, 14), (118, 69, 0), (47, 49, 36),
+ (37, 37, 35), (27, 27, 29), (26, 25, 30), (24, 26, 23),
+ (29, 29, 27), (35, 35, 33), (40, 40, 38), (43, 44, 39),
+ (48, 49, 44), (53, 53, 51), (57, 56, 54), (58, 59, 53),
+ (59, 60, 54), (58, 59, 53), (54, 55, 50), (51, 52, 47),
+ (47, 47, 45), (44, 44, 42), (41, 46, 39), (41, 48, 41),
+ (46, 47, 42), (48, 49, 44), (50, 51, 46), (51, 52, 47),
+ (51, 51, 49), (50, 50, 50), (49, 50, 52), (52, 51, 56),
+ (54, 53, 58), (59, 59, 57), (61, 60, 56), (63, 62, 58),
+ (64, 65, 60), (64, 66, 61), (65, 65, 63), (63, 63, 61),
+ (58, 60, 59), (55, 54, 59), (53, 52, 57), (50, 49, 54),
+ (47, 46, 51), (45, 45, 43), (41, 41, 39), (37, 37, 35),
+ (35, 35, 33), (31, 31, 29), (29, 29, 27), (29, 29, 27),
+ (28, 28, 26), (28, 28, 26), (29, 30, 25), (31, 31, 23),
+ (32, 33, 27), (35, 35, 33), (38, 38, 36), (40, 39, 35),
+ (44, 43, 38), (45, 46, 41), (52, 53, 48), (58, 59, 53),
+ (59, 60, 55), (60, 61, 56), (62, 63, 58), (64, 65, 60),
+ (63, 64, 59), (59, 60, 55), (57, 57, 55), (48, 52, 53)
+ ),
+
+// 288 Apophysis-040427-51Gwrap
+((0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (167, 112, 29), (200, 139, 27), (233, 166, 25), (242, 176, 62),
+ (252, 186, 99), (245, 188, 96), (239, 191, 93), (243, 186, 90),
+ (247, 181, 87), (160, 146, 107), (107, 130, 122), (54, 114, 138),
+ (27, 127, 116), (0, 141, 95), (16, 154, 83), (32, 167, 72),
+ (181, 172, 139), (134, 110, 122), (87, 49, 106), (43, 24, 53),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (82, 53, 26), (164, 107, 52),
+ (194, 137, 36), (224, 168, 21), (250, 151, 6), (234, 66, 27),
+ (220, 36, 28), (237, 30, 27), (254, 24, 26), (233, 12, 21),
+ (212, 0, 17), (152, 20, 9), (92, 40, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (103, 49, 62), (178, 115, 44), (254, 181, 27),
+ (250, 181, 57), (247, 181, 87), (250, 183, 92), (254, 188, 29),
+ (255, 152, 0), (198, 107, 26), (141, 63, 53), (111, 57, 56),
+ (82, 51, 59), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 0, 0), (132, 56, 32), (176, 90, 75),
+ (203, 90, 76), (184, 79, 57), (174, 62, 42), (95, 53, 31),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (49, 70, 63),
+ (166, 146, 119), (197, 190, 171), (255, 255, 243), (254, 255, 224),
+ (253, 255, 120), (251, 184, 95), (255, 57, 58), (190, 6, 30),
+ (92, 37, 43), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 1), (75, 118, 73), (103, 202, 0),
+ (170, 188, 76), (190, 188, 103), (185, 153, 52), (130, 104, 47),
+ (44, 47, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 289 Apophysis-040428-1Gradient1
+((28, 157, 73), (31, 129, 68), (15, 64, 34), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (22, 98, 0), (25, 142, 4), (28, 187, 8), (26, 202, 4),
+ (25, 218, 1), (25, 218, 1), (25, 218, 1), (25, 218, 1),
+ (25, 218, 1), (25, 218, 1), (25, 218, 1), (25, 218, 1),
+ (28, 218, 4), (31, 219, 7), (32, 219, 8), (33, 219, 10),
+ (20, 180, 76), (25, 158, 73), (31, 137, 71), (31, 68, 76),
+ (31, 0, 82), (30, 0, 95), (30, 0, 109), (32, 0, 162),
+ (26, 0, 166), (75, 0, 131), (117, 29, 98), (159, 59, 66),
+ (172, 101, 68), (185, 144, 71), (193, 143, 42), (202, 143, 14),
+ (255, 55, 0), (228, 52, 30), (202, 50, 61), (165, 85, 44),
+ (129, 121, 27), (150, 139, 17), (171, 157, 7), (236, 218, 10),
+ (243, 224, 10), (243, 224, 10), (216, 186, 40), (189, 148, 71),
+ (163, 138, 58), (137, 129, 46), (140, 126, 51), (144, 124, 57),
+ (150, 144, 66), (109, 150, 83), (68, 157, 101), (55, 78, 106),
+ (43, 0, 112), (55, 0, 124), (67, 0, 137), (63, 0, 154),
+ (55, 0, 145), (13, 53, 36), (18, 119, 18), (23, 186, 1),
+ (24, 202, 1), (25, 218, 1), (25, 218, 1), (25, 218, 1),
+ (25, 218, 1), (23, 190, 1), (21, 163, 2), (22, 154, 5),
+ (23, 145, 9), (25, 151, 41), (28, 157, 73), (56, 169, 96),
+ (73, 162, 105), (207, 151, 41), (225, 187, 25), (243, 224, 10),
+ (226, 193, 36), (209, 163, 62), (241, 233, 218), (236, 248, 240),
+ (243, 224, 10), (249, 219, 5), (255, 215, 0), (255, 196, 0),
+ (255, 178, 0), (255, 132, 0), (201, 91, 0), (213, 51, 63),
+ (207, 0, 35), (255, 9, 0), (255, 63, 0), (255, 118, 0),
+ (255, 144, 0), (255, 171, 0), (255, 211, 0), (243, 224, 10),
+ (243, 224, 10), (243, 224, 10), (243, 224, 10), (243, 224, 10),
+ (243, 224, 10), (255, 200, 0), (255, 160, 0), (255, 138, 0),
+ (203, 145, 18), (195, 146, 47), (205, 105, 61), (216, 65, 76),
+ (209, 40, 52), (242, 0, 10), (204, 0, 37), (207, 50, 60),
+ (150, 58, 66), (90, 67, 41), (30, 77, 17), (23, 81, 11),
+ (17, 85, 6), (17, 74, 6), (14, 53, 7), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (18, 18, 13), (36, 36, 27),
+ (38, 68, 26), (61, 61, 45), (76, 61, 8), (32, 73, 18),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (13, 74, 5), (18, 129, 4), (32, 189, 10),
+ (28, 218, 4), (32, 219, 9), (34, 219, 11), (37, 219, 14),
+ (73, 190, 54), (66, 195, 111), (136, 236, 124), (183, 227, 199),
+ (73, 179, 110), (73, 177, 109), (73, 176, 109), (73, 176, 109),
+ (74, 155, 105), (141, 117, 55), (159, 59, 66), (189, 55, 65),
+ (202, 52, 63), (218, 76, 86), (210, 38, 159), (203, 0, 233),
+ (139, 0, 221), (127, 0, 233), (73, 0, 157), (55, 0, 109),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (14, 58, 6), (18, 86, 6), (12, 113, 0),
+ (19, 121, 4), (31, 147, 74), (62, 170, 100), (68, 173, 105),
+ (68, 173, 105), (49, 165, 90), (51, 109, 39), (29, 82, 15),
+ (47, 80, 0), (44, 85, 0), (42, 91, 0), (46, 128, 31),
+ (31, 147, 74), (32, 166, 80), (37, 160, 80), (45, 136, 29),
+ (23, 145, 9), (17, 126, 3), (12, 113, 0), (19, 130, 5),
+ (20, 156, 2), (25, 190, 4), (25, 218, 1), (28, 218, 4),
+ (43, 200, 0), (98, 174, 0), (222, 205, 9), (243, 224, 10),
+ (243, 224, 10), (243, 224, 10), (243, 224, 10), (255, 207, 0),
+ (239, 171, 21), (203, 145, 18), (140, 132, 45), (64, 165, 52),
+ (45, 173, 27), (31, 214, 9), (30, 207, 8), (71, 158, 0),
+ (104, 93, 21), (91, 91, 68), (72, 111, 92), (118, 58, 63),
+ (153, 0, 74), (159, 0, 70), (169, 0, 62), (176, 0, 45),
+ (133, 22, 30), (98, 76, 19), (19, 111, 5), (20, 153, 3),
+ (30, 207, 8), (33, 219, 10), (41, 201, 20), (47, 165, 88),
+ (66, 163, 101), (71, 162, 104), (113, 144, 129), (152, 145, 68),
+ (198, 155, 69), (209, 162, 61), (209, 162, 63), (201, 157, 69),
+ (208, 188, 181), (173, 137, 125), (161, 59, 67), (122, 58, 63),
+ (131, 21, 30), (73, 8, 13), (117, 18, 25), (128, 61, 37),
+ (126, 105, 22), (162, 55, 0), (197, 30, 43), (202, 0, 39),
+ (192, 0, 46), (191, 43, 54), (169, 119, 30), (169, 59, 67)
+ ),
+
+// 290 Apophysis-040428-3Gradient2
+((0, 97, 216), (82, 149, 179), (115, 153, 172), (148, 157, 166),
+ (146, 144, 131), (144, 132, 97), (139, 133, 99), (134, 134, 102),
+ (91, 95, 94), (91, 95, 94), (91, 95, 94), (101, 99, 86),
+ (112, 104, 79), (128, 114, 69), (145, 124, 60), (119, 100, 48),
+ (93, 77, 37), (54, 54, 40), (70, 72, 64), (86, 90, 89),
+ (137, 131, 132), (188, 173, 175), (187, 183, 185), (186, 193, 195),
+ (244, 216, 216), (206, 192, 192), (168, 168, 168), (104, 114, 156),
+ (40, 61, 144), (31, 40, 140), (22, 19, 137), (3, 0, 128),
+ (3, 0, 128), (1, 0, 37), (0, 0, 18), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (7, 7, 5),
+ (15, 15, 11), (18, 18, 13), (21, 21, 16), (38, 38, 28),
+ (73, 73, 54), (116, 186, 132), (155, 182, 131), (194, 179, 130),
+ (195, 159, 78), (196, 139, 26), (183, 129, 29), (170, 120, 32),
+ (104, 78, 24), (65, 52, 25), (27, 27, 27), (14, 14, 13),
+ (1, 1, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (4, 4, 3),
+ (8, 8, 6), (22, 22, 16), (28, 39, 15), (35, 101, 0),
+ (64, 178, 0), (215, 33, 24), (185, 21, 21), (155, 10, 19),
+ (137, 12, 21), (119, 14, 23), (64, 5, 10), (15, 15, 11),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (41, 8, 1),
+ (59, 37, 0), (44, 44, 33), (46, 46, 34), (48, 48, 36),
+ (56, 62, 66), (73, 53, 144), (126, 64, 95), (180, 129, 97),
+ (202, 174, 132), (214, 187, 141), (226, 201, 150), (233, 200, 138),
+ (240, 199, 127), (236, 176, 60), (228, 148, 6), (255, 69, 0),
+ (253, 40, 19), (221, 12, 26), (190, 6, 13), (160, 0, 0),
+ (145, 15, 18), (97, 45, 30), (97, 78, 39), (87, 87, 65),
+ (89, 120, 73), (85, 124, 71), (82, 129, 70), (56, 110, 68),
+ (31, 92, 67), (5, 80, 0), (30, 30, 22), (42, 32, 57),
+ (54, 17, 113), (22, 19, 142), (41, 11, 138), (61, 3, 135),
+ (82, 8, 143), (110, 5, 141), (86, 4, 137), (68, 0, 114),
+ (23, 21, 37), (23, 22, 27), (23, 23, 17), (22, 22, 16),
+ (24, 24, 18), (55, 15, 22), (114, 17, 89), (168, 6, 103),
+ (178, 14, 128), (80, 5, 135), (42, 4, 131), (4, 3, 128),
+ (1, 0, 36), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (23, 23, 17), (31, 31, 28), (39, 39, 39), (52, 39, 91),
+ (66, 15, 125), (59, 55, 151), (58, 56, 156), (113, 121, 125),
+ (135, 149, 159), (138, 142, 145), (91, 95, 94), (48, 48, 48),
+ (38, 38, 28), (21, 21, 16), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (36, 7, 1), (70, 45, 1),
+ (88, 56, 0), (143, 95, 3), (196, 130, 4), (228, 148, 9),
+ (228, 150, 13), (232, 163, 42), (233, 172, 64), (190, 178, 76),
+ (146, 141, 97), (122, 112, 84), (124, 67, 63), (111, 78, 27),
+ (168, 16, 20), (197, 51, 38), (161, 89, 66), (185, 127, 96),
+ (212, 130, 125), (245, 162, 168), (228, 188, 140), (209, 187, 160),
+ (191, 189, 153), (210, 196, 152), (252, 202, 101), (238, 185, 71),
+ (247, 175, 48), (233, 161, 34), (240, 161, 17), (230, 146, 0),
+ (230, 146, 0), (255, 84, 0), (238, 7, 0), (232, 11, 26),
+ (153, 8, 19), (75, 6, 12), (41, 8, 1), (7, 7, 5),
+ (0, 0, 0), (1, 1, 1), (15, 15, 11), (19, 19, 19),
+ (0, 16, 87), (0, 55, 114), (0, 113, 80), (82, 131, 67),
+ (90, 178, 40), (99, 151, 86), (90, 138, 79), (87, 87, 65),
+ (68, 64, 42), (57, 57, 42), (91, 63, 46), (148, 51, 66),
+ (177, 9, 169), (205, 9, 169), (205, 9, 169), (206, 9, 169),
+ (206, 9, 169), (217, 65, 165), (216, 120, 119), (216, 143, 31),
+ (224, 148, 14), (201, 127, 0), (167, 124, 105), (187, 141, 58)
+ ),
+
+// 291 Apophysis-040602-1
+((255, 255, 255), (255, 255, 255), (236, 214, 211), (218, 173, 167),
+ (184, 166, 158), (150, 160, 150), (150, 160, 150), (150, 160, 150),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (97, 83, 57), (104, 101, 84), (111, 119, 111),
+ (125, 134, 125), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (148, 158, 148), (149, 159, 149), (150, 160, 150), (145, 155, 145),
+ (140, 150, 140), (134, 127, 103), (128, 104, 66), (161, 59, 19),
+ (209, 127, 0), (182, 125, 108), (161, 137, 124), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (115, 97, 57), (160, 100, 51), (206, 103, 45), (181, 121, 90),
+ (157, 139, 135), (152, 147, 141), (147, 156, 147), (150, 160, 150),
+ (150, 160, 150), (150, 160, 150), (150, 160, 150), (150, 160, 150),
+ (150, 160, 150), (150, 160, 150), (150, 160, 150), (150, 160, 150),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (93, 99, 93), (91, 71, 47),
+ (3, 9, 5), (1, 4, 2), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (1, 1, 0), (25, 9, 0),
+ (71, 47, 13), (133, 83, 60), (136, 116, 100), (140, 150, 140),
+ (145, 155, 145), (150, 160, 150), (150, 160, 150), (184, 166, 126),
+ (255, 237, 174), (231, 221, 194), (208, 205, 214), (179, 182, 182),
+ (150, 160, 150), (140, 150, 140), (138, 148, 138), (87, 93, 87),
+ (1, 28, 117), (150, 160, 150), (202, 207, 202), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (150, 160, 150), (140, 150, 140),
+ (93, 92, 62), (43, 35, 22), (27, 25, 11), (12, 15, 0),
+ (1, 3, 0), (0, 0, 0), (1, 1, 1), (4, 3, 0),
+ (60, 52, 39), (100, 101, 89), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (87, 93, 87), (52, 41, 37), (26, 21, 15), (4, 4, 2),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 1), (1, 0, 3), (1, 0, 5),
+ (1, 0, 9), (17, 15, 54), (38, 58, 108), (103, 115, 107),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (149, 151, 127),
+ (122, 131, 122), (115, 60, 40), (97, 28, 21), (22, 8, 8),
+ (4, 0, 2), (1, 0, 0), (2, 0, 0), (4, 0, 0),
+ (22, 0, 0), (69, 2, 19), (114, 21, 16), (102, 80, 56),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (150, 160, 150), (150, 160, 150), (212, 208, 200),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (212, 208, 200), (150, 160, 150), (150, 160, 150),
+ (150, 160, 150), (150, 160, 150), (150, 160, 150), (150, 160, 150),
+ (150, 160, 150), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (140, 150, 140), (140, 150, 140),
+ (140, 150, 140), (140, 150, 140), (150, 160, 150), (150, 160, 150),
+ (150, 160, 150), (150, 160, 150), (150, 160, 150), (150, 160, 150),
+ (150, 160, 150), (150, 160, 150), (150, 160, 150), (150, 160, 150),
+ (150, 160, 150), (150, 160, 150), (209, 182, 161), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (150, 160, 150),
+ (139, 148, 139), (93, 99, 93), (48, 64, 64), (11, 17, 53),
+ (0, 23, 117), (0, 23, 119), (3, 21, 119), (2, 22, 109),
+ (1, 0, 9), (0, 0, 5), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 1, 0), (3, 0, 0), (7, 0, 0),
+ (56, 21, 2), (117, 65, 43), (150, 136, 107), (150, 160, 150),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)
+ ),
+
+// 292 Apophysis-040531-100figurine_2abcd
+((210, 159, 138), (220, 182, 145), (209, 178, 152), (198, 175, 159),
+ (208, 159, 148), (218, 143, 137), (211, 123, 155), (204, 104, 174),
+ (207, 57, 154), (190, 58, 127), (174, 59, 100), (142, 46, 95),
+ (111, 33, 91), (110, 38, 90), (109, 43, 89), (116, 41, 92),
+ (123, 40, 96), (133, 54, 119), (134, 61, 133), (135, 68, 148),
+ (123, 99, 151), (111, 131, 155), (107, 134, 164), (104, 138, 173),
+ (97, 130, 165), (91, 124, 159), (85, 118, 153), (100, 99, 148),
+ (115, 80, 144), (128, 83, 132), (142, 86, 121), (177, 116, 111),
+ (190, 135, 130), (184, 183, 152), (190, 148, 153), (196, 113, 155),
+ (188, 78, 186), (180, 43, 217), (164, 38, 190), (148, 33, 164),
+ (73, 36, 116), (59, 21, 95), (46, 7, 74), (44, 5, 67),
+ (43, 4, 61), (43, 4, 62), (43, 5, 64), (44, 4, 64),
+ (53, 8, 73), (79, 31, 91), (99, 47, 97), (120, 64, 103),
+ (140, 74, 103), (161, 84, 104), (170, 83, 105), (180, 82, 107),
+ (176, 70, 108), (159, 59, 104), (142, 48, 100), (117, 39, 97),
+ (93, 31, 94), (91, 36, 95), (90, 41, 97), (69, 77, 80),
+ (59, 77, 115), (80, 106, 155), (77, 107, 149), (75, 109, 144),
+ (70, 101, 139), (66, 94, 134), (70, 92, 129), (57, 75, 121),
+ (55, 74, 116), (64, 83, 121), (73, 93, 126), (88, 107, 127),
+ (103, 122, 129), (89, 114, 134), (76, 106, 140), (72, 83, 147),
+ (78, 43, 109), (68, 27, 93), (63, 19, 86), (59, 12, 80),
+ (57, 11, 77), (56, 10, 75), (56, 10, 74), (46, 42, 75),
+ (48, 52, 100), (61, 44, 107), (75, 37, 114), (74, 34, 112),
+ (73, 32, 111), (82, 29, 101), (91, 30, 89), (107, 40, 93),
+ (117, 50, 101), (142, 58, 120), (152, 44, 130), (163, 31, 140),
+ (155, 39, 122), (148, 47, 105), (117, 31, 104), (109, 31, 93),
+ (89, 23, 113), (72, 15, 100), (56, 7, 88), (56, 8, 86),
+ (56, 10, 85), (57, 9, 83), (72, 15, 83), (85, 14, 80),
+ (92, 24, 73), (108, 29, 86), (119, 33, 90), (131, 38, 95),
+ (160, 67, 96), (189, 90, 119), (203, 90, 134), (203, 98, 115),
+ (206, 117, 123), (208, 127, 131), (210, 138, 139), (210, 137, 133),
+ (210, 136, 127), (203, 127, 131), (199, 131, 132), (182, 119, 136),
+ (163, 131, 144), (135, 140, 196), (126, 145, 187), (117, 151, 179),
+ (92, 118, 151), (92, 74, 116), (90, 47, 101), (81, 31, 92),
+ (80, 26, 102), (73, 26, 98), (66, 27, 94), (63, 27, 95),
+ (61, 28, 97), (48, 64, 98), (55, 74, 114), (45, 53, 92),
+ (43, 40, 83), (64, 23, 89), (68, 23, 87), (72, 24, 86),
+ (80, 21, 89), (86, 27, 91), (100, 38, 89), (113, 50, 93),
+ (205, 48, 115), (203, 48, 140), (202, 49, 165), (188, 56, 217),
+ (215, 60, 224), (205, 103, 213), (192, 114, 215), (236, 164, 202),
+ (239, 170, 199), (204, 198, 212), (204, 183, 195), (205, 169, 179),
+ (166, 121, 162), (132, 90, 138), (125, 62, 109), (93, 47, 96),
+ (63, 15, 77), (58, 11, 75), (54, 8, 73), (57, 9, 71),
+ (68, 14, 74), (91, 21, 83), (110, 36, 95), (149, 56, 113),
+ (183, 86, 117), (194, 110, 123), (197, 115, 127), (199, 123, 127),
+ (192, 111, 126), (189, 105, 128), (172, 104, 119), (144, 88, 115),
+ (134, 67, 100), (125, 59, 96), (116, 51, 93), (109, 47, 98),
+ (104, 45, 89), (99, 37, 88), (93, 44, 91), (101, 47, 97),
+ (108, 63, 102), (115, 79, 117), (140, 84, 111), (165, 99, 103),
+ (184, 106, 122), (181, 119, 130), (175, 126, 130), (159, 94, 118),
+ (143, 68, 111), (133, 63, 100), (126, 48, 96), (125, 59, 95),
+ (123, 72, 105), (134, 79, 110), (152, 71, 140), (190, 48, 158),
+ (179, 76, 185), (146, 91, 158), (136, 108, 157), (131, 140, 181),
+ (101, 131, 165), (96, 95, 127), (88, 70, 118), (82, 40, 106),
+ (86, 31, 88), (90, 29, 86), (91, 30, 89), (99, 30, 87),
+ (101, 31, 85), (103, 28, 87), (101, 27, 86), (101, 25, 89),
+ (94, 24, 87), (78, 22, 85), (70, 20, 81), (71, 18, 74),
+ (66, 19, 74), (62, 12, 73), (54, 10, 71), (47, 5, 68),
+ (47, 6, 66), (47, 6, 66), (51, 6, 71), (55, 6, 72),
+ (58, 6, 72), (57, 11, 76), (74, 13, 80), (88, 15, 84),
+ (95, 19, 81), (87, 30, 81), (80, 32, 90), (72, 27, 94),
+ (68, 19, 110), (66, 17, 109), (56, 9, 89), (49, 7, 81),
+ (46, 6, 76), (47, 7, 77), (54, 8, 81), (69, 21, 81),
+ (85, 31, 89), (106, 60, 99), (145, 91, 114), (161, 109, 121)
+ ),
+
+// 293 Apo-040627-1_chickadee_pix
+((148, 120, 109), (130, 103, 92), (115, 95, 94), (101, 88, 97),
+ (103, 83, 81), (105, 79, 66), (106, 80, 67), (107, 81, 68),
+ (133, 108, 101), (128, 112, 115), (124, 116, 129), (134, 119, 120),
+ (145, 123, 112), (144, 123, 115), (144, 123, 118), (144, 123, 121),
+ (145, 123, 125), (147, 122, 115), (167, 143, 113), (187, 164, 112),
+ (195, 174, 127), (204, 185, 143), (221, 197, 165), (238, 210, 188),
+ (158, 137, 134), (136, 117, 109), (115, 97, 85), (91, 73, 62),
+ (68, 50, 40), (59, 43, 35), (50, 37, 31), (33, 20, 4),
+ (23, 9, 0), (5, 0, 1), (3, 1, 1), (1, 3, 2),
+ (6, 4, 3), (11, 5, 5), (20, 15, 8), (29, 26, 11),
+ (87, 57, 29), (119, 92, 25), (151, 127, 21), (176, 145, 10),
+ (202, 163, 0), (191, 160, 3), (181, 157, 7), (154, 141, 27),
+ (156, 111, 44), (142, 115, 104), (148, 119, 108), (154, 124, 113),
+ (154, 127, 116), (154, 130, 120), (153, 128, 119), (153, 126, 119),
+ (150, 122, 111), (148, 121, 110), (147, 120, 109), (142, 114, 103),
+ (137, 109, 98), (135, 107, 97), (134, 105, 97), (138, 108, 97),
+ (139, 111, 100), (148, 120, 109), (144, 118, 109), (141, 116, 109),
+ (140, 116, 110), (140, 116, 112), (137, 114, 108), (132, 105, 98),
+ (115, 88, 81), (107, 84, 75), (100, 80, 69), (87, 69, 60),
+ (75, 58, 51), (68, 52, 47), (62, 47, 44), (60, 46, 45),
+ (60, 50, 61), (52, 45, 39), (56, 44, 36), (61, 43, 33),
+ (59, 42, 32), (58, 41, 31), (52, 39, 33), (43, 33, 32),
+ (39, 31, 12), (38, 32, 20), (37, 34, 29), (42, 36, 34),
+ (47, 38, 39), (57, 43, 34), (60, 46, 35), (59, 46, 40),
+ (64, 50, 50), (67, 55, 67), (64, 54, 68), (61, 54, 70),
+ (66, 57, 70), (72, 60, 70), (86, 65, 60), (87, 67, 56),
+ (76, 58, 48), (64, 48, 38), (53, 39, 28), (44, 33, 17),
+ (35, 27, 6), (25, 23, 10), (13, 8, 5), (7, 1, 1),
+ (3, 0, 0), (0, 1, 0), (0, 0, 0), (1, 0, 0),
+ (5, 0, 0), (5, 1, 0), (12, 8, 0), (20, 18, 0),
+ (49, 34, 15), (60, 44, 27), (72, 54, 40), (76, 58, 45),
+ (81, 63, 51), (97, 77, 66), (101, 78, 72), (103, 80, 72),
+ (117, 92, 87), (130, 100, 89), (125, 96, 81), (120, 93, 74),
+ (123, 85, 62), (148, 113, 31), (184, 127, 22), (156, 109, 1),
+ (90, 69, 2), (62, 43, 2), (35, 17, 3), (33, 12, 1),
+ (31, 7, 0), (24, 6, 0), (19, 1, 0), (17, 4, 0),
+ (15, 5, 0), (13, 6, 0), (14, 6, 0), (15, 6, 1),
+ (21, 7, 0), (32, 22, 0), (38, 17, 0), (46, 34, 0),
+ (55, 39, 26), (55, 40, 30), (55, 42, 34), (58, 44, 33),
+ (56, 43, 35), (45, 34, 32), (36, 23, 15), (29, 10, 12),
+ (9, 8, 13), (10, 6, 0), (9, 5, 0), (9, 4, 0),
+ (9, 1, 0), (11, 1, 0), (16, 8, 0), (31, 10, 15),
+ (48, 39, 40), (53, 41, 40), (58, 44, 41), (59, 45, 42),
+ (71, 51, 42), (77, 61, 48), (98, 75, 61), (104, 77, 66),
+ (109, 82, 71), (111, 89, 78), (119, 92, 83), (133, 105, 93),
+ (152, 119, 104), (164, 133, 115), (160, 151, 142), (178, 158, 167),
+ (215, 204, 208), (205, 195, 196), (196, 186, 185), (171, 162, 157),
+ (145, 134, 112), (127, 103, 91), (115, 93, 82), (100, 76, 64),
+ (79, 57, 44), (70, 48, 24), (51, 37, 24), (29, 26, 19),
+ (15, 10, 17), (11, 6, 3), (6, 5, 1), (15, 10, 6),
+ (36, 22, 13), (57, 40, 30), (72, 53, 39), (94, 67, 48),
+ (105, 79, 64), (107, 81, 66), (102, 76, 63), (87, 65, 51),
+ (71, 53, 41), (60, 42, 30), (57, 40, 30), (62, 48, 3),
+ (61, 51, 0), (69, 47, 0), (99, 72, 27), (110, 87, 45),
+ (127, 101, 86), (150, 120, 110), (160, 147, 138), (178, 170, 149),
+ (201, 187, 187), (219, 206, 213), (229, 212, 202), (217, 208, 209),
+ (187, 171, 174), (155, 132, 126), (130, 103, 94), (106, 79, 70),
+ (93, 70, 52), (78, 59, 45), (67, 49, 39), (63, 45, 33),
+ (70, 51, 37), (77, 59, 47), (81, 74, 46), (96, 74, 63),
+ (93, 71, 57), (84, 60, 50), (70, 52, 32), (50, 41, 26),
+ (44, 27, 7), (41, 36, 0), (53, 45, 9), (61, 44, 34),
+ (82, 60, 47), (100, 77, 63), (108, 82, 69), (122, 95, 84),
+ (126, 104, 93), (132, 108, 98), (141, 113, 102), (141, 113, 109),
+ (138, 111, 104), (131, 106, 101), (125, 101, 99), (117, 98, 84)
+ ),
+
+
+
+// 294 2u0026t.jpg from bTomchek
+((95, 14, 0), (88, 23, 17), (91, 40, 23), (94, 57, 30),
+ (97, 63, 20), (100, 70, 10), (96, 68, 8), (93, 67, 6),
+ (89, 32, 12), (93, 23, 17), (98, 15, 23), (100, 14, 20),
+ (102, 13, 17), (106, 11, 15), (110, 9, 13), (112, 9, 14),
+ (115, 10, 15), (124, 27, 10), (133, 44, 14), (142, 61, 18),
+ (136, 77, 21), (131, 94, 24), (131, 103, 16), (131, 112, 9),
+ (141, 107, 7), (153, 104, 3), (166, 101, 0), (172, 109, 5),
+ (178, 117, 10), (179, 118, 8), (181, 119, 6), (181, 117, 9),
+ (179, 114, 10), (147, 100, 8), (137, 90, 8), (127, 80, 8),
+ (131, 77, 6), (135, 75, 5), (135, 75, 9), (135, 75, 13),
+ (150, 99, 16), (155, 97, 13), (161, 95, 11), (165, 103, 5),
+ (169, 112, 0), (165, 121, 0), (161, 131, 0), (163, 133, 0),
+ (165, 135, 1), (152, 120, 9), (140, 94, 11), (128, 69, 13),
+ (121, 53, 13), (115, 37, 14), (116, 29, 15), (117, 22, 16),
+ (101, 9, 12), (99, 14, 16), (98, 20, 20), (105, 30, 16),
+ (112, 41, 13), (120, 51, 9), (128, 61, 6), (130, 72, 0),
+ (136, 89, 0), (143, 78, 10), (139, 77, 12), (135, 77, 14),
+ (130, 68, 17), (125, 60, 20), (110, 42, 23), (107, 34, 25),
+ (125, 51, 26), (130, 52, 20), (135, 53, 15), (136, 57, 13),
+ (137, 61, 11), (140, 68, 9), (144, 75, 8), (160, 81, 2),
+ (165, 77, 5), (136, 62, 0), (123, 44, 1), (110, 26, 2),
+ (104, 22, 1), (99, 18, 0), (90, 12, 8), (87, 6, 5),
+ (95, 6, 8), (94, 10, 11), (94, 14, 15), (92, 13, 17),
+ (90, 13, 19), (90, 22, 21), (99, 32, 23), (99, 42, 23),
+ (107, 38, 22), (117, 49, 36), (127, 51, 26), (137, 53, 16),
+ (144, 55, 22), (151, 57, 29), (144, 73, 41), (135, 72, 28),
+ (134, 60, 33), (123, 48, 24), (113, 36, 16), (112, 28, 10),
+ (112, 20, 5), (112, 14, 3), (113, 19, 7), (119, 43, 9),
+ (129, 50, 11), (128, 43, 14), (125, 39, 18), (123, 35, 23),
+ (112, 33, 18), (115, 25, 16), (112, 16, 17), (103, 8, 16),
+ (109, 29, 20), (113, 30, 25), (117, 31, 30), (117, 29, 32),
+ (118, 27, 34), (106, 28, 28), (105, 23, 25), (103, 18, 11),
+ (103, 16, 7), (128, 43, 4), (129, 54, 4), (131, 65, 4),
+ (141, 79, 0), (159, 87, 2), (167, 92, 9), (176, 100, 14),
+ (174, 119, 16), (174, 120, 14), (175, 121, 13), (174, 118, 10),
+ (173, 115, 8), (164, 103, 0), (164, 101, 0), (153, 103, 14),
+ (150, 120, 10), (137, 149, 5), (147, 151, 3), (157, 154, 1),
+ (166, 140, 4), (173, 146, 0), (172, 136, 0), (174, 130, 0),
+ (184, 152, 5), (187, 154, 7), (191, 156, 10), (180, 156, 0),
+ (184, 147, 0), (183, 137, 0), (183, 132, 4), (179, 129, 4),
+ (182, 132, 7), (174, 118, 33), (169, 110, 43), (165, 103, 54),
+ (145, 94, 28), (150, 77, 36), (140, 79, 25), (147, 85, 10),
+ (147, 84, 7), (144, 84, 3), (142, 84, 0), (155, 84, 2),
+ (160, 87, 0), (157, 85, 0), (155, 82, 3), (140, 71, 2),
+ (135, 66, 0), (129, 58, 0), (115, 49, 0), (110, 33, 5),
+ (97, 19, 0), (82, 14, 0), (86, 11, 6), (86, 7, 12),
+ (76, 21, 14), (80, 23, 16), (84, 25, 19), (90, 29, 24),
+ (106, 42, 15), (104, 60, 0), (104, 54, 0), (109, 34, 5),
+ (101, 19, 7), (106, 14, 1), (115, 28, 1), (134, 47, 4),
+ (133, 69, 5), (151, 86, 6), (161, 87, 0), (170, 92, 7),
+ (166, 97, 2), (162, 97, 3), (157, 98, 6), (154, 95, 3),
+ (139, 98, 0), (125, 98, 9), (126, 76, 5), (124, 63, 0),
+ (114, 56, 8), (103, 66, 13), (117, 61, 14), (127, 63, 15),
+ (133, 65, 16), (138, 68, 17), (151, 84, 13), (158, 103, 13),
+ (169, 118, 11), (176, 124, 4), (175, 127, 1), (175, 139, 0),
+ (171, 146, 1), (167, 148, 7), (170, 150, 3), (174, 160, 1),
+ (178, 159, 5), (178, 162, 4), (176, 173, 8), (177, 172, 10),
+ (168, 163, 9), (177, 172, 6), (180, 172, 1), (181, 191, 8),
+ (177, 175, 4), (160, 167, 2), (152, 163, 0), (152, 155, 2),
+ (142, 146, 7), (151, 125, 4), (148, 115, 10), (140, 98, 0),
+ (128, 80, 0), (123, 70, 0), (120, 55, 1), (126, 43, 9),
+ (121, 33, 11), (128, 18, 17), (129, 20, 17), (143, 39, 14),
+ (147, 71, 9), (148, 90, 6), (149, 110, 7), (156, 132, 0),
+ (165, 139, 0), (168, 140, 0), (166, 132, 6), (169, 139, 17)
+ ),
+
+// 295 2u0007t.jpg
+((41, 88, 10), (77, 67, 16), (81, 66, 19), (86, 65, 22),
+ (89, 70, 27), (92, 75, 32), (69, 79, 31), (47, 84, 30),
+ (50, 38, 48), (58, 33, 45), (67, 29, 42), (56, 60, 57),
+ (45, 92, 72), (54, 104, 99), (64, 116, 127), (67, 120, 143),
+ (70, 124, 160), (96, 157, 178), (105, 163, 177), (114, 169, 176),
+ (111, 158, 104), (108, 148, 33), (115, 144, 28), (122, 141, 23),
+ (68, 99, 130), (62, 116, 143), (56, 134, 157), (45, 105, 142),
+ (34, 77, 128), (17, 77, 98), (0, 77, 69), (0, 78, 75),
+ (51, 121, 131), (89, 156, 185), (105, 150, 183), (121, 145, 181),
+ (123, 129, 174), (126, 113, 167), (117, 102, 162), (108, 92, 157),
+ (92, 15, 47), (134, 9, 52), (177, 4, 57), (181, 51, 49),
+ (185, 99, 42), (176, 108, 45), (168, 118, 49), (176, 155, 38),
+ (178, 160, 36), (167, 161, 25), (128, 158, 23), (90, 156, 22),
+ (74, 152, 50), (58, 148, 78), (64, 161, 104), (71, 174, 131),
+ (104, 137, 182), (120, 121, 174), (137, 106, 166), (150, 118, 99),
+ (163, 131, 32), (176, 144, 28), (190, 157, 24), (203, 165, 42),
+ (198, 120, 37), (195, 78, 34), (180, 84, 28), (165, 90, 23),
+ (142, 90, 28), (120, 91, 33), (39, 65, 56), (15, 66, 57),
+ (56, 36, 35), (64, 28, 39), (72, 20, 43), (67, 25, 57),
+ (63, 31, 72), (73, 51, 111), (83, 72, 151), (92, 80, 144),
+ (143, 30, 76), (134, 30, 27), (151, 47, 30), (169, 64, 34),
+ (175, 83, 35), (181, 102, 36), (188, 124, 37), (190, 147, 43),
+ (179, 189, 66), (172, 175, 52), (165, 161, 38), (149, 149, 32),
+ (133, 137, 26), (159, 126, 29), (171, 116, 33), (198, 120, 37),
+ (209, 105, 44), (187, 110, 30), (169, 116, 26), (152, 123, 23),
+ (152, 144, 23), (153, 166, 24), (133, 158, 40), (114, 182, 133),
+ (138, 184, 197), (119, 177, 196), (101, 171, 196), (91, 170, 191),
+ (82, 169, 186), (83, 160, 186), (89, 161, 175), (108, 153, 184),
+ (114, 160, 194), (134, 179, 158), (131, 168, 103), (128, 157, 49),
+ (159, 150, 33), (164, 142, 22), (176, 155, 28), (179, 139, 26),
+ (178, 136, 24), (161, 125, 21), (144, 114, 18), (129, 104, 22),
+ (115, 94, 27), (95, 80, 25), (102, 97, 31), (113, 103, 14),
+ (105, 102, 0), (112, 130, 18), (110, 132, 18), (108, 135, 18),
+ (88, 127, 12), (89, 121, 0), (101, 117, 0), (101, 111, 0),
+ (77, 74, 7), (69, 48, 5), (61, 23, 4), (57, 29, 20),
+ (54, 36, 36), (23, 11, 85), (29, 25, 101), (20, 38, 124),
+ (29, 75, 127), (69, 79, 138), (71, 85, 136), (73, 92, 134),
+ (76, 91, 150), (83, 143, 179), (110, 174, 201), (124, 186, 207),
+ (129, 181, 194), (102, 171, 188), (75, 162, 182), (31, 157, 135),
+ (22, 146, 110), (50, 149, 94), (45, 155, 116), (87, 175, 161),
+ (133, 188, 195), (139, 196, 205), (143, 196, 207), (147, 196, 210),
+ (170, 219, 223), (173, 211, 170), (163, 204, 160), (125, 194, 163),
+ (50, 151, 107), (37, 129, 96), (25, 107, 85), (20, 88, 65),
+ (46, 92, 56), (50, 131, 29), (58, 126, 15), (67, 126, 0),
+ (84, 121, 7), (77, 111, 1), (71, 77, 3), (68, 59, 0),
+ (68, 56, 8), (87, 50, 8), (91, 47, 8), (86, 59, 12),
+ (117, 102, 17), (133, 109, 17), (149, 117, 18), (156, 110, 14),
+ (164, 95, 30), (181, 114, 35), (197, 92, 44), (197, 94, 36),
+ (168, 95, 27), (162, 73, 29), (117, 71, 21), (100, 35, 33),
+ (58, 29, 34), (36, 24, 36), (42, 26, 29), (57, 27, 17),
+ (30, 21, 26), (31, 18, 25), (33, 17, 0), (16, 18, 0),
+ (10, 36, 27), (24, 35, 39), (49, 54, 24), (70, 91, 16),
+ (63, 119, 10), (62, 125, 10), (45, 136, 7), (33, 132, 15),
+ (48, 150, 25), (5, 157, 46), (13, 134, 63), (16, 171, 80),
+ (28, 189, 75), (35, 171, 89), (40, 160, 71), (49, 155, 54),
+ (50, 122, 76), (73, 123, 50), (122, 105, 35), (150, 93, 38),
+ (154, 75, 42), (134, 40, 40), (116, 35, 31), (86, 26, 28),
+ (64, 47, 21), (23, 64, 4), (50, 87, 7), (62, 96, 9),
+ (60, 110, 15), (55, 110, 52), (55, 126, 96), (75, 127, 149),
+ (66, 147, 174), (68, 161, 179), (45, 160, 167), (55, 160, 117),
+ (56, 145, 81), (98, 128, 38), (139, 121, 39), (139, 123, 28),
+ (126, 121, 19), (119, 111, 48), (99, 129, 67), (64, 121, 88),
+ (54, 144, 93), (86, 147, 106), (96, 104, 65), (72, 54, 50),
+ (80, 24, 23), (82, 24, 20), (93, 67, 8), (122, 93, 15)
+ ),
+
+// 296 2u0010t.jpg
+((42, 44, 67), (60, 55, 77), (43, 47, 79), (27, 39, 81),
+ (18, 30, 79), (10, 21, 77), (17, 16, 69), (25, 11, 62),
+ (46, 32, 67), (54, 46, 83), (62, 60, 100), (58, 80, 94),
+ (55, 101, 88), (57, 102, 90), (60, 103, 93), (63, 89, 98),
+ (66, 76, 103), (37, 33, 107), (22, 18, 105), (8, 3, 103),
+ (4, 8, 84), (0, 13, 65), (4, 9, 48), (9, 5, 32),
+ (10, 13, 0), (9, 23, 22), (9, 33, 45), (16, 31, 66),
+ (24, 29, 87), (29, 32, 89), (34, 35, 92), (46, 36, 88),
+ (43, 43, 79), (28, 36, 99), (35, 29, 112), (43, 22, 125),
+ (31, 19, 136), (19, 16, 147), (9, 22, 135), (0, 29, 123),
+ (34, 50, 110), (47, 67, 129), (61, 85, 149), (67, 101, 145),
+ (73, 118, 141), (67, 121, 138), (62, 124, 135), (56, 112, 137),
+ (61, 97, 145), (58, 74, 110), (49, 69, 114), (41, 64, 118),
+ (24, 68, 142), (7, 73, 167), (8, 69, 170), (9, 65, 174),
+ (52, 77, 161), (56, 87, 153), (61, 97, 145), (69, 82, 130),
+ (77, 68, 115), (76, 56, 100), (75, 44, 86), (82, 37, 60),
+ (86, 23, 32), (68, 10, 0), (82, 11, 24), (97, 13, 49),
+ (104, 29, 38), (111, 46, 28), (118, 114, 25), (125, 129, 42),
+ (172, 143, 51), (192, 95, 56), (213, 48, 62), (203, 29, 42),
+ (193, 11, 23), (177, 11, 29), (161, 11, 36), (160, 28, 41),
+ (107, 41, 69), (58, 11, 127), (60, 19, 132), (63, 27, 137),
+ (77, 31, 135), (91, 35, 134), (104, 29, 124), (111, 46, 100),
+ (150, 21, 49), (143, 48, 70), (137, 76, 92), (126, 65, 112),
+ (116, 55, 132), (88, 49, 128), (66, 45, 146), (35, 45, 143),
+ (47, 66, 132), (101, 58, 127), (94, 61, 118), (88, 65, 109),
+ (84, 71, 108), (80, 77, 108), (70, 73, 106), (78, 73, 96),
+ (65, 65, 57), (60, 59, 31), (55, 53, 5), (69, 45, 10),
+ (84, 38, 15), (57, 61, 24), (53, 49, 37), (63, 43, 70),
+ (74, 48, 73), (118, 39, 86), (123, 32, 69), (129, 26, 53),
+ (136, 16, 26), (126, 18, 33), (114, 45, 50), (82, 49, 66),
+ (61, 44, 89), (41, 34, 90), (21, 24, 91), (20, 18, 87),
+ (19, 13, 83), (33, 7, 80), (34, 19, 88), (37, 22, 89),
+ (35, 31, 81), (40, 23, 68), (43, 17, 53), (47, 11, 39),
+ (52, 18, 19), (39, 27, 29), (16, 39, 57), (26, 37, 67),
+ (44, 28, 91), (66, 44, 112), (88, 60, 134), (81, 76, 137),
+ (75, 93, 141), (87, 108, 135), (109, 117, 76), (102, 108, 34),
+ (92, 127, 61), (72, 117, 176), (78, 128, 186), (84, 140, 197),
+ (73, 119, 196), (56, 94, 167), (47, 65, 167), (27, 43, 156),
+ (46, 43, 110), (46, 46, 100), (47, 49, 90), (43, 38, 78),
+ (39, 32, 66), (40, 26, 61), (40, 30, 57), (56, 15, 47),
+ (56, 6, 43), (53, 33, 45), (42, 48, 38), (32, 63, 32),
+ (24, 57, 48), (44, 47, 66), (64, 56, 80), (74, 64, 101),
+ (103, 66, 118), (101, 68, 123), (99, 70, 128), (95, 78, 123),
+ (84, 75, 128), (87, 83, 142), (102, 94, 154), (121, 113, 152),
+ (98, 135, 188), (113, 139, 190), (124, 149, 205), (129, 150, 177),
+ (125, 141, 166), (152, 65, 169), (113, 44, 151), (107, 30, 146),
+ (110, 42, 141), (115, 61, 142), (120, 80, 143), (92, 112, 145),
+ (96, 105, 110), (88, 72, 72), (74, 58, 61), (38, 54, 9),
+ (20, 62, 50), (31, 58, 77), (47, 58, 90), (41, 61, 96),
+ (41, 54, 96), (54, 53, 111), (56, 35, 100), (55, 28, 107),
+ (77, 31, 93), (115, 67, 63), (155, 99, 66), (154, 122, 65),
+ (141, 146, 52), (109, 142, 97), (104, 133, 163), (82, 111, 145),
+ (70, 100, 160), (67, 94, 139), (60, 64, 91), (74, 72, 60),
+ (89, 55, 56), (74, 50, 46), (85, 64, 33), (125, 51, 48),
+ (136, 43, 62), (122, 50, 62), (93, 39, 75), (86, 49, 67),
+ (80, 60, 88), (65, 59, 71), (62, 70, 73), (71, 66, 89),
+ (75, 59, 95), (105, 47, 95), (100, 63, 104), (75, 59, 104),
+ (66, 41, 124), (41, 31, 164), (23, 35, 169), (18, 59, 177),
+ (17, 57, 204), (7, 63, 212), (10, 78, 201), (49, 80, 186),
+ (84, 88, 162), (74, 76, 135), (87, 57, 119), (67, 70, 105),
+ (58, 50, 99), (59, 47, 87), (48, 35, 65), (52, 22, 58),
+ (68, 38, 66), (56, 48, 69), (36, 75, 70), (1, 97, 70),
+ (8, 75, 84), (20, 38, 76), (26, 48, 85), (34, 69, 91),
+ (28, 83, 88), (39, 73, 75), (60, 62, 75), (57, 43, 60)
+ ),
+
+// 297 2u0015t.jpg
+((129, 96, 65), (144, 152, 101), (152, 164, 104), (161, 176, 107),
+ (161, 186, 119), (162, 197, 131), (165, 202, 136), (168, 207, 142),
+ (178, 193, 160), (178, 178, 150), (179, 163, 140), (177, 152, 155),
+ (176, 141, 171), (177, 149, 183), (178, 158, 195), (177, 166, 191),
+ (176, 174, 187), (182, 198, 169), (175, 190, 168), (168, 182, 167),
+ (161, 173, 157), (154, 165, 148), (152, 170, 145), (151, 175, 143),
+ (156, 183, 132), (164, 180, 125), (172, 177, 119), (170, 171, 126),
+ (168, 165, 134), (164, 167, 136), (160, 169, 138), (150, 171, 132),
+ (156, 170, 145), (160, 146, 159), (144, 136, 149), (129, 127, 140),
+ (120, 108, 132), (111, 89, 125), (106, 78, 118), (101, 68, 111),
+ (78, 21, 38), (66, 44, 47), (55, 67, 57), (68, 57, 73),
+ (82, 47, 89), (86, 53, 94), (90, 59, 100), (102, 81, 88),
+ (114, 109, 71), (129, 145, 82), (144, 155, 103), (160, 165, 124),
+ (153, 176, 124), (147, 187, 124), (153, 177, 121), (159, 167, 118),
+ (169, 155, 128), (173, 165, 129), (177, 176, 130), (173, 176, 133),
+ (170, 177, 136), (162, 169, 134), (155, 161, 133), (137, 139, 128),
+ (139, 128, 100), (138, 100, 38), (143, 99, 53), (148, 99, 69),
+ (154, 108, 76), (161, 118, 83), (170, 115, 85), (165, 106, 74),
+ (114, 44, 34), (105, 32, 33), (96, 20, 33), (84, 24, 21),
+ (72, 29, 10), (59, 20, 6), (46, 12, 3), (64, 16, 0),
+ (76, 33, 14), (88, 71, 28), (108, 83, 44), (128, 95, 60),
+ (130, 92, 67), (132, 90, 74), (129, 95, 86), (137, 102, 70),
+ (151, 81, 55), (132, 67, 38), (113, 54, 22), (108, 52, 29),
+ (103, 51, 37), (136, 87, 54), (142, 111, 91), (156, 133, 139),
+ (149, 164, 143), (180, 184, 159), (168, 190, 163), (156, 197, 167),
+ (158, 190, 162), (161, 184, 158), (160, 178, 154), (150, 185, 129),
+ (122, 177, 96), (133, 167, 100), (144, 157, 104), (152, 162, 109),
+ (160, 167, 115), (162, 161, 115), (160, 141, 108), (167, 123, 96),
+ (175, 121, 87), (155, 121, 93), (155, 119, 106), (156, 117, 120),
+ (165, 110, 142), (160, 88, 151), (139, 113, 148), (130, 132, 147),
+ (124, 154, 130), (113, 131, 123), (102, 109, 117), (105, 104, 113),
+ (109, 99, 110), (97, 85, 97), (89, 72, 106), (78, 63, 102),
+ (86, 68, 94), (135, 72, 54), (140, 76, 57), (145, 80, 60),
+ (137, 70, 54), (127, 63, 51), (119, 61, 50), (135, 63, 48),
+ (161, 93, 58), (154, 88, 60), (148, 83, 63), (144, 87, 62),
+ (141, 92, 62), (128, 96, 45), (110, 93, 41), (94, 104, 41),
+ (80, 120, 47), (113, 134, 101), (115, 123, 110), (118, 113, 120),
+ (126, 109, 127), (115, 93, 114), (123, 84, 115), (150, 100, 75),
+ (148, 133, 92), (156, 139, 85), (165, 146, 78), (165, 145, 95),
+ (167, 141, 104), (160, 150, 114), (153, 144, 115), (148, 147, 103),
+ (137, 129, 92), (122, 104, 68), (122, 105, 57), (122, 106, 46),
+ (139, 117, 57), (142, 129, 74), (159, 124, 86), (171, 139, 92),
+ (181, 125, 98), (179, 126, 100), (177, 127, 102), (179, 142, 98),
+ (163, 152, 122), (159, 157, 132), (145, 159, 133), (143, 142, 137),
+ (130, 124, 138), (131, 115, 125), (136, 121, 140), (149, 130, 162),
+ (152, 144, 167), (157, 153, 168), (171, 154, 170), (175, 149, 178),
+ (165, 178, 168), (158, 170, 166), (152, 162, 164), (144, 164, 137),
+ (147, 165, 125), (141, 161, 112), (143, 155, 109), (133, 154, 97),
+ (121, 136, 81), (119, 127, 86), (116, 113, 104), (100, 106, 102),
+ (110, 93, 112), (119, 79, 116), (105, 84, 123), (91, 82, 113),
+ (85, 81, 104), (87, 91, 103), (92, 87, 110), (107, 82, 112),
+ (106, 93, 110), (107, 102, 125), (115, 109, 137), (123, 112, 142),
+ (127, 122, 142), (141, 120, 139), (140, 102, 141), (118, 97, 138),
+ (117, 101, 130), (101, 98, 115), (64, 85, 86), (54, 99, 76),
+ (74, 58, 69), (88, 30, 26), (116, 35, 6), (117, 51, 17),
+ (104, 61, 27), (128, 79, 38), (145, 100, 59), (173, 113, 79),
+ (185, 121, 94), (201, 135, 113), (179, 143, 111), (180, 141, 160),
+ (184, 156, 178), (184, 159, 181), (192, 169, 187), (181, 184, 177),
+ (185, 194, 165), (177, 215, 154), (177, 214, 147), (167, 220, 138),
+ (153, 183, 119), (141, 143, 78), (112, 108, 45), (113, 80, 37),
+ (115, 81, 46), (98, 64, 97), (109, 57, 121), (129, 66, 123),
+ (126, 76, 125), (141, 84, 127), (147, 123, 119), (150, 145, 149),
+ (149, 142, 160), (139, 152, 134), (129, 160, 100), (116, 161, 78),
+ (116, 141, 76), (132, 136, 77), (145, 135, 74), (153, 114, 81)
+ ),
+
+// 298 2u0017pp1t.jpg
+((199, 122, 218), (208, 121, 218), (202, 104, 202), (197, 87, 186),
+ (191, 99, 173), (185, 111, 160), (178, 126, 149), (171, 142, 138),
+ (196, 164, 123), (205, 163, 132), (214, 163, 142), (234, 163, 139),
+ (255, 164, 137), (235, 169, 110), (215, 174, 84), (215, 171, 77),
+ (215, 169, 71), (213, 114, 57), (209, 94, 54), (206, 74, 51),
+ (213, 85, 60), (221, 97, 69), (212, 109, 71), (204, 122, 74),
+ (185, 100, 63), (189, 89, 56), (193, 78, 49), (200, 71, 50),
+ (207, 65, 51), (206, 67, 49), (205, 70, 48), (210, 93, 50),
+ (210, 128, 72), (213, 136, 118), (213, 140, 116), (214, 145, 114),
+ (213, 121, 94), (212, 98, 74), (205, 80, 66), (198, 63, 59),
+ (193, 39, 39), (188, 49, 53), (184, 59, 67), (195, 51, 67),
+ (207, 43, 68), (204, 48, 64), (201, 54, 60), (197, 53, 45),
+ (189, 54, 48), (201, 68, 63), (207, 91, 78), (213, 114, 93),
+ (230, 126, 136), (247, 138, 179), (246, 152, 196), (246, 167, 214),
+ (247, 232, 193), (245, 223, 184), (244, 215, 175), (228, 192, 188),
+ (213, 169, 202), (208, 146, 210), (204, 124, 219), (169, 103, 193),
+ (161, 108, 186), (168, 126, 146), (176, 122, 138), (184, 118, 130),
+ (186, 113, 135), (188, 109, 140), (206, 98, 148), (202, 56, 163),
+ (194, 61, 127), (201, 83, 110), (208, 106, 94), (210, 86, 86),
+ (212, 66, 79), (201, 80, 100), (191, 95, 122), (172, 120, 124),
+ (168, 119, 102), (186, 129, 84), (185, 130, 86), (185, 132, 88),
+ (181, 130, 92), (177, 128, 96), (175, 131, 128), (170, 125, 154),
+ (169, 136, 181), (165, 145, 196), (162, 154, 211), (177, 151, 214),
+ (193, 148, 217), (190, 150, 203), (199, 142, 185), (204, 138, 174),
+ (195, 135, 143), (185, 114, 84), (169, 91, 106), (153, 69, 128),
+ (165, 80, 133), (178, 92, 139), (186, 91, 147), (192, 106, 145),
+ (201, 143, 139), (194, 159, 144), (187, 175, 149), (193, 172, 144),
+ (199, 170, 140), (204, 170, 125), (196, 169, 92), (192, 178, 71),
+ (207, 167, 79), (209, 126, 72), (220, 121, 81), (232, 117, 90),
+ (232, 69, 134), (252, 90, 150), (254, 92, 139), (255, 119, 135),
+ (238, 139, 170), (213, 166, 162), (189, 194, 154), (194, 201, 132),
+ (199, 209, 110), (195, 201, 95), (208, 207, 89), (201, 192, 87),
+ (203, 165, 58), (182, 108, 37), (182, 97, 54), (182, 86, 72),
+ (178, 93, 86), (172, 108, 134), (170, 111, 155), (180, 103, 159),
+ (187, 44, 172), (177, 57, 156), (168, 71, 140), (178, 91, 131),
+ (189, 112, 122), (206, 131, 110), (212, 157, 93), (217, 171, 75),
+ (230, 178, 76), (213, 154, 84), (213, 145, 84), (213, 137, 85),
+ (198, 141, 88), (192, 117, 88), (201, 108, 90), (204, 132, 94),
+ (181, 118, 111), (189, 107, 119), (197, 96, 128), (210, 98, 134),
+ (197, 105, 154), (218, 119, 173), (241, 117, 141), (221, 159, 122),
+ (217, 175, 77), (215, 205, 94), (223, 192, 91), (231, 180, 88),
+ (239, 180, 136), (243, 187, 170), (214, 180, 196), (227, 160, 227),
+ (179, 184, 203), (199, 197, 188), (219, 211, 174), (237, 229, 157),
+ (238, 241, 162), (246, 232, 169), (236, 218, 170), (217, 174, 132),
+ (204, 144, 74), (198, 133, 49), (181, 127, 27), (183, 114, 21),
+ (185, 128, 39), (193, 133, 60), (198, 141, 52), (210, 141, 64),
+ (192, 168, 46), (187, 161, 50), (183, 154, 54), (191, 153, 42),
+ (195, 146, 27), (191, 150, 44), (194, 135, 69), (198, 127, 65),
+ (195, 122, 67), (190, 115, 76), (205, 120, 81), (221, 116, 113),
+ (205, 131, 154), (207, 136, 178), (234, 140, 214), (214, 125, 235),
+ (208, 160, 244), (170, 171, 235), (199, 197, 210), (222, 236, 221),
+ (230, 228, 203), (245, 229, 169), (250, 206, 159), (237, 197, 146),
+ (234, 205, 139), (226, 206, 145), (201, 201, 127), (202, 208, 112),
+ (212, 222, 125), (216, 222, 152), (220, 215, 151), (236, 188, 139),
+ (229, 158, 166), (198, 132, 180), (180, 105, 170), (173, 80, 169),
+ (189, 91, 150), (193, 104, 148), (194, 130, 156), (219, 156, 141),
+ (229, 170, 136), (222, 174, 134), (223, 185, 140), (194, 164, 188),
+ (216, 149, 220), (187, 132, 236), (175, 117, 238), (145, 89, 226),
+ (158, 84, 239), (197, 71, 215), (229, 115, 185), (233, 133, 183),
+ (245, 130, 195), (215, 143, 209), (176, 167, 222), (190, 131, 189),
+ (190, 137, 181), (202, 151, 148), (192, 153, 110), (193, 150, 99),
+ (192, 170, 97), (199, 179, 120), (209, 169, 118), (207, 162, 95),
+ (208, 158, 85), (209, 167, 81), (201, 157, 70), (196, 147, 55),
+ (203, 143, 57), (206, 158, 58), (198, 183, 68), (198, 172, 61)
+ ),
+
+// 299 2u0017t.jpg
+((48, 99, 204), (50, 97, 205), (52, 101, 208), (55, 106, 211),
+ (62, 94, 200), (70, 82, 190), (64, 86, 191), (59, 91, 192),
+ (81, 117, 179), (75, 159, 183), (69, 201, 187), (70, 208, 174),
+ (71, 216, 161), (48, 186, 143), (26, 157, 125), (17, 160, 128),
+ (8, 163, 131), (33, 141, 144), (40, 139, 151), (47, 138, 159),
+ (56, 133, 192), (65, 128, 225), (67, 128, 226), (69, 128, 228),
+ (51, 121, 216), (48, 124, 201), (45, 127, 187), (41, 147, 190),
+ (38, 168, 194), (46, 177, 193), (54, 187, 192), (64, 201, 183),
+ (74, 168, 154), (63, 126, 144), (52, 137, 141), (41, 148, 138),
+ (36, 155, 123), (31, 162, 108), (28, 160, 105), (26, 159, 102),
+ (34, 132, 75), (42, 124, 65), (51, 117, 56), (60, 121, 40),
+ (70, 125, 24), (71, 125, 19), (72, 126, 14), (85, 131, 22),
+ (80, 130, 45), (71, 125, 91), (63, 123, 111), (55, 122, 131),
+ (49, 104, 146), (44, 86, 162), (35, 89, 166), (27, 93, 171),
+ (35, 53, 161), (31, 39, 152), (27, 26, 143), (37, 59, 135),
+ (47, 93, 127), (46, 98, 108), (46, 104, 89), (11, 94, 86),
+ (6, 91, 94), (42, 72, 136), (46, 68, 134), (50, 65, 132),
+ (50, 57, 139), (51, 49, 146), (52, 77, 161), (44, 94, 189),
+ (31, 113, 186), (27, 104, 162), (23, 96, 139), (21, 101, 107),
+ (20, 107, 75), (21, 118, 64), (22, 130, 54), (0, 113, 54),
+ (19, 102, 48), (61, 101, 74), (67, 111, 93), (74, 121, 113),
+ (62, 121, 117), (50, 122, 121), (23, 132, 139), (10, 127, 145),
+ (55, 137, 161), (60, 137, 173), (65, 137, 185), (65, 143, 189),
+ (66, 149, 193), (48, 167, 197), (49, 147, 192), (60, 135, 190),
+ (56, 116, 179), (65, 114, 173), (64, 113, 161), (64, 112, 150),
+ (73, 116, 144), (82, 121, 138), (98, 129, 131), (96, 145, 124),
+ (84, 141, 124), (86, 141, 106), (88, 141, 89), (88, 139, 87),
+ (88, 138, 85), (87, 145, 69), (81, 137, 64), (68, 104, 60),
+ (53, 59, 55), (84, 94, 57), (91, 97, 61), (99, 100, 66),
+ (85, 94, 29), (85, 70, 29), (52, 37, 40), (28, 39, 69),
+ (37, 125, 12), (35, 138, 21), (33, 151, 31), (37, 135, 26),
+ (42, 120, 21), (24, 85, 43), (0, 61, 60), (3, 74, 92),
+ (15, 90, 111), (30, 118, 122), (31, 115, 116), (32, 112, 111),
+ (46, 106, 94), (60, 85, 107), (82, 118, 106), (80, 128, 90),
+ (72, 135, 116), (63, 132, 137), (54, 129, 158), (54, 135, 160),
+ (55, 142, 162), (59, 155, 171), (65, 168, 199), (54, 158, 211),
+ (54, 137, 205), (47, 108, 191), (49, 108, 192), (51, 109, 193),
+ (71, 98, 179), (59, 85, 162), (57, 96, 171), (54, 100, 178),
+ (69, 98, 224), (73, 110, 222), (78, 122, 221), (93, 136, 228),
+ (81, 139, 239), (68, 153, 210), (47, 166, 208), (57, 175, 203),
+ (73, 181, 209), (60, 202, 204), (60, 202, 196), (60, 202, 188),
+ (39, 201, 180), (30, 210, 171), (24, 186, 162), (34, 160, 148),
+ (44, 157, 155), (52, 165, 160), (60, 174, 166), (60, 159, 178),
+ (51, 159, 198), (61, 170, 201), (55, 181, 204), (36, 192, 181),
+ (0, 200, 170), (12, 205, 152), (12, 183, 130), (30, 169, 140),
+ (48, 151, 130), (77, 138, 130), (80, 143, 112), (78, 140, 91),
+ (67, 119, 80), (60, 119, 74), (53, 120, 69), (57, 131, 70),
+ (45, 158, 42), (50, 176, 32), (55, 210, 48), (80, 201, 74),
+ (72, 154, 106), (75, 175, 105), (78, 155, 119), (81, 173, 134),
+ (51, 202, 131), (21, 225, 128), (49, 209, 85), (56, 189, 96),
+ (73, 146, 116), (69, 110, 132), (57, 94, 162), (47, 89, 189),
+ (50, 76, 189), (47, 71, 177), (50, 68, 168), (58, 86, 160),
+ (64, 110, 160), (65, 139, 138), (51, 158, 104), (59, 159, 45),
+ (75, 152, 38), (60, 151, 11), (79, 120, 0), (89, 113, 15),
+ (78, 116, 39), (54, 146, 71), (51, 157, 121), (70, 158, 144),
+ (73, 144, 150), (67, 146, 176), (66, 134, 171), (71, 121, 194),
+ (66, 115, 174), (48, 104, 163), (48, 106, 144), (33, 95, 144),
+ (9, 72, 115), (18, 66, 114), (22, 22, 96), (2, 3, 83),
+ (21, 30, 107), (36, 36, 150), (52, 61, 178), (32, 74, 186),
+ (43, 77, 184), (47, 92, 175), (37, 120, 160), (34, 136, 138),
+ (41, 149, 134), (59, 134, 137), (80, 143, 112), (88, 159, 81),
+ (78, 190, 54), (96, 190, 44), (83, 173, 59), (94, 147, 75),
+ (83, 135, 97), (71, 124, 130), (60, 122, 147), (70, 109, 152),
+ (62, 98, 134), (58, 107, 137), (63, 116, 122), (59, 114, 74)
+ ),
+
+// 300 2u0018t.jpg
+((135, 38, 171), (122, 35, 130), (138, 44, 114), (155, 54, 98),
+ (175, 42, 103), (196, 31, 108), (194, 23, 124), (192, 16, 140),
+ (177, 39, 135), (177, 55, 126), (178, 72, 118), (172, 72, 107),
+ (167, 73, 97), (158, 71, 100), (149, 69, 104), (142, 69, 101),
+ (136, 70, 98), (145, 88, 143), (151, 76, 155), (157, 64, 168),
+ (147, 58, 153), (138, 53, 138), (133, 58, 139), (128, 64, 140),
+ (124, 42, 152), (123, 32, 163), (122, 23, 175), (129, 31, 185),
+ (136, 39, 196), (136, 41, 191), (137, 44, 187), (145, 42, 147),
+ (157, 46, 123), (123, 41, 115), (114, 51, 104), (106, 61, 94),
+ (103, 61, 88), (100, 61, 82), (109, 68, 70), (119, 76, 59),
+ (147, 108, 39), (167, 119, 46), (187, 131, 54), (191, 108, 62),
+ (195, 85, 70), (194, 77, 82), (194, 70, 94), (178, 71, 101),
+ (149, 53, 117), (98, 25, 166), (109, 16, 153), (121, 8, 140),
+ (130, 14, 121), (139, 20, 102), (147, 26, 94), (155, 32, 87),
+ (139, 67, 78), (157, 99, 85), (175, 131, 92), (181, 117, 95),
+ (187, 104, 98), (187, 98, 118), (188, 92, 138), (183, 90, 160),
+ (196, 60, 168), (165, 38, 177), (152, 41, 186), (140, 44, 195),
+ (150, 46, 175), (161, 48, 156), (178, 49, 132), (184, 32, 107),
+ (194, 33, 103), (185, 47, 99), (176, 62, 96), (152, 72, 89),
+ (129, 83, 83), (124, 76, 74), (120, 69, 65), (107, 64, 84),
+ (110, 68, 80), (122, 134, 96), (143, 153, 97), (165, 173, 98),
+ (159, 176, 106), (154, 180, 115), (142, 180, 107), (141, 177, 113),
+ (150, 166, 117), (145, 159, 111), (140, 152, 106), (138, 154, 103),
+ (136, 157, 101), (151, 161, 108), (155, 145, 110), (150, 146, 98),
+ (139, 126, 92), (143, 91, 77), (156, 62, 62), (169, 34, 48),
+ (177, 29, 37), (185, 25, 27), (188, 4, 28), (159, 27, 40),
+ (166, 26, 75), (168, 27, 88), (171, 29, 101), (166, 28, 89),
+ (161, 27, 77), (166, 19, 61), (160, 31, 51), (151, 37, 36),
+ (164, 53, 23), (152, 41, 58), (140, 46, 61), (128, 52, 64),
+ (131, 59, 73), (132, 64, 79), (134, 67, 76), (139, 66, 83),
+ (174, 59, 137), (166, 57, 142), (159, 56, 147), (164, 57, 149),
+ (170, 59, 151), (180, 49, 153), (165, 45, 134), (155, 56, 102),
+ (154, 67, 76), (180, 88, 37), (172, 87, 46), (165, 86, 56),
+ (133, 91, 77), (139, 119, 86), (142, 152, 79), (146, 127, 97),
+ (167, 81, 130), (165, 85, 165), (163, 89, 200), (152, 83, 197),
+ (142, 77, 195), (166, 88, 198), (182, 107, 225), (167, 121, 209),
+ (200, 153, 171), (170, 150, 126), (166, 147, 123), (163, 145, 121),
+ (152, 156, 106), (153, 153, 99), (153, 147, 95), (180, 148, 101),
+ (208, 100, 97), (192, 92, 114), (177, 84, 131), (169, 74, 138),
+ (155, 43, 145), (147, 43, 138), (152, 68, 145), (167, 81, 130),
+ (153, 88, 122), (145, 121, 83), (149, 122, 85), (153, 123, 87),
+ (178, 108, 82), (212, 70, 92), (204, 57, 125), (208, 26, 103),
+ (159, 32, 109), (146, 33, 108), (134, 34, 107), (117, 37, 108),
+ (119, 47, 97), (109, 49, 83), (102, 53, 85), (93, 38, 77),
+ (91, 19, 92), (77, 14, 105), (110, 37, 116), (125, 25, 98),
+ (131, 16, 107), (139, 29, 92), (130, 48, 86), (112, 52, 78),
+ (143, 49, 83), (144, 48, 74), (145, 48, 65), (137, 48, 52),
+ (118, 34, 50), (107, 23, 56), (94, 51, 61), (94, 57, 48),
+ (109, 85, 59), (133, 85, 62), (129, 85, 72), (109, 79, 81),
+ (119, 51, 128), (124, 57, 162), (134, 39, 169), (137, 39, 162),
+ (134, 32, 132), (136, 24, 108), (155, 33, 110), (147, 52, 120),
+ (138, 63, 122), (148, 68, 103), (153, 78, 98), (155, 101, 89),
+ (159, 76, 104), (161, 73, 121), (151, 56, 124), (140, 63, 131),
+ (137, 49, 125), (113, 40, 132), (88, 43, 136), (104, 17, 132),
+ (149, 4, 123), (172, 22, 109), (167, 35, 108), (154, 20, 81),
+ (150, 34, 57), (127, 25, 73), (93, 6, 74), (78, 6, 69),
+ (91, 16, 81), (100, 39, 81), (124, 37, 88), (168, 36, 96),
+ (180, 41, 80), (192, 65, 84), (195, 66, 84), (194, 58, 94),
+ (172, 57, 98), (151, 57, 117), (148, 51, 120), (162, 45, 123),
+ (164, 47, 118), (173, 27, 108), (173, 35, 86), (176, 43, 70),
+ (179, 43, 47), (184, 53, 11), (195, 66, 24), (186, 76, 25),
+ (181, 53, 42), (180, 54, 57), (176, 45, 59), (180, 51, 71),
+ (179, 45, 95), (165, 55, 116), (169, 63, 138), (171, 66, 151),
+ (174, 74, 126), (187, 81, 101), (182, 80, 75), (187, 77, 24)
+ ),
+
+
+// 301 2u0020pp1t.jpg
+((115, 229, 180), (98, 154, 203), (102, 136, 219), (107, 118, 236),
+ (119, 112, 233), (131, 107, 231), (128, 105, 234), (125, 103, 237),
+ (113, 114, 241), (131, 137, 240), (150, 161, 240), (150, 162, 181),
+ (151, 163, 123), (142, 160, 125), (134, 157, 128), (122, 148, 150),
+ (110, 139, 173), (134, 150, 227), (125, 153, 231), (116, 157, 236),
+ (143, 147, 193), (170, 138, 151), (175, 126, 133), (181, 115, 116),
+ (208, 159, 103), (196, 153, 118), (185, 147, 134), (177, 148, 146),
+ (169, 149, 158), (156, 126, 197), (144, 104, 237), (128, 98, 230),
+ (112, 123, 241), (106, 176, 245), (105, 191, 228), (105, 207, 211),
+ (119, 211, 193), (133, 215, 175), (142, 212, 173), (152, 210, 172),
+ (158, 205, 163), (143, 199, 148), (128, 194, 133), (125, 204, 145),
+ (123, 214, 157), (124, 219, 160), (126, 224, 163), (124, 215, 172),
+ (121, 214, 185), (121, 222, 182), (123, 216, 180), (126, 211, 178),
+ (130, 209, 182), (134, 207, 187), (131, 204, 192), (129, 201, 198),
+ (151, 200, 196), (163, 201, 178), (176, 203, 160), (180, 198, 157),
+ (185, 193, 154), (175, 185, 148), (166, 178, 142), (152, 178, 141),
+ (147, 184, 115), (128, 206, 130), (139, 203, 137), (151, 200, 144),
+ (163, 196, 146), (176, 193, 148), (207, 162, 131), (215, 154, 125),
+ (232, 168, 94), (220, 161, 93), (208, 154, 92), (190, 151, 106),
+ (173, 149, 121), (175, 157, 126), (178, 165, 131), (159, 192, 149),
+ (136, 230, 168), (127, 240, 184), (117, 243, 182), (108, 247, 180),
+ (106, 243, 194), (104, 239, 209), (115, 228, 200), (124, 230, 207),
+ (166, 234, 209), (159, 224, 191), (153, 215, 174), (149, 213, 171),
+ (145, 212, 168), (143, 210, 166), (138, 218, 159), (153, 210, 157),
+ (171, 202, 132), (152, 159, 108), (154, 159, 107), (156, 159, 106),
+ (151, 161, 110), (147, 163, 114), (134, 165, 134), (98, 156, 202),
+ (73, 202, 164), (90, 211, 165), (107, 220, 166), (93, 215, 180),
+ (79, 210, 194), (92, 206, 207), (96, 200, 209), (86, 211, 203),
+ (84, 229, 196), (113, 231, 171), (119, 231, 178), (125, 231, 185),
+ (126, 228, 189), (120, 233, 177), (117, 220, 165), (101, 238, 170),
+ (94, 245, 152), (97, 240, 162), (100, 236, 172), (109, 228, 184),
+ (118, 220, 196), (127, 220, 209), (127, 215, 227), (111, 211, 227),
+ (86, 209, 242), (53, 185, 233), (60, 178, 240), (68, 171, 248),
+ (75, 188, 230), (84, 198, 224), (118, 207, 221), (113, 212, 207),
+ (131, 203, 163), (128, 191, 142), (125, 180, 122), (124, 179, 115),
+ (123, 179, 108), (128, 183, 116), (138, 188, 129), (146, 176, 138),
+ (153, 186, 157), (120, 195, 188), (113, 183, 198), (107, 171, 209),
+ (119, 187, 196), (154, 178, 165), (147, 163, 116), (145, 137, 100),
+ (173, 120, 80), (175, 124, 82), (177, 128, 85), (196, 117, 87),
+ (200, 126, 89), (196, 128, 83), (209, 131, 83), (227, 159, 84),
+ (235, 173, 90), (193, 190, 97), (183, 202, 107), (174, 214, 118),
+ (151, 242, 162), (118, 232, 163), (107, 223, 178), (82, 207, 199),
+ (72, 185, 225), (78, 173, 231), (85, 161, 237), (95, 144, 239),
+ (87, 147, 220), (91, 158, 228), (97, 157, 227), (120, 179, 219),
+ (132, 191, 199), (136, 204, 165), (130, 188, 163), (137, 191, 142),
+ (147, 188, 132), (149, 180, 120), (153, 166, 123), (172, 160, 120),
+ (194, 176, 110), (193, 187, 110), (192, 198, 110), (166, 213, 121),
+ (148, 221, 139), (124, 232, 146), (129, 229, 157), (124, 228, 167),
+ (107, 217, 190), (97, 214, 208), (95, 222, 213), (88, 228, 217),
+ (88, 221, 230), (85, 222, 230), (70, 204, 241), (56, 195, 238),
+ (62, 170, 234), (73, 168, 252), (87, 165, 248), (83, 153, 248),
+ (61, 151, 247), (59, 138, 241), (72, 140, 241), (79, 142, 247),
+ (89, 149, 245), (94, 148, 244), (106, 148, 234), (118, 130, 242),
+ (101, 145, 234), (103, 147, 212), (121, 169, 209), (123, 192, 173),
+ (122, 186, 149), (144, 186, 123), (143, 193, 108), (134, 181, 113),
+ (133, 184, 105), (142, 170, 96), (152, 175, 103), (184, 177, 89),
+ (194, 147, 65), (190, 123, 81), (186, 128, 88), (175, 149, 132),
+ (168, 169, 155), (107, 175, 198), (85, 173, 213), (71, 177, 235),
+ (65, 156, 247), (51, 151, 229), (62, 149, 229), (83, 168, 223),
+ (83, 191, 217), (84, 217, 212), (97, 233, 229), (104, 246, 222),
+ (120, 234, 226), (128, 223, 227), (130, 236, 232), (134, 233, 228),
+ (146, 236, 224), (130, 246, 211), (136, 220, 187), (152, 209, 176),
+ (157, 193, 167), (161, 166, 136), (157, 147, 112), (165, 145, 86),
+ (158, 139, 83), (133, 168, 110), (117, 231, 159), (114, 203, 123)
+ ),
+
+// 302 2u0020t.jpg
+((178, 61, 28), (160, 61, 30), (159, 60, 38), (158, 60, 47),
+ (153, 41, 46), (148, 22, 46), (145, 14, 37), (142, 6, 28),
+ (117, 18, 23), (110, 27, 42), (104, 36, 61), (100, 28, 74),
+ (96, 21, 88), (97, 20, 103), (99, 19, 118), (106, 16, 111),
+ (114, 14, 104), (138, 23, 80), (143, 20, 66), (148, 18, 52),
+ (138, 24, 53), (128, 30, 55), (135, 29, 59), (143, 29, 63),
+ (159, 11, 61), (154, 19, 66), (150, 27, 71), (144, 32, 70),
+ (139, 38, 70), (129, 42, 80), (119, 46, 91), (103, 45, 106),
+ (109, 55, 115), (110, 73, 127), (113, 67, 128), (117, 62, 130),
+ (115, 59, 128), (113, 56, 127), (116, 58, 120), (119, 60, 114),
+ (103, 66, 109), (107, 64, 113), (111, 62, 117), (123, 56, 101),
+ (136, 50, 85), (136, 48, 71), (137, 47, 57), (132, 35, 66),
+ (125, 35, 87), (70, 28, 112), (41, 34, 135), (12, 41, 159),
+ (25, 76, 161), (39, 112, 163), (46, 116, 151), (53, 121, 140),
+ (95, 110, 129), (101, 93, 123), (108, 77, 118), (111, 86, 120),
+ (115, 95, 123), (106, 99, 131), (98, 104, 140), (96, 122, 139),
+ (91, 133, 157), (55, 122, 164), (69, 104, 141), (84, 87, 118),
+ (82, 72, 105), (81, 57, 93), (107, 57, 82), (108, 55, 51),
+ (156, 76, 27), (155, 84, 16), (155, 93, 6), (168, 93, 3),
+ (181, 94, 1), (180, 96, 7), (180, 98, 14), (173, 102, 12),
+ (172, 106, 9), (164, 119, 36), (172, 107, 24), (181, 96, 13),
+ (185, 83, 15), (190, 70, 18), (187, 64, 31), (170, 68, 30),
+ (150, 123, 32), (147, 135, 23), (145, 148, 15), (124, 153, 12),
+ (103, 159, 10), (133, 144, 6), (144, 140, 15), (133, 121, 19),
+ (133, 101, 24), (120, 53, 86), (129, 35, 90), (139, 18, 95),
+ (151, 18, 93), (163, 19, 91), (163, 11, 84), (153, 19, 72),
+ (163, 26, 52), (141, 24, 58), (120, 23, 64), (117, 27, 75),
+ (114, 31, 87), (94, 53, 111), (99, 59, 121), (90, 82, 129),
+ (78, 86, 151), (87, 118, 164), (93, 119, 166), (100, 121, 168),
+ (103, 101, 166), (72, 76, 165), (54, 79, 145), (39, 81, 131),
+ (15, 82, 152), (22, 87, 160), (30, 92, 169), (48, 96, 167),
+ (67, 101, 165), (97, 97, 149), (113, 96, 138), (125, 81, 116),
+ (156, 73, 103), (178, 37, 43), (173, 28, 39), (168, 20, 36),
+ (165, 10, 42), (169, 22, 50), (163, 26, 46), (158, 37, 54),
+ (113, 54, 86), (101, 63, 100), (90, 72, 114), (89, 76, 118),
+ (89, 81, 122), (98, 104, 138), (90, 122, 135), (50, 123, 114),
+ (49, 120, 116), (78, 82, 145), (83, 81, 147), (88, 81, 149),
+ (101, 79, 128), (110, 81, 139), (113, 72, 142), (139, 70, 137),
+ (144, 44, 116), (150, 39, 105), (157, 35, 94), (161, 17, 79),
+ (158, 13, 78), (157, 14, 78), (157, 16, 82), (138, 30, 90),
+ (125, 31, 84), (113, 46, 53), (121, 42, 51), (129, 39, 49),
+ (126, 19, 63), (142, 20, 61), (139, 20, 48), (144, 10, 35),
+ (167, 27, 38), (166, 38, 40), (166, 49, 42), (163, 73, 38),
+ (141, 86, 47), (112, 82, 108), (93, 67, 104), (60, 58, 123),
+ (58, 72, 135), (39, 87, 153), (39, 108, 175), (56, 104, 176),
+ (68, 60, 159), (83, 63, 134), (123, 53, 126), (137, 26, 120),
+ (121, 15, 89), (121, 18, 82), (121, 21, 75), (113, 11, 76),
+ (109, 20, 76), (118, 38, 97), (133, 38, 104), (142, 14, 97),
+ (159, 8, 101), (169, 13, 76), (186, 46, 59), (190, 58, 37),
+ (194, 98, 22), (193, 113, 14), (193, 106, 9), (180, 83, 14),
+ (173, 55, 5), (167, 31, 35), (159, 31, 32), (160, 36, 34),
+ (150, 51, 30), (158, 64, 38), (138, 75, 21), (137, 98, 23),
+ (141, 94, 12), (141, 95, 10), (145, 106, 13), (154, 114, 19),
+ (152, 114, 41), (103, 89, 60), (106, 91, 70), (102, 70, 75),
+ (106, 60, 63), (118, 71, 55), (165, 76, 36), (193, 85, 21),
+ (194, 74, 13), (198, 74, 14), (199, 67, 18), (176, 56, 6),
+ (185, 36, 30), (174, 31, 25), (150, 20, 30), (154, 13, 29),
+ (177, 20, 11), (183, 61, 12), (172, 94, 28), (170, 103, 35),
+ (163, 97, 37), (161, 87, 88), (127, 91, 117), (121, 107, 107),
+ (114, 86, 100), (115, 86, 88), (153, 80, 45), (164, 80, 33),
+ (147, 63, 53), (144, 56, 98), (124, 53, 111), (124, 80, 133),
+ (115, 88, 143), (109, 95, 157), (101, 105, 153), (103, 106, 149),
+ (97, 110, 154), (98, 107, 150), (83, 90, 132), (65, 108, 89),
+ (68, 97, 113), (72, 60, 134), (88, 43, 112), (71, 48, 126)
+ ),
+
+// 303 2u0024t.jpg
+((14, 80, 34), (48, 76, 62), (69, 60, 71), (91, 44, 80),
+ (118, 37, 87), (145, 30, 95), (149, 48, 90), (154, 67, 86),
+ (157, 108, 67), (162, 114, 55), (167, 121, 44), (161, 106, 45),
+ (156, 92, 46), (164, 79, 47), (172, 67, 48), (162, 60, 49),
+ (152, 54, 51), (168, 98, 38), (177, 112, 25), (186, 126, 12),
+ (185, 120, 27), (185, 115, 43), (187, 115, 54), (189, 115, 66),
+ (180, 34, 45), (167, 44, 58), (155, 54, 72), (142, 66, 73),
+ (129, 78, 75), (123, 82, 70), (118, 87, 66), (112, 96, 62),
+ (109, 91, 77), (86, 74, 86), (82, 57, 90), (78, 41, 95),
+ (68, 31, 93), (58, 22, 92), (60, 14, 93), (62, 6, 95),
+ (67, 19, 59), (73, 16, 57), (79, 14, 56), (90, 34, 61),
+ (101, 55, 66), (113, 68, 62), (126, 81, 58), (151, 101, 50),
+ (159, 114, 33), (148, 121, 34), (154, 113, 24), (160, 105, 15),
+ (124, 96, 19), (88, 87, 23), (69, 63, 20), (51, 39, 17),
+ (55, 24, 56), (68, 42, 59), (82, 60, 62), (80, 94, 52),
+ (78, 128, 43), (80, 123, 29), (83, 118, 16), (91, 102, 34),
+ (115, 94, 65), (96, 68, 109), (89, 54, 106), (82, 40, 103),
+ (83, 48, 105), (84, 57, 108), (90, 76, 102), (100, 82, 94),
+ (98, 66, 79), (92, 55, 62), (86, 44, 45), (85, 36, 55),
+ (84, 28, 65), (78, 31, 74), (72, 34, 83), (62, 33, 89),
+ (59, 28, 96), (73, 11, 96), (85, 13, 67), (97, 15, 38),
+ (111, 34, 30), (125, 54, 22), (160, 59, 7), (149, 82, 30),
+ (190, 107, 5), (187, 101, 21), (185, 96, 38), (180, 100, 46),
+ (176, 104, 54), (171, 105, 57), (159, 103, 68), (161, 89, 64),
+ (168, 77, 56), (156, 92, 80), (151, 99, 69), (147, 107, 58),
+ (138, 110, 57), (130, 113, 57), (131, 107, 69), (121, 104, 74),
+ (132, 87, 68), (134, 69, 74), (137, 52, 81), (144, 41, 78),
+ (152, 31, 76), (148, 24, 86), (148, 9, 76), (142, 24, 76),
+ (149, 46, 47), (123, 87, 51), (121, 89, 45), (119, 92, 39),
+ (119, 99, 38), (133, 113, 40), (142, 94, 58), (141, 91, 68),
+ (120, 86, 76), (110, 73, 73), (100, 60, 71), (103, 54, 67),
+ (107, 49, 63), (101, 14, 48), (90, 6, 40), (85, 0, 34),
+ (78, 6, 54), (91, 20, 54), (96, 25, 61), (101, 31, 68),
+ (108, 61, 71), (121, 81, 69), (133, 92, 60), (125, 99, 40),
+ (128, 98, 62), (120, 97, 68), (113, 97, 74), (118, 94, 90),
+ (123, 91, 106), (106, 74, 95), (88, 80, 95), (84, 76, 91),
+ (83, 71, 91), (91, 51, 85), (95, 52, 82), (99, 53, 79),
+ (96, 65, 80), (106, 70, 72), (99, 84, 43), (95, 65, 27),
+ (75, 28, 38), (81, 21, 40), (87, 14, 43), (79, 37, 39),
+ (104, 61, 10), (133, 87, 37), (153, 93, 39), (162, 104, 40),
+ (161, 107, 35), (175, 118, 63), (178, 117, 66), (181, 117, 69),
+ (193, 107, 82), (206, 123, 81), (219, 122, 90), (203, 118, 87),
+ (143, 101, 103), (122, 107, 101), (102, 113, 99), (112, 112, 84),
+ (133, 120, 75), (143, 118, 51), (148, 121, 44), (167, 126, 74),
+ (172, 117, 76), (157, 108, 91), (145, 102, 83), (120, 91, 73),
+ (110, 83, 76), (100, 62, 75), (111, 52, 70), (99, 21, 60),
+ (100, 6, 56), (104, 9, 52), (108, 12, 49), (95, 15, 40),
+ (88, 17, 49), (93, 11, 49), (103, 15, 65), (123, 15, 77),
+ (119, 6, 84), (130, 1, 81), (139, 12, 101), (133, 33, 87),
+ (122, 45, 77), (109, 63, 73), (105, 65, 74), (104, 79, 74),
+ (113, 81, 56), (120, 73, 47), (91, 53, 30), (90, 57, 24),
+ (73, 64, 31), (42, 52, 27), (20, 36, 7), (13, 81, 24),
+ (21, 55, 41), (57, 30, 61), (70, 51, 44), (61, 103, 40),
+ (53, 107, 9), (36, 107, 37), (45, 116, 40), (69, 102, 47),
+ (79, 70, 89), (74, 45, 73), (72, 22, 75), (65, 27, 88),
+ (79, 29, 88), (92, 43, 90), (83, 53, 91), (80, 43, 94),
+ (80, 39, 109), (75, 34, 110), (72, 34, 107), (66, 27, 84),
+ (79, 44, 84), (90, 48, 84), (94, 70, 84), (109, 84, 88),
+ (104, 91, 83), (97, 91, 75), (125, 80, 57), (136, 81, 42),
+ (142, 103, 38), (133, 120, 15), (104, 138, 0), (85, 144, 16),
+ (79, 151, 15), (84, 145, 8), (118, 128, 5), (134, 118, 30),
+ (131, 113, 41), (138, 126, 44), (153, 125, 41), (150, 118, 45),
+ (155, 105, 54), (130, 94, 78), (121, 78, 97), (130, 65, 89),
+ (131, 59, 79), (125, 75, 66), (100, 69, 87), (102, 69, 80)
+ ),
+
+// 304 gradient0000.jpg
+((244, 0, 12), (255, 0, 102), (240, 0, 160), (225, 0, 218),
+ (223, 0, 232), (221, 1, 247), (221, 0, 250), (221, 0, 254),
+ (229, 0, 241), (242, 0, 197), (255, 0, 154), (229, 0, 108),
+ (204, 0, 63), (171, 0, 33), (139, 0, 3), (131, 2, 2),
+ (124, 5, 1), (111, 10, 0), (117, 7, 0), (123, 4, 0),
+ (123, 4, 0), (123, 4, 0), (120, 7, 0), (118, 10, 0),
+ (119, 11, 0), (124, 6, 0), (129, 1, 0), (137, 0, 2),
+ (145, 0, 5), (144, 0, 2), (144, 0, 0), (134, 0, 1),
+ (127, 4, 0), (124, 5, 1), (124, 5, 0), (125, 6, 0),
+ (135, 3, 2), (145, 0, 5), (173, 0, 28), (202, 0, 52),
+ (254, 0, 117), (225, 0, 165), (197, 0, 214), (157, 0, 228),
+ (118, 0, 242), (115, 1, 248), (113, 2, 255), (114, 1, 255),
+ (118, 0, 242), (202, 0, 84), (173, 0, 50), (145, 0, 17),
+ (128, 7, 9), (112, 14, 1), (112, 14, 1), (112, 14, 1),
+ (130, 0, 0), (149, 0, 20), (169, 0, 41), (187, 0, 59),
+ (205, 0, 77), (229, 0, 99), (254, 0, 122), (245, 0, 215),
+ (241, 1, 224), (227, 0, 255), (221, 0, 240), (215, 0, 226),
+ (220, 0, 222), (225, 0, 218), (254, 0, 160), (246, 1, 81),
+ (244, 60, 10), (239, 48, 5), (235, 37, 0), (231, 33, 0),
+ (227, 29, 0), (231, 30, 0), (236, 31, 0), (239, 52, 1),
+ (252, 55, 21), (251, 13, 10), (247, 13, 5), (243, 13, 0),
+ (238, 10, 0), (234, 7, 0), (228, 22, 0), (228, 22, 0),
+ (233, 39, 1), (226, 49, 0), (220, 60, 0), (217, 69, 0),
+ (215, 78, 0), (220, 100, 37), (242, 77, 83), (255, 0, 130),
+ (255, 0, 174), (253, 0, 189), (253, 0, 150), (254, 0, 112),
+ (253, 0, 93), (252, 0, 75), (242, 0, 16), (231, 11, 0),
+ (131, 6, 0), (129, 3, 0), (128, 0, 0), (137, 2, 0),
+ (146, 4, 0), (156, 0, 3), (230, 0, 2), (236, 3, 0),
+ (233, 13, 0), (243, 18, 0), (242, 13, 0), (242, 8, 1),
+ (245, 1, 13), (238, 0, 23), (198, 0, 35), (147, 0, 8),
+ (124, 5, 1), (126, 2, 0), (128, 0, 0), (133, 0, 0),
+ (139, 1, 0), (151, 0, 9), (209, 0, 55), (220, 0, 102),
+ (203, 1, 209), (217, 0, 253), (217, 0, 253), (217, 0, 253),
+ (220, 0, 255), (221, 0, 254), (225, 0, 255), (224, 0, 254),
+ (217, 0, 255), (216, 0, 253), (215, 0, 252), (211, 0, 253),
+ (207, 0, 254), (206, 0, 255), (163, 0, 237), (119, 0, 244),
+ (110, 0, 247), (115, 1, 247), (129, 0, 239), (143, 0, 232),
+ (160, 0, 222), (162, 0, 225), (152, 0, 241), (116, 6, 255),
+ (91, 12, 254), (81, 17, 254), (71, 23, 255), (87, 14, 254),
+ (101, 4, 255), (119, 2, 254), (195, 4, 255), (206, 1, 254),
+ (217, 0, 255), (231, 0, 252), (233, 0, 241), (236, 0, 230),
+ (241, 0, 227), (255, 0, 180), (255, 0, 132), (254, 0, 124),
+ (254, 0, 174), (226, 0, 194), (199, 0, 215), (188, 1, 216),
+ (190, 0, 222), (194, 0, 223), (239, 1, 157), (205, 1, 90),
+ (202, 0, 52), (149, 1, 17), (140, 0, 11), (147, 0, 8),
+ (169, 0, 41), (203, 0, 60), (208, 0, 82), (255, 0, 130),
+ (246, 0, 221), (242, 0, 227), (238, 0, 233), (231, 0, 252),
+ (225, 0, 254), (220, 0, 254), (217, 0, 253), (214, 0, 254),
+ (207, 0, 255), (204, 0, 255), (137, 0, 254), (109, 9, 255),
+ (101, 13, 255), (97, 17, 255), (100, 12, 255), (103, 7, 254),
+ (106, 5, 255), (131, 0, 251), (196, 3, 254), (207, 0, 255),
+ (210, 0, 255), (215, 0, 254), (216, 1, 255), (210, 0, 255),
+ (204, 0, 255), (141, 0, 239), (116, 0, 255), (116, 0, 247),
+ (143, 0, 232), (187, 0, 229), (195, 0, 224), (220, 0, 222),
+ (254, 1, 172), (255, 0, 135), (255, 0, 118), (255, 0, 118),
+ (255, 0, 122), (255, 0, 120), (254, 0, 112), (255, 0, 107),
+ (255, 0, 106), (255, 0, 102), (252, 0, 75), (244, 0, 52),
+ (235, 0, 33), (239, 0, 41), (240, 0, 63), (255, 0, 102),
+ (255, 1, 161), (254, 0, 210), (246, 0, 223), (245, 0, 215),
+ (255, 0, 180), (255, 0, 128), (254, 31, 94), (212, 100, 86),
+ (221, 101, 38), (229, 84, 1), (217, 77, 0), (215, 35, 0),
+ (234, 1, 33), (250, 0, 100), (255, 0, 164), (237, 0, 228),
+ (233, 0, 250), (225, 0, 255), (215, 0, 252), (221, 0, 217),
+ (227, 0, 211), (255, 0, 130), (242, 0, 58), (234, 29, 0)
+ ),
+
+// 305 0t0507.jpg
+((30, 61, 143), (2, 60, 157), (1, 49, 120), (1, 39, 84),
+ (15, 36, 82), (29, 33, 80), (44, 34, 108), (60, 35, 137),
+ (133, 77, 164), (107, 83, 178), (82, 89, 193), (69, 62, 164),
+ (56, 36, 135), (66, 39, 145), (77, 43, 155), (88, 54, 170),
+ (99, 65, 185), (144, 133, 193), (171, 181, 208), (198, 229, 223),
+ (202, 241, 215), (207, 253, 207), (200, 250, 201), (193, 247, 195),
+ (214, 228, 215), (207, 213, 209), (200, 199, 204), (197, 192, 204),
+ (195, 186, 205), (185, 183, 199), (175, 181, 193), (176, 181, 187),
+ (170, 177, 193), (165, 173, 186), (150, 173, 164), (135, 174, 143),
+ (111, 157, 134), (88, 141, 125), (59, 135, 155), (30, 129, 186),
+ (6, 95, 161), (3, 92, 147), (0, 89, 134), (7, 61, 100),
+ (14, 34, 67), (20, 26, 71), (27, 18, 75), (25, 22, 103),
+ (49, 33, 131), (35, 45, 142), (33, 36, 125), (32, 27, 109),
+ (19, 18, 87), (7, 9, 66), (7, 22, 81), (7, 36, 96),
+ (5, 61, 158), (49, 81, 167), (94, 102, 177), (118, 120, 177),
+ (143, 138, 178), (150, 162, 182), (157, 187, 187), (111, 198, 153),
+ (59, 254, 114), (37, 226, 98), (35, 165, 89), (34, 104, 80),
+ (46, 81, 91), (58, 59, 103), (52, 38, 136), (57, 56, 150),
+ (88, 97, 130), (110, 84, 154), (133, 71, 178), (136, 72, 194),
+ (140, 74, 210), (130, 70, 199), (120, 66, 188), (106, 58, 180),
+ (78, 40, 149), (35, 41, 65), (25, 47, 63), (16, 53, 61),
+ (9, 62, 59), (3, 71, 58), (6, 61, 42), (6, 52, 42),
+ (0, 42, 65), (1, 50, 110), (3, 59, 156), (4, 65, 157),
+ (5, 71, 158), (4, 82, 154), (16, 76, 138), (44, 53, 148),
+ (39, 77, 142), (24, 71, 65), (17, 77, 60), (11, 84, 55),
+ (10, 108, 57), (9, 133, 60), (39, 124, 83), (98, 123, 130),
+ (164, 120, 195), (189, 118, 207), (215, 117, 220), (218, 124, 222),
+ (222, 131, 224), (226, 128, 247), (217, 137, 255), (216, 121, 241),
+ (176, 107, 223), (50, 116, 190), (38, 121, 187), (26, 126, 185),
+ (22, 131, 187), (15, 110, 178), (9, 100, 170), (4, 98, 160),
+ (5, 109, 162), (17, 142, 124), (29, 176, 87), (38, 191, 98),
+ (48, 206, 109), (72, 202, 128), (100, 212, 140), (135, 199, 172),
+ (168, 197, 201), (217, 191, 216), (220, 177, 219), (223, 164, 222),
+ (236, 184, 223), (240, 181, 229), (244, 191, 243), (241, 221, 246),
+ (255, 235, 209), (228, 212, 217), (201, 189, 225), (195, 190, 224),
+ (189, 192, 223), (180, 204, 208), (165, 206, 198), (120, 203, 149),
+ (74, 191, 121), (19, 125, 175), (17, 128, 177), (16, 132, 179),
+ (12, 128, 175), (8, 111, 177), (5, 112, 156), (2, 103, 133),
+ (31, 77, 66), (25, 71, 64), (20, 66, 63), (15, 35, 59),
+ (15, 25, 61), (17, 15, 65), (30, 21, 76), (49, 38, 98),
+ (86, 46, 143), (141, 68, 185), (151, 76, 194), (162, 84, 204),
+ (140, 99, 177), (120, 114, 184), (60, 108, 193), (27, 114, 168),
+ (39, 74, 80), (34, 60, 78), (30, 47, 77), (45, 41, 92),
+ (52, 42, 102), (84, 76, 127), (83, 87, 112), (99, 116, 126),
+ (95, 112, 128), (40, 109, 184), (23, 139, 190), (25, 138, 194),
+ (33, 138, 195), (140, 156, 205), (163, 174, 236), (205, 175, 245),
+ (252, 180, 246), (246, 186, 238), (241, 193, 231), (199, 211, 199),
+ (185, 233, 183), (140, 217, 145), (106, 234, 147), (93, 234, 140),
+ (123, 204, 146), (129, 184, 152), (155, 138, 182), (160, 139, 198),
+ (180, 141, 198), (212, 162, 221), (210, 168, 234), (196, 182, 235),
+ (189, 164, 221), (169, 131, 218), (188, 147, 215), (198, 166, 205),
+ (189, 197, 208), (172, 231, 201), (93, 236, 148), (34, 244, 108),
+ (12, 214, 78), (21, 170, 76), (37, 120, 78), (78, 75, 120),
+ (61, 60, 162), (70, 90, 187), (57, 94, 183), (38, 90, 174),
+ (21, 101, 162), (4, 109, 141), (39, 101, 86), (35, 92, 77),
+ (18, 52, 54), (7, 14, 43), (5, 11, 45), (5, 6, 60),
+ (22, 12, 85), (36, 52, 140), (46, 82, 168), (78, 106, 190),
+ (134, 124, 210), (143, 137, 235), (217, 141, 255), (247, 151, 248),
+ (245, 154, 247), (246, 165, 232), (246, 165, 232), (240, 176, 226),
+ (227, 160, 213), (208, 124, 220), (173, 100, 208), (170, 90, 211),
+ (158, 119, 200), (171, 135, 181), (160, 137, 163), (171, 124, 170),
+ (167, 133, 193), (193, 134, 214), (221, 141, 240), (241, 144, 255),
+ (252, 169, 239), (244, 155, 249), (215, 141, 236), (174, 118, 217),
+ (143, 101, 165), (121, 131, 130), (59, 173, 101), (19, 189, 80)
+ ),
+
+// 306 0t0524.jpg
+((69, 158, 156), (55, 60, 115), (40, 58, 106), (25, 57, 98),
+ (29, 77, 95), (33, 98, 92), (25, 100, 56), (18, 103, 20),
+ (95, 37, 26), (102, 28, 38), (109, 20, 50), (128, 34, 48),
+ (148, 48, 46), (125, 92, 105), (103, 137, 165), (101, 154, 169),
+ (100, 171, 173), (82, 162, 163), (61, 122, 143), (41, 83, 123),
+ (31, 62, 108), (21, 41, 94), (20, 31, 88), (20, 22, 83),
+ (30, 34, 81), (69, 45, 62), (109, 57, 44), (146, 53, 58),
+ (183, 49, 73), (213, 71, 120), (244, 94, 168), (241, 4, 108),
+ (213, 10, 99), (162, 18, 27), (136, 10, 35), (111, 2, 44),
+ (106, 1, 46), (102, 0, 48), (96, 4, 53), (91, 9, 58),
+ (44, 0, 59), (57, 14, 48), (71, 28, 38), (92, 24, 47),
+ (114, 20, 57), (117, 20, 45), (121, 20, 34), (151, 16, 23),
+ (187, 33, 25), (246, 67, 27), (241, 83, 27), (237, 100, 28),
+ (234, 83, 21), (231, 67, 14), (226, 63, 17), (222, 60, 21),
+ (234, 19, 0), (210, 26, 10), (186, 34, 20), (177, 17, 13),
+ (169, 0, 7), (168, 5, 5), (168, 11, 4), (148, 21, 6),
+ (112, 20, 0), (104, 15, 19), (83, 12, 17), (62, 9, 15),
+ (75, 7, 19), (88, 5, 23), (106, 1, 18), (88, 11, 29),
+ (46, 57, 59), (57, 49, 61), (69, 41, 64), (98, 51, 46),
+ (127, 61, 29), (158, 59, 22), (190, 57, 16), (210, 64, 5),
+ (219, 72, 18), (224, 80, 56), (233, 89, 52), (243, 99, 49),
+ (249, 94, 45), (255, 89, 41), (250, 107, 37), (255, 126, 40),
+ (210, 87, 53), (221, 89, 37), (233, 92, 21), (228, 78, 19),
+ (223, 65, 18), (236, 39, 46), (237, 45, 58), (239, 1, 76),
+ (239, 13, 53), (138, 30, 43), (104, 45, 50), (71, 60, 58),
+ (58, 55, 70), (45, 51, 83), (49, 53, 114), (69, 64, 118),
+ (143, 53, 45), (157, 51, 36), (172, 50, 27), (160, 38, 18),
+ (148, 27, 10), (117, 20, 13), (82, 4, 30), (56, 3, 33),
+ (65, 3, 52), (81, 5, 51), (78, 19, 43), (76, 34, 36),
+ (94, 41, 27), (119, 52, 23), (125, 51, 12), (122, 39, 31),
+ (90, 29, 34), (82, 29, 33), (75, 30, 33), (62, 52, 24),
+ (50, 74, 16), (66, 86, 1), (103, 63, 11), (148, 66, 10),
+ (198, 69, 11), (206, 36, 11), (185, 38, 5), (164, 41, 0),
+ (163, 35, 6), (142, 27, 0), (105, 29, 16), (70, 21, 27),
+ (33, 7, 36), (23, 13, 51), (13, 20, 66), (15, 17, 68),
+ (17, 14, 71), (24, 17, 68), (43, 12, 46), (57, 30, 73),
+ (67, 14, 66), (78, 23, 44), (80, 27, 46), (82, 31, 48),
+ (101, 38, 57), (115, 25, 50), (145, 29, 40), (155, 30, 12),
+ (160, 4, 15), (138, 7, 28), (116, 11, 41), (84, 23, 65),
+ (45, 40, 81), (40, 56, 89), (40, 38, 87), (69, 28, 42),
+ (87, 32, 37), (124, 44, 43), (132, 46, 32), (140, 49, 22),
+ (145, 42, 7), (121, 26, 6), (98, 30, 17), (76, 24, 36),
+ (35, 6, 50), (26, 8, 52), (17, 11, 55), (13, 21, 58),
+ (10, 30, 65), (16, 39, 70), (22, 39, 85), (17, 38, 91),
+ (24, 38, 85), (30, 42, 84), (34, 46, 88), (47, 65, 75),
+ (75, 78, 51), (97, 71, 36), (104, 69, 15), (124, 58, 8),
+ (152, 54, 19), (151, 49, 25), (151, 45, 32), (160, 46, 10),
+ (153, 32, 13), (168, 26, 22), (197, 26, 16), (224, 9, 25),
+ (204, 9, 17), (198, 10, 9), (172, 10, 7), (141, 7, 4),
+ (128, 5, 10), (116, 16, 14), (112, 18, 16), (106, 31, 35),
+ (89, 37, 60), (89, 48, 78), (116, 115, 120), (164, 188, 110),
+ (90, 161, 93), (70, 100, 108), (45, 67, 116), (30, 47, 93),
+ (15, 38, 92), (10, 42, 93), (22, 51, 95), (21, 59, 96),
+ (10, 89, 106), (1, 110, 115), (2, 125, 104), (1, 105, 114),
+ (2, 83, 112), (1, 65, 103), (14, 56, 96), (18, 71, 102),
+ (38, 81, 123), (32, 99, 126), (69, 115, 141), (87, 148, 153),
+ (118, 162, 163), (130, 163, 180), (187, 184, 203), (151, 200, 181),
+ (122, 181, 175), (72, 157, 154), (71, 146, 152), (15, 114, 120),
+ (15, 96, 100), (15, 81, 93), (20, 75, 96), (24, 76, 115),
+ (15, 81, 116), (7, 98, 117), (7, 124, 118), (9, 122, 120),
+ (33, 90, 97), (25, 64, 95), (9, 50, 94), (6, 40, 86),
+ (2, 33, 90), (13, 22, 81), (26, 17, 74), (27, 6, 65),
+ (35, 6, 52), (33, 23, 73), (30, 38, 85), (35, 44, 87),
+ (39, 60, 89), (48, 68, 95), (43, 99, 88), (33, 95, 94)
+ ),
+
+// 307 0t0533.jpg
+((4, 32, 54), (54, 39, 108), (84, 99, 130), (115, 160, 153),
+ (138, 164, 165), (162, 169, 177), (164, 177, 183), (167, 186, 190),
+ (162, 224, 211), (189, 237, 233), (216, 251, 255), (228, 233, 238),
+ (241, 216, 222), (232, 174, 195), (223, 133, 168), (205, 133, 164),
+ (187, 134, 160), (176, 117, 227), (135, 98, 163), (94, 79, 100),
+ (75, 63, 69), (57, 47, 38), (47, 41, 39), (37, 36, 41),
+ (42, 50, 71), (62, 56, 71), (83, 63, 72), (109, 67, 76),
+ (135, 72, 80), (120, 64, 70), (105, 56, 60), (99, 48, 63),
+ (85, 88, 61), (108, 124, 87), (132, 114, 107), (157, 105, 128),
+ (151, 114, 141), (145, 124, 155), (154, 105, 171), (164, 86, 187),
+ (67, 38, 148), (33, 28, 112), (0, 19, 77), (6, 18, 49),
+ (12, 17, 21), (10, 18, 18), (8, 20, 16), (10, 27, 17),
+ (22, 49, 30), (62, 134, 70), (80, 162, 117), (98, 190, 165),
+ (115, 200, 180), (133, 211, 195), (139, 209, 196), (145, 208, 197),
+ (128, 222, 198), (122, 199, 181), (117, 177, 165), (123, 141, 153),
+ (130, 106, 142), (115, 100, 123), (100, 94, 104), (94, 71, 87),
+ (82, 70, 82), (47, 52, 58), (39, 60, 47), (31, 68, 37),
+ (35, 65, 36), (39, 62, 36), (51, 58, 64), (65, 79, 82),
+ (55, 55, 67), (39, 48, 55), (23, 41, 43), (14, 25, 57),
+ (6, 10, 71), (8, 15, 77), (11, 21, 83), (18, 28, 87),
+ (51, 27, 125), (35, 49, 62), (28, 50, 54), (21, 52, 47),
+ (11, 51, 49), (1, 51, 52), (7, 38, 32), (4, 14, 16),
+ (7, 9, 8), (12, 5, 10), (17, 1, 12), (15, 10, 14),
+ (14, 20, 16), (22, 35, 25), (36, 67, 36), (62, 94, 53),
+ (88, 117, 71), (122, 162, 100), (99, 135, 102), (76, 108, 105),
+ (78, 106, 104), (80, 104, 104), (78, 93, 98), (70, 88, 90),
+ (36, 103, 86), (38, 121, 98), (40, 139, 110), (26, 128, 97),
+ (12, 117, 84), (9, 117, 55), (9, 110, 52), (20, 110, 59),
+ (24, 119, 75), (77, 64, 92), (81, 69, 100), (85, 75, 109),
+ (86, 76, 100), (78, 87, 92), (71, 92, 95), (60, 90, 88),
+ (21, 81, 56), (17, 67, 41), (14, 54, 27), (10, 48, 31),
+ (7, 42, 35), (6, 43, 35), (3, 47, 30), (3, 75, 38),
+ (6, 83, 39), (18, 99, 56), (23, 109, 56), (29, 119, 57),
+ (55, 127, 64), (57, 133, 68), (69, 138, 73), (117, 136, 91),
+ (120, 151, 94), (101, 146, 86), (83, 142, 78), (73, 140, 75),
+ (63, 138, 73), (46, 117, 59), (19, 88, 41), (2, 66, 32),
+ (5, 42, 25), (3, 11, 13), (3, 5, 16), (4, 0, 19),
+ (1, 11, 12), (2, 17, 12), (5, 44, 23), (3, 79, 40),
+ (1, 113, 55), (8, 120, 58), (15, 128, 62), (21, 135, 65),
+ (13, 117, 56), (24, 95, 77), (47, 83, 79), (64, 62, 65),
+ (78, 60, 50), (83, 54, 72), (91, 53, 71), (100, 53, 71),
+ (113, 71, 83), (129, 77, 79), (143, 85, 109), (116, 81, 103),
+ (74, 85, 89), (67, 85, 87), (61, 85, 85), (36, 68, 65),
+ (18, 52, 54), (18, 58, 49), (18, 68, 56), (44, 70, 69),
+ (69, 90, 91), (69, 131, 116), (59, 147, 123), (57, 167, 138),
+ (81, 170, 148), (106, 167, 97), (115, 139, 91), (86, 118, 71),
+ (30, 41, 43), (27, 43, 35), (25, 46, 27), (6, 22, 22),
+ (9, 18, 17), (4, 29, 25), (6, 41, 34), (10, 58, 46),
+ (12, 75, 56), (12, 83, 41), (4, 98, 46), (3, 96, 49),
+ (9, 92, 66), (6, 82, 54), (4, 76, 52), (3, 70, 52),
+ (6, 63, 48), (9, 44, 38), (21, 36, 41), (22, 29, 35),
+ (32, 22, 31), (34, 19, 26), (36, 22, 21), (28, 23, 19),
+ (35, 32, 25), (38, 33, 30), (63, 36, 41), (70, 39, 44),
+ (76, 39, 46), (71, 35, 47), (45, 25, 34), (43, 20, 26),
+ (32, 19, 28), (19, 21, 20), (22, 17, 14), (15, 11, 12),
+ (13, 7, 9), (12, 10, 11), (26, 29, 22), (39, 39, 29),
+ (46, 37, 32), (65, 48, 41), (76, 40, 50), (66, 37, 42),
+ (55, 35, 37), (22, 32, 21), (15, 27, 17), (8, 10, 9),
+ (5, 7, 6), (4, 0, 3), (7, 7, 9), (10, 12, 11),
+ (6, 20, 20), (9, 38, 33), (1, 38, 57), (3, 66, 57),
+ (4, 72, 61), (4, 54, 53), (23, 49, 50), (40, 40, 40),
+ (58, 31, 40), (77, 49, 63), (65, 41, 75), (40, 55, 58),
+ (23, 70, 60), (28, 100, 76), (66, 108, 86), (85, 138, 130),
+ (107, 154, 148), (113, 166, 160), (126, 182, 171), (135, 161, 160)
+ ),
+
+// 308 0u0075.jpg
+((74, 52, 215), (35, 11, 171), (24, 6, 160), (14, 2, 150),
+ (7, 2, 145), (0, 3, 140), (0, 1, 133), (0, 0, 126),
+ (0, 0, 126), (0, 0, 129), (0, 0, 132), (0, 0, 136),
+ (1, 0, 140), (2, 0, 130), (3, 0, 120), (2, 0, 106),
+ (2, 0, 93), (0, 0, 23), (0, 0, 11), (0, 0, 0),
+ (1, 0, 0), (3, 0, 0), (3, 0, 0), (3, 0, 0),
+ (0, 0, 0), (1, 0, 6), (3, 0, 13), (1, 0, 42),
+ (0, 0, 72), (0, 0, 90), (0, 1, 109), (0, 0, 120),
+ (0, 0, 122), (0, 0, 126), (0, 0, 132), (1, 0, 138),
+ (7, 0, 155), (13, 0, 172), (30, 0, 172), (48, 0, 172),
+ (98, 13, 166), (101, 7, 150), (104, 1, 134), (84, 0, 127),
+ (64, 0, 120), (51, 2, 130), (38, 4, 140), (24, 1, 151),
+ (23, 1, 164), (57, 4, 184), (74, 6, 179), (92, 9, 175),
+ (70, 4, 176), (49, 0, 177), (33, 0, 164), (17, 1, 151),
+ (0, 0, 98), (23, 0, 85), (47, 0, 72), (69, 5, 76),
+ (91, 11, 80), (91, 14, 94), (92, 17, 108), (104, 1, 132),
+ (106, 0, 162), (94, 6, 180), (95, 3, 179), (97, 0, 179),
+ (89, 0, 179), (81, 0, 180), (41, 2, 171), (21, 1, 160),
+ (1, 0, 125), (21, 5, 107), (42, 11, 89), (73, 5, 87),
+ (105, 0, 85), (110, 0, 97), (116, 0, 109), (131, 8, 174),
+ (137, 27, 212), (131, 44, 234), (121, 60, 232), (112, 77, 231),
+ (111, 84, 233), (110, 91, 235), (104, 74, 230), (106, 45, 201),
+ (106, 0, 110), (97, 0, 83), (88, 1, 56), (76, 0, 47),
+ (64, 0, 39), (43, 0, 27), (19, 0, 33), (0, 0, 56),
+ (0, 0, 86), (0, 1, 109), (25, 3, 79), (51, 6, 49),
+ (56, 8, 46), (62, 11, 44), (77, 8, 53), (94, 1, 54),
+ (105, 0, 105), (111, 0, 140), (117, 0, 175), (115, 0, 179),
+ (114, 0, 184), (110, 0, 193), (108, 5, 174), (110, 1, 168),
+ (121, 1, 148), (98, 2, 128), (82, 1, 119), (66, 0, 111),
+ (41, 0, 97), (1, 0, 115), (0, 0, 118), (0, 0, 122),
+ (0, 0, 112), (3, 2, 85), (7, 4, 59), (15, 7, 43),
+ (24, 11, 28), (37, 24, 33), (54, 9, 48), (81, 0, 77),
+ (81, 1, 122), (62, 27, 192), (66, 28, 194), (71, 30, 197),
+ (81, 11, 170), (74, 14, 128), (72, 6, 103), (82, 7, 92),
+ (79, 8, 48), (70, 6, 44), (62, 5, 40), (67, 3, 46),
+ (72, 2, 52), (62, 11, 103), (65, 1, 150), (51, 13, 184),
+ (59, 24, 204), (39, 0, 175), (33, 1, 166), (27, 2, 158),
+ (31, 1, 151), (24, 0, 150), (27, 0, 144), (37, 0, 142),
+ (52, 0, 113), (58, 0, 104), (64, 0, 96), (48, 1, 79),
+ (47, 0, 64), (33, 0, 25), (29, 0, 18), (42, 3, 32),
+ (67, 15, 53), (103, 0, 153), (104, 3, 166), (105, 7, 180),
+ (104, 24, 185), (76, 46, 204), (53, 49, 206), (17, 20, 183),
+ (11, 5, 175), (11, 3, 175), (11, 1, 176), (11, 1, 175),
+ (8, 1, 167), (0, 0, 148), (1, 0, 134), (23, 0, 130),
+ (54, 0, 156), (52, 0, 160), (65, 5, 165), (86, 0, 185),
+ (103, 10, 212), (116, 31, 222), (124, 45, 235), (143, 61, 249),
+ (135, 96, 247), (129, 99, 246), (124, 102, 245), (119, 94, 240),
+ (119, 84, 240), (104, 93, 232), (102, 80, 227), (92, 56, 216),
+ (106, 25, 166), (103, 7, 115), (91, 13, 61), (80, 2, 41),
+ (68, 1, 36), (54, 0, 13), (11, 0, 16), (1, 1, 3),
+ (0, 0, 2), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 0, 6), (1, 1, 27), (0, 0, 56),
+ (0, 0, 90), (0, 0, 112), (0, 0, 124), (10, 0, 135),
+ (41, 1, 113), (41, 1, 100), (36, 0, 76), (8, 4, 41),
+ (0, 0, 7), (1, 1, 0), (0, 2, 0), (0, 2, 0),
+ (0, 1, 0), (0, 0, 0), (1, 0, 2), (5, 1, 2),
+ (2, 1, 7), (3, 0, 32), (0, 1, 49), (0, 0, 75),
+ (0, 0, 110), (0, 0, 120), (0, 2, 127), (0, 0, 152),
+ (1, 0, 166), (18, 0, 180), (42, 0, 188), (76, 28, 200),
+ (118, 22, 218), (125, 29, 224), (125, 35, 231), (133, 42, 235),
+ (139, 39, 233), (140, 45, 237), (134, 61, 239), (125, 89, 241),
+ (135, 91, 248), (137, 87, 248), (143, 51, 240), (131, 50, 240),
+ (114, 62, 233), (114, 67, 231), (104, 64, 223), (114, 47, 225),
+ (104, 2, 197), (97, 1, 163), (61, 0, 53), (76, 3, 95)
+ ),
+// 309 0u0298.jpg
+((58, 63, 7), (75, 43, 20), (85, 44, 38), (95, 45, 57),
+ (109, 48, 51), (123, 52, 46), (116, 56, 43), (109, 61, 41),
+ (87, 47, 37), (90, 38, 37), (93, 30, 38), (98, 30, 32),
+ (104, 30, 27), (114, 49, 41), (124, 68, 55), (125, 71, 73),
+ (127, 74, 92), (89, 69, 81), (71, 70, 61), (53, 72, 42),
+ (30, 63, 26), (7, 54, 10), (5, 48, 9), (3, 43, 9),
+ (7, 41, 14), (11, 38, 19), (16, 36, 25), (13, 29, 20),
+ (11, 22, 16), (14, 21, 14), (17, 20, 13), (20, 16, 7),
+ (4, 26, 5), (19, 52, 33), (22, 45, 57), (26, 39, 81),
+ (39, 37, 87), (53, 35, 93), (46, 40, 77), (39, 46, 62),
+ (35, 74, 27), (46, 65, 32), (57, 56, 38), (70, 49, 47),
+ (84, 43, 57), (84, 45, 59), (85, 47, 62), (72, 44, 58),
+ (68, 42, 55), (54, 28, 55), (54, 27, 67), (54, 27, 80),
+ (67, 37, 71), (81, 47, 63), (80, 51, 65), (79, 55, 68),
+ (109, 77, 92), (101, 72, 84), (93, 67, 76), (86, 53, 64),
+ (80, 39, 53), (80, 35, 52), (81, 32, 51), (67, 26, 40),
+ (84, 24, 34), (96, 29, 21), (121, 64, 38), (147, 100, 56),
+ (153, 107, 55), (160, 114, 55), (166, 128, 66), (191, 138, 72),
+ (164, 108, 59), (149, 90, 46), (134, 72, 33), (113, 48, 19),
+ (92, 24, 5), (86, 23, 11), (80, 22, 18), (85, 5, 18),
+ (98, 15, 25), (125, 16, 47), (124, 28, 51), (124, 40, 55),
+ (117, 45, 58), (110, 50, 62), (101, 41, 49), (98, 27, 41),
+ (67, 1, 49), (65, 8, 40), (63, 16, 32), (63, 8, 27),
+ (63, 0, 23), (65, 2, 11), (74, 20, 10), (89, 33, 0),
+ (100, 47, 7), (122, 43, 36), (120, 57, 31), (118, 71, 27),
+ (119, 70, 18), (121, 69, 9), (111, 52, 20), (100, 42, 20),
+ (124, 73, 44), (128, 85, 40), (133, 97, 37), (132, 89, 39),
+ (131, 82, 41), (117, 38, 23), (93, 18, 23), (72, 0, 16),
+ (62, 7, 2), (51, 13, 0), (37, 14, 0), (23, 16, 0),
+ (17, 12, 6), (9, 25, 14), (5, 34, 29), (9, 39, 31),
+ (24, 43, 24), (38, 37, 26), (52, 31, 28), (50, 27, 24),
+ (48, 24, 20), (46, 12, 29), (40, 11, 33), (35, 2, 21),
+ (44, 4, 15), (58, 0, 5), (58, 6, 4), (59, 12, 4),
+ (55, 12, 6), (41, 22, 7), (29, 40, 24), (26, 52, 27),
+ (18, 52, 25), (23, 46, 29), (29, 40, 34), (33, 41, 36),
+ (37, 43, 39), (46, 33, 42), (59, 26, 35), (60, 18, 28),
+ (68, 22, 22), (58, 17, 0), (57, 15, 3), (56, 13, 6),
+ (57, 20, 12), (58, 13, 18), (48, 11, 19), (55, 4, 13),
+ (68, 2, 6), (63, 5, 7), (58, 8, 9), (53, 8, 15),
+ (41, 19, 22), (44, 21, 31), (47, 25, 37), (56, 26, 36),
+ (60, 32, 46), (76, 31, 38), (70, 25, 31), (65, 20, 25),
+ (66, 16, 19), (46, 14, 19), (35, 22, 14), (26, 23, 14),
+ (24, 39, 8), (22, 38, 16), (20, 38, 24), (24, 25, 30),
+ (30, 11, 33), (35, 9, 56), (38, 31, 38), (35, 30, 34),
+ (34, 46, 24), (40, 48, 9), (63, 45, 21), (70, 60, 9),
+ (82, 49, 6), (90, 53, 11), (87, 53, 18), (84, 51, 20),
+ (81, 34, 16), (79, 28, 19), (77, 23, 23), (56, 35, 30),
+ (53, 35, 35), (31, 29, 30), (15, 27, 17), (13, 26, 9),
+ (22, 42, 5), (12, 49, 15), (21, 39, 23), (37, 32, 38),
+ (48, 36, 46), (57, 46, 42), (91, 51, 52), (117, 59, 48),
+ (127, 69, 57), (135, 81, 81), (168, 106, 85), (193, 133, 99),
+ (175, 130, 89), (160, 106, 68), (152, 109, 67), (159, 100, 58),
+ (150, 75, 70), (132, 86, 50), (137, 103, 32), (147, 94, 44),
+ (161, 107, 47), (170, 102, 57), (158, 84, 71), (147, 75, 79),
+ (143, 70, 79), (136, 55, 62), (149, 39, 84), (152, 45, 117),
+ (140, 66, 93), (185, 127, 125), (209, 126, 122), (174, 188, 129),
+ (146, 190, 157), (138, 180, 114), (128, 108, 120), (153, 80, 109),
+ (112, 80, 93), (84, 105, 66), (99, 131, 64), (117, 117, 63),
+ (114, 80, 52), (104, 64, 52), (97, 52, 46), (87, 54, 45),
+ (82, 60, 46), (48, 48, 40), (45, 46, 41), (28, 49, 30),
+ (19, 40, 35), (13, 34, 25), (16, 16, 14), (23, 4, 8),
+ (29, 10, 6), (55, 11, 10), (77, 7, 17), (97, 7, 16),
+ (100, 14, 25), (94, 14, 25), (92, 22, 32), (74, 6, 31),
+ (74, 6, 31), (79, 22, 37), (73, 45, 21), (81, 31, 20)
+ ),
+
+// 310 0u0298pp1.jpg
+((63, 63, 151), (98, 26, 170), (91, 33, 149), (84, 40, 129),
+ (73, 50, 122), (63, 60, 115), (54, 51, 103), (45, 43, 92),
+ (43, 32, 46), (40, 29, 57), (38, 27, 69), (35, 22, 77),
+ (33, 18, 85), (37, 29, 113), (41, 40, 142), (58, 55, 150),
+ (75, 71, 158), (70, 90, 149), (57, 66, 122), (45, 42, 95),
+ (42, 32, 107), (40, 23, 119), (41, 23, 119), (43, 23, 120),
+ (88, 26, 133), (80, 13, 150), (72, 1, 167), (46, 14, 147),
+ (20, 28, 127), (23, 26, 112), (27, 25, 98), (34, 37, 90),
+ (46, 44, 91), (36, 58, 71), (36, 57, 63), (36, 56, 55),
+ (39, 53, 48), (43, 50, 42), (44, 64, 46), (45, 78, 51),
+ (59, 61, 86), (59, 58, 86), (60, 55, 87), (46, 36, 64),
+ (32, 18, 41), (27, 21, 30), (23, 25, 20), (20, 21, 15),
+ (26, 14, 14), (39, 8, 5), (29, 8, 12), (20, 8, 20),
+ (14, 10, 31), (8, 13, 42), (11, 12, 31), (15, 12, 21),
+ (42, 0, 20), (46, 10, 25), (50, 20, 30), (45, 13, 49),
+ (41, 7, 68), (38, 6, 63), (36, 6, 58), (23, 0, 60),
+ (12, 4, 41), (14, 6, 19), (10, 6, 16), (6, 6, 14),
+ (7, 8, 13), (9, 10, 12), (14, 4, 12), (18, 0, 0),
+ (25, 16, 1), (23, 15, 11), (21, 14, 21), (10, 11, 39),
+ (0, 9, 57), (0, 13, 72), (0, 17, 87), (9, 26, 104),
+ (0, 27, 118), (37, 22, 127), (56, 13, 128), (76, 4, 129),
+ (88, 14, 151), (100, 24, 174), (133, 65, 202), (159, 86, 229),
+ (136, 65, 207), (108, 63, 178), (81, 61, 150), (58, 46, 147),
+ (35, 31, 144), (30, 24, 110), (29, 18, 97), (33, 14, 80),
+ (62, 17, 76), (32, 8, 60), (25, 10, 58), (19, 13, 57),
+ (15, 13, 53), (11, 14, 49), (4, 15, 45), (0, 12, 54),
+ (0, 4, 65), (5, 17, 86), (11, 30, 107), (23, 29, 112),
+ (35, 29, 117), (55, 47, 132), (99, 105, 189), (159, 119, 252),
+ (180, 136, 247), (255, 191, 205), (255, 179, 204), (255, 168, 203),
+ (228, 166, 181), (195, 129, 139), (88, 109, 138), (54, 77, 93),
+ (0, 23, 51), (6, 23, 48), (13, 24, 46), (16, 22, 53),
+ (19, 21, 60), (24, 20, 79), (20, 7, 79), (10, 15, 83),
+ (7, 22, 65), (0, 38, 77), (4, 36, 94), (8, 34, 111),
+ (1, 15, 103), (0, 5, 89), (0, 3, 84), (14, 18, 89),
+ (29, 57, 81), (38, 63, 84), (47, 70, 88), (65, 71, 105),
+ (83, 73, 123), (100, 92, 90), (131, 113, 73), (112, 64, 50),
+ (95, 62, 43), (66, 54, 58), (61, 49, 53), (56, 45, 49),
+ (29, 31, 44), (18, 25, 43), (24, 26, 65), (34, 47, 82),
+ (77, 31, 140), (85, 27, 158), (94, 23, 177), (114, 36, 197),
+ (103, 56, 160), (95, 71, 157), (71, 82, 171), (34, 66, 153),
+ (26, 51, 118), (69, 87, 135), (68, 89, 146), (67, 92, 158),
+ (86, 93, 161), (110, 119, 178), (95, 102, 157), (82, 99, 151),
+ (65, 98, 129), (61, 88, 109), (58, 78, 89), (50, 97, 53),
+ (26, 94, 19), (25, 71, 42), (32, 35, 14), (38, 31, 23),
+ (36, 52, 68), (62, 79, 99), (86, 70, 145), (124, 112, 194),
+ (145, 111, 231), (144, 110, 231), (101, 73, 194), (113, 93, 165),
+ (117, 48, 191), (117, 44, 202), (118, 40, 214), (128, 59, 201),
+ (116, 40, 174), (99, 7, 118), (68, 1, 78), (72, 17, 56),
+ (48, 25, 35), (37, 25, 45), (36, 19, 61), (34, 5, 89),
+ (33, 5, 90), (29, 1, 104), (33, 1, 110), (46, 10, 106),
+ (34, 13, 104), (14, 14, 110), (12, 12, 100), (0, 0, 112),
+ (11, 0, 111), (21, 7, 142), (45, 15, 161), (86, 30, 191),
+ (129, 83, 217), (169, 122, 254), (170, 202, 255), (134, 189, 219),
+ (86, 171, 236), (142, 128, 203), (119, 102, 180), (117, 71, 135),
+ (74, 40, 127), (44, 38, 98), (56, 25, 67), (58, 21, 65),
+ (47, 28, 48), (21, 22, 40), (25, 23, 45), (24, 8, 71),
+ (18, 15, 82), (15, 29, 102), (14, 31, 103), (18, 38, 99),
+ (14, 76, 99), (0, 62, 77), (18, 37, 70), (16, 49, 66),
+ (25, 65, 67), (5, 80, 50), (33, 68, 48), (48, 47, 55),
+ (47, 42, 49), (36, 29, 73), (43, 33, 86), (42, 32, 93),
+ (36, 11, 92), (18, 3, 98), (16, 1, 94), (18, 0, 84),
+ (4, 3, 83), (0, 9, 63), (0, 6, 53), (7, 3, 30),
+ (0, 0, 20), (4, 2, 26), (1, 0, 48), (21, 0, 69),
+ (25, 12, 66), (16, 33, 49), (53, 116, 37), (32, 78, 50)
+ ),
+
+// 311 0u0303.jpg
+((184, 12, 34), (160, 94, 36), (126, 88, 18), (93, 82, 0),
+ (107, 69, 14), (121, 56, 28), (132, 39, 26), (143, 23, 24),
+ (158, 1, 32), (137, 1, 53), (117, 1, 74), (106, 16, 60),
+ (95, 31, 47), (97, 41, 62), (100, 52, 78), (99, 68, 79),
+ (99, 84, 81), (36, 17, 96), (33, 20, 95), (30, 24, 94),
+ (53, 49, 77), (77, 75, 60), (98, 78, 75), (119, 82, 90),
+ (136, 66, 138), (156, 65, 146), (177, 64, 154), (158, 32, 157),
+ (140, 0, 160), (149, 8, 137), (159, 17, 115), (128, 30, 91),
+ (117, 43, 102), (155, 36, 130), (132, 28, 109), (110, 21, 89),
+ (87, 19, 107), (65, 17, 126), (57, 25, 145), (49, 33, 165),
+ (52, 75, 106), (72, 95, 87), (93, 115, 69), (94, 110, 53),
+ (95, 106, 37), (80, 111, 34), (65, 117, 32), (62, 109, 28),
+ (70, 56, 30), (116, 32, 22), (120, 27, 43), (124, 23, 65),
+ (107, 38, 71), (91, 53, 78), (80, 55, 69), (70, 58, 60),
+ (25, 54, 10), (31, 41, 5), (37, 28, 0), (59, 21, 0),
+ (81, 15, 0), (94, 7, 1), (107, 0, 2), (106, 8, 5),
+ (121, 30, 27), (88, 93, 27), (59, 111, 19), (30, 129, 12),
+ (40, 129, 20), (51, 129, 28), (72, 145, 38), (97, 127, 91),
+ (129, 59, 131), (112, 48, 136), (95, 38, 141), (111, 51, 153),
+ (127, 65, 166), (121, 62, 168), (116, 60, 171), (106, 89, 185),
+ (99, 113, 174), (23, 62, 131), (56, 47, 102), (89, 32, 73),
+ (112, 30, 50), (136, 28, 28), (160, 46, 20), (157, 26, 0),
+ (164, 57, 5), (139, 54, 14), (115, 51, 24), (92, 46, 16),
+ (70, 41, 9), (65, 24, 18), (64, 19, 24), (74, 16, 30),
+ (58, 38, 40), (54, 14, 49), (49, 44, 48), (45, 75, 47),
+ (33, 82, 58), (22, 90, 69), (14, 88, 99), (58, 111, 69),
+ (76, 151, 84), (95, 149, 73), (114, 148, 62), (117, 162, 63),
+ (120, 177, 64), (98, 159, 64), (66, 140, 91), (46, 130, 140),
+ (15, 112, 165), (0, 66, 160), (5, 49, 171), (11, 32, 183),
+ (8, 13, 139), (24, 40, 138), (86, 5, 146), (96, 13, 101),
+ (63, 66, 59), (45, 60, 80), (27, 55, 102), (14, 32, 114),
+ (2, 9, 126), (11, 5, 103), (72, 0, 70), (130, 10, 45),
+ (152, 29, 24), (161, 35, 36), (163, 25, 55), (165, 16, 74),
+ (177, 6, 58), (187, 0, 29), (205, 12, 29), (198, 28, 31),
+ (133, 21, 20), (107, 26, 10), (81, 32, 0), (69, 40, 0),
+ (58, 48, 0), (39, 59, 8), (48, 91, 38), (69, 114, 45),
+ (112, 141, 48), (158, 143, 52), (161, 128, 46), (164, 114, 41),
+ (148, 107, 41), (137, 109, 36), (113, 105, 30), (97, 98, 28),
+ (140, 138, 61), (155, 133, 53), (171, 129, 45), (190, 131, 53),
+ (173, 90, 84), (158, 51, 133), (162, 35, 106), (159, 56, 51),
+ (175, 96, 39), (212, 63, 31), (220, 51, 17), (229, 39, 3),
+ (239, 17, 12), (242, 6, 42), (206, 0, 48), (161, 0, 31),
+ (133, 28, 58), (131, 42, 60), (129, 56, 63), (100, 55, 52),
+ (124, 89, 61), (132, 148, 83), (121, 154, 85), (120, 183, 78),
+ (130, 175, 58), (155, 168, 50), (209, 150, 30), (212, 206, 82),
+ (255, 161, 111), (214, 154, 120), (161, 155, 71), (128, 138, 114),
+ (79, 131, 189), (61, 133, 196), (44, 136, 203), (38, 132, 170),
+ (60, 122, 137), (87, 121, 94), (66, 113, 58), (59, 68, 21),
+ (47, 38, 21), (60, 58, 20), (87, 65, 54), (97, 99, 59),
+ (128, 111, 59), (175, 130, 65), (191, 129, 46), (184, 97, 44),
+ (161, 80, 25), (141, 68, 35), (121, 90, 25), (107, 72, 32),
+ (80, 66, 27), (78, 60, 24), (101, 10, 25), (103, 0, 12),
+ (122, 0, 30), (135, 2, 57), (151, 20, 62), (162, 25, 77),
+ (182, 12, 108), (157, 5, 124), (135, 3, 87), (131, 26, 66),
+ (86, 43, 62), (76, 70, 44), (70, 82, 46), (73, 90, 48),
+ (47, 81, 56), (12, 90, 50), (44, 114, 44), (56, 123, 44),
+ (68, 147, 68), (100, 184, 72), (91, 174, 86), (78, 148, 96),
+ (69, 144, 85), (80, 127, 81), (89, 109, 100), (100, 44, 145),
+ (128, 42, 175), (137, 58, 173), (129, 81, 143), (136, 100, 126),
+ (163, 157, 183), (166, 90, 155), (133, 71, 154), (106, 58, 170),
+ (76, 64, 166), (14, 79, 147), (1, 66, 120), (37, 64, 133),
+ (76, 66, 129), (94, 63, 78), (109, 49, 83), (164, 25, 106),
+ (173, 28, 119), (186, 31, 125), (159, 45, 133), (137, 42, 110),
+ (111, 71, 98), (119, 112, 96), (118, 131, 103), (117, 125, 76)
+ ),
+
+// 312 0u0333.jpg
+((113, 106, 52), (66, 73, 42), (52, 84, 52), (38, 95, 63),
+ (51, 94, 76), (65, 94, 90), (65, 83, 92), (65, 73, 94),
+ (27, 51, 75), (32, 46, 77), (38, 42, 79), (45, 37, 68),
+ (53, 33, 58), (65, 25, 57), (78, 18, 56), (76, 30, 54),
+ (74, 42, 53), (71, 97, 70), (55, 114, 71), (40, 131, 72),
+ (46, 118, 51), (52, 106, 31), (38, 94, 15), (24, 83, 0),
+ (17, 65, 13), (38, 58, 15), (60, 51, 18), (101, 51, 33),
+ (143, 52, 49), (162, 55, 58), (182, 58, 68), (204, 101, 102),
+ (189, 129, 95), (164, 91, 100), (145, 83, 86), (126, 75, 72),
+ (132, 69, 67), (138, 64, 63), (164, 62, 61), (190, 60, 60),
+ (188, 35, 38), (160, 52, 28), (132, 69, 18), (126, 68, 41),
+ (121, 67, 65), (120, 67, 67), (119, 67, 69), (118, 86, 61),
+ (114, 94, 59), (152, 106, 83), (184, 129, 101), (216, 153, 120),
+ (190, 132, 107), (164, 111, 95), (153, 95, 82), (143, 79, 69),
+ (169, 94, 91), (196, 118, 102), (224, 143, 114), (205, 135, 104),
+ (186, 127, 95), (160, 112, 92), (135, 98, 89), (125, 76, 71),
+ (111, 62, 47), (84, 30, 28), (65, 35, 37), (47, 40, 47),
+ (44, 46, 50), (42, 52, 54), (52, 43, 48), (79, 64, 43),
+ (98, 82, 46), (101, 65, 46), (104, 49, 46), (83, 28, 41),
+ (62, 7, 36), (51, 4, 29), (40, 2, 23), (38, 3, 10),
+ (40, 6, 5), (26, 8, 6), (25, 21, 8), (25, 35, 10),
+ (35, 40, 17), (46, 45, 24), (46, 65, 46), (25, 70, 50),
+ (59, 103, 78), (72, 98, 93), (85, 94, 109), (84, 100, 110),
+ (83, 106, 112), (42, 119, 147), (97, 151, 138), (104, 190, 165),
+ (118, 129, 113), (72, 107, 87), (47, 88, 74), (22, 69, 61),
+ (27, 57, 49), (32, 45, 38), (14, 40, 27), (39, 50, 34),
+ (63, 54, 57), (89, 61, 67), (116, 69, 77), (129, 75, 77),
+ (143, 82, 77), (167, 96, 76), (190, 123, 97), (207, 117, 117),
+ (185, 80, 110), (131, 76, 81), (124, 81, 72), (118, 86, 63),
+ (108, 83, 61), (101, 106, 26), (93, 128, 24), (87, 95, 22),
+ (86, 72, 35), (70, 64, 35), (55, 57, 35), (48, 62, 33),
+ (41, 67, 32), (30, 75, 18), (18, 51, 22), (14, 43, 13),
+ (20, 36, 9), (46, 19, 2), (50, 27, 15), (55, 35, 28),
+ (48, 47, 29), (51, 54, 37), (54, 63, 16), (81, 69, 9),
+ (70, 78, 19), (78, 98, 32), (86, 118, 45), (112, 122, 64),
+ (139, 126, 84), (162, 141, 112), (195, 144, 97), (205, 110, 90),
+ (203, 84, 44), (204, 57, 41), (195, 46, 31), (187, 35, 22),
+ (152, 16, 16), (128, 8, 9), (99, 21, 21), (60, 7, 15),
+ (35, 14, 23), (38, 22, 30), (41, 30, 38), (41, 34, 42),
+ (34, 49, 54), (18, 77, 81), (25, 112, 95), (20, 99, 70),
+ (25, 76, 77), (30, 38, 49), (27, 28, 37), (24, 19, 26),
+ (12, 4, 27), (0, 3, 26), (23, 10, 36), (30, 15, 34),
+ (51, 13, 36), (51, 13, 34), (52, 13, 32), (59, 25, 24),
+ (63, 43, 19), (55, 44, 12), (36, 41, 19), (38, 30, 9),
+ (44, 25, 10), (62, 40, 17), (79, 38, 34), (72, 49, 31),
+ (66, 79, 36), (59, 92, 39), (45, 103, 52), (21, 103, 55),
+ (31, 135, 160), (29, 140, 151), (27, 146, 142), (26, 164, 139),
+ (2, 150, 124), (23, 102, 73), (15, 68, 52), (27, 25, 39),
+ (19, 17, 20), (37, 18, 11), (37, 20, 4), (17, 8, 1),
+ (11, 1, 2), (31, 7, 3), (54, 18, 4), (101, 19, 41),
+ (133, 34, 37), (145, 45, 45), (136, 59, 65), (114, 67, 77),
+ (102, 50, 88), (78, 43, 85), (73, 45, 85), (81, 64, 70),
+ (82, 61, 44), (110, 49, 54), (117, 56, 61), (99, 23, 69),
+ (75, 27, 79), (58, 39, 69), (53, 45, 68), (62, 68, 68),
+ (92, 92, 68), (108, 97, 67), (107, 84, 78), (92, 64, 102),
+ (44, 50, 84), (44, 34, 71), (62, 26, 72), (79, 26, 80),
+ (97, 29, 102), (76, 1, 70), (76, 11, 53), (56, 1, 43),
+ (52, 31, 40), (70, 44, 55), (84, 62, 38), (93, 35, 34),
+ (111, 30, 36), (121, 27, 41), (113, 29, 44), (115, 53, 38),
+ (129, 52, 44), (134, 54, 65), (159, 52, 44), (178, 60, 46),
+ (167, 95, 37), (178, 95, 65), (228, 135, 102), (220, 153, 124),
+ (182, 170, 120), (161, 173, 101), (179, 173, 113), (197, 149, 129),
+ (163, 145, 141), (165, 129, 133), (145, 122, 140), (134, 107, 112),
+ (118, 115, 110), (101, 118, 86), (107, 143, 99), (55, 128, 135)
+ ),
+
+// 313 0u0752.jpg
+((32, 38, 28), (64, 72, 25), (81, 84, 27), (99, 96, 29),
+ (90, 91, 40), (81, 87, 51), (77, 76, 49), (73, 66, 48),
+ (78, 66, 42), (89, 71, 44), (101, 76, 46), (108, 76, 39),
+ (115, 76, 33), (81, 63, 31), (48, 50, 29), (41, 48, 25),
+ (34, 47, 21), (32, 45, 27), (32, 50, 37), (33, 56, 48),
+ (48, 82, 60), (64, 108, 72), (78, 112, 81), (92, 116, 90),
+ (121, 146, 80), (117, 145, 73), (114, 145, 67), (105, 126, 69),
+ (96, 108, 72), (95, 103, 67), (94, 98, 63), (83, 92, 61),
+ (56, 79, 59), (40, 48, 35), (35, 44, 34), (30, 41, 33),
+ (29, 40, 37), (29, 40, 42), (29, 37, 40), (30, 35, 38),
+ (21, 31, 23), (22, 33, 31), (24, 35, 39), (26, 35, 41),
+ (29, 36, 44), (29, 39, 45), (29, 43, 46), (27, 43, 43),
+ (23, 42, 36), (10, 30, 37), (15, 31, 30), (20, 33, 23),
+ (23, 37, 18), (26, 42, 13), (33, 48, 17), (41, 55, 22),
+ (60, 67, 23), (65, 64, 31), (70, 62, 39), (73, 51, 35),
+ (77, 40, 32), (75, 43, 25), (73, 46, 19), (47, 45, 24),
+ (56, 57, 23), (91, 91, 41), (124, 105, 43), (157, 119, 46),
+ (160, 118, 54), (164, 117, 63), (154, 108, 58), (118, 103, 48),
+ (95, 102, 58), (99, 102, 49), (103, 103, 41), (121, 89, 43),
+ (139, 76, 45), (135, 77, 50), (131, 79, 55), (141, 84, 57),
+ (147, 112, 80), (88, 99, 57), (74, 94, 50), (60, 89, 43),
+ (59, 82, 32), (59, 76, 21), (57, 71, 36), (43, 63, 51),
+ (59, 106, 90), (97, 132, 103), (136, 159, 117), (151, 165, 124),
+ (166, 171, 131), (191, 169, 145), (137, 175, 160), (133, 174, 158),
+ (143, 159, 120), (112, 99, 67), (96, 81, 54), (81, 63, 41),
+ (71, 57, 39), (61, 52, 37), (38, 56, 34), (27, 53, 44),
+ (39, 60, 63), (50, 58, 62), (61, 56, 62), (69, 61, 53),
+ (78, 66, 44), (86, 69, 49), (82, 83, 51), (77, 91, 56),
+ (77, 96, 50), (67, 72, 49), (64, 73, 45), (61, 75, 42),
+ (57, 55, 34), (50, 54, 31), (43, 48, 26), (42, 46, 23),
+ (20, 32, 22), (21, 29, 24), (22, 26, 27), (22, 25, 28),
+ (22, 25, 30), (13, 18, 22), (19, 22, 15), (27, 31, 17),
+ (38, 41, 30), (46, 56, 29), (48, 60, 31), (51, 64, 34),
+ (45, 69, 45), (44, 93, 63), (56, 105, 83), (71, 111, 84),
+ (97, 124, 93), (114, 138, 103), (131, 152, 113), (140, 153, 107),
+ (150, 155, 101), (155, 152, 101), (148, 151, 106), (146, 156, 122),
+ (165, 172, 131), (169, 180, 114), (159, 181, 108), (149, 182, 103),
+ (139, 161, 96), (96, 150, 101), (81, 134, 90), (67, 103, 65),
+ (42, 58, 29), (37, 53, 29), (32, 49, 30), (30, 51, 32),
+ (37, 58, 49), (44, 69, 73), (53, 81, 82), (64, 78, 78),
+ (59, 79, 68), (51, 64, 36), (52, 61, 36), (54, 59, 37),
+ (62, 61, 41), (70, 68, 43), (73, 79, 51), (87, 98, 66),
+ (108, 92, 69), (111, 92, 65), (115, 92, 61), (103, 83, 56),
+ (89, 61, 49), (86, 53, 48), (90, 58, 35), (112, 66, 33),
+ (134, 88, 39), (149, 115, 41), (137, 125, 53), (116, 133, 91),
+ (69, 154, 112), (47, 107, 117), (45, 73, 85), (37, 62, 82),
+ (25, 28, 45), (23, 28, 41), (22, 29, 37), (27, 26, 24),
+ (56, 30, 15), (70, 49, 32), (88, 76, 52), (110, 107, 54),
+ (130, 141, 73), (144, 167, 89), (140, 157, 103), (135, 149, 100),
+ (114, 139, 107), (73, 122, 101), (53, 95, 85), (54, 73, 45),
+ (45, 52, 34), (37, 35, 49), (34, 45, 67), (37, 59, 83),
+ (33, 66, 97), (33, 66, 99), (33, 68, 98), (44, 70, 83),
+ (37, 96, 78), (39, 88, 67), (32, 75, 65), (30, 55, 49),
+ (27, 39, 29), (20, 28, 17), (17, 29, 7), (22, 24, 11),
+ (30, 24, 8), (31, 25, 11), (33, 27, 11), (33, 37, 14),
+ (35, 44, 15), (37, 46, 17), (43, 36, 20), (53, 31, 20),
+ (60, 40, 29), (80, 57, 25), (113, 76, 24), (118, 81, 28),
+ (94, 76, 30), (74, 68, 18), (48, 59, 19), (44, 48, 23),
+ (43, 27, 12), (40, 26, 15), (31, 34, 17), (27, 38, 22),
+ (28, 42, 27), (34, 47, 27), (46, 51, 28), (53, 62, 33),
+ (61, 85, 53), (91, 105, 79), (112, 122, 88), (152, 126, 91),
+ (155, 140, 109), (171, 146, 106), (158, 130, 91), (149, 120, 64),
+ (151, 123, 60), (163, 130, 53), (167, 134, 55), (183, 143, 91),
+ (197, 146, 93), (190, 160, 136), (166, 163, 96), (146, 138, 76)
+ ),
+
+// 314 0u0768.jpg
+((61, 117, 166), (17, 102, 182), (25, 106, 174), (33, 110, 166),
+ (36, 103, 144), (40, 96, 123), (46, 63, 114), (53, 31, 106),
+ (107, 13, 89), (121, 28, 86), (135, 43, 84), (134, 50, 81),
+ (133, 58, 78), (131, 61, 59), (129, 65, 40), (131, 55, 42),
+ (133, 45, 44), (91, 60, 76), (84, 96, 80), (77, 133, 84),
+ (44, 153, 89), (11, 174, 95), (22, 177, 99), (33, 181, 103),
+ (27, 184, 141), (21, 178, 164), (16, 173, 188), (15, 162, 201),
+ (14, 152, 214), (19, 163, 210), (24, 174, 207), (29, 176, 184),
+ (28, 199, 165), (55, 175, 202), (50, 172, 211), (45, 169, 221),
+ (46, 156, 202), (47, 143, 183), (48, 136, 189), (49, 130, 196),
+ (106, 122, 184), (121, 142, 149), (137, 163, 115), (138, 132, 76),
+ (140, 102, 37), (148, 75, 29), (157, 49, 21), (163, 40, 6),
+ (162, 27, 7), (124, 21, 77), (109, 27, 123), (94, 33, 170),
+ (64, 71, 173), (35, 110, 177), (21, 115, 169), (7, 120, 162),
+ (16, 128, 139), (22, 91, 120), (28, 55, 102), (38, 30, 84),
+ (49, 5, 66), (53, 11, 60), (58, 18, 55), (105, 8, 28),
+ (153, 47, 31), (126, 80, 65), (107, 88, 106), (89, 96, 148),
+ (82, 90, 161), (75, 84, 175), (27, 121, 209), (23, 130, 224),
+ (79, 73, 159), (70, 62, 116), (61, 52, 73), (56, 39, 69),
+ (52, 26, 65), (50, 30, 71), (48, 35, 78), (55, 23, 99),
+ (83, 57, 104), (54, 125, 119), (39, 132, 137), (24, 140, 155),
+ (26, 135, 163), (28, 131, 172), (33, 129, 215), (28, 132, 231),
+ (20, 176, 217), (33, 174, 211), (46, 173, 206), (44, 177, 177),
+ (42, 181, 148), (29, 132, 131), (25, 128, 133), (46, 132, 123),
+ (76, 141, 83), (51, 109, 25), (91, 99, 35), (132, 89, 46),
+ (145, 68, 33), (158, 47, 20), (165, 28, 12), (166, 13, 0),
+ (149, 14, 0), (138, 14, 38), (127, 14, 76), (128, 25, 77),
+ (129, 37, 78), (162, 32, 68), (171, 43, 78), (164, 58, 68),
+ (152, 91, 28), (165, 60, 12), (167, 46, 10), (169, 33, 9),
+ (181, 12, 19), (170, 5, 12), (143, 13, 37), (109, 22, 67),
+ (125, 20, 115), (136, 30, 133), (147, 41, 152), (153, 44, 128),
+ (160, 48, 104), (152, 25, 80), (169, 26, 80), (169, 11, 108),
+ (142, 3, 144), (139, 48, 141), (135, 51, 115), (132, 55, 89),
+ (115, 33, 56), (101, 23, 62), (110, 17, 72), (115, 4, 80),
+ (131, 20, 151), (119, 22, 169), (107, 25, 187), (93, 17, 182),
+ (79, 10, 178), (82, 15, 144), (39, 37, 134), (45, 22, 112),
+ (79, 8, 88), (124, 30, 56), (136, 28, 36), (149, 27, 16),
+ (151, 23, 22), (131, 6, 40), (115, 12, 55), (101, 5, 102),
+ (31, 5, 130), (21, 16, 137), (11, 28, 144), (15, 61, 157),
+ (22, 92, 180), (42, 117, 208), (41, 73, 194), (78, 74, 194),
+ (133, 66, 181), (138, 51, 104), (119, 37, 98), (101, 24, 92),
+ (57, 10, 88), (6, 12, 110), (12, 31, 125), (18, 71, 147),
+ (31, 27, 150), (28, 22, 156), (26, 17, 162), (15, 20, 184),
+ (11, 21, 194), (10, 10, 192), (3, 6, 205), (7, 37, 229),
+ (10, 70, 216), (21, 53, 188), (14, 57, 172), (22, 50, 185),
+ (23, 24, 194), (25, 12, 206), (14, 18, 203), (22, 52, 200),
+ (51, 54, 195), (52, 49, 194), (53, 45, 193), (76, 32, 207),
+ (108, 16, 205), (74, 24, 219), (55, 20, 226), (36, 57, 200),
+ (34, 68, 227), (44, 82, 219), (56, 93, 225), (57, 99, 209),
+ (73, 100, 217), (96, 137, 181), (69, 128, 162), (49, 115, 149),
+ (17, 88, 144), (30, 85, 139), (18, 32, 103), (25, 17, 100),
+ (37, 24, 70), (50, 21, 69), (80, 31, 76), (84, 92, 94),
+ (84, 99, 106), (68, 131, 102), (35, 162, 119), (60, 173, 130),
+ (54, 155, 139), (89, 130, 158), (66, 113, 143), (41, 84, 152),
+ (26, 85, 145), (32, 95, 126), (21, 100, 141), (27, 100, 143),
+ (29, 95, 155), (58, 76, 150), (83, 49, 161), (85, 43, 153),
+ (71, 36, 156), (59, 41, 123), (47, 31, 67), (24, 46, 25),
+ (0, 13, 30), (29, 33, 78), (9, 80, 108), (11, 136, 130),
+ (10, 152, 140), (53, 138, 158), (55, 138, 152), (57, 108, 151),
+ (82, 77, 161), (99, 57, 183), (101, 45, 198), (65, 33, 194),
+ (41, 29, 177), (51, 57, 177), (29, 84, 151), (11, 97, 156),
+ (18, 108, 171), (4, 122, 170), (12, 125, 191), (13, 152, 207),
+ (37, 146, 211), (53, 160, 212), (46, 166, 227), (49, 177, 240),
+ (84, 158, 223), (106, 142, 192), (133, 84, 189), (85, 77, 134)
+ ),
+
+// 315 0u0795.jpg
+((34, 103, 134), (41, 113, 138), (23, 112, 151), (6, 112, 164),
+ (9, 95, 149), (13, 78, 134), (14, 75, 130), (16, 73, 126),
+ (26, 31, 113), (42, 19, 106), (59, 8, 100), (67, 13, 70),
+ (76, 18, 40), (71, 11, 22), (66, 4, 5), (44, 4, 2),
+ (22, 4, 0), (16, 19, 2), (18, 13, 22), (21, 7, 43),
+ (43, 3, 70), (66, 0, 98), (76, 0, 98), (87, 1, 98),
+ (141, 15, 96), (120, 36, 88), (100, 58, 80), (70, 64, 89),
+ (41, 71, 99), (26, 66, 110), (12, 62, 121), (16, 55, 134),
+ (24, 50, 134), (18, 47, 127), (15, 38, 107), (13, 29, 88),
+ (31, 59, 103), (50, 89, 118), (49, 108, 132), (49, 127, 147),
+ (39, 194, 136), (23, 147, 152), (7, 100, 169), (17, 67, 144),
+ (28, 34, 120), (25, 28, 113), (22, 23, 106), (21, 20, 98),
+ (43, 13, 75), (71, 9, 32), (73, 5, 16), (75, 1, 0),
+ (79, 0, 9), (83, 0, 18), (95, 9, 30), (107, 19, 43),
+ (67, 21, 23), (49, 12, 25), (32, 4, 27), (43, 17, 35),
+ (55, 31, 44), (48, 51, 63), (41, 71, 82), (23, 88, 126),
+ (11, 115, 166), (32, 162, 186), (34, 126, 151), (36, 90, 116),
+ (42, 80, 101), (49, 70, 87), (63, 62, 60), (74, 36, 61),
+ (121, 11, 72), (114, 11, 88), (107, 12, 104), (80, 7, 102),
+ (53, 3, 100), (51, 4, 100), (50, 6, 101), (52, 5, 101),
+ (58, 2, 101), (58, 12, 77), (45, 20, 50), (32, 29, 24),
+ (23, 24, 28), (14, 20, 32), (8, 10, 31), (22, 13, 40),
+ (41, 2, 65), (50, 2, 72), (60, 3, 80), (69, 1, 83),
+ (79, 0, 86), (87, 1, 88), (104, 7, 88), (123, 20, 73),
+ (140, 23, 68), (138, 17, 96), (113, 9, 96), (89, 2, 96),
+ (86, 1, 86), (84, 0, 77), (100, 3, 72), (124, 24, 50),
+ (140, 60, 23), (151, 59, 46), (163, 59, 70), (168, 52, 74),
+ (173, 45, 78), (184, 67, 86), (189, 68, 83), (198, 67, 99),
+ (197, 61, 101), (195, 67, 92), (200, 74, 97), (205, 82, 103),
+ (200, 77, 98), (191, 75, 86), (188, 70, 86), (160, 87, 52),
+ (142, 83, 13), (124, 53, 9), (106, 23, 5), (123, 40, 4),
+ (140, 57, 3), (149, 90, 24), (169, 114, 49), (200, 109, 106),
+ (198, 131, 115), (99, 181, 145), (92, 146, 134), (85, 111, 124),
+ (66, 75, 130), (92, 83, 74), (121, 90, 72), (187, 71, 80),
+ (205, 84, 103), (196, 111, 105), (187, 138, 108), (164, 137, 101),
+ (142, 137, 95), (138, 113, 93), (110, 89, 36), (90, 71, 29),
+ (69, 46, 52), (22, 34, 92), (36, 41, 115), (51, 48, 139),
+ (47, 75, 148), (5, 107, 173), (24, 129, 161), (26, 97, 149),
+ (25, 47, 132), (29, 37, 125), (34, 28, 118), (43, 14, 107),
+ (68, 1, 98), (106, 5, 97), (144, 18, 100), (182, 40, 100),
+ (200, 73, 100), (200, 126, 113), (193, 144, 101), (186, 162, 90),
+ (210, 139, 31), (143, 128, 59), (122, 172, 49), (96, 174, 62),
+ (130, 147, 105), (103, 156, 124), (76, 165, 143), (51, 124, 175),
+ (25, 139, 173), (18, 155, 187), (9, 175, 217), (0, 144, 197),
+ (0, 144, 197), (12, 114, 178), (9, 111, 175), (22, 92, 162),
+ (23, 55, 138), (14, 22, 105), (2, 4, 65), (17, 10, 43),
+ (18, 3, 72), (25, 5, 81), (32, 7, 91), (43, 6, 102),
+ (42, 11, 104), (46, 12, 106), (49, 9, 105), (46, 9, 104),
+ (48, 3, 94), (23, 9, 88), (25, 18, 60), (31, 13, 55),
+ (56, 2, 62), (80, 1, 66), (75, 20, 49), (73, 32, 48),
+ (62, 31, 39), (32, 18, 51), (7, 20, 54), (11, 28, 82),
+ (18, 25, 105), (31, 25, 113), (34, 29, 121), (20, 45, 129),
+ (17, 66, 132), (11, 72, 137), (18, 83, 137), (9, 93, 163),
+ (23, 148, 178), (3, 148, 195), (18, 189, 206), (10, 199, 219),
+ (21, 193, 213), (33, 186, 202), (64, 189, 181), (65, 165, 153),
+ (65, 140, 135), (41, 108, 127), (54, 83, 143), (38, 50, 124),
+ (36, 23, 111), (43, 14, 107), (39, 13, 104), (34, 22, 98),
+ (58, 52, 98), (80, 28, 100), (116, 12, 101), (133, 14, 98),
+ (143, 26, 107), (156, 26, 90), (160, 26, 99), (168, 31, 99),
+ (185, 41, 102), (193, 56, 100), (189, 56, 99), (175, 43, 92),
+ (152, 30, 87), (136, 15, 95), (97, 30, 84), (88, 2, 89),
+ (79, 0, 94), (76, 20, 109), (88, 27, 96), (104, 8, 45),
+ (95, 5, 33), (159, 25, 24), (178, 26, 41), (172, 4, 56),
+ (148, 37, 53), (112, 72, 60), (89, 114, 93), (84, 119, 113)
+ ),
+
+// 316 1u0214.jpg
+((77, 64, 9), (21, 12, 77), (21, 25, 80), (22, 39, 83),
+ (14, 43, 94), (6, 48, 106), (14, 52, 100), (23, 57, 95),
+ (5, 47, 45), (23, 35, 51), (41, 24, 58), (46, 12, 42),
+ (51, 1, 26), (60, 4, 27), (70, 8, 29), (71, 7, 38),
+ (73, 6, 47), (72, 23, 55), (88, 37, 82), (105, 51, 109),
+ (113, 53, 90), (122, 55, 72), (114, 44, 65), (107, 33, 58),
+ (117, 31, 30), (101, 43, 35), (85, 56, 40), (75, 64, 29),
+ (65, 72, 18), (57, 65, 23), (50, 59, 28), (43, 51, 36),
+ (25, 35, 47), (26, 5, 70), (19, 6, 52), (13, 7, 35),
+ (13, 12, 29), (13, 18, 24), (13, 18, 29), (13, 19, 35),
+ (41, 63, 50), (44, 82, 55), (47, 102, 60), (56, 91, 60),
+ (66, 81, 60), (76, 75, 52), (87, 69, 45), (93, 63, 37),
+ (97, 63, 38), (102, 36, 22), (110, 36, 23), (118, 36, 24),
+ (107, 55, 15), (97, 74, 6), (93, 69, 3), (90, 65, 1),
+ (70, 84, 25), (56, 71, 33), (42, 59, 41), (45, 44, 57),
+ (48, 29, 74), (36, 33, 79), (25, 37, 85), (27, 53, 68),
+ (28, 67, 72), (30, 80, 87), (27, 80, 69), (24, 80, 51),
+ (28, 76, 43), (33, 73, 36), (54, 61, 30), (56, 45, 13),
+ (62, 35, 28), (64, 37, 27), (66, 40, 27), (64, 30, 34),
+ (62, 20, 42), (64, 23, 47), (66, 26, 52), (78, 33, 56),
+ (72, 35, 52), (70, 48, 24), (79, 55, 16), (88, 63, 9),
+ (97, 51, 12), (106, 40, 16), (112, 37, 14), (118, 28, 4),
+ (101, 25, 25), (100, 34, 24), (100, 43, 24), (92, 47, 22),
+ (84, 51, 20), (78, 62, 13), (79, 69, 0), (76, 74, 0),
+ (72, 84, 10), (67, 78, 22), (56, 80, 27), (45, 83, 32),
+ (33, 84, 40), (22, 86, 49), (16, 87, 69), (8, 104, 76),
+ (78, 112, 85), (108, 111, 87), (138, 110, 89), (146, 119, 85),
+ (155, 128, 81), (153, 128, 74), (185, 155, 45), (150, 121, 17),
+ (117, 60, 15), (87, 21, 7), (93, 14, 8), (100, 8, 9),
+ (104, 15, 17), (110, 35, 12), (105, 43, 2), (104, 50, 6),
+ (130, 68, 0), (146, 78, 6), (162, 88, 13), (135, 86, 12),
+ (108, 84, 12), (100, 100, 26), (81, 94, 14), (54, 84, 10),
+ (44, 86, 14), (52, 107, 39), (41, 116, 35), (31, 126, 32),
+ (33, 111, 49), (49, 104, 49), (52, 77, 45), (70, 57, 38),
+ (98, 41, 34), (93, 31, 36), (89, 22, 39), (80, 18, 34),
+ (72, 14, 29), (47, 14, 21), (30, 11, 13), (21, 24, 13),
+ (8, 39, 34), (25, 74, 71), (32, 73, 60), (40, 72, 49),
+ (44, 65, 34), (65, 70, 16), (57, 80, 8), (14, 74, 0),
+ (13, 10, 5), (8, 13, 7), (3, 16, 9), (4, 41, 34),
+ (19, 77, 78), (8, 124, 89), (13, 140, 51), (36, 111, 55),
+ (67, 96, 66), (119, 128, 61), (144, 138, 55), (169, 149, 50),
+ (170, 133, 44), (80, 119, 38), (46, 81, 17), (19, 42, 13),
+ (15, 10, 17), (18, 5, 16), (21, 0, 15), (23, 5, 31),
+ (22, 12, 37), (36, 24, 34), (35, 25, 23), (42, 42, 32),
+ (53, 49, 40), (54, 40, 73), (49, 81, 80), (51, 78, 63),
+ (69, 61, 58), (87, 50, 67), (63, 36, 53), (54, 22, 63),
+ (38, 3, 67), (39, 4, 69), (41, 6, 72), (47, 21, 66),
+ (66, 33, 76), (64, 37, 56), (80, 27, 37), (82, 34, 20),
+ (89, 43, 20), (89, 58, 14), (92, 68, 24), (74, 79, 25),
+ (71, 76, 20), (72, 80, 7), (79, 71, 8), (85, 40, 11),
+ (95, 28, 22), (81, 27, 27), (66, 11, 50), (58, 29, 73),
+ (71, 21, 92), (78, 20, 79), (91, 30, 45), (115, 18, 38),
+ (120, 27, 38), (108, 29, 34), (89, 47, 33), (51, 48, 17),
+ (47, 55, 14), (41, 35, 11), (57, 18, 1), (86, 20, 0),
+ (124, 11, 5), (142, 5, 33), (134, 16, 32), (126, 18, 52),
+ (107, 3, 90), (100, 5, 89), (78, 25, 81), (85, 16, 63),
+ (92, 23, 44), (118, 32, 33), (127, 39, 38), (116, 72, 87),
+ (89, 86, 97), (52, 120, 141), (24, 98, 107), (39, 75, 73),
+ (66, 67, 71), (82, 63, 49), (93, 72, 51), (103, 77, 42),
+ (125, 103, 4), (169, 108, 1), (171, 115, 20), (179, 131, 23),
+ (195, 107, 57), (162, 101, 34), (154, 103, 46), (156, 97, 37),
+ (160, 81, 38), (151, 59, 12), (152, 39, 5), (153, 19, 28),
+ (160, 38, 17), (156, 69, 15), (138, 87, 42), (124, 78, 42),
+ (143, 85, 74), (125, 86, 81), (130, 102, 90), (76, 130, 117)
+ ),
+
+// 317 1u0215.jpg
+((29, 35, 21), (22, 59, 41), (31, 59, 58), (40, 59, 76),
+ (68, 63, 113), (96, 67, 151), (87, 81, 133), (79, 96, 116),
+ (90, 120, 158), (65, 99, 136), (40, 78, 114), (72, 44, 100),
+ (105, 11, 87), (126, 12, 84), (148, 13, 82), (148, 26, 76),
+ (148, 39, 70), (131, 61, 53), (139, 60, 54), (148, 59, 55),
+ (150, 47, 49), (152, 35, 44), (166, 34, 42), (181, 34, 40),
+ (188, 12, 14), (168, 6, 7), (149, 1, 1), (136, 7, 1),
+ (124, 14, 1), (112, 18, 5), (100, 22, 10), (81, 38, 6),
+ (50, 45, 15), (104, 12, 53), (118, 14, 50), (132, 17, 48),
+ (123, 12, 48), (114, 8, 48), (92, 10, 41), (71, 13, 35),
+ (25, 22, 17), (22, 30, 10), (19, 39, 4), (55, 34, 11),
+ (91, 29, 18), (97, 23, 23), (104, 18, 29), (111, 11, 35),
+ (115, 8, 36), (71, 13, 54), (36, 25, 64), (2, 38, 74),
+ (3, 22, 64), (5, 6, 54), (6, 5, 49), (7, 5, 45),
+ (7, 30, 10), (22, 29, 11), (38, 29, 12), (64, 18, 8),
+ (91, 7, 5), (81, 18, 7), (72, 29, 10), (44, 33, 13),
+ (30, 30, 30), (41, 14, 29), (69, 19, 45), (97, 25, 62),
+ (99, 30, 57), (102, 35, 53), (116, 33, 27), (140, 44, 20),
+ (196, 40, 25), (192, 31, 20), (189, 22, 16), (187, 14, 13),
+ (186, 7, 10), (184, 4, 11), (182, 2, 13), (146, 1, 6),
+ (114, 19, 23), (12, 8, 31), (6, 14, 31), (0, 21, 32),
+ (2, 27, 21), (5, 33, 10), (4, 39, 9), (10, 39, 9),
+ (7, 65, 4), (9, 71, 29), (12, 77, 55), (24, 81, 56),
+ (36, 86, 57), (49, 100, 93), (52, 84, 125), (93, 104, 132),
+ (100, 101, 145), (110, 130, 102), (95, 133, 86), (80, 136, 71),
+ (71, 113, 68), (63, 91, 66), (43, 75, 51), (28, 72, 36),
+ (32, 45, 25), (17, 60, 17), (3, 75, 9), (3, 77, 9),
+ (4, 79, 10), (9, 83, 20), (4, 68, 44), (13, 33, 58),
+ (22, 20, 69), (62, 4, 80), (70, 22, 76), (78, 41, 72),
+ (77, 44, 53), (35, 36, 22), (26, 29, 18), (14, 23, 20),
+ (5, 11, 11), (8, 8, 8), (11, 5, 5), (11, 9, 3),
+ (12, 14, 1), (19, 27, 3), (46, 52, 4), (69, 51, 11),
+ (107, 61, 2), (126, 44, 30), (125, 59, 27), (125, 75, 24),
+ (119, 75, 26), (72, 60, 22), (34, 50, 21), (6, 34, 11),
+ (8, 2, 30), (26, 10, 31), (45, 18, 33), (58, 37, 43),
+ (71, 56, 53), (77, 49, 71), (101, 32, 113), (105, 71, 122),
+ (130, 48, 114), (156, 12, 71), (169, 7, 51), (183, 3, 32),
+ (196, 11, 29), (215, 5, 4), (198, 17, 6), (191, 20, 13),
+ (132, 33, 27), (121, 30, 26), (111, 27, 25), (94, 19, 24),
+ (61, 47, 38), (48, 85, 33), (50, 93, 50), (77, 91, 68),
+ (128, 75, 41), (165, 31, 2), (158, 18, 6), (151, 6, 11),
+ (155, 22, 25), (176, 6, 32), (155, 1, 51), (147, 12, 45),
+ (140, 14, 15), (140, 15, 14), (140, 16, 14), (135, 16, 12),
+ (136, 30, 6), (127, 14, 6), (128, 2, 14), (118, 8, 17),
+ (128, 19, 40), (115, 9, 58), (131, 21, 66), (141, 10, 76),
+ (144, 14, 78), (147, 14, 57), (158, 4, 68), (169, 8, 60),
+ (197, 39, 38), (193, 39, 39), (189, 39, 40), (148, 24, 24),
+ (104, 19, 38), (45, 18, 33), (23, 15, 56), (24, 17, 58),
+ (5, 30, 60), (0, 42, 41), (16, 47, 49), (59, 45, 58),
+ (71, 52, 71), (86, 42, 75), (101, 66, 62), (134, 51, 59),
+ (131, 47, 96), (77, 114, 120), (80, 120, 109), (43, 124, 92),
+ (32, 124, 39), (30, 110, 39), (9, 103, 76), (44, 111, 93),
+ (62, 107, 74), (57, 114, 61), (62, 105, 59), (50, 106, 45),
+ (59, 122, 52), (75, 98, 72), (117, 88, 46), (126, 72, 36),
+ (145, 51, 23), (163, 36, 30), (188, 18, 45), (199, 18, 49),
+ (211, 48, 29), (210, 55, 33), (225, 67, 2), (227, 57, 5),
+ (230, 22, 18), (198, 41, 26), (186, 44, 43), (152, 39, 83),
+ (121, 35, 96), (89, 35, 61), (60, 31, 49), (30, 20, 47),
+ (8, 34, 25), (5, 48, 18), (9, 54, 21), (25, 69, 36),
+ (30, 77, 31), (33, 88, 31), (40, 85, 44), (48, 79, 48),
+ (64, 79, 82), (57, 42, 71), (44, 6, 83), (42, 1, 93),
+ (65, 26, 107), (75, 49, 96), (43, 78, 110), (5, 118, 126),
+ (40, 155, 142), (36, 150, 117), (83, 136, 68), (143, 90, 40),
+ (167, 82, 27), (182, 44, 44), (177, 39, 39), (145, 50, 32)
+ ),
+
+// 318 1u0216.jpg
+((85, 57, 217), (47, 123, 149), (59, 116, 132), (71, 110, 115),
+ (110, 106, 97), (150, 102, 80), (178, 95, 77), (206, 88, 74),
+ (170, 78, 125), (118, 75, 132), (67, 72, 140), (46, 53, 144),
+ (25, 35, 148), (26, 26, 147), (27, 18, 147), (29, 14, 161),
+ (31, 10, 175), (31, 32, 184), (19, 29, 169), (7, 26, 154),
+ (51, 23, 151), (95, 20, 149), (96, 34, 141), (98, 48, 133),
+ (70, 55, 122), (45, 52, 142), (20, 50, 162), (28, 50, 185),
+ (36, 50, 208), (48, 59, 208), (60, 69, 208), (70, 112, 232),
+ (105, 111, 209), (152, 179, 170), (181, 163, 172), (211, 147, 174),
+ (197, 128, 162), (184, 109, 150), (173, 102, 141), (162, 96, 132),
+ (84, 100, 113), (88, 104, 121), (92, 109, 129), (115, 96, 152),
+ (139, 84, 175), (142, 72, 173), (145, 61, 172), (157, 53, 150),
+ (156, 53, 142), (67, 9, 191), (51, 10, 198), (35, 12, 206),
+ (25, 12, 214), (15, 12, 223), (14, 12, 213), (14, 13, 203),
+ (2, 3, 155), (6, 7, 163), (11, 11, 171), (30, 29, 191),
+ (50, 48, 211), (55, 52, 212), (61, 57, 214), (69, 55, 210),
+ (74, 73, 209), (86, 93, 199), (131, 76, 195), (176, 59, 191),
+ (183, 54, 172), (191, 50, 154), (215, 62, 109), (237, 90, 80),
+ (229, 180, 85), (221, 163, 103), (214, 147, 121), (194, 117, 129),
+ (174, 88, 137), (163, 71, 131), (152, 55, 126), (143, 23, 121),
+ (135, 42, 148), (126, 40, 167), (119, 55, 183), (112, 71, 199),
+ (106, 67, 199), (100, 64, 200), (71, 70, 206), (24, 88, 188),
+ (2, 114, 164), (18, 135, 168), (35, 157, 172), (40, 147, 167),
+ (45, 137, 162), (101, 118, 187), (90, 98, 196), (106, 99, 177),
+ (134, 127, 169), (178, 114, 151), (176, 100, 144), (175, 87, 138),
+ (190, 74, 124), (206, 62, 111), (188, 44, 113), (175, 20, 121),
+ (168, 10, 131), (163, 7, 125), (158, 5, 119), (157, 3, 112),
+ (156, 1, 105), (146, 18, 113), (130, 13, 130), (102, 23, 142),
+ (56, 54, 164), (4, 42, 169), (2, 45, 161), (0, 48, 153),
+ (26, 47, 138), (45, 70, 137), (45, 73, 136), (48, 72, 182),
+ (52, 61, 218), (49, 50, 220), (47, 39, 223), (44, 32, 221),
+ (41, 25, 220), (29, 38, 201), (24, 46, 166), (51, 48, 139),
+ (131, 19, 147), (186, 29, 100), (193, 22, 89), (200, 16, 78),
+ (213, 19, 82), (213, 33, 98), (212, 32, 97), (187, 19, 96),
+ (126, 38, 98), (86, 74, 122), (47, 111, 147), (42, 107, 152),
+ (37, 104, 157), (16, 104, 178), (7, 86, 205), (6, 50, 201),
+ (32, 45, 211), (27, 15, 201), (25, 19, 186), (23, 23, 171),
+ (0, 24, 158), (4, 25, 178), (10, 28, 174), (38, 22, 193),
+ (75, 33, 227), (100, 31, 216), (126, 29, 206), (154, 27, 192),
+ (124, 17, 211), (84, 17, 236), (74, 23, 238), (88, 60, 233),
+ (108, 89, 207), (165, 108, 211), (168, 111, 216), (172, 115, 222),
+ (200, 117, 185), (209, 140, 184), (215, 154, 149), (213, 162, 143),
+ (203, 128, 122), (204, 120, 112), (205, 113, 102), (221, 96, 92),
+ (244, 100, 99), (232, 102, 88), (201, 129, 104), (199, 137, 114),
+ (184, 118, 128), (194, 89, 93), (188, 85, 102), (191, 118, 135),
+ (159, 165, 161), (138, 168, 160), (64, 171, 181), (44, 170, 159),
+ (111, 138, 93), (140, 111, 98), (169, 84, 103), (207, 61, 84),
+ (197, 37, 101), (178, 34, 93), (136, 30, 118), (61, 64, 133),
+ (40, 102, 151), (44, 131, 161), (22, 155, 160), (25, 162, 155),
+ (41, 159, 173), (49, 148, 153), (98, 111, 156), (167, 76, 143),
+ (168, 63, 130), (214, 60, 94), (220, 38, 61), (221, 13, 45),
+ (214, 23, 30), (210, 32, 32), (245, 33, 21), (209, 51, 16),
+ (209, 57, 16), (200, 69, 1), (175, 101, 30), (190, 69, 38),
+ (193, 64, 86), (149, 39, 110), (102, 49, 153), (79, 41, 180),
+ (62, 30, 217), (60, 29, 228), (50, 48, 235), (54, 45, 224),
+ (71, 53, 225), (146, 81, 201), (182, 73, 198), (208, 73, 193),
+ (197, 76, 169), (205, 68, 146), (215, 72, 100), (233, 90, 74),
+ (228, 88, 71), (235, 61, 71), (178, 36, 92), (130, 27, 118),
+ (54, 56, 139), (23, 59, 181), (28, 40, 204), (37, 27, 210),
+ (66, 20, 207), (82, 32, 191), (109, 40, 191), (124, 11, 161),
+ (156, 24, 136), (191, 44, 151), (231, 43, 104), (240, 59, 92),
+ (228, 89, 122), (208, 139, 110), (226, 171, 115), (218, 162, 129),
+ (198, 125, 136), (176, 109, 127), (114, 141, 98), (100, 130, 96),
+ (84, 115, 97), (57, 102, 133), (47, 71, 133), (42, 60, 136)
+ ),
+
+// 319 1u0216pp1.jpg
+((39, 104, 80), (57, 122, 114), (67, 146, 129), (78, 171, 144),
+ (97, 186, 98), (116, 202, 53), (147, 203, 41), (178, 205, 30),
+ (185, 182, 77), (186, 161, 108), (188, 140, 140), (172, 136, 150),
+ (156, 133, 161), (129, 142, 143), (103, 151, 125), (98, 157, 131),
+ (93, 163, 137), (65, 173, 54), (62, 148, 60), (60, 123, 66),
+ (59, 138, 71), (59, 153, 77), (51, 163, 91), (44, 173, 106),
+ (79, 205, 131), (70, 187, 136), (61, 170, 141), (37, 162, 158),
+ (13, 155, 175), (16, 153, 175), (20, 152, 175), (46, 166, 156),
+ (55, 152, 143), (78, 160, 75), (126, 172, 56), (175, 185, 37),
+ (210, 190, 57), (245, 196, 77), (242, 183, 75), (240, 170, 74),
+ (214, 105, 82), (229, 125, 84), (244, 145, 86), (239, 175, 92),
+ (234, 206, 99), (227, 189, 99), (220, 172, 100), (217, 149, 100),
+ (227, 186, 94), (232, 195, 55), (212, 194, 61), (193, 194, 67),
+ (162, 150, 94), (131, 107, 121), (118, 115, 111), (105, 123, 101),
+ (83, 152, 98), (84, 179, 85), (85, 207, 72), (94, 228, 97),
+ (104, 249, 122), (113, 247, 127), (123, 246, 132), (153, 242, 114),
+ (160, 212, 114), (175, 193, 91), (193, 161, 90), (212, 129, 89),
+ (184, 133, 85), (157, 138, 82), (146, 127, 69), (107, 77, 77),
+ (143, 137, 87), (152, 150, 72), (162, 164, 57), (186, 200, 45),
+ (211, 236, 33), (203, 239, 44), (196, 242, 56), (221, 237, 79),
+ (228, 245, 71), (255, 218, 55), (248, 200, 50), (242, 183, 45),
+ (248, 166, 53), (255, 149, 61), (248, 135, 91), (247, 145, 60),
+ (247, 181, 58), (244, 201, 74), (242, 222, 91), (228, 218, 107),
+ (215, 214, 124), (209, 206, 125), (195, 177, 131), (131, 159, 119),
+ (83, 173, 147), (30, 142, 164), (33, 121, 154), (37, 100, 144),
+ (43, 102, 144), (49, 104, 145), (52, 110, 134), (54, 124, 136),
+ (39, 147, 157), (54, 141, 144), (70, 136, 132), (103, 130, 132),
+ (136, 125, 133), (151, 128, 148), (177, 160, 144), (197, 181, 122),
+ (130, 224, 112), (69, 222, 131), (61, 217, 144), (53, 212, 158),
+ (46, 201, 161), (74, 181, 165), (76, 194, 162), (76, 205, 174),
+ (95, 227, 152), (127, 180, 157), (159, 134, 163), (173, 134, 152),
+ (188, 135, 141), (210, 68, 124), (211, 72, 113), (217, 76, 111),
+ (225, 97, 98), (192, 184, 59), (182, 187, 41), (173, 190, 24),
+ (176, 210, 25), (158, 208, 73), (104, 204, 108), (78, 154, 126),
+ (40, 105, 145), (32, 111, 124), (25, 117, 104), (32, 130, 100),
+ (40, 143, 96), (54, 203, 121), (60, 233, 141), (60, 232, 172),
+ (32, 243, 224), (45, 236, 231), (37, 232, 229), (29, 229, 227),
+ (43, 207, 183), (34, 186, 163), (19, 181, 170), (50, 195, 240),
+ (87, 167, 194), (83, 178, 178), (79, 189, 162), (82, 201, 135),
+ (117, 201, 124), (155, 213, 90), (195, 239, 58), (235, 247, 43),
+ (244, 252, 45), (171, 226, 10), (171, 222, 25), (171, 218, 40),
+ (105, 217, 45), (102, 222, 73), (92, 196, 71), (105, 197, 52),
+ (172, 177, 25), (176, 196, 25), (180, 215, 25), (162, 243, 50),
+ (157, 244, 88), (131, 235, 114), (90, 246, 123), (62, 224, 112),
+ (64, 234, 135), (52, 227, 136), (47, 211, 140), (24, 219, 149),
+ (26, 202, 163), (28, 192, 158), (57, 214, 159), (107, 244, 154),
+ (195, 255, 100), (206, 237, 111), (217, 219, 122), (218, 218, 122),
+ (216, 212, 123), (200, 198, 121), (206, 165, 121), (168, 150, 112),
+ (107, 155, 115), (72, 146, 129), (56, 130, 143), (42, 136, 146),
+ (54, 124, 150), (129, 98, 129), (139, 114, 146), (93, 129, 189),
+ (44, 133, 189), (26, 115, 171), (18, 104, 181), (7, 151, 185),
+ (26, 170, 178), (39, 207, 236), (18, 220, 240), (34, 218, 230),
+ (35, 219, 227), (59, 203, 167), (88, 218, 158), (113, 231, 145),
+ (150, 226, 104), (211, 214, 65), (222, 203, 83), (222, 201, 82),
+ (212, 198, 73), (228, 187, 61), (226, 211, 60), (237, 232, 66),
+ (242, 235, 67), (252, 228, 78), (230, 231, 75), (238, 237, 84),
+ (244, 253, 110), (243, 255, 111), (250, 253, 104), (240, 244, 85),
+ (252, 228, 102), (235, 224, 108), (226, 214, 112), (216, 180, 102),
+ (199, 147, 125), (190, 146, 137), (184, 147, 139), (181, 148, 141),
+ (188, 156, 143), (209, 188, 123), (210, 217, 121), (153, 255, 103),
+ (103, 246, 132), (75, 251, 143), (63, 246, 163), (80, 242, 133),
+ (101, 231, 135), (128, 222, 112), (146, 224, 104), (160, 212, 76),
+ (168, 207, 64), (197, 206, 35), (193, 194, 56), (207, 180, 73),
+ (203, 169, 80), (199, 150, 109), (193, 194, 116), (202, 178, 116)
+ ),
+
+// 320 3m0001.jpg
+((37, 166, 208), (26, 126, 214), (34, 125, 223), (43, 124, 232),
+ (84, 147, 221), (125, 170, 211), (102, 149, 180), (80, 128, 150),
+ (12, 35, 103), (24, 22, 112), (37, 9, 122), (72, 9, 106),
+ (108, 9, 91), (128, 8, 105), (148, 7, 119), (153, 7, 135),
+ (159, 7, 151), (246, 55, 133), (234, 69, 108), (222, 84, 84),
+ (220, 77, 73), (218, 71, 63), (224, 60, 80), (231, 49, 97),
+ (203, 32, 98), (208, 22, 108), (214, 13, 119), (206, 15, 127),
+ (199, 18, 135), (202, 15, 149), (206, 13, 164), (181, 21, 191),
+ (163, 8, 198), (96, 68, 230), (68, 127, 212), (40, 187, 195),
+ (48, 163, 136), (57, 139, 77), (87, 140, 93), (117, 142, 110),
+ (224, 121, 90), (239, 120, 97), (255, 120, 104), (220, 94, 113),
+ (185, 68, 123), (182, 62, 123), (179, 56, 123), (174, 29, 104),
+ (169, 6, 97), (183, 30, 94), (166, 53, 100), (150, 77, 106),
+ (117, 92, 119), (84, 108, 132), (105, 92, 135), (127, 77, 138),
+ (183, 29, 153), (164, 25, 142), (146, 22, 132), (129, 25, 139),
+ (113, 28, 147), (102, 34, 167), (92, 40, 187), (123, 59, 182),
+ (156, 45, 176), (166, 169, 240), (160, 196, 231), (154, 224, 222),
+ (144, 206, 212), (135, 188, 202), (151, 186, 205), (152, 141, 207),
+ (190, 125, 209), (182, 133, 179), (174, 141, 150), (179, 113, 143),
+ (184, 86, 137), (177, 76, 132), (171, 67, 128), (171, 62, 153),
+ (179, 50, 153), (209, 59, 123), (211, 49, 122), (213, 40, 122),
+ (212, 43, 116), (211, 47, 110), (222, 77, 84), (236, 100, 76),
+ (234, 139, 85), (234, 141, 61), (234, 143, 38), (229, 133, 41),
+ (224, 123, 45), (239, 118, 89), (244, 93, 102), (245, 77, 152),
+ (250, 86, 175), (192, 149, 192), (184, 168, 199), (176, 187, 207),
+ (193, 161, 212), (210, 135, 218), (235, 75, 233), (228, 41, 220),
+ (229, 6, 195), (207, 5, 194), (186, 5, 194), (185, 6, 194),
+ (184, 8, 195), (170, 4, 176), (185, 8, 174), (182, 46, 170),
+ (124, 115, 196), (13, 87, 196), (17, 104, 218), (21, 121, 241),
+ (38, 117, 246), (67, 43, 225), (59, 64, 164), (87, 43, 156),
+ (167, 45, 106), (178, 58, 76), (190, 71, 47), (192, 79, 47),
+ (195, 87, 48), (189, 81, 42), (174, 60, 50), (145, 11, 74),
+ (125, 14, 65), (119, 32, 111), (128, 33, 125), (137, 34, 139),
+ (149, 21, 140), (174, 23, 160), (191, 20, 174), (197, 45, 182),
+ (194, 89, 208), (143, 138, 206), (92, 187, 205), (89, 182, 191),
+ (86, 177, 178), (74, 148, 159), (57, 123, 173), (41, 112, 176),
+ (33, 121, 171), (29, 67, 148), (32, 54, 137), (35, 41, 127),
+ (45, 33, 143), (30, 7, 149), (0, 24, 165), (19, 25, 165),
+ (34, 44, 194), (36, 33, 205), (39, 22, 216), (45, 8, 186),
+ (68, 3, 159), (107, 9, 128), (111, 7, 130), (117, 5, 152),
+ (122, 18, 129), (169, 62, 134), (163, 70, 126), (157, 79, 118),
+ (183, 82, 138), (222, 88, 151), (223, 74, 158), (220, 49, 153),
+ (189, 44, 113), (178, 48, 114), (167, 53, 115), (112, 41, 107),
+ (77, 79, 136), (50, 95, 128), (76, 93, 171), (111, 69, 213),
+ (156, 50, 208), (194, 33, 191), (198, 48, 207), (217, 70, 184),
+ (213, 89, 177), (240, 91, 172), (240, 59, 140), (220, 45, 146),
+ (179, 43, 169), (153, 53, 160), (128, 64, 151), (79, 98, 166),
+ (117, 108, 151), (121, 79, 142), (145, 92, 98), (144, 103, 119),
+ (144, 176, 137), (127, 221, 143), (121, 230, 162), (90, 216, 202),
+ (80, 205, 211), (95, 220, 216), (98, 212, 202), (114, 211, 176),
+ (144, 167, 139), (146, 101, 144), (133, 58, 140), (139, 33, 141),
+ (140, 11, 155), (165, 7, 164), (192, 23, 176), (202, 35, 167),
+ (209, 32, 146), (202, 34, 122), (194, 30, 117), (188, 44, 105),
+ (186, 27, 93), (186, 12, 75), (190, 30, 102), (222, 29, 122),
+ (243, 28, 132), (229, 37, 138), (222, 27, 145), (230, 35, 153),
+ (243, 10, 154), (212, 11, 165), (218, 23, 177), (200, 28, 192),
+ (181, 66, 209), (149, 101, 213), (154, 127, 206), (98, 125, 214),
+ (85, 151, 247), (136, 119, 213), (151, 98, 216), (160, 74, 227),
+ (150, 66, 222), (175, 47, 222), (167, 25, 231), (184, 19, 201),
+ (201, 13, 172), (214, 24, 184), (197, 53, 210), (194, 86, 187),
+ (222, 109, 191), (178, 129, 158), (161, 135, 134), (187, 99, 150),
+ (207, 91, 138), (216, 92, 142), (225, 105, 133), (231, 113, 127),
+ (238, 102, 122), (231, 110, 93), (239, 126, 92), (238, 147, 90),
+ (234, 146, 100), (229, 201, 118), (235, 193, 145), (171, 188, 206)
+ ),
+
+// 321 3m0004.jpg
+((24, 26, 38), (15, 20, 14), (32, 49, 9), (50, 78, 4),
+ (71, 71, 3), (93, 65, 2), (98, 58, 3), (103, 52, 5),
+ (88, 8, 19), (81, 11, 21), (74, 14, 24), (51, 20, 30),
+ (29, 26, 37), (14, 15, 36), (0, 4, 36), (6, 10, 41),
+ (13, 17, 46), (43, 36, 87), (59, 39, 88), (76, 43, 90),
+ (87, 32, 73), (99, 22, 56), (103, 13, 45), (108, 5, 35),
+ (179, 31, 45), (196, 31, 71), (214, 31, 97), (168, 26, 79),
+ (123, 22, 62), (114, 26, 58), (105, 31, 54), (74, 37, 21),
+ (89, 45, 20), (123, 117, 19), (128, 126, 9), (134, 135, 0),
+ (150, 133, 32), (166, 131, 65), (173, 114, 61), (180, 97, 57),
+ (142, 72, 72), (99, 90, 49), (57, 109, 27), (35, 132, 49),
+ (14, 156, 72), (38, 163, 89), (62, 171, 106), (123, 125, 104),
+ (108, 62, 72), (92, 34, 46), (84, 26, 42), (76, 19, 38),
+ (69, 31, 43), (62, 43, 49), (56, 53, 48), (51, 64, 47),
+ (11, 103, 36), (26, 150, 32), (41, 197, 28), (64, 175, 34),
+ (87, 154, 41), (76, 123, 23), (65, 93, 6), (102, 96, 10),
+ (107, 69, 6), (63, 53, 52), (74, 73, 52), (85, 93, 52),
+ (94, 86, 38), (104, 79, 25), (112, 66, 43), (105, 62, 30),
+ (105, 50, 20), (109, 35, 11), (113, 20, 2), (97, 16, 3),
+ (81, 13, 4), (74, 16, 3), (67, 20, 2), (69, 30, 1),
+ (65, 27, 14), (60, 59, 67), (39, 83, 92), (18, 108, 117),
+ (14, 111, 147), (10, 114, 177), (20, 108, 198), (35, 69, 130),
+ (30, 58, 61), (28, 45, 45), (26, 32, 30), (40, 39, 32),
+ (55, 47, 34), (61, 70, 23), (58, 83, 25), (73, 81, 42),
+ (81, 76, 38), (68, 52, 65), (83, 55, 74), (99, 59, 83),
+ (112, 69, 83), (126, 80, 83), (182, 126, 137), (143, 159, 156),
+ (61, 121, 131), (56, 81, 96), (51, 42, 61), (46, 35, 60),
+ (42, 29, 59), (38, 22, 49), (61, 20, 36), (83, 17, 29),
+ (85, 5, 14), (68, 22, 9), (58, 15, 9), (48, 8, 9),
+ (64, 27, 11), (109, 41, 20), (141, 74, 4), (162, 96, 9),
+ (175, 60, 15), (166, 37, 9), (157, 15, 3), (166, 14, 9),
+ (176, 13, 16), (178, 15, 16), (187, 19, 52), (218, 24, 61),
+ (205, 48, 55), (141, 34, 112), (143, 25, 127), (146, 17, 143),
+ (88, 4, 144), (63, 16, 130), (65, 42, 132), (50, 34, 143),
+ (28, 36, 119), (24, 41, 93), (20, 47, 68), (22, 66, 52),
+ (24, 86, 37), (52, 87, 7), (22, 73, 6), (26, 60, 25),
+ (41, 54, 47), (60, 7, 121), (75, 14, 118), (91, 22, 115),
+ (105, 42, 99), (124, 37, 72), (132, 46, 59), (144, 55, 41),
+ (209, 41, 32), (216, 31, 33), (224, 22, 34), (228, 59, 40),
+ (232, 100, 35), (243, 108, 27), (228, 110, 74), (241, 149, 48),
+ (226, 147, 44), (245, 167, 17), (239, 173, 16), (233, 180, 16),
+ (236, 168, 5), (224, 156, 21), (200, 160, 11), (189, 136, 22),
+ (104, 119, 78), (106, 128, 82), (109, 137, 86), (125, 160, 68),
+ (112, 182, 50), (133, 180, 52), (171, 161, 14), (176, 169, 19),
+ (212, 159, 27), (192, 126, 66), (221, 100, 89), (219, 102, 93),
+ (223, 132, 85), (212, 144, 71), (200, 139, 108), (199, 169, 119),
+ (248, 167, 120), (225, 156, 120), (203, 145, 121), (172, 75, 86),
+ (148, 52, 80), (123, 40, 56), (114, 33, 32), (114, 31, 23),
+ (113, 23, 14), (103, 13, 25), (91, 4, 12), (83, 11, 15),
+ (44, 15, 20), (26, 16, 14), (2, 11, 16), (10, 12, 11),
+ (21, 18, 1), (22, 24, 3), (13, 41, 3), (4, 44, 20),
+ (2, 50, 26), (17, 47, 11), (31, 19, 21), (83, 9, 44),
+ (147, 23, 57), (172, 52, 53), (200, 81, 85), (202, 104, 59),
+ (191, 126, 96), (197, 131, 117), (168, 114, 102), (118, 80, 77),
+ (94, 75, 60), (105, 65, 55), (123, 76, 68), (161, 77, 43),
+ (195, 66, 37), (231, 110, 6), (216, 128, 0), (233, 140, 9),
+ (217, 139, 15), (199, 135, 12), (184, 108, 32), (170, 119, 38),
+ (128, 103, 19), (83, 135, 27), (15, 168, 85), (1, 185, 133),
+ (23, 141, 143), (44, 129, 166), (41, 77, 200), (83, 59, 143),
+ (92, 60, 145), (94, 35, 145), (86, 35, 104), (119, 17, 91),
+ (142, 31, 82), (111, 26, 49), (87, 31, 40), (91, 42, 38),
+ (97, 37, 27), (101, 44, 37), (100, 53, 27), (110, 69, 25),
+ (107, 42, 40), (101, 45, 72), (109, 7, 91), (89, 19, 92),
+ (77, 30, 85), (55, 13, 95), (69, 11, 62), (37, 13, 65)
+ ),
+
+// 322 3m0005.jpg
+((112, 35, 45), (85, 8, 40), (99, 30, 33), (113, 53, 27),
+ (118, 53, 34), (123, 53, 41), (143, 59, 46), (163, 65, 52),
+ (170, 9, 123), (124, 14, 116), (79, 20, 110), (55, 29, 105),
+ (31, 39, 101), (22, 31, 96), (13, 23, 92), (35, 28, 78),
+ (57, 33, 65), (120, 100, 135), (115, 130, 139), (110, 161, 144),
+ (122, 190, 165), (134, 219, 186), (133, 227, 184), (133, 236, 183),
+ (96, 214, 156), (106, 206, 133), (116, 199, 111), (108, 152, 84),
+ (100, 106, 58), (82, 89, 42), (64, 73, 26), (33, 54, 21),
+ (14, 45, 37), (2, 22, 83), (7, 23, 73), (13, 25, 63),
+ (13, 29, 51), (14, 33, 39), (15, 32, 37), (16, 31, 36),
+ (37, 48, 34), (81, 37, 25), (125, 27, 16), (140, 30, 11),
+ (155, 34, 7), (159, 37, 3), (163, 40, 0), (155, 59, 8),
+ (109, 60, 28), (33, 37, 12), (33, 26, 7), (33, 15, 3),
+ (16, 11, 7), (0, 7, 12), (0, 4, 6), (0, 1, 0),
+ (21, 3, 15), (32, 9, 9), (43, 15, 3), (50, 23, 21),
+ (57, 31, 40), (60, 46, 55), (63, 62, 70), (78, 107, 79),
+ (82, 110, 72), (46, 98, 23), (51, 92, 20), (56, 87, 17),
+ (42, 88, 27), (29, 89, 37), (16, 74, 33), (19, 68, 39),
+ (49, 56, 15), (61, 49, 27), (73, 42, 39), (85, 80, 65),
+ (98, 118, 91), (100, 149, 101), (103, 180, 112), (102, 233, 129),
+ (89, 213, 115), (54, 148, 95), (33, 105, 95), (13, 62, 95),
+ (6, 38, 96), (0, 14, 97), (17, 8, 63), (35, 17, 43),
+ (44, 33, 37), (36, 38, 45), (29, 43, 54), (32, 37, 63),
+ (36, 31, 72), (33, 30, 73), (18, 58, 70), (15, 91, 61),
+ (32, 86, 54), (37, 94, 41), (42, 76, 41), (47, 58, 41),
+ (51, 56, 40), (56, 54, 39), (61, 37, 51), (108, 44, 42),
+ (145, 23, 62), (128, 15, 40), (111, 7, 18), (84, 18, 19),
+ (58, 29, 21), (18, 32, 33), (2, 47, 24), (6, 53, 21),
+ (7, 80, 35), (14, 103, 39), (17, 97, 32), (21, 92, 26),
+ (36, 106, 17), (45, 113, 12), (40, 124, 36), (66, 120, 94),
+ (67, 152, 149), (66, 134, 116), (65, 116, 83), (69, 115, 86),
+ (74, 114, 90), (104, 133, 105), (130, 149, 94), (177, 182, 79),
+ (204, 197, 106), (246, 226, 155), (234, 212, 119), (222, 199, 83),
+ (228, 156, 72), (246, 93, 75), (181, 136, 81), (152, 143, 78),
+ (185, 140, 107), (175, 153, 120), (165, 166, 134), (170, 176, 136),
+ (175, 187, 139), (173, 188, 129), (148, 182, 98), (117, 174, 129),
+ (87, 154, 137), (39, 124, 95), (24, 122, 103), (10, 120, 111),
+ (11, 105, 87), (6, 97, 54), (15, 135, 27), (25, 129, 14),
+ (15, 67, 3), (15, 62, 12), (16, 58, 22), (14, 42, 46),
+ (22, 46, 50), (51, 27, 63), (70, 6, 90), (71, 24, 78),
+ (52, 45, 86), (57, 87, 27), (82, 112, 25), (107, 137, 23),
+ (167, 158, 27), (229, 175, 27), (255, 196, 33), (236, 162, 53),
+ (112, 126, 47), (101, 124, 43), (91, 123, 40), (100, 98, 50),
+ (106, 89, 63), (61, 72, 55), (94, 81, 49), (114, 67, 25),
+ (106, 59, 33), (81, 32, 38), (69, 45, 33), (77, 104, 49),
+ (105, 140, 48), (133, 161, 59), (162, 184, 76), (202, 204, 43),
+ (239, 143, 33), (206, 131, 39), (173, 119, 45), (175, 91, 57),
+ (169, 32, 60), (209, 9, 48), (212, 5, 11), (197, 19, 33),
+ (185, 22, 25), (125, 8, 34), (78, 9, 38), (76, 11, 67),
+ (116, 23, 104), (100, 28, 114), (76, 20, 127), (51, 67, 103),
+ (37, 75, 94), (32, 79, 73), (48, 119, 49), (84, 108, 48),
+ (97, 108, 16), (109, 95, 20), (113, 82, 2), (89, 44, 3),
+ (80, 29, 8), (55, 16, 9), (31, 10, 27), (9, 5, 22),
+ (11, 8, 25), (11, 20, 37), (13, 28, 35), (12, 12, 20),
+ (25, 23, 11), (24, 27, 18), (58, 54, 16), (96, 87, 28),
+ (149, 114, 56), (141, 148, 53), (119, 129, 92), (122, 159, 92),
+ (115, 152, 108), (113, 162, 107), (109, 163, 137), (170, 125, 182),
+ (158, 119, 122), (147, 106, 122), (132, 105, 112), (119, 79, 113),
+ (113, 101, 85), (60, 109, 77), (17, 114, 105), (22, 76, 120),
+ (17, 69, 90), (10, 68, 79), (17, 81, 80), (33, 76, 59),
+ (60, 69, 48), (98, 63, 25), (122, 103, 27), (144, 117, 26),
+ (157, 133, 47), (171, 109, 60), (229, 93, 79), (222, 81, 89),
+ (181, 86, 108), (189, 50, 107), (203, 16, 119), (211, 22, 80),
+ (210, 79, 59), (175, 97, 23), (108, 118, 19), (33, 128, 34)
+ ),
+
+// 323 3m0006.jpg
+((13, 117, 206), (44, 114, 52), (26, 111, 30), (8, 108, 9),
+ (39, 57, 15), (70, 6, 22), (69, 5, 54), (69, 4, 86),
+ (38, 5, 118), (21, 12, 104), (5, 19, 90), (9, 21, 79),
+ (13, 24, 69), (29, 36, 73), (45, 49, 78), (48, 44, 76),
+ (51, 40, 74), (70, 19, 96), (85, 18, 95), (101, 17, 95),
+ (95, 18, 105), (89, 19, 115), (84, 20, 110), (79, 21, 106),
+ (64, 10, 130), (56, 29, 136), (49, 48, 142), (59, 53, 135),
+ (69, 59, 128), (78, 67, 114), (88, 75, 101), (136, 74, 85),
+ (143, 72, 70), (166, 105, 50), (171, 83, 35), (177, 61, 20),
+ (155, 55, 10), (133, 50, 0), (140, 49, 5), (148, 49, 10),
+ (202, 26, 72), (216, 34, 60), (231, 42, 49), (223, 86, 56),
+ (215, 130, 63), (220, 133, 60), (226, 136, 58), (218, 188, 102),
+ (205, 229, 69), (129, 172, 93), (93, 161, 90), (58, 150, 87),
+ (73, 145, 95), (88, 140, 104), (104, 128, 98), (121, 117, 92),
+ (138, 83, 80), (135, 73, 100), (132, 64, 121), (144, 101, 102),
+ (156, 139, 83), (154, 141, 82), (152, 144, 81), (113, 134, 65),
+ (127, 88, 83), (101, 32, 95), (121, 27, 103), (141, 22, 112),
+ (139, 28, 92), (137, 35, 72), (144, 56, 46), (143, 114, 48),
+ (148, 181, 94), (167, 181, 102), (186, 182, 111), (169, 190, 125),
+ (153, 198, 139), (137, 175, 145), (121, 153, 152), (104, 159, 190),
+ (71, 142, 230), (60, 166, 214), (102, 163, 186), (144, 160, 159),
+ (157, 159, 131), (170, 159, 103), (223, 152, 70), (237, 145, 42),
+ (199, 61, 58), (174, 44, 63), (150, 28, 69), (151, 23, 62),
+ (153, 19, 56), (129, 6, 61), (119, 3, 48), (114, 12, 36),
+ (80, 23, 32), (80, 3, 81), (84, 10, 88), (89, 18, 96),
+ (83, 13, 93), (77, 8, 91), (90, 39, 82), (94, 38, 77),
+ (129, 72, 29), (152, 79, 39), (176, 86, 49), (175, 93, 69),
+ (174, 100, 89), (164, 122, 132), (140, 100, 196), (54, 111, 178),
+ (43, 129, 176), (20, 139, 219), (29, 134, 227), (38, 129, 236),
+ (88, 203, 248), (164, 193, 237), (152, 178, 229), (131, 187, 178),
+ (59, 160, 142), (42, 144, 110), (25, 129, 78), (36, 125, 77),
+ (48, 121, 76), (74, 122, 82), (95, 108, 88), (153, 86, 67),
+ (147, 67, 56), (103, 82, 81), (104, 103, 97), (105, 125, 113),
+ (58, 150, 127), (33, 177, 150), (33, 175, 159), (36, 136, 170),
+ (81, 105, 73), (135, 114, 54), (189, 123, 36), (197, 127, 44),
+ (205, 132, 53), (205, 98, 52), (201, 74, 91), (196, 71, 127),
+ (215, 39, 138), (156, 13, 105), (151, 11, 105), (147, 9, 105),
+ (137, 20, 135), (104, 67, 119), (59, 109, 120), (29, 75, 127),
+ (80, 39, 81), (80, 51, 63), (81, 64, 46), (45, 93, 45),
+ (47, 69, 83), (42, 68, 127), (22, 75, 187), (16, 116, 230),
+ (41, 160, 244), (46, 201, 249), (48, 180, 216), (51, 160, 183),
+ (6, 155, 126), (31, 172, 60), (139, 162, 32), (185, 138, 24),
+ (207, 123, 37), (203, 105, 33), (200, 87, 29), (195, 25, 12),
+ (184, 24, 8), (177, 15, 10), (168, 3, 17), (136, 2, 35),
+ (101, 6, 74), (59, 5, 89), (21, 8, 88), (13, 5, 78),
+ (9, 0, 48), (33, 0, 49), (58, 14, 37), (46, 43, 86),
+ (0, 67, 116), (3, 100, 130), (6, 134, 145), (19, 145, 206),
+ (5, 205, 230), (21, 211, 243), (6, 203, 209), (48, 169, 188),
+ (27, 146, 178), (24, 139, 122), (61, 95, 97), (68, 85, 103),
+ (75, 64, 58), (75, 44, 75), (93, 39, 63), (129, 69, 45),
+ (123, 59, 34), (126, 53, 21), (124, 37, 7), (97, 22, 16),
+ (77, 35, 49), (79, 62, 34), (38, 52, 26), (37, 55, 13),
+ (58, 96, 19), (122, 61, 0), (129, 66, 12), (138, 127, 35),
+ (119, 163, 78), (147, 205, 82), (194, 226, 67), (193, 220, 45),
+ (188, 159, 42), (185, 116, 21), (166, 78, 38), (139, 72, 17),
+ (134, 123, 17), (146, 148, 3), (189, 152, 2), (193, 123, 11),
+ (185, 92, 15), (206, 54, 17), (184, 26, 23), (180, 9, 25),
+ (166, 19, 27), (150, 25, 21), (132, 11, 30), (153, 17, 37),
+ (166, 0, 42), (218, 28, 74), (218, 32, 82), (206, 26, 61),
+ (165, 27, 43), (147, 20, 13), (152, 3, 0), (169, 20, 0),
+ (171, 20, 11), (167, 21, 21), (178, 29, 9), (180, 52, 27),
+ (173, 113, 61), (158, 115, 83), (121, 92, 148), (54, 120, 170),
+ (58, 97, 152), (48, 64, 123), (56, 34, 81), (84, 34, 85),
+ (84, 30, 106), (120, 66, 98), (95, 132, 91), (129, 100, 102)
+ ),
+
+// 324 3m0007.jpg
+((0, 213, 157), (12, 213, 221), (11, 217, 227), (11, 222, 233),
+ (43, 218, 202), (75, 214, 172), (119, 179, 159), (164, 144, 146),
+ (213, 142, 62), (212, 129, 64), (212, 116, 66), (167, 93, 95),
+ (123, 70, 124), (127, 57, 144), (132, 44, 164), (117, 49, 173),
+ (103, 54, 182), (64, 110, 125), (79, 126, 110), (95, 143, 95),
+ (97, 129, 83), (99, 116, 71), (103, 110, 93), (107, 105, 116),
+ (120, 100, 163), (146, 121, 140), (172, 142, 118), (164, 119, 122),
+ (156, 97, 127), (159, 87, 135), (162, 77, 144), (161, 66, 148),
+ (159, 75, 153), (134, 94, 165), (101, 105, 181), (69, 116, 198),
+ (74, 90, 169), (79, 65, 140), (82, 58, 134), (86, 52, 128),
+ (122, 56, 104), (133, 59, 120), (144, 62, 136), (147, 53, 134),
+ (150, 44, 132), (164, 28, 123), (178, 12, 114), (178, 7, 99),
+ (144, 37, 79), (129, 67, 70), (163, 83, 58), (197, 100, 47),
+ (220, 80, 54), (244, 60, 62), (243, 37, 67), (243, 14, 73),
+ (240, 37, 100), (227, 52, 88), (214, 67, 77), (168, 63, 81),
+ (123, 59, 85), (106, 58, 78), (90, 58, 71), (68, 50, 92),
+ (41, 81, 117), (48, 122, 161), (43, 100, 155), (39, 79, 149),
+ (35, 61, 156), (32, 44, 164), (43, 24, 168), (34, 12, 175),
+ (8, 44, 158), (11, 93, 158), (15, 142, 159), (10, 162, 174),
+ (6, 183, 189), (8, 178, 189), (10, 173, 190), (37, 164, 183),
+ (55, 115, 203), (43, 88, 155), (68, 75, 133), (94, 62, 112),
+ (107, 73, 109), (120, 85, 107), (108, 85, 93), (86, 139, 109),
+ (36, 117, 121), (30, 101, 129), (24, 86, 137), (21, 99, 127),
+ (18, 113, 117), (0, 108, 125), (3, 126, 131), (46, 128, 116),
+ (58, 118, 118), (97, 77, 112), (101, 74, 104), (105, 71, 96),
+ (99, 66, 99), (93, 61, 102), (68, 104, 78), (80, 158, 82),
+ (50, 142, 91), (35, 114, 101), (20, 86, 112), (15, 76, 118),
+ (11, 67, 124), (2, 55, 151), (1, 39, 162), (11, 43, 203),
+ (20, 73, 241), (20, 130, 191), (10, 126, 187), (0, 123, 183),
+ (5, 117, 180), (3, 113, 176), (2, 88, 165), (4, 52, 162),
+ (18, 21, 154), (32, 17, 152), (47, 13, 151), (39, 15, 141),
+ (32, 18, 132), (17, 21, 129), (33, 21, 121), (55, 23, 132),
+ (50, 2, 112), (71, 46, 103), (73, 47, 99), (75, 49, 96),
+ (83, 86, 79), (112, 151, 98), (176, 173, 120), (230, 171, 127),
+ (89, 145, 219), (45, 166, 200), (2, 187, 182), (4, 191, 178),
+ (6, 195, 175), (40, 207, 127), (56, 186, 80), (60, 214, 80),
+ (57, 223, 77), (74, 203, 139), (60, 174, 150), (46, 146, 162),
+ (16, 131, 138), (20, 149, 110), (60, 185, 85), (70, 188, 114),
+ (32, 184, 111), (23, 167, 105), (14, 150, 100), (34, 95, 100),
+ (46, 56, 125), (68, 38, 136), (71, 27, 162), (61, 16, 161),
+ (89, 9, 158), (111, 34, 164), (112, 37, 146), (113, 40, 129),
+ (101, 29, 129), (106, 6, 164), (95, 7, 179), (90, 49, 187),
+ (80, 63, 191), (99, 72, 184), (119, 82, 178), (160, 87, 158),
+ (224, 70, 184), (161, 88, 206), (94, 114, 229), (74, 131, 218),
+ (33, 157, 217), (13, 169, 191), (25, 192, 174), (91, 163, 160),
+ (151, 149, 124), (181, 156, 66), (225, 172, 102), (237, 146, 93),
+ (232, 71, 123), (220, 50, 111), (209, 29, 100), (178, 11, 117),
+ (144, 20, 230), (106, 27, 233), (23, 48, 236), (15, 115, 191),
+ (24, 115, 188), (20, 77, 164), (14, 52, 149), (5, 37, 140),
+ (1, 33, 120), (19, 37, 121), (22, 32, 129), (17, 64, 142),
+ (49, 48, 128), (64, 34, 132), (59, 23, 131), (58, 40, 148),
+ (28, 71, 139), (27, 85, 135), (31, 124, 106), (49, 117, 102),
+ (64, 84, 83), (62, 45, 99), (12, 47, 79), (5, 68, 85),
+ (12, 91, 124), (3, 117, 143), (2, 120, 170), (3, 121, 171),
+ (7, 139, 188), (7, 168, 188), (9, 163, 189), (2, 129, 174),
+ (3, 117, 171), (7, 107, 166), (13, 55, 165), (47, 42, 162),
+ (68, 38, 160), (73, 41, 168), (87, 24, 155), (95, 36, 128),
+ (125, 25, 124), (139, 12, 103), (130, 55, 94), (111, 36, 119),
+ (69, 52, 144), (17, 89, 165), (3, 116, 172), (12, 117, 146),
+ (14, 118, 129), (8, 76, 125), (0, 70, 129), (28, 38, 100),
+ (54, 33, 110), (89, 33, 124), (93, 4, 120), (97, 23, 100),
+ (89, 7, 73), (91, 33, 74), (118, 45, 90), (124, 82, 104),
+ (163, 120, 176), (171, 152, 207), (165, 187, 226), (166, 160, 222),
+ (188, 145, 201), (173, 106, 186), (136, 99, 140), (162, 82, 153)
+ ),
+
+// 325 3m0008.jpg
+((206, 79, 156), (193, 35, 122), (190, 27, 122), (188, 19, 122),
+ (156, 15, 113), (125, 12, 104), (132, 33, 92), (140, 54, 81),
+ (163, 151, 153), (126, 176, 154), (89, 201, 155), (88, 194, 181),
+ (88, 187, 208), (97, 184, 196), (107, 181, 184), (115, 186, 187),
+ (124, 192, 191), (172, 178, 132), (193, 136, 99), (215, 94, 67),
+ (167, 93, 44), (120, 93, 22), (131, 80, 15), (143, 67, 9),
+ (137, 3, 2), (129, 22, 7), (121, 42, 12), (117, 51, 14),
+ (113, 60, 16), (99, 52, 20), (86, 45, 25), (39, 6, 13),
+ (26, 29, 44), (50, 74, 38), (68, 74, 36), (87, 75, 35),
+ (84, 102, 27), (82, 130, 20), (79, 135, 40), (76, 141, 61),
+ (41, 134, 79), (41, 128, 70), (41, 123, 61), (29, 88, 35),
+ (17, 54, 10), (12, 49, 10), (7, 44, 10), (24, 41, 22),
+ (30, 38, 15), (115, 19, 5), (91, 10, 7), (67, 2, 10),
+ (45, 6, 6), (24, 11, 3), (14, 6, 13), (4, 2, 23),
+ (13, 35, 93), (44, 32, 101), (76, 29, 109), (70, 65, 96),
+ (64, 101, 84), (71, 99, 64), (78, 98, 45), (48, 151, 59),
+ (26, 119, 39), (14, 126, 14), (29, 113, 11), (45, 100, 9),
+ (58, 96, 9), (71, 93, 10), (100, 57, 50), (134, 68, 54),
+ (160, 73, 46), (153, 56, 36), (147, 39, 27), (128, 32, 21),
+ (110, 26, 15), (122, 44, 25), (134, 63, 35), (139, 54, 77),
+ (129, 89, 98), (119, 180, 123), (140, 190, 128), (162, 201, 134),
+ (173, 198, 130), (184, 195, 126), (183, 194, 98), (146, 184, 73),
+ (109, 127, 85), (75, 127, 82), (41, 127, 80), (24, 121, 90),
+ (8, 116, 101), (16, 145, 127), (21, 150, 145), (27, 124, 175),
+ (67, 60, 137), (79, 14, 144), (103, 27, 144), (127, 40, 144),
+ (144, 30, 136), (161, 21, 128), (171, 28, 133), (222, 68, 138),
+ (222, 92, 156), (164, 107, 97), (107, 122, 39), (69, 126, 35),
+ (32, 130, 31), (19, 118, 38), (12, 126, 77), (19, 147, 99),
+ (29, 158, 154), (61, 208, 215), (66, 200, 196), (72, 193, 178),
+ (61, 161, 151), (36, 181, 80), (38, 169, 55), (72, 151, 8),
+ (64, 106, 6), (70, 81, 14), (77, 57, 22), (64, 52, 16),
+ (51, 47, 10), (37, 52, 9), (2, 108, 20), (2, 129, 40),
+ (1, 159, 66), (30, 107, 73), (39, 98, 83), (48, 89, 93),
+ (77, 56, 121), (85, 35, 120), (103, 30, 122), (112, 42, 112),
+ (130, 50, 101), (103, 52, 82), (76, 55, 64), (78, 60, 78),
+ (80, 66, 92), (87, 38, 119), (92, 58, 153), (143, 64, 171),
+ (185, 58, 145), (204, 102, 165), (199, 111, 169), (194, 121, 174),
+ (178, 88, 176), (139, 52, 156), (91, 26, 92), (30, 9, 52),
+ (8, 27, 5), (7, 22, 13), (7, 18, 22), (28, 24, 39),
+ (72, 44, 41), (93, 41, 30), (116, 22, 36), (110, 7, 36),
+ (115, 13, 52), (161, 33, 81), (160, 29, 89), (160, 26, 97),
+ (158, 32, 96), (167, 67, 119), (176, 94, 166), (144, 106, 189),
+ (116, 169, 149), (101, 165, 136), (87, 161, 124), (61, 117, 104),
+ (35, 74, 107), (20, 16, 101), (39, 6, 110), (74, 17, 124),
+ (61, 49, 123), (70, 93, 137), (75, 111, 143), (89, 156, 182),
+ (104, 180, 180), (77, 176, 171), (78, 158, 169), (62, 157, 151),
+ (17, 108, 93), (32, 102, 88), (48, 96, 84), (46, 94, 98),
+ (78, 100, 123), (97, 157, 158), (121, 188, 170), (188, 204, 193),
+ (145, 160, 179), (111, 96, 137), (121, 50, 108), (114, 30, 82),
+ (119, 10, 91), (96, 9, 78), (87, 3, 78), (74, 37, 55),
+ (55, 33, 46), (54, 40, 57), (26, 56, 66), (46, 7, 100),
+ (77, 25, 100), (78, 8, 97), (81, 4, 100), (95, 11, 109),
+ (83, 30, 102), (72, 51, 108), (85, 70, 99), (93, 113, 88),
+ (108, 184, 138), (64, 206, 156), (65, 216, 227), (80, 202, 205),
+ (124, 196, 195), (160, 165, 197), (166, 155, 198), (154, 125, 209),
+ (160, 78, 189), (177, 52, 190), (155, 38, 152), (151, 59, 110),
+ (118, 96, 59), (108, 75, 70), (67, 69, 55), (78, 39, 44),
+ (81, 34, 42), (68, 25, 44), (96, 6, 32), (102, 19, 37),
+ (105, 46, 38), (106, 59, 31), (107, 85, 44), (111, 107, 43),
+ (121, 122, 54), (110, 89, 68), (92, 79, 109), (33, 60, 113),
+ (5, 54, 130), (4, 30, 117), (52, 46, 110), (88, 78, 165),
+ (115, 87, 171), (115, 161, 184), (134, 145, 209), (116, 121, 221),
+ (95, 95, 217), (116, 97, 204), (167, 131, 169), (179, 131, 111),
+ (204, 192, 82), (197, 158, 81), (177, 120, 67), (97, 93, 20)
+ ),
+
+// 326 3m0009.jpg
+((82, 69, 25), (111, 9, 33), (88, 15, 53), (65, 21, 74),
+ (53, 39, 81), (42, 57, 88), (38, 67, 109), (35, 78, 131),
+ (111, 196, 163), (125, 204, 162), (139, 213, 162), (148, 205, 162),
+ (158, 198, 163), (117, 165, 137), (77, 132, 111), (60, 119, 113),
+ (43, 106, 115), (5, 76, 166), (4, 80, 149), (4, 85, 132),
+ (33, 78, 118), (62, 71, 104), (76, 59, 89), (90, 47, 75),
+ (124, 20, 31), (102, 12, 29), (80, 5, 28), (53, 3, 16),
+ (27, 2, 5), (19, 4, 4), (11, 7, 4), (1, 5, 4),
+ (4, 16, 2), (10, 17, 9), (7, 22, 5), (4, 27, 1),
+ (7, 31, 3), (10, 35, 6), (9, 34, 8), (8, 33, 11),
+ (49, 41, 30), (72, 44, 18), (96, 47, 6), (106, 58, 21),
+ (116, 70, 37), (125, 69, 44), (135, 68, 52), (144, 122, 72),
+ (163, 218, 101), (148, 221, 142), (127, 178, 119), (107, 135, 97),
+ (83, 132, 78), (60, 130, 60), (57, 126, 68), (55, 123, 76),
+ (9, 128, 136), (7, 153, 172), (6, 179, 209), (11, 179, 210),
+ (17, 180, 211), (18, 177, 210), (20, 174, 210), (22, 156, 191),
+ (15, 114, 146), (3, 54, 146), (6, 47, 129), (10, 40, 112),
+ (7, 37, 91), (4, 34, 70), (22, 38, 25), (24, 52, 29),
+ (13, 132, 50), (38, 156, 104), (64, 180, 159), (40, 176, 155),
+ (16, 173, 152), (12, 152, 139), (9, 132, 127), (24, 110, 75),
+ (26, 109, 41), (40, 87, 15), (26, 77, 12), (12, 67, 10),
+ (12, 55, 8), (12, 44, 7), (17, 27, 19), (31, 28, 49),
+ (72, 115, 85), (111, 145, 111), (151, 176, 137), (159, 175, 140),
+ (167, 174, 143), (186, 168, 166), (177, 199, 161), (178, 220, 144),
+ (150, 185, 117), (67, 114, 104), (39, 97, 100), (12, 81, 96),
+ (16, 55, 102), (20, 29, 108), (15, 23, 98), (20, 25, 93),
+ (19, 27, 64), (36, 42, 62), (53, 58, 61), (52, 56, 56),
+ (52, 54, 51), (38, 28, 39), (65, 39, 42), (89, 36, 44),
+ (146, 30, 31), (190, 38, 15), (187, 36, 10), (185, 34, 5),
+ (150, 41, 8), (107, 13, 5), (56, 24, 1), (48, 19, 5),
+ (53, 7, 35), (39, 39, 48), (25, 71, 61), (40, 103, 62),
+ (56, 136, 63), (60, 159, 102), (38, 156, 130), (34, 143, 146),
+ (30, 129, 160), (8, 137, 143), (7, 130, 140), (7, 123, 138),
+ (4, 94, 120), (5, 104, 99), (30, 73, 79), (16, 69, 59),
+ (6, 45, 18), (13, 31, 15), (20, 17, 12), (22, 23, 9),
+ (24, 29, 7), (18, 31, 1), (8, 47, 0), (9, 36, 1),
+ (25, 29, 6), (46, 26, 0), (45, 24, 1), (44, 23, 2),
+ (23, 20, 13), (22, 27, 23), (33, 28, 32), (48, 15, 36),
+ (24, 2, 25), (30, 10, 19), (37, 18, 14), (50, 3, 9),
+ (58, 2, 3), (64, 14, 3), (65, 4, 12), (120, 6, 6),
+ (131, 24, 14), (84, 29, 24), (70, 23, 34), (56, 17, 44),
+ (46, 7, 60), (31, 11, 46), (15, 17, 40), (19, 23, 24),
+ (31, 1, 27), (40, 0, 29), (49, 0, 32), (44, 17, 34),
+ (54, 13, 29), (59, 15, 28), (71, 18, 48), (108, 16, 39),
+ (143, 33, 42), (141, 22, 18), (149, 30, 8), (136, 25, 16),
+ (106, 17, 11), (61, 24, 6), (56, 25, 5), (73, 31, 17),
+ (42, 40, 28), (37, 59, 23), (33, 78, 19), (28, 100, 60),
+ (78, 122, 86), (94, 119, 87), (117, 110, 56), (137, 58, 27),
+ (163, 29, 4), (185, 22, 23), (158, 15, 43), (135, 13, 50),
+ (91, 21, 83), (110, 53, 122), (156, 99, 140), (111, 103, 127),
+ (52, 82, 120), (32, 74, 114), (16, 28, 128), (20, 12, 131),
+ (14, 19, 123), (30, 16, 93), (16, 15, 47), (17, 19, 18),
+ (15, 26, 18), (12, 36, 14), (24, 39, 10), (38, 35, 16),
+ (79, 48, 27), (77, 108, 28), (109, 142, 11), (162, 103, 9),
+ (176, 80, 19), (139, 94, 97), (156, 125, 156), (172, 171, 187),
+ (145, 195, 184), (146, 187, 179), (135, 162, 145), (97, 149, 160),
+ (70, 134, 118), (26, 114, 118), (17, 107, 131), (34, 105, 135),
+ (25, 130, 136), (12, 132, 157), (7, 147, 206), (15, 155, 208),
+ (25, 148, 189), (13, 114, 144), (2, 91, 125), (14, 38, 100),
+ (7, 31, 77), (13, 22, 39), (21, 14, 48), (12, 9, 56),
+ (10, 6, 65), (1, 20, 99), (7, 11, 134), (16, 9, 139),
+ (5, 15, 112), (0, 7, 61), (5, 16, 48), (0, 8, 29),
+ (2, 9, 27), (9, 4, 34), (6, 18, 76), (4, 15, 81),
+ (15, 30, 87), (29, 16, 69), (39, 10, 2), (33, 13, 50)
+ ),
+
+// 327 3m0010.jpg
+((244, 135, 96), (221, 130, 112), (231, 142, 128), (242, 155, 145),
+ (222, 157, 143), (202, 159, 142), (183, 162, 123), (164, 165, 105),
+ (54, 110, 39), (54, 85, 32), (55, 61, 25), (72, 63, 21),
+ (89, 65, 17), (77, 52, 13), (66, 39, 10), (55, 39, 16),
+ (45, 39, 23), (4, 82, 22), (12, 92, 34), (21, 102, 46),
+ (43, 100, 29), (65, 99, 13), (77, 101, 18), (90, 103, 23),
+ (104, 104, 14), (117, 89, 25), (130, 75, 36), (145, 94, 34),
+ (161, 114, 32), (162, 120, 34), (164, 127, 36), (188, 150, 67),
+ (217, 150, 63), (229, 189, 120), (203, 166, 118), (178, 144, 116),
+ (126, 113, 120), (74, 83, 124), (70, 56, 115), (66, 29, 107),
+ (49, 28, 87), (50, 55, 93), (51, 82, 100), (43, 83, 93),
+ (35, 85, 86), (33, 64, 71), (32, 44, 56), (34, 35, 55),
+ (31, 40, 35), (111, 103, 20), (140, 137, 45), (169, 171, 70),
+ (184, 190, 83), (200, 210, 97), (224, 194, 103), (248, 179, 110),
+ (191, 144, 152), (177, 164, 120), (164, 184, 89), (163, 195, 77),
+ (162, 207, 65), (154, 188, 64), (146, 169, 63), (170, 147, 41),
+ (172, 132, 63), (165, 131, 60), (144, 94, 52), (123, 57, 45),
+ (116, 51, 58), (109, 45, 71), (113, 29, 42), (117, 42, 37),
+ (127, 30, 47), (110, 28, 51), (93, 27, 55), (69, 27, 35),
+ (45, 27, 15), (44, 20, 9), (44, 14, 4), (27, 8, 4),
+ (22, 23, 5), (5, 15, 77), (16, 13, 82), (28, 12, 87),
+ (28, 11, 90), (29, 11, 93), (43, 2, 81), (62, 19, 73),
+ (106, 48, 60), (133, 41, 35), (160, 34, 11), (154, 41, 6),
+ (149, 48, 2), (146, 58, 18), (115, 72, 21), (101, 92, 15),
+ (101, 94, 16), (47, 82, 26), (24, 96, 71), (1, 110, 117),
+ (10, 94, 103), (19, 79, 89), (19, 28, 87), (29, 14, 83),
+ (75, 64, 81), (98, 99, 67), (121, 134, 54), (129, 116, 44),
+ (138, 99, 34), (131, 76, 19), (130, 66, 28), (126, 73, 19),
+ (119, 58, 4), (113, 60, 26), (109, 55, 26), (106, 50, 27),
+ (97, 50, 34), (100, 55, 16), (98, 40, 18), (115, 40, 17),
+ (141, 25, 10), (131, 32, 9), (122, 39, 9), (113, 53, 4),
+ (104, 67, 0), (112, 96, 9), (107, 119, 9), (139, 146, 17),
+ (142, 127, 24), (177, 160, 28), (179, 170, 49), (182, 180, 71),
+ (212, 205, 62), (225, 207, 99), (223, 223, 135), (195, 219, 123),
+ (186, 245, 75), (141, 226, 60), (96, 208, 46), (93, 198, 36),
+ (91, 189, 26), (67, 149, 127), (51, 150, 129), (18, 100, 158),
+ (37, 119, 169), (67, 168, 154), (82, 165, 169), (97, 162, 184),
+ (97, 105, 142), (164, 77, 96), (148, 43, 58), (139, 34, 38),
+ (149, 26, 54), (170, 39, 81), (191, 52, 109), (187, 80, 108),
+ (157, 100, 71), (145, 96, 79), (143, 96, 80), (108, 71, 89),
+ (81, 36, 77), (58, 32, 61), (51, 32, 54), (44, 33, 47),
+ (42, 24, 50), (36, 18, 42), (42, 19, 37), (46, 26, 37),
+ (87, 18, 37), (91, 12, 31), (96, 7, 25), (91, 2, 20),
+ (98, 14, 12), (83, 4, 0), (76, 12, 2), (78, 15, 8),
+ (75, 27, 5), (95, 28, 9), (110, 30, 23), (119, 32, 22),
+ (125, 43, 22), (125, 53, 31), (134, 66, 29), (149, 75, 12),
+ (110, 91, 15), (97, 83, 15), (85, 75, 16), (97, 54, 38),
+ (103, 32, 36), (119, 26, 21), (135, 19, 22), (152, 5, 47),
+ (155, 2, 46), (129, 4, 22), (102, 20, 9), (59, 38, 11),
+ (35, 29, 15), (18, 41, 13), (0, 53, 7), (22, 28, 18),
+ (17, 10, 44), (2, 15, 50), (6, 4, 53), (45, 4, 62),
+ (86, 1, 58), (115, 13, 60), (113, 4, 46), (89, 5, 28),
+ (82, 6, 18), (61, 4, 11), (35, 5, 29), (41, 2, 47),
+ (43, 13, 67), (54, 23, 83), (87, 18, 101), (97, 32, 100),
+ (142, 83, 77), (158, 117, 71), (167, 140, 97), (185, 124, 95),
+ (169, 96, 113), (180, 65, 156), (113, 90, 181), (99, 199, 225),
+ (108, 212, 221), (86, 196, 147), (61, 149, 125), (28, 140, 115),
+ (30, 83, 101), (11, 21, 72), (26, 21, 88), (6, 30, 126),
+ (35, 72, 127), (15, 109, 119), (18, 124, 112), (15, 118, 62),
+ (55, 72, 54), (58, 51, 32), (84, 32, 36), (83, 27, 10),
+ (86, 32, 4), (96, 42, 8), (93, 71, 14), (96, 109, 27),
+ (129, 169, 73), (107, 137, 77), (60, 96, 130), (49, 69, 128),
+ (60, 60, 88), (62, 56, 66), (95, 44, 41), (104, 52, 64),
+ (111, 53, 78), (142, 60, 72), (161, 27, 122), (132, 46, 107)
+ ),
+
+// 328 3m0011.jpg
+((31, 61, 35), (8, 36, 40), (8, 47, 43), (9, 59, 47),
+ (11, 48, 55), (14, 38, 64), (13, 30, 57), (12, 23, 51),
+ (31, 15, 28), (26, 14, 46), (21, 13, 64), (27, 8, 129),
+ (33, 3, 195), (46, 8, 179), (59, 13, 164), (50, 11, 135),
+ (42, 10, 107), (50, 2, 44), (57, 13, 57), (64, 25, 70),
+ (109, 36, 85), (154, 47, 101), (184, 59, 101), (215, 72, 102),
+ (196, 147, 176), (164, 152, 168), (133, 157, 161), (145, 182, 147),
+ (157, 207, 134), (151, 192, 143), (145, 177, 153), (145, 145, 171),
+ (109, 182, 165), (78, 156, 222), (66, 184, 219), (55, 213, 216),
+ (62, 217, 223), (69, 222, 230), (87, 213, 237), (106, 205, 244),
+ (153, 156, 227), (127, 136, 222), (102, 117, 218), (95, 102, 186),
+ (88, 87, 155), (90, 83, 151), (92, 79, 148), (98, 36, 147),
+ (95, 33, 132), (104, 42, 125), (81, 47, 117), (58, 53, 109),
+ (43, 73, 110), (29, 94, 112), (30, 91, 108), (31, 88, 105),
+ (58, 124, 76), (29, 104, 77), (0, 84, 78), (16, 88, 101),
+ (32, 93, 124), (61, 89, 134), (91, 85, 145), (129, 120, 173),
+ (152, 117, 171), (94, 75, 157), (82, 54, 126), (70, 34, 95),
+ (68, 51, 89), (67, 69, 84), (49, 91, 103), (53, 128, 131),
+ (71, 121, 220), (71, 111, 174), (72, 102, 128), (57, 68, 106),
+ (43, 35, 84), (54, 31, 83), (66, 27, 82), (101, 40, 110),
+ (87, 32, 123), (80, 24, 151), (55, 41, 182), (30, 59, 213),
+ (34, 67, 204), (39, 75, 195), (66, 97, 164), (69, 122, 156),
+ (68, 152, 137), (67, 133, 103), (66, 115, 70), (48, 96, 53),
+ (30, 78, 36), (8, 43, 11), (0, 38, 1), (2, 14, 10),
+ (5, 27, 15), (47, 31, 6), (58, 73, 33), (69, 116, 61),
+ (57, 150, 80), (45, 185, 99), (141, 208, 141), (131, 212, 75),
+ (245, 234, 30), (212, 165, 35), (179, 97, 41), (207, 54, 53),
+ (235, 12, 66), (198, 56, 104), (143, 41, 78), (67, 24, 52),
+ (47, 27, 55), (19, 22, 27), (11, 17, 20), (3, 13, 14),
+ (4, 5, 7), (2, 0, 1), (1, 0, 0), (0, 13, 0),
+ (20, 34, 35), (41, 49, 49), (62, 64, 63), (77, 92, 79),
+ (93, 121, 96), (76, 129, 135), (83, 145, 184), (102, 155, 149),
+ (71, 126, 129), (16, 63, 31), (8, 40, 28), (0, 17, 25),
+ (0, 13, 17), (0, 5, 5), (0, 2, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 3, 0), (0, 4, 4), (0, 3, 6),
+ (0, 0, 0), (0, 0, 9), (4, 3, 17), (8, 7, 25),
+ (27, 16, 50), (31, 33, 72), (28, 13, 98), (8, 24, 86),
+ (12, 1, 57), (13, 6, 54), (14, 12, 51), (31, 8, 26),
+ (68, 0, 29), (101, 43, 58), (120, 118, 70), (118, 166, 150),
+ (140, 221, 152), (112, 208, 220), (95, 173, 224), (79, 138, 228),
+ (86, 133, 213), (99, 114, 209), (97, 122, 204), (84, 153, 194),
+ (147, 222, 201), (159, 226, 198), (171, 231, 195), (188, 140, 242),
+ (189, 106, 198), (216, 97, 241), (240, 66, 223), (217, 22, 220),
+ (183, 65, 149), (139, 56, 138), (128, 25, 108), (82, 38, 87),
+ (86, 29, 84), (112, 18, 71), (149, 14, 116), (142, 39, 108),
+ (97, 32, 184), (100, 34, 194), (103, 37, 205), (168, 38, 174),
+ (152, 54, 141), (193, 67, 105), (167, 91, 59), (105, 117, 31),
+ (66, 64, 25), (54, 58, 21), (73, 37, 11), (84, 15, 20),
+ (61, 3, 25), (47, 28, 13), (34, 73, 18), (53, 111, 53),
+ (63, 123, 97), (56, 135, 130), (65, 117, 154), (60, 87, 174),
+ (27, 52, 179), (37, 52, 145), (20, 22, 107), (27, 16, 50),
+ (18, 10, 21), (2, 3, 7), (1, 0, 5), (8, 0, 3),
+ (13, 7, 9), (37, 0, 14), (39, 23, 10), (43, 46, 27),
+ (34, 57, 41), (22, 62, 51), (31, 51, 49), (18, 39, 68),
+ (0, 39, 78), (12, 40, 105), (29, 14, 109), (61, 18, 110),
+ (107, 24, 158), (205, 34, 200), (162, 47, 252), (108, 25, 241),
+ (54, 51, 246), (104, 77, 252), (112, 79, 255), (107, 104, 217),
+ (88, 110, 255), (79, 103, 239), (74, 127, 219), (72, 141, 172),
+ (55, 114, 128), (22, 80, 92), (21, 79, 67), (25, 49, 36),
+ (24, 30, 28), (27, 24, 35), (33, 20, 50), (40, 30, 55),
+ (66, 23, 50), (125, 27, 66), (129, 31, 69), (66, 49, 85),
+ (56, 51, 83), (49, 28, 67), (49, 46, 41), (43, 60, 52),
+ (35, 48, 57), (30, 36, 68), (51, 21, 81), (58, 22, 83)
+ ),
+
+// 329 3m0012.jpg
+((20, 34, 73), (36, 22, 48), (36, 34, 72), (36, 46, 97),
+ (59, 53, 131), (82, 61, 166), (62, 56, 186), (42, 51, 206),
+ (41, 23, 105), (50, 40, 84), (59, 58, 64), (86, 51, 35),
+ (113, 45, 6), (150, 117, 19), (188, 189, 33), (214, 222, 84),
+ (240, 255, 136), (253, 220, 139), (243, 182, 110), (233, 145, 82),
+ (159, 81, 58), (86, 17, 35), (69, 8, 37), (53, 0, 40),
+ (9, 0, 12), (4, 2, 14), (0, 5, 17), (0, 10, 21),
+ (0, 16, 25), (1, 19, 21), (2, 23, 18), (7, 6, 11),
+ (22, 27, 4), (24, 62, 47), (76, 88, 71), (128, 115, 96),
+ (139, 129, 144), (151, 143, 192), (144, 140, 196), (137, 137, 201),
+ (91, 12, 241), (78, 24, 176), (65, 37, 111), (57, 18, 79),
+ (50, 0, 48), (44, 3, 36), (38, 7, 25), (14, 5, 0),
+ (8, 0, 2), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 1), (0, 0, 2), (5, 0, 6),
+ (11, 0, 11), (17, 0, 16), (24, 0, 22), (56, 17, 48),
+ (95, 20, 50), (214, 72, 122), (234, 94, 105), (255, 116, 89),
+ (238, 107, 95), (221, 98, 101), (189, 42, 96), (144, 16, 93),
+ (77, 8, 73), (77, 9, 81), (78, 11, 90), (88, 14, 86),
+ (98, 17, 83), (96, 16, 91), (95, 16, 99), (109, 29, 102),
+ (145, 27, 87), (133, 51, 113), (161, 57, 139), (189, 64, 166),
+ (205, 65, 196), (222, 66, 227), (189, 116, 250), (174, 165, 218),
+ (239, 131, 146), (201, 108, 114), (164, 86, 82), (124, 51, 59),
+ (84, 16, 37), (51, 4, 12), (37, 18, 11), (20, 0, 0),
+ (35, 0, 15), (57, 4, 46), (68, 2, 56), (79, 0, 66),
+ (66, 2, 71), (54, 4, 77), (64, 40, 92), (59, 72, 127),
+ (74, 180, 230), (115, 170, 230), (156, 160, 231), (159, 163, 224),
+ (163, 166, 217), (174, 124, 127), (164, 59, 162), (168, 47, 153),
+ (179, 30, 158), (135, 7, 128), (130, 19, 138), (125, 32, 149),
+ (111, 42, 159), (122, 87, 181), (125, 90, 144), (95, 36, 94),
+ (48, 9, 56), (38, 20, 45), (28, 32, 35), (32, 33, 36),
+ (36, 34, 37), (44, 53, 60), (80, 46, 71), (146, 81, 63),
+ (189, 129, 57), (175, 201, 42), (159, 202, 36), (144, 204, 31),
+ (117, 162, 103), (79, 143, 106), (83, 113, 167), (42, 110, 149),
+ (20, 23, 120), (21, 16, 94), (23, 9, 68), (21, 6, 49),
+ (20, 4, 31), (14, 2, 14), (7, 0, 0), (1, 0, 0),
+ (0, 0, 0), (0, 0, 2), (0, 0, 3), (0, 1, 4),
+ (1, 12, 14), (12, 27, 8), (19, 23, 9), (23, 20, 3),
+ (48, 55, 13), (63, 67, 7), (78, 79, 1), (82, 82, 22),
+ (114, 81, 10), (116, 99, 9), (94, 125, 22), (62, 105, 59),
+ (53, 82, 51), (64, 57, 73), (62, 75, 76), (60, 94, 80),
+ (87, 119, 104), (91, 162, 104), (86, 215, 71), (180, 202, 104),
+ (205, 249, 38), (198, 227, 34), (192, 205, 30), (202, 160, 78),
+ (228, 166, 129), (239, 205, 157), (252, 192, 228), (236, 190, 218),
+ (240, 172, 133), (255, 153, 70), (239, 84, 30), (192, 36, 57),
+ (102, 9, 54), (84, 46, 83), (64, 44, 93), (66, 56, 90),
+ (67, 54, 84), (99, 59, 83), (131, 64, 82), (138, 92, 120),
+ (105, 150, 171), (30, 189, 185), (23, 199, 248), (2, 146, 232),
+ (40, 78, 161), (96, 43, 149), (115, 38, 150), (146, 30, 157),
+ (147, 6, 144), (159, 1, 120), (169, 48, 119), (178, 58, 147),
+ (233, 42, 155), (219, 24, 162), (223, 13, 148), (215, 15, 163),
+ (205, 6, 157), (171, 5, 147), (93, 41, 126), (64, 75, 105),
+ (22, 57, 121), (23, 97, 96), (48, 66, 66), (29, 36, 46),
+ (15, 39, 85), (23, 28, 94), (60, 0, 81), (112, 24, 108),
+ (146, 34, 170), (173, 38, 254), (210, 2, 244), (227, 32, 250),
+ (242, 2, 211), (219, 13, 95), (203, 36, 79), (132, 23, 64),
+ (87, 20, 71), (76, 7, 62), (63, 4, 68), (51, 2, 67),
+ (42, 0, 46), (31, 4, 37), (15, 20, 24), (4, 21, 31),
+ (11, 16, 54), (27, 3, 87), (29, 20, 83), (47, 20, 87),
+ (84, 28, 91), (98, 34, 131), (129, 51, 197), (148, 59, 185),
+ (152, 68, 179), (164, 39, 193), (148, 21, 226), (203, 72, 238),
+ (162, 157, 224), (88, 198, 171), (90, 190, 164), (72, 226, 116),
+ (118, 157, 32), (130, 122, 21), (97, 105, 6), (59, 61, 0),
+ (56, 44, 28), (99, 20, 49), (178, 40, 76), (201, 76, 80)
+ ),
+
+// 330 3m0013.jpg
+((10, 81, 49), (57, 81, 93), (41, 119, 130), (25, 158, 167),
+ (21, 189, 175), (17, 221, 184), (42, 214, 175), (68, 207, 166),
+ (91, 142, 161), (92, 136, 158), (93, 130, 156), (93, 122, 135),
+ (94, 114, 115), (90, 105, 101), (86, 96, 88), (82, 74, 73),
+ (78, 53, 59), (177, 61, 12), (158, 48, 13), (140, 35, 14),
+ (108, 26, 8), (76, 17, 3), (60, 15, 6), (45, 14, 9),
+ (5, 28, 36), (10, 59, 50), (16, 90, 65), (13, 111, 93),
+ (10, 132, 121), (24, 130, 127), (39, 128, 134), (33, 126, 118),
+ (16, 104, 82), (0, 69, 71), (16, 57, 86), (33, 46, 101),
+ (40, 60, 116), (48, 74, 131), (36, 85, 102), (24, 96, 74),
+ (7, 105, 66), (11, 100, 53), (15, 96, 40), (11, 61, 21),
+ (8, 26, 2), (4, 21, 1), (0, 16, 0), (14, 12, 0),
+ (25, 29, 14), (44, 79, 13), (48, 131, 19), (53, 184, 26),
+ (40, 149, 30), (27, 114, 35), (24, 87, 37), (21, 60, 39),
+ (21, 49, 34), (30, 48, 42), (40, 48, 51), (55, 59, 68),
+ (71, 70, 86), (79, 78, 93), (88, 86, 100), (79, 68, 74),
+ (71, 69, 30), (70, 31, 16), (95, 43, 15), (120, 55, 15),
+ (129, 69, 10), (139, 83, 6), (144, 104, 16), (186, 85, 31),
+ (143, 29, 19), (88, 25, 21), (34, 22, 24), (22, 15, 14),
+ (10, 9, 4), (11, 8, 2), (13, 7, 0), (16, 11, 0),
+ (21, 6, 1), (24, 15, 20), (28, 22, 21), (33, 30, 23),
+ (40, 44, 23), (47, 58, 24), (65, 75, 22), (109, 89, 38),
+ (130, 124, 10), (108, 133, 8), (86, 142, 7), (76, 143, 5),
+ (67, 144, 4), (72, 87, 2), (37, 64, 11), (39, 35, 0),
+ (49, 15, 5), (27, 13, 4), (23, 23, 2), (20, 34, 0),
+ (17, 33, 0), (15, 32, 0), (11, 54, 0), (16, 54, 5),
+ (38, 50, 10), (83, 70, 17), (129, 90, 25), (152, 117, 29),
+ (176, 144, 33), (190, 208, 10), (172, 205, 14), (126, 227, 35),
+ (77, 168, 28), (68, 109, 43), (50, 98, 25), (33, 88, 7),
+ (21, 127, 5), (19, 163, 3), (20, 155, 3), (11, 114, 7),
+ (16, 65, 10), (24, 59, 10), (33, 54, 11), (43, 50, 12),
+ (53, 47, 13), (88, 72, 12), (109, 122, 52), (126, 141, 36),
+ (121, 130, 47), (111, 85, 98), (98, 67, 108), (86, 49, 118),
+ (93, 59, 145), (79, 52, 145), (42, 50, 99), (19, 49, 75),
+ (14, 51, 44), (21, 59, 37), (29, 67, 30), (33, 62, 30),
+ (37, 57, 30), (32, 56, 40), (26, 58, 43), (3, 63, 53),
+ (18, 84, 57), (61, 123, 48), (94, 174, 43), (127, 226, 39),
+ (176, 200, 24), (197, 204, 13), (202, 167, 13), (189, 144, 29),
+ (195, 78, 35), (184, 51, 44), (173, 24, 53), (163, 9, 61),
+ (158, 27, 41), (129, 21, 37), (77, 49, 9), (58, 23, 29),
+ (63, 10, 54), (55, 27, 75), (53, 26, 67), (51, 25, 60),
+ (50, 11, 30), (69, 14, 11), (76, 6, 8), (77, 15, 0),
+ (79, 44, 14), (71, 60, 19), (63, 77, 24), (38, 78, 25),
+ (17, 102, 63), (14, 129, 62), (9, 189, 22), (44, 204, 36),
+ (46, 163, 30), (11, 122, 54), (24, 86, 47), (43, 58, 63),
+ (43, 45, 57), (51, 28, 74), (50, 35, 92), (69, 31, 82),
+ (59, 8, 67), (49, 5, 52), (40, 3, 37), (53, 8, 28),
+ (49, 14, 20), (56, 29, 36), (38, 25, 42), (38, 10, 58),
+ (32, 16, 79), (22, 44, 65), (26, 46, 47), (4, 22, 26),
+ (10, 20, 29), (33, 17, 28), (38, 7, 15), (50, 1, 7),
+ (53, 2, 0), (68, 15, 7), (62, 12, 13), (50, 16, 14),
+ (35, 41, 39), (43, 47, 30), (49, 47, 22), (44, 53, 24),
+ (35, 52, 42), (81, 43, 84), (111, 5, 80), (144, 17, 36),
+ (172, 77, 33), (181, 123, 0), (136, 195, 17), (124, 188, 32),
+ (103, 110, 103), (100, 92, 152), (85, 93, 165), (80, 123, 166),
+ (59, 118, 196), (47, 98, 151), (41, 125, 127), (29, 127, 86),
+ (19, 119, 57), (21, 125, 76), (39, 117, 101), (53, 123, 113),
+ (36, 145, 104), (42, 133, 89), (17, 108, 67), (15, 90, 67),
+ (13, 75, 70), (29, 60, 81), (37, 58, 75), (36, 64, 76),
+ (22, 85, 68), (9, 104, 72), (9, 99, 87), (0, 108, 108),
+ (5, 123, 101), (0, 165, 143), (1, 172, 156), (5, 181, 161),
+ (18, 197, 168), (29, 143, 179), (66, 179, 195), (60, 199, 160),
+ (56, 191, 151), (41, 171, 127), (85, 119, 103), (148, 121, 44),
+ (158, 117, 12), (144, 139, 45), (46, 121, 18), (108, 150, 22)
+ ),
+
+// 331 3m0014.jpg
+((181, 71, 12), (111, 62, 58), (113, 78, 41), (115, 95, 24),
+ (157, 88, 22), (200, 82, 20), (209, 74, 22), (218, 67, 24),
+ (208, 66, 44), (162, 57, 53), (117, 49, 62), (80, 28, 55),
+ (44, 7, 48), (31, 6, 43), (19, 5, 38), (14, 7, 22),
+ (9, 9, 7), (22, 6, 7), (35, 7, 10), (48, 9, 14),
+ (26, 14, 17), (4, 20, 20), (5, 22, 23), (7, 25, 27),
+ (32, 19, 26), (33, 26, 50), (34, 33, 75), (37, 60, 94),
+ (41, 88, 114), (38, 93, 114), (35, 98, 115), (22, 99, 117),
+ (20, 116, 128), (38, 123, 130), (45, 116, 112), (52, 110, 95),
+ (39, 101, 100), (27, 93, 105), (16, 77, 97), (5, 62, 89),
+ (23, 95, 109), (33, 127, 104), (44, 159, 100), (57, 186, 104),
+ (70, 213, 108), (71, 205, 102), (72, 197, 97), (111, 177, 87),
+ (136, 154, 78), (127, 101, 52), (109, 85, 60), (91, 70, 69),
+ (88, 58, 63), (85, 47, 58), (89, 49, 59), (94, 51, 61),
+ (192, 70, 47), (187, 78, 58), (182, 87, 69), (141, 76, 70),
+ (100, 65, 72), (90, 54, 66), (81, 44, 61), (71, 26, 47),
+ (89, 18, 24), (91, 13, 11), (79, 22, 16), (68, 31, 22),
+ (58, 33, 20), (49, 36, 19), (55, 57, 43), (47, 36, 40),
+ (21, 38, 19), (22, 51, 21), (24, 65, 23), (48, 49, 35),
+ (72, 34, 47), (84, 38, 39), (96, 42, 32), (148, 10, 25),
+ (153, 3, 15), (95, 23, 24), (91, 40, 35), (87, 57, 46),
+ (102, 57, 52), (118, 58, 58), (139, 60, 55), (151, 44, 28),
+ (184, 24, 26), (173, 35, 27), (163, 46, 28), (156, 79, 35),
+ (150, 113, 42), (137, 133, 42), (84, 138, 42), (40, 112, 46),
+ (2, 93, 13), (128, 62, 2), (163, 34, 3), (199, 7, 4),
+ (200, 3, 2), (202, 0, 0), (164, 20, 9), (109, 20, 4),
+ (30, 7, 1), (42, 6, 11), (54, 6, 22), (61, 5, 20),
+ (68, 4, 18), (59, 13, 16), (54, 11, 20), (64, 24, 24),
+ (53, 27, 26), (33, 29, 4), (20, 27, 5), (7, 26, 7),
+ (22, 40, 14), (13, 43, 19), (4, 59, 1), (1, 83, 11),
+ (35, 52, 68), (39, 65, 62), (43, 78, 56), (48, 68, 61),
+ (54, 58, 67), (54, 50, 73), (40, 39, 70), (28, 37, 46),
+ (47, 15, 38), (76, 20, 29), (85, 13, 41), (94, 6, 54),
+ (120, 16, 27), (130, 6, 8), (172, 5, 13), (172, 20, 9),
+ (183, 24, 5), (167, 31, 17), (151, 38, 30), (145, 34, 27),
+ (139, 30, 25), (86, 63, 31), (58, 89, 48), (55, 96, 56),
+ (50, 85, 65), (84, 137, 59), (82, 143, 57), (80, 149, 56),
+ (103, 133, 43), (111, 95, 69), (89, 99, 26), (84, 94, 21),
+ (68, 53, 30), (74, 59, 29), (81, 65, 29), (91, 65, 50),
+ (127, 91, 41), (160, 91, 24), (185, 79, 17), (191, 75, 18),
+ (180, 52, 3), (187, 55, 34), (195, 58, 37), (204, 62, 40),
+ (194, 25, 18), (203, 15, 6), (212, 53, 14), (210, 83, 38),
+ (236, 145, 62), (202, 147, 76), (168, 149, 90), (130, 159, 131),
+ (106, 138, 89), (98, 108, 109), (97, 96, 94), (124, 102, 78),
+ (146, 133, 78), (145, 153, 80), (150, 161, 83), (122, 185, 71),
+ (100, 200, 86), (50, 165, 87), (19, 185, 85), (15, 155, 68),
+ (43, 138, 44), (39, 138, 62), (35, 139, 80), (76, 170, 84),
+ (114, 176, 75), (145, 183, 74), (180, 186, 114), (179, 202, 150),
+ (141, 201, 173), (150, 230, 131), (137, 179, 93), (126, 157, 64),
+ (122, 135, 47), (80, 101, 84), (74, 101, 86), (57, 63, 99),
+ (64, 50, 75), (60, 39, 58), (91, 25, 61), (98, 12, 57),
+ (105, 35, 59), (123, 48, 27), (127, 60, 43), (85, 68, 74),
+ (76, 80, 91), (69, 94, 91), (94, 73, 54), (133, 94, 37),
+ (172, 76, 16), (209, 83, 25), (205, 114, 44), (229, 148, 59),
+ (190, 148, 76), (188, 149, 94), (194, 162, 85), (205, 178, 99),
+ (214, 179, 97), (214, 193, 84), (219, 214, 94), (240, 218, 107),
+ (216, 208, 99), (197, 184, 105), (183, 186, 97), (173, 196, 80),
+ (167, 189, 78), (154, 154, 66), (122, 144, 46), (85, 150, 60),
+ (62, 176, 89), (42, 173, 107), (13, 133, 106), (7, 135, 48),
+ (10, 109, 18), (46, 111, 17), (123, 134, 30), (160, 152, 67),
+ (175, 175, 89), (204, 229, 99), (202, 233, 95), (165, 213, 103),
+ (155, 205, 74), (147, 164, 62), (109, 141, 68), (54, 131, 95),
+ (61, 143, 105), (79, 134, 129), (57, 176, 118), (89, 166, 130),
+ (147, 197, 124), (191, 190, 110), (188, 173, 166), (184, 169, 126)
+ ),
+
+// 332 3m0015.jpg
+((95, 98, 19), (96, 92, 63), (100, 100, 73), (105, 109, 84),
+ (86, 130, 86), (67, 151, 89), (73, 131, 95), (79, 112, 101),
+ (85, 68, 60), (108, 69, 56), (132, 71, 53), (166, 103, 68),
+ (201, 135, 83), (201, 124, 87), (202, 114, 92), (195, 122, 109),
+ (189, 130, 126), (192, 91, 81), (161, 87, 70), (130, 84, 60),
+ (116, 82, 52), (103, 81, 44), (98, 92, 42), (94, 104, 41),
+ (98, 135, 83), (104, 144, 94), (110, 154, 105), (101, 129, 104),
+ (93, 105, 103), (96, 101, 100), (99, 97, 98), (113, 113, 77),
+ (111, 88, 46), (134, 88, 28), (136, 94, 50), (138, 101, 72),
+ (127, 125, 92), (116, 150, 113), (129, 153, 113), (142, 157, 114),
+ (203, 177, 120), (168, 139, 135), (133, 101, 150), (121, 82, 108),
+ (109, 63, 66), (106, 57, 55), (104, 51, 45), (115, 36, 41),
+ (114, 25, 47), (52, 14, 5), (47, 15, 15), (43, 16, 25),
+ (43, 12, 33), (43, 8, 41), (60, 12, 35), (77, 17, 29),
+ (117, 14, 57), (116, 24, 57), (116, 34, 57), (99, 63, 62),
+ (82, 92, 68), (75, 92, 81), (68, 92, 94), (63, 105, 85),
+ (43, 86, 69), (23, 79, 32), (26, 58, 28), (30, 38, 25),
+ (30, 29, 28), (30, 20, 31), (32, 5, 48), (26, 9, 53),
+ (18, 8, 32), (43, 26, 37), (68, 44, 42), (54, 49, 52),
+ (41, 54, 63), (35, 51, 58), (30, 49, 53), (15, 37, 51),
+ (18, 34, 49), (29, 38, 37), (32, 50, 51), (35, 63, 66),
+ (32, 67, 77), (30, 72, 88), (50, 84, 112), (38, 111, 102),
+ (69, 118, 114), (65, 104, 102), (61, 91, 91), (67, 82, 80),
+ (73, 74, 69), (73, 68, 62), (97, 72, 52), (93, 35, 47),
+ (99, 14, 55), (104, 39, 71), (111, 30, 68), (119, 22, 65),
+ (114, 20, 72), (109, 18, 79), (93, 16, 60), (72, 27, 56),
+ (107, 51, 138), (106, 31, 122), (105, 11, 107), (117, 15, 84),
+ (129, 20, 61), (130, 13, 29), (116, 23, 18), (128, 33, 1),
+ (108, 45, 30), (78, 12, 22), (69, 13, 25), (61, 15, 28),
+ (43, 30, 22), (26, 34, 10), (19, 45, 6), (0, 71, 14),
+ (14, 150, 128), (38, 145, 141), (63, 141, 154), (49, 153, 131),
+ (36, 165, 109), (5, 155, 68), (22, 124, 51), (52, 104, 38),
+ (76, 76, 50), (153, 95, 143), (162, 103, 154), (171, 111, 165),
+ (187, 147, 174), (203, 94, 185), (192, 44, 140), (144, 37, 109),
+ (198, 20, 78), (171, 17, 48), (145, 14, 19), (142, 25, 28),
+ (139, 36, 37), (144, 41, 24), (151, 53, 14), (115, 68, 24),
+ (83, 78, 22), (46, 115, 22), (31, 121, 30), (17, 127, 38),
+ (33, 139, 65), (44, 128, 94), (73, 156, 128), (19, 221, 173),
+ (117, 198, 215), (132, 187, 215), (148, 176, 215), (207, 159, 209),
+ (223, 147, 212), (252, 205, 175), (242, 173, 144), (201, 195, 135),
+ (191, 196, 138), (202, 156, 158), (194, 161, 146), (187, 167, 134),
+ (158, 115, 99), (136, 91, 86), (117, 80, 74), (91, 54, 48),
+ (38, 52, 17), (48, 59, 17), (58, 66, 17), (49, 79, 15),
+ (43, 83, 31), (50, 69, 63), (44, 82, 67), (63, 86, 76),
+ (49, 108, 50), (39, 99, 61), (11, 86, 82), (6, 83, 63),
+ (25, 112, 61), (28, 136, 51), (10, 172, 61), (15, 186, 46),
+ (65, 178, 88), (75, 171, 82), (85, 165, 76), (105, 147, 109),
+ (98, 128, 128), (86, 156, 166), (173, 141, 144), (189, 101, 89),
+ (208, 90, 62), (187, 39, 73), (135, 63, 51), (119, 52, 61),
+ (85, 58, 73), (65, 61, 75), (34, 69, 73), (47, 54, 72),
+ (85, 39, 86), (139, 66, 85), (152, 96, 79), (188, 108, 81),
+ (207, 99, 60), (180, 57, 23), (152, 36, 21), (137, 43, 5),
+ (96, 46, 9), (87, 58, 14), (80, 37, 47), (81, 31, 66),
+ (48, 18, 68), (38, 16, 65), (32, 12, 40), (23, 34, 18),
+ (33, 38, 8), (3, 48, 17), (4, 43, 24), (0, 38, 15),
+ (23, 24, 18), (1, 7, 5), (12, 12, 24), (7, 20, 29),
+ (1, 16, 35), (0, 24, 36), (7, 18, 50), (3, 19, 68),
+ (23, 42, 59), (47, 57, 66), (68, 52, 62), (83, 45, 58),
+ (85, 40, 37), (76, 26, 25), (42, 12, 14), (20, 17, 10),
+ (23, 32, 29), (23, 50, 57), (18, 70, 84), (24, 97, 90),
+ (20, 116, 102), (49, 102, 82), (51, 125, 74), (55, 109, 75),
+ (58, 100, 88), (56, 67, 73), (57, 55, 66), (78, 38, 38),
+ (69, 17, 19), (71, 13, 11), (70, 32, 11), (77, 29, 19),
+ (94, 50, 15), (129, 57, 17), (148, 71, 63), (152, 61, 42)
+ ),
+
+// 333 3m0016.jpg
+((148, 85, 42), (51, 97, 50), (40, 66, 45), (30, 35, 41),
+ (17, 31, 29), (5, 28, 18), (6, 38, 10), (7, 49, 3),
+ (43, 97, 19), (40, 112, 20), (38, 127, 21), (36, 137, 15),
+ (34, 148, 9), (70, 145, 8), (106, 142, 8), (128, 136, 20),
+ (151, 131, 32), (183, 133, 44), (189, 153, 35), (195, 173, 27),
+ (198, 168, 36), (202, 163, 46), (200, 167, 71), (198, 172, 97),
+ (189, 155, 83), (201, 123, 50), (213, 91, 18), (176, 59, 21),
+ (139, 27, 25), (134, 20, 16), (129, 14, 7), (129, 17, 33),
+ (148, 29, 87), (195, 51, 74), (194, 66, 75), (194, 81, 77),
+ (202, 68, 72), (211, 55, 68), (211, 53, 52), (211, 51, 37),
+ (216, 87, 66), (228, 73, 51), (240, 60, 37), (227, 36, 22),
+ (215, 12, 8), (203, 20, 26), (191, 29, 44), (126, 29, 20),
+ (84, 37, 7), (53, 1, 5), (43, 14, 19), (34, 27, 34),
+ (17, 41, 51), (0, 55, 69), (1, 73, 87), (2, 91, 105),
+ (9, 95, 156), (6, 65, 179), (3, 36, 203), (70, 31, 193),
+ (137, 27, 184), (143, 26, 184), (150, 26, 184), (179, 33, 160),
+ (192, 35, 164), (206, 13, 154), (199, 24, 155), (193, 35, 156),
+ (193, 34, 154), (193, 34, 153), (193, 44, 134), (141, 57, 109),
+ (73, 28, 61), (66, 35, 57), (60, 43, 53), (64, 63, 76),
+ (68, 84, 99), (81, 89, 108), (94, 94, 118), (82, 129, 147),
+ (72, 167, 133), (55, 156, 152), (59, 134, 170), (63, 112, 189),
+ (57, 88, 187), (52, 64, 186), (42, 42, 138), (59, 50, 103),
+ (69, 43, 42), (69, 37, 30), (70, 32, 19), (83, 34, 20),
+ (96, 37, 21), (130, 57, 16), (149, 75, 64), (171, 74, 81),
+ (168, 60, 109), (118, 28, 89), (102, 25, 80), (86, 22, 72),
+ (71, 20, 71), (57, 18, 71), (36, 57, 78), (20, 85, 51),
+ (3, 97, 61), (27, 101, 76), (52, 106, 92), (61, 109, 114),
+ (70, 112, 137), (89, 104, 173), (72, 90, 166), (84, 36, 122),
+ (70, 21, 66), (117, 10, 80), (134, 13, 95), (151, 16, 111),
+ (191, 25, 151), (185, 31, 165), (160, 51, 176), (102, 46, 155),
+ (63, 33, 155), (39, 23, 150), (16, 13, 146), (29, 20, 127),
+ (43, 28, 109), (42, 23, 87), (60, 28, 67), (17, 57, 59),
+ (21, 85, 50), (41, 84, 75), (58, 89, 68), (75, 94, 62),
+ (109, 119, 23), (135, 116, 58), (171, 127, 102), (174, 116, 140),
+ (197, 75, 98), (203, 94, 75), (209, 113, 52), (197, 119, 47),
+ (186, 125, 42), (146, 121, 28), (123, 99, 35), (128, 85, 16),
+ (112, 63, 49), (125, 22, 105), (114, 17, 103), (103, 13, 101),
+ (73, 0, 141), (13, 18, 196), (19, 64, 207), (43, 118, 173),
+ (27, 73, 123), (33, 68, 118), (40, 63, 113), (45, 122, 148),
+ (58, 138, 149), (15, 133, 163), (36, 154, 132), (35, 149, 123),
+ (22, 151, 51), (16, 125, 44), (25, 114, 29), (34, 104, 15),
+ (40, 81, 37), (43, 83, 74), (56, 82, 105), (79, 94, 149),
+ (59, 87, 111), (56, 84, 94), (53, 82, 77), (42, 44, 43),
+ (48, 55, 22), (38, 65, 22), (34, 49, 20), (12, 36, 0),
+ (18, 17, 15), (21, 7, 22), (32, 23, 52), (43, 22, 81),
+ (56, 11, 130), (85, 41, 138), (144, 73, 129), (181, 61, 135),
+ (196, 84, 120), (212, 87, 98), (228, 90, 77), (217, 72, 77),
+ (213, 47, 97), (235, 43, 102), (202, 47, 139), (190, 45, 138),
+ (127, 46, 148), (85, 41, 154), (47, 34, 122), (15, 21, 109),
+ (0, 50, 76), (6, 61, 102), (16, 93, 121), (13, 132, 162),
+ (13, 146, 165), (11, 145, 174), (18, 133, 164), (59, 121, 132),
+ (108, 86, 109), (91, 94, 83), (115, 119, 68), (75, 144, 89),
+ (55, 128, 85), (32, 135, 92), (62, 135, 90), (132, 145, 76),
+ (171, 162, 85), (155, 145, 84), (112, 142, 118), (56, 137, 94),
+ (65, 107, 93), (53, 99, 63), (88, 62, 99), (123, 65, 115),
+ (166, 67, 111), (179, 80, 83), (187, 79, 95), (181, 79, 103),
+ (123, 87, 99), (113, 82, 97), (83, 62, 105), (19, 41, 98),
+ (12, 54, 76), (37, 39, 54), (55, 22, 43), (64, 3, 45),
+ (51, 17, 33), (44, 21, 7), (53, 25, 1), (55, 33, 9),
+ (54, 43, 11), (63, 62, 41), (84, 87, 78), (113, 106, 78),
+ (187, 98, 94), (196, 80, 117), (220, 88, 148), (206, 108, 169),
+ (212, 110, 123), (203, 118, 81), (196, 140, 43), (196, 131, 15),
+ (177, 129, 3), (174, 126, 2), (139, 123, 2), (101, 142, 22),
+ (75, 147, 21), (102, 110, 50), (149, 52, 168), (119, 79, 103)
+ ),
+
+// 334 3m0018.jpg
+((21, 63, 181), (3, 76, 217), (3, 93, 208), (3, 111, 199),
+ (28, 128, 151), (54, 145, 104), (53, 154, 96), (52, 164, 88),
+ (62, 111, 105), (52, 85, 92), (42, 60, 80), (25, 50, 70),
+ (9, 40, 60), (10, 57, 73), (11, 75, 87), (22, 73, 81),
+ (34, 72, 75), (28, 78, 49), (23, 97, 33), (18, 116, 17),
+ (19, 119, 19), (20, 122, 22), (31, 123, 22), (43, 124, 22),
+ (142, 125, 21), (187, 156, 23), (233, 188, 25), (210, 159, 36),
+ (187, 131, 48), (180, 125, 47), (174, 120, 46), (199, 95, 94),
+ (147, 86, 85), (172, 141, 156), (202, 157, 128), (232, 174, 100),
+ (229, 160, 101), (227, 146, 103), (223, 126, 143), (219, 107, 183),
+ (160, 74, 123), (132, 45, 102), (105, 16, 82), (100, 26, 72),
+ (95, 37, 62), (108, 39, 54), (122, 41, 47), (160, 38, 51),
+ (145, 30, 73), (38, 8, 62), (27, 17, 91), (16, 26, 121),
+ (35, 53, 111), (54, 81, 102), (51, 90, 113), (48, 100, 124),
+ (19, 149, 162), (63, 149, 139), (108, 149, 117), (110, 159, 112),
+ (113, 169, 108), (112, 176, 101), (111, 184, 95), (117, 199, 91),
+ (127, 201, 86), (236, 189, 49), (212, 140, 32), (189, 91, 16),
+ (161, 70, 27), (134, 50, 39), (84, 36, 13), (58, 14, 13),
+ (60, 14, 17), (95, 26, 30), (130, 38, 43), (140, 31, 30),
+ (151, 24, 17), (141, 41, 33), (132, 58, 49), (127, 78, 35),
+ (106, 79, 49), (48, 88, 15), (50, 62, 35), (52, 37, 56),
+ (52, 61, 65), (53, 85, 74), (99, 117, 95), (105, 138, 109),
+ (150, 192, 90), (177, 193, 116), (204, 194, 143), (192, 186, 131),
+ (180, 178, 119), (161, 184, 114), (133, 182, 117), (103, 165, 118),
+ (77, 189, 117), (62, 171, 78), (58, 145, 67), (54, 120, 56),
+ (47, 117, 47), (40, 114, 39), (43, 119, 80), (63, 133, 97),
+ (71, 134, 55), (80, 149, 59), (90, 165, 64), (91, 176, 66),
+ (92, 187, 69), (87, 192, 74), (83, 165, 93), (125, 146, 69),
+ (115, 96, 54), (97, 67, 29), (94, 62, 40), (91, 58, 51),
+ (66, 78, 40), (48, 76, 28), (34, 84, 25), (34, 105, 45),
+ (95, 79, 82), (113, 85, 116), (131, 91, 151), (127, 104, 159),
+ (124, 117, 168), (120, 180, 154), (120, 182, 119), (125, 177, 128),
+ (113, 159, 157), (97, 88, 91), (104, 67, 108), (111, 47, 125),
+ (81, 62, 144), (47, 44, 113), (42, 72, 110), (40, 75, 129),
+ (83, 71, 95), (100, 89, 76), (117, 107, 58), (109, 111, 46),
+ (101, 116, 35), (146, 106, 11), (196, 120, 22), (195, 119, 35),
+ (138, 82, 33), (102, 31, 89), (97, 25, 89), (92, 19, 90),
+ (57, 10, 88), (24, 17, 120), (8, 21, 162), (14, 24, 156),
+ (17, 97, 106), (16, 110, 99), (16, 124, 92), (31, 116, 77),
+ (46, 95, 50), (82, 72, 37), (106, 53, 39), (155, 49, 1),
+ (221, 64, 11), (234, 178, 21), (233, 183, 40), (233, 188, 59),
+ (196, 191, 110), (162, 194, 93), (149, 181, 108), (123, 183, 158),
+ (74, 127, 177), (75, 100, 154), (77, 73, 132), (96, 31, 85),
+ (69, 31, 52), (32, 41, 38), (0, 37, 10), (0, 41, 5),
+ (0, 78, 2), (4, 67, 24), (25, 70, 15), (23, 95, 29),
+ (36, 104, 17), (37, 99, 13), (43, 78, 24), (70, 52, 16),
+ (186, 29, 14), (195, 29, 25), (204, 29, 36), (224, 105, 23),
+ (230, 153, 47), (235, 185, 70), (228, 166, 93), (165, 143, 119),
+ (111, 99, 121), (61, 90, 130), (54, 60, 146), (27, 25, 188),
+ (11, 16, 206), (4, 37, 228), (0, 23, 199), (20, 16, 152),
+ (87, 29, 141), (107, 31, 131), (102, 4, 141), (127, 4, 146),
+ (164, 40, 94), (168, 40, 39), (187, 19, 16), (199, 51, 37),
+ (151, 69, 57), (127, 138, 78), (114, 129, 96), (71, 138, 107),
+ (35, 118, 90), (3, 84, 87), (0, 73, 89), (2, 58, 95),
+ (24, 74, 85), (33, 107, 74), (17, 134, 53), (22, 144, 45),
+ (26, 127, 47), (25, 81, 36), (37, 55, 41), (37, 48, 54),
+ (40, 42, 54), (16, 38, 51), (23, 28, 47), (16, 10, 46),
+ (8, 21, 29), (4, 28, 12), (26, 18, 29), (24, 5, 11),
+ (46, 3, 20), (52, 11, 7), (53, 43, 8), (67, 26, 30),
+ (132, 31, 37), (150, 15, 9), (180, 12, 1), (208, 11, 3),
+ (208, 5, 27), (147, 20, 37), (73, 26, 42), (38, 23, 46),
+ (43, 11, 76), (87, 10, 90), (105, 34, 128), (157, 49, 151),
+ (132, 53, 230), (127, 90, 195), (131, 106, 187), (113, 137, 137),
+ (171, 174, 105), (180, 147, 54), (234, 160, 13), (232, 138, 24)
+ ),
+
+// 335 4u0002.jpg
+((113, 196, 42), (78, 160, 16), (96, 132, 13), (115, 105, 10),
+ (100, 84, 5), (86, 63, 0), (84, 60, 3), (83, 57, 6),
+ (91, 89, 14), (119, 123, 10), (148, 157, 6), (142, 133, 9),
+ (137, 109, 12), (123, 104, 7), (110, 100, 3), (89, 92, 7),
+ (68, 84, 11), (32, 92, 32), (36, 103, 54), (40, 115, 76),
+ (38, 121, 76), (36, 128, 77), (40, 124, 74), (44, 120, 71),
+ (59, 76, 42), (63, 59, 25), (67, 43, 9), (71, 41, 29),
+ (76, 40, 50), (74, 40, 53), (73, 41, 56), (65, 35, 71),
+ (72, 46, 73), (80, 40, 92), (97, 33, 83), (115, 26, 74),
+ (109, 22, 58), (103, 19, 42), (100, 21, 40), (97, 23, 38),
+ (55, 19, 21), (47, 25, 43), (39, 32, 66), (33, 56, 60),
+ (28, 81, 55), (33, 96, 61), (38, 111, 68), (56, 96, 72),
+ (69, 85, 75), (159, 40, 96), (190, 35, 102), (221, 30, 108),
+ (189, 51, 76), (158, 73, 44), (134, 78, 36), (110, 83, 28),
+ (67, 140, 23), (48, 146, 41), (29, 153, 59), (30, 148, 72),
+ (31, 143, 85), (35, 134, 84), (39, 126, 84), (54, 109, 70),
+ (72, 110, 63), (90, 95, 73), (73, 97, 66), (57, 99, 59),
+ (60, 79, 60), (64, 60, 61), (50, 68, 56), (39, 85, 49),
+ (30, 117, 36), (42, 128, 25), (55, 139, 15), (49, 123, 9),
+ (44, 107, 3), (45, 93, 1), (47, 80, 0), (62, 76, 15),
+ (80, 60, 33), (76, 84, 7), (69, 111, 7), (63, 139, 7),
+ (58, 145, 14), (54, 151, 22), (59, 158, 29), (57, 148, 43),
+ (40, 105, 51), (42, 81, 40), (45, 58, 30), (55, 49, 25),
+ (65, 40, 20), (91, 32, 26), (99, 50, 20), (97, 48, 31),
+ (110, 43, 52), (141, 53, 52), (135, 65, 59), (130, 78, 67),
+ (123, 71, 53), (116, 64, 40), (125, 96, 20), (118, 105, 3),
+ (157, 136, 29), (167, 152, 20), (178, 169, 12), (176, 168, 8),
+ (175, 167, 4), (189, 182, 16), (199, 151, 75), (187, 132, 50),
+ (176, 96, 71), (176, 52, 60), (178, 55, 58), (181, 59, 56),
+ (174, 103, 51), (125, 124, 18), (89, 155, 32), (115, 194, 79),
+ (112, 208, 83), (77, 180, 70), (42, 152, 57), (28, 143, 65),
+ (15, 135, 73), (1, 144, 90), (12, 153, 75), (5, 150, 45),
+ (48, 164, 39), (91, 221, 99), (102, 205, 98), (114, 189, 98),
+ (85, 186, 90), (50, 112, 91), (35, 94, 72), (32, 62, 38),
+ (55, 34, 7), (67, 18, 14), (79, 2, 22), (82, 7, 18),
+ (85, 13, 14), (98, 13, 16), (88, 23, 27), (79, 43, 21),
+ (66, 63, 8), (36, 30, 6), (35, 44, 8), (34, 58, 10),
+ (15, 66, 23), (1, 76, 9), (14, 65, 6), (12, 48, 12),
+ (9, 10, 15), (18, 9, 11), (27, 9, 7), (29, 17, 0),
+ (26, 16, 17), (19, 10, 37), (33, 24, 27), (35, 46, 38),
+ (42, 37, 44), (118, 85, 76), (144, 94, 67), (171, 104, 59),
+ (153, 190, 24), (161, 218, 25), (129, 217, 43), (115, 213, 52),
+ (53, 115, 90), (52, 99, 85), (52, 84, 81), (26, 45, 60),
+ (3, 3, 57), (22, 17, 40), (8, 51, 41), (13, 88, 21),
+ (28, 79, 12), (29, 74, 15), (61, 65, 15), (85, 58, 13),
+ (121, 55, 29), (141, 31, 40), (150, 36, 44), (145, 45, 43),
+ (76, 150, 27), (62, 153, 29), (48, 157, 32), (19, 139, 42),
+ (28, 129, 49), (25, 121, 49), (19, 119, 47), (10, 129, 49),
+ (18, 133, 66), (4, 131, 86), (29, 129, 77), (22, 127, 70),
+ (23, 115, 50), (10, 120, 49), (5, 114, 47), (22, 97, 38),
+ (22, 68, 29), (41, 41, 33), (53, 19, 18), (45, 19, 20),
+ (33, 19, 19), (38, 28, 3), (57, 21, 5), (65, 8, 0),
+ (90, 16, 13), (107, 47, 0), (89, 60, 4), (84, 85, 27),
+ (99, 83, 58), (104, 101, 60), (80, 126, 53), (83, 108, 27),
+ (124, 110, 11), (168, 112, 38), (179, 102, 56), (144, 96, 56),
+ (110, 83, 40), (99, 81, 7), (106, 63, 12), (103, 53, 0),
+ (112, 49, 14), (117, 32, 29), (114, 18, 45), (135, 14, 47),
+ (164, 22, 78), (170, 13, 94), (187, 9, 93), (168, 10, 87),
+ (153, 30, 76), (131, 36, 58), (115, 33, 56), (116, 19, 60),
+ (132, 16, 51), (150, 43, 73), (146, 31, 96), (115, 31, 83),
+ (115, 48, 91), (134, 45, 101), (180, 27, 110), (202, 20, 97),
+ (195, 18, 88), (185, 24, 78), (184, 29, 69), (152, 16, 54),
+ (137, 14, 42), (136, 44, 65), (109, 74, 81), (96, 104, 63),
+ (74, 141, 38), (51, 152, 48), (10, 152, 78), (25, 148, 68)
+ ),
+
+// 336 4u0003.jpg
+((67, 30, 73), (148, 55, 108), (148, 80, 73), (149, 106, 38),
+ (120, 79, 23), (91, 53, 8), (65, 61, 5), (40, 69, 3),
+ (54, 84, 30), (69, 95, 62), (85, 107, 94), (124, 98, 119),
+ (163, 90, 145), (140, 120, 170), (117, 151, 196), (121, 154, 202),
+ (125, 158, 209), (107, 188, 217), (93, 169, 177), (80, 151, 137),
+ (73, 151, 108), (66, 152, 79), (63, 141, 77), (60, 131, 75),
+ (9, 116, 22), (5, 99, 13), (1, 82, 5), (20, 59, 18),
+ (39, 36, 31), (55, 31, 41), (71, 27, 52), (84, 58, 87),
+ (76, 72, 89), (61, 89, 75), (51, 76, 49), (42, 63, 24),
+ (36, 63, 22), (30, 63, 20), (31, 66, 23), (32, 69, 26),
+ (5, 45, 45), (3, 26, 34), (1, 7, 23), (20, 17, 22),
+ (40, 27, 21), (40, 28, 19), (41, 29, 17), (69, 11, 25),
+ (112, 23, 43), (140, 51, 97), (134, 43, 110), (128, 35, 124),
+ (119, 38, 92), (110, 41, 60), (110, 32, 49), (110, 23, 39),
+ (67, 21, 5), (64, 30, 10), (62, 40, 16), (87, 35, 32),
+ (113, 30, 48), (113, 41, 59), (114, 53, 71), (109, 84, 64),
+ (169, 95, 82), (181, 219, 82), (137, 201, 96), (94, 184, 110),
+ (85, 174, 110), (77, 164, 111), (119, 108, 116), (123, 96, 139),
+ (142, 116, 189), (152, 109, 181), (163, 103, 173), (166, 96, 189),
+ (169, 90, 205), (177, 72, 201), (186, 55, 197), (163, 60, 165),
+ (146, 47, 153), (106, 9, 63), (111, 18, 57), (117, 27, 52),
+ (98, 35, 60), (79, 44, 68), (72, 82, 92), (67, 96, 130),
+ (36, 116, 139), (51, 141, 117), (67, 167, 95), (69, 164, 83),
+ (72, 162, 72), (59, 118, 62), (66, 89, 81), (71, 76, 79),
+ (82, 42, 30), (75, 10, 6), (81, 35, 44), (88, 60, 83),
+ (79, 70, 87), (71, 81, 91), (47, 109, 106), (35, 116, 107),
+ (11, 106, 98), (7, 91, 61), (4, 77, 24), (19, 73, 30),
+ (34, 69, 37), (46, 48, 43), (69, 26, 80), (88, 22, 112),
+ (86, 10, 110), (109, 0, 107), (99, 4, 92), (89, 9, 78),
+ (71, 8, 65), (61, 13, 75), (47, 2, 97), (11, 24, 94),
+ (1, 28, 49), (23, 34, 55), (45, 40, 62), (52, 27, 81),
+ (59, 15, 100), (67, 42, 100), (87, 73, 99), (113, 73, 97),
+ (130, 85, 114), (127, 67, 141), (122, 50, 139), (118, 33, 137),
+ (114, 33, 138), (109, 27, 101), (113, 18, 100), (97, 16, 93),
+ (107, 10, 87), (111, 7, 111), (116, 5, 136), (114, 10, 130),
+ (112, 16, 124), (94, 11, 99), (70, 16, 66), (39, 51, 37),
+ (10, 100, 2), (21, 62, 4), (36, 54, 14), (52, 46, 24),
+ (78, 14, 5), (92, 11, 26), (99, 5, 41), (86, 16, 44),
+ (65, 16, 48), (56, 16, 38), (47, 17, 29), (41, 14, 47),
+ (35, 23, 47), (57, 52, 49), (88, 68, 93), (133, 101, 104),
+ (189, 128, 109), (195, 182, 90), (199, 179, 99), (204, 177, 108),
+ (206, 146, 138), (156, 139, 132), (73, 142, 137), (58, 127, 156),
+ (57, 148, 130), (60, 151, 129), (64, 154, 128), (62, 152, 142),
+ (86, 171, 138), (94, 185, 118), (126, 145, 160), (130, 141, 163),
+ (73, 149, 136), (51, 133, 95), (29, 124, 82), (12, 110, 72),
+ (17, 115, 64), (19, 112, 67), (50, 63, 53), (57, 18, 47),
+ (80, 27, 73), (85, 29, 89), (91, 31, 105), (89, 28, 123),
+ (112, 65, 145), (116, 85, 116), (111, 120, 91), (81, 157, 82),
+ (77, 174, 61), (57, 159, 50), (43, 144, 50), (46, 144, 45),
+ (57, 117, 43), (43, 108, 54), (24, 83, 39), (8, 61, 43),
+ (9, 93, 43), (12, 89, 53), (4, 68, 68), (6, 70, 80),
+ (6, 86, 87), (10, 81, 99), (9, 70, 91), (29, 62, 105),
+ (62, 97, 116), (112, 104, 128), (178, 97, 116), (167, 89, 149),
+ (135, 73, 138), (132, 51, 154), (125, 34, 95), (107, 19, 61),
+ (87, 21, 69), (88, 36, 102), (101, 91, 125), (55, 122, 149),
+ (67, 152, 157), (117, 155, 191), (150, 140, 175), (157, 122, 186),
+ (154, 90, 168), (147, 86, 164), (104, 59, 152), (62, 87, 144),
+ (36, 129, 110), (45, 135, 84), (44, 138, 78), (32, 131, 66),
+ (23, 109, 44), (3, 85, 19), (2, 50, 8), (5, 21, 10),
+ (5, 3, 16), (30, 2, 25), (38, 29, 20), (34, 43, 24),
+ (27, 45, 7), (6, 42, 4), (14, 19, 15), (23, 22, 36),
+ (32, 4, 45), (28, 5, 61), (52, 15, 58), (64, 9, 66),
+ (80, 33, 85), (78, 64, 97), (78, 76, 98), (69, 81, 67),
+ (48, 112, 52), (27, 111, 51), (25, 111, 38), (28, 97, 34)
+ ),
+
+// 337 4u0004.jpg
+((68, 10, 148), (17, 39, 114), (37, 62, 107), (57, 86, 100),
+ (63, 86, 97), (70, 87, 94), (74, 80, 94), (79, 74, 94),
+ (98, 51, 33), (141, 34, 16), (185, 18, 0), (202, 54, 29),
+ (220, 90, 58), (222, 137, 38), (225, 184, 18), (180, 191, 20),
+ (135, 198, 23), (68, 218, 33), (46, 209, 80), (25, 201, 128),
+ (25, 191, 144), (25, 182, 161), (30, 164, 130), (35, 147, 99),
+ (56, 148, 39), (41, 172, 20), (26, 196, 1), (13, 198, 15),
+ (1, 201, 30), (20, 202, 48), (39, 204, 66), (89, 216, 83),
+ (116, 248, 85), (103, 197, 173), (53, 153, 154), (4, 110, 136),
+ (25, 109, 113), (47, 108, 90), (73, 95, 82), (99, 82, 74),
+ (164, 35, 63), (162, 27, 53), (161, 19, 43), (125, 24, 84),
+ (89, 29, 125), (69, 23, 137), (49, 17, 150), (51, 18, 135),
+ (50, 39, 95), (152, 12, 75), (167, 27, 65), (182, 42, 55),
+ (156, 85, 49), (131, 129, 44), (115, 142, 46), (99, 156, 49),
+ (22, 169, 0), (26, 164, 7), (30, 159, 15), (31, 159, 50),
+ (33, 159, 86), (27, 159, 96), (22, 159, 107), (49, 155, 168),
+ (66, 148, 196), (141, 203, 224), (122, 146, 175), (104, 90, 126),
+ (96, 83, 121), (88, 76, 116), (62, 96, 121), (33, 111, 85),
+ (81, 166, 73), (57, 190, 60), (34, 215, 48), (21, 228, 37),
+ (8, 241, 27), (9, 220, 36), (10, 199, 45), (4, 183, 63),
+ (34, 168, 83), (53, 163, 216), (71, 192, 181), (90, 222, 146),
+ (106, 229, 116), (123, 236, 86), (137, 205, 94), (131, 192, 73),
+ (95, 154, 74), (94, 129, 53), (93, 105, 33), (114, 98, 29),
+ (136, 91, 26), (160, 103, 26), (189, 114, 33), (213, 112, 60),
+ (162, 92, 94), (136, 114, 93), (119, 132, 96), (102, 150, 100),
+ (85, 157, 96), (68, 164, 93), (77, 176, 67), (30, 172, 64),
+ (35, 174, 45), (30, 176, 58), (26, 179, 71), (27, 186, 82),
+ (29, 193, 94), (47, 223, 98), (29, 253, 128), (4, 245, 142),
+ (18, 228, 155), (25, 105, 220), (26, 87, 237), (28, 69, 255),
+ (23, 44, 233), (23, 15, 238), (12, 13, 181), (30, 10, 123),
+ (70, 24, 73), (35, 14, 70), (1, 5, 68), (4, 15, 65),
+ (8, 26, 62), (10, 26, 62), (26, 51, 56), (42, 38, 27),
+ (47, 14, 23), (39, 1, 0), (33, 14, 0), (27, 27, 1),
+ (16, 39, 13), (25, 51, 24), (6, 69, 12), (37, 90, 12),
+ (29, 90, 31), (26, 102, 26), (23, 114, 21), (32, 135, 12),
+ (42, 157, 4), (65, 185, 10), (64, 175, 10), (60, 140, 17),
+ (107, 110, 19), (169, 125, 18), (168, 149, 19), (168, 173, 21),
+ (189, 116, 5), (196, 111, 4), (175, 99, 15), (188, 111, 31),
+ (125, 94, 50), (133, 76, 49), (141, 59, 48), (142, 65, 37),
+ (146, 84, 45), (171, 81, 3), (187, 86, 18), (166, 85, 32),
+ (141, 76, 54), (53, 99, 125), (43, 107, 126), (34, 116, 128),
+ (32, 136, 125), (34, 148, 89), (73, 119, 70), (103, 82, 61),
+ (143, 35, 6), (135, 39, 6), (128, 44, 7), (87, 73, 24),
+ (39, 28, 22), (37, 9, 32), (48, 28, 39), (76, 31, 64),
+ (79, 46, 63), (47, 75, 17), (12, 71, 25), (4, 107, 86),
+ (1, 70, 103), (0, 106, 164), (31, 75, 226), (52, 45, 237),
+ (102, 1, 181), (92, 23, 163), (82, 46, 146), (108, 43, 107),
+ (69, 88, 92), (56, 113, 42), (53, 133, 20), (56, 113, 19),
+ (63, 106, 17), (83, 103, 40), (108, 82, 57), (129, 63, 41),
+ (132, 79, 48), (120, 115, 47), (81, 116, 32), (75, 137, 36),
+ (53, 135, 97), (77, 117, 119), (97, 73, 147), (77, 28, 180),
+ (113, 51, 150), (133, 81, 117), (142, 163, 84), (152, 162, 47),
+ (180, 126, 80), (183, 104, 123), (116, 87, 169), (92, 129, 210),
+ (87, 71, 242), (57, 68, 222), (66, 22, 207), (26, 35, 152),
+ (22, 62, 88), (61, 43, 59), (44, 46, 59), (16, 75, 69),
+ (52, 90, 103), (37, 109, 123), (5, 82, 134), (14, 14, 164),
+ (72, 9, 184), (74, 46, 183), (36, 112, 112), (9, 128, 38),
+ (7, 175, 56), (24, 184, 52), (17, 234, 33), (28, 237, 50),
+ (56, 201, 34), (60, 197, 29), (84, 200, 39), (88, 216, 15),
+ (67, 206, 1), (77, 180, 15), (85, 129, 32), (80, 79, 59),
+ (65, 85, 58), (58, 79, 48), (36, 92, 47), (46, 119, 37),
+ (76, 152, 44), (143, 202, 32), (189, 251, 18), (140, 214, 15),
+ (117, 220, 29), (115, 237, 50), (120, 238, 58), (91, 221, 69),
+ (105, 167, 66), (78, 155, 59), (52, 192, 41), (68, 173, 55)
+ ),
+
+// 338 4u0005.jpg
+((63, 63, 89), (65, 108, 114), (74, 130, 111), (84, 153, 108),
+ (140, 156, 111), (197, 160, 115), (206, 135, 116), (215, 111, 118),
+ (198, 60, 179), (164, 32, 203), (131, 5, 227), (97, 15, 194),
+ (63, 25, 162), (73, 23, 126), (83, 22, 91), (70, 31, 72),
+ (58, 40, 54), (55, 84, 30), (44, 130, 76), (34, 177, 123),
+ (26, 201, 162), (18, 226, 202), (55, 216, 184), (92, 207, 166),
+ (83, 184, 52), (105, 200, 44), (127, 216, 36), (179, 199, 86),
+ (231, 183, 137), (228, 168, 149), (226, 153, 162), (213, 97, 172),
+ (178, 60, 209), (111, 5, 225), (75, 17, 208), (40, 30, 191),
+ (30, 68, 203), (21, 106, 215), (22, 96, 184), (24, 87, 154),
+ (36, 83, 113), (36, 103, 122), (36, 123, 132), (28, 140, 138),
+ (20, 158, 145), (18, 187, 141), (16, 217, 137), (2, 224, 137),
+ (1, 237, 127), (3, 177, 92), (36, 174, 60), (70, 171, 29),
+ (61, 134, 18), (53, 98, 7), (45, 92, 7), (38, 87, 8),
+ (8, 106, 67), (17, 97, 90), (26, 88, 113), (47, 95, 136),
+ (68, 103, 159), (86, 98, 179), (105, 94, 199), (163, 84, 211),
+ (186, 97, 227), (213, 99, 238), (214, 77, 225), (216, 55, 213),
+ (211, 47, 210), (206, 39, 207), (183, 56, 189), (134, 37, 178),
+ (170, 62, 112), (133, 108, 76), (96, 154, 41), (90, 189, 48),
+ (84, 224, 55), (74, 203, 79), (65, 182, 104), (38, 227, 137),
+ (34, 231, 152), (32, 197, 157), (49, 172, 134), (66, 148, 112),
+ (69, 158, 98), (73, 168, 84), (74, 167, 35), (67, 175, 29),
+ (111, 177, 25), (137, 173, 23), (164, 170, 22), (185, 186, 30),
+ (206, 203, 38), (197, 232, 18), (127, 240, 36), (93, 244, 67),
+ (69, 228, 74), (63, 195, 148), (76, 152, 145), (89, 109, 142),
+ (122, 89, 151), (155, 69, 160), (219, 69, 158), (219, 95, 168),
+ (176, 67, 210), (135, 90, 208), (94, 113, 207), (85, 127, 206),
+ (76, 141, 205), (71, 184, 192), (102, 193, 178), (107, 126, 220),
+ (206, 158, 220), (228, 99, 156), (231, 89, 153), (235, 79, 150),
+ (217, 55, 115), (192, 79, 61), (189, 56, 103), (193, 50, 112),
+ (250, 49, 141), (236, 103, 125), (223, 157, 109), (222, 172, 115),
+ (222, 187, 121), (182, 221, 106), (124, 223, 55), (117, 223, 52),
+ (102, 181, 40), (158, 112, 114), (177, 94, 113), (197, 77, 112),
+ (191, 58, 141), (144, 69, 138), (95, 35, 95), (95, 4, 81),
+ (73, 97, 9), (85, 107, 16), (98, 118, 23), (80, 106, 24),
+ (62, 95, 26), (57, 76, 12), (122, 97, 17), (141, 47, 35),
+ (187, 56, 72), (229, 9, 145), (218, 12, 150), (208, 16, 155),
+ (164, 25, 154), (120, 30, 117), (109, 19, 115), (110, 16, 140),
+ (140, 47, 198), (161, 39, 185), (183, 32, 173), (198, 8, 156),
+ (166, 4, 201), (144, 31, 225), (145, 36, 205), (158, 77, 205),
+ (143, 60, 200), (88, 98, 185), (72, 103, 174), (57, 108, 163),
+ (54, 144, 153), (55, 118, 169), (55, 96, 202), (46, 103, 216),
+ (63, 56, 185), (57, 61, 161), (52, 66, 137), (37, 85, 149),
+ (48, 93, 152), (43, 108, 128), (31, 83, 131), (36, 65, 125),
+ (47, 42, 108), (27, 36, 77), (17, 60, 41), (38, 66, 18),
+ (68, 118, 19), (99, 161, 2), (110, 166, 13), (123, 203, 18),
+ (109, 196, 31), (115, 177, 53), (121, 159, 76), (219, 185, 113),
+ (208, 116, 119), (182, 96, 145), (169, 73, 144), (134, 74, 126),
+ (119, 62, 167), (95, 68, 147), (59, 100, 146), (54, 100, 124),
+ (58, 84, 109), (39, 99, 97), (50, 117, 84), (77, 150, 69),
+ (112, 119, 51), (181, 110, 48), (211, 131, 44), (96, 151, 34),
+ (78, 166, 46), (77, 160, 68), (49, 166, 87), (28, 181, 65),
+ (8, 145, 77), (0, 116, 56), (23, 120, 77), (28, 81, 97),
+ (19, 76, 96), (7, 83, 109), (33, 95, 146), (17, 133, 180),
+ (26, 162, 186), (16, 214, 225), (9, 240, 222), (6, 244, 212),
+ (10, 236, 199), (14, 232, 205), (16, 227, 212), (41, 191, 189),
+ (58, 176, 186), (84, 108, 196), (97, 106, 199), (121, 64, 167),
+ (130, 65, 169), (113, 55, 178), (95, 18, 130), (90, 35, 103),
+ (63, 5, 89), (58, 17, 87), (48, 21, 88), (37, 75, 94),
+ (43, 93, 128), (24, 135, 154), (34, 180, 167), (13, 200, 169),
+ (15, 233, 159), (9, 225, 140), (17, 193, 112), (23, 129, 89),
+ (25, 69, 52), (12, 59, 4), (10, 41, 7), (6, 30, 17),
+ (9, 17, 38), (8, 37, 32), (0, 53, 70), (24, 66, 64),
+ (32, 77, 80), (30, 132, 108), (20, 185, 151), (15, 155, 116)
+ ),
+
+// 339 4u0006.jpg
+((35, 159, 183), (61, 171, 142), (60, 185, 118), (60, 200, 95),
+ (81, 188, 90), (103, 176, 86), (124, 140, 55), (146, 105, 25),
+ (115, 33, 45), (128, 42, 31), (142, 52, 18), (172, 81, 13),
+ (202, 110, 9), (188, 123, 46), (174, 137, 84), (162, 151, 113),
+ (150, 165, 142), (96, 202, 200), (77, 205, 197), (58, 209, 194),
+ (41, 167, 184), (24, 126, 175), (29, 105, 172), (35, 85, 170),
+ (83, 72, 150), (68, 100, 162), (54, 128, 175), (67, 139, 157),
+ (80, 150, 139), (97, 148, 138), (114, 147, 138), (139, 150, 154),
+ (148, 184, 174), (105, 217, 203), (87, 219, 216), (70, 221, 230),
+ (75, 189, 209), (81, 157, 189), (91, 164, 188), (102, 171, 187),
+ (81, 184, 157), (80, 166, 156), (79, 148, 155), (78, 146, 132),
+ (77, 144, 109), (75, 137, 100), (74, 130, 91), (65, 88, 72),
+ (66, 53, 45), (89, 57, 36), (58, 86, 43), (27, 116, 50),
+ (40, 120, 67), (53, 125, 85), (56, 127, 79), (60, 129, 74),
+ (156, 116, 28), (192, 98, 31), (228, 80, 34), (236, 61, 49),
+ (245, 42, 64), (233, 31, 61), (221, 21, 58), (196, 10, 49),
+ (170, 15, 73), (106, 25, 42), (105, 49, 51), (105, 73, 60),
+ (90, 85, 62), (76, 97, 64), (48, 103, 64), (9, 126, 71),
+ (9, 154, 79), (7, 158, 95), (5, 162, 111), (41, 182, 128),
+ (78, 203, 145), (80, 199, 161), (83, 196, 178), (83, 219, 217),
+ (80, 225, 230), (94, 213, 207), (104, 193, 189), (115, 174, 172),
+ (133, 161, 144), (151, 148, 117), (167, 121, 88), (211, 68, 54),
+ (240, 38, 52), (202, 40, 44), (164, 42, 37), (132, 37, 40),
+ (100, 32, 43), (31, 56, 0), (2, 94, 21), (9, 135, 53),
+ (25, 181, 46), (18, 208, 76), (24, 180, 41), (30, 152, 7),
+ (21, 141, 5), (12, 131, 3), (1, 108, 26), (8, 134, 9),
+ (24, 184, 62), (26, 172, 81), (28, 160, 100), (38, 140, 99),
+ (49, 121, 99), (77, 116, 85), (160, 92, 133), (171, 59, 143),
+ (173, 47, 155), (133, 29, 124), (165, 22, 107), (197, 15, 90),
+ (201, 17, 87), (213, 25, 84), (218, 9, 75), (217, 23, 49),
+ (221, 63, 16), (227, 77, 23), (234, 92, 30), (220, 83, 49),
+ (207, 74, 69), (149, 78, 48), (151, 84, 57), (146, 84, 85),
+ (178, 97, 96), (158, 48, 75), (149, 59, 74), (141, 71, 73),
+ (95, 63, 74), (48, 37, 95), (104, 19, 112), (108, 6, 106),
+ (137, 36, 114), (122, 78, 126), (108, 121, 138), (103, 128, 150),
+ (98, 135, 162), (109, 102, 240), (119, 82, 195), (109, 21, 159),
+ (95, 56, 119), (62, 102, 65), (54, 126, 48), (46, 151, 32),
+ (41, 145, 8), (81, 151, 26), (125, 130, 12), (152, 103, 11),
+ (139, 39, 16), (118, 33, 11), (98, 27, 7), (129, 16, 12),
+ (154, 30, 40), (136, 32, 59), (129, 14, 83), (137, 21, 96),
+ (201, 6, 100), (224, 13, 84), (218, 6, 67), (212, 0, 51),
+ (197, 11, 22), (174, 5, 2), (229, 48, 5), (227, 57, 5),
+ (225, 72, 31), (197, 88, 37), (170, 104, 44), (110, 135, 44),
+ (47, 193, 22), (32, 171, 54), (46, 146, 84), (78, 124, 52),
+ (130, 121, 64), (133, 131, 82), (118, 116, 129), (114, 90, 122),
+ (108, 86, 161), (113, 90, 162), (128, 83, 138), (149, 54, 88),
+ (149, 117, 79), (132, 128, 96), (115, 139, 113), (99, 137, 122),
+ (48, 137, 119), (42, 159, 143), (10, 133, 167), (32, 111, 116),
+ (66, 84, 124), (54, 86, 97), (35, 52, 95), (44, 88, 89),
+ (42, 95, 101), (13, 134, 89), (13, 146, 83), (5, 149, 87),
+ (17, 138, 133), (18, 129, 184), (18, 108, 186), (60, 125, 215),
+ (44, 149, 181), (43, 182, 141), (18, 183, 88), (2, 171, 78),
+ (8, 169, 55), (15, 122, 52), (22, 108, 47), (16, 107, 76),
+ (41, 129, 104), (50, 163, 143), (38, 181, 175), (68, 193, 185),
+ (66, 221, 155), (66, 224, 150), (105, 184, 136), (141, 168, 151),
+ (141, 160, 154), (132, 146, 110), (138, 148, 87), (159, 91, 56),
+ (148, 81, 36), (127, 45, 24), (120, 56, 29), (114, 79, 75),
+ (80, 102, 55), (40, 125, 31), (24, 140, 13), (31, 120, 26),
+ (27, 98, 32), (48, 57, 10), (119, 43, 27), (166, 34, 32),
+ (169, 9, 47), (196, 5, 48), (215, 2, 34), (221, 9, 31),
+ (206, 23, 25), (221, 55, 31), (207, 57, 43), (183, 42, 85),
+ (147, 55, 122), (102, 48, 172), (56, 67, 221), (34, 25, 206),
+ (46, 2, 147), (90, 0, 138), (98, 1, 168), (112, 11, 139),
+ (102, 10, 97), (128, 47, 90), (195, 50, 67), (232, 60, 10)
+ ),
+
+// 340 4u0007.jpg
+((12, 10, 57), (0, 23, 37), (13, 19, 20), (26, 16, 4),
+ (30, 32, 17), (35, 48, 31), (31, 70, 39), (27, 93, 47),
+ (35, 82, 66), (47, 79, 65), (60, 76, 65), (109, 74, 53),
+ (158, 73, 42), (178, 59, 39), (198, 45, 37), (211, 45, 37),
+ (224, 45, 38), (206, 96, 19), (204, 106, 18), (203, 117, 18),
+ (167, 101, 14), (132, 86, 11), (117, 69, 15), (103, 53, 20),
+ (78, 48, 58), (80, 49, 64), (83, 50, 71), (79, 28, 61),
+ (76, 7, 52), (64, 5, 51), (52, 3, 50), (32, 22, 49),
+ (13, 35, 59), (17, 59, 39), (34, 70, 43), (51, 81, 47),
+ (34, 63, 38), (18, 45, 30), (17, 37, 26), (16, 29, 22),
+ (14, 1, 31), (7, 8, 36), (0, 16, 42), (12, 9, 40),
+ (24, 2, 38), (22, 2, 36), (21, 2, 34), (23, 8, 31),
+ (16, 9, 16), (34, 36, 22), (47, 46, 33), (61, 57, 45),
+ (57, 76, 55), (53, 96, 66), (53, 102, 69), (53, 109, 72),
+ (66, 182, 107), (70, 193, 150), (75, 205, 193), (70, 170, 182),
+ (66, 136, 172), (63, 118, 148), (60, 100, 125), (50, 78, 82),
+ (52, 58, 90), (70, 53, 61), (108, 38, 38), (147, 24, 16),
+ (148, 18, 25), (150, 12, 35), (131, 17, 27), (84, 21, 29),
+ (59, 48, 44), (49, 47, 49), (39, 46, 54), (24, 45, 52),
+ (10, 45, 51), (7, 44, 45), (4, 43, 40), (1, 31, 3),
+ (12, 21, 2), (27, 1, 4), (15, 4, 8), (4, 7, 12),
+ (8, 12, 20), (13, 17, 28), (22, 35, 52), (32, 70, 71),
+ (4, 148, 139), (12, 144, 154), (20, 141, 170), (30, 123, 142),
+ (41, 105, 114), (61, 82, 83), (71, 73, 60), (70, 69, 38),
+ (118, 77, 15), (189, 118, 26), (142, 102, 56), (95, 86, 87),
+ (70, 92, 99), (46, 98, 111), (38, 139, 151), (27, 147, 172),
+ (15, 145, 194), (12, 163, 198), (9, 181, 203), (6, 176, 211),
+ (4, 172, 219), (3, 189, 238), (7, 195, 243), (25, 197, 243),
+ (66, 209, 217), (82, 198, 221), (80, 194, 207), (78, 190, 194),
+ (64, 147, 163), (42, 132, 140), (37, 94, 105), (38, 62, 72),
+ (41, 38, 81), (44, 45, 69), (47, 52, 58), (51, 40, 54),
+ (56, 28, 51), (57, 21, 23), (57, 18, 19), (68, 7, 2),
+ (62, 11, 7), (63, 30, 13), (77, 37, 17), (91, 45, 21),
+ (121, 74, 20), (166, 86, 25), (182, 81, 3), (198, 66, 1),
+ (245, 80, 24), (234, 68, 27), (223, 57, 31), (231, 65, 29),
+ (239, 74, 28), (226, 91, 10), (210, 79, 7), (196, 82, 22),
+ (194, 119, 26), (97, 109, 27), (103, 108, 57), (110, 107, 88),
+ (114, 95, 101), (129, 81, 81), (106, 76, 88), (99, 88, 68),
+ (118, 51, 32), (148, 47, 28), (179, 44, 25), (220, 6, 14),
+ (152, 16, 4), (106, 31, 26), (82, 36, 47), (68, 52, 53),
+ (55, 68, 61), (56, 67, 53), (57, 70, 61), (59, 74, 69),
+ (71, 70, 84), (64, 95, 98), (49, 126, 134), (55, 138, 152),
+ (30, 112, 90), (38, 99, 83), (46, 86, 77), (59, 75, 75),
+ (56, 66, 75), (49, 62, 81), (33, 63, 87), (34, 86, 99),
+ (27, 131, 132), (13, 130, 140), (29, 129, 144), (30, 113, 127),
+ (63, 83, 116), (79, 62, 80), (93, 71, 73), (91, 72, 76),
+ (92, 104, 102), (84, 112, 123), (76, 121, 144), (100, 145, 187),
+ (100, 176, 192), (95, 194, 233), (80, 193, 227), (78, 152, 201),
+ (57, 146, 186), (26, 121, 149), (0, 75, 96), (26, 41, 74),
+ (22, 25, 60), (25, 21, 58), (37, 39, 51), (25, 60, 66),
+ (18, 60, 74), (3, 85, 83), (2, 103, 71), (10, 103, 95),
+ (22, 112, 139), (54, 122, 169), (74, 89, 158), (77, 56, 115),
+ (130, 15, 146), (108, 41, 94), (141, 56, 79), (133, 66, 39),
+ (118, 56, 57), (88, 69, 65), (73, 78, 84), (67, 112, 109),
+ (54, 130, 128), (52, 169, 153), (56, 209, 191), (68, 194, 182),
+ (72, 143, 129), (100, 123, 139), (86, 117, 120), (78, 120, 116),
+ (64, 111, 131), (66, 97, 115), (63, 71, 90), (42, 59, 89),
+ (44, 66, 80), (38, 68, 58), (44, 62, 50), (20, 60, 52),
+ (9, 49, 25), (2, 48, 1), (27, 25, 2), (41, 23, 11),
+ (56, 28, 17), (47, 57, 23), (44, 52, 39), (48, 61, 67),
+ (47, 53, 77), (63, 39, 87), (65, 52, 80), (70, 46, 70),
+ (78, 20, 32), (47, 17, 9), (31, 14, 7), (19, 1, 13),
+ (14, 1, 18), (9, 1, 14), (12, 3, 20), (26, 6, 31),
+ (38, 9, 39), (67, 15, 53), (90, 8, 48), (109, 9, 73)
+ ),
+
+// 341 4u0008.jpg
+((92, 215, 223), (92, 212, 226), (95, 215, 222), (98, 218, 219),
+ (104, 195, 203), (110, 172, 187), (128, 167, 180), (146, 163, 173),
+ (172, 101, 97), (144, 89, 81), (117, 77, 65), (93, 77, 77),
+ (70, 78, 89), (67, 92, 101), (64, 107, 114), (63, 103, 111),
+ (62, 99, 108), (7, 83, 119), (21, 115, 140), (35, 148, 162),
+ (32, 167, 190), (29, 186, 219), (42, 194, 228), (56, 203, 237),
+ (95, 198, 243), (108, 177, 218), (121, 157, 193), (133, 147, 172),
+ (146, 138, 151), (126, 122, 135), (107, 106, 120), (85, 87, 86),
+ (68, 58, 83), (60, 27, 48), (55, 23, 45), (51, 19, 42),
+ (68, 28, 48), (85, 38, 54), (89, 58, 56), (93, 78, 59),
+ (99, 90, 93), (95, 130, 129), (91, 170, 165), (87, 191, 192),
+ (84, 213, 219), (76, 218, 223), (68, 223, 227), (55, 220, 216),
+ (55, 209, 217), (82, 165, 207), (86, 155, 195), (90, 145, 184),
+ (88, 147, 183), (86, 149, 182), (82, 156, 187), (79, 164, 193),
+ (64, 150, 173), (53, 137, 153), (42, 125, 133), (35, 101, 121),
+ (28, 77, 109), (29, 76, 99), (30, 76, 89), (18, 81, 90),
+ (10, 69, 75), (35, 60, 91), (40, 52, 87), (46, 44, 83),
+ (36, 52, 84), (26, 60, 85), (30, 75, 94), (32, 114, 125),
+ (45, 153, 192), (64, 165, 206), (84, 177, 220), (85, 172, 217),
+ (87, 168, 215), (89, 154, 190), (91, 141, 166), (114, 116, 115),
+ (122, 83, 78), (152, 100, 102), (148, 132, 128), (144, 164, 155),
+ (114, 153, 157), (84, 143, 159), (67, 128, 149), (59, 121, 132),
+ (40, 78, 115), (32, 85, 137), (24, 93, 160), (27, 105, 165),
+ (30, 117, 170), (48, 146, 175), (63, 159, 181), (79, 160, 163),
+ (86, 154, 177), (16, 117, 147), (8, 91, 125), (0, 65, 103),
+ (1, 65, 102), (2, 66, 101), (3, 49, 82), (0, 38, 60),
+ (25, 0, 19), (76, 10, 24), (128, 21, 29), (154, 28, 39),
+ (181, 36, 49), (223, 70, 75), (241, 95, 70), (230, 40, 50),
+ (212, 32, 61), (136, 82, 96), (117, 91, 124), (98, 101, 152),
+ (63, 91, 175), (26, 125, 148), (36, 159, 138), (35, 132, 125),
+ (36, 99, 91), (39, 84, 86), (42, 70, 82), (39, 79, 90),
+ (36, 88, 99), (19, 119, 143), (30, 164, 165), (66, 165, 186),
+ (92, 169, 179), (168, 161, 145), (184, 142, 123), (200, 124, 101),
+ (175, 103, 81), (136, 80, 63), (114, 78, 64), (99, 76, 60),
+ (55, 62, 54), (54, 70, 64), (53, 78, 74), (68, 84, 78),
+ (83, 90, 83), (105, 96, 87), (155, 121, 112), (187, 117, 109),
+ (215, 103, 81), (160, 85, 66), (128, 81, 62), (96, 78, 58),
+ (84, 89, 82), (83, 90, 83), (57, 112, 91), (56, 101, 130),
+ (30, 119, 149), (31, 126, 150), (33, 134, 152), (53, 122, 153),
+ (63, 118, 148), (85, 114, 146), (71, 95, 105), (84, 91, 84),
+ (151, 89, 78), (207, 95, 73), (207, 97, 80), (207, 99, 87),
+ (178, 111, 120), (166, 157, 142), (109, 173, 157), (43, 184, 193),
+ (24, 183, 213), (27, 175, 216), (31, 168, 220), (60, 187, 206),
+ (89, 200, 193), (88, 205, 196), (91, 188, 233), (86, 198, 236),
+ (51, 207, 220), (28, 202, 226), (22, 199, 232), (20, 210, 236),
+ (22, 220, 219), (33, 229, 228), (32, 213, 234), (47, 213, 229),
+ (41, 205, 230), (32, 201, 227), (23, 198, 225), (6, 161, 215),
+ (16, 145, 200), (44, 157, 213), (39, 145, 195), (52, 146, 171),
+ (26, 113, 130), (21, 89, 110), (36, 73, 89), (29, 62, 81),
+ (25, 47, 60), (19, 29, 54), (14, 23, 28), (19, 50, 32),
+ (32, 43, 71), (40, 60, 61), (57, 67, 76), (77, 60, 78),
+ (103, 67, 69), (130, 30, 42), (170, 13, 24), (203, 14, 21),
+ (206, 15, 22), (214, 58, 18), (200, 28, 44), (149, 33, 42),
+ (130, 23, 41), (107, 3, 4), (100, 7, 2), (79, 2, 0),
+ (75, 52, 72), (72, 90, 128), (52, 132, 167), (46, 161, 180),
+ (49, 159, 194), (59, 147, 185), (85, 122, 193), (96, 128, 201),
+ (144, 122, 145), (156, 117, 135), (173, 108, 114), (157, 121, 135),
+ (147, 140, 158), (138, 176, 177), (111, 201, 191), (102, 205, 222),
+ (83, 208, 236), (75, 234, 255), (92, 233, 250), (87, 224, 242),
+ (101, 222, 231), (106, 228, 233), (100, 218, 228), (103, 217, 228),
+ (108, 222, 222), (114, 209, 213), (138, 184, 182), (166, 168, 155),
+ (198, 121, 111), (216, 101, 82), (225, 99, 84), (212, 115, 96),
+ (207, 128, 111), (184, 155, 137), (151, 174, 180), (121, 215, 214),
+ (105, 215, 204), (88, 210, 213), (57, 176, 208), (32, 157, 175)
+ ),
+
+// 342 4u0009.jpg
+((56, 63, 229), (69, 13, 224), (103, 12, 227), (137, 12, 230),
+ (148, 20, 229), (160, 29, 229), (153, 33, 228), (146, 37, 227),
+ (152, 74, 246), (161, 87, 247), (170, 100, 248), (155, 105, 210),
+ (141, 111, 173), (174, 77, 155), (207, 43, 138), (184, 36, 147),
+ (162, 29, 156), (82, 58, 206), (69, 88, 198), (56, 118, 191),
+ (70, 134, 144), (84, 151, 98), (71, 173, 121), (59, 196, 144),
+ (0, 191, 201), (22, 206, 201), (45, 222, 202), (50, 185, 189),
+ (55, 149, 177), (77, 119, 160), (100, 90, 143), (79, 30, 119),
+ (109, 24, 53), (207, 110, 77), (202, 119, 97), (198, 128, 118),
+ (179, 80, 165), (160, 32, 213), (151, 33, 213), (142, 35, 213),
+ (128, 12, 222), (103, 8, 220), (79, 4, 219), (61, 5, 219),
+ (43, 7, 219), (35, 18, 220), (27, 30, 221), (47, 57, 217),
+ (41, 73, 234), (44, 84, 233), (44, 87, 235), (45, 91, 238),
+ (48, 90, 234), (51, 90, 230), (62, 95, 233), (74, 100, 236),
+ (101, 78, 220), (114, 68, 163), (127, 59, 106), (156, 104, 90),
+ (185, 149, 75), (152, 144, 94), (119, 139, 114), (77, 141, 125),
+ (58, 151, 141), (77, 150, 218), (99, 120, 219), (121, 91, 221),
+ (125, 79, 229), (130, 68, 237), (141, 65, 235), (149, 34, 223),
+ (183, 8, 223), (182, 13, 217), (182, 18, 211), (159, 74, 189),
+ (137, 131, 167), (144, 148, 171), (152, 166, 175), (183, 153, 153),
+ (167, 164, 147), (107, 177, 153), (98, 170, 171), (89, 163, 190),
+ (90, 162, 196), (92, 161, 203), (114, 181, 200), (157, 146, 225),
+ (142, 91, 232), (146, 98, 195), (150, 106, 159), (147, 117, 144),
+ (145, 129, 129), (146, 154, 113), (185, 150, 112), (176, 163, 93),
+ (128, 171, 102), (56, 203, 99), (62, 199, 76), (69, 196, 53),
+ (76, 210, 60), (83, 224, 67), (103, 211, 50), (169, 156, 2),
+ (222, 50, 40), (167, 38, 111), (112, 27, 182), (111, 36, 192),
+ (111, 46, 202), (60, 87, 216), (66, 128, 201), (89, 136, 214),
+ (103, 158, 188), (189, 148, 126), (195, 153, 131), (201, 159, 137),
+ (224, 157, 130), (215, 138, 118), (204, 132, 118), (223, 138, 97),
+ (220, 146, 37), (224, 109, 44), (228, 73, 51), (216, 77, 41),
+ (204, 82, 31), (146, 84, 87), (132, 79, 147), (106, 60, 169),
+ (104, 77, 220), (57, 99, 199), (61, 96, 196), (66, 94, 194),
+ (73, 80, 152), (78, 50, 135), (156, 19, 91), (191, 26, 105),
+ (236, 2, 115), (223, 11, 124), (211, 20, 133), (186, 17, 127),
+ (162, 15, 121), (165, 14, 109), (199, 11, 108), (194, 8, 119),
+ (164, 23, 135), (129, 6, 221), (113, 17, 224), (97, 29, 228),
+ (70, 22, 222), (71, 12, 218), (84, 27, 217), (102, 43, 219),
+ (197, 123, 112), (207, 127, 88), (218, 131, 64), (185, 174, 33),
+ (232, 151, 59), (227, 167, 105), (171, 177, 165), (107, 208, 202),
+ (98, 229, 239), (49, 228, 232), (48, 229, 227), (47, 231, 223),
+ (46, 229, 233), (49, 235, 234), (43, 242, 209), (29, 223, 223),
+ (20, 100, 241), (31, 99, 238), (42, 98, 235), (45, 81, 231),
+ (60, 68, 228), (67, 59, 220), (70, 34, 218), (52, 22, 204),
+ (60, 14, 226), (86, 36, 223), (79, 72, 228), (96, 102, 222),
+ (125, 134, 175), (150, 124, 127), (107, 76, 133), (134, 29, 113),
+ (164, 69, 137), (150, 89, 156), (136, 110, 175), (116, 129, 199),
+ (83, 160, 216), (86, 191, 212), (54, 201, 217), (57, 199, 209),
+ (48, 141, 175), (51, 119, 154), (38, 45, 133), (37, 10, 139),
+ (59, 59, 155), (70, 95, 187), (80, 137, 227), (77, 115, 226),
+ (58, 91, 222), (48, 91, 222), (54, 110, 219), (50, 120, 231),
+ (44, 146, 231), (47, 195, 231), (43, 216, 188), (45, 196, 179),
+ (74, 173, 129), (63, 131, 74), (87, 137, 74), (119, 93, 78),
+ (117, 90, 61), (102, 86, 73), (118, 105, 112), (83, 130, 136),
+ (109, 106, 223), (139, 99, 224), (137, 108, 226), (137, 123, 221),
+ (122, 144, 219), (94, 201, 209), (80, 215, 219), (60, 217, 236),
+ (45, 204, 236), (42, 196, 234), (60, 154, 218), (71, 108, 223),
+ (79, 47, 220), (102, 32, 218), (113, 55, 225), (134, 86, 206),
+ (173, 118, 137), (194, 137, 120), (203, 142, 137), (160, 135, 174),
+ (166, 156, 225), (145, 152, 222), (123, 105, 239), (93, 109, 230),
+ (97, 106, 235), (125, 103, 237), (140, 85, 231), (144, 84, 232),
+ (134, 74, 232), (147, 74, 241), (148, 76, 238), (147, 69, 231),
+ (130, 50, 223), (128, 39, 193), (150, 19, 151), (167, 21, 86),
+ (203, 48, 43), (171, 49, 0), (144, 84, 21), (45, 214, 61)
+ ),
+
+// 343 4u0009b.jpg
+((28, 89, 30), (31, 44, 27), (27, 62, 21), (24, 80, 15),
+ (32, 85, 20), (41, 90, 25), (33, 87, 29), (25, 85, 33),
+ (19, 69, 6), (20, 71, 3), (21, 73, 1), (15, 79, 2),
+ (9, 86, 4), (5, 91, 14), (1, 97, 25), (6, 100, 26),
+ (11, 103, 28), (4, 88, 54), (21, 95, 57), (38, 103, 60),
+ (39, 107, 69), (40, 111, 79), (38, 114, 82), (37, 118, 86),
+ (41, 132, 115), (54, 137, 122), (68, 142, 129), (85, 146, 128),
+ (103, 151, 127), (116, 162, 137), (129, 173, 148), (150, 186, 158),
+ (155, 179, 155), (139, 169, 135), (124, 156, 129), (110, 143, 124),
+ (101, 142, 119), (92, 142, 115), (88, 141, 116), (85, 140, 117),
+ (57, 139, 127), (67, 153, 138), (77, 168, 150), (72, 160, 147),
+ (67, 153, 144), (63, 151, 142), (59, 149, 140), (52, 142, 130),
+ (42, 140, 127), (38, 117, 88), (42, 119, 90), (47, 122, 92),
+ (60, 132, 108), (74, 143, 125), (83, 153, 137), (92, 163, 149),
+ (155, 205, 194), (169, 212, 203), (184, 219, 213), (172, 226, 218),
+ (160, 233, 224), (154, 232, 223), (148, 231, 223), (178, 234, 223),
+ (204, 238, 240), (209, 228, 234), (190, 219, 221), (172, 211, 208),
+ (167, 204, 200), (162, 197, 193), (151, 182, 164), (149, 172, 146),
+ (114, 158, 122), (102, 147, 111), (90, 136, 100), (90, 136, 100),
+ (90, 136, 100), (88, 142, 100), (86, 148, 101), (86, 154, 97),
+ (88, 152, 92), (105, 143, 94), (104, 144, 104), (104, 145, 115),
+ (111, 150, 118), (119, 156, 122), (123, 160, 129), (108, 154, 128),
+ (83, 138, 115), (69, 138, 106), (56, 139, 97), (58, 129, 92),
+ (60, 119, 87), (46, 107, 74), (40, 103, 60), (35, 103, 54),
+ (34, 117, 49), (34, 131, 114), (47, 139, 126), (61, 148, 139),
+ (70, 157, 144), (79, 166, 149), (93, 176, 148), (107, 182, 149),
+ (120, 191, 159), (118, 189, 158), (116, 187, 157), (112, 185, 159),
+ (109, 184, 161), (104, 178, 145), (102, 174, 137), (104, 178, 141),
+ (113, 178, 146), (121, 163, 143), (123, 164, 143), (126, 165, 144),
+ (125, 164, 137), (110, 153, 125), (98, 149, 118), (94, 147, 127),
+ (116, 184, 147), (133, 199, 171), (150, 215, 195), (153, 221, 205),
+ (157, 227, 216), (147, 219, 207), (129, 202, 182), (133, 197, 162),
+ (125, 190, 150), (110, 168, 120), (104, 165, 114), (98, 163, 109),
+ (83, 156, 101), (82, 146, 96), (81, 148, 95), (73, 141, 80),
+ (37, 108, 42), (42, 105, 44), (47, 102, 47), (54, 108, 52),
+ (61, 114, 58), (61, 113, 65), (68, 120, 81), (79, 129, 94),
+ (76, 139, 110), (47, 123, 95), (37, 115, 83), (27, 107, 72),
+ (20, 102, 66), (22, 91, 60), (20, 92, 52), (46, 105, 57),
+ (79, 121, 73), (83, 122, 68), (88, 124, 63), (77, 136, 68),
+ (73, 132, 68), (66, 122, 51), (64, 123, 57), (63, 119, 80),
+ (52, 125, 96), (68, 144, 132), (77, 149, 141), (86, 155, 150),
+ (109, 164, 159), (119, 174, 177), (124, 175, 176), (130, 177, 169),
+ (124, 174, 171), (119, 174, 173), (115, 175, 175), (99, 167, 166),
+ (95, 164, 161), (80, 155, 150), (76, 149, 142), (63, 147, 134),
+ (51, 141, 129), (63, 137, 120), (75, 139, 104), (77, 139, 102),
+ (81, 131, 94), (83, 131, 81), (72, 121, 55), (48, 103, 48),
+ (57, 94, 25), (52, 97, 36), (48, 101, 47), (52, 114, 75),
+ (75, 129, 93), (83, 151, 104), (106, 164, 114), (123, 167, 150),
+ (140, 183, 176), (154, 196, 195), (165, 202, 208), (169, 210, 202),
+ (171, 214, 195), (175, 220, 197), (169, 211, 201), (151, 206, 177),
+ (134, 204, 178), (126, 199, 172), (126, 197, 167), (133, 194, 163),
+ (134, 181, 171), (133, 180, 174), (135, 180, 173), (137, 186, 165),
+ (153, 192, 163), (162, 192, 166), (170, 206, 178), (152, 189, 182),
+ (156, 195, 164), (154, 186, 162), (139, 174, 154), (140, 174, 149),
+ (135, 169, 144), (135, 167, 146), (126, 165, 144), (108, 167, 147),
+ (103, 170, 137), (100, 173, 144), (88, 159, 155), (84, 154, 146),
+ (78, 147, 126), (89, 142, 122), (84, 143, 115), (90, 146, 117),
+ (100, 149, 119), (104, 148, 133), (106, 163, 144), (115, 170, 164),
+ (120, 174, 174), (129, 179, 176), (133, 185, 183), (136, 195, 163),
+ (132, 193, 159), (134, 191, 158), (135, 178, 169), (133, 173, 162),
+ (121, 181, 153), (118, 186, 149), (118, 189, 157), (115, 191, 165),
+ (100, 191, 176), (103, 169, 167), (99, 165, 163), (86, 172, 147),
+ (87, 174, 140), (90, 168, 128), (94, 166, 116), (87, 151, 117),
+ (79, 136, 117), (56, 131, 111), (14, 107, 76), (28, 118, 93)
+ ),
+
+// 344 4u0010.jpg
+((59, 175, 174), (32, 163, 173), (46, 171, 173), (61, 180, 174),
+ (117, 181, 159), (174, 182, 145), (165, 156, 98), (156, 131, 51),
+ (224, 97, 44), (205, 59, 59), (186, 22, 75), (180, 14, 84),
+ (174, 6, 94), (178, 28, 110), (182, 50, 126), (177, 60, 149),
+ (172, 71, 173), (95, 106, 185), (73, 89, 178), (52, 72, 171),
+ (65, 47, 124), (79, 22, 77), (82, 42, 87), (86, 62, 98),
+ (20, 103, 143), (18, 97, 160), (17, 91, 178), (11, 82, 179),
+ (5, 73, 180), (11, 65, 172), (17, 58, 164), (26, 45, 140),
+ (48, 51, 166), (47, 66, 168), (78, 93, 176), (109, 120, 184),
+ (143, 113, 184), (178, 107, 185), (160, 78, 174), (143, 50, 164),
+ (90, 54, 152), (67, 74, 163), (44, 95, 174), (31, 138, 163),
+ (18, 181, 152), (13, 197, 148), (8, 213, 144), (39, 144, 130),
+ (61, 103, 127), (50, 81, 187), (44, 111, 210), (38, 141, 234),
+ (42, 136, 232), (46, 132, 231), (44, 119, 208), (43, 106, 186),
+ (16, 97, 186), (22, 84, 181), (29, 72, 177), (35, 81, 180),
+ (42, 91, 183), (45, 96, 179), (48, 102, 176), (54, 106, 181),
+ (41, 105, 179), (12, 110, 207), (34, 108, 204), (56, 106, 201),
+ (75, 114, 205), (95, 122, 209), (147, 135, 199), (179, 151, 192),
+ (174, 147, 190), (146, 106, 196), (119, 65, 202), (103, 51, 202),
+ (88, 37, 202), (88, 25, 198), (88, 13, 194), (96, 6, 199),
+ (78, 7, 205), (97, 23, 204), (112, 21, 219), (128, 19, 234),
+ (147, 11, 237), (166, 3, 240), (189, 8, 247), (168, 32, 228),
+ (135, 69, 195), (116, 84, 195), (97, 100, 195), (98, 86, 194),
+ (100, 72, 193), (81, 53, 172), (68, 53, 170), (56, 41, 168),
+ (50, 52, 187), (50, 85, 201), (33, 79, 191), (16, 74, 181),
+ (24, 60, 181), (32, 46, 181), (45, 35, 157), (55, 41, 176),
+ (51, 114, 185), (45, 136, 185), (40, 158, 186), (48, 146, 179),
+ (56, 134, 173), (77, 91, 196), (67, 75, 174), (49, 62, 192),
+ (33, 51, 197), (75, 12, 241), (79, 21, 243), (83, 30, 245),
+ (103, 54, 242), (107, 22, 201), (106, 23, 177), (110, 8, 110),
+ (135, 6, 96), (173, 5, 89), (212, 5, 83), (215, 5, 84),
+ (219, 6, 86), (211, 10, 78), (201, 22, 90), (203, 25, 121),
+ (222, 52, 115), (206, 84, 135), (191, 99, 146), (176, 115, 157),
+ (176, 137, 194), (157, 125, 188), (130, 82, 182), (117, 46, 148),
+ (65, 4, 107), (104, 10, 89), (144, 17, 72), (150, 17, 75),
+ (157, 17, 78), (135, 56, 101), (121, 32, 114), (116, 24, 125),
+ (105, 41, 155), (103, 51, 162), (88, 59, 166), (74, 67, 171),
+ (52, 81, 181), (56, 87, 195), (40, 65, 183), (37, 79, 177),
+ (34, 86, 222), (40, 95, 233), (47, 104, 245), (69, 96, 239),
+ (76, 52, 200), (78, 18, 202), (93, 19, 194), (109, 24, 190),
+ (134, 24, 211), (189, 15, 148), (176, 16, 132), (164, 18, 117),
+ (130, 26, 147), (137, 30, 162), (109, 36, 187), (114, 62, 207),
+ (112, 80, 207), (111, 74, 201), (111, 69, 195), (125, 67, 188),
+ (167, 96, 190), (177, 100, 202), (161, 105, 202), (170, 112, 189),
+ (189, 96, 167), (156, 56, 116), (170, 20, 84), (168, 5, 96),
+ (172, 16, 99), (146, 23, 127), (115, 40, 143), (105, 55, 150),
+ (65, 48, 178), (56, 45, 189), (47, 43, 200), (52, 17, 207),
+ (70, 23, 199), (69, 33, 191), (83, 23, 181), (57, 8, 151),
+ (56, 18, 139), (86, 22, 142), (86, 52, 162), (48, 31, 169),
+ (18, 9, 186), (18, 19, 205), (17, 18, 194), (22, 33, 183),
+ (28, 56, 189), (15, 60, 187), (1, 67, 179), (13, 30, 134),
+ (49, 33, 142), (92, 30, 129), (158, 30, 127), (201, 85, 134),
+ (220, 145, 105), (227, 166, 83), (225, 163, 90), (176, 171, 175),
+ (133, 184, 153), (90, 140, 189), (58, 146, 196), (57, 123, 209),
+ (58, 89, 197), (30, 95, 187), (30, 91, 182), (32, 61, 191),
+ (14, 75, 200), (26, 73, 251), (14, 26, 234), (46, 58, 206),
+ (82, 96, 203), (86, 102, 200), (61, 147, 180), (69, 166, 182),
+ (73, 149, 175), (83, 138, 192), (127, 116, 192), (157, 101, 200),
+ (134, 91, 206), (126, 101, 205), (102, 103, 196), (92, 117, 197),
+ (114, 132, 198), (135, 157, 198), (98, 158, 159), (60, 167, 137),
+ (97, 134, 142), (113, 70, 159), (144, 79, 61), (218, 113, 58),
+ (234, 127, 33), (218, 124, 60), (207, 143, 55), (217, 159, 60),
+ (228, 148, 77), (193, 70, 114), (178, 31, 111), (149, 81, 130),
+ (136, 119, 112), (91, 195, 108), (74, 230, 133), (13, 202, 134)
+ ),
+
+// 345 4u0011.jpg
+((21, 14, 144), (4, 49, 130), (7, 53, 131), (10, 58, 132),
+ (16, 44, 143), (23, 31, 155), (23, 38, 151), (24, 46, 148),
+ (20, 66, 116), (22, 79, 97), (25, 93, 78), (62, 107, 67),
+ (100, 122, 57), (132, 101, 35), (164, 81, 13), (163, 79, 14),
+ (162, 78, 16), (147, 42, 13), (138, 29, 8), (130, 17, 3),
+ (109, 21, 22), (88, 25, 42), (82, 28, 46), (76, 31, 51),
+ (51, 20, 36), (68, 28, 30), (86, 36, 25), (121, 39, 15),
+ (157, 43, 6), (164, 44, 9), (172, 45, 12), (171, 64, 22),
+ (150, 52, 15), (73, 20, 16), (41, 33, 10), (9, 46, 5),
+ (20, 56, 9), (32, 67, 13), (56, 53, 13), (80, 40, 14),
+ (112, 51, 20), (119, 90, 33), (126, 130, 46), (105, 130, 36),
+ (85, 130, 27), (65, 109, 29), (45, 88, 32), (50, 111, 78),
+ (28, 97, 79), (35, 108, 97), (27, 97, 128), (19, 87, 160),
+ (20, 63, 168), (22, 40, 176), (23, 37, 174), (25, 34, 173),
+ (7, 71, 145), (12, 84, 107), (18, 98, 69), (26, 92, 57),
+ (35, 86, 45), (43, 89, 26), (51, 93, 7), (83, 122, 3),
+ (50, 160, 27), (66, 152, 15), (70, 150, 10), (74, 149, 5),
+ (100, 179, 15), (126, 210, 26), (151, 196, 69), (162, 207, 80),
+ (110, 105, 101), (94, 90, 111), (78, 75, 122), (78, 72, 117),
+ (78, 69, 112), (80, 60, 115), (82, 51, 119), (66, 44, 119),
+ (59, 39, 138), (42, 39, 152), (33, 32, 161), (24, 26, 171),
+ (22, 21, 168), (20, 16, 165), (11, 28, 158), (21, 24, 155),
+ (17, 9, 130), (30, 7, 115), (43, 6, 101), (50, 3, 85),
+ (57, 0, 69), (40, 2, 41), (29, 17, 31), (35, 28, 44),
+ (65, 24, 40), (40, 25, 90), (39, 28, 113), (38, 31, 137),
+ (73, 19, 134), (109, 7, 132), (139, 21, 117), (199, 29, 58),
+ (201, 26, 31), (187, 34, 23), (174, 43, 15), (172, 42, 17),
+ (170, 41, 19), (131, 36, 44), (98, 70, 58), (81, 70, 100),
+ (62, 60, 107), (14, 25, 133), (12, 16, 132), (10, 8, 131),
+ (0, 5, 155), (15, 13, 184), (19, 26, 176), (24, 34, 157),
+ (52, 51, 111), (70, 44, 73), (88, 37, 36), (103, 41, 28),
+ (119, 45, 20), (170, 51, 17), (170, 50, 13), (183, 53, 3),
+ (200, 59, 13), (182, 72, 21), (176, 75, 13), (170, 79, 6),
+ (142, 110, 7), (101, 150, 7), (132, 170, 5), (131, 152, 13),
+ (174, 106, 25), (189, 90, 28), (205, 74, 32), (201, 59, 20),
+ (197, 45, 8), (173, 0, 2), (191, 22, 3), (204, 41, 6),
+ (199, 50, 7), (218, 147, 21), (196, 141, 27), (175, 136, 33),
+ (172, 172, 22), (144, 143, 17), (134, 105, 47), (130, 88, 90),
+ (170, 11, 140), (156, 14, 141), (143, 17, 143), (126, 25, 147),
+ (118, 28, 128), (96, 39, 94), (74, 41, 52), (75, 41, 39),
+ (53, 43, 16), (39, 45, 11), (32, 36, 12), (25, 27, 14),
+ (19, 30, 32), (24, 13, 30), (22, 6, 81), (8, 36, 86),
+ (17, 58, 148), (13, 58, 151), (9, 59, 154), (17, 101, 147),
+ (40, 126, 113), (84, 167, 33), (136, 159, 17), (168, 200, 57),
+ (185, 150, 34), (167, 110, 39), (164, 73, 16), (149, 38, 21),
+ (130, 16, 6), (107, 29, 25), (93, 37, 36), (90, 54, 42),
+ (73, 37, 98), (58, 30, 95), (44, 24, 93), (20, 17, 104),
+ (24, 27, 120), (30, 29, 123), (18, 31, 135), (35, 44, 135),
+ (34, 30, 150), (24, 30, 150), (29, 10, 136), (29, 17, 129),
+ (49, 34, 137), (61, 9, 143), (83, 24, 144), (114, 44, 116),
+ (136, 36, 48), (102, 40, 43), (101, 41, 41), (98, 33, 57),
+ (78, 37, 67), (58, 13, 80), (50, 5, 106), (37, 12, 96),
+ (48, 3, 86), (63, 6, 74), (56, 15, 83), (61, 26, 92),
+ (70, 36, 110), (55, 42, 114), (42, 58, 136), (35, 69, 132),
+ (43, 75, 152), (23, 89, 176), (7, 100, 195), (22, 77, 170),
+ (23, 58, 162), (16, 52, 162), (32, 52, 164), (40, 42, 155),
+ (60, 55, 149), (106, 23, 131), (128, 59, 150), (139, 59, 144),
+ (127, 89, 80), (132, 55, 25), (119, 50, 19), (107, 40, 34),
+ (83, 24, 52), (58, 30, 89), (49, 56, 108), (24, 64, 89),
+ (17, 49, 110), (25, 30, 96), (25, 10, 111), (20, 1, 126),
+ (21, 2, 128), (32, 16, 148), (22, 30, 154), (17, 47, 133),
+ (11, 45, 109), (10, 44, 72), (43, 32, 62), (53, 39, 54),
+ (46, 38, 77), (29, 60, 115), (25, 75, 110), (19, 77, 150),
+ (18, 111, 170), (19, 114, 182), (13, 103, 166), (18, 80, 157)
+ ),
+
+// 346 4u0012.jpg
+((69, 55, 153), (50, 63, 141), (26, 70, 140), (3, 77, 140),
+ (13, 69, 146), (24, 61, 152), (35, 54, 158), (47, 48, 164),
+ (94, 44, 131), (83, 29, 115), (73, 15, 99), (56, 13, 97),
+ (40, 12, 96), (44, 24, 77), (48, 36, 58), (56, 31, 68),
+ (65, 27, 78), (80, 21, 77), (96, 16, 79), (113, 12, 82),
+ (111, 15, 110), (109, 18, 139), (102, 15, 147), (96, 13, 155),
+ (108, 31, 187), (108, 35, 170), (108, 40, 153), (107, 43, 185),
+ (106, 47, 217), (107, 59, 223), (108, 71, 229), (102, 70, 213),
+ (69, 69, 219), (63, 35, 207), (65, 32, 201), (67, 30, 195),
+ (58, 36, 192), (50, 42, 189), (57, 44, 187), (64, 47, 185),
+ (37, 40, 153), (54, 31, 142), (71, 22, 131), (79, 12, 127),
+ (87, 3, 124), (86, 3, 128), (86, 4, 132), (63, 17, 149),
+ (46, 10, 134), (65, 10, 101), (74, 6, 90), (84, 3, 79),
+ (79, 35, 72), (75, 67, 65), (64, 56, 67), (53, 45, 69),
+ (17, 58, 124), (25, 81, 149), (34, 104, 174), (73, 110, 199),
+ (112, 116, 224), (117, 123, 217), (122, 131, 210), (110, 117, 198),
+ (101, 96, 180), (66, 44, 181), (60, 29, 183), (54, 15, 186),
+ (56, 11, 188), (58, 8, 191), (60, 18, 166), (52, 19, 136),
+ (30, 16, 77), (25, 11, 70), (20, 7, 63), (17, 11, 63),
+ (15, 16, 64), (16, 17, 71), (17, 19, 78), (31, 38, 67),
+ (31, 55, 67), (12, 66, 113), (13, 60, 125), (14, 55, 137),
+ (18, 55, 150), (23, 56, 163), (48, 93, 186), (55, 113, 220),
+ (36, 114, 212), (33, 105, 217), (31, 96, 222), (30, 82, 219),
+ (29, 69, 216), (59, 26, 203), (64, 26, 199), (63, 19, 192),
+ (52, 40, 186), (24, 86, 161), (23, 100, 161), (23, 115, 162),
+ (31, 131, 184), (39, 148, 207), (72, 161, 221), (104, 173, 215),
+ (78, 148, 234), (64, 132, 216), (51, 116, 198), (39, 113, 176),
+ (28, 111, 155), (22, 104, 142), (6, 130, 182), (10, 140, 216),
+ (16, 135, 227), (44, 151, 223), (55, 138, 221), (66, 125, 219),
+ (71, 89, 171), (98, 63, 147), (100, 60, 113), (88, 44, 103),
+ (38, 45, 125), (29, 36, 127), (20, 28, 129), (10, 33, 124),
+ (0, 38, 120), (0, 16, 119), (0, 20, 111), (4, 33, 109),
+ (7, 47, 132), (16, 118, 133), (15, 112, 127), (14, 106, 121),
+ (27, 82, 138), (38, 62, 168), (50, 66, 164), (55, 90, 194),
+ (33, 108, 209), (18, 111, 184), (3, 114, 159), (6, 103, 150),
+ (10, 92, 142), (4, 58, 120), (4, 38, 109), (12, 30, 106),
+ (27, 22, 114), (60, 3, 160), (66, 6, 173), (73, 10, 187),
+ (56, 8, 182), (41, 16, 136), (31, 9, 107), (17, 8, 101),
+ (19, 14, 117), (17, 14, 114), (15, 15, 111), (7, 17, 102),
+ (11, 18, 99), (5, 2, 91), (3, 30, 77), (11, 28, 84),
+ (15, 34, 103), (23, 53, 143), (22, 58, 161), (22, 63, 179),
+ (50, 47, 186), (50, 49, 185), (65, 70, 174), (77, 43, 153),
+ (67, 18, 99), (69, 14, 88), (72, 10, 77), (75, 10, 74),
+ (63, 10, 66), (65, 24, 80), (34, 19, 100), (21, 24, 105),
+ (17, 24, 105), (27, 28, 92), (33, 22, 91), (25, 16, 83),
+ (16, 8, 91), (26, 12, 100), (36, 17, 96), (37, 23, 108),
+ (60, 21, 138), (53, 27, 143), (47, 34, 148), (34, 34, 134),
+ (20, 16, 136), (21, 49, 148), (10, 96, 145), (4, 112, 158),
+ (31, 137, 215), (68, 160, 235), (75, 147, 221), (63, 117, 217),
+ (97, 79, 225), (96, 107, 231), (109, 119, 240), (115, 138, 214),
+ (112, 140, 214), (114, 153, 210), (115, 160, 219), (109, 160, 203),
+ (109, 173, 211), (109, 170, 214), (110, 151, 207), (105, 147, 195),
+ (109, 128, 197), (119, 107, 193), (118, 58, 192), (110, 50, 164),
+ (95, 57, 160), (68, 76, 149), (49, 88, 165), (12, 95, 149),
+ (3, 95, 146), (11, 94, 144), (12, 56, 151), (22, 30, 175),
+ (53, 15, 180), (70, 16, 188), (89, 29, 213), (106, 26, 209),
+ (104, 11, 206), (101, 11, 205), (82, 21, 236), (83, 6, 234),
+ (70, 3, 223), (69, 16, 210), (86, 7, 186), (94, 6, 178),
+ (76, 14, 157), (114, 7, 147), (113, 14, 140), (94, 10, 88),
+ (62, 4, 65), (66, 2, 52), (59, 5, 54), (54, 12, 62),
+ (64, 7, 75), (72, 12, 108), (98, 7, 128), (110, 16, 140),
+ (89, 34, 138), (76, 43, 148), (53, 53, 151), (34, 44, 141),
+ (23, 53, 125), (30, 37, 125), (32, 42, 131), (34, 48, 153),
+ (47, 67, 164), (81, 81, 167), (111, 118, 208), (113, 105, 208)
+ ),
+
+// 347 4u0013.jpg
+((123, 95, 81), (157, 143, 46), (173, 172, 56), (189, 201, 67),
+ (179, 195, 99), (170, 190, 131), (166, 190, 108), (163, 190, 85),
+ (176, 180, 43), (180, 173, 35), (184, 167, 27), (178, 157, 20),
+ (172, 148, 14), (165, 135, 20), (158, 122, 26), (158, 111, 30),
+ (158, 101, 34), (117, 85, 74), (97, 55, 72), (78, 25, 71),
+ (59, 15, 83), (41, 6, 96), (24, 26, 95), (8, 46, 95),
+ (44, 104, 105), (55, 109, 100), (66, 115, 96), (97, 101, 82),
+ (128, 87, 69), (135, 84, 75), (142, 82, 81), (129, 103, 76),
+ (117, 118, 86), (129, 154, 99), (141, 136, 90), (153, 119, 82),
+ (138, 98, 63), (123, 78, 45), (118, 77, 39), (114, 77, 33),
+ (84, 67, 24), (96, 73, 25), (109, 79, 27), (112, 83, 37),
+ (116, 88, 48), (124, 92, 39), (132, 97, 31), (154, 103, 37),
+ (158, 100, 37), (155, 110, 9), (158, 126, 19), (162, 142, 29),
+ (168, 154, 39), (174, 167, 50), (176, 170, 49), (178, 174, 48),
+ (187, 181, 45), (188, 185, 43), (190, 190, 42), (192, 196, 54),
+ (195, 203, 66), (197, 198, 73), (200, 194, 80), (188, 217, 91),
+ (175, 210, 110), (163, 226, 112), (166, 224, 104), (170, 222, 96),
+ (186, 223, 94), (202, 225, 93), (208, 221, 79), (208, 219, 78),
+ (198, 199, 59), (195, 191, 47), (193, 183, 36), (183, 161, 36),
+ (174, 139, 37), (167, 128, 38), (160, 117, 39), (147, 106, 60),
+ (132, 83, 50), (137, 67, 41), (139, 70, 51), (142, 74, 61),
+ (145, 75, 56), (148, 76, 52), (143, 78, 46), (140, 85, 31),
+ (134, 82, 0), (129, 86, 0), (125, 91, 0), (122, 87, 0),
+ (119, 83, 0), (113, 76, 5), (121, 65, 6), (134, 78, 3),
+ (141, 99, 13), (173, 145, 2), (178, 156, 11), (183, 167, 20),
+ (174, 165, 22), (165, 164, 24), (175, 149, 26), (173, 148, 29),
+ (148, 121, 4), (135, 108, 4), (123, 96, 5), (123, 91, 16),
+ (123, 87, 27), (115, 82, 37), (127, 81, 22), (148, 101, 31),
+ (160, 128, 25), (188, 178, 44), (191, 185, 46), (195, 192, 49),
+ (194, 207, 65), (195, 214, 72), (202, 211, 70), (201, 204, 65),
+ (216, 206, 72), (205, 211, 77), (194, 216, 82), (176, 210, 86),
+ (158, 205, 91), (132, 194, 109), (109, 173, 138), (66, 159, 149),
+ (71, 171, 99), (96, 134, 93), (85, 135, 78), (74, 136, 63),
+ (102, 117, 36), (112, 112, 26), (124, 96, 22), (151, 109, 11),
+ (171, 134, 2), (175, 145, 8), (180, 157, 15), (173, 157, 24),
+ (167, 157, 33), (166, 164, 55), (160, 172, 64), (150, 173, 65),
+ (136, 166, 70), (124, 154, 64), (133, 163, 68), (143, 173, 73),
+ (168, 196, 75), (157, 209, 85), (162, 217, 87), (158, 217, 89),
+ (158, 211, 97), (150, 197, 93), (143, 184, 90), (129, 160, 90),
+ (125, 132, 65), (133, 106, 27), (144, 105, 30), (144, 111, 40),
+ (152, 99, 45), (159, 123, 39), (151, 131, 35), (143, 139, 32),
+ (116, 125, 42), (124, 112, 36), (106, 96, 34), (77, 89, 27),
+ (95, 59, 11), (92, 59, 5), (89, 59, 0), (98, 66, 0),
+ (119, 56, 0), (124, 76, 14), (126, 83, 15), (105, 76, 16),
+ (70, 53, 9), (61, 20, 24), (71, 26, 67), (36, 36, 98),
+ (3, 50, 104), (22, 83, 78), (50, 50, 26), (66, 62, 25),
+ (82, 82, 20), (97, 86, 22), (112, 91, 24), (126, 98, 24),
+ (120, 110, 23), (105, 118, 36), (98, 116, 40), (102, 128, 63),
+ (107, 128, 53), (128, 139, 37), (124, 130, 22), (145, 116, 24),
+ (149, 108, 18), (142, 104, 21), (130, 96, 32), (112, 98, 59),
+ (71, 81, 70), (54, 104, 92), (56, 124, 73), (45, 116, 102),
+ (35, 110, 90), (4, 77, 96), (3, 46, 91), (11, 40, 80),
+ (43, 11, 74), (35, 41, 37), (12, 58, 47), (9, 23, 23),
+ (43, 13, 13), (48, 42, 10), (59, 58, 1), (63, 57, 21),
+ (86, 56, 32), (98, 64, 37), (104, 76, 26), (106, 86, 25),
+ (100, 113, 7), (100, 124, 2), (132, 167, 21), (159, 174, 47),
+ (181, 201, 68), (168, 215, 85), (166, 218, 94), (168, 220, 96),
+ (166, 217, 86), (182, 203, 74), (189, 203, 64), (185, 188, 55),
+ (174, 168, 30), (177, 140, 10), (160, 110, 11), (146, 96, 23),
+ (131, 72, 38), (125, 56, 41), (109, 68, 48), (121, 74, 46),
+ (123, 72, 45), (135, 83, 70), (123, 103, 79), (108, 122, 86),
+ (112, 147, 83), (131, 165, 81), (140, 171, 95), (145, 193, 94),
+ (134, 220, 109), (130, 184, 108), (112, 192, 95), (110, 163, 107),
+ (121, 157, 87), (132, 159, 88), (191, 140, 61), (160, 152, 71)
+ ),
+
+// 348 4u0019.jpg
+((147, 37, 36), (156, 76, 15), (148, 97, 14), (141, 118, 14),
+ (134, 89, 7), (127, 61, 0), (134, 67, 2), (142, 73, 4),
+ (140, 115, 31), (117, 134, 66), (94, 154, 102), (84, 156, 107),
+ (75, 158, 112), (81, 155, 116), (88, 153, 121), (88, 153, 120),
+ (89, 153, 119), (158, 80, 67), (157, 73, 48), (157, 67, 30),
+ (136, 95, 45), (115, 124, 61), (107, 130, 64), (99, 136, 67),
+ (111, 145, 95), (137, 137, 67), (164, 130, 40), (165, 96, 24),
+ (166, 62, 9), (171, 64, 11), (177, 67, 14), (180, 85, 27),
+ (162, 102, 52), (123, 128, 87), (112, 115, 104), (101, 102, 122),
+ (74, 90, 127), (48, 79, 133), (40, 74, 140), (32, 69, 147),
+ (23, 123, 159), (26, 135, 165), (29, 148, 172), (43, 154, 185),
+ (57, 161, 198), (64, 141, 180), (72, 121, 162), (91, 115, 125),
+ (101, 92, 93), (147, 21, 24), (146, 13, 19), (146, 6, 15),
+ (144, 14, 9), (143, 22, 3), (141, 28, 2), (139, 34, 2),
+ (126, 26, 24), (128, 23, 21), (130, 20, 19), (133, 20, 11),
+ (136, 21, 3), (140, 23, 2), (145, 25, 1), (138, 23, 0),
+ (124, 24, 1), (136, 43, 12), (147, 45, 9), (159, 47, 7),
+ (153, 40, 5), (147, 34, 4), (146, 31, 4), (138, 23, 4),
+ (105, 3, 16), (89, 4, 18), (74, 6, 21), (40, 3, 22),
+ (6, 1, 24), (3, 0, 27), (0, 0, 30), (2, 26, 28),
+ (29, 38, 47), (51, 50, 45), (37, 40, 35), (24, 30, 26),
+ (22, 23, 28), (21, 17, 31), (3, 14, 32), (13, 22, 21),
+ (87, 42, 37), (115, 57, 28), (144, 73, 19), (150, 80, 19),
+ (156, 87, 20), (149, 92, 5), (149, 94, 3), (136, 77, 7),
+ (150, 71, 12), (158, 85, 6), (157, 76, 10), (157, 67, 15),
+ (160, 59, 13), (164, 52, 12), (145, 43, 28), (129, 43, 26),
+ (91, 43, 59), (71, 55, 85), (51, 68, 111), (55, 63, 105),
+ (60, 59, 99), (86, 58, 83), (103, 70, 65), (128, 69, 53),
+ (139, 58, 57), (144, 65, 34), (132, 72, 35), (121, 79, 37),
+ (96, 68, 21), (115, 81, 33), (107, 71, 73), (107, 96, 92),
+ (150, 94, 67), (168, 81, 55), (187, 68, 44), (182, 61, 41),
+ (177, 54, 38), (165, 55, 18), (156, 49, 13), (131, 55, 3),
+ (100, 43, 23), (20, 14, 52), (18, 12, 54), (17, 11, 57),
+ (24, 12, 58), (22, 23, 69), (37, 30, 71), (67, 67, 79),
+ (62, 141, 110), (89, 131, 98), (117, 121, 86), (112, 109, 81),
+ (108, 97, 77), (108, 77, 57), (102, 55, 47), (73, 37, 49),
+ (57, 36, 93), (29, 33, 96), (26, 36, 90), (23, 40, 84),
+ (22, 30, 77), (70, 49, 64), (97, 63, 53), (117, 40, 46),
+ (141, 46, 26), (141, 50, 28), (142, 54, 30), (140, 53, 26),
+ (145, 60, 6), (139, 55, 9), (135, 48, 20), (138, 41, 24),
+ (127, 50, 30), (112, 37, 41), (116, 38, 38), (121, 40, 36),
+ (124, 42, 21), (122, 26, 27), (129, 5, 15), (119, 7, 19),
+ (81, 14, 6), (64, 15, 6), (47, 17, 6), (57, 38, 23),
+ (67, 34, 15), (90, 46, 21), (112, 56, 0), (133, 56, 2),
+ (139, 49, 0), (142, 50, 1), (154, 33, 6), (150, 25, 7),
+ (142, 18, 8), (137, 17, 16), (136, 19, 25), (139, 17, 32),
+ (117, 59, 107), (100, 76, 103), (84, 93, 100), (72, 142, 118),
+ (46, 122, 146), (6, 86, 159), (19, 82, 135), (28, 71, 88),
+ (22, 62, 87), (31, 41, 68), (39, 57, 71), (51, 65, 78),
+ (64, 74, 99), (61, 96, 116), (58, 112, 124), (85, 103, 115),
+ (121, 97, 85), (155, 93, 56), (161, 46, 41), (169, 59, 22),
+ (184, 47, 13), (203, 25, 11), (161, 31, 9), (155, 42, 12),
+ (135, 31, 38), (117, 40, 56), (81, 65, 65), (81, 79, 90),
+ (60, 111, 115), (57, 115, 155), (28, 93, 135), (25, 40, 131),
+ (37, 37, 127), (88, 40, 116), (110, 45, 49), (108, 26, 30),
+ (105, 14, 21), (96, 9, 28), (84, 7, 25), (78, 18, 17),
+ (70, 22, 48), (49, 22, 63), (14, 31, 57), (12, 41, 83),
+ (11, 66, 105), (0, 138, 135), (5, 135, 185), (5, 134, 192),
+ (25, 146, 157), (3, 156, 135), (25, 159, 152), (36, 116, 167),
+ (55, 94, 159), (63, 70, 99), (68, 70, 69), (81, 62, 29),
+ (56, 39, 21), (25, 9, 9), (15, 21, 11), (44, 35, 6),
+ (78, 36, 0), (120, 27, 9), (147, 18, 22), (159, 20, 27),
+ (161, 4, 15), (147, 2, 9), (144, 16, 17), (138, 32, 10),
+ (135, 51, 7), (138, 66, 18), (143, 97, 37), (145, 92, 24)
+ ),
+
+// 349 4u0022.jpg
+((112, 56, 57), (71, 75, 52), (84, 91, 62), (97, 107, 73),
+ (104, 87, 67), (112, 67, 61), (105, 56, 62), (99, 46, 64),
+ (75, 21, 34), (56, 25, 24), (38, 29, 14), (23, 34, 10),
+ (8, 39, 7), (25, 40, 3), (42, 41, 0), (53, 42, 7),
+ (64, 43, 14), (92, 34, 33), (103, 24, 27), (114, 14, 22),
+ (117, 30, 31), (120, 47, 41), (113, 54, 50), (107, 62, 59),
+ (115, 83, 70), (118, 111, 82), (121, 140, 95), (120, 112, 103),
+ (119, 85, 112), (123, 86, 115), (127, 88, 119), (150, 71, 92),
+ (182, 85, 104), (199, 104, 100), (182, 87, 89), (165, 70, 78),
+ (162, 57, 65), (160, 44, 53), (152, 33, 43), (145, 23, 34),
+ (75, 4, 2), (75, 9, 8), (76, 14, 15), (88, 24, 23),
+ (100, 35, 31), (105, 48, 25), (110, 61, 20), (119, 27, 28),
+ (122, 15, 33), (153, 15, 40), (143, 28, 48), (133, 42, 57),
+ (122, 62, 49), (112, 83, 41), (106, 81, 36), (100, 79, 32),
+ (77, 47, 9), (66, 54, 14), (55, 62, 20), (68, 68, 15),
+ (82, 74, 11), (95, 78, 30), (109, 83, 50), (139, 70, 63),
+ (159, 59, 71), (185, 32, 62), (176, 35, 72), (168, 38, 82),
+ (164, 38, 81), (161, 39, 80), (166, 46, 71), (154, 46, 59),
+ (113, 70, 28), (82, 71, 20), (52, 72, 13), (57, 78, 29),
+ (63, 84, 45), (67, 79, 48), (72, 74, 52), (101, 76, 54),
+ (129, 78, 61), (157, 66, 81), (167, 90, 86), (177, 115, 92),
+ (181, 152, 107), (186, 189, 122), (174, 218, 123), (160, 154, 96),
+ (168, 99, 84), (156, 88, 68), (144, 78, 52), (136, 58, 53),
+ (129, 38, 55), (116, 39, 49), (107, 22, 29), (115, 6, 12),
+ (114, 2, 16), (99, 4, 28), (94, 4, 29), (89, 5, 31),
+ (97, 6, 39), (105, 7, 48), (107, 12, 42), (114, 5, 37),
+ (123, 9, 9), (130, 16, 8), (137, 24, 8), (136, 18, 14),
+ (136, 12, 20), (138, 14, 24), (137, 13, 23), (131, 14, 23),
+ (132, 16, 25), (119, 11, 37), (127, 8, 42), (136, 5, 47),
+ (140, 10, 44), (129, 33, 71), (150, 40, 75), (134, 50, 65),
+ (116, 45, 77), (115, 26, 69), (114, 7, 61), (109, 5, 58),
+ (104, 4, 56), (97, 15, 51), (94, 15, 44), (86, 23, 40),
+ (93, 33, 41), (96, 48, 48), (88, 52, 42), (81, 56, 36),
+ (50, 61, 29), (27, 58, 17), (19, 64, 5), (6, 73, 4),
+ (24, 47, 29), (27, 26, 37), (31, 6, 45), (27, 8, 40),
+ (23, 11, 35), (14, 18, 19), (18, 21, 26), (49, 32, 22),
+ (69, 24, 18), (99, 8, 13), (101, 9, 10), (104, 10, 8),
+ (107, 6, 10), (127, 16, 22), (141, 14, 35), (153, 35, 49),
+ (147, 74, 67), (147, 88, 74), (147, 102, 81), (129, 152, 72),
+ (131, 141, 68), (116, 98, 62), (137, 76, 73), (149, 77, 81),
+ (161, 96, 78), (155, 89, 73), (143, 81, 81), (132, 74, 89),
+ (117, 45, 82), (78, 63, 68), (58, 63, 40), (39, 21, 33),
+ (11, 8, 17), (7, 5, 16), (3, 2, 16), (7, 10, 19),
+ (19, 5, 20), (33, 21, 21), (45, 17, 31), (73, 8, 40),
+ (74, 7, 40), (66, 7, 37), (70, 22, 34), (72, 46, 55),
+ (82, 48, 36), (109, 37, 51), (112, 33, 62), (115, 17, 58),
+ (91, 13, 37), (84, 16, 39), (78, 19, 41), (59, 18, 34),
+ (50, 33, 25), (26, 62, 24), (12, 83, 43), (22, 70, 54),
+ (8, 40, 55), (35, 23, 45), (41, 15, 42), (33, 16, 50),
+ (43, 10, 67), (33, 3, 55), (46, 6, 43), (64, 6, 21),
+ (64, 7, 13), (65, 5, 17), (71, 5, 33), (75, 3, 43),
+ (72, 2, 54), (74, 15, 47), (72, 28, 45), (80, 36, 49),
+ (70, 33, 85), (67, 53, 88), (83, 87, 90), (76, 58, 82),
+ (94, 25, 82), (123, 17, 55), (125, 4, 58), (125, 5, 50),
+ (116, 10, 50), (112, 16, 44), (105, 23, 27), (103, 21, 25),
+ (94, 18, 28), (86, 17, 20), (88, 18, 16), (87, 29, 9),
+ (87, 30, 10), (81, 34, 4), (68, 35, 2), (60, 28, 13),
+ (52, 16, 4), (44, 24, 15), (36, 39, 10), (26, 41, 22),
+ (25, 33, 22), (50, 33, 26), (74, 20, 36), (87, 26, 44),
+ (94, 23, 55), (100, 16, 50), (97, 16, 33), (77, 15, 30),
+ (73, 26, 20), (77, 32, 11), (86, 48, 29), (122, 58, 48),
+ (128, 76, 55), (139, 74, 68), (126, 64, 53), (118, 48, 46),
+ (124, 31, 14), (114, 17, 0), (104, 15, 1), (104, 26, 14),
+ (100, 34, 22), (87, 39, 1), (70, 58, 0), (78, 47, 3)
+ ),
+
+// 350 k2u0217.jpg
+((62, 139, 107), (12, 96, 96), (16, 109, 112), (20, 123, 128),
+ (77, 126, 147), (134, 130, 167), (187, 125, 178), (240, 121, 189),
+ (234, 89, 190), (174, 69, 198), (114, 50, 207), (96, 29, 157),
+ (79, 9, 108), (91, 10, 94), (103, 12, 81), (115, 12, 92),
+ (127, 12, 103), (233, 70, 117), (233, 68, 87), (234, 66, 57),
+ (233, 70, 68), (233, 74, 79), (201, 75, 91), (170, 76, 103),
+ (64, 24, 33), (37, 21, 16), (11, 18, 0), (5, 18, 1),
+ (0, 18, 2), (0, 16, 7), (0, 15, 12), (0, 2, 21),
+ (6, 6, 32), (42, 10, 93), (80, 12, 101), (118, 14, 109),
+ (170, 57, 138), (223, 100, 167), (231, 107, 176), (239, 115, 185),
+ (243, 144, 164), (241, 133, 148), (240, 123, 132), (235, 86, 85),
+ (231, 49, 38), (230, 48, 35), (230, 47, 33), (228, 44, 32),
+ (228, 20, 20), (77, 11, 38), (55, 5, 29), (34, 0, 21),
+ (24, 9, 11), (14, 18, 1), (8, 27, 2), (2, 37, 4),
+ (35, 138, 57), (92, 142, 101), (150, 146, 145), (195, 133, 160),
+ (240, 121, 175), (240, 120, 182), (241, 120, 189), (240, 108, 194),
+ (238, 99, 182), (233, 66, 156), (211, 45, 162), (190, 24, 168),
+ (170, 21, 155), (151, 18, 143), (115, 36, 128), (75, 32, 150),
+ (122, 122, 192), (176, 128, 217), (231, 135, 243), (240, 169, 241),
+ (250, 204, 240), (250, 205, 240), (250, 206, 241), (249, 205, 240),
+ (247, 189, 230), (242, 151, 212), (237, 94, 202), (233, 38, 192),
+ (231, 38, 193), (230, 39, 194), (202, 25, 194), (193, 28, 193),
+ (134, 16, 130), (110, 13, 106), (87, 10, 82), (75, 9, 75),
+ (63, 9, 69), (53, 9, 58), (65, 4, 63), (68, 14, 66),
+ (73, 10, 67), (88, 7, 63), (105, 14, 82), (123, 22, 102),
+ (142, 19, 119), (162, 17, 136), (220, 72, 124), (237, 98, 95),
+ (231, 65, 103), (232, 52, 122), (234, 39, 141), (232, 33, 144),
+ (231, 27, 148), (230, 28, 150), (231, 26, 155), (230, 28, 150),
+ (230, 29, 145), (233, 53, 186), (232, 60, 178), (232, 67, 171),
+ (235, 71, 166), (234, 76, 161), (248, 74, 145), (238, 93, 90),
+ (235, 86, 82), (203, 156, 72), (172, 227, 63), (165, 219, 51),
+ (158, 212, 40), (56, 117, 37), (84, 95, 55), (91, 12, 67),
+ (124, 11, 101), (200, 43, 174), (219, 70, 182), (239, 98, 190),
+ (242, 140, 203), (246, 166, 219), (248, 187, 229), (249, 192, 233),
+ (245, 171, 220), (244, 166, 205), (244, 161, 191), (245, 160, 190),
+ (246, 160, 189), (245, 159, 184), (247, 158, 186), (245, 156, 210),
+ (246, 179, 223), (244, 161, 215), (242, 150, 207), (241, 140, 200),
+ (234, 86, 180), (205, 43, 180), (159, 24, 144), (121, 14, 110),
+ (44, 17, 124), (39, 21, 101), (35, 26, 79), (43, 40, 51),
+ (42, 88, 42), (34, 103, 40), (32, 66, 42), (34, 22, 24),
+ (14, 22, 1), (5, 29, 29), (2, 27, 37), (0, 26, 46),
+ (2, 21, 79), (19, 11, 122), (14, 47, 142), (40, 27, 167),
+ (12, 84, 184), (20, 110, 196), (29, 136, 208), (16, 123, 179),
+ (35, 84, 142), (104, 32, 116), (132, 47, 150), (184, 21, 162),
+ (198, 21, 171), (230, 27, 168), (228, 34, 157), (230, 36, 159),
+ (232, 43, 172), (233, 56, 188), (238, 70, 215), (194, 71, 237),
+ (200, 33, 173), (184, 25, 159), (168, 17, 146), (127, 16, 108),
+ (122, 15, 97), (125, 11, 99), (126, 14, 114), (160, 26, 149),
+ (215, 52, 179), (239, 119, 193), (245, 167, 209), (248, 185, 228),
+ (244, 174, 224), (242, 151, 210), (238, 101, 183), (186, 47, 172),
+ (130, 37, 107), (73, 14, 60), (47, 7, 41), (34, 5, 35),
+ (35, 8, 25), (47, 33, 30), (36, 78, 12), (59, 87, 47),
+ (66, 43, 72), (66, 19, 71), (68, 19, 74), (102, 63, 110),
+ (67, 109, 97), (26, 74, 86), (4, 59, 79), (9, 60, 87),
+ (38, 12, 121), (48, 0, 106), (100, 21, 128), (159, 29, 151),
+ (199, 51, 171), (230, 100, 174), (240, 123, 191), (242, 142, 202),
+ (242, 153, 209), (242, 144, 203), (241, 124, 195), (238, 102, 178),
+ (235, 80, 174), (236, 79, 170), (236, 75, 169), (233, 71, 174),
+ (236, 67, 166), (234, 59, 152), (232, 55, 146), (233, 29, 160),
+ (218, 36, 155), (188, 21, 163), (127, 14, 118), (81, 11, 110),
+ (44, 20, 144), (21, 25, 148), (16, 46, 156), (16, 55, 150),
+ (31, 17, 114), (8, 28, 65), (10, 2, 17), (10, 0, 9),
+ (35, 1, 36), (47, 0, 60), (39, 13, 84), (37, 11, 72),
+ (5, 8, 59), (2, 13, 41), (11, 31, 56), (3, 86, 68)
+ ),
+
+// 351 ku0213.jpg
+((50, 142, 0), (53, 168, 13), (108, 173, 6), (163, 179, 0),
+ (191, 158, 4), (219, 137, 9), (207, 134, 24), (195, 132, 39),
+ (184, 47, 127), (132, 51, 163), (81, 56, 200), (75, 61, 205),
+ (70, 67, 210), (62, 70, 203), (54, 74, 197), (64, 79, 171),
+ (75, 85, 146), (113, 71, 75), (97, 43, 104), (81, 16, 134),
+ (53, 8, 169), (25, 0, 204), (18, 0, 215), (12, 1, 227),
+ (57, 1, 184), (80, 8, 156), (104, 16, 128), (92, 20, 122),
+ (80, 25, 116), (78, 50, 118), (77, 76, 120), (39, 163, 137),
+ (63, 196, 105), (13, 226, 120), (6, 162, 165), (0, 99, 210),
+ (15, 100, 200), (30, 101, 191), (48, 94, 171), (67, 88, 151),
+ (108, 115, 47), (84, 82, 32), (60, 49, 17), (61, 50, 15),
+ (63, 51, 13), (92, 38, 16), (122, 25, 19), (171, 36, 43),
+ (182, 58, 56), (243, 14, 71), (249, 44, 53), (255, 74, 36),
+ (252, 116, 18), (249, 158, 0), (252, 139, 4), (255, 121, 9),
+ (238, 13, 0), (223, 24, 0), (209, 36, 0), (170, 45, 16),
+ (132, 54, 32), (122, 35, 51), (113, 16, 70), (107, 21, 30),
+ (83, 0, 29), (48, 0, 25), (43, 22, 27), (38, 45, 29),
+ (54, 49, 53), (71, 53, 77), (64, 41, 184), (71, 30, 228),
+ (56, 6, 243), (44, 3, 240), (33, 0, 238), (46, 15, 229),
+ (60, 31, 220), (66, 55, 225), (73, 80, 230), (29, 162, 218),
+ (106, 216, 207), (138, 201, 174), (138, 149, 182), (139, 98, 190),
+ (131, 89, 180), (123, 80, 170), (160, 83, 101), (178, 134, 87),
+ (189, 103, 80), (146, 87, 109), (103, 71, 138), (94, 62, 147),
+ (86, 53, 157), (58, 49, 194), (99, 63, 213), (121, 21, 239),
+ (127, 76, 207), (91, 36, 138), (78, 28, 111), (65, 21, 84),
+ (64, 17, 72), (63, 14, 61), (98, 4, 92), (130, 6, 76),
+ (174, 61, 67), (204, 113, 72), (235, 165, 77), (245, 185, 60),
+ (255, 206, 44), (234, 224, 49), (255, 253, 39), (235, 253, 9),
+ (240, 218, 34), (254, 181, 26), (253, 158, 23), (252, 135, 21),
+ (255, 75, 27), (251, 72, 32), (255, 46, 41), (248, 34, 36),
+ (206, 71, 67), (227, 47, 52), (248, 23, 37), (250, 13, 18),
+ (252, 3, 0), (254, 0, 8), (255, 4, 74), (243, 2, 81),
+ (209, 32, 112), (145, 100, 201), (127, 108, 216), (110, 117, 231),
+ (44, 184, 217), (32, 203, 187), (41, 254, 136), (66, 255, 129),
+ (74, 126, 209), (50, 92, 175), (26, 58, 141), (17, 51, 131),
+ (8, 44, 122), (4, 148, 157), (18, 234, 151), (1, 254, 145),
+ (1, 250, 160), (8, 192, 254), (4, 180, 251), (1, 168, 249),
+ (3, 198, 228), (1, 251, 162), (0, 255, 129), (11, 255, 134),
+ (38, 224, 97), (49, 235, 77), (61, 247, 58), (56, 253, 77),
+ (36, 234, 115), (52, 235, 142), (77, 218, 139), (122, 195, 106),
+ (118, 179, 135), (202, 74, 157), (197, 73, 134), (193, 73, 111),
+ (223, 76, 86), (218, 136, 80), (228, 137, 66), (220, 186, 50),
+ (193, 126, 81), (158, 95, 68), (123, 64, 56), (80, 21, 75),
+ (16, 0, 77), (1, 3, 86), (0, 10, 66), (13, 2, 6),
+ (31, 16, 23), (46, 33, 63), (0, 16, 117), (0, 0, 122),
+ (20, 11, 136), (44, 9, 151), (55, 6, 124), (59, 0, 78),
+ (138, 17, 88), (167, 28, 101), (197, 39, 114), (134, 43, 122),
+ (101, 81, 153), (70, 109, 200), (55, 103, 203), (32, 159, 255),
+ (12, 160, 248), (0, 182, 246), (27, 211, 219), (21, 214, 147),
+ (8, 180, 108), (28, 141, 95), (0, 80, 79), (0, 59, 105),
+ (0, 41, 116), (0, 0, 149), (8, 13, 191), (29, 27, 196),
+ (40, 94, 216), (47, 121, 252), (27, 160, 239), (29, 201, 187),
+ (13, 206, 115), (13, 191, 107), (30, 212, 68), (81, 244, 43),
+ (50, 224, 13), (30, 209, 4), (32, 202, 43), (79, 157, 81),
+ (129, 155, 84), (149, 206, 99), (176, 180, 95), (247, 213, 64),
+ (247, 188, 22), (243, 171, 25), (241, 112, 70), (223, 98, 66),
+ (255, 91, 74), (255, 66, 97), (244, 41, 123), (235, 2, 127),
+ (223, 0, 107), (154, 0, 172), (74, 7, 175), (52, 0, 189),
+ (42, 6, 168), (22, 0, 115), (25, 2, 74), (39, 9, 35),
+ (95, 7, 65), (168, 6, 92), (221, 34, 89), (180, 0, 183),
+ (172, 6, 254), (149, 19, 255), (150, 80, 205), (153, 140, 184),
+ (155, 207, 135), (143, 211, 108), (158, 160, 77), (91, 123, 16),
+ (59, 59, 33), (38, 6, 73), (10, 3, 107), (49, 35, 149),
+ (39, 47, 154), (45, 38, 131), (4, 55, 74), (27, 102, 11)
+ ),
+
+// 352 ku0215.jpg
+((48, 23, 27), (38, 9, 27), (59, 18, 33), (80, 28, 40),
+ (81, 46, 72), (83, 65, 105), (74, 47, 109), (65, 30, 114),
+ (87, 60, 141), (117, 38, 116), (147, 16, 92), (104, 10, 69),
+ (62, 5, 46), (54, 11, 43), (47, 17, 41), (49, 23, 45),
+ (51, 30, 49), (71, 55, 84), (52, 63, 93), (33, 72, 103),
+ (44, 79, 87), (55, 87, 72), (45, 83, 63), (35, 79, 54),
+ (22, 67, 38), (37, 65, 48), (53, 64, 58), (51, 37, 78),
+ (50, 10, 98), (44, 9, 99), (38, 9, 101), (40, 7, 96),
+ (22, 27, 57), (32, 41, 14), (26, 37, 14), (20, 33, 15),
+ (12, 22, 16), (5, 12, 18), (2, 13, 19), (0, 15, 20),
+ (21, 19, 66), (13, 21, 66), (6, 23, 67), (21, 31, 54),
+ (36, 40, 41), (51, 44, 37), (66, 49, 33), (77, 49, 46),
+ (102, 45, 36), (169, 46, 31), (186, 38, 18), (204, 30, 5),
+ (204, 37, 9), (205, 45, 13), (205, 39, 26), (206, 33, 39),
+ (228, 61, 45), (219, 37, 24), (210, 13, 4), (192, 12, 8),
+ (175, 11, 12), (167, 12, 11), (159, 14, 11), (134, 10, 12),
+ (124, 14, 13), (117, 17, 2), (108, 22, 3), (100, 28, 4),
+ (97, 27, 7), (94, 27, 10), (93, 28, 10), (90, 29, 24),
+ (106, 38, 49), (117, 49, 54), (129, 61, 60), (145, 53, 46),
+ (162, 46, 33), (167, 43, 35), (173, 41, 37), (187, 34, 37),
+ (187, 24, 51), (133, 11, 60), (103, 26, 43), (74, 41, 26),
+ (60, 44, 23), (47, 47, 21), (10, 51, 7), (25, 99, 12),
+ (5, 51, 5), (20, 32, 9), (35, 14, 13), (48, 7, 6),
+ (62, 0, 0), (63, 33, 9), (67, 27, 15), (94, 14, 27),
+ (103, 19, 32), (109, 17, 38), (117, 8, 31), (126, 0, 24),
+ (133, 1, 14), (141, 2, 5), (158, 8, 0), (177, 6, 0),
+ (200, 13, 30), (186, 10, 22), (173, 8, 14), (159, 14, 11),
+ (146, 20, 8), (129, 12, 5), (127, 2, 0), (99, 0, 0),
+ (96, 18, 14), (99, 20, 25), (102, 17, 22), (106, 15, 20),
+ (118, 29, 15), (150, 28, 5), (156, 22, 13), (157, 24, 15),
+ (149, 67, 19), (137, 47, 20), (126, 27, 22), (122, 25, 24),
+ (118, 23, 27), (101, 24, 42), (67, 20, 30), (50, 5, 36),
+ (22, 18, 33), (10, 30, 54), (18, 30, 52), (26, 31, 51),
+ (46, 19, 36), (89, 27, 32), (128, 37, 36), (153, 49, 48),
+ (206, 26, 37), (206, 26, 35), (207, 26, 33), (200, 30, 34),
+ (193, 35, 36), (192, 31, 37), (176, 19, 50), (146, 37, 58),
+ (147, 41, 53), (159, 30, 9), (174, 29, 4), (189, 28, 0),
+ (189, 29, 37), (178, 43, 40), (149, 18, 49), (111, 10, 52),
+ (103, 15, 55), (84, 16, 70), (65, 18, 86), (70, 31, 110),
+ (91, 17, 102), (98, 20, 96), (109, 17, 54), (119, 21, 62),
+ (124, 23, 65), (131, 45, 120), (131, 52, 136), (131, 60, 152),
+ (127, 63, 149), (133, 63, 135), (163, 52, 95), (122, 61, 66),
+ (83, 82, 64), (76, 86, 68), (69, 90, 73), (73, 79, 75),
+ (68, 56, 68), (39, 21, 33), (23, 11, 21), (25, 15, 14),
+ (24, 0, 3), (14, 8, 12), (12, 22, 23), (6, 35, 43),
+ (16, 34, 48), (16, 50, 51), (19, 55, 41), (16, 68, 29),
+ (13, 50, 43), (10, 48, 42), (7, 46, 41), (1, 29, 33),
+ (3, 22, 20), (6, 32, 5), (1, 22, 3), (8, 17, 16),
+ (4, 7, 12), (11, 10, 6), (38, 35, 0), (53, 61, 24),
+ (84, 97, 44), (79, 113, 62), (40, 110, 82), (71, 107, 71),
+ (96, 103, 72), (86, 132, 83), (63, 135, 71), (41, 132, 62),
+ (16, 110, 58), (19, 97, 81), (48, 85, 104), (53, 125, 113),
+ (136, 159, 149), (84, 83, 88), (52, 72, 81), (29, 59, 67),
+ (24, 65, 49), (6, 83, 41), (19, 86, 55), (9, 94, 63),
+ (16, 86, 62), (53, 71, 75), (93, 65, 53), (101, 21, 48),
+ (117, 13, 36), (148, 17, 33), (158, 19, 14), (155, 16, 9),
+ (135, 4, 12), (132, 10, 23), (119, 0, 36), (117, 7, 42),
+ (117, 8, 39), (90, 20, 30), (50, 22, 36), (25, 40, 43),
+ (19, 45, 42), (24, 61, 43), (29, 63, 38), (62, 75, 47),
+ (83, 68, 49), (106, 76, 14), (163, 74, 44), (167, 85, 47),
+ (168, 76, 27), (194, 40, 30), (173, 35, 9), (141, 31, 18),
+ (119, 36, 28), (80, 37, 18), (42, 12, 24), (38, 16, 29),
+ (38, 24, 39), (49, 53, 26), (103, 44, 30), (134, 46, 26),
+ (151, 53, 50), (134, 79, 48), (85, 78, 112), (104, 91, 83)
+ ),
+
+// 353 s00026.jpg
+((65, 0, 180), (27, 0, 97), (34, 0, 80), (42, 0, 64),
+ (59, 5, 36), (76, 11, 9), (94, 10, 12), (113, 9, 16),
+ (167, 44, 3), (204, 50, 2), (241, 56, 2), (208, 38, 5),
+ (175, 21, 9), (154, 11, 93), (134, 1, 178), (145, 1, 192),
+ (157, 1, 206), (203, 5, 248), (196, 3, 224), (189, 1, 200),
+ (176, 8, 109), (164, 15, 19), (173, 33, 11), (182, 52, 3),
+ (255, 121, 31), (246, 145, 41), (238, 169, 52), (221, 150, 49),
+ (204, 132, 47), (187, 118, 44), (170, 105, 41), (188, 56, 7),
+ (215, 62, 2), (202, 121, 30), (187, 107, 29), (173, 94, 28),
+ (161, 84, 25), (150, 74, 22), (138, 73, 25), (126, 72, 28),
+ (126, 28, 1), (118, 25, 1), (111, 23, 1), (119, 27, 0),
+ (127, 32, 0), (131, 48, 9), (136, 65, 19), (157, 95, 36),
+ (161, 102, 42), (219, 163, 54), (207, 148, 52), (196, 134, 51),
+ (182, 119, 46), (169, 105, 41), (165, 95, 34), (161, 85, 27),
+ (115, 25, 0), (109, 13, 2), (104, 1, 4), (102, 0, 67),
+ (101, 0, 130), (96, 0, 146), (91, 0, 163), (15, 0, 215),
+ (10, 0, 226), (27, 1, 90), (45, 5, 49), (63, 9, 9),
+ (61, 10, 6), (59, 12, 4), (48, 11, 3), (43, 9, 8),
+ (17, 7, 6), (12, 4, 9), (8, 2, 12), (13, 1, 15),
+ (18, 1, 19), (18, 1, 30), (19, 1, 41), (35, 0, 61),
+ (51, 1, 74), (106, 0, 134), (115, 0, 159), (124, 0, 184),
+ (115, 1, 206), (107, 2, 229), (38, 0, 245), (37, 0, 185),
+ (124, 33, 110), (183, 82, 71), (243, 131, 33), (249, 148, 33),
+ (255, 165, 34), (255, 184, 50), (243, 214, 58), (246, 252, 68),
+ (216, 229, 79), (209, 160, 55), (188, 134, 48), (168, 109, 41),
+ (157, 101, 40), (146, 93, 39), (124, 121, 18), (137, 90, 38),
+ (97, 51, 17), (85, 47, 15), (73, 44, 14), (58, 23, 27),
+ (43, 3, 40), (32, 1, 61), (20, 10, 70), (0, 1, 52),
+ (7, 1, 37), (21, 6, 11), (30, 8, 8), (40, 11, 5),
+ (74, 22, 1), (78, 22, 0), (90, 18, 3), (76, 19, 0),
+ (28, 4, 28), (18, 2, 40), (9, 1, 52), (8, 1, 62),
+ (7, 1, 73), (31, 1, 75), (42, 0, 76), (67, 0, 132),
+ (122, 0, 145), (211, 191, 158), (233, 214, 125), (255, 238, 93),
+ (248, 248, 76), (243, 253, 79), (221, 235, 77), (242, 199, 61),
+ (213, 151, 52), (165, 108, 37), (118, 65, 23), (94, 51, 12),
+ (71, 37, 2), (54, 17, 1), (33, 20, 3), (11, 8, 1),
+ (6, 7, 2), (0, 4, 3), (0, 3, 7), (0, 3, 12),
+ (1, 3, 18), (16, 3, 29), (36, 0, 62), (59, 0, 82),
+ (144, 0, 184), (167, 0, 196), (190, 1, 209), (146, 2, 214),
+ (139, 0, 187), (138, 0, 155), (155, 13, 39), (134, 37, 2),
+ (124, 62, 23), (114, 62, 22), (107, 58, 20), (100, 54, 18),
+ (111, 57, 19), (110, 75, 33), (83, 77, 25), (69, 73, 38),
+ (48, 36, 12), (32, 28, 8), (16, 20, 5), (17, 18, 2),
+ (8, 10, 7), (5, 11, 11), (0, 19, 13), (0, 13, 3),
+ (2, 10, 0), (4, 7, 0), (2, 7, 1), (1, 6, 0),
+ (0, 4, 7), (0, 4, 16), (12, 4, 28), (27, 0, 53),
+ (66, 0, 87), (77, 0, 99), (88, 0, 112), (94, 0, 125),
+ (83, 0, 104), (64, 4, 40), (76, 28, 5), (76, 24, 2),
+ (52, 14, 1), (37, 10, 3), (16, 9, 3), (6, 6, 8),
+ (1, 4, 13), (1, 3, 18), (2, 2, 30), (8, 1, 45),
+ (6, 0, 60), (9, 0, 81), (24, 0, 110), (17, 1, 152),
+ (14, 0, 150), (5, 0, 125), (1, 0, 94), (0, 0, 72),
+ (3, 2, 46), (1, 2, 20), (0, 4, 16), (0, 2, 14),
+ (1, 3, 15), (0, 3, 18), (0, 2, 27), (0, 1, 32),
+ (1, 1, 35), (9, 0, 43), (40, 0, 63), (52, 0, 74),
+ (86, 0, 107), (101, 0, 122), (144, 8, 72), (161, 82, 26),
+ (167, 85, 29), (151, 92, 36), (128, 76, 29), (80, 57, 0),
+ (53, 17, 1), (19, 15, 0), (7, 13, 1), (6, 11, 4),
+ (6, 8, 5), (5, 7, 2), (7, 6, 4), (8, 4, 1),
+ (14, 7, 1), (27, 13, 0), (43, 13, 2), (60, 15, 12),
+ (43, 0, 46), (45, 0, 65), (57, 0, 95), (53, 0, 130),
+ (42, 0, 128), (21, 0, 131), (22, 0, 126), (6, 0, 102),
+ (7, 0, 77), (6, 0, 77), (3, 0, 69), (5, 0, 67),
+ (1, 1, 61), (8, 2, 40), (17, 32, 13), (6, 4, 26)
+ ),
+
+// 354 s00043.jpg
+((49, 72, 90), (59, 99, 109), (64, 115, 120), (70, 131, 132),
+ (73, 134, 141), (76, 138, 151), (97, 146, 146), (118, 154, 142),
+ (171, 185, 134), (167, 177, 121), (164, 170, 108), (122, 165, 132),
+ (81, 160, 157), (101, 175, 178), (121, 191, 199), (114, 171, 178),
+ (108, 151, 158), (147, 130, 84), (138, 96, 65), (129, 62, 46),
+ (129, 55, 31), (129, 49, 16), (129, 52, 12), (130, 56, 9),
+ (132, 63, 8), (128, 89, 30), (124, 116, 53), (137, 127, 65),
+ (150, 138, 78), (152, 141, 80), (154, 144, 82), (161, 157, 93),
+ (168, 167, 100), (160, 165, 101), (137, 158, 109), (114, 151, 117),
+ (91, 139, 123), (68, 128, 129), (70, 132, 106), (72, 136, 84),
+ (133, 127, 65), (140, 124, 52), (147, 122, 40), (145, 134, 43),
+ (144, 146, 47), (148, 141, 58), (152, 137, 70), (145, 133, 81),
+ (143, 137, 105), (118, 102, 89), (101, 115, 75), (84, 129, 62),
+ (64, 82, 52), (45, 35, 43), (42, 32, 41), (40, 30, 39),
+ (37, 22, 29), (40, 30, 37), (43, 38, 45), (44, 46, 55),
+ (46, 54, 65), (48, 61, 74), (50, 69, 83), (115, 85, 74),
+ (130, 78, 91), (129, 85, 56), (136, 96, 45), (144, 108, 34),
+ (141, 110, 32), (139, 112, 31), (134, 127, 37), (133, 131, 18),
+ (130, 128, 9), (125, 118, 6), (120, 109, 3), (113, 99, 6),
+ (106, 89, 9), (110, 78, 8), (114, 68, 8), (113, 65, 1),
+ (121, 56, 2), (102, 52, 1), (87, 75, 7), (73, 98, 14),
+ (61, 81, 19), (50, 65, 24), (48, 71, 85), (52, 84, 99),
+ (74, 134, 145), (101, 139, 130), (129, 144, 115), (141, 150, 108),
+ (153, 156, 101), (157, 158, 98), (151, 139, 79), (154, 131, 61),
+ (139, 110, 32), (114, 70, 7), (93, 62, 9), (72, 55, 12),
+ (71, 57, 11), (71, 59, 11), (67, 79, 7), (85, 87, 0),
+ (125, 131, 67), (125, 132, 88), (125, 133, 110), (117, 115, 100),
+ (110, 97, 91), (57, 84, 79), (44, 60, 73), (46, 52, 64),
+ (44, 44, 54), (47, 57, 69), (49, 68, 81), (51, 79, 93),
+ (65, 125, 125), (69, 153, 137), (72, 153, 138), (73, 157, 142),
+ (82, 147, 151), (105, 140, 127), (128, 133, 103), (133, 134, 96),
+ (139, 135, 90), (155, 142, 74), (149, 119, 46), (143, 98, 33),
+ (132, 65, 23), (85, 40, 0), (77, 37, 0), (70, 34, 0),
+ (56, 28, 4), (48, 23, 18), (39, 26, 33), (37, 35, 49),
+ (43, 59, 84), (46, 65, 83), (50, 72, 83), (82, 71, 71),
+ (115, 71, 60), (129, 68, 37), (134, 56, 17), (125, 43, 3),
+ (111, 42, 0), (90, 33, 4), (81, 32, 5), (72, 32, 6),
+ (72, 55, 3), (89, 64, 7), (78, 73, 5), (70, 64, 4),
+ (56, 60, 1), (51, 46, 0), (47, 33, 0), (36, 21, 16),
+ (39, 24, 29), (37, 39, 54), (42, 51, 68), (48, 74, 89),
+ (57, 112, 72), (97, 94, 17), (100, 83, 12), (104, 73, 8),
+ (88, 53, 13), (78, 39, 22), (60, 31, 25), (44, 34, 42),
+ (38, 30, 43), (36, 26, 38), (35, 23, 33), (38, 22, 25),
+ (54, 23, 18), (63, 27, 13), (70, 27, 8), (77, 29, 6),
+ (76, 30, 4), (66, 30, 4), (58, 25, 10), (39, 21, 19),
+ (35, 19, 19), (35, 20, 17), (37, 23, 12), (49, 37, 0),
+ (37, 54, 2), (43, 45, 1), (49, 36, 1), (47, 23, 19),
+ (45, 34, 40), (53, 48, 54), (50, 72, 83), (59, 124, 81),
+ (58, 127, 83), (65, 123, 124), (62, 110, 112), (53, 85, 98),
+ (50, 76, 89), (50, 59, 64), (54, 45, 46), (56, 26, 18),
+ (56, 26, 16), (41, 30, 38), (43, 38, 45), (44, 41, 50),
+ (44, 42, 53), (42, 39, 50), (41, 31, 40), (39, 23, 26),
+ (35, 21, 21), (36, 22, 13), (50, 29, 0), (69, 36, 3),
+ (73, 51, 1), (92, 65, 38), (123, 101, 44), (148, 132, 73),
+ (158, 149, 80), (166, 157, 88), (162, 158, 87), (158, 150, 78),
+ (152, 148, 51), (138, 118, 32), (124, 95, 19), (120, 69, 14),
+ (113, 44, 11), (99, 40, 0), (100, 64, 2), (111, 82, 2),
+ (101, 84, 0), (98, 90, 0), (104, 84, 11), (124, 95, 19),
+ (137, 110, 29), (153, 130, 50), (159, 146, 67), (158, 151, 63),
+ (164, 158, 82), (165, 159, 81), (160, 159, 69), (165, 159, 81),
+ (166, 160, 82), (163, 160, 89), (164, 160, 89), (168, 164, 90),
+ (169, 169, 95), (166, 172, 108), (165, 171, 107), (166, 166, 96),
+ (158, 150, 78), (155, 137, 65), (144, 119, 37), (126, 101, 21),
+ (140, 83, 30), (138, 82, 33), (143, 110, 57), (141, 92, 36)
+ ),
+
+// 355 s00118.jpg
+((209, 120, 106), (219, 128, 109), (213, 128, 107), (207, 129, 106),
+ (190, 115, 96), (174, 101, 86), (164, 91, 74), (154, 81, 62),
+ (141, 77, 68), (142, 81, 71), (144, 86, 74), (157, 89, 80),
+ (170, 93, 87), (189, 107, 95), (208, 121, 104), (199, 114, 117),
+ (190, 108, 131), (161, 113, 155), (155, 123, 170), (150, 133, 185),
+ (142, 145, 190), (135, 157, 196), (137, 154, 196), (140, 151, 196),
+ (160, 133, 186), (178, 126, 172), (197, 119, 158), (197, 113, 135),
+ (198, 107, 112), (193, 104, 110), (189, 102, 108), (150, 83, 100),
+ (134, 77, 94), (114, 74, 98), (119, 70, 83), (125, 66, 68),
+ (119, 67, 65), (113, 68, 62), (106, 71, 66), (99, 74, 70),
+ (30, 82, 103), (27, 83, 103), (24, 85, 103), (59, 94, 106),
+ (95, 104, 109), (105, 100, 116), (115, 97, 123), (126, 104, 143),
+ (136, 124, 174), (177, 182, 202), (179, 198, 207), (182, 214, 213),
+ (217, 212, 199), (252, 210, 186), (244, 215, 177), (237, 220, 168),
+ (255, 208, 141), (234, 175, 127), (214, 143, 113), (206, 127, 107),
+ (199, 112, 102), (193, 107, 99), (187, 102, 97), (164, 86, 86),
+ (148, 78, 86), (144, 82, 103), (120, 94, 109), (96, 106, 115),
+ (64, 93, 108), (33, 81, 101), (8, 72, 82), (9, 21, 47),
+ (17, 15, 18), (10, 11, 18), (3, 7, 18), (1, 18, 51),
+ (0, 30, 85), (1, 38, 85), (2, 46, 85), (15, 70, 75),
+ (34, 73, 90), (94, 92, 116), (136, 99, 120), (178, 107, 125),
+ (201, 115, 127), (224, 123, 129), (245, 145, 145), (250, 146, 145),
+ (248, 204, 193), (240, 219, 216), (232, 235, 240), (209, 223, 228),
+ (187, 212, 217), (191, 209, 197), (138, 169, 190), (104, 131, 160),
+ (81, 108, 115), (9, 109, 99), (7, 94, 76), (5, 79, 54),
+ (7, 66, 40), (10, 54, 27), (13, 48, 6), (62, 50, 36),
+ (104, 53, 60), (91, 64, 79), (78, 76, 98), (82, 86, 115),
+ (86, 96, 132), (77, 96, 138), (103, 101, 140), (135, 122, 139),
+ (152, 167, 124), (190, 130, 106), (185, 116, 109), (180, 103, 113),
+ (146, 88, 113), (134, 80, 103), (111, 77, 104), (116, 78, 103),
+ (194, 104, 116), (215, 121, 124), (236, 139, 132), (237, 148, 127),
+ (238, 158, 123), (241, 181, 121), (238, 196, 124), (244, 206, 123),
+ (233, 194, 153), (214, 170, 141), (225, 163, 143), (236, 156, 145),
+ (238, 154, 120), (223, 139, 111), (223, 132, 111), (228, 138, 112),
+ (235, 133, 128), (205, 124, 145), (175, 116, 162), (158, 115, 161),
+ (142, 115, 160), (106, 140, 177), (86, 141, 148), (35, 129, 95),
+ (11, 101, 63), (48, 50, 36), (56, 61, 46), (65, 72, 56),
+ (111, 107, 72), (148, 91, 80), (175, 108, 91), (197, 120, 100),
+ (216, 134, 110), (216, 131, 109), (217, 129, 109), (210, 116, 114),
+ (205, 119, 118), (183, 111, 148), (140, 113, 158), (76, 126, 161),
+ (28, 112, 122), (10, 124, 124), (11, 107, 113), (12, 90, 102),
+ (10, 87, 105), (23, 78, 134), (36, 125, 139), (91, 147, 164),
+ (170, 127, 207), (182, 129, 194), (195, 131, 181), (200, 120, 157),
+ (201, 117, 150), (193, 108, 129), (202, 113, 115), (177, 101, 127),
+ (143, 102, 142), (101, 89, 125), (72, 95, 137), (47, 93, 145),
+ (25, 60, 141), (11, 89, 127), (19, 123, 136), (19, 131, 132),
+ (102, 145, 179), (114, 154, 184), (127, 164, 190), (183, 185, 135),
+ (221, 155, 121), (212, 147, 115), (206, 134, 109), (206, 118, 104),
+ (191, 109, 95), (184, 105, 92), (177, 105, 90), (154, 98, 83),
+ (159, 93, 81), (160, 90, 82), (173, 95, 91), (199, 101, 102),
+ (203, 112, 107), (199, 109, 108), (188, 102, 105), (175, 93, 95),
+ (145, 81, 97), (136, 78, 93), (140, 75, 81), (132, 70, 71),
+ (127, 67, 66), (128, 71, 64), (126, 68, 64), (127, 65, 66),
+ (130, 69, 68), (134, 76, 72), (139, 79, 69), (132, 73, 67),
+ (127, 67, 66), (126, 69, 62), (125, 67, 63), (124, 66, 62),
+ (119, 63, 64), (114, 61, 67), (111, 60, 56), (109, 58, 57),
+ (82, 65, 55), (50, 93, 39), (41, 102, 42), (44, 115, 47),
+ (48, 83, 77), (27, 71, 84), (10, 62, 73), (16, 25, 42),
+ (27, 27, 39), (57, 35, 38), (94, 52, 56), (112, 62, 71),
+ (113, 69, 86), (124, 70, 84), (128, 67, 72), (124, 65, 69),
+ (111, 59, 63), (88, 46, 47), (68, 36, 37), (39, 25, 25),
+ (12, 20, 9), (1, 23, 0), (20, 22, 11), (29, 30, 14),
+ (63, 33, 31), (69, 50, 44), (59, 51, 64), (68, 60, 73),
+ (80, 65, 84), (90, 75, 94), (103, 68, 92), (140, 82, 94)
+ ),
+
+// 356 s00138.jpg
+((247, 164, 0), (176, 98, 76), (170, 92, 66), (164, 87, 57),
+ (158, 82, 58), (153, 78, 59), (154, 78, 62), (155, 79, 65),
+ (139, 66, 59), (133, 63, 59), (128, 60, 59), (144, 63, 46),
+ (160, 67, 33), (178, 77, 28), (197, 87, 24), (206, 96, 23),
+ (216, 105, 23), (147, 188, 48), (149, 138, 68), (152, 88, 88),
+ (163, 91, 78), (175, 95, 68), (186, 97, 50), (197, 100, 32),
+ (234, 118, 15), (236, 121, 10), (239, 124, 5), (229, 131, 2),
+ (219, 139, 0), (192, 168, 18), (166, 198, 37), (122, 226, 27),
+ (64, 219, 19), (164, 222, 23), (184, 218, 22), (204, 214, 21),
+ (226, 206, 16), (248, 199, 11), (247, 196, 8), (247, 193, 5),
+ (249, 191, 6), (252, 186, 11), (255, 182, 16), (253, 179, 10),
+ (252, 176, 5), (251, 178, 4), (251, 180, 4), (250, 179, 1),
+ (250, 184, 2), (254, 180, 5), (253, 175, 4), (253, 170, 4),
+ (246, 163, 8), (239, 157, 13), (232, 139, 24), (225, 121, 36),
+ (197, 100, 55), (214, 108, 41), (231, 117, 28), (230, 115, 18),
+ (230, 113, 8), (228, 111, 6), (227, 110, 5), (223, 107, 0),
+ (222, 105, 10), (179, 82, 27), (164, 72, 33), (149, 63, 40),
+ (139, 59, 43), (129, 55, 46), (112, 48, 49), (111, 46, 50),
+ (131, 55, 42), (152, 63, 34), (173, 72, 26), (193, 96, 16),
+ (214, 120, 6), (227, 132, 6), (241, 145, 7), (251, 156, 4),
+ (251, 156, 2), (237, 122, 5), (200, 96, 19), (164, 70, 34),
+ (146, 62, 39), (128, 54, 45), (102, 45, 54), (83, 38, 59),
+ (69, 34, 67), (67, 33, 67), (66, 32, 67), (63, 31, 69),
+ (61, 30, 71), (56, 29, 72), (52, 29, 75), (56, 29, 72),
+ (55, 27, 68), (56, 29, 74), (48, 26, 76), (40, 23, 78),
+ (41, 23, 78), (43, 24, 79), (45, 27, 79), (53, 29, 77),
+ (64, 30, 65), (76, 35, 61), (89, 41, 57), (99, 44, 54),
+ (109, 47, 52), (127, 50, 34), (152, 58, 22), (171, 80, 0),
+ (213, 116, 0), (248, 186, 5), (246, 192, 11), (245, 199, 18),
+ (227, 211, 14), (192, 206, 9), (211, 201, 8), (238, 179, 0),
+ (250, 169, 0), (250, 160, 0), (250, 152, 1), (248, 148, 1),
+ (247, 145, 1), (242, 130, 4), (233, 121, 11), (227, 117, 4),
+ (227, 117, 2), (226, 124, 0), (230, 127, 1), (235, 130, 2),
+ (245, 140, 0), (248, 143, 2), (252, 150, 6), (253, 153, 7),
+ (255, 169, 4), (255, 171, 8), (255, 173, 12), (255, 172, 9),
+ (255, 171, 6), (253, 165, 3), (250, 151, 21), (246, 136, 25),
+ (218, 108, 23), (137, 49, 9), (129, 45, 17), (121, 42, 25),
+ (113, 46, 38), (103, 43, 45), (99, 40, 46), (99, 43, 54),
+ (100, 44, 55), (101, 46, 58), (102, 48, 62), (105, 45, 55),
+ (107, 46, 53), (112, 48, 49), (115, 50, 48), (122, 51, 47),
+ (126, 53, 46), (129, 55, 44), (129, 54, 43), (130, 53, 43),
+ (132, 51, 32), (134, 52, 30), (136, 57, 42), (138, 56, 32),
+ (149, 62, 35), (155, 64, 34), (161, 67, 33), (175, 74, 28),
+ (189, 83, 25), (220, 102, 14), (221, 104, 11), (223, 107, 8),
+ (219, 104, 11), (192, 86, 34), (154, 74, 49), (126, 53, 46),
+ (125, 52, 46), (131, 54, 44), (145, 60, 39), (156, 62, 26),
+ (215, 99, 14), (221, 104, 12), (228, 110, 10), (241, 129, 3),
+ (247, 140, 0), (246, 138, 3), (239, 131, 5), (229, 112, 7),
+ (218, 104, 5), (182, 74, 12), (163, 62, 16), (155, 62, 5),
+ (164, 65, 0), (181, 75, 0), (211, 103, 0), (232, 128, 0),
+ (242, 137, 9), (247, 145, 1), (237, 134, 5), (228, 124, 0),
+ (219, 108, 0), (203, 93, 14), (167, 72, 18), (139, 58, 39),
+ (120, 52, 49), (101, 44, 53), (92, 41, 58), (89, 40, 59),
+ (89, 40, 59), (89, 40, 59), (87, 40, 60), (86, 37, 56),
+ (84, 39, 60), (80, 37, 64), (71, 34, 65), (77, 37, 63),
+ (79, 34, 55), (91, 40, 59), (106, 45, 52), (118, 48, 40),
+ (149, 59, 32), (164, 92, 0), (211, 128, 0), (239, 154, 12),
+ (252, 153, 34), (253, 159, 37), (255, 163, 60), (236, 138, 51),
+ (182, 98, 70), (141, 74, 68), (108, 49, 55), (97, 43, 56),
+ (88, 41, 61), (79, 42, 75), (59, 32, 77), (57, 30, 75),
+ (63, 31, 70), (67, 33, 68), (72, 33, 64), (83, 32, 49),
+ (69, 21, 37), (54, 11, 38), (83, 10, 0), (87, 19, 6),
+ (96, 34, 37), (91, 40, 55), (97, 43, 57), (99, 43, 54),
+ (109, 47, 52), (125, 57, 54), (139, 68, 48), (168, 95, 62)
+ ),
+
+// 357 s00149.jpg
+((145, 15, 25), (124, 27, 21), (102, 17, 21), (80, 8, 22),
+ (57, 4, 25), (35, 1, 28), (26, 3, 30), (18, 5, 33),
+ (0, 23, 29), (3, 27, 33), (6, 31, 38), (8, 36, 36),
+ (11, 42, 34), (20, 35, 32), (30, 28, 31), (23, 24, 30),
+ (17, 20, 29), (3, 4, 24), (2, 2, 23), (2, 0, 22),
+ (3, 0, 22), (4, 0, 23), (4, 0, 23), (5, 0, 23),
+ (26, 3, 32), (47, 3, 28), (69, 4, 24), (113, 13, 56),
+ (158, 22, 88), (170, 25, 99), (182, 29, 111), (230, 13, 100),
+ (249, 6, 90), (253, 2, 82), (247, 3, 79), (241, 4, 76),
+ (236, 7, 87), (231, 11, 98), (229, 14, 104), (228, 17, 110),
+ (187, 46, 142), (175, 48, 141), (163, 50, 140), (111, 29, 93),
+ (60, 8, 46), (55, 6, 41), (51, 4, 36), (36, 0, 28),
+ (34, 0, 25), (34, 23, 27), (27, 32, 36), (20, 41, 46),
+ (21, 56, 44), (23, 72, 42), (22, 73, 42), (21, 75, 43),
+ (9, 61, 39), (4, 43, 32), (0, 26, 25), (0, 15, 24),
+ (1, 4, 23), (1, 2, 23), (2, 0, 24), (0, 0, 24),
+ (0, 5, 27), (5, 17, 39), (4, 28, 50), (4, 40, 62),
+ (7, 40, 64), (11, 41, 67), (18, 41, 72), (13, 30, 56),
+ (10, 14, 41), (17, 13, 36), (25, 12, 32), (23, 7, 27),
+ (22, 3, 23), (18, 1, 23), (15, 0, 23), (6, 1, 24),
+ (1, 9, 28), (3, 26, 34), (2, 38, 37), (1, 51, 40),
+ (0, 55, 45), (0, 60, 50), (0, 47, 63), (7, 43, 67),
+ (36, 44, 83), (26, 51, 86), (17, 58, 90), (15, 56, 86),
+ (13, 54, 82), (26, 31, 61), (44, 17, 52), (57, 7, 42),
+ (52, 5, 25), (53, 18, 24), (69, 20, 24), (85, 23, 24),
+ (103, 27, 58), (121, 31, 93), (181, 26, 104), (225, 24, 120),
+ (243, 15, 113), (235, 15, 111), (227, 16, 109), (222, 15, 103),
+ (217, 15, 97), (185, 1, 51), (128, 1, 31), (77, 0, 32),
+ (47, 4, 23), (7, 1, 27), (5, 3, 26), (4, 5, 25),
+ (2, 5, 24), (3, 4, 24), (15, 5, 32), (27, 2, 31),
+ (22, 6, 33), (18, 10, 36), (14, 14, 40), (19, 20, 49),
+ (24, 27, 58), (49, 23, 62), (50, 24, 61), (55, 27, 67),
+ (93, 51, 115), (192, 25, 105), (201, 15, 89), (211, 6, 73),
+ (221, 14, 30), (216, 10, 30), (197, 15, 27), (138, 41, 22),
+ (86, 10, 22), (70, 5, 23), (55, 1, 25), (48, 4, 24),
+ (42, 8, 24), (21, 7, 30), (7, 13, 37), (2, 29, 46),
+ (13, 45, 44), (1, 49, 59), (1, 41, 56), (2, 33, 53),
+ (1, 30, 44), (2, 19, 39), (4, 10, 34), (1, 9, 30),
+ (16, 2, 25), (24, 1, 24), (32, 0, 23), (47, 2, 23),
+ (65, 1, 28), (81, 0, 33), (129, 6, 26), (194, 6, 31),
+ (242, 33, 26), (249, 92, 23), (247, 93, 23), (246, 95, 24),
+ (227, 89, 26), (206, 76, 14), (177, 69, 30), (152, 65, 35),
+ (127, 30, 24), (126, 29, 23), (125, 28, 22), (124, 30, 22),
+ (103, 21, 23), (74, 8, 46), (56, 14, 52), (22, 22, 50),
+ (11, 23, 37), (4, 22, 36), (8, 16, 39), (5, 19, 32),
+ (5, 17, 29), (19, 13, 25), (37, 14, 24), (63, 18, 23),
+ (164, 60, 23), (199, 58, 23), (235, 56, 23), (248, 70, 22),
+ (250, 62, 24), (218, 20, 107), (221, 24, 116), (188, 45, 137),
+ (173, 25, 101), (141, 5, 53), (174, 0, 37), (172, 5, 61),
+ (133, 23, 84), (115, 31, 91), (38, 86, 64), (38, 62, 46),
+ (28, 49, 42), (24, 37, 27), (29, 31, 26), (39, 28, 24),
+ (57, 21, 21), (76, 25, 22), (101, 28, 22), (142, 51, 24),
+ (204, 45, 41), (223, 19, 28), (233, 19, 29), (241, 2, 44),
+ (244, 0, 54), (249, 0, 68), (254, 0, 72), (248, 0, 63),
+ (243, 2, 71), (240, 1, 68), (187, 1, 50), (177, 0, 42),
+ (98, 3, 27), (70, 12, 52), (52, 39, 83), (30, 44, 79),
+ (0, 63, 80), (2, 83, 110), (25, 109, 173), (69, 133, 230),
+ (36, 125, 205), (22, 84, 131), (4, 81, 107), (1, 52, 69),
+ (0, 34, 48), (0, 21, 35), (1, 9, 30), (6, 1, 23),
+ (14, 0, 23), (16, 0, 24), (28, 0, 25), (34, 0, 24),
+ (36, 1, 25), (38, 5, 22), (58, 10, 24), (83, 16, 23),
+ (120, 15, 22), (176, 0, 36), (208, 19, 26), (222, 18, 27),
+ (223, 17, 27), (219, 15, 27), (195, 0, 40), (144, 1, 44),
+ (105, 3, 27), (68, 12, 21), (0, 30, 32), (33, 19, 19)
+ ),
+// 358 vchira_0001.jpg
+((157, 75, 51), (218, 60, 206), (229, 48, 230), (241, 37, 255),
+ (244, 28, 248), (248, 20, 241), (243, 21, 232), (239, 22, 223),
+ (192, 66, 251), (120, 114, 248), (48, 163, 246), (33, 182, 244),
+ (18, 201, 243), (20, 204, 244), (22, 208, 246), (18, 226, 250),
+ (15, 245, 255), (18, 244, 224), (38, 230, 213), (58, 216, 202),
+ (90, 223, 199), (122, 230, 196), (122, 240, 177), (123, 250, 159),
+ (96, 250, 154), (85, 251, 174), (74, 253, 195), (46, 236, 225),
+ (18, 220, 255), (26, 219, 250), (35, 219, 245), (74, 238, 201),
+ (94, 250, 185), (158, 221, 174), (142, 238, 162), (127, 255, 151),
+ (144, 225, 144), (162, 195, 138), (191, 195, 151), (220, 195, 164),
+ (236, 166, 117), (242, 188, 93), (248, 211, 70), (250, 233, 35),
+ (253, 255, 0), (253, 242, 11), (254, 229, 23), (248, 207, 19),
+ (241, 200, 46), (226, 199, 94), (209, 191, 101), (193, 184, 109),
+ (133, 197, 149), (74, 210, 190), (41, 219, 205), (8, 229, 220),
+ (22, 209, 182), (79, 212, 183), (136, 215, 184), (165, 186, 191),
+ (195, 157, 198), (220, 149, 199), (246, 141, 200), (242, 139, 158),
+ (215, 138, 190), (194, 136, 184), (219, 100, 216), (244, 64, 249),
+ (240, 59, 243), (237, 55, 238), (233, 21, 227), (208, 13, 229),
+ (123, 13, 164), (137, 6, 158), (151, 0, 153), (170, 26, 150),
+ (190, 52, 147), (204, 85, 147), (219, 119, 147), (202, 132, 96),
+ (190, 91, 52), (166, 57, 136), (185, 73, 172), (205, 90, 209),
+ (213, 94, 196), (222, 98, 184), (232, 126, 128), (248, 146, 82),
+ (249, 190, 52), (251, 160, 88), (254, 131, 124), (251, 91, 142),
+ (248, 52, 160), (241, 40, 208), (232, 15, 207), (208, 16, 215),
+ (197, 0, 154), (113, 11, 74), (120, 48, 37), (128, 85, 0),
+ (132, 105, 0), (137, 125, 0), (164, 181, 4), (175, 179, 6),
+ (204, 236, 11), (220, 232, 7), (236, 229, 3), (233, 212, 4),
+ (231, 196, 6), (240, 187, 19), (241, 185, 50), (221, 215, 55),
+ (212, 220, 101), (166, 182, 135), (144, 155, 140), (122, 129, 145),
+ (111, 78, 61), (79, 22, 57), (64, 0, 92), (100, 17, 107),
+ (151, 17, 86), (152, 14, 100), (154, 12, 114), (159, 22, 122),
+ (164, 32, 131), (210, 27, 141), (220, 20, 217), (209, 7, 217),
+ (228, 6, 227), (220, 9, 228), (215, 20, 203), (211, 31, 178),
+ (198, 28, 99), (138, 43, 51), (136, 93, 0), (118, 97, 16),
+ (72, 102, 48), (58, 91, 24), (45, 80, 0), (40, 81, 4),
+ (36, 82, 9), (39, 55, 0), (19, 49, 0), (13, 49, 23),
+ (0, 63, 50), (37, 145, 218), (35, 152, 222), (34, 159, 226),
+ (4, 170, 208), (3, 125, 176), (10, 42, 127), (29, 59, 123),
+ (114, 18, 167), (133, 32, 204), (153, 47, 241), (191, 8, 223),
+ (203, 6, 236), (210, 21, 238), (177, 72, 200), (161, 59, 221),
+ (138, 62, 212), (64, 60, 147), (61, 52, 125), (59, 44, 103),
+ (1, 68, 35), (31, 45, 9), (21, 10, 18), (18, 9, 14),
+ (5, 7, 0), (4, 3, 11), (3, 0, 22), (15, 21, 45),
+ (30, 20, 70), (37, 35, 46), (63, 4, 0), (68, 0, 5),
+ (86, 10, 36), (124, 18, 67), (146, 53, 142), (95, 130, 184),
+ (104, 208, 171), (99, 232, 187), (88, 216, 245), (47, 193, 252),
+ (111, 172, 237), (141, 133, 238), (172, 94, 240), (207, 50, 243),
+ (229, 29, 242), (172, 38, 247), (143, 43, 251), (99, 92, 234),
+ (76, 171, 229), (41, 178, 214), (36, 187, 146), (87, 193, 95),
+ (154, 188, 6), (181, 187, 3), (191, 185, 1), (212, 165, 23),
+ (237, 113, 77), (231, 79, 104), (234, 57, 135), (238, 14, 175),
+ (232, 42, 166), (241, 93, 125), (255, 189, 83), (233, 239, 55),
+ (231, 248, 46), (215, 231, 96), (199, 227, 127), (201, 235, 141),
+ (162, 218, 145), (151, 251, 127), (179, 245, 113), (173, 239, 89),
+ (155, 202, 12), (172, 144, 19), (139, 96, 2), (149, 114, 10),
+ (185, 149, 11), (251, 199, 35), (228, 236, 75), (206, 245, 128),
+ (164, 203, 159), (138, 216, 200), (105, 181, 241), (120, 176, 235),
+ (156, 200, 201), (199, 216, 200), (200, 222, 173), (172, 203, 195),
+ (168, 135, 216), (145, 93, 240), (146, 51, 195), (105, 20, 165),
+ (118, 0, 140), (71, 0, 96), (63, 0, 101), (49, 24, 63),
+ (30, 24, 58), (41, 0, 17), (60, 39, 0), (69, 35, 0),
+ (92, 78, 0), (96, 115, 7), (96, 187, 68), (92, 226, 115),
+ (40, 194, 134), (75, 104, 110), (111, 61, 62), (107, 0, 92),
+ (106, 0, 81), (126, 19, 9), (108, 21, 14), (66, 0, 19)
+ ),
+
+// 359 vchira_0003.jpg
+((85, 39, 189), (141, 23, 195), (149, 11, 167), (158, 0, 139),
+ (147, 0, 134), (137, 0, 130), (131, 2, 134), (126, 4, 138),
+ (90, 12, 148), (99, 9, 142), (109, 6, 137), (111, 3, 132),
+ (113, 1, 127), (123, 3, 111), (133, 6, 95), (141, 19, 77),
+ (149, 32, 59), (154, 81, 12), (155, 90, 11), (157, 100, 10),
+ (144, 105, 7), (131, 110, 5), (131, 110, 2), (132, 111, 0),
+ (156, 143, 3), (168, 161, 21), (180, 179, 39), (217, 202, 35),
+ (255, 225, 32), (255, 228, 29), (255, 232, 27), (255, 231, 20),
+ (245, 218, 7), (191, 174, 6), (178, 155, 5), (165, 137, 4),
+ (155, 130, 8), (146, 124, 13), (136, 111, 8), (127, 98, 4),
+ (147, 45, 33), (128, 24, 81), (110, 4, 130), (103, 15, 155),
+ (97, 26, 180), (94, 26, 173), (91, 27, 167), (95, 8, 113),
+ (129, 37, 52), (162, 92, 30), (168, 110, 22), (175, 128, 14),
+ (186, 146, 13), (198, 164, 13), (199, 168, 21), (200, 172, 29),
+ (183, 126, 21), (188, 85, 57), (193, 45, 93), (192, 31, 113),
+ (191, 18, 134), (191, 24, 122), (191, 30, 110), (183, 34, 98),
+ (193, 36, 87), (196, 34, 91), (195, 32, 98), (195, 30, 106),
+ (188, 25, 112), (181, 21, 119), (168, 0, 131), (135, 9, 152),
+ (97, 14, 154), (100, 7, 136), (104, 1, 119), (105, 1, 111),
+ (107, 2, 103), (110, 1, 104), (114, 0, 106), (125, 4, 109),
+ (148, 12, 88), (137, 28, 49), (134, 41, 39), (131, 55, 29),
+ (125, 61, 29), (119, 67, 30), (111, 52, 22), (109, 43, 17),
+ (77, 13, 4), (78, 29, 4), (79, 46, 5), (88, 56, 7),
+ (98, 66, 9), (107, 75, 0), (127, 100, 0), (140, 134, 0),
+ (174, 158, 3), (242, 123, 83), (232, 108, 80), (223, 93, 77),
+ (208, 77, 69), (194, 61, 62), (175, 57, 53), (174, 43, 61),
+ (193, 66, 77), (208, 73, 80), (224, 81, 83), (204, 62, 79),
+ (185, 44, 76), (177, 33, 86), (165, 52, 56), (148, 71, 19),
+ (126, 71, 7), (116, 92, 2), (115, 93, 3), (115, 94, 5),
+ (115, 96, 4), (120, 94, 0), (150, 95, 31), (161, 55, 65),
+ (165, 13, 96), (169, 25, 101), (173, 38, 107), (173, 38, 97),
+ (174, 38, 88), (177, 66, 47), (189, 104, 21), (218, 147, 23),
+ (232, 154, 30), (214, 184, 10), (213, 194, 10), (212, 205, 11),
+ (237, 203, 18), (248, 208, 14), (244, 191, 27), (237, 141, 54),
+ (233, 132, 50), (220, 135, 38), (208, 138, 27), (195, 130, 18),
+ (183, 123, 9), (156, 104, 21), (118, 72, 22), (121, 65, 6),
+ (119, 48, 0), (118, 0, 69), (118, 0, 75), (118, 0, 82),
+ (125, 0, 87), (125, 4, 97), (138, 2, 104), (147, 5, 113),
+ (159, 27, 103), (162, 36, 93), (165, 46, 84), (161, 58, 51),
+ (162, 94, 33), (167, 110, 23), (172, 121, 6), (172, 119, 17),
+ (178, 112, 25), (162, 68, 34), (165, 58, 45), (169, 48, 57),
+ (164, 41, 62), (158, 25, 88), (123, 15, 127), (93, 29, 167),
+ (70, 82, 218), (62, 99, 220), (55, 116, 223), (125, 72, 224),
+ (143, 17, 179), (158, 0, 139), (173, 5, 126), (210, 42, 101),
+ (220, 66, 102), (235, 118, 83), (219, 151, 54), (244, 201, 34),
+ (255, 220, 34), (255, 249, 34), (255, 243, 21), (249, 214, 28),
+ (239, 153, 40), (232, 143, 44), (226, 134, 49), (208, 100, 51),
+ (187, 79, 43), (171, 45, 69), (154, 22, 71), (138, 0, 88),
+ (136, 0, 103), (131, 9, 118), (126, 4, 123), (148, 1, 118),
+ (162, 8, 120), (161, 5, 114), (143, 7, 105), (141, 2, 103),
+ (143, 7, 91), (155, 14, 82), (149, 21, 54), (149, 27, 50),
+ (152, 36, 39), (140, 67, 34), (139, 79, 19), (130, 100, 0),
+ (136, 99, 0), (153, 104, 2), (161, 94, 3), (151, 92, 0),
+ (137, 73, 12), (124, 66, 28), (114, 48, 32), (130, 17, 60),
+ (115, 0, 93), (114, 0, 97), (98, 0, 104), (95, 0, 128),
+ (81, 3, 139), (82, 11, 143), (89, 0, 137), (114, 4, 139),
+ (128, 10, 120), (140, 3, 119), (140, 5, 123), (150, 0, 128),
+ (159, 6, 130), (149, 10, 173), (145, 19, 191), (129, 14, 193),
+ (108, 22, 195), (125, 39, 200), (111, 50, 187), (97, 43, 201),
+ (87, 43, 190), (113, 9, 156), (147, 15, 99), (142, 38, 47),
+ (158, 76, 29), (161, 102, 12), (154, 118, 0), (140, 111, 9),
+ (140, 125, 6), (156, 132, 6), (161, 126, 8), (172, 132, 1),
+ (188, 144, 0), (198, 149, 12), (220, 166, 8), (250, 206, 23),
+ (254, 209, 32), (249, 209, 36), (226, 182, 34), (223, 159, 23)
+ ),
+
+// 360 vchira_0012.jpg
+((211, 48, 91), (113, 23, 0), (78, 32, 0), (43, 41, 0),
+ (31, 30, 16), (20, 20, 32), (28, 12, 37), (36, 4, 43),
+ (118, 2, 49), (145, 11, 68), (172, 21, 88), (171, 31, 83),
+ (170, 41, 79), (212, 82, 105), (255, 124, 132), (250, 136, 129),
+ (245, 149, 127), (198, 200, 179), (219, 169, 195), (240, 138, 212),
+ (218, 100, 147), (196, 63, 82), (165, 43, 78), (134, 23, 74),
+ (100, 18, 40), (56, 9, 21), (13, 0, 2), (11, 0, 4),
+ (9, 0, 6), (4, 9, 15), (0, 19, 25), (20, 8, 58),
+ (53, 0, 56), (56, 15, 19), (63, 19, 15), (70, 24, 11),
+ (112, 60, 15), (155, 96, 20), (171, 136, 10), (188, 176, 0),
+ (210, 255, 80), (203, 224, 93), (197, 193, 106), (164, 152, 90),
+ (131, 111, 74), (137, 80, 57), (144, 50, 40), (127, 46, 1),
+ (169, 98, 34), (170, 209, 118), (145, 231, 110), (120, 253, 102),
+ (99, 246, 114), (78, 239, 127), (60, 217, 121), (43, 196, 116),
+ (26, 101, 168), (41, 64, 151), (57, 28, 134), (67, 23, 123),
+ (77, 18, 112), (110, 9, 112), (144, 0, 113), (148, 8, 113),
+ (101, 15, 50), (35, 50, 9), (17, 45, 26), (0, 41, 44),
+ (0, 53, 35), (0, 66, 26), (36, 101, 81), (54, 146, 121),
+ (53, 231, 121), (59, 233, 130), (65, 236, 140), (73, 239, 132),
+ (81, 243, 124), (99, 241, 121), (117, 239, 118), (158, 253, 107),
+ (189, 218, 108), (212, 208, 147), (198, 214, 151), (185, 220, 156),
+ (169, 210, 144), (153, 200, 132), (99, 166, 95), (99, 143, 118),
+ (13, 67, 101), (6, 76, 118), (0, 86, 136), (0, 112, 147),
+ (0, 138, 159), (12, 132, 148), (0, 114, 117), (40, 154, 120),
+ (42, 194, 109), (46, 212, 110), (71, 226, 115), (97, 241, 120),
+ (105, 246, 114), (114, 251, 109), (137, 235, 100), (151, 254, 101),
+ (144, 255, 96), (131, 255, 98), (118, 255, 101), (108, 255, 102),
+ (98, 255, 104), (98, 252, 132), (98, 254, 145), (107, 252, 159),
+ (105, 251, 142), (135, 235, 119), (134, 231, 115), (133, 228, 112),
+ (149, 255, 107), (128, 250, 90), (119, 252, 101), (102, 246, 99),
+ (49, 202, 86), (49, 166, 94), (50, 130, 103), (37, 133, 107),
+ (25, 137, 112), (8, 149, 83), (50, 161, 67), (63, 188, 52),
+ (120, 201, 98), (184, 208, 134), (219, 198, 128), (255, 189, 123),
+ (253, 125, 116), (218, 94, 66), (187, 161, 24), (219, 232, 0),
+ (253, 255, 36), (244, 252, 42), (235, 249, 48), (245, 237, 68),
+ (255, 225, 89), (214, 249, 95), (195, 237, 89), (158, 252, 102),
+ (167, 255, 107), (193, 230, 125), (200, 238, 131), (208, 247, 138),
+ (228, 231, 144), (197, 234, 129), (154, 248, 136), (118, 255, 132),
+ (117, 240, 133), (132, 242, 136), (147, 244, 139), (165, 246, 153),
+ (159, 243, 147), (134, 231, 136), (88, 159, 99), (38, 109, 105),
+ (9, 62, 93), (40, 33, 75), (49, 16, 73), (59, 0, 72),
+ (64, 0, 83), (65, 1, 87), (57, 13, 100), (120, 43, 137),
+ (178, 18, 180), (195, 86, 163), (213, 154, 146), (218, 226, 44),
+ (233, 222, 18), (187, 138, 35), (179, 89, 36), (177, 49, 74),
+ (120, 40, 79), (71, 4, 55), (41, 11, 85), (48, 16, 113),
+ (68, 19, 136), (136, 92, 145), (169, 182, 128), (191, 222, 162),
+ (153, 225, 187), (168, 234, 177), (183, 244, 167), (191, 205, 188),
+ (193, 234, 204), (202, 217, 222), (183, 160, 242), (178, 91, 248),
+ (150, 169, 165), (131, 165, 104), (106, 189, 121), (62, 227, 148),
+ (56, 237, 160), (35, 233, 145), (30, 242, 184), (59, 236, 220),
+ (116, 197, 227), (148, 226, 186), (131, 245, 173), (145, 246, 166),
+ (132, 249, 135), (168, 246, 127), (176, 222, 150), (169, 187, 137),
+ (170, 155, 148), (117, 57, 117), (97, 41, 68), (81, 15, 51),
+ (50, 34, 44), (50, 54, 19), (56, 45, 15), (69, 45, 35),
+ (102, 67, 9), (116, 71, 16), (74, 128, 0), (69, 137, 14),
+ (49, 119, 56), (73, 191, 53), (127, 204, 102), (174, 233, 139),
+ (193, 224, 144), (215, 200, 157), (219, 200, 134), (223, 201, 99),
+ (177, 176, 96), (176, 67, 62), (149, 62, 68), (148, 24, 52),
+ (130, 27, 46), (146, 47, 42), (174, 57, 40), (171, 113, 16),
+ (141, 205, 56), (85, 234, 90), (90, 248, 125), (75, 255, 158),
+ (72, 231, 199), (121, 233, 195), (145, 245, 195), (168, 242, 215),
+ (180, 221, 207), (165, 222, 203), (149, 186, 212), (100, 200, 255),
+ (51, 206, 252), (88, 111, 223), (41, 153, 203), (19, 218, 163),
+ (83, 255, 167), (143, 219, 193), (165, 197, 186), (255, 145, 163)
+ ),
+
+// 361 vchira_0013.jpg
+((180, 215, 243), (103, 96, 234), (93, 75, 206), (84, 54, 178),
+ (89, 45, 160), (94, 37, 142), (93, 30, 142), (93, 24, 143),
+ (64, 31, 174), (59, 43, 174), (55, 55, 175), (69, 56, 188),
+ (83, 58, 201), (95, 55, 211), (108, 52, 221), (111, 68, 230),
+ (115, 84, 240), (114, 111, 216), (92, 103, 201), (70, 95, 187),
+ (65, 94, 191), (60, 93, 196), (57, 90, 195), (54, 88, 195),
+ (75, 77, 214), (101, 65, 226), (128, 54, 239), (105, 56, 224),
+ (83, 59, 209), (78, 60, 204), (74, 62, 200), (64, 55, 198),
+ (50, 61, 177), (85, 91, 211), (94, 89, 224), (103, 87, 237),
+ (125, 67, 233), (148, 47, 229), (162, 45, 236), (176, 43, 244),
+ (179, 63, 236), (171, 66, 241), (164, 69, 247), (172, 73, 238),
+ (180, 77, 230), (175, 89, 217), (170, 102, 205), (151, 82, 191),
+ (92, 44, 153), (41, 13, 53), (30, 6, 35), (19, 0, 17),
+ (15, 0, 18), (12, 0, 20), (18, 0, 24), (25, 0, 29),
+ (32, 20, 92), (57, 15, 117), (82, 11, 143), (109, 8, 164),
+ (137, 5, 185), (142, 10, 191), (148, 16, 198), (146, 47, 216),
+ (146, 102, 251), (119, 122, 255), (115, 110, 236), (112, 99, 217),
+ (122, 114, 211), (132, 130, 205), (214, 173, 169), (237, 209, 255),
+ (148, 112, 248), (140, 138, 248), (132, 164, 249), (108, 159, 231),
+ (84, 154, 214), (80, 153, 220), (76, 152, 227), (89, 135, 229),
+ (88, 103, 228), (64, 78, 200), (63, 60, 188), (63, 43, 176),
+ (62, 38, 176), (61, 34, 177), (69, 29, 164), (67, 10, 149),
+ (52, 12, 108), (38, 6, 84), (25, 1, 61), (25, 2, 59),
+ (26, 3, 57), (28, 2, 49), (27, 4, 33), (11, 13, 26),
+ (6, 7, 37), (9, 13, 61), (23, 12, 71), (38, 11, 82),
+ (42, 9, 80), (47, 7, 78), (48, 2, 75), (54, 0, 87),
+ (43, 23, 112), (43, 28, 120), (44, 33, 129), (38, 44, 139),
+ (32, 55, 149), (27, 68, 150), (17, 62, 127), (20, 27, 108),
+ (17, 25, 87), (11, 10, 44), (15, 5, 48), (20, 0, 53),
+ (31, 3, 54), (52, 5, 73), (58, 3, 96), (77, 6, 136),
+ (116, 27, 193), (122, 35, 205), (128, 44, 217), (122, 36, 207),
+ (116, 28, 198), (103, 28, 193), (83, 33, 180), (64, 61, 168),
+ (63, 79, 166), (109, 76, 215), (118, 78, 214), (128, 81, 213),
+ (131, 61, 196), (115, 46, 201), (109, 26, 180), (94, 9, 139),
+ (68, 0, 86), (85, 0, 111), (103, 0, 136), (115, 8, 159),
+ (127, 16, 183), (158, 30, 213), (172, 74, 223), (176, 87, 255),
+ (185, 90, 252), (180, 108, 242), (172, 103, 242), (164, 99, 243),
+ (162, 68, 252), (149, 32, 234), (143, 23, 219), (137, 24, 204),
+ (67, 41, 168), (62, 45, 155), (57, 50, 143), (36, 43, 134),
+ (41, 32, 115), (33, 44, 98), (39, 28, 84), (41, 19, 84),
+ (54, 16, 117), (98, 10, 146), (105, 12, 152), (113, 14, 159),
+ (102, 28, 177), (83, 44, 187), (82, 59, 199), (89, 72, 213),
+ (79, 84, 202), (75, 73, 201), (71, 63, 200), (71, 63, 184),
+ (55, 58, 173), (42, 53, 159), (42, 44, 155), (37, 59, 160),
+ (34, 76, 160), (26, 83, 152), (32, 89, 170), (39, 96, 186),
+ (22, 116, 180), (35, 107, 192), (48, 129, 210), (41, 99, 198),
+ (42, 62, 177), (45, 52, 164), (48, 42, 152), (59, 30, 138),
+ (85, 27, 137), (92, 38, 150), (112, 45, 187), (112, 70, 196),
+ (131, 104, 197), (126, 70, 231), (135, 56, 223), (130, 24, 192),
+ (114, 32, 179), (110, 39, 179), (94, 40, 180), (65, 54, 159),
+ (51, 55, 144), (33, 86, 136), (33, 61, 124), (43, 53, 124),
+ (40, 48, 120), (45, 37, 114), (84, 66, 114), (90, 65, 159),
+ (96, 81, 186), (91, 67, 187), (81, 58, 174), (84, 42, 170),
+ (83, 17, 153), (66, 5, 134), (69, 15, 129), (50, 12, 123),
+ (42, 19, 133), (63, 32, 151), (87, 23, 172), (90, 13, 181),
+ (88, 34, 192), (90, 42, 190), (75, 65, 200), (54, 88, 211),
+ (49, 107, 207), (46, 98, 208), (37, 91, 191), (50, 71, 180),
+ (61, 62, 170), (73, 48, 139), (77, 22, 126), (52, 29, 120),
+ (32, 28, 112), (26, 27, 94), (23, 3, 102), (23, 0, 83),
+ (33, 5, 92), (43, 8, 90), (45, 17, 104), (40, 31, 120),
+ (30, 36, 134), (22, 59, 130), (18, 49, 93), (6, 24, 88),
+ (4, 15, 77), (0, 9, 42), (4, 8, 19), (8, 0, 15),
+ (14, 1, 11), (5, 3, 17), (7, 19, 19), (7, 30, 46),
+ (0, 33, 49), (6, 24, 60), (0, 33, 80), (9, 34, 65)
+ ),
+
+// 362 vchira_0014.jpg
+((45, 230, 126), (110, 183, 68), (100, 173, 62), (91, 164, 56),
+ (81, 152, 60), (72, 140, 65), (51, 132, 84), (31, 124, 103),
+ (12, 94, 45), (7, 71, 31), (2, 49, 17), (14, 57, 17),
+ (27, 65, 18), (40, 86, 27), (54, 107, 37), (54, 101, 45),
+ (55, 96, 54), (93, 147, 113), (56, 137, 113), (19, 127, 114),
+ (9, 121, 105), (0, 115, 97), (0, 103, 79), (0, 91, 61),
+ (69, 116, 20), (116, 119, 41), (164, 122, 62), (127, 96, 34),
+ (91, 70, 7), (74, 59, 3), (57, 48, 0), (35, 49, 16),
+ (30, 55, 25), (25, 38, 44), (24, 34, 49), (24, 30, 54),
+ (30, 38, 45), (37, 47, 36), (46, 71, 32), (55, 96, 28),
+ (99, 119, 0), (114, 123, 21), (129, 127, 42), (111, 84, 61),
+ (93, 41, 80), (79, 32, 71), (65, 23, 63), (61, 13, 53),
+ (58, 10, 32), (43, 28, 0), (59, 31, 22), (75, 35, 44),
+ (136, 65, 54), (198, 95, 64), (184, 136, 53), (171, 177, 43),
+ (147, 204, 99), (173, 206, 81), (199, 208, 63), (222, 214, 77),
+ (245, 220, 91), (236, 233, 80), (228, 247, 69), (225, 245, 132),
+ (222, 229, 177), (146, 208, 183), (191, 200, 197), (237, 192, 212),
+ (237, 195, 187), (237, 199, 162), (202, 184, 136), (151, 161, 124),
+ (83, 100, 64), (70, 77, 60), (57, 55, 56), (34, 37, 46),
+ (12, 19, 37), (6, 16, 25), (0, 13, 14), (0, 31, 13),
+ (0, 36, 0), (15, 82, 28), (28, 95, 61), (42, 108, 94),
+ (51, 142, 125), (60, 176, 157), (79, 222, 216), (90, 238, 202),
+ (14, 191, 173), (10, 150, 137), (6, 110, 101), (3, 84, 84),
+ (0, 59, 68), (14, 22, 45), (3, 6, 23), (0, 10, 12),
+ (0, 17, 3), (0, 34, 0), (16, 59, 17), (32, 84, 35),
+ (53, 97, 56), (74, 111, 78), (121, 163, 81), (132, 186, 126),
+ (131, 162, 182), (127, 180, 209), (123, 198, 237), (110, 217, 224),
+ (97, 237, 211), (80, 250, 214), (34, 251, 230), (0, 241, 252),
+ (61, 236, 229), (103, 210, 218), (119, 178, 213), (136, 146, 208),
+ (146, 135, 201), (147, 145, 159), (132, 114, 126), (124, 124, 114),
+ (85, 117, 116), (86, 101, 106), (88, 85, 96), (94, 83, 96),
+ (100, 82, 96), (145, 89, 126), (138, 70, 119), (97, 8, 136),
+ (60, 5, 106), (18, 75, 60), (19, 82, 50), (20, 90, 40),
+ (26, 91, 33), (43, 72, 8), (50, 65, 0), (47, 60, 0),
+ (36, 44, 7), (20, 50, 3), (4, 57, 0), (2, 52, 0),
+ (0, 48, 0), (0, 47, 0), (36, 46, 0), (7, 39, 0),
+ (0, 40, 19), (15, 69, 45), (18, 74, 45), (22, 79, 46),
+ (39, 64, 61), (81, 53, 101), (140, 28, 201), (188, 44, 191),
+ (185, 67, 143), (142, 70, 120), (99, 73, 98), (70, 56, 47),
+ (47, 26, 31), (29, 24, 31), (25, 34, 13), (18, 18, 0),
+ (4, 13, 0), (0, 24, 2), (1, 25, 1), (3, 27, 0),
+ (15, 35, 8), (36, 44, 33), (42, 40, 53), (38, 33, 56),
+ (30, 50, 77), (22, 51, 66), (14, 52, 55), (25, 51, 26),
+ (36, 42, 16), (42, 31, 9), (45, 5, 13), (36, 11, 14),
+ (22, 23, 18), (0, 40, 26), (2, 49, 59), (13, 43, 71),
+ (17, 47, 73), (16, 36, 73), (15, 16, 44), (15, 9, 19),
+ (0, 33, 0), (14, 44, 5), (29, 56, 11), (60, 78, 18),
+ (138, 136, 33), (183, 160, 4), (212, 201, 33), (169, 187, 39),
+ (123, 197, 40), (158, 170, 72), (161, 176, 91), (154, 176, 127),
+ (162, 167, 135), (163, 147, 173), (184, 104, 163), (135, 84, 143),
+ (138, 146, 185), (92, 139, 183), (93, 149, 200), (115, 185, 183),
+ (125, 186, 181), (119, 149, 139), (115, 139, 107), (94, 143, 113),
+ (106, 164, 116), (145, 175, 167), (146, 229, 187), (204, 236, 173),
+ (205, 240, 158), (183, 198, 129), (186, 159, 129), (167, 167, 113),
+ (118, 138, 66), (107, 92, 59), (76, 72, 34), (32, 62, 38),
+ (20, 92, 46), (59, 96, 65), (134, 137, 92), (152, 203, 144),
+ (136, 200, 176), (122, 242, 170), (94, 245, 176), (85, 241, 180),
+ (75, 255, 147), (123, 219, 83), (194, 214, 41), (248, 245, 0),
+ (210, 236, 41), (207, 219, 85), (218, 213, 111), (190, 201, 122),
+ (177, 197, 134), (132, 200, 179), (112, 190, 210), (74, 191, 198),
+ (40, 180, 181), (0, 95, 134), (43, 67, 91), (18, 34, 86),
+ (18, 23, 53), (0, 3, 37), (12, 11, 42), (58, 3, 60),
+ (86, 0, 84), (106, 0, 134), (117, 10, 148), (196, 35, 177),
+ (182, 52, 202), (135, 34, 192), (89, 6, 136), (19, 33, 59)
+ ),
+
+// 363 vchira_0015.jpg
+((104, 83, 122), (0, 48, 110), (0, 32, 101), (0, 17, 92),
+ (37, 40, 98), (74, 63, 105), (98, 55, 108), (123, 47, 112),
+ (125, 61, 121), (128, 63, 125), (132, 66, 130), (154, 113, 147),
+ (177, 161, 164), (201, 197, 201), (226, 233, 239), (235, 244, 240),
+ (245, 255, 242), (255, 240, 190), (215, 225, 199), (175, 211, 209),
+ (106, 156, 173), (37, 101, 137), (26, 83, 134), (15, 66, 132),
+ (18, 14, 91), (26, 8, 82), (35, 2, 73), (56, 31, 85),
+ (78, 60, 98), (85, 60, 104), (93, 61, 110), (73, 31, 117),
+ (59, 21, 98), (44, 0, 60), (53, 24, 61), (62, 48, 63),
+ (69, 60, 106), (76, 72, 149), (100, 80, 164), (125, 89, 179),
+ (170, 67, 200), (148, 91, 206), (127, 116, 212), (125, 128, 189),
+ (123, 140, 166), (128, 154, 196), (133, 168, 226), (151, 193, 253),
+ (197, 174, 242), (205, 224, 228), (219, 236, 207), (233, 249, 186),
+ (244, 252, 179), (255, 255, 172), (255, 255, 161), (255, 255, 150),
+ (247, 218, 20), (251, 220, 96), (255, 223, 172), (245, 218, 199),
+ (235, 213, 226), (232, 206, 240), (229, 199, 255), (255, 210, 255),
+ (255, 195, 255), (241, 188, 230), (245, 164, 197), (250, 140, 165),
+ (242, 142, 169), (235, 145, 173), (179, 98, 139), (157, 124, 151),
+ (143, 173, 123), (117, 192, 114), (92, 212, 106), (83, 148, 109),
+ (74, 85, 113), (81, 83, 113), (88, 81, 114), (99, 96, 105),
+ (150, 130, 119), (217, 205, 153), (220, 193, 172), (223, 181, 191),
+ (223, 170, 162), (224, 160, 133), (250, 177, 98), (241, 142, 75),
+ (118, 87, 93), (163, 116, 130), (209, 146, 167), (214, 155, 167),
+ (220, 164, 167), (193, 178, 175), (179, 178, 158), (116, 142, 159),
+ (89, 108, 122), (77, 50, 65), (71, 44, 60), (65, 38, 55),
+ (80, 44, 73), (95, 50, 91), (115, 58, 101), (94, 47, 101),
+ (33, 24, 55), (50, 36, 65), (67, 49, 75), (82, 65, 94),
+ (97, 82, 113), (120, 130, 157), (134, 159, 166), (174, 200, 215),
+ (202, 200, 222), (255, 245, 255), (255, 236, 254), (255, 228, 254),
+ (203, 206, 225), (180, 202, 226), (167, 140, 217), (108, 115, 170),
+ (75, 48, 163), (62, 54, 168), (50, 60, 173), (40, 66, 160),
+ (31, 73, 147), (41, 95, 157), (28, 98, 184), (12, 106, 194),
+ (33, 103, 189), (96, 140, 211), (114, 148, 217), (132, 157, 224),
+ (159, 155, 239), (134, 148, 211), (88, 150, 201), (101, 192, 193),
+ (85, 191, 142), (113, 153, 115), (142, 115, 88), (177, 130, 81),
+ (212, 145, 75), (234, 169, 51), (249, 182, 29), (255, 201, 85),
+ (243, 209, 138), (209, 225, 176), (208, 206, 195), (207, 187, 214),
+ (188, 200, 224), (195, 211, 227), (188, 200, 224), (168, 203, 225),
+ (111, 125, 170), (89, 113, 163), (67, 102, 156), (49, 70, 135),
+ (0, 47, 142), (7, 28, 119), (28, 22, 128), (102, 20, 193),
+ (144, 7, 199), (199, 8, 235), (198, 7, 237), (197, 7, 239),
+ (148, 27, 230), (123, 41, 239), (139, 79, 237), (149, 59, 193),
+ (60, 10, 73), (58, 8, 48), (57, 6, 23), (52, 13, 0),
+ (49, 16, 1), (38, 0, 0), (23, 0, 17), (18, 0, 59),
+ (14, 25, 55), (32, 30, 79), (43, 56, 91), (47, 50, 93),
+ (40, 23, 119), (60, 0, 93), (51, 1, 72), (66, 0, 38),
+ (53, 19, 0), (51, 26, 0), (50, 33, 0), (56, 35, 34),
+ (54, 39, 70), (57, 64, 74), (82, 49, 120), (128, 29, 148),
+ (124, 11, 161), (86, 25, 162), (53, 113, 165), (89, 140, 206),
+ (125, 155, 207), (151, 193, 233), (179, 236, 255), (207, 252, 249),
+ (247, 255, 255), (255, 236, 229), (224, 189, 219), (186, 163, 215),
+ (134, 117, 161), (104, 109, 138), (80, 83, 118), (38, 63, 117),
+ (8, 36, 83), (0, 31, 60), (9, 13, 86), (11, 1, 74),
+ (0, 16, 68), (0, 2, 61), (31, 8, 60), (64, 8, 35),
+ (147, 32, 45), (186, 18, 53), (208, 59, 26), (206, 108, 7),
+ (185, 103, 4), (195, 80, 25), (127, 68, 26), (116, 32, 0),
+ (96, 20, 0), (82, 4, 0), (76, 0, 0), (30, 0, 2),
+ (2, 6, 41), (1, 16, 49), (17, 14, 45), (65, 28, 0),
+ (110, 43, 37), (150, 62, 60), (174, 67, 59), (183, 117, 65),
+ (170, 143, 52), (207, 120, 27), (233, 84, 41), (233, 84, 41),
+ (234, 72, 51), (207, 84, 86), (182, 95, 103), (146, 90, 99),
+ (120, 55, 75), (108, 45, 74), (86, 48, 61), (71, 46, 42),
+ (67, 32, 64), (125, 10, 65), (158, 5, 85), (152, 32, 57),
+ (200, 45, 41), (182, 68, 0), (152, 42, 17), (119, 7, 0)
+ ),
+
+// 364 vchira_17.jpg
+((23, 59, 55), (8, 128, 67), (20, 155, 77), (33, 182, 88),
+ (38, 184, 83), (43, 186, 78), (33, 178, 85), (23, 171, 93),
+ (0, 130, 106), (9, 112, 112), (19, 95, 118), (9, 89, 142),
+ (0, 83, 167), (16, 74, 151), (32, 65, 136), (42, 53, 140),
+ (53, 42, 144), (117, 10, 186), (127, 8, 150), (137, 7, 115),
+ (116, 4, 102), (95, 1, 89), (71, 11, 91), (48, 22, 93),
+ (0, 101, 98), (9, 100, 124), (18, 100, 150), (36, 84, 165),
+ (55, 68, 180), (65, 65, 191), (76, 63, 203), (104, 51, 204),
+ (123, 32, 198), (163, 5, 203), (175, 9, 201), (188, 14, 200),
+ (176, 22, 209), (164, 31, 218), (135, 69, 233), (106, 107, 249),
+ (19, 135, 134), (32, 165, 111), (46, 196, 88), (47, 205, 100),
+ (49, 215, 113), (47, 223, 125), (46, 231, 137), (41, 235, 149),
+ (28, 225, 153), (23, 207, 133), (12, 187, 117), (2, 167, 101),
+ (15, 160, 109), (29, 153, 117), (18, 157, 133), (7, 161, 149),
+ (21, 151, 201), (58, 108, 212), (95, 65, 223), (145, 47, 230),
+ (196, 30, 238), (221, 31, 231), (247, 33, 225), (242, 64, 140),
+ (186, 82, 91), (112, 0, 119), (90, 44, 163), (68, 89, 208),
+ (57, 99, 205), (46, 109, 202), (22, 152, 188), (29, 169, 122),
+ (21, 167, 82), (32, 174, 79), (44, 181, 77), (46, 190, 81),
+ (48, 199, 86), (49, 199, 85), (51, 199, 85), (58, 211, 97),
+ (55, 219, 106), (58, 220, 108), (63, 224, 107), (69, 229, 107),
+ (67, 224, 100), (65, 220, 93), (61, 210, 84), (58, 211, 94),
+ (51, 211, 101), (37, 196, 100), (24, 181, 100), (12, 170, 103),
+ (0, 159, 106), (13, 123, 120), (17, 87, 112), (23, 51, 101),
+ (53, 46, 116), (66, 10, 119), (70, 15, 146), (75, 20, 174),
+ (74, 21, 177), (74, 23, 180), (85, 19, 155), (80, 37, 168),
+ (58, 66, 193), (52, 79, 192), (47, 93, 191), (38, 108, 192),
+ (30, 124, 194), (6, 127, 172), (0, 164, 153), (0, 135, 144),
+ (3, 136, 131), (0, 116, 122), (4, 88, 111), (9, 61, 100),
+ (0, 34, 80), (4, 34, 32), (0, 29, 13), (19, 72, 18),
+ (0, 130, 98), (16, 167, 103), (33, 204, 108), (38, 210, 113),
+ (43, 217, 119), (43, 223, 136), (18, 211, 164), (1, 215, 187),
+ (6, 186, 223), (48, 182, 255), (48, 159, 240), (48, 136, 226),
+ (40, 106, 200), (13, 77, 149), (16, 57, 109), (23, 20, 89),
+ (130, 0, 86), (129, 15, 86), (129, 30, 87), (119, 25, 115),
+ (109, 21, 144), (118, 44, 199), (81, 80, 220), (67, 83, 178),
+ (28, 122, 134), (3, 112, 106), (17, 96, 92), (31, 81, 78),
+ (35, 79, 78), (11, 111, 85), (11, 132, 97), (16, 156, 95),
+ (12, 182, 120), (13, 185, 126), (14, 189, 132), (4, 184, 159),
+ (6, 165, 169), (12, 171, 193), (20, 169, 193), (42, 145, 222),
+ (65, 140, 242), (47, 158, 240), (32, 177, 219), (17, 197, 198),
+ (22, 222, 175), (35, 236, 158), (48, 242, 155), (51, 244, 155),
+ (48, 242, 155), (46, 241, 154), (44, 240, 154), (32, 233, 157),
+ (21, 222, 167), (18, 211, 182), (40, 163, 231), (100, 132, 241),
+ (156, 56, 242), (220, 20, 253), (239, 21, 239), (230, 2, 235),
+ (226, 0, 224), (193, 1, 174), (157, 44, 98), (126, 29, 82),
+ (36, 0, 40), (22, 6, 47), (9, 12, 55), (11, 23, 95),
+ (25, 29, 116), (70, 35, 127), (62, 25, 157), (54, 44, 166),
+ (66, 38, 151), (79, 14, 114), (49, 14, 82), (63, 0, 73),
+ (70, 0, 65), (98, 0, 73), (100, 3, 70), (122, 16, 64),
+ (122, 57, 29), (45, 129, 31), (35, 149, 53), (13, 138, 60),
+ (20, 134, 64), (30, 156, 72), (24, 165, 86), (27, 183, 99),
+ (32, 208, 123), (43, 231, 137), (44, 233, 141), (44, 236, 150),
+ (49, 242, 153), (55, 240, 139), (58, 240, 139), (56, 236, 136),
+ (59, 239, 132), (63, 232, 117), (61, 223, 101), (55, 212, 95),
+ (54, 212, 99), (54, 218, 106), (56, 227, 113), (42, 231, 139),
+ (36, 233, 153), (32, 233, 155), (36, 234, 155), (36, 234, 157),
+ (31, 231, 158), (28, 222, 149), (18, 208, 146), (25, 157, 117),
+ (2, 126, 102), (0, 64, 91), (36, 5, 46), (68, 9, 29),
+ (31, 1, 37), (18, 2, 28), (20, 67, 13), (23, 106, 26),
+ (35, 135, 45), (45, 144, 79), (22, 159, 81), (23, 174, 93),
+ (25, 196, 118), (38, 211, 121), (36, 228, 143), (39, 236, 154),
+ (42, 239, 157), (40, 237, 157), (38, 235, 153), (34, 232, 155),
+ (23, 217, 147), (22, 203, 132), (32, 187, 96), (47, 185, 73)
+ ),
+
+// 365 vchira_18pp1.jpg
+((74, 7, 183), (102, 15, 208), (108, 66, 231), (115, 117, 254),
+ (128, 116, 254), (142, 115, 254), (141, 111, 252), (140, 108, 251),
+ (197, 52, 179), (198, 54, 176), (200, 57, 173), (183, 78, 205),
+ (166, 99, 238), (152, 130, 246), (139, 162, 255), (130, 165, 250),
+ (122, 168, 246), (106, 119, 247), (125, 115, 248), (145, 111, 250),
+ (162, 99, 240), (180, 87, 230), (192, 81, 213), (204, 76, 197),
+ (242, 106, 178), (225, 76, 166), (208, 46, 155), (194, 31, 146),
+ (181, 17, 138), (183, 17, 137), (185, 17, 136), (185, 17, 136),
+ (193, 32, 146), (226, 104, 151), (239, 119, 152), (252, 135, 153),
+ (253, 167, 173), (255, 199, 194), (253, 211, 198), (251, 223, 202),
+ (250, 253, 242), (252, 251, 248), (254, 249, 255), (245, 248, 250),
+ (236, 248, 246), (190, 235, 241), (144, 223, 236), (120, 202, 216),
+ (145, 162, 255), (255, 167, 255), (251, 171, 234), (248, 176, 214),
+ (241, 149, 204), (234, 122, 194), (220, 87, 182), (206, 53, 170),
+ (139, 10, 172), (132, 16, 183), (125, 23, 195), (125, 29, 205),
+ (126, 35, 216), (132, 40, 219), (139, 46, 222), (143, 72, 230),
+ (150, 92, 255), (156, 133, 255), (173, 155, 255), (190, 178, 255),
+ (181, 155, 248), (172, 133, 242), (157, 109, 247), (161, 64, 219),
+ (169, 14, 142), (158, 9, 114), (148, 5, 87), (127, 4, 91),
+ (106, 3, 95), (117, 1, 97), (129, 0, 100), (142, 1, 116),
+ (148, 3, 130), (166, 10, 145), (175, 13, 140), (184, 16, 135),
+ (184, 15, 132), (184, 15, 130), (185, 13, 125), (186, 15, 130),
+ (191, 27, 140), (205, 45, 150), (219, 63, 160), (234, 75, 144),
+ (249, 88, 129), (253, 76, 102), (233, 44, 112), (221, 23, 100),
+ (206, 23, 105), (157, 4, 87), (165, 3, 94), (174, 2, 102),
+ (180, 6, 111), (187, 11, 120), (184, 12, 122), (191, 17, 128),
+ (245, 72, 102), (236, 67, 120), (227, 62, 139), (220, 56, 133),
+ (213, 51, 127), (215, 41, 138), (193, 20, 128), (186, 12, 123),
+ (199, 11, 106), (184, 12, 120), (178, 6, 115), (173, 1, 111),
+ (140, 0, 120), (136, 3, 144), (125, 9, 158), (130, 2, 147),
+ (152, 7, 148), (160, 10, 147), (169, 13, 146), (169, 17, 153),
+ (170, 22, 160), (202, 45, 162), (196, 65, 169), (204, 71, 190),
+ (216, 102, 215), (248, 135, 197), (238, 135, 206), (228, 135, 215),
+ (232, 170, 233), (189, 189, 255), (178, 219, 241), (245, 191, 217),
+ (254, 192, 197), (242, 170, 167), (230, 148, 137), (242, 131, 120),
+ (255, 114, 104), (255, 90, 133), (248, 93, 151), (231, 87, 156),
+ (215, 50, 155), (172, 8, 129), (164, 6, 132), (156, 5, 136),
+ (129, 0, 124), (116, 0, 135), (65, 18, 124), (76, 4, 166),
+ (66, 5, 168), (67, 2, 173), (68, 0, 179), (59, 2, 192),
+ (74, 0, 199), (96, 18, 215), (112, 74, 247), (137, 92, 247),
+ (155, 79, 231), (171, 34, 182), (172, 31, 173), (174, 28, 165),
+ (168, 21, 163), (155, 18, 170), (130, 45, 166), (123, 58, 210),
+ (113, 112, 231), (140, 106, 235), (167, 100, 239), (218, 114, 225),
+ (246, 128, 204), (250, 143, 185), (244, 152, 203), (243, 155, 203),
+ (187, 144, 213), (116, 170, 244), (68, 149, 231), (85, 192, 212),
+ (126, 231, 224), (207, 255, 226), (245, 255, 244), (238, 245, 253),
+ (255, 239, 255), (245, 230, 255), (236, 222, 255), (240, 199, 243),
+ (217, 155, 238), (150, 112, 251), (84, 72, 240), (77, 0, 196),
+ (72, 0, 204), (27, 1, 222), (55, 89, 213), (47, 153, 201),
+ (60, 165, 212), (36, 159, 192), (28, 150, 191), (43, 119, 229),
+ (86, 88, 248), (112, 18, 192), (117, 7, 182), (137, 13, 173),
+ (163, 21, 167), (167, 38, 165), (160, 111, 193), (118, 159, 238),
+ (109, 169, 242), (119, 165, 250), (142, 144, 255), (135, 96, 241),
+ (153, 51, 212), (141, 26, 192), (153, 14, 165), (164, 12, 147),
+ (179, 17, 139), (184, 20, 143), (168, 22, 157), (146, 15, 173),
+ (139, 26, 194), (138, 29, 198), (126, 23, 190), (137, 15, 178),
+ (158, 14, 164), (173, 27, 164), (175, 21, 155), (188, 30, 153),
+ (212, 50, 161), (223, 81, 165), (236, 103, 158), (255, 135, 172),
+ (251, 143, 175), (242, 169, 189), (249, 222, 192), (255, 227, 218),
+ (253, 237, 237), (255, 240, 255), (246, 228, 228), (255, 215, 223),
+ (233, 185, 245), (168, 115, 245), (151, 77, 234), (133, 39, 215),
+ (117, 12, 192), (114, 10, 181), (102, 5, 183), (101, 10, 176),
+ (113, 10, 154), (114, 0, 161), (100, 5, 185), (97, 17, 214),
+ (81, 81, 239), (44, 121, 229), (75, 177, 217), (52, 169, 202)
+ ),
+
+// 366 vchira_19.jpg
+((225, 128, 161), (246, 212, 86), (231, 233, 65), (216, 254, 44),
+ (158, 206, 23), (101, 158, 3), (102, 126, 1), (104, 95, 0),
+ (189, 151, 6), (206, 193, 8), (224, 235, 11), (213, 245, 24),
+ (203, 255, 37), (155, 249, 56), (107, 243, 75), (98, 244, 98),
+ (90, 246, 121), (207, 243, 91), (200, 230, 116), (193, 217, 141),
+ (173, 228, 146), (154, 240, 151), (121, 242, 138), (89, 244, 126),
+ (13, 244, 212), (7, 190, 176), (1, 136, 140), (1, 93, 108),
+ (1, 51, 76), (9, 37, 62), (17, 23, 49), (7, 23, 23),
+ (3, 12, 17), (6, 45, 0), (27, 62, 2), (49, 79, 5),
+ (90, 116, 8), (131, 154, 11), (137, 192, 34), (144, 230, 57),
+ (173, 225, 127), (93, 168, 109), (13, 112, 92), (12, 88, 70),
+ (12, 65, 49), (7, 59, 58), (2, 54, 67), (19, 54, 94),
+ (35, 46, 110), (13, 38, 95), (37, 51, 52), (62, 65, 10),
+ (63, 66, 11), (65, 68, 13), (43, 66, 10), (21, 64, 8),
+ (2, 41, 10), (35, 43, 5), (69, 45, 0), (104, 70, 0),
+ (139, 95, 0), (160, 122, 0), (182, 149, 0), (226, 229, 0),
+ (248, 239, 12), (241, 250, 0), (247, 251, 0), (253, 252, 1),
+ (250, 251, 5), (247, 250, 9), (245, 255, 11), (229, 249, 30),
+ (241, 233, 44), (248, 168, 93), (255, 103, 143), (250, 83, 147),
+ (246, 64, 151), (246, 100, 142), (246, 137, 134), (255, 160, 98),
+ (251, 157, 57), (171, 149, 1), (125, 111, 0), (80, 74, 0),
+ (55, 91, 16), (30, 108, 32), (10, 137, 86), (0, 159, 131),
+ (59, 253, 190), (89, 221, 180), (120, 189, 170), (135, 192, 165),
+ (150, 196, 160), (101, 134, 165), (45, 146, 106), (74, 96, 50),
+ (37, 73, 11), (0, 37, 29), (0, 36, 28), (0, 35, 28),
+ (1, 35, 42), (3, 35, 56), (5, 42, 68), (24, 17, 85),
+ (38, 11, 82), (31, 5, 51), (25, 0, 21), (28, 3, 24),
+ (31, 6, 27), (33, 1, 50), (56, 0, 65), (89, 1, 79),
+ (106, 0, 110), (146, 0, 134), (168, 1, 150), (191, 2, 166),
+ (238, 60, 148), (238, 108, 82), (229, 142, 39), (233, 203, 0),
+ (180, 122, 25), (148, 92, 12), (116, 63, 0), (93, 50, 0),
+ (70, 38, 0), (42, 8, 0), (28, 1, 0), (29, 10, 12),
+ (41, 10, 8), (87, 0, 33), (119, 6, 62), (151, 13, 91),
+ (192, 10, 129), (201, 2, 179), (213, 7, 177), (210, 11, 192),
+ (144, 22, 209), (72, 81, 164), (1, 140, 119), (1, 129, 109),
+ (2, 118, 99), (7, 106, 62), (5, 68, 41), (2, 50, 26),
+ (10, 40, 14), (1, 90, 62), (1, 101, 80), (1, 113, 99),
+ (6, 136, 90), (9, 152, 99), (0, 173, 138), (15, 224, 167),
+ (46, 169, 102), (43, 157, 64), (40, 145, 27), (48, 85, 7),
+ (58, 99, 3), (56, 145, 1), (52, 144, 35), (70, 176, 28),
+ (54, 182, 61), (122, 217, 65), (83, 176, 52), (45, 135, 39),
+ (26, 61, 7), (22, 16, 0), (11, 8, 0), (0, 18, 0),
+ (8, 3, 7), (8, 3, 3), (8, 3, 0), (2, 1, 9),
+ (3, 3, 13), (2, 1, 6), (3, 0, 4), (8, 0, 0),
+ (4, 2, 7), (6, 0, 11), (15, 0, 21), (29, 6, 26),
+ (43, 0, 28), (75, 0, 61), (99, 1, 86), (110, 0, 93),
+ (70, 3, 80), (55, 1, 74), (41, 0, 69), (28, 4, 54),
+ (59, 1, 23), (74, 20, 18), (98, 23, 28), (142, 46, 34),
+ (148, 65, 21), (163, 79, 68), (202, 73, 91), (153, 15, 64),
+ (138, 20, 52), (135, 21, 57), (132, 8, 58), (113, 23, 48),
+ (86, 3, 55), (55, 9, 11), (53, 5, 5), (55, 22, 5),
+ (75, 42, 9), (56, 63, 12), (47, 32, 9), (29, 42, 0),
+ (32, 39, 0), (100, 71, 3), (156, 90, 16), (200, 117, 15),
+ (236, 197, 14), (248, 242, 32), (255, 251, 34), (248, 252, 15),
+ (235, 255, 12), (233, 252, 20), (197, 226, 40), (164, 190, 7),
+ (107, 126, 1), (89, 89, 0), (65, 138, 0), (59, 148, 0),
+ (96, 159, 10), (117, 175, 13), (139, 187, 0), (194, 216, 19),
+ (181, 174, 21), (183, 73, 58), (200, 44, 92), (250, 38, 184),
+ (216, 3, 189), (216, 5, 195), (229, 7, 216), (253, 27, 222),
+ (229, 143, 180), (234, 178, 129), (235, 185, 98), (223, 211, 65),
+ (177, 255, 71), (225, 229, 54), (233, 225, 38), (242, 185, 20),
+ (196, 110, 25), (119, 65, 18), (71, 43, 19), (51, 19, 22),
+ (36, 30, 56), (31, 30, 108), (106, 0, 110), (144, 4, 175),
+ (172, 12, 182), (149, 9, 168), (113, 61, 109), (9, 65, 114)
+ ),
+
+// 367 vchira_28.jpg
+((0, 2, 44), (0, 71, 177), (12, 101, 195), (24, 131, 213),
+ (13, 117, 214), (3, 103, 215), (5, 91, 190), (8, 80, 165),
+ (26, 68, 108), (29, 55, 79), (33, 42, 51), (60, 51, 45),
+ (88, 61, 40), (75, 69, 60), (63, 77, 80), (47, 65, 78),
+ (31, 53, 76), (25, 35, 47), (38, 20, 26), (52, 6, 6),
+ (54, 12, 8), (56, 19, 11), (63, 26, 10), (70, 34, 10),
+ (114, 41, 6), (79, 38, 14), (45, 35, 23), (43, 24, 12),
+ (42, 14, 2), (27, 10, 3), (12, 7, 4), (3, 2, 0),
+ (4, 1, 10), (13, 3, 4), (54, 16, 18), (96, 30, 32),
+ (130, 62, 31), (164, 95, 30), (178, 97, 27), (192, 100, 25),
+ (166, 124, 74), (172, 144, 111), (178, 165, 149), (210, 170, 104),
+ (242, 175, 60), (248, 199, 43), (255, 223, 26), (252, 233, 69),
+ (254, 242, 122), (221, 225, 250), (188, 184, 193), (156, 143, 137),
+ (115, 112, 113), (74, 81, 89), (71, 67, 83), (68, 54, 77),
+ (40, 44, 56), (55, 74, 97), (70, 104, 139), (122, 147, 172),
+ (174, 190, 205), (183, 198, 211), (193, 207, 218), (193, 199, 231),
+ (173, 194, 215), (101, 137, 161), (82, 84, 145), (63, 31, 130),
+ (64, 15, 85), (65, 0, 40), (50, 3, 19), (72, 6, 16),
+ (105, 12, 23), (109, 15, 20), (114, 19, 17), (99, 12, 22),
+ (84, 6, 28), (88, 5, 37), (93, 5, 47), (133, 5, 53),
+ (165, 26, 19), (153, 22, 27), (103, 49, 68), (54, 77, 109),
+ (49, 80, 131), (45, 83, 154), (24, 83, 163), (52, 94, 168),
+ (3, 67, 191), (17, 58, 193), (32, 50, 196), (54, 38, 208),
+ (76, 26, 221), (88, 39, 208), (151, 23, 208), (203, 1, 209),
+ (137, 6, 180), (110, 35, 187), (78, 60, 195), (46, 85, 204),
+ (26, 71, 192), (7, 57, 180), (0, 40, 130), (11, 43, 84),
+ (12, 9, 76), (17, 10, 87), (22, 12, 99), (19, 20, 121),
+ (17, 28, 143), (2, 51, 172), (11, 52, 180), (16, 46, 178),
+ (61, 11, 162), (51, 6, 75), (34, 4, 56), (18, 2, 38),
+ (7, 14, 22), (0, 6, 22), (1, 11, 36), (0, 10, 37),
+ (0, 9, 70), (6, 7, 71), (12, 5, 72), (15, 3, 57),
+ (18, 1, 43), (35, 0, 49), (60, 8, 12), (115, 26, 0),
+ (171, 53, 3), (199, 97, 35), (182, 112, 59), (165, 128, 84),
+ (192, 156, 158), (203, 193, 201), (218, 203, 198), (220, 212, 201),
+ (223, 206, 160), (220, 200, 160), (218, 195, 161), (211, 185, 148),
+ (204, 176, 136), (187, 139, 77), (220, 149, 57), (213, 125, 15),
+ (221, 94, 23), (221, 36, 112), (199, 22, 120), (177, 9, 128),
+ (159, 2, 143), (165, 1, 192), (208, 10, 181), (255, 48, 198),
+ (218, 145, 162), (207, 150, 166), (196, 155, 171), (200, 113, 147),
+ (223, 35, 129), (179, 5, 152), (151, 1, 135), (108, 2, 172),
+ (87, 0, 85), (16, 6, 30), (10, 3, 22), (4, 0, 14),
+ (5, 6, 10), (34, 12, 1), (56, 29, 10), (98, 38, 2),
+ (186, 44, 34), (189, 30, 48), (193, 17, 63), (205, 45, 73),
+ (222, 17, 112), (188, 40, 114), (157, 119, 80), (126, 107, 153),
+ (71, 113, 153), (64, 115, 162), (36, 130, 204), (48, 120, 204),
+ (87, 72, 213), (77, 20, 185), (78, 25, 129), (104, 12, 59),
+ (138, 72, 12), (148, 74, 7), (158, 76, 3), (183, 82, 2),
+ (203, 104, 2), (219, 102, 0), (226, 116, 1), (208, 116, 7),
+ (209, 117, 16), (192, 105, 34), (167, 105, 54), (85, 92, 98),
+ (85, 89, 90), (57, 60, 49), (43, 39, 38), (67, 35, 12),
+ (111, 54, 11), (176, 90, 15), (222, 96, 55), (237, 172, 68),
+ (222, 170, 86), (179, 125, 63), (144, 100, 55), (134, 83, 52),
+ (75, 56, 39), (27, 34, 40), (16, 29, 45), (1, 10, 51),
+ (7, 27, 77), (1, 21, 84), (10, 50, 99), (0, 33, 114),
+ (2, 32, 122), (1, 56, 147), (17, 94, 172), (71, 147, 196),
+ (105, 168, 211), (154, 186, 211), (199, 213, 216), (220, 218, 219),
+ (223, 224, 226), (222, 217, 211), (194, 209, 216), (134, 214, 247),
+ (121, 164, 217), (94, 177, 227), (77, 148, 214), (78, 159, 214),
+ (56, 181, 235), (27, 150, 228), (61, 144, 212), (62, 81, 222),
+ (62, 36, 189), (91, 2, 152), (101, 1, 89), (95, 1, 75),
+ (52, 2, 51), (84, 3, 44), (145, 9, 55), (196, 18, 104),
+ (219, 36, 119), (211, 19, 154), (224, 1, 212), (213, 5, 215),
+ (185, 1, 175), (113, 34, 141), (125, 0, 82), (123, 18, 61),
+ (129, 103, 76), (174, 141, 126), (232, 222, 212), (217, 189, 168)
+ ),
+
+// 368 vchira_2pp1.jpg
+((179, 181, 0), (231, 161, 3), (239, 153, 1), (248, 146, 0),
+ (210, 116, 0), (173, 87, 0), (165, 82, 0), (157, 78, 0),
+ (133, 20, 26), (108, 15, 59), (84, 11, 92), (65, 29, 94),
+ (46, 48, 97), (23, 39, 162), (1, 31, 227), (4, 40, 240),
+ (7, 50, 253), (12, 165, 199), (17, 158, 160), (23, 152, 121),
+ (28, 147, 84), (33, 143, 48), (39, 151, 43), (46, 160, 38),
+ (16, 90, 93), (9, 68, 140), (2, 47, 188), (22, 38, 211),
+ (42, 30, 234), (51, 15, 208), (60, 0, 183), (92, 21, 141),
+ (122, 33, 61), (235, 140, 0), (223, 191, 2), (212, 242, 4),
+ (157, 242, 9), (103, 243, 14), (78, 243, 21), (53, 244, 29),
+ (17, 236, 118), (39, 187, 115), (61, 139, 113), (54, 135, 84),
+ (48, 132, 55), (31, 131, 77), (15, 130, 99), (15, 66, 113),
+ (3, 71, 144), (2, 141, 122), (8, 100, 116), (14, 60, 110),
+ (46, 35, 106), (79, 10, 103), (84, 10, 100), (90, 10, 97),
+ (56, 41, 100), (47, 87, 65), (39, 134, 30), (21, 185, 30),
+ (4, 237, 31), (9, 240, 31), (15, 243, 32), (39, 250, 25),
+ (40, 248, 15), (86, 197, 33), (105, 169, 16), (124, 141, 0),
+ (86, 140, 0), (48, 139, 0), (0, 135, 0), (26, 203, 24),
+ (117, 234, 44), (180, 213, 60), (244, 193, 76), (244, 192, 66),
+ (244, 192, 56), (248, 198, 50), (252, 204, 44), (225, 247, 24),
+ (230, 255, 32), (254, 227, 0), (249, 179, 0), (244, 132, 0),
+ (249, 103, 0), (255, 75, 1), (253, 43, 10), (255, 23, 12),
+ (247, 3, 75), (152, 2, 130), (58, 2, 185), (36, 9, 195),
+ (15, 16, 205), (8, 12, 221), (19, 9, 230), (10, 16, 252),
+ (7, 33, 254), (6, 85, 203), (15, 88, 196), (24, 92, 189),
+ (14, 88, 213), (5, 84, 237), (21, 74, 238), (33, 58, 213),
+ (172, 146, 111), (126, 194, 84), (80, 243, 58), (48, 238, 61),
+ (17, 234, 65), (22, 234, 87), (22, 209, 128), (3, 176, 133),
+ (39, 139, 189), (23, 8, 211), (69, 10, 188), (115, 12, 165),
+ (188, 2, 113), (226, 1, 67), (213, 8, 51), (228, 22, 24),
+ (227, 51, 62), (178, 30, 93), (130, 9, 125), (98, 5, 145),
+ (66, 1, 165), (55, 6, 194), (30, 2, 200), (47, 3, 162),
+ (75, 2, 119), (110, 13, 80), (128, 14, 71), (146, 16, 62),
+ (155, 5, 76), (154, 15, 57), (195, 29, 29), (252, 46, 9),
+ (243, 77, 3), (218, 67, 11), (193, 57, 19), (175, 63, 23),
+ (157, 70, 27), (133, 68, 40), (128, 41, 58), (111, 77, 39),
+ (45, 142, 47), (46, 200, 70), (56, 213, 58), (67, 226, 46),
+ (80, 249, 6), (128, 238, 3), (205, 219, 8), (233, 211, 29),
+ (192, 106, 0), (185, 90, 0), (179, 75, 0), (162, 69, 51),
+ (102, 76, 113), (51, 86, 92), (45, 140, 56), (37, 198, 69),
+ (21, 226, 25), (27, 227, 7), (35, 234, 15), (43, 241, 24),
+ (73, 240, 10), (78, 225, 12), (56, 207, 32), (66, 214, 66),
+ (68, 206, 252), (49, 144, 241), (31, 83, 231), (30, 48, 246),
+ (1, 22, 251), (1, 11, 230), (3, 19, 236), (21, 23, 248),
+ (11, 38, 239), (0, 43, 213), (0, 33, 206), (9, 23, 171),
+ (6, 48, 146), (7, 47, 134), (11, 46, 127), (13, 25, 123),
+ (83, 66, 59), (85, 89, 32), (87, 113, 6), (148, 132, 0),
+ (176, 134, 0), (193, 160, 0), (188, 170, 0), (199, 188, 0),
+ (207, 180, 3), (224, 150, 27), (222, 142, 45), (222, 119, 86),
+ (255, 168, 71), (242, 146, 59), (237, 85, 46), (243, 61, 11),
+ (220, 70, 9), (197, 91, 15), (143, 74, 7), (33, 82, 3),
+ (47, 140, 7), (59, 198, 9), (124, 227, 0), (199, 247, 3),
+ (215, 231, 11), (226, 228, 7), (240, 182, 13), (234, 154, 15),
+ (221, 167, 9), (164, 181, 43), (152, 188, 18), (118, 209, 7),
+ (168, 196, 0), (159, 163, 14), (165, 133, 0), (143, 139, 3),
+ (139, 158, 0), (89, 195, 1), (63, 211, 0), (61, 219, 0),
+ (119, 235, 4), (164, 244, 5), (215, 234, 18), (237, 235, 12),
+ (255, 195, 40), (253, 142, 8), (245, 112, 7), (221, 128, 7),
+ (156, 142, 0), (120, 200, 5), (70, 204, 19), (28, 241, 35),
+ (11, 252, 49), (66, 228, 46), (128, 242, 9), (178, 229, 4),
+ (218, 208, 32), (241, 180, 14), (240, 147, 7), (232, 118, 4),
+ (249, 52, 7), (250, 23, 14), (223, 1, 24), (193, 11, 34),
+ (207, 5, 21), (218, 0, 14), (227, 12, 7), (254, 34, 8),
+ (246, 75, 3), (228, 107, 2), (186, 201, 76), (193, 125, 24)
+ ),
+
+// 369 00017
+((86, 162, 180), (79, 164, 187), (79, 163, 189), (80, 162, 191),
+ (86, 163, 190), (93, 164, 189), (96, 164, 188), (100, 164, 188),
+ (105, 163, 185), (102, 167, 183), (100, 171, 182), (97, 176, 180),
+ (94, 182, 179), (90, 190, 178), (87, 198, 177), (87, 202, 176),
+ (88, 206, 175), (95, 223, 178), (102, 226, 178), (109, 230, 178),
+ (117, 231, 175), (125, 233, 173), (128, 232, 171), (131, 231, 170),
+ (145, 226, 164), (149, 223, 164), (153, 220, 164), (157, 217, 164),
+ (162, 215, 164), (161, 214, 163), (160, 214, 163), (161, 210, 162),
+ (163, 206, 164), (166, 196, 172), (167, 190, 175), (168, 185, 179),
+ (169, 178, 181), (171, 172, 184), (173, 168, 183), (176, 165, 183),
+ (189, 149, 180), (192, 139, 181), (195, 130, 183), (195, 123, 186),
+ (196, 117, 189), (193, 114, 191), (190, 111, 193), (184, 106, 197),
+ (177, 103, 202), (163, 101, 209), (156, 103, 211), (149, 106, 214),
+ (142, 108, 213), (135, 110, 213), (133, 112, 211), (132, 114, 209),
+ (131, 122, 200), (135, 122, 199), (140, 123, 198), (142, 120, 196),
+ (145, 118, 194), (144, 116, 192), (144, 114, 191), (141, 110, 186),
+ (139, 105, 180), (136, 103, 170), (133, 102, 169), (131, 101, 169),
+ (129, 100, 169), (127, 100, 169), (127, 98, 170), (127, 98, 170),
+ (125, 99, 171), (126, 103, 169), (127, 107, 168), (127, 108, 170),
+ (127, 109, 172), (126, 109, 172), (126, 109, 172), (125, 107, 170),
+ (125, 106, 167), (128, 107, 166), (126, 107, 169), (124, 108, 173),
+ (123, 107, 176), (123, 107, 179), (121, 106, 183), (117, 103, 188),
+ (108, 98, 189), (104, 103, 189), (100, 108, 190), (98, 111, 192),
+ (96, 114, 194), (91, 121, 200), (87, 128, 202), (83, 134, 203),
+ (78, 142, 204), (69, 158, 197), (62, 161, 190), (55, 165, 183),
+ (55, 167, 179), (55, 169, 176), (57, 175, 172), (58, 183, 168),
+ (57, 190, 160), (55, 191, 157), (53, 192, 155), (51, 191, 155),
+ (50, 191, 155), (50, 191, 150), (54, 191, 145), (61, 191, 141),
+ (68, 191, 140), (82, 189, 136), (84, 188, 135), (86, 187, 135),
+ (92, 181, 129), (102, 178, 125), (112, 179, 120), (123, 182, 115),
+ (140, 187, 106), (146, 184, 102), (152, 181, 98), (152, 178, 98),
+ (153, 175, 98), (156, 169, 98), (163, 164, 98), (169, 160, 103),
+ (175, 157, 108), (182, 154, 126), (181, 151, 129), (181, 148, 133),
+ (183, 139, 139), (187, 129, 142), (195, 121, 147), (203, 115, 151),
+ (221, 108, 158), (226, 102, 162), (231, 96, 166), (231, 92, 168),
+ (232, 88, 170), (232, 82, 174), (231, 78, 178), (230, 75, 179),
+ (229, 74, 178), (228, 78, 177), (227, 79, 176), (227, 81, 175),
+ (226, 81, 171), (226, 79, 171), (227, 76, 173), (227, 71, 177),
+ (229, 64, 182), (226, 63, 181), (224, 62, 180), (218, 62, 178),
+ (212, 61, 176), (204, 61, 174), (197, 62, 172), (190, 63, 173),
+ (184, 62, 172), (171, 65, 164), (167, 66, 159), (163, 67, 155),
+ (154, 70, 145), (148, 72, 139), (144, 73, 135), (141, 72, 134),
+ (142, 71, 132), (141, 71, 131), (141, 71, 131), (143, 71, 132),
+ (145, 67, 132), (145, 64, 131), (145, 60, 136), (144, 53, 144),
+ (145, 45, 152), (145, 38, 162), (145, 32, 167), (143, 29, 165),
+ (141, 29, 164), (140, 30, 162), (138, 32, 160), (139, 36, 158),
+ (147, 36, 149), (148, 36, 148), (150, 36, 147), (153, 32, 145),
+ (155, 29, 144), (157, 28, 144), (157, 27, 145), (158, 26, 143),
+ (162, 26, 146), (170, 28, 150), (175, 29, 153), (179, 29, 153),
+ (182, 28, 154), (181, 27, 152), (177, 30, 149), (172, 32, 145),
+ (166, 36, 138), (159, 40, 131), (151, 43, 123), (144, 46, 121),
+ (137, 52, 121), (128, 58, 123), (118, 62, 121), (109, 65, 120),
+ (105, 70, 120), (102, 75, 122), (99, 79, 124), (98, 83, 130),
+ (98, 85, 136), (96, 88, 143), (93, 92, 152), (91, 96, 159),
+ (92, 101, 164), (92, 104, 165), (94, 105, 167), (97, 107, 172),
+ (99, 109, 178), (98, 109, 184), (94, 107, 187), (92, 106, 190),
+ (91, 107, 192), (90, 109, 196), (91, 114, 202), (95, 121, 205),
+ (101, 127, 207), (105, 134, 210), (108, 140, 211), (112, 145, 210),
+ (114, 149, 208), (113, 149, 205), (112, 152, 203), (113, 156, 202),
+ (114, 160, 201), (115, 159, 201), (116, 155, 201), (119, 151, 201),
+ (121, 145, 200), (126, 137, 200), (129, 130, 199), (134, 123, 194),
+ (137, 117, 190), (135, 114, 186), (134, 113, 181), (131, 115, 178),
+ (127, 116, 175), (121, 120, 174), (113, 126, 173), (109, 136, 174),
+ (105, 143, 175), (101, 149, 176), (97, 154, 177), (90, 159, 179)
+ ),
+
+// 370 040208-115
+((88, 175, 222), (100, 187, 234), (106, 192, 238), (113, 197, 242),
+ (108, 187, 227), (103, 178, 212), (98, 177, 207), (94, 176, 203),
+ (133, 142, 168), (143, 146, 166), (153, 151, 165), (141, 157, 164),
+ (129, 163, 163), (111, 142, 134), (94, 122, 105), (89, 123, 109),
+ (84, 124, 114), (51, 103, 100), (40, 66, 82), (29, 29, 65),
+ (58, 26, 89), (87, 23, 113), (102, 30, 128), (117, 37, 144),
+ (78, 72, 130), (80, 126, 166), (83, 181, 203), (68, 167, 204),
+ (54, 153, 206), (53, 152, 203), (53, 152, 201), (48, 152, 200),
+ (59, 148, 193), (54, 146, 192), (46, 141, 185), (39, 137, 179),
+ (35, 120, 161), (31, 104, 144), (28, 97, 120), (26, 91, 97),
+ (10, 36, 43), (11, 28, 31), (13, 21, 19), (6, 11, 10),
+ (0, 2, 1), (0, 1, 1), (0, 0, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 3, 3), (0, 6, 7), (6, 13, 16), (13, 21, 26),
+ (28, 24, 29), (24, 22, 36), (20, 21, 43), (35, 38, 52),
+ (51, 56, 62), (56, 62, 66), (62, 68, 70), (64, 94, 88),
+ (129, 103, 110), (170, 125, 134), (174, 145, 154), (179, 166, 174),
+ (181, 169, 180), (184, 173, 187), (179, 178, 200), (187, 203, 225),
+ (181, 195, 238), (182, 205, 244), (184, 216, 250), (178, 220, 244),
+ (173, 224, 238), (167, 213, 231), (162, 202, 225), (157, 180, 215),
+ (157, 177, 212), (160, 163, 190), (150, 176, 198), (141, 189, 206),
+ (135, 189, 207), (130, 189, 209), (125, 184, 223), (119, 197, 238),
+ (119, 192, 244), (129, 205, 245), (140, 219, 247), (145, 233, 250),
+ (151, 247, 253), (149, 252, 255), (151, 254, 255), (160, 238, 255),
+ (176, 238, 255), (178, 235, 241), (164, 208, 220), (151, 182, 200),
+ (149, 184, 193), (148, 186, 187), (136, 188, 190), (119, 169, 176),
+ (138, 176, 190), (133, 174, 195), (129, 173, 200), (130, 165, 196),
+ (132, 158, 192), (91, 97, 179), (103, 92, 187), (131, 110, 189),
+ (182, 133, 187), (153, 141, 168), (156, 143, 161), (160, 146, 155),
+ (160, 130, 136), (162, 125, 126), (163, 101, 100), (170, 78, 78),
+ (190, 67, 83), (212, 55, 71), (234, 43, 59), (218, 52, 71),
+ (203, 62, 83), (204, 81, 97), (206, 84, 106), (225, 88, 129),
+ (222, 56, 72), (215, 94, 118), (221, 96, 127), (227, 99, 137),
+ (212, 97, 116), (225, 95, 117), (234, 100, 116), (231, 113, 131),
+ (219, 151, 169), (208, 146, 169), (198, 141, 169), (191, 139, 158),
+ (185, 138, 148), (163, 106, 112), (163, 84, 89), (160, 61, 69),
+ (160, 51, 69), (125, 50, 74), (114, 38, 63), (103, 26, 53),
+ (27, 13, 51), (2, 11, 35), (5, 0, 7), (1, 0, 2),
+ (28, 0, 35), (35, 3, 43), (42, 7, 51), (80, 12, 95),
+ (100, 40, 93), (110, 31, 60), (143, 32, 52), (125, 44, 37),
+ (118, 35, 58), (100, 10, 103), (105, 13, 104), (110, 16, 105),
+ (141, 35, 132), (170, 86, 162), (181, 100, 157), (151, 118, 157),
+ (140, 97, 108), (136, 92, 102), (132, 88, 97), (129, 100, 106),
+ (129, 116, 126), (99, 112, 122), (65, 94, 125), (61, 87, 116),
+ (67, 71, 103), (130, 70, 98), (138, 53, 50), (141, 51, 52),
+ (146, 40, 57), (151, 32, 48), (144, 45, 53), (160, 51, 58),
+ (160, 42, 44), (166, 48, 52), (173, 54, 60), (187, 62, 85),
+ (189, 67, 85), (187, 64, 82), (179, 67, 71), (176, 62, 66),
+ (170, 67, 68), (174, 61, 65), (170, 64, 66), (165, 65, 64),
+ (162, 65, 70), (166, 83, 88), (166, 88, 93), (163, 89, 91),
+ (157, 102, 97), (157, 106, 116), (160, 95, 97), (154, 96, 94),
+ (152, 114, 113), (144, 124, 128), (134, 129, 140), (118, 123, 135),
+ (119, 143, 136), (114, 148, 137), (116, 155, 145), (108, 158, 170),
+ (103, 164, 166), (102, 211, 182), (116, 247, 234), (118, 249, 247),
+ (129, 248, 250), (135, 250, 247), (149, 250, 247), (141, 246, 245),
+ (141, 249, 240), (146, 247, 247), (146, 211, 236), (148, 203, 228),
+ (144, 226, 228), (136, 199, 233), (135, 174, 222), (148, 193, 225),
+ (166, 192, 219), (182, 208, 244), (197, 219, 250), (214, 222, 252),
+ (215, 219, 250), (193, 216, 252), (173, 223, 253), (160, 222, 253),
+ (144, 221, 244), (129, 206, 236), (125, 203, 233), (102, 239, 230),
+ (99, 204, 199), (84, 169, 197), (70, 137, 149), (21, 119, 101),
+ (24, 99, 91), (24, 62, 56), (23, 46, 40), (26, 26, 27),
+ (26, 32, 30), (34, 46, 42), (35, 92, 67), (48, 101, 113),
+ (62, 107, 119), (62, 139, 160), (62, 150, 184), (72, 171, 220)
+ ),
+
+// 371 040221-00
+((112, 84, 74), (97, 83, 80), (96, 83, 80), (95, 84, 81),
+ (92, 77, 73), (90, 71, 66), (86, 67, 62), (82, 63, 58),
+ (67, 43, 40), (65, 36, 33), (64, 30, 27), (68, 26, 21),
+ (73, 22, 16), (80, 19, 12), (87, 17, 9), (90, 16, 8),
+ (93, 16, 7), (111, 21, 7), (121, 25, 9), (131, 29, 12),
+ (137, 32, 13), (143, 36, 14), (144, 35, 13), (146, 35, 13),
+ (148, 37, 13), (149, 39, 14), (151, 42, 15), (144, 45, 18),
+ (138, 48, 21), (132, 46, 21), (127, 45, 22), (112, 41, 22),
+ (96, 35, 20), (69, 23, 13), (61, 20, 11), (54, 17, 10),
+ (52, 16, 9), (50, 15, 9), (49, 14, 9), (48, 14, 9),
+ (49, 12, 11), (54, 16, 14), (59, 21, 18), (70, 30, 26),
+ (81, 39, 34), (88, 43, 38), (95, 48, 42), (110, 59, 49),
+ (123, 68, 57), (141, 85, 73), (149, 94, 82), (157, 103, 92),
+ (161, 108, 97), (166, 113, 102), (169, 114, 101), (172, 115, 100),
+ (170, 106, 89), (164, 97, 80), (158, 88, 72), (149, 78, 65),
+ (140, 69, 58), (138, 64, 53), (137, 60, 49), (132, 52, 39),
+ (135, 52, 39), (136, 50, 36), (131, 51, 39), (126, 52, 42),
+ (124, 53, 44), (123, 55, 46), (111, 49, 42), (109, 52, 48),
+ (115, 61, 53), (115, 66, 58), (115, 71, 63), (111, 75, 67),
+ (108, 79, 72), (103, 77, 72), (98, 76, 72), (95, 76, 70),
+ (98, 75, 66), (117, 78, 60), (132, 90, 71), (147, 103, 83),
+ (153, 110, 90), (159, 117, 97), (170, 131, 114), (176, 141, 125),
+ (185, 148, 130), (190, 152, 134), (195, 157, 139), (199, 162, 143),
+ (203, 167, 148), (214, 182, 166), (221, 196, 183), (226, 206, 198),
+ (226, 213, 207), (220, 214, 211), (220, 215, 211), (221, 216, 212),
+ (223, 219, 215), (226, 222, 218), (234, 228, 224), (243, 236, 231),
+ (244, 239, 238), (237, 233, 232), (231, 227, 226), (226, 222, 220),
+ (222, 218, 215), (210, 206, 203), (202, 196, 192), (191, 184, 181),
+ (181, 173, 171), (170, 165, 165), (169, 164, 164), (169, 164, 163),
+ (169, 165, 164), (172, 169, 168), (176, 172, 172), (178, 175, 175),
+ (183, 182, 183), (182, 182, 182), (181, 183, 182), (180, 183, 182),
+ (180, 183, 182), (179, 180, 180), (177, 177, 174), (174, 168, 166),
+ (173, 161, 156), (169, 142, 129), (168, 138, 123), (168, 135, 117),
+ (168, 126, 105), (170, 123, 98), (172, 119, 92), (175, 117, 91),
+ (190, 118, 87), (198, 119, 85), (207, 120, 84), (210, 119, 83),
+ (213, 118, 83), (216, 117, 79), (210, 111, 78), (201, 104, 71),
+ (190, 96, 65), (178, 85, 52), (178, 82, 48), (178, 79, 45),
+ (180, 76, 38), (180, 73, 33), (179, 72, 28), (175, 72, 25),
+ (176, 74, 28), (180, 76, 30), (185, 79, 32), (196, 85, 39),
+ (208, 90, 46), (217, 99, 51), (223, 105, 54), (226, 109, 58),
+ (227, 109, 59), (223, 99, 56), (222, 93, 54), (221, 87, 52),
+ (215, 81, 49), (209, 75, 44), (202, 72, 39), (195, 69, 33),
+ (192, 69, 26), (192, 67, 26), (192, 66, 26), (191, 63, 27),
+ (189, 59, 28), (185, 58, 29), (177, 58, 30), (172, 63, 35),
+ (168, 70, 42), (170, 79, 49), (172, 84, 58), (174, 86, 64),
+ (174, 86, 67), (167, 82, 66), (154, 76, 63), (139, 69, 58),
+ (114, 60, 49), (110, 58, 48), (106, 56, 47), (103, 52, 44),
+ (105, 49, 41), (111, 46, 36), (115, 44, 32), (120, 48, 29),
+ (125, 51, 28), (133, 55, 30), (141, 61, 31), (151, 68, 35),
+ (162, 74, 41), (174, 80, 47), (184, 86, 51), (190, 91, 54),
+ (193, 91, 55), (192, 90, 55), (188, 89, 53), (184, 90, 54),
+ (182, 88, 55), (182, 87, 55), (181, 86, 53), (177, 81, 49),
+ (175, 76, 44), (171, 70, 36), (169, 67, 35), (168, 65, 36),
+ (172, 69, 40), (178, 75, 45), (180, 83, 54), (183, 91, 60),
+ (185, 97, 65), (188, 101, 72), (189, 105, 77), (192, 111, 87),
+ (194, 117, 95), (197, 123, 105), (197, 130, 113), (190, 136, 121),
+ (182, 137, 125), (175, 135, 122), (169, 130, 117), (160, 123, 110),
+ (151, 111, 100), (142, 101, 90), (130, 94, 82), (115, 85, 77),
+ (101, 77, 68), (91, 68, 59), (85, 62, 51), (81, 53, 43),
+ (81, 46, 34), (84, 40, 28), (90, 37, 25), (94, 34, 23),
+ (98, 35, 23), (106, 38, 28), (115, 42, 29), (126, 43, 29),
+ (135, 44, 28), (146, 48, 28), (153, 48, 27), (154, 51, 28),
+ (155, 54, 36), (154, 61, 43), (153, 67, 52), (149, 72, 59),
+ (147, 80, 68), (142, 83, 71), (134, 84, 70), (122, 83, 72)
+ ),
+
+// 372 040221-11
+((31, 15, 114), (40, 21, 136), (45, 23, 145), (51, 26, 154),
+ (55, 27, 159), (59, 29, 165), (60, 30, 167), (61, 31, 170),
+ (65, 33, 178), (67, 34, 182), (70, 36, 186), (73, 37, 191),
+ (76, 38, 197), (81, 40, 204), (87, 43, 211), (91, 44, 216),
+ (95, 46, 221), (112, 53, 243), (120, 55, 249), (129, 57, 255),
+ (138, 58, 255), (147, 60, 255), (151, 60, 255), (155, 61, 255),
+ (170, 66, 255), (174, 67, 255), (178, 68, 255), (178, 68, 255),
+ (178, 68, 255), (177, 67, 255), (177, 67, 255), (172, 66, 255),
+ (164, 64, 255), (136, 55, 234), (120, 49, 219), (104, 44, 204),
+ (90, 38, 187), (77, 32, 171), (71, 30, 163), (65, 28, 156),
+ (45, 20, 132), (41, 18, 127), (38, 16, 122), (42, 18, 128),
+ (46, 21, 134), (50, 22, 139), (55, 23, 145), (64, 27, 158),
+ (72, 31, 171), (89, 39, 199), (96, 44, 215), (104, 49, 232),
+ (107, 51, 240), (111, 54, 249), (110, 54, 248), (110, 54, 248),
+ (98, 48, 229), (89, 45, 217), (81, 42, 206), (75, 39, 198),
+ (70, 37, 190), (68, 35, 186), (66, 34, 183), (62, 33, 177),
+ (60, 31, 171), (59, 31, 171), (62, 32, 176), (66, 34, 182),
+ (67, 35, 184), (68, 36, 186), (68, 36, 184), (67, 34, 182),
+ (62, 32, 176), (60, 32, 174), (59, 32, 173), (56, 30, 169),
+ (53, 29, 165), (50, 28, 162), (48, 27, 160), (44, 26, 156),
+ (42, 27, 156), (45, 29, 168), (50, 32, 177), (56, 36, 187),
+ (59, 37, 192), (62, 38, 197), (70, 42, 209), (77, 46, 222),
+ (95, 55, 253), (102, 58, 254), (110, 61, 255), (112, 62, 255),
+ (115, 64, 255), (118, 64, 255), (121, 64, 255), (123, 65, 255),
+ (126, 65, 255), (129, 65, 255), (129, 65, 255), (129, 65, 255),
+ (129, 65, 255), (129, 65, 255), (128, 65, 255), (126, 65, 255),
+ (123, 65, 255), (119, 64, 255), (116, 64, 255), (113, 62, 255),
+ (110, 61, 255), (103, 59, 255), (93, 55, 250), (83, 50, 234),
+ (73, 45, 216), (51, 33, 173), (46, 29, 162), (42, 26, 151),
+ (32, 20, 128), (21, 12, 106), (12, 7, 88), (6, 3, 73),
+ (1, 0, 59), (3, 0, 60), (5, 0, 61), (7, 0, 63),
+ (9, 1, 66), (14, 4, 76), (20, 6, 87), (26, 11, 101),
+ (31, 15, 114), (40, 21, 136), (42, 22, 140), (45, 23, 145),
+ (51, 26, 154), (55, 28, 160), (59, 29, 165), (61, 31, 170),
+ (65, 33, 178), (67, 34, 182), (70, 36, 186), (71, 36, 188),
+ (72, 37, 190), (76, 38, 197), (81, 40, 203), (87, 43, 211),
+ (95, 46, 221), (112, 53, 243), (117, 54, 248), (122, 55, 253),
+ (129, 57, 255), (138, 57, 255), (147, 60, 255), (155, 61, 255),
+ (170, 66, 255), (172, 66, 255), (175, 67, 255), (178, 68, 255),
+ (178, 68, 255), (178, 68, 255), (177, 67, 255), (172, 66, 255),
+ (164, 64, 255), (136, 55, 234), (128, 52, 226), (120, 50, 218),
+ (104, 44, 204), (89, 38, 187), (77, 32, 171), (65, 28, 156),
+ (45, 20, 132), (42, 18, 128), (40, 17, 125), (38, 16, 122),
+ (40, 17, 126), (46, 21, 134), (55, 23, 145), (64, 27, 158),
+ (72, 31, 171), (81, 36, 184), (89, 39, 199), (96, 44, 215),
+ (104, 49, 232), (110, 53, 243), (111, 54, 249), (110, 54, 248),
+ (98, 48, 229), (93, 46, 222), (89, 44, 216), (81, 42, 206),
+ (75, 39, 198), (70, 37, 190), (66, 34, 183), (62, 33, 177),
+ (60, 31, 171), (59, 31, 168), (59, 31, 171), (62, 33, 176),
+ (66, 34, 182), (68, 36, 186), (68, 36, 184), (67, 34, 182),
+ (65, 33, 178), (62, 32, 176), (61, 32, 176), (59, 32, 173),
+ (56, 31, 170), (53, 29, 165), (48, 27, 160), (44, 26, 156),
+ (42, 27, 156), (43, 28, 161), (45, 29, 168), (50, 33, 177),
+ (56, 36, 187), (62, 38, 197), (70, 42, 209), (77, 46, 222),
+ (86, 50, 237), (95, 55, 253), (103, 59, 255), (110, 61, 255),
+ (115, 64, 255), (118, 64, 255), (121, 64, 255), (123, 65, 255),
+ (126, 65, 255), (128, 65, 255), (129, 65, 255), (129, 65, 255),
+ (129, 65, 255), (129, 65, 255), (128, 65, 255), (126, 65, 255),
+ (125, 65, 255), (123, 65, 255), (120, 65, 255), (116, 64, 255),
+ (110, 61, 255), (103, 59, 255), (93, 55, 250), (83, 50, 234),
+ (73, 45, 216), (62, 39, 197), (51, 33, 173), (42, 26, 151),
+ (32, 20, 128), (21, 12, 106), (12, 7, 88), (6, 3, 73),
+ (3, 1, 65), (1, 0, 59), (1, 0, 57), (5, 0, 61),
+ (9, 1, 66), (14, 4, 76), (20, 6, 87), (26, 11, 101)
+ ),
+
+// 373 040221-12
+((97, 81, 35), (82, 94, 46), (81, 97, 49), (80, 100, 53),
+ (83, 101, 54), (86, 102, 55), (94, 104, 55), (103, 106, 56),
+ (138, 114, 59), (147, 116, 63), (157, 119, 67), (161, 118, 66),
+ (165, 117, 65), (173, 113, 58), (181, 110, 52), (189, 107, 47),
+ (197, 104, 43), (219, 99, 37), (216, 98, 38), (214, 97, 39),
+ (204, 96, 38), (194, 95, 37), (191, 93, 34), (189, 91, 31),
+ (186, 81, 19), (182, 78, 17), (178, 75, 16), (169, 75, 17),
+ (161, 76, 19), (156, 77, 20), (151, 79, 21), (140, 83, 24),
+ (127, 84, 24), (111, 77, 21), (104, 73, 20), (98, 70, 19),
+ (92, 70, 20), (86, 70, 22), (80, 71, 23), (75, 72, 24),
+ (60, 76, 31), (57, 76, 31), (54, 76, 32), (54, 74, 32),
+ (54, 73, 32), (53, 72, 32), (53, 71, 32), (54, 72, 34),
+ (54, 72, 34), (57, 75, 35), (58, 77, 34), (60, 79, 34),
+ (62, 80, 34), (64, 81, 35), (64, 81, 35), (65, 81, 36),
+ (70, 85, 39), (77, 87, 39), (85, 89, 39), (99, 90, 37),
+ (114, 92, 35), (122, 93, 35), (130, 95, 35), (145, 97, 34),
+ (160, 102, 36), (185, 103, 36), (196, 100, 32), (207, 97, 29),
+ (211, 95, 26), (215, 93, 24), (222, 88, 18), (224, 84, 14),
+ (213, 74, 9), (202, 69, 8), (191, 64, 8), (174, 60, 7),
+ (158, 56, 6), (150, 55, 6), (143, 55, 6), (128, 52, 7),
+ (114, 48, 7), (90, 38, 6), (75, 34, 5), (61, 30, 5),
+ (54, 29, 6), (48, 28, 7), (39, 29, 8), (32, 30, 8),
+ (33, 32, 8), (37, 34, 7), (41, 36, 7), (43, 36, 8),
+ (45, 37, 10), (53, 41, 10), (62, 46, 11), (77, 53, 11),
+ (97, 58, 9), (133, 73, 8), (150, 76, 8), (167, 80, 9),
+ (172, 81, 10), (178, 83, 11), (190, 84, 11), (202, 85, 9),
+ (215, 81, 6), (210, 77, 4), (205, 74, 3), (198, 71, 3),
+ (191, 68, 3), (175, 62, 4), (158, 57, 3), (142, 54, 5),
+ (131, 52, 8), (109, 54, 15), (104, 55, 17), (100, 57, 20),
+ (94, 60, 26), (90, 63, 29), (89, 66, 32), (94, 66, 34),
+ (117, 73, 34), (133, 84, 34), (149, 95, 35), (157, 101, 39),
+ (165, 108, 43), (180, 122, 54), (190, 130, 63), (197, 138, 71),
+ (205, 145, 78), (221, 162, 89), (223, 167, 93), (226, 173, 98),
+ (229, 186, 111), (227, 193, 122), (223, 197, 132), (216, 193, 134),
+ (213, 175, 124), (216, 167, 114), (219, 160, 104), (220, 155, 99),
+ (221, 151, 95), (224, 142, 89), (222, 129, 80), (218, 115, 63),
+ (217, 102, 47), (225, 87, 19), (226, 86, 15), (228, 85, 11),
+ (234, 86, 8), (237, 86, 8), (239, 88, 8), (238, 87, 9),
+ (238, 87, 10), (237, 88, 10), (236, 90, 11), (231, 95, 16),
+ (226, 101, 24), (221, 109, 33), (217, 116, 44), (211, 121, 54),
+ (205, 124, 65), (190, 126, 72), (184, 126, 73), (178, 126, 75),
+ (163, 125, 78), (153, 121, 77), (142, 118, 77), (134, 114, 78),
+ (120, 106, 70), (116, 103, 67), (113, 100, 65), (104, 95, 59),
+ (99, 86, 51), (98, 76, 41), (103, 67, 31), (110, 58, 24),
+ (117, 53, 18), (124, 50, 15), (126, 53, 15), (125, 57, 16),
+ (123, 59, 19), (122, 59, 19), (122, 56, 17), (121, 54, 16),
+ (118, 53, 18), (116, 55, 19), (114, 58, 20), (112, 65, 25),
+ (110, 73, 32), (111, 81, 38), (113, 89, 46), (114, 98, 52),
+ (123, 106, 55), (132, 115, 55), (142, 120, 54), (152, 123, 53),
+ (165, 126, 50), (175, 131, 50), (177, 131, 54), (182, 131, 56),
+ (186, 134, 57), (185, 132, 56), (178, 127, 51), (173, 121, 44),
+ (167, 117, 38), (159, 112, 38), (151, 106, 40), (145, 106, 44),
+ (143, 109, 52), (138, 114, 60), (135, 116, 65), (132, 120, 68),
+ (132, 125, 70), (136, 127, 71), (140, 125, 69), (152, 123, 65),
+ (162, 121, 62), (171, 118, 59), (173, 114, 56), (172, 115, 55),
+ (171, 116, 56), (169, 114, 55), (172, 110, 52), (178, 104, 44),
+ (187, 97, 37), (195, 88, 30), (203, 84, 23), (207, 82, 20),
+ (209, 82, 19), (210, 84, 21), (210, 84, 21), (211, 83, 20),
+ (214, 79, 19), (217, 76, 16), (220, 70, 12), (223, 66, 8),
+ (224, 65, 8), (225, 65, 6), (223, 65, 5), (223, 64, 5),
+ (221, 62, 4), (218, 60, 5), (215, 56, 5), (212, 54, 5),
+ (211, 51, 5), (207, 51, 5), (200, 52, 4), (190, 54, 6),
+ (180, 59, 9), (169, 61, 11), (151, 58, 10), (137, 56, 11),
+ (127, 56, 13), (118, 58, 15), (106, 61, 19), (99, 71, 26)
+ ),
+
+// 374 040221-13
+((73, 127, 125), (87, 141, 136), (88, 141, 139), (89, 142, 142),
+ (81, 134, 138), (74, 126, 135), (69, 120, 131), (65, 115, 128),
+ (46, 92, 107), (35, 80, 94), (24, 69, 82), (18, 53, 75),
+ (13, 38, 69), (17, 24, 69), (22, 11, 69), (25, 8, 70),
+ (29, 6, 71), (33, 21, 78), (38, 30, 86), (44, 39, 94),
+ (56, 47, 107), (68, 55, 121), (72, 61, 126), (77, 67, 131),
+ (77, 101, 144), (73, 113, 143), (69, 125, 142), (67, 127, 137),
+ (66, 130, 133), (65, 129, 131), (64, 129, 129), (62, 124, 122),
+ (57, 115, 117), (37, 92, 90), (27, 80, 75), (18, 68, 61),
+ (12, 57, 51), (6, 47, 41), (3, 40, 37), (1, 33, 34),
+ (0, 20, 21), (0, 20, 19), (0, 21, 18), (0, 28, 23),
+ (0, 36, 29), (7, 43, 36), (14, 51, 44), (32, 64, 61),
+ (50, 73, 82), (86, 96, 119), (99, 101, 128), (113, 106, 137),
+ (118, 110, 144), (124, 114, 151), (122, 111, 151), (120, 108, 151),
+ (104, 91, 136), (92, 84, 120), (81, 77, 104), (64, 70, 89),
+ (47, 63, 75), (38, 59, 68), (30, 56, 62), (14, 48, 51),
+ (5, 40, 37), (0, 43, 20), (3, 47, 24), (6, 52, 28),
+ (10, 55, 32), (14, 59, 36), (20, 67, 44), (26, 72, 53),
+ (38, 94, 71), (48, 103, 84), (58, 112, 98), (72, 121, 112),
+ (86, 130, 126), (95, 134, 132), (104, 138, 139), (118, 144, 150),
+ (129, 148, 159), (148, 153, 174), (152, 153, 176), (156, 153, 178),
+ (158, 152, 178), (160, 152, 179), (159, 149, 177), (159, 144, 176),
+ (159, 119, 169), (154, 105, 165), (150, 92, 162), (145, 90, 161),
+ (140, 88, 160), (129, 91, 156), (119, 89, 152), (112, 88, 149),
+ (104, 80, 144), (88, 68, 134), (78, 78, 128), (69, 88, 122),
+ (65, 95, 121), (62, 102, 120), (59, 113, 120), (59, 120, 122),
+ (67, 129, 130), (77, 136, 133), (87, 143, 136), (92, 146, 138),
+ (97, 149, 141), (105, 155, 148), (110, 158, 156), (110, 160, 162),
+ (112, 162, 164), (105, 162, 161), (101, 159, 161), (98, 157, 161),
+ (90, 154, 159), (80, 149, 157), (71, 144, 154), (70, 144, 152),
+ (70, 142, 152), (74, 142, 155), (79, 143, 158), (82, 142, 159),
+ (85, 142, 160), (94, 143, 162), (102, 147, 163), (109, 150, 168),
+ (113, 153, 172), (123, 157, 177), (125, 157, 177), (128, 157, 178),
+ (132, 158, 177), (136, 160, 179), (137, 161, 181), (140, 162, 184),
+ (152, 166, 189), (156, 167, 189), (160, 168, 189), (160, 169, 189),
+ (160, 170, 189), (160, 172, 191), (161, 173, 193), (160, 173, 195),
+ (158, 172, 194), (148, 168, 187), (143, 166, 183), (138, 165, 179),
+ (127, 161, 171), (113, 153, 163), (98, 141, 153), (84, 132, 141),
+ (62, 109, 113), (57, 103, 104), (52, 98, 95), (41, 87, 80),
+ (28, 70, 64), (16, 57, 50), (6, 49, 40), (1, 42, 34),
+ (1, 41, 28), (0, 41, 19), (0, 38, 16), (0, 36, 14),
+ (0, 32, 9), (0, 28, 9), (0, 25, 11), (0, 26, 15),
+ (0, 25, 15), (0, 22, 12), (0, 20, 10), (0, 14, 9),
+ (0, 8, 11), (0, 5, 19), (0, 3, 33), (0, 0, 46),
+ (15, 0, 54), (33, 0, 61), (46, 3, 71), (55, 17, 82),
+ (62, 29, 95), (67, 39, 109), (70, 43, 117), (74, 43, 122),
+ (74, 47, 121), (70, 54, 120), (67, 62, 120), (58, 75, 123),
+ (47, 87, 123), (37, 93, 125), (34, 95, 125), (33, 94, 123),
+ (37, 100, 123), (43, 106, 126), (48, 114, 130), (51, 121, 136),
+ (56, 127, 141), (61, 129, 144), (67, 134, 145), (73, 137, 141),
+ (78, 139, 141), (80, 137, 143), (85, 134, 146), (91, 125, 147),
+ (97, 117, 147), (102, 105, 143), (100, 89, 133), (87, 71, 119),
+ (76, 59, 106), (66, 47, 97), (59, 44, 90), (59, 43, 91),
+ (62, 43, 94), (56, 45, 94), (51, 46, 94), (46, 51, 94),
+ (43, 66, 95), (49, 84, 101), (60, 103, 115), (73, 123, 129),
+ (84, 136, 141), (94, 142, 148), (103, 149, 154), (109, 152, 157),
+ (114, 155, 159), (119, 157, 160), (122, 159, 162), (123, 162, 165),
+ (126, 163, 167), (130, 163, 170), (136, 160, 173), (144, 154, 177),
+ (149, 144, 179), (151, 139, 181), (148, 139, 183), (144, 140, 183),
+ (140, 143, 183), (138, 144, 185), (136, 139, 183), (133, 132, 178),
+ (124, 127, 173), (111, 125, 165), (96, 128, 155), (82, 134, 145),
+ (71, 137, 137), (61, 133, 128), (54, 126, 121), (49, 120, 114),
+ (47, 115, 108), (44, 115, 101), (47, 117, 98), (49, 120, 96),
+ (51, 119, 101), (55, 119, 105), (59, 118, 113), (64, 122, 119)
+ ),
+
+// 375 040221-14
+((141, 124, 150), (148, 124, 134), (140, 127, 129), (132, 131, 124),
+ (116, 137, 127), (100, 143, 131), (89, 145, 134), (79, 148, 138),
+ (78, 155, 146), (80, 162, 154), (82, 169, 163), (88, 174, 166),
+ (94, 180, 170), (100, 185, 178), (107, 190, 187), (109, 190, 189),
+ (111, 191, 191), (106, 201, 205), (99, 204, 206), (92, 208, 208),
+ (97, 212, 211), (102, 217, 214), (109, 219, 214), (117, 222, 215),
+ (136, 225, 217), (121, 218, 207), (107, 212, 198), (83, 193, 182),
+ (59, 174, 166), (52, 165, 157), (45, 157, 148), (38, 142, 137),
+ (42, 129, 124), (50, 120, 101), (52, 112, 87), (54, 105, 74),
+ (59, 99, 59), (65, 94, 44), (73, 95, 44), (81, 96, 45),
+ (114, 115, 61), (125, 130, 73), (137, 145, 85), (145, 155, 86),
+ (154, 166, 87), (156, 169, 86), (159, 173, 85), (169, 172, 83),
+ (179, 169, 81), (188, 153, 88), (189, 144, 87), (191, 136, 86),
+ (189, 126, 75), (188, 116, 65), (191, 111, 57), (194, 106, 49),
+ (207, 71, 23), (215, 58, 18), (223, 46, 13), (228, 38, 14),
+ (234, 30, 15), (232, 30, 14), (230, 31, 13), (214, 34, 13),
+ (196, 33, 13), (158, 32, 16), (141, 33, 22), (125, 34, 29),
+ (121, 34, 32), (117, 34, 35), (99, 41, 44), (82, 49, 52),
+ (61, 75, 67), (58, 91, 75), (55, 107, 83), (65, 117, 88),
+ (75, 128, 94), (77, 130, 97), (80, 133, 100), (81, 139, 104),
+ (82, 143, 105), (83, 151, 110), (82, 154, 111), (82, 157, 113),
+ (80, 155, 113), (79, 154, 114), (70, 148, 117), (59, 141, 113),
+ (35, 124, 113), (24, 118, 110), (14, 112, 108), (13, 110, 105),
+ (12, 108, 103), (15, 105, 98), (18, 102, 92), (22, 100, 87),
+ (25, 100, 83), (21, 94, 79), (22, 93, 74), (24, 92, 70),
+ (27, 91, 67), (31, 91, 64), (47, 82, 54), (63, 77, 44),
+ (89, 68, 36), (98, 65, 35), (107, 62, 35), (110, 64, 36),
+ (113, 67, 38), (125, 62, 37), (138, 55, 33), (149, 48, 26),
+ (160, 40, 22), (151, 32, 18), (146, 34, 20), (141, 37, 23),
+ (131, 43, 28), (124, 49, 36), (120, 62, 47), (129, 67, 59),
+ (131, 67, 79), (135, 64, 82), (139, 62, 85), (138, 61, 87),
+ (137, 61, 90), (140, 76, 102), (158, 88, 114), (173, 108, 124),
+ (190, 112, 137), (224, 106, 122), (226, 96, 115), (229, 87, 108),
+ (232, 77, 95), (231, 69, 82), (216, 80, 73), (200, 86, 75),
+ (159, 84, 59), (141, 72, 47), (124, 61, 35), (119, 54, 30),
+ (115, 48, 26), (103, 48, 20), (95, 55, 23), (83, 64, 31),
+ (75, 74, 38), (59, 90, 52), (57, 90, 56), (56, 91, 60),
+ (57, 93, 66), (59, 99, 71), (58, 105, 77), (62, 113, 82),
+ (75, 127, 85), (75, 127, 84), (76, 127, 83), (75, 126, 78),
+ (75, 125, 74), (70, 122, 71), (65, 119, 71), (65, 121, 74),
+ (69, 128, 79), (74, 138, 86), (75, 140, 87), (77, 142, 88),
+ (80, 147, 89), (80, 148, 89), (79, 147, 92), (82, 147, 94),
+ (86, 149, 100), (85, 147, 99), (85, 146, 99), (85, 144, 97),
+ (85, 139, 86), (81, 132, 77), (80, 124, 67), (79, 116, 59),
+ (75, 107, 51), (69, 95, 43), (62, 87, 41), (60, 82, 35),
+ (58, 79, 27), (66, 75, 24), (78, 73, 20), (88, 72, 19),
+ (109, 64, 16), (114, 62, 16), (119, 60, 17), (119, 67, 16),
+ (127, 77, 25), (137, 90, 39), (147, 108, 57), (162, 126, 74),
+ (178, 141, 87), (194, 145, 98), (193, 151, 99), (189, 158, 100),
+ (179, 162, 104), (161, 167, 111), (147, 172, 119), (137, 177, 123),
+ (143, 182, 130), (146, 183, 131), (150, 181, 122), (150, 177, 108),
+ (141, 170, 94), (135, 162, 83), (127, 150, 66), (134, 142, 54),
+ (145, 134, 49), (162, 127, 42), (177, 125, 37), (182, 120, 33),
+ (187, 118, 32), (176, 117, 31), (171, 121, 31), (170, 124, 36),
+ (178, 130, 46), (190, 138, 57), (198, 147, 69), (208, 152, 82),
+ (204, 160, 99), (195, 174, 116), (183, 186, 131), (174, 202, 151),
+ (169, 215, 166), (169, 227, 183), (177, 231, 197), (189, 236, 211),
+ (196, 238, 221), (199, 235, 226), (200, 236, 234), (195, 237, 233),
+ (193, 235, 230), (186, 226, 224), (187, 215, 218), (192, 199, 208),
+ (198, 178, 192), (205, 160, 184), (208, 146, 174), (209, 133, 170),
+ (206, 126, 165), (200, 124, 165), (192, 126, 169), (188, 122, 165),
+ (192, 120, 162), (198, 115, 161), (197, 105, 168), (204, 101, 172),
+ (209, 99, 172), (211, 101, 172), (207, 106, 173), (193, 116, 170),
+ (183, 125, 164), (163, 127, 161), (154, 130, 161), (144, 129, 159)
+ ),
+
+// 376 040221-19
+((35, 145, 173), (44, 138, 178), (43, 138, 179), (42, 138, 180),
+ (35, 140, 179), (29, 143, 178), (28, 151, 168), (27, 160, 159),
+ (47, 172, 129), (64, 174, 121), (82, 177, 113), (98, 183, 114),
+ (114, 189, 116), (128, 196, 104), (143, 203, 92), (148, 204, 86),
+ (153, 205, 81), (171, 205, 69), (181, 200, 76), (192, 195, 83),
+ (194, 190, 87), (197, 186, 92), (194, 182, 91), (192, 178, 90),
+ (174, 170, 90), (171, 173, 94), (169, 176, 99), (174, 184, 111),
+ (179, 192, 123), (181, 195, 130), (184, 199, 137), (182, 203, 155),
+ (181, 203, 171), (172, 208, 194), (174, 213, 199), (177, 218, 205),
+ (177, 224, 211), (177, 230, 218), (176, 228, 223), (175, 227, 228),
+ (155, 209, 241), (146, 198, 241), (138, 188, 242), (134, 185, 233),
+ (131, 182, 224), (130, 181, 216), (130, 180, 208), (124, 175, 190),
+ (119, 163, 177), (97, 126, 144), (86, 106, 130), (75, 87, 116),
+ (67, 77, 96), (59, 67, 76), (56, 64, 68), (53, 62, 60),
+ (39, 57, 36), (31, 54, 34), (24, 51, 33), (18, 48, 32),
+ (12, 45, 31), (11, 44, 30), (10, 44, 30), (7, 45, 31),
+ (8, 48, 34), (13, 63, 42), (22, 67, 43), (32, 72, 44),
+ (37, 74, 46), (43, 76, 49), (53, 78, 59), (66, 76, 72),
+ (83, 76, 103), (93, 81, 116), (103, 87, 130), (108, 103, 142),
+ (114, 119, 154), (119, 127, 161), (125, 136, 169), (138, 150, 182),
+ (145, 163, 192), (161, 179, 198), (157, 188, 193), (154, 197, 189),
+ (150, 204, 190), (146, 212, 191), (136, 223, 197), (131, 234, 201),
+ (135, 245, 191), (146, 246, 178), (158, 247, 165), (164, 247, 158),
+ (171, 248, 152), (175, 242, 145), (179, 238, 144), (179, 231, 139),
+ (179, 224, 137), (185, 218, 125), (187, 218, 117), (190, 219, 110),
+ (191, 218, 110), (193, 217, 111), (190, 208, 114), (187, 199, 122),
+ (172, 169, 140), (155, 154, 154), (138, 140, 169), (131, 137, 175),
+ (125, 135, 182), (109, 129, 196), (100, 127, 204), (93, 127, 200),
+ (93, 121, 197), (82, 107, 180), (82, 105, 173), (82, 103, 166),
+ (87, 101, 155), (100, 106, 145), (113, 119, 134), (125, 129, 130),
+ (144, 150, 129), (143, 149, 130), (143, 149, 132), (143, 147, 133),
+ (144, 145, 135), (150, 147, 141), (147, 144, 153), (143, 143, 159),
+ (139, 142, 169), (109, 145, 185), (98, 146, 187), (88, 148, 189),
+ (77, 154, 193), (65, 157, 200), (56, 159, 199), (51, 159, 192),
+ (53, 149, 162), (51, 149, 144), (49, 150, 127), (49, 151, 125),
+ (49, 152, 123), (47, 149, 125), (46, 147, 126), (47, 136, 123),
+ (55, 132, 119), (66, 134, 107), (65, 138, 109), (64, 143, 111),
+ (62, 147, 121), (55, 151, 134), (42, 150, 148), (35, 149, 155),
+ (31, 149, 161), (32, 152, 160), (33, 155, 159), (40, 157, 156),
+ (49, 162, 155), (52, 160, 155), (51, 153, 146), (47, 141, 135),
+ (38, 122, 121), (25, 85, 84), (24, 79, 76), (24, 73, 68),
+ (29, 64, 59), (31, 63, 51), (35, 70, 49), (37, 76, 51),
+ (36, 87, 58), (35, 89, 59), (34, 92, 60), (37, 95, 63),
+ (37, 93, 65), (34, 93, 67), (35, 95, 70), (35, 96, 75),
+ (34, 100, 78), (35, 105, 81), (42, 112, 83), (53, 118, 86),
+ (59, 122, 89), (75, 127, 93), (86, 128, 103), (92, 127, 112),
+ (89, 122, 124), (88, 121, 124), (87, 121, 124), (78, 119, 124),
+ (81, 118, 116), (85, 116, 112), (90, 113, 105), (87, 105, 105),
+ (83, 97, 100), (72, 85, 93), (51, 69, 84), (34, 53, 68),
+ (20, 38, 51), (11, 27, 34), (3, 19, 26), (2, 16, 22),
+ (5, 21, 21), (8, 31, 27), (15, 46, 36), (25, 60, 45),
+ (34, 72, 54), (42, 83, 62), (47, 90, 68), (51, 95, 69),
+ (50, 100, 72), (51, 107, 79), (55, 119, 87), (62, 130, 101),
+ (73, 147, 118), (90, 162, 129), (104, 172, 132), (115, 177, 131),
+ (123, 179, 129), (122, 179, 124), (119, 177, 127), (114, 182, 135),
+ (113, 184, 142), (112, 184, 144), (110, 182, 144), (112, 178, 137),
+ (108, 168, 123), (97, 152, 110), (85, 139, 101), (70, 124, 94),
+ (53, 109, 88), (37, 93, 84), (25, 80, 76), (17, 65, 67),
+ (8, 51, 58), (4, 41, 49), (2, 32, 41), (0, 27, 35),
+ (0, 24, 31), (0, 20, 28), (0, 19, 25), (0, 18, 25),
+ (1, 19, 23), (1, 19, 20), (3, 19, 20), (3, 19, 22),
+ (3, 20, 27), (3, 24, 33), (2, 30, 42), (5, 40, 52),
+ (12, 58, 63), (22, 75, 71), (31, 80, 91), (39, 89, 109),
+ (40, 103, 129), (36, 115, 148), (32, 120, 165), (34, 130, 178)
+ ),
+
+// 377 040221-2
+((46, 16, 16), (47, 16, 16), (48, 17, 17), (50, 18, 18),
+ (51, 18, 18), (53, 19, 19), (54, 19, 19), (56, 20, 20),
+ (59, 30, 21), (57, 31, 20), (56, 33, 20), (54, 32, 19),
+ (52, 31, 18), (48, 30, 16), (44, 30, 15), (42, 32, 14),
+ (41, 34, 14), (36, 44, 15), (37, 49, 17), (39, 54, 19),
+ (41, 59, 21), (43, 65, 23), (43, 66, 23), (44, 68, 24),
+ (43, 71, 25), (42, 70, 24), (42, 69, 24), (39, 63, 22),
+ (36, 57, 20), (34, 55, 19), (33, 53, 19), (26, 46, 16),
+ (19, 41, 14), (10, 28, 10), (8, 24, 8), (7, 20, 7),
+ (6, 18, 6), (5, 16, 5), (5, 15, 5), (5, 15, 5),
+ (4, 12, 4), (4, 12, 4), (4, 13, 4), (12, 19, 6),
+ (21, 25, 9), (26, 27, 10), (31, 29, 11), (43, 39, 15),
+ (54, 49, 19), (74, 71, 26), (78, 76, 27), (83, 82, 29),
+ (82, 84, 30), (82, 86, 31), (80, 86, 31), (79, 87, 31),
+ (84, 96, 34), (88, 101, 36), (93, 106, 38), (95, 107, 38),
+ (97, 109, 39), (98, 110, 39), (99, 111, 40), (102, 112, 40),
+ (110, 120, 43), (104, 112, 40), (96, 104, 37), (88, 96, 34),
+ (83, 91, 32), (78, 86, 31), (67, 77, 27), (59, 71, 25),
+ (46, 60, 21), (44, 58, 20), (42, 56, 20), (49, 61, 21),
+ (57, 66, 23), (63, 71, 25), (69, 77, 27), (80, 86, 31),
+ (90, 93, 33), (111, 111, 40), (119, 119, 42), (127, 127, 45),
+ (129, 130, 46), (132, 133, 48), (134, 136, 49), (132, 136, 49),
+ (131, 137, 49), (129, 136, 49), (128, 136, 49), (127, 135, 48),
+ (127, 134, 48), (127, 133, 48), (126, 130, 46), (124, 127, 45),
+ (124, 126, 45), (120, 121, 43), (113, 117, 42), (106, 114, 41),
+ (100, 109, 39), (95, 105, 37), (85, 99, 35), (75, 94, 33),
+ (54, 81, 29), (43, 71, 25), (32, 62, 22), (26, 57, 20),
+ (20, 52, 18), (14, 41, 14), (12, 34, 12), (9, 26, 9),
+ (7, 22, 7), (6, 17, 6), (6, 18, 6), (6, 19, 6),
+ (8, 23, 8), (14, 34, 12), (27, 47, 16), (41, 60, 21),
+ (69, 90, 32), (81, 102, 36), (94, 114, 41), (99, 117, 42),
+ (104, 121, 43), (110, 124, 44), (114, 126, 45), (116, 123, 44),
+ (118, 120, 43), (123, 117, 44), (127, 120, 45), (131, 123, 47),
+ (139, 129, 50), (148, 135, 53), (155, 143, 56), (161, 149, 58),
+ (170, 161, 61), (173, 166, 62), (176, 171, 63), (178, 173, 64),
+ (180, 176, 65), (185, 181, 66), (186, 182, 67), (183, 181, 66),
+ (182, 178, 65), (168, 164, 60), (164, 159, 58), (160, 154, 57),
+ (154, 145, 55), (143, 135, 51), (134, 129, 48), (128, 125, 46),
+ (120, 123, 44), (118, 123, 44), (117, 123, 44), (115, 121, 43),
+ (111, 120, 43), (107, 115, 41), (103, 109, 39), (102, 105, 37),
+ (103, 105, 37), (114, 113, 41), (117, 115, 42), (121, 118, 43),
+ (127, 123, 45), (131, 126, 47), (133, 127, 48), (133, 129, 48),
+ (139, 136, 50), (139, 138, 50), (139, 140, 50), (141, 145, 52),
+ (142, 146, 52), (143, 151, 54), (145, 155, 56), (147, 158, 57),
+ (148, 161, 58), (150, 163, 58), (154, 165, 59), (161, 170, 61),
+ (167, 177, 63), (177, 186, 67), (188, 197, 71), (195, 207, 74),
+ (199, 217, 78), (199, 218, 78), (200, 219, 79), (199, 219, 79),
+ (197, 217, 78), (195, 217, 78), (191, 214, 77), (187, 210, 75),
+ (184, 207, 74), (178, 202, 73), (173, 198, 71), (170, 194, 70),
+ (169, 189, 68), (167, 183, 66), (164, 177, 63), (161, 167, 60),
+ (157, 158, 57), (158, 152, 57), (157, 148, 56), (151, 142, 54),
+ (143, 133, 51), (137, 129, 49), (130, 122, 46), (123, 116, 44),
+ (117, 110, 42), (112, 106, 40), (111, 102, 40), (105, 97, 37),
+ (97, 89, 35), (89, 79, 32), (80, 67, 28), (75, 56, 27),
+ (68, 45, 24), (59, 35, 21), (54, 29, 19), (53, 27, 19),
+ (52, 29, 18), (52, 31, 18), (52, 33, 18), (52, 39, 18),
+ (50, 43, 18), (47, 46, 16), (47, 54, 19), (49, 60, 21),
+ (51, 65, 23), (54, 68, 24), (53, 71, 25), (53, 72, 26),
+ (52, 74, 26), (51, 74, 26), (50, 74, 26), (49, 72, 26),
+ (52, 71, 25), (52, 68, 24), (53, 66, 23), (55, 66, 23),
+ (56, 68, 24), (57, 68, 24), (58, 68, 24), (59, 68, 24),
+ (58, 66, 23), (57, 63, 22), (56, 59, 21), (53, 54, 19),
+ (50, 50, 18), (50, 46, 18), (50, 42, 18), (46, 36, 16),
+ (43, 29, 15), (41, 24, 14), (43, 20, 15), (44, 15, 15)
+ ),
+
+// 378 040221-21
+((138, 101, 87), (142, 105, 101), (142, 107, 103), (143, 110, 105),
+ (145, 112, 105), (147, 115, 106), (148, 116, 107), (150, 117, 108),
+ (144, 111, 105), (137, 105, 100), (131, 99, 95), (124, 92, 88),
+ (117, 86, 82), (114, 81, 75), (111, 76, 68), (110, 74, 66),
+ (110, 72, 64), (105, 63, 59), (101, 59, 56), (97, 55, 54),
+ (97, 55, 53), (97, 55, 52), (98, 56, 52), (100, 57, 53),
+ (107, 63, 53), (106, 62, 51), (105, 62, 49), (101, 60, 47),
+ (98, 59, 46), (98, 59, 45), (98, 60, 45), (103, 60, 45),
+ (106, 62, 46), (109, 64, 40), (105, 62, 35), (101, 60, 31),
+ (99, 60, 29), (98, 60, 28), (98, 60, 28), (98, 60, 29),
+ (102, 63, 31), (99, 62, 28), (97, 62, 26), (92, 59, 22),
+ (88, 57, 19), (85, 55, 17), (82, 54, 16), (80, 53, 15),
+ (79, 53, 17), (80, 55, 19), (83, 57, 22), (86, 59, 25),
+ (89, 61, 29), (93, 63, 34), (94, 63, 36), (95, 63, 39),
+ (94, 62, 43), (92, 61, 44), (90, 61, 46), (91, 63, 48),
+ (92, 65, 50), (92, 65, 51), (93, 66, 52), (92, 64, 54),
+ (89, 62, 53), (79, 54, 48), (75, 51, 44), (72, 49, 40),
+ (72, 49, 39), (72, 49, 38), (72, 49, 38), (73, 49, 38),
+ (81, 54, 45), (87, 58, 50), (93, 62, 56), (99, 66, 62),
+ (105, 71, 68), (106, 73, 71), (108, 76, 74), (113, 81, 80),
+ (119, 88, 88), (136, 103, 102), (143, 108, 106), (151, 114, 110),
+ (152, 115, 110), (154, 117, 110), (152, 115, 110), (146, 113, 108),
+ (132, 104, 104), (126, 98, 98), (121, 92, 92), (118, 89, 88),
+ (116, 86, 84), (110, 78, 77), (103, 70, 70), (93, 62, 63),
+ (83, 54, 57), (67, 38, 46), (63, 35, 40), (60, 33, 34),
+ (59, 32, 32), (59, 32, 31), (60, 32, 28), (60, 33, 27),
+ (63, 35, 29), (65, 38, 29), (67, 42, 30), (68, 44, 30),
+ (69, 47, 31), (73, 53, 34), (79, 58, 36), (86, 64, 40),
+ (92, 69, 45), (106, 78, 55), (110, 81, 58), (114, 85, 61),
+ (121, 92, 69), (131, 102, 80), (145, 118, 97), (160, 134, 113),
+ (184, 161, 145), (194, 173, 158), (204, 185, 172), (206, 188, 177),
+ (209, 191, 182), (219, 204, 197), (228, 216, 212), (236, 228, 225),
+ (243, 237, 237), (247, 239, 235), (244, 235, 229), (241, 232, 223),
+ (233, 222, 212), (226, 212, 202), (217, 201, 191), (212, 196, 188),
+ (196, 174, 166), (186, 162, 150), (176, 151, 135), (169, 144, 126),
+ (163, 138, 118), (149, 122, 100), (137, 113, 91), (127, 103, 84),
+ (118, 95, 78), (108, 83, 63), (105, 81, 59), (103, 79, 56),
+ (97, 75, 49), (90, 70, 42), (85, 65, 37), (82, 61, 33),
+ (85, 60, 30), (87, 61, 30), (90, 62, 31), (96, 66, 34),
+ (102, 70, 37), (107, 74, 42), (112, 78, 47), (118, 81, 51),
+ (124, 86, 56), (140, 96, 62), (142, 98, 64), (145, 100, 67),
+ (149, 104, 71), (150, 106, 75), (149, 106, 79), (147, 107, 85),
+ (147, 109, 90), (146, 109, 91), (145, 109, 92), (146, 110, 94),
+ (146, 111, 94), (146, 111, 95), (143, 110, 99), (143, 110, 104),
+ (145, 113, 112), (153, 124, 125), (162, 136, 139), (172, 149, 152),
+ (180, 158, 155), (184, 161, 156), (184, 161, 157), (176, 150, 151),
+ (159, 142, 146), (156, 141, 148), (154, 141, 150), (149, 140, 145),
+ (144, 134, 136), (137, 128, 126), (126, 110, 110), (110, 94, 92),
+ (95, 76, 73), (83, 65, 62), (74, 57, 53), (67, 51, 43),
+ (65, 48, 36), (67, 46, 32), (70, 47, 30), (75, 50, 30),
+ (82, 55, 33), (90, 63, 37), (98, 71, 41), (108, 79, 48),
+ (118, 87, 55), (126, 95, 62), (135, 104, 70), (144, 112, 79),
+ (151, 119, 86), (154, 123, 92), (153, 123, 95), (151, 122, 97),
+ (145, 116, 97), (139, 111, 96), (134, 105, 95), (127, 99, 91),
+ (120, 93, 88), (112, 86, 82), (102, 78, 76), (92, 69, 68),
+ (84, 62, 63), (81, 56, 59), (81, 55, 55), (83, 56, 55),
+ (88, 59, 55), (93, 63, 57), (96, 67, 59), (96, 69, 61),
+ (98, 71, 63), (103, 76, 66), (110, 82, 68), (115, 88, 70),
+ (120, 94, 71), (124, 98, 73), (122, 98, 73), (117, 96, 70),
+ (112, 92, 67), (109, 88, 61), (105, 85, 56), (103, 83, 50),
+ (102, 81, 44), (103, 81, 41), (101, 79, 37), (100, 77, 33),
+ (99, 75, 31), (98, 75, 30), (100, 75, 31), (101, 74, 34),
+ (103, 74, 37), (103, 73, 41), (104, 72, 42), (107, 73, 45),
+ (112, 77, 50), (118, 83, 56), (124, 87, 65), (132, 94, 76)
+ ),
+
+// 379 040221-22
+((91, 108, 100), (93, 109, 98), (89, 105, 92), (86, 101, 87),
+ (83, 98, 85), (81, 95, 84), (78, 92, 82), (76, 89, 81),
+ (63, 74, 71), (56, 66, 65), (50, 59, 60), (43, 52, 56),
+ (37, 45, 52), (34, 40, 49), (31, 36, 47), (31, 36, 46),
+ (31, 36, 45), (33, 38, 43), (33, 38, 44), (34, 39, 45),
+ (35, 40, 45), (36, 41, 45), (37, 43, 45), (39, 45, 45),
+ (46, 56, 54), (55, 65, 62), (64, 74, 71), (82, 91, 84),
+ (101, 109, 98), (109, 116, 104), (117, 123, 110), (128, 135, 119),
+ (139, 145, 128), (152, 157, 136), (152, 155, 135), (152, 153, 134),
+ (140, 144, 125), (129, 135, 116), (123, 130, 112), (118, 126, 108),
+ (101, 110, 94), (96, 106, 91), (91, 102, 88), (90, 101, 87),
+ (89, 100, 87), (90, 100, 88), (91, 101, 89), (92, 101, 92),
+ (95, 103, 96), (99, 108, 100), (100, 110, 100), (102, 112, 101),
+ (101, 112, 101), (100, 112, 101), (99, 111, 99), (99, 110, 98),
+ (96, 103, 90), (90, 98, 85), (85, 93, 80), (78, 85, 74),
+ (71, 78, 68), (67, 72, 65), (64, 67, 63), (56, 58, 56),
+ (49, 52, 52), (36, 42, 44), (32, 37, 42), (28, 33, 41),
+ (27, 32, 40), (26, 31, 40), (25, 30, 40), (26, 31, 40),
+ (27, 32, 43), (27, 32, 44), (27, 33, 45), (27, 33, 45),
+ (27, 33, 45), (27, 33, 45), (27, 34, 45), (28, 34, 46),
+ (28, 35, 47), (30, 37, 49), (33, 40, 49), (36, 44, 50),
+ (37, 46, 51), (39, 48, 52), (41, 49, 51), (43, 48, 51),
+ (48, 53, 50), (52, 58, 53), (56, 64, 56), (57, 65, 59),
+ (59, 67, 62), (63, 71, 67), (69, 78, 75), (75, 87, 83),
+ (82, 95, 89), (92, 106, 99), (96, 111, 102), (101, 116, 106),
+ (103, 117, 107), (106, 119, 108), (107, 120, 107), (106, 119, 106),
+ (109, 123, 107), (113, 126, 110), (118, 130, 114), (118, 130, 115),
+ (118, 130, 116), (117, 130, 117), (113, 128, 116), (111, 127, 115),
+ (110, 126, 111), (103, 113, 99), (98, 107, 94), (94, 101, 90),
+ (84, 90, 82), (73, 79, 72), (65, 71, 66), (58, 62, 60),
+ (47, 48, 51), (40, 42, 48), (34, 37, 46), (32, 35, 45),
+ (30, 34, 45), (27, 31, 45), (26, 30, 44), (26, 31, 44),
+ (26, 31, 44), (29, 33, 47), (30, 34, 47), (32, 36, 48),
+ (37, 41, 51), (41, 47, 54), (45, 54, 57), (49, 59, 61),
+ (59, 70, 66), (63, 75, 68), (67, 80, 71), (68, 81, 72),
+ (69, 83, 74), (70, 85, 74), (71, 85, 74), (72, 86, 74),
+ (73, 86, 75), (77, 89, 81), (79, 91, 84), (82, 94, 88),
+ (89, 102, 96), (96, 111, 104), (103, 120, 113), (110, 126, 120),
+ (119, 135, 131), (121, 136, 132), (123, 138, 133), (125, 142, 133),
+ (129, 144, 133), (131, 146, 131), (132, 143, 129), (132, 141, 125),
+ (130, 138, 120), (128, 135, 114), (128, 134, 113), (128, 134, 113),
+ (128, 134, 113), (125, 132, 112), (123, 129, 110), (118, 124, 107),
+ (103, 111, 95), (99, 107, 92), (95, 103, 89), (88, 96, 83),
+ (80, 88, 79), (71, 78, 74), (63, 70, 68), (54, 61, 63),
+ (48, 55, 57), (43, 49, 53), (38, 43, 51), (34, 39, 49),
+ (31, 36, 49), (30, 34, 48), (30, 34, 47), (31, 34, 46),
+ (31, 36, 46), (32, 37, 46), (34, 39, 46), (37, 43, 47),
+ (42, 48, 49), (46, 53, 53), (50, 58, 57), (55, 64, 61),
+ (61, 70, 66), (66, 77, 69), (71, 81, 73), (73, 83, 74),
+ (73, 84, 74), (73, 84, 75), (73, 84, 76), (75, 85, 77),
+ (77, 88, 78), (80, 93, 80), (84, 97, 84), (90, 105, 91),
+ (100, 113, 99), (110, 122, 106), (117, 128, 111), (120, 130, 114),
+ (120, 132, 115), (121, 131, 114), (121, 129, 113), (119, 124, 109),
+ (111, 116, 101), (100, 105, 92), (88, 94, 83), (76, 83, 75),
+ (68, 73, 70), (60, 65, 65), (54, 59, 62), (49, 55, 58),
+ (44, 50, 56), (40, 46, 56), (41, 46, 55), (44, 46, 55),
+ (49, 49, 56), (54, 52, 57), (58, 54, 59), (62, 60, 61),
+ (69, 66, 63), (77, 71, 66), (83, 76, 69), (87, 80, 72),
+ (89, 84, 75), (91, 89, 78), (95, 94, 81), (100, 97, 85),
+ (103, 99, 88), (105, 101, 89), (105, 102, 90), (103, 103, 89),
+ (103, 102, 89), (101, 100, 88), (98, 97, 86), (95, 94, 84),
+ (89, 92, 80), (85, 90, 77), (81, 88, 75), (79, 87, 75),
+ (78, 88, 76), (80, 91, 80), (84, 96, 86), (85, 99, 90),
+ (86, 100, 89), (86, 101, 90), (85, 100, 90), (88, 104, 93)
+ ),
+
+// 380 040221-23
+((109, 35, 30), (87, 22, 31), (81, 31, 29), (75, 40, 27),
+ (73, 49, 23), (71, 58, 19), (73, 59, 20), (75, 60, 22),
+ (87, 79, 33), (100, 82, 41), (114, 86, 50), (124, 71, 58),
+ (134, 57, 67), (137, 55, 67), (140, 53, 68), (140, 51, 67),
+ (141, 50, 67), (131, 31, 62), (126, 28, 52), (122, 25, 42),
+ (114, 29, 31), (107, 33, 21), (104, 32, 18), (102, 32, 16),
+ (102, 32, 16), (99, 34, 17), (97, 37, 18), (89, 43, 23),
+ (81, 50, 28), (80, 55, 33), (79, 60, 38), (79, 73, 43),
+ (81, 89, 46), (57, 115, 50), (49, 130, 64), (42, 145, 78),
+ (39, 161, 79), (36, 178, 81), (30, 181, 77), (24, 184, 73),
+ (16, 163, 76), (13, 153, 74), (11, 143, 72), (10, 132, 61),
+ (10, 122, 50), (11, 113, 51), (12, 105, 52), (15, 90, 60),
+ (13, 88, 74), (17, 110, 85), (18, 106, 88), (20, 102, 92),
+ (21, 99, 100), (23, 96, 109), (28, 99, 106), (33, 102, 104),
+ (62, 87, 76), (77, 73, 70), (93, 59, 64), (111, 50, 63),
+ (130, 42, 62), (141, 40, 61), (152, 39, 61), (169, 43, 62),
+ (182, 51, 73), (181, 45, 100), (182, 43, 105), (183, 42, 110),
+ (186, 43, 109), (189, 44, 109), (189, 44, 110), (186, 37, 110),
+ (181, 28, 104), (186, 23, 97), (192, 18, 91), (192, 11, 84),
+ (193, 5, 78), (191, 4, 73), (190, 4, 69), (188, 4, 60),
+ (185, 3, 54), (167, 6, 40), (154, 7, 32), (141, 9, 24),
+ (137, 7, 20), (134, 5, 16), (127, 4, 11), (118, 4, 6),
+ (96, 5, 5), (91, 5, 6), (87, 5, 7), (84, 9, 7),
+ (82, 14, 8), (72, 33, 11), (66, 54, 14), (68, 71, 20),
+ (74, 70, 21), (84, 66, 18), (85, 71, 16), (86, 77, 15),
+ (87, 73, 15), (89, 69, 16), (96, 52, 12), (96, 32, 10),
+ (80, 8, 0), (68, 4, 0), (56, 1, 0), (51, 0, 0),
+ (47, 0, 0), (40, 0, 2), (37, 0, 3), (34, 1, 4),
+ (35, 2, 4), (39, 2, 4), (40, 2, 3), (42, 2, 3),
+ (45, 2, 4), (47, 2, 4), (46, 3, 4), (40, 2, 6),
+ (26, 2, 8), (22, 5, 7), (19, 8, 7), (17, 8, 8),
+ (15, 8, 9), (15, 9, 10), (16, 7, 11), (21, 11, 8),
+ (33, 14, 6), (58, 16, 4), (64, 13, 3), (70, 11, 3),
+ (81, 8, 3), (94, 8, 2), (107, 9, 2), (119, 8, 4),
+ (136, 3, 10), (141, 2, 13), (146, 1, 17), (146, 1, 18),
+ (146, 2, 20), (140, 2, 20), (135, 2, 21), (131, 2, 20),
+ (128, 1, 20), (111, 1, 15), (104, 1, 14), (98, 1, 13),
+ (87, 2, 9), (79, 1, 6), (72, 1, 4), (66, 1, 2),
+ (47, 5, 5), (43, 6, 6), (40, 8, 8), (34, 12, 11),
+ (35, 14, 16), (40, 16, 19), (49, 18, 23), (60, 21, 28),
+ (74, 20, 27), (105, 24, 26), (114, 22, 24), (123, 21, 23),
+ (141, 22, 21), (160, 15, 23), (173, 11, 27), (180, 14, 30),
+ (173, 17, 23), (166, 20, 21), (159, 23, 20), (142, 32, 26),
+ (121, 50, 35), (104, 66, 51), (84, 76, 62), (65, 81, 60),
+ (46, 83, 57), (27, 85, 54), (20, 88, 51), (17, 83, 54),
+ (22, 76, 51), (35, 65, 49), (47, 56, 47), (64, 51, 41),
+ (90, 47, 35), (90, 48, 35), (90, 50, 35), (89, 51, 38),
+ (87, 54, 46), (87, 58, 51), (89, 53, 52), (77, 50, 51),
+ (69, 42, 43), (59, 31, 40), (54, 29, 36), (60, 26, 33),
+ (68, 28, 34), (80, 31, 34), (92, 27, 41), (99, 21, 50),
+ (105, 20, 60), (115, 26, 67), (125, 40, 70), (139, 52, 73),
+ (143, 56, 75), (140, 50, 80), (136, 45, 77), (131, 43, 70),
+ (130, 44, 57), (130, 48, 44), (129, 43, 36), (125, 36, 28),
+ (119, 27, 23), (110, 17, 17), (102, 11, 14), (96, 7, 10),
+ (89, 6, 6), (85, 7, 4), (82, 9, 2), (83, 14, 3),
+ (88, 17, 5), (94, 21, 6), (98, 26, 11), (105, 27, 22),
+ (108, 28, 36), (116, 25, 51), (123, 21, 61), (125, 21, 61),
+ (128, 17, 60), (127, 14, 60), (128, 11, 67), (133, 5, 79),
+ (137, 3, 83), (139, 3, 81), (147, 2, 73), (153, 2, 66),
+ (159, 7, 66), (165, 15, 70), (166, 24, 76), (167, 33, 80),
+ (168, 36, 79), (169, 41, 75), (170, 45, 73), (169, 54, 74),
+ (170, 65, 76), (172, 71, 77), (170, 75, 76), (172, 73, 73),
+ (170, 73, 73), (168, 73, 71), (166, 70, 68), (155, 69, 64),
+ (151, 60, 58), (145, 54, 52), (135, 49, 44), (126, 39, 35)
+ ),
+
+// 381 040221-24
+((96, 87, 69), (102, 93, 75), (102, 95, 78), (103, 97, 81),
+ (100, 97, 83), (97, 98, 86), (95, 98, 88), (94, 99, 90),
+ (108, 114, 102), (114, 122, 108), (121, 130, 114), (126, 134, 117),
+ (132, 139, 121), (133, 140, 121), (134, 141, 122), (134, 140, 121),
+ (134, 140, 121), (134, 135, 114), (133, 133, 113), (133, 132, 112),
+ (137, 133, 114), (141, 135, 116), (142, 137, 118), (144, 140, 120),
+ (152, 149, 130), (156, 151, 133), (160, 154, 137), (161, 155, 137),
+ (163, 157, 138), (162, 156, 139), (162, 156, 141), (160, 157, 143),
+ (156, 154, 144), (142, 147, 137), (131, 137, 127), (121, 128, 118),
+ (107, 114, 106), (94, 100, 94), (87, 93, 88), (81, 87, 83),
+ (57, 63, 65), (46, 53, 56), (36, 43, 48), (29, 36, 40),
+ (22, 30, 33), (20, 28, 31), (19, 26, 30), (19, 27, 32),
+ (20, 30, 37), (30, 44, 54), (39, 53, 62), (49, 62, 70),
+ (58, 70, 76), (67, 79, 82), (71, 83, 85), (76, 88, 88),
+ (93, 105, 102), (103, 113, 109), (113, 122, 117), (122, 130, 124),
+ (132, 139, 131), (136, 142, 133), (141, 146, 135), (150, 153, 138),
+ (157, 159, 141), (167, 163, 141), (168, 162, 138), (170, 161, 136),
+ (171, 160, 133), (172, 159, 131), (173, 156, 127), (172, 153, 122),
+ (170, 151, 117), (167, 150, 114), (164, 149, 111), (164, 148, 110),
+ (164, 148, 110), (164, 148, 111), (165, 149, 112), (166, 149, 114),
+ (168, 155, 118), (177, 164, 130), (177, 168, 134), (178, 172, 139),
+ (178, 172, 140), (178, 173, 142), (175, 173, 143), (171, 170, 142),
+ (161, 159, 136), (154, 152, 130), (148, 146, 125), (145, 142, 122),
+ (142, 139, 119), (139, 134, 112), (135, 127, 103), (133, 122, 95),
+ (131, 117, 87), (124, 107, 77), (120, 104, 76), (117, 102, 75),
+ (117, 103, 77), (117, 105, 79), (118, 108, 85), (124, 116, 92),
+ (145, 136, 109), (153, 144, 116), (161, 152, 123), (163, 153, 125),
+ (165, 155, 128), (166, 157, 131), (161, 154, 134), (155, 150, 133),
+ (149, 146, 133), (132, 133, 122), (127, 129, 119), (122, 125, 116),
+ (114, 117, 108), (107, 109, 99), (99, 99, 91), (90, 90, 81),
+ (76, 74, 68), (75, 68, 60), (75, 63, 52), (76, 61, 49),
+ (77, 59, 46), (81, 55, 41), (86, 51, 36), (91, 50, 31),
+ (100, 51, 32), (112, 62, 43), (118, 67, 46), (125, 73, 50),
+ (138, 84, 59), (151, 98, 72), (165, 111, 84), (176, 125, 95),
+ (195, 145, 119), (196, 154, 130), (198, 164, 142), (198, 168, 146),
+ (198, 172, 150), (197, 178, 159), (195, 183, 165), (190, 185, 167),
+ (183, 183, 165), (162, 166, 152), (155, 160, 146), (149, 154, 141),
+ (137, 143, 131), (125, 131, 120), (114, 118, 110), (106, 109, 101),
+ (93, 96, 85), (90, 93, 82), (87, 91, 79), (84, 85, 74),
+ (82, 83, 70), (84, 84, 69), (89, 85, 67), (96, 87, 67),
+ (103, 91, 67), (123, 102, 69), (127, 104, 69), (131, 106, 69),
+ (135, 108, 72), (138, 113, 75), (144, 117, 77), (148, 118, 81),
+ (153, 121, 86), (154, 122, 87), (156, 123, 88), (157, 124, 87),
+ (155, 121, 89), (147, 120, 89), (141, 117, 90), (133, 114, 93),
+ (126, 114, 98), (124, 117, 103), (127, 122, 110), (133, 128, 115),
+ (139, 134, 122), (143, 138, 126), (143, 140, 127), (138, 138, 124),
+ (118, 123, 114), (113, 118, 110), (108, 114, 107), (99, 108, 102),
+ (94, 103, 100), (90, 100, 99), (86, 99, 100), (82, 101, 105),
+ (77, 102, 111), (74, 101, 111), (68, 96, 108), (60, 91, 104),
+ (58, 86, 100), (58, 81, 93), (55, 75, 87), (52, 72, 82),
+ (50, 71, 84), (49, 70, 84), (49, 70, 83), (46, 69, 83),
+ (46, 69, 84), (49, 67, 82), (48, 65, 79), (47, 63, 77),
+ (43, 63, 80), (39, 60, 79), (35, 56, 76), (30, 52, 74),
+ (26, 50, 72), (25, 48, 73), (26, 49, 72), (32, 52, 73),
+ (40, 60, 81), (51, 69, 87), (62, 78, 90), (71, 84, 91),
+ (80, 88, 91), (85, 88, 87), (89, 83, 80), (90, 74, 67),
+ (88, 68, 59), (85, 63, 53), (83, 61, 49), (81, 59, 43),
+ (79, 56, 40), (73, 55, 37), (68, 51, 35), (60, 44, 32),
+ (50, 36, 30), (39, 29, 27), (28, 20, 24), (20, 13, 19),
+ (14, 7, 15), (9, 6, 13), (7, 8, 14), (8, 11, 15),
+ (12, 15, 21), (18, 21, 27), (24, 28, 34), (32, 35, 41),
+ (41, 42, 47), (53, 48, 51), (64, 55, 54), (74, 64, 55),
+ (85, 70, 58), (85, 71, 58), (85, 72, 57), (83, 73, 59),
+ (81, 73, 59), (81, 74, 60), (83, 74, 61), (84, 78, 63)
+ ),
+
+// 382 040221-25
+((173, 218, 4), (187, 194, 5), (203, 186, 5), (219, 178, 6),
+ (218, 173, 6), (218, 169, 6), (207, 164, 5), (196, 159, 5),
+ (158, 136, 6), (145, 133, 4), (132, 131, 3), (117, 134, 4),
+ (102, 137, 6), (95, 142, 6), (89, 148, 7), (92, 152, 9),
+ (95, 156, 12), (115, 180, 34), (135, 187, 56), (156, 195, 79),
+ (170, 182, 80), (185, 169, 82), (189, 166, 75), (193, 163, 68),
+ (212, 178, 80), (215, 163, 75), (218, 149, 71), (212, 129, 46),
+ (207, 110, 22), (206, 105, 16), (206, 101, 10), (207, 100, 7),
+ (209, 89, 7), (209, 62, 5), (210, 44, 5), (211, 26, 5),
+ (217, 15, 4), (223, 5, 4), (224, 4, 3), (226, 4, 3),
+ (225, 4, 5), (227, 5, 4), (229, 6, 4), (235, 10, 4),
+ (241, 15, 4), (242, 19, 4), (243, 24, 5), (244, 35, 6),
+ (245, 41, 5), (250, 43, 3), (251, 42, 3), (252, 41, 4),
+ (251, 40, 3), (250, 39, 3), (249, 35, 3), (248, 32, 3),
+ (232, 15, 3), (221, 17, 3), (211, 20, 3), (200, 31, 3),
+ (190, 42, 3), (183, 48, 3), (177, 55, 4), (168, 76, 10),
+ (160, 98, 21), (169, 146, 69), (178, 154, 88), (188, 163, 107),
+ (188, 166, 106), (188, 170, 105), (183, 180, 91), (179, 190, 90),
+ (178, 184, 100), (168, 175, 78), (158, 166, 56), (138, 166, 33),
+ (118, 167, 10), (113, 167, 9), (109, 168, 8), (105, 173, 13),
+ (109, 182, 14), (139, 196, 13), (155, 203, 13), (171, 210, 13),
+ (175, 217, 13), (179, 224, 14), (197, 231, 13), (215, 238, 11),
+ (235, 232, 5), (220, 225, 5), (205, 219, 5), (197, 215, 5),
+ (190, 211, 6), (178, 202, 4), (163, 193, 3), (145, 183, 3),
+ (124, 172, 3), (95, 158, 6), (89, 156, 5), (84, 155, 5),
+ (82, 154, 5), (80, 153, 5), (79, 150, 5), (82, 148, 6),
+ (86, 141, 6), (94, 125, 5), (103, 110, 5), (110, 102, 4),
+ (117, 94, 4), (130, 77, 4), (140, 67, 3), (152, 52, 3),
+ (159, 35, 3), (164, 14, 6), (163, 18, 5), (163, 23, 5),
+ (164, 36, 4), (160, 54, 2), (156, 70, 4), (152, 84, 5),
+ (160, 112, 5), (165, 110, 4), (170, 109, 3), (172, 103, 3),
+ (175, 97, 3), (179, 88, 3), (191, 79, 4), (195, 67, 5),
+ (191, 53, 5), (161, 43, 6), (154, 43, 5), (148, 44, 4),
+ (141, 41, 6), (139, 36, 5), (144, 37, 6), (143, 40, 6),
+ (157, 38, 4), (172, 26, 4), (188, 15, 4), (194, 10, 4),
+ (201, 6, 4), (209, 8, 6), (214, 15, 5), (209, 26, 7),
+ (200, 40, 7), (168, 65, 8), (161, 72, 7), (155, 80, 7),
+ (142, 97, 8), (134, 113, 8), (125, 131, 8), (118, 143, 8),
+ (121, 162, 5), (124, 164, 4), (128, 167, 4), (133, 169, 6),
+ (133, 170, 8), (131, 165, 9), (132, 162, 8), (134, 157, 7),
+ (136, 150, 7), (123, 141, 11), (119, 140, 11), (115, 139, 12),
+ (110, 137, 10), (109, 133, 8), (108, 134, 6), (104, 134, 7),
+ (95, 141, 8), (95, 142, 8), (95, 143, 8), (96, 148, 7),
+ (97, 156, 8), (99, 166, 7), (101, 177, 7), (105, 184, 7),
+ (111, 187, 9), (115, 187, 14), (120, 192, 16), (133, 199, 15),
+ (148, 209, 10), (167, 216, 9), (181, 214, 10), (183, 209, 13),
+ (197, 189, 9), (203, 186, 7), (209, 183, 6), (224, 177, 4),
+ (229, 170, 5), (229, 160, 6), (229, 141, 6), (229, 119, 6),
+ (233, 95, 6), (240, 76, 7), (243, 64, 7), (247, 57, 7),
+ (250, 55, 6), (251, 53, 6), (252, 54, 7), (251, 55, 8),
+ (250, 60, 7), (252, 68, 7), (251, 75, 7), (251, 82, 6),
+ (250, 83, 7), (249, 78, 7), (251, 69, 7), (249, 60, 7),
+ (246, 48, 6), (242, 40, 7), (236, 35, 8), (235, 38, 8),
+ (233, 52, 9), (235, 71, 10), (235, 89, 18), (231, 113, 30),
+ (232, 133, 43), (227, 152, 58), (227, 177, 59), (222, 186, 61),
+ (218, 198, 57), (218, 195, 55), (219, 181, 61), (225, 166, 55),
+ (220, 137, 50), (216, 116, 35), (210, 95, 20), (206, 81, 12),
+ (208, 74, 6), (203, 70, 6), (204, 71, 6), (204, 69, 5),
+ (208, 70, 5), (208, 75, 5), (202, 89, 6), (202, 105, 6),
+ (202, 121, 6), (204, 131, 7), (200, 133, 7), (187, 132, 7),
+ (169, 128, 7), (151, 128, 6), (140, 131, 7), (129, 135, 6),
+ (119, 134, 5), (111, 134, 5), (101, 131, 3), (99, 134, 3),
+ (101, 146, 3), (104, 157, 5), (108, 167, 4), (110, 170, 4),
+ (116, 175, 4), (130, 185, 2), (147, 200, 5), (161, 215, 5)
+ ),
+
+// 383 040221-26
+((157, 81, 83), (137, 70, 91), (125, 64, 91), (113, 59, 92),
+ (107, 55, 91), (101, 52, 90), (101, 52, 89), (101, 52, 88),
+ (120, 62, 95), (130, 67, 96), (140, 73, 97), (147, 77, 96),
+ (155, 82, 95), (161, 86, 96), (167, 90, 98), (168, 91, 99),
+ (169, 93, 100), (172, 93, 106), (171, 95, 114), (170, 98, 122),
+ (170, 101, 132), (170, 105, 143), (168, 108, 148), (167, 111, 153),
+ (163, 113, 157), (163, 112, 154), (164, 111, 152), (174, 117, 153),
+ (184, 124, 154), (190, 131, 157), (196, 138, 161), (209, 152, 163),
+ (218, 163, 165), (221, 164, 152), (221, 159, 141), (222, 154, 130),
+ (219, 147, 124), (217, 140, 119), (214, 138, 117), (212, 136, 115),
+ (191, 123, 113), (178, 113, 111), (165, 104, 110), (152, 91, 112),
+ (140, 78, 114), (135, 73, 112), (130, 68, 111), (120, 61, 107),
+ (110, 56, 107), (94, 53, 105), (92, 52, 108), (90, 52, 111),
+ (97, 53, 110), (104, 55, 110), (109, 56, 109), (115, 58, 108),
+ (136, 68, 98), (145, 71, 92), (155, 75, 86), (163, 75, 80),
+ (171, 75, 75), (173, 74, 73), (176, 74, 71), (178, 74, 68),
+ (177, 74, 68), (166, 75, 76), (160, 73, 77), (154, 71, 78),
+ (151, 68, 77), (148, 66, 76), (144, 63, 73), (139, 61, 69),
+ (121, 56, 77), (115, 56, 84), (109, 56, 91), (112, 59, 96),
+ (116, 63, 101), (123, 67, 100), (131, 72, 99), (146, 86, 102),
+ (159, 98, 107), (174, 121, 123), (174, 128, 134), (174, 135, 145),
+ (177, 136, 147), (180, 138, 149), (184, 143, 150), (186, 144, 150),
+ (184, 144, 147), (173, 139, 147), (162, 134, 148), (157, 129, 147),
+ (153, 124, 147), (146, 116, 140), (142, 105, 133), (143, 98, 126),
+ (144, 93, 119), (149, 95, 111), (155, 105, 114), (161, 115, 118),
+ (164, 119, 121), (168, 124, 125), (179, 132, 133), (188, 139, 143),
+ (205, 150, 162), (212, 157, 171), (219, 165, 181), (218, 169, 186),
+ (218, 174, 191), (218, 183, 197), (219, 189, 201), (222, 190, 204),
+ (221, 191, 207), (224, 193, 207), (223, 192, 205), (222, 192, 203),
+ (216, 191, 200), (211, 187, 195), (203, 177, 187), (194, 166, 176),
+ (179, 149, 163), (172, 141, 157), (166, 133, 152), (165, 131, 150),
+ (165, 129, 149), (162, 121, 143), (158, 109, 134), (155, 98, 127),
+ (154, 90, 121), (156, 82, 108), (161, 84, 106), (166, 86, 104),
+ (176, 93, 102), (186, 100, 102), (197, 109, 104), (203, 119, 108),
+ (207, 129, 122), (201, 126, 128), (195, 124, 134), (189, 120, 136),
+ (184, 116, 138), (176, 110, 140), (167, 107, 140), (164, 106, 139),
+ (166, 108, 138), (174, 117, 139), (175, 118, 140), (176, 120, 141),
+ (177, 120, 140), (176, 121, 141), (178, 122, 137), (183, 122, 130),
+ (200, 126, 117), (201, 126, 116), (203, 126, 115), (201, 127, 114),
+ (192, 126, 117), (182, 125, 121), (171, 120, 123), (162, 112, 121),
+ (157, 103, 114), (148, 80, 96), (147, 75, 92), (146, 71, 88),
+ (145, 66, 83), (144, 64, 80), (147, 63, 80), (154, 67, 78),
+ (175, 79, 75), (181, 82, 74), (188, 86, 73), (202, 94, 73),
+ (213, 101, 73), (223, 106, 77), (228, 112, 81), (231, 120, 87),
+ (230, 126, 95), (223, 130, 106), (215, 132, 116), (209, 133, 120),
+ (200, 128, 123), (188, 121, 124), (176, 114, 125), (168, 108, 122),
+ (151, 95, 120), (151, 94, 119), (151, 94, 118), (154, 91, 115),
+ (155, 87, 110), (155, 81, 105), (155, 78, 98), (154, 71, 87),
+ (150, 65, 80), (148, 62, 74), (148, 60, 69), (148, 60, 65),
+ (151, 59, 61), (153, 59, 59), (154, 58, 59), (152, 55, 57),
+ (150, 54, 55), (150, 52, 54), (149, 52, 55), (150, 54, 56),
+ (154, 57, 57), (161, 63, 60), (169, 68, 62), (177, 73, 63),
+ (187, 76, 63), (196, 79, 64), (202, 81, 65), (207, 81, 66),
+ (210, 82, 66), (211, 84, 66), (208, 83, 67), (206, 82, 66),
+ (204, 80, 66), (201, 77, 64), (196, 72, 63), (188, 66, 61),
+ (179, 62, 59), (168, 59, 60), (157, 57, 64), (148, 55, 68),
+ (143, 56, 72), (143, 59, 75), (145, 62, 76), (151, 65, 77),
+ (156, 71, 79), (159, 77, 83), (161, 82, 90), (165, 88, 96),
+ (171, 92, 100), (179, 97, 101), (190, 98, 101), (204, 101, 97),
+ (217, 106, 93), (228, 110, 94), (235, 114, 96), (239, 120, 100),
+ (240, 128, 105), (241, 134, 110), (243, 137, 111), (244, 137, 109),
+ (245, 138, 107), (245, 135, 104), (243, 132, 100), (241, 131, 99),
+ (239, 134, 100), (236, 136, 103), (233, 136, 104), (223, 130, 100),
+ (212, 122, 96), (200, 112, 90), (186, 100, 86), (172, 88, 82)
+ ),
+
+// 384 040221-27
+((200, 139, 100), (180, 128, 94), (175, 123, 93), (170, 119, 92),
+ (167, 116, 89), (165, 113, 87), (162, 108, 87), (159, 104, 87),
+ (147, 89, 80), (146, 86, 73), (145, 84, 67), (149, 90, 63),
+ (154, 96, 60), (167, 107, 59), (180, 119, 58), (185, 124, 59),
+ (191, 130, 61), (210, 146, 65), (215, 149, 66), (220, 152, 68),
+ (223, 155, 70), (226, 158, 72), (229, 162, 73), (232, 166, 74),
+ (242, 183, 85), (246, 189, 89), (250, 196, 93), (252, 198, 94),
+ (254, 201, 96), (252, 199, 95), (250, 197, 94), (245, 191, 91),
+ (239, 181, 87), (218, 155, 76), (207, 142, 69), (196, 129, 63),
+ (185, 116, 57), (175, 104, 51), (169, 99, 47), (164, 94, 44),
+ (145, 73, 37), (135, 63, 33), (126, 53, 29), (121, 46, 27),
+ (116, 40, 25), (115, 39, 25), (115, 39, 26), (117, 41, 26),
+ (121, 45, 32), (132, 54, 49), (136, 62, 58), (141, 70, 68),
+ (147, 78, 74), (153, 87, 81), (156, 91, 83), (159, 95, 85),
+ (162, 104, 91), (164, 105, 92), (166, 107, 93), (165, 108, 94),
+ (165, 109, 96), (165, 110, 97), (165, 112, 98), (169, 117, 100),
+ (173, 126, 103), (183, 141, 112), (187, 145, 111), (192, 149, 110),
+ (194, 150, 110), (197, 152, 110), (202, 155, 107), (209, 161, 104),
+ (226, 175, 107), (233, 182, 111), (240, 190, 116), (245, 196, 117),
+ (251, 202, 118), (252, 203, 116), (254, 204, 115), (254, 204, 110),
+ (254, 204, 105), (254, 202, 96), (254, 197, 93), (254, 193, 90),
+ (254, 189, 89), (254, 186, 88), (253, 182, 90), (253, 180, 92),
+ (253, 179, 96), (253, 181, 97), (253, 183, 98), (253, 184, 98),
+ (253, 186, 98), (254, 183, 94), (254, 181, 94), (253, 180, 95),
+ (253, 179, 96), (252, 179, 102), (251, 182, 107), (250, 186, 112),
+ (250, 186, 112), (250, 186, 113), (249, 185, 112), (247, 183, 110),
+ (242, 174, 106), (238, 170, 102), (234, 166, 98), (231, 164, 97),
+ (229, 162, 96), (228, 156, 95), (229, 150, 94), (228, 145, 93),
+ (226, 140, 91), (214, 125, 85), (209, 121, 82), (205, 117, 79),
+ (193, 111, 74), (184, 106, 70), (181, 103, 70), (184, 104, 73),
+ (192, 113, 89), (197, 117, 99), (202, 122, 110), (202, 123, 114),
+ (202, 125, 119), (200, 130, 125), (198, 133, 126), (202, 139, 127),
+ (207, 146, 129), (224, 166, 132), (229, 171, 133), (234, 177, 135),
+ (242, 186, 138), (248, 194, 140), (251, 197, 138), (253, 200, 133),
+ (254, 202, 120), (254, 202, 113), (254, 203, 106), (254, 203, 103),
+ (254, 203, 100), (254, 203, 97), (254, 203, 95), (254, 203, 94),
+ (253, 202, 93), (252, 193, 94), (251, 191, 95), (250, 189, 97),
+ (249, 187, 103), (249, 187, 109), (250, 188, 118), (250, 191, 126),
+ (251, 198, 139), (250, 198, 139), (250, 199, 140), (250, 196, 139),
+ (249, 195, 139), (249, 193, 137), (248, 191, 138), (248, 188, 138),
+ (244, 188, 138), (228, 178, 127), (222, 172, 121), (216, 166, 116),
+ (204, 153, 104), (192, 138, 88), (181, 124, 74), (172, 108, 62),
+ (162, 89, 46), (158, 84, 43), (155, 79, 40), (144, 68, 32),
+ (133, 57, 26), (121, 47, 18), (110, 36, 12), (99, 25, 8),
+ (90, 20, 5), (90, 21, 9), (96, 23, 15), (101, 29, 19),
+ (109, 37, 26), (119, 49, 34), (130, 61, 43), (141, 71, 50),
+ (152, 94, 63), (156, 99, 67), (161, 105, 72), (169, 117, 84),
+ (178, 128, 95), (189, 141, 106), (201, 154, 118), (216, 165, 127),
+ (227, 177, 132), (237, 188, 134), (244, 196, 135), (249, 204, 135),
+ (252, 209, 133), (253, 208, 129), (249, 203, 125), (244, 193, 120),
+ (236, 183, 112), (228, 173, 102), (219, 163, 92), (214, 154, 84),
+ (207, 150, 78), (206, 146, 73), (204, 143, 71), (202, 136, 67),
+ (198, 131, 67), (195, 126, 64), (186, 120, 63), (179, 113, 63),
+ (168, 106, 63), (162, 104, 63), (159, 103, 66), (158, 102, 67),
+ (159, 103, 70), (162, 103, 72), (165, 107, 75), (168, 112, 80),
+ (171, 113, 86), (175, 118, 92), (179, 124, 96), (183, 128, 98),
+ (186, 133, 99), (191, 136, 98), (195, 137, 98), (198, 142, 99),
+ (201, 145, 103), (205, 149, 109), (208, 153, 113), (212, 156, 117),
+ (218, 162, 120), (225, 168, 121), (230, 172, 121), (232, 176, 118),
+ (232, 178, 115), (233, 179, 114), (231, 179, 112), (230, 177, 110),
+ (229, 176, 108), (230, 176, 106), (234, 179, 105), (238, 183, 103),
+ (243, 187, 102), (248, 192, 102), (251, 196, 101), (253, 200, 101),
+ (255, 202, 99), (255, 202, 97), (253, 199, 97), (251, 193, 98),
+ (243, 183, 100), (234, 173, 101), (223, 161, 101), (211, 149, 101)
+ ),
+
+// 385 040221-28
+((0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (3, 5, 4), (6, 9, 9), (9, 14, 15), (12, 18, 19),
+ (15, 23, 23), (16, 26, 26), (17, 29, 30), (18, 32, 32),
+ (20, 35, 35), (27, 39, 40), (25, 37, 39), (24, 36, 38),
+ (21, 33, 35), (18, 30, 32), (16, 27, 30), (15, 25, 28),
+ (17, 24, 24), (17, 27, 28), (18, 30, 32), (26, 42, 43),
+ (34, 54, 54), (36, 59, 59), (38, 64, 65), (48, 85, 85),
+ (71, 107, 105), (92, 165, 160), (107, 180, 175), (122, 195, 190),
+ (98, 157, 155), (75, 120, 120), (72, 119, 118), (70, 118, 117),
+ (33, 58, 56), (29, 49, 48), (25, 40, 40), (22, 37, 37),
+ (20, 35, 35), (19, 32, 33), (18, 30, 32), (14, 27, 28),
+ (14, 27, 28), (13, 25, 27), (11, 22, 24), (9, 19, 22),
+ (8, 18, 20), (7, 17, 19), (8, 17, 18), (9, 17, 17),
+ (9, 17, 17), (9, 17, 17), (10, 18, 18), (12, 20, 20),
+ (14, 22, 22), (14, 22, 22), (14, 22, 22), (12, 23, 22),
+ (10, 22, 20), (7, 17, 19), (7, 17, 19), (7, 17, 19),
+ (7, 15, 16), (7, 14, 14), (5, 13, 13), (5, 13, 13),
+ (2, 14, 15), (3, 14, 16), (5, 15, 18), (6, 14, 16),
+ (7, 14, 14), (6, 13, 13), (5, 13, 13), (4, 12, 12),
+ (2, 12, 14), (4, 24, 24), (8, 31, 31), (12, 38, 39),
+ (15, 39, 40), (19, 41, 41), (23, 40, 41), (24, 41, 41),
+ (23, 40, 40), (20, 37, 37), (18, 35, 35), (16, 33, 33),
+ (14, 32, 32), (14, 27, 28), (18, 33, 33), (23, 40, 40),
+ (27, 51, 53), (48, 77, 77), (54, 87, 87), (61, 98, 98),
+ (63, 101, 100), (65, 105, 103), (60, 98, 101), (66, 92, 94),
+ (55, 95, 94), (51, 86, 87), (48, 77, 80), (44, 71, 73),
+ (40, 66, 67), (40, 65, 64), (38, 63, 64), (36, 54, 54),
+ (29, 53, 48), (22, 36, 36), (20, 30, 30), (18, 25, 25),
+ (12, 19, 19), (7, 12, 13), (3, 8, 9), (2, 4, 3),
+ (2, 2, 2), (1, 2, 1), (0, 2, 1), (0, 1, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 7, 9), (1, 8, 9), (3, 10, 10),
+ (9, 17, 17), (12, 22, 24), (13, 25, 27), (15, 30, 30),
+ (22, 36, 36), (22, 37, 37), (23, 38, 38), (21, 38, 38),
+ (20, 38, 38), (19, 36, 36), (20, 35, 35), (22, 36, 36),
+ (22, 39, 39), (24, 39, 39), (24, 39, 39), (24, 39, 39),
+ (23, 40, 40), (22, 41, 41), (18, 45, 43), (22, 46, 44),
+ (28, 53, 51), (28, 53, 50), (29, 53, 50), (33, 53, 53),
+ (36, 54, 54), (32, 54, 54), (29, 49, 48), (30, 44, 46),
+ (25, 40, 40), (17, 32, 32), (15, 29, 30), (14, 27, 28),
+ (13, 25, 27), (14, 24, 27), (17, 27, 30), (22, 32, 34),
+ (25, 45, 44), (25, 45, 44), (25, 45, 44), (29, 51, 51),
+ (32, 54, 54), (30, 53, 53), (29, 49, 49), (27, 46, 46),
+ (25, 45, 45), (25, 43, 44), (24, 41, 43), (25, 43, 44),
+ (25, 45, 45), (30, 53, 53), (30, 55, 54), (35, 60, 59),
+ (43, 67, 69), (43, 70, 71), (44, 74, 74), (49, 81, 82),
+ (53, 87, 89), (46, 79, 77), (45, 77, 79), (43, 72, 72),
+ (36, 64, 61), (35, 60, 59), (33, 55, 58), (29, 51, 51),
+ (28, 45, 45), (28, 46, 43), (25, 43, 44), (24, 44, 43),
+ (24, 39, 39), (19, 34, 34), (14, 27, 28), (12, 22, 24),
+ (9, 14, 18), (5, 10, 12), (4, 5, 8), (3, 4, 7),
+ (2, 7, 8), (3, 10, 10), (4, 9, 10), (5, 10, 9),
+ (5, 10, 12), (7, 12, 13), (7, 14, 14), (7, 14, 14),
+ (9, 17, 17), (9, 19, 22), (7, 22, 22), (10, 23, 24),
+ (12, 22, 24), (12, 22, 24), (14, 24, 27), (13, 25, 27),
+ (18, 28, 30), (18, 30, 32), (18, 33, 33), (20, 38, 38),
+ (23, 40, 41), (24, 41, 43), (25, 48, 48), (29, 51, 51),
+ (30, 53, 53), (32, 54, 54), (30, 56, 58), (32, 58, 59),
+ (32, 58, 59), (39, 64, 63), (40, 65, 64), (43, 75, 74),
+ (45, 77, 76), (45, 75, 75), (44, 70, 71), (39, 64, 63),
+ (38, 63, 64), (33, 63, 63), (33, 58, 56), (32, 56, 55),
+ (33, 58, 59), (38, 67, 67), (43, 72, 72), (48, 77, 77),
+ (53, 90, 90), (54, 98, 98), (75, 129, 131), (60, 102, 103)
+ ),
+
+// 386 040221-29
+((44, 40, 28), (53, 50, 35), (53, 49, 36), (53, 49, 37),
+ (47, 47, 34), (42, 46, 32), (40, 41, 29), (39, 36, 27),
+ (35, 35, 25), (33, 31, 22), (31, 28, 19), (28, 27, 15),
+ (25, 26, 12), (23, 24, 14), (21, 22, 17), (21, 21, 15),
+ (21, 21, 13), (22, 20, 7), (21, 17, 5), (21, 15, 3),
+ (17, 13, 2), (14, 11, 2), (15, 12, 3), (16, 13, 4),
+ (19, 19, 11), (22, 20, 12), (25, 22, 13), (27, 26, 18),
+ (29, 30, 24), (31, 31, 26), (33, 32, 28), (39, 35, 26),
+ (41, 39, 26), (54, 51, 32), (61, 58, 36), (68, 66, 41),
+ (86, 79, 48), (105, 93, 55), (110, 98, 58), (115, 103, 61),
+ (111, 105, 73), (107, 102, 75), (104, 99, 77), (100, 93, 62),
+ (96, 87, 48), (90, 81, 41), (85, 76, 35), (65, 58, 30),
+ (55, 49, 25), (44, 38, 16), (41, 34, 14), (38, 31, 12),
+ (30, 27, 11), (23, 24, 10), (21, 22, 10), (20, 20, 10),
+ (17, 16, 11), (18, 16, 12), (20, 16, 13), (19, 17, 12),
+ (19, 19, 11), (18, 19, 11), (18, 19, 11), (19, 18, 13),
+ (21, 17, 14), (16, 17, 12), (14, 15, 9), (13, 14, 6),
+ (9, 12, 5), (6, 11, 4), (13, 14, 9), (14, 15, 9),
+ (17, 16, 11), (17, 17, 8), (18, 18, 6), (23, 20, 5),
+ (28, 23, 4), (31, 24, 2), (35, 25, 0), (40, 30, 3),
+ (31, 24, 6), (32, 29, 14), (34, 31, 16), (37, 34, 19),
+ (38, 34, 17), (40, 35, 16), (45, 34, 14), (43, 38, 19),
+ (33, 34, 18), (28, 29, 17), (24, 25, 17), (23, 23, 17),
+ (23, 22, 17), (23, 20, 15), (25, 23, 11), (30, 27, 10),
+ (31, 32, 14), (39, 40, 24), (41, 40, 24), (44, 41, 24),
+ (45, 43, 24), (47, 45, 24), (50, 44, 22), (53, 45, 26),
+ (58, 52, 28), (58, 52, 28), (58, 52, 28), (58, 53, 26),
+ (59, 54, 25), (61, 52, 21), (62, 57, 25), (58, 54, 29),
+ (58, 53, 31), (64, 60, 35), (68, 61, 37), (73, 62, 40),
+ (87, 78, 47), (110, 101, 68), (126, 115, 83), (136, 123, 88),
+ (139, 128, 98), (130, 122, 91), (122, 116, 84), (113, 107, 80),
+ (104, 99, 77), (85, 82, 63), (75, 69, 53), (63, 60, 45),
+ (52, 50, 37), (31, 28, 23), (29, 26, 19), (27, 24, 15),
+ (26, 23, 14), (25, 23, 11), (27, 23, 11), (31, 25, 13),
+ (36, 31, 11), (40, 34, 13), (44, 38, 16), (46, 40, 18),
+ (48, 42, 20), (50, 45, 25), (54, 49, 30), (60, 54, 38),
+ (59, 57, 44), (65, 53, 31), (65, 55, 31), (65, 58, 32),
+ (69, 59, 34), (76, 65, 43), (98, 86, 46), (115, 104, 74),
+ (154, 145, 106), (167, 160, 111), (180, 175, 117), (193, 183, 124),
+ (183, 172, 126), (180, 163, 117), (158, 148, 112), (134, 130, 101),
+ (104, 97, 81), (75, 70, 48), (74, 66, 42), (73, 63, 36),
+ (75, 67, 31), (88, 82, 32), (108, 94, 49), (123, 110, 65),
+ (166, 154, 94), (164, 153, 98), (162, 152, 103), (165, 153, 113),
+ (160, 151, 120), (162, 155, 113), (156, 145, 100), (143, 136, 90),
+ (121, 113, 76), (102, 93, 62), (83, 74, 43), (76, 68, 32),
+ (71, 65, 33), (74, 67, 38), (80, 77, 46), (98, 91, 65),
+ (96, 96, 72), (95, 96, 71), (94, 97, 70), (83, 81, 60),
+ (77, 75, 50), (76, 73, 42), (72, 68, 43), (69, 67, 46),
+ (74, 72, 51), (78, 76, 55), (86, 80, 54), (97, 91, 65),
+ (97, 91, 59), (105, 94, 49), (88, 79, 46), (81, 67, 38),
+ (67, 63, 36), (63, 57, 35), (56, 55, 34), (52, 45, 26),
+ (45, 39, 25), (46, 43, 26), (49, 46, 29), (49, 47, 35),
+ (62, 56, 40), (81, 74, 48), (104, 93, 65), (121, 111, 84),
+ (137, 125, 83), (151, 135, 86), (128, 119, 80), (105, 94, 66),
+ (81, 76, 44), (67, 60, 31), (57, 51, 25), (51, 45, 23),
+ (46, 41, 19), (45, 39, 23), (44, 43, 23), (48, 43, 24),
+ (49, 43, 17), (53, 49, 20), (56, 50, 16), (59, 51, 14),
+ (59, 55, 20), (60, 51, 18), (56, 45, 23), (50, 43, 25),
+ (47, 44, 25), (41, 40, 22), (34, 32, 19), (31, 29, 16),
+ (24, 24, 14), (20, 22, 11), (21, 21, 11), (27, 24, 9),
+ (31, 28, 11), (37, 32, 12), (44, 37, 18), (59, 50, 21),
+ (73, 66, 38), (108, 94, 65), (137, 127, 100), (185, 175, 140),
+ (221, 214, 172), (233, 224, 185), (196, 183, 141), (152, 143, 110),
+ (128, 118, 82), (113, 104, 65), (83, 78, 49), (76, 66, 39)
+ ),
+
+// 387 040221-30
+((84, 36, 31), (82, 62, 55), (90, 62, 56), (98, 63, 58),
+ (115, 55, 48), (132, 47, 38), (136, 41, 32), (141, 35, 27),
+ (146, 15, 6), (132, 10, 3), (119, 6, 0), (104, 15, 10),
+ (90, 24, 21), (85, 35, 28), (80, 47, 35), (77, 52, 40),
+ (74, 57, 46), (75, 63, 43), (78, 63, 38), (81, 64, 34),
+ (86, 68, 39), (91, 72, 44), (95, 76, 49), (100, 81, 55),
+ (125, 77, 55), (133, 68, 49), (141, 59, 43), (154, 48, 27),
+ (168, 38, 11), (166, 32, 8), (164, 27, 5), (156, 28, 3),
+ (144, 23, 2), (108, 22, 10), (88, 23, 14), (68, 24, 19),
+ (57, 35, 25), (47, 47, 32), (52, 42, 31), (57, 38, 31),
+ (82, 25, 19), (102, 16, 12), (123, 7, 6), (121, 5, 3),
+ (120, 4, 0), (119, 13, 3), (118, 23, 7), (115, 43, 27),
+ (120, 52, 45), (135, 113, 95), (144, 121, 109), (153, 130, 124),
+ (146, 130, 125), (139, 131, 126), (132, 123, 117), (126, 115, 109),
+ (111, 69, 62), (98, 49, 45), (86, 30, 28), (73, 16, 15),
+ (60, 3, 2), (52, 2, 1), (45, 2, 1), (30, 0, 0),
+ (15, 2, 0), (3, 0, 0), (2, 0, 0), (2, 0, 0),
+ (2, 0, 0), (2, 0, 0), (3, 1, 1), (7, 5, 4),
+ (19, 21, 17), (28, 31, 26), (37, 42, 35), (50, 57, 48),
+ (63, 73, 62), (69, 79, 68), (76, 85, 74), (93, 104, 92),
+ (102, 112, 97), (100, 111, 95), (93, 102, 87), (87, 93, 79),
+ (85, 94, 79), (83, 95, 79), (85, 90, 77), (92, 87, 79),
+ (127, 117, 104), (145, 128, 111), (163, 140, 119), (164, 149, 127),
+ (165, 159, 136), (173, 163, 139), (170, 161, 143), (155, 158, 143),
+ (140, 140, 132), (110, 100, 95), (98, 73, 69), (87, 47, 44),
+ (82, 39, 37), (77, 32, 31), (65, 21, 17), (57, 12, 5),
+ (41, 12, 2), (30, 12, 1), (20, 13, 1), (18, 11, 0),
+ (16, 9, 0), (12, 5, 0), (10, 5, 0), (11, 2, 0),
+ (19, 0, 0), (47, 0, 0), (52, 0, 0), (57, 0, 0),
+ (64, 12, 4), (68, 24, 11), (73, 20, 13), (79, 24, 15),
+ (103, 35, 19), (100, 38, 17), (97, 42, 15), (98, 39, 12),
+ (100, 37, 9), (77, 42, 10), (50, 43, 10), (37, 29, 7),
+ (29, 22, 6), (10, 9, 4), (8, 6, 2), (6, 4, 1),
+ (4, 3, 0), (2, 2, 0), (1, 0, 0), (0, 0, 0),
+ (0, 1, 0), (3, 3, 2), (7, 6, 5), (8, 8, 6),
+ (10, 10, 8), (16, 20, 17), (23, 27, 24), (28, 31, 26),
+ (32, 39, 31), (42, 36, 28), (44, 33, 25), (46, 31, 22),
+ (50, 27, 17), (52, 20, 12), (50, 15, 6), (45, 10, 1),
+ (28, 6, 1), (23, 4, 0), (18, 3, 0), (11, 0, 0),
+ (6, 0, 0), (6, 2, 2), (8, 6, 4), (14, 11, 8),
+ (27, 12, 8), (52, 11, 8), (59, 10, 7), (67, 10, 6),
+ (78, 3, 2), (86, 0, 0), (89, 0, 0), (86, 2, 2),
+ (70, 24, 17), (69, 28, 22), (68, 33, 28), (69, 54, 44),
+ (70, 73, 59), (82, 85, 78), (98, 100, 96), (110, 118, 109),
+ (126, 133, 123), (135, 141, 134), (141, 151, 140), (145, 151, 140),
+ (144, 142, 137), (139, 137, 132), (133, 125, 124), (122, 110, 116),
+ (109, 105, 105), (109, 105, 104), (109, 105, 104), (109, 105, 106),
+ (112, 111, 110), (119, 123, 115), (124, 128, 117), (133, 129, 114),
+ (141, 131, 111), (137, 130, 111), (137, 129, 106), (138, 125, 99),
+ (129, 115, 99), (118, 107, 98), (111, 99, 89), (103, 86, 74),
+ (96, 72, 60), (91, 61, 53), (86, 56, 51), (89, 63, 54),
+ (89, 71, 61), (90, 77, 72), (96, 90, 86), (97, 99, 92),
+ (98, 102, 91), (99, 105, 92), (105, 111, 96), (109, 116, 103),
+ (110, 123, 109), (114, 128, 111), (114, 123, 111), (109, 119, 108),
+ (96, 111, 97), (83, 90, 76), (72, 73, 59), (60, 56, 42),
+ (57, 37, 23), (57, 21, 13), (62, 14, 5), (72, 7, 0),
+ (81, 1, 0), (89, 1, 1), (95, 1, 1), (100, 1, 1),
+ (100, 1, 1), (99, 2, 2), (99, 2, 1), (98, 0, 0),
+ (93, 1, 0), (82, 3, 1), (66, 3, 0), (55, 3, 0),
+ (40, 4, 0), (21, 4, 0), (13, 6, 0), (10, 7, 2),
+ (12, 11, 6), (18, 20, 13), (25, 26, 18), (39, 34, 21),
+ (60, 40, 26), (83, 36, 30), (106, 41, 30), (120, 49, 35),
+ (125, 49, 40), (127, 52, 44), (125, 51, 43), (114, 41, 35),
+ (98, 36, 29), (94, 24, 21), (94, 15, 17), (88, 26, 24)
+ ),
+
+// 388 040221-31
+((46, 43, 27), (52, 49, 31), (51, 48, 32), (50, 47, 33),
+ (46, 44, 32), (42, 42, 32), (41, 42, 31), (40, 42, 31),
+ (46, 46, 36), (52, 51, 37), (58, 56, 38), (63, 59, 36),
+ (69, 62, 34), (70, 62, 35), (71, 63, 37), (71, 64, 36),
+ (72, 65, 35), (68, 59, 29), (64, 57, 29), (60, 55, 30),
+ (59, 52, 25), (58, 49, 21), (57, 48, 19), (57, 47, 18),
+ (52, 44, 16), (48, 39, 14), (44, 35, 12), (39, 32, 13),
+ (34, 29, 15), (31, 27, 15), (29, 26, 15), (25, 23, 15),
+ (23, 21, 15), (23, 23, 17), (27, 26, 18), (32, 30, 20),
+ (42, 39, 27), (52, 48, 35), (59, 55, 41), (66, 62, 47),
+ (95, 88, 68), (99, 91, 71), (104, 95, 75), (101, 93, 72),
+ (98, 91, 70), (94, 86, 64), (90, 81, 58), (76, 66, 46),
+ (62, 54, 33), (42, 37, 19), (39, 33, 16), (37, 30, 14),
+ (36, 31, 15), (36, 33, 17), (37, 34, 18), (39, 35, 20),
+ (44, 40, 25), (45, 41, 25), (47, 42, 26), (46, 40, 24),
+ (46, 39, 23), (45, 38, 21), (44, 37, 19), (40, 34, 16),
+ (36, 31, 12), (29, 23, 7), (26, 21, 6), (23, 20, 6),
+ (22, 19, 6), (21, 19, 7), (20, 19, 7), (19, 18, 8),
+ (16, 16, 9), (15, 15, 8), (14, 14, 7), (13, 12, 5),
+ (12, 11, 4), (11, 10, 3), (11, 10, 3), (10, 9, 2),
+ (8, 7, 1), (7, 4, 0), (7, 3, 0), (8, 3, 0),
+ (8, 3, 0), (9, 3, 0), (11, 4, 0), (12, 6, 0),
+ (16, 10, 2), (16, 12, 3), (17, 14, 5), (18, 15, 6),
+ (20, 17, 8), (23, 20, 11), (27, 24, 14), (31, 27, 16),
+ (36, 33, 18), (46, 42, 23), (49, 44, 22), (52, 46, 22),
+ (53, 46, 21), (54, 47, 21), (53, 46, 21), (50, 43, 20),
+ (45, 38, 14), (42, 36, 12), (40, 34, 10), (38, 32, 9),
+ (36, 31, 9), (34, 29, 8), (32, 27, 5), (32, 26, 4),
+ (32, 26, 3), (37, 28, 4), (38, 29, 5), (40, 31, 7),
+ (45, 35, 10), (50, 41, 14), (55, 44, 17), (57, 48, 22),
+ (58, 53, 33), (60, 55, 37), (63, 57, 41), (63, 59, 42),
+ (64, 61, 44), (70, 67, 48), (76, 73, 52), (86, 77, 56),
+ (89, 84, 59), (94, 89, 59), (94, 87, 58), (95, 86, 58),
+ (91, 84, 60), (84, 80, 57), (79, 77, 58), (82, 78, 60),
+ (96, 91, 77), (106, 99, 82), (116, 108, 88), (121, 113, 90),
+ (127, 119, 93), (138, 130, 99), (146, 136, 103), (153, 143, 106),
+ (157, 146, 107), (156, 149, 108), (153, 147, 108), (151, 145, 109),
+ (145, 139, 106), (139, 134, 104), (124, 124, 97), (108, 110, 89),
+ (81, 81, 64), (73, 75, 59), (66, 69, 54), (55, 58, 44),
+ (45, 48, 35), (41, 40, 28), (37, 35, 23), (34, 32, 19),
+ (31, 29, 16), (29, 28, 15), (28, 27, 15), (28, 27, 15),
+ (28, 28, 16), (29, 28, 16), (31, 30, 17), (32, 31, 19),
+ (35, 34, 23), (35, 34, 23), (36, 35, 23), (38, 36, 24),
+ (41, 38, 25), (44, 42, 27), (49, 46, 27), (58, 54, 30),
+ (69, 64, 37), (82, 77, 45), (93, 87, 52), (105, 100, 59),
+ (116, 109, 68), (126, 118, 76), (128, 119, 78), (124, 117, 74),
+ (113, 105, 65), (109, 102, 62), (106, 99, 60), (101, 91, 54),
+ (100, 92, 53), (104, 96, 58), (113, 108, 68), (131, 123, 84),
+ (159, 149, 97), (181, 171, 118), (196, 189, 136), (207, 199, 156),
+ (219, 211, 161), (216, 207, 158), (201, 192, 146), (177, 170, 136),
+ (158, 152, 121), (135, 130, 103), (113, 106, 82), (93, 87, 64),
+ (82, 77, 52), (76, 72, 47), (72, 69, 46), (68, 67, 45),
+ (67, 65, 43), (65, 62, 39), (62, 59, 34), (56, 54, 28),
+ (50, 49, 22), (44, 42, 16), (39, 35, 12), (33, 29, 6),
+ (29, 24, 2), (24, 21, 1), (21, 19, 2), (20, 18, 3),
+ (21, 18, 4), (22, 19, 5), (24, 21, 7), (26, 25, 9),
+ (32, 30, 14), (40, 38, 17), (52, 47, 22), (65, 59, 29),
+ (80, 73, 39), (95, 87, 46), (109, 101, 53), (123, 112, 61),
+ (134, 120, 69), (139, 125, 74), (135, 123, 75), (126, 116, 72),
+ (114, 104, 67), (101, 91, 61), (85, 78, 53), (69, 63, 44),
+ (55, 50, 33), (44, 39, 25), (35, 33, 19), (29, 28, 16),
+ (25, 25, 13), (22, 22, 12), (20, 20, 11), (18, 18, 10),
+ (17, 17, 9), (17, 16, 9), (17, 16, 10), (20, 19, 11),
+ (21, 20, 11), (31, 28, 15), (38, 34, 19), (48, 43, 26)
+ ),
+
+// 389 040221-32
+((206, 195, 184), (218, 208, 198), (220, 210, 199), (222, 212, 201),
+ (226, 217, 206), (231, 222, 212), (233, 223, 212), (235, 225, 213),
+ (234, 223, 211), (229, 218, 206), (225, 214, 201), (220, 208, 195),
+ (215, 203, 190), (212, 200, 188), (209, 198, 187), (209, 198, 187),
+ (210, 199, 187), (214, 205, 195), (219, 210, 200), (224, 215, 205),
+ (231, 222, 212), (238, 230, 220), (239, 231, 221), (241, 233, 223),
+ (235, 226, 216), (223, 214, 203), (211, 202, 191), (192, 182, 169),
+ (174, 162, 148), (164, 150, 134), (154, 138, 121), (133, 110, 89),
+ (119, 94, 72), (99, 68, 41), (97, 68, 43), (96, 69, 46),
+ (99, 73, 51), (102, 77, 56), (102, 77, 56), (102, 77, 56),
+ (92, 68, 48), (88, 62, 40), (84, 56, 33), (83, 56, 34),
+ (82, 57, 36), (83, 59, 39), (85, 62, 43), (93, 70, 49),
+ (103, 78, 54), (117, 94, 74), (121, 96, 73), (126, 99, 73),
+ (120, 95, 72), (115, 92, 71), (107, 85, 65), (100, 78, 59),
+ (80, 57, 37), (76, 53, 34), (72, 50, 32), (84, 57, 33),
+ (97, 65, 35), (103, 72, 44), (110, 80, 53), (123, 95, 69),
+ (136, 109, 82), (155, 138, 120), (160, 145, 129), (165, 152, 139),
+ (165, 152, 139), (165, 152, 140), (165, 152, 140), (165, 151, 139),
+ (169, 150, 130), (174, 155, 133), (180, 160, 137), (188, 166, 140),
+ (196, 172, 143), (197, 174, 145), (198, 176, 148), (200, 178, 152),
+ (202, 181, 155), (205, 185, 159), (203, 186, 163), (202, 187, 167),
+ (201, 186, 166), (201, 186, 166), (197, 183, 166), (190, 179, 165),
+ (185, 170, 155), (178, 162, 148), (171, 155, 141), (168, 151, 136),
+ (165, 148, 132), (158, 141, 126), (152, 137, 121), (151, 135, 120),
+ (153, 137, 122), (166, 154, 141), (177, 164, 149), (188, 174, 158),
+ (192, 178, 162), (196, 182, 166), (201, 187, 168), (206, 190, 167),
+ (205, 186, 161), (203, 182, 156), (201, 179, 152), (198, 177, 152),
+ (195, 176, 152), (191, 174, 154), (190, 174, 156), (187, 174, 160),
+ (185, 175, 164), (185, 175, 165), (184, 174, 163), (183, 173, 162),
+ (181, 169, 158), (175, 162, 149), (166, 152, 136), (155, 138, 120),
+ (128, 108, 88), (117, 94, 73), (106, 81, 58), (103, 77, 54),
+ (100, 74, 51), (98, 71, 47), (99, 71, 48), (107, 77, 50),
+ (118, 86, 55), (130, 104, 81), (135, 109, 85), (140, 115, 90),
+ (143, 122, 101), (144, 126, 107), (149, 129, 107), (150, 130, 108),
+ (153, 133, 111), (156, 138, 118), (159, 143, 126), (159, 145, 130),
+ (160, 147, 134), (163, 151, 139), (169, 158, 147), (175, 164, 155),
+ (179, 168, 158), (193, 180, 165), (197, 183, 167), (201, 187, 170),
+ (205, 190, 172), (209, 193, 174), (207, 192, 173), (201, 185, 166),
+ (178, 162, 146), (172, 154, 137), (167, 147, 128), (155, 131, 108),
+ (140, 116, 93), (131, 103, 77), (121, 90, 61), (105, 76, 49),
+ (89, 62, 39), (69, 46, 26), (63, 42, 23), (58, 38, 21),
+ (63, 41, 23), (79, 54, 33), (92, 71, 52), (111, 91, 74),
+ (157, 140, 123), (165, 151, 136), (174, 162, 149), (189, 178, 166),
+ (203, 193, 182), (214, 205, 195), (224, 214, 205), (229, 220, 211),
+ (232, 222, 211), (233, 223, 210), (232, 221, 208), (230, 218, 202),
+ (227, 214, 195), (224, 210, 191), (221, 208, 189), (218, 206, 188),
+ (217, 206, 191), (217, 207, 193), (217, 209, 196), (218, 209, 199),
+ (221, 212, 202), (223, 215, 204), (223, 215, 204), (222, 213, 202),
+ (218, 209, 198), (214, 205, 194), (208, 199, 188), (199, 189, 178),
+ (190, 180, 169), (182, 171, 158), (177, 163, 146), (176, 159, 140),
+ (175, 158, 138), (176, 157, 135), (180, 160, 138), (181, 164, 146),
+ (181, 166, 150), (179, 166, 153), (178, 167, 156), (179, 167, 156),
+ (178, 167, 156), (178, 168, 159), (179, 169, 159), (180, 170, 160),
+ (181, 171, 162), (183, 173, 163), (185, 175, 164), (186, 176, 166),
+ (188, 179, 168), (193, 182, 170), (199, 186, 171), (204, 190, 174),
+ (208, 194, 177), (212, 197, 179), (214, 200, 183), (216, 202, 186),
+ (218, 204, 187), (218, 205, 191), (220, 208, 194), (224, 211, 195),
+ (225, 213, 198), (225, 215, 202), (226, 215, 202), (224, 215, 202),
+ (220, 212, 201), (217, 208, 197), (213, 204, 193), (210, 200, 188),
+ (208, 197, 185), (205, 195, 183), (206, 195, 183), (208, 198, 186),
+ (211, 202, 191), (217, 208, 198), (225, 215, 206), (231, 222, 212),
+ (236, 227, 218), (239, 230, 221), (239, 231, 222), (237, 228, 219),
+ (233, 225, 216), (230, 221, 213), (224, 216, 206), (220, 211, 201),
+ (213, 203, 193), (208, 198, 187), (211, 201, 191), (209, 199, 188)
+ ),
+
+// 390 040221-33
+((135, 92, 121), (124, 76, 110), (117, 68, 105), (110, 61, 101),
+ (106, 59, 100), (102, 58, 99), (99, 59, 100), (96, 60, 101),
+ (92, 70, 124), (94, 79, 137), (97, 88, 151), (104, 99, 161),
+ (111, 110, 172), (118, 119, 176), (125, 128, 181), (124, 130, 182),
+ (124, 132, 184), (119, 127, 182), (118, 126, 181), (117, 126, 181),
+ (120, 123, 177), (124, 120, 173), (128, 120, 170), (133, 120, 167),
+ (146, 118, 154), (149, 111, 146), (153, 105, 139), (151, 97, 132),
+ (150, 90, 125), (148, 86, 120), (147, 82, 115), (147, 75, 107),
+ (144, 71, 105), (138, 69, 104), (138, 70, 106), (139, 72, 109),
+ (142, 73, 109), (145, 75, 110), (148, 77, 110), (152, 80, 110),
+ (156, 87, 115), (156, 92, 121), (156, 98, 128), (157, 104, 136),
+ (158, 110, 145), (159, 112, 148), (160, 115, 151), (166, 120, 153),
+ (171, 121, 151), (173, 117, 144), (171, 116, 141), (170, 116, 139),
+ (163, 114, 136), (156, 112, 134), (154, 110, 132), (153, 109, 131),
+ (152, 102, 119), (154, 100, 117), (156, 99, 115), (159, 104, 119),
+ (163, 110, 123), (162, 112, 125), (161, 114, 127), (162, 118, 133),
+ (160, 123, 137), (161, 123, 141), (161, 122, 142), (161, 121, 143),
+ (164, 125, 146), (168, 130, 149), (172, 136, 152), (178, 145, 162),
+ (175, 158, 174), (164, 153, 171), (153, 149, 169), (139, 139, 164),
+ (125, 129, 160), (119, 123, 155), (113, 118, 151), (102, 110, 146),
+ (97, 106, 141), (91, 103, 134), (83, 105, 132), (76, 108, 130),
+ (71, 109, 131), (66, 110, 133), (57, 107, 130), (49, 100, 129),
+ (42, 85, 121), (42, 77, 113), (42, 69, 105), (42, 66, 98),
+ (43, 64, 91), (44, 65, 82), (48, 67, 77), (53, 70, 81),
+ (56, 75, 89), (67, 87, 107), (71, 83, 110), (75, 79, 113),
+ (75, 78, 112), (75, 77, 112), (76, 75, 108), (76, 72, 105),
+ (70, 73, 107), (68, 80, 110), (66, 87, 113), (64, 89, 115),
+ (62, 92, 117), (56, 98, 121), (50, 104, 120), (48, 104, 118),
+ (47, 103, 116), (58, 118, 125), (64, 123, 126), (70, 128, 128),
+ (84, 142, 136), (98, 155, 144), (110, 168, 153), (123, 180, 164),
+ (145, 195, 181), (159, 203, 191), (173, 212, 202), (181, 216, 207),
+ (190, 220, 213), (207, 229, 223), (224, 237, 233), (235, 240, 240),
+ (242, 241, 242), (241, 234, 241), (238, 231, 239), (236, 228, 237),
+ (228, 222, 233), (218, 217, 227), (216, 217, 226), (212, 211, 222),
+ (208, 207, 219), (210, 207, 219), (213, 208, 220), (214, 207, 220),
+ (215, 206, 221), (210, 207, 220), (212, 212, 223), (215, 216, 226),
+ (214, 217, 225), (223, 228, 233), (225, 230, 234), (227, 233, 235),
+ (231, 235, 237), (224, 236, 236), (216, 232, 233), (211, 224, 228),
+ (198, 200, 207), (196, 197, 203), (195, 195, 199), (188, 190, 188),
+ (182, 185, 178), (168, 179, 165), (149, 168, 152), (130, 153, 137),
+ (111, 132, 122), (83, 95, 91), (78, 88, 85), (73, 81, 79),
+ (71, 77, 72), (68, 80, 67), (61, 84, 64), (52, 87, 61),
+ (37, 74, 54), (36, 69, 52), (35, 65, 51), (40, 55, 50),
+ (50, 55, 55), (62, 64, 65), (76, 78, 79), (92, 98, 98),
+ (109, 116, 114), (124, 133, 130), (137, 148, 143), (152, 157, 154),
+ (169, 163, 162), (184, 172, 174), (199, 181, 184), (213, 195, 200),
+ (238, 224, 227), (241, 230, 232), (244, 236, 238), (248, 246, 247),
+ (252, 252, 251), (255, 255, 255), (255, 255, 255), (255, 255, 255),
+ (252, 251, 251), (248, 242, 244), (243, 231, 234), (234, 217, 225),
+ (225, 203, 214), (214, 188, 204), (204, 174, 193), (195, 163, 186),
+ (186, 153, 178), (177, 141, 169), (171, 129, 156), (164, 116, 145),
+ (156, 103, 130), (146, 91, 118), (138, 79, 104), (131, 74, 96),
+ (124, 76, 95), (120, 81, 99), (123, 90, 105), (130, 99, 114),
+ (142, 113, 124), (151, 127, 135), (163, 136, 141), (174, 142, 144),
+ (179, 149, 144), (181, 151, 144), (180, 152, 144), (174, 147, 141),
+ (173, 144, 140), (169, 144, 142), (167, 141, 142), (168, 134, 141),
+ (168, 130, 134), (167, 124, 128), (164, 117, 117), (153, 102, 104),
+ (143, 88, 90), (132, 77, 79), (120, 68, 69), (108, 59, 63),
+ (100, 53, 60), (98, 52, 60), (100, 53, 63), (105, 56, 69),
+ (113, 65, 80), (122, 75, 91), (131, 85, 101), (136, 94, 111),
+ (141, 102, 121), (145, 111, 129), (150, 118, 137), (155, 120, 144),
+ (162, 130, 154), (169, 138, 163), (176, 143, 169), (175, 144, 173),
+ (179, 146, 178), (175, 146, 175), (170, 143, 168), (162, 133, 158),
+ (155, 125, 149), (149, 119, 142), (147, 112, 133), (137, 101, 123)
+ ),
+
+// 391 040221-34
+((158, 126, 83), (176, 149, 109), (171, 152, 120), (167, 155, 132),
+ (181, 169, 150), (195, 183, 168), (205, 194, 180), (216, 206, 193),
+ (244, 240, 234), (248, 246, 242), (252, 252, 251), (251, 247, 242),
+ (251, 243, 234), (245, 229, 216), (239, 215, 199), (232, 206, 189),
+ (226, 197, 180), (181, 157, 152), (155, 137, 137), (130, 118, 123),
+ (113, 101, 112), (96, 85, 101), (91, 80, 97), (86, 75, 94),
+ (96, 77, 87), (112, 80, 87), (128, 84, 87), (144, 84, 80),
+ (161, 84, 73), (167, 84, 68), (173, 84, 64), (177, 81, 61),
+ (168, 79, 59), (144, 65, 48), (129, 58, 46), (114, 52, 45),
+ (112, 58, 48), (111, 65, 52), (117, 74, 56), (124, 83, 60),
+ (156, 127, 100), (176, 147, 123), (196, 168, 146), (214, 187, 163),
+ (233, 207, 180), (238, 213, 184), (243, 220, 188), (244, 220, 187),
+ (238, 209, 184), (227, 172, 162), (229, 165, 145), (231, 159, 128),
+ (225, 153, 113), (219, 147, 99), (217, 142, 96), (216, 137, 93),
+ (219, 136, 88), (211, 137, 84), (204, 138, 80), (193, 129, 72),
+ (183, 120, 65), (177, 113, 60), (172, 107, 55), (161, 94, 50),
+ (149, 76, 40), (135, 55, 28), (140, 62, 32), (145, 69, 36),
+ (150, 76, 41), (155, 83, 47), (169, 100, 60), (179, 116, 83),
+ (197, 154, 130), (207, 169, 139), (218, 185, 149), (213, 183, 149),
+ (208, 182, 149), (199, 174, 146), (190, 167, 144), (164, 153, 147),
+ (141, 138, 139), (98, 107, 116), (86, 87, 97), (74, 68, 79),
+ (68, 63, 75), (63, 58, 72), (59, 54, 69), (55, 52, 71),
+ (83, 43, 52), (98, 43, 43), (113, 44, 34), (115, 43, 32),
+ (118, 43, 31), (117, 46, 28), (115, 52, 31), (113, 65, 42),
+ (100, 76, 50), (73, 75, 66), (61, 77, 77), (50, 79, 89),
+ (42, 84, 95), (35, 89, 101), (21, 88, 111), (11, 81, 117),
+ (7, 56, 115), (12, 53, 106), (17, 51, 98), (23, 47, 91),
+ (29, 44, 85), (40, 41, 74), (46, 37, 64), (54, 34, 53),
+ (57, 35, 43), (83, 32, 26), (88, 34, 26), (94, 36, 26),
+ (108, 40, 31), (116, 54, 42), (125, 69, 51), (137, 81, 58),
+ (155, 89, 59), (152, 88, 60), (149, 87, 61), (142, 85, 61),
+ (136, 84, 62), (118, 79, 57), (104, 70, 48), (94, 60, 43),
+ (88, 52, 40), (93, 63, 50), (97, 70, 57), (102, 78, 65),
+ (115, 99, 85), (138, 120, 108), (161, 141, 132), (186, 165, 150),
+ (216, 188, 162), (211, 182, 159), (207, 177, 157), (199, 170, 154),
+ (191, 164, 151), (178, 144, 133), (167, 123, 110), (156, 103, 87),
+ (144, 85, 65), (120, 61, 52), (121, 61, 51), (122, 61, 51),
+ (135, 73, 53), (149, 88, 55), (161, 101, 62), (171, 114, 71),
+ (197, 143, 88), (205, 151, 91), (213, 160, 95), (225, 173, 102),
+ (231, 182, 107), (231, 184, 112), (231, 186, 115), (232, 187, 119),
+ (233, 189, 123), (236, 193, 130), (236, 196, 135), (237, 199, 141),
+ (238, 206, 156), (240, 214, 172), (242, 220, 187), (245, 224, 195),
+ (249, 237, 221), (249, 240, 228), (250, 244, 236), (251, 250, 248),
+ (253, 253, 253), (254, 254, 254), (255, 255, 255), (255, 255, 255),
+ (254, 255, 255), (254, 255, 255), (254, 255, 255), (254, 255, 255),
+ (255, 255, 255), (254, 255, 255), (254, 255, 255), (254, 255, 255),
+ (254, 254, 254), (253, 253, 253), (252, 252, 252), (249, 247, 246),
+ (244, 237, 230), (234, 220, 212), (219, 200, 189), (199, 178, 166),
+ (171, 153, 146), (145, 133, 121), (120, 113, 99), (98, 101, 80),
+ (78, 91, 61), (59, 85, 54), (49, 75, 46), (45, 69, 45),
+ (53, 73, 47), (69, 82, 48), (92, 106, 56), (116, 119, 63),
+ (140, 129, 71), (161, 134, 79), (179, 135, 81), (197, 148, 86),
+ (210, 160, 93), (221, 173, 102), (227, 182, 109), (227, 184, 113),
+ (228, 186, 114), (228, 185, 115), (229, 185, 116), (230, 186, 118),
+ (233, 188, 116), (234, 189, 113), (238, 189, 106), (238, 188, 102),
+ (237, 187, 102), (238, 186, 102), (232, 180, 102), (226, 171, 92),
+ (212, 155, 83), (195, 138, 73), (181, 123, 69), (165, 108, 67),
+ (150, 96, 63), (133, 80, 54), (115, 64, 45), (97, 51, 39),
+ (81, 44, 40), (67, 41, 47), (54, 39, 51), (46, 38, 52),
+ (39, 32, 47), (32, 30, 43), (35, 29, 43), (33, 26, 43),
+ (29, 28, 43), (24, 22, 38), (17, 22, 36), (20, 28, 37),
+ (30, 33, 36), (40, 43, 42), (54, 52, 45), (67, 65, 57),
+ (85, 85, 71), (106, 103, 79), (126, 121, 89), (149, 131, 94),
+ (170, 141, 97), (166, 134, 92), (163, 129, 85), (159, 128, 81)
+ ),
+
+// 392 040221-35
+((186, 160, 182), (190, 133, 166), (189, 121, 158), (188, 110, 151),
+ (194, 104, 151), (201, 99, 152), (202, 102, 153), (204, 105, 155),
+ (202, 133, 169), (208, 148, 180), (214, 164, 192), (210, 174, 194),
+ (207, 185, 196), (200, 193, 196), (193, 202, 196), (195, 205, 199),
+ (198, 209, 203), (198, 206, 203), (191, 198, 195), (185, 190, 188),
+ (187, 189, 190), (189, 189, 192), (193, 187, 194), (197, 186, 197),
+ (211, 197, 209), (217, 205, 216), (224, 214, 224), (224, 212, 223),
+ (224, 210, 222), (220, 208, 218), (217, 207, 215), (206, 203, 207),
+ (194, 198, 198), (165, 168, 168), (150, 156, 154), (135, 144, 140),
+ (128, 139, 134), (122, 135, 128), (122, 134, 127), (122, 134, 127),
+ (129, 137, 137), (127, 143, 143), (125, 150, 150), (120, 147, 152),
+ (116, 144, 155), (112, 139, 153), (108, 134, 151), (96, 118, 144),
+ (84, 102, 131), (70, 71, 109), (68, 57, 99), (67, 44, 90),
+ (69, 34, 80), (72, 25, 70), (75, 27, 70), (78, 29, 71),
+ (96, 55, 86), (102, 67, 97), (108, 80, 108), (105, 94, 117),
+ (102, 108, 127), (100, 112, 129), (99, 116, 131), (94, 116, 131),
+ (85, 111, 128), (79, 92, 115), (86, 78, 105), (93, 64, 96),
+ (93, 57, 91), (94, 50, 87), (90, 40, 80), (88, 40, 80),
+ (93, 56, 94), (94, 60, 96), (96, 64, 98), (88, 74, 96),
+ (80, 84, 95), (75, 91, 99), (70, 98, 104), (62, 105, 113),
+ (58, 108, 117), (56, 107, 110), (59, 101, 111), (62, 96, 112),
+ (63, 90, 113), (64, 85, 115), (63, 73, 117), (59, 65, 113),
+ (50, 50, 92), (47, 40, 82), (45, 30, 73), (44, 26, 70),
+ (44, 23, 67), (44, 18, 68), (42, 15, 66), (44, 18, 67),
+ (49, 26, 76), (75, 49, 102), (91, 56, 119), (108, 63, 137),
+ (114, 69, 144), (120, 75, 151), (131, 91, 158), (137, 108, 163),
+ (152, 130, 175), (155, 134, 176), (158, 139, 178), (156, 138, 176),
+ (155, 137, 175), (154, 128, 168), (154, 122, 162), (154, 115, 155),
+ (156, 106, 147), (147, 76, 137), (144, 70, 135), (141, 64, 134),
+ (139, 55, 133), (139, 54, 131), (139, 61, 129), (135, 62, 127),
+ (128, 67, 127), (129, 73, 130), (131, 80, 133), (131, 84, 133),
+ (132, 88, 133), (131, 98, 131), (128, 101, 126), (127, 101, 122),
+ (124, 93, 115), (110, 70, 101), (104, 64, 94), (98, 58, 88),
+ (86, 51, 78), (71, 41, 64), (61, 29, 55), (54, 19, 47),
+ (56, 6, 36), (56, 12, 37), (57, 19, 39), (58, 25, 43),
+ (60, 32, 48), (63, 42, 54), (77, 55, 68), (93, 62, 81),
+ (103, 76, 96), (117, 107, 118), (120, 115, 123), (123, 123, 129),
+ (130, 132, 136), (138, 138, 143), (144, 145, 150), (148, 148, 153),
+ (153, 155, 159), (154, 156, 159), (155, 157, 160), (154, 157, 162),
+ (152, 156, 161), (147, 154, 160), (140, 152, 161), (134, 149, 160),
+ (129, 147, 159), (129, 141, 153), (129, 138, 151), (130, 136, 150),
+ (134, 126, 149), (135, 116, 147), (138, 101, 137), (142, 85, 126),
+ (150, 65, 110), (151, 65, 111), (153, 66, 113), (155, 65, 114),
+ (150, 60, 108), (141, 49, 98), (122, 46, 89), (108, 51, 83),
+ (96, 63, 82), (83, 73, 78), (74, 70, 68), (57, 65, 59),
+ (45, 62, 50), (40, 64, 49), (44, 75, 56), (57, 85, 64),
+ (89, 111, 94), (101, 120, 105), (113, 130, 117), (138, 152, 144),
+ (162, 170, 167), (180, 184, 184), (189, 191, 192), (194, 196, 200),
+ (192, 198, 204), (185, 197, 204), (172, 190, 201), (153, 177, 191),
+ (136, 163, 182), (118, 152, 174), (104, 144, 168), (94, 140, 165),
+ (84, 138, 163), (81, 135, 162), (81, 136, 164), (81, 137, 165),
+ (81, 135, 165), (78, 131, 159), (75, 116, 151), (75, 100, 143),
+ (76, 87, 136), (75, 76, 133), (71, 77, 128), (68, 75, 126),
+ (68, 72, 128), (78, 76, 131), (94, 82, 140), (109, 101, 148),
+ (122, 122, 157), (136, 142, 174), (153, 167, 189), (175, 186, 205),
+ (195, 202, 218), (206, 216, 221), (209, 217, 220), (203, 215, 212),
+ (192, 205, 200), (178, 185, 184), (157, 167, 167), (132, 142, 145),
+ (107, 118, 119), (84, 98, 99), (67, 70, 79), (57, 50, 73),
+ (53, 37, 75), (57, 32, 77), (67, 39, 84), (76, 49, 88),
+ (81, 58, 99), (86, 71, 113), (88, 81, 128), (91, 92, 139),
+ (88, 99, 145), (81, 104, 145), (77, 111, 145), (74, 113, 144),
+ (77, 119, 142), (82, 118, 145), (90, 123, 148), (101, 132, 156),
+ (119, 142, 163), (139, 160, 172), (157, 172, 181), (169, 179, 185),
+ (173, 181, 186), (173, 178, 182), (174, 175, 182), (179, 170, 184)
+ ),
+
+// 393 040221-36
+((8, 4, 11), (9, 4, 13), (9, 4, 14), (10, 5, 15),
+ (11, 6, 18), (12, 7, 21), (14, 8, 24), (16, 10, 27),
+ (29, 23, 47), (37, 28, 55), (45, 33, 64), (48, 35, 66),
+ (52, 37, 69), (52, 36, 68), (52, 36, 68), (51, 36, 68),
+ (51, 36, 68), (49, 38, 71), (49, 37, 70), (50, 36, 69),
+ (47, 33, 63), (44, 31, 57), (41, 28, 51), (38, 26, 46),
+ (23, 13, 26), (16, 9, 20), (9, 5, 15), (8, 5, 15),
+ (8, 5, 15), (10, 7, 17), (13, 9, 20), (20, 16, 29),
+ (29, 23, 39), (50, 41, 63), (60, 48, 73), (70, 56, 83),
+ (77, 62, 90), (85, 68, 98), (87, 71, 101), (90, 74, 105),
+ (96, 79, 112), (95, 79, 113), (95, 79, 114), (92, 76, 109),
+ (90, 73, 105), (87, 70, 101), (84, 67, 97), (76, 62, 87),
+ (67, 55, 76), (47, 39, 53), (36, 30, 42), (26, 22, 32),
+ (18, 15, 24), (11, 8, 16), (8, 6, 13), (6, 4, 10),
+ (2, 0, 4), (1, 0, 3), (0, 0, 2), (0, 0, 2),
+ (0, 0, 2), (0, 0, 2), (0, 0, 2), (0, 0, 2),
+ (0, 0, 2), (0, 0, 2), (0, 0, 2), (0, 0, 2),
+ (0, 0, 2), (0, 0, 3), (0, 0, 3), (1, 0, 4),
+ (4, 2, 11), (8, 5, 18), (12, 9, 26), (20, 16, 37),
+ (29, 24, 48), (34, 28, 53), (40, 33, 59), (50, 41, 70),
+ (58, 48, 76), (69, 57, 87), (70, 57, 89), (71, 58, 91),
+ (71, 57, 92), (71, 57, 93), (73, 58, 92), (74, 58, 92),
+ (73, 57, 87), (70, 54, 80), (67, 51, 73), (64, 48, 70),
+ (61, 46, 67), (54, 41, 62), (51, 36, 59), (50, 35, 60),
+ (49, 35, 62), (55, 40, 73), (61, 44, 78), (68, 48, 84),
+ (71, 50, 87), (75, 53, 90), (85, 57, 95), (93, 64, 105),
+ (106, 78, 126), (110, 83, 135), (114, 89, 145), (115, 90, 147),
+ (116, 92, 150), (115, 92, 152), (115, 90, 149), (114, 88, 145),
+ (111, 84, 139), (99, 74, 124), (94, 71, 120), (90, 69, 117),
+ (81, 64, 111), (71, 57, 105), (62, 51, 97), (54, 45, 89),
+ (46, 36, 73), (47, 34, 68), (48, 32, 63), (50, 33, 62),
+ (53, 34, 62), (61, 38, 62), (68, 42, 64), (75, 48, 69),
+ (83, 55, 75), (100, 70, 87), (105, 73, 90), (110, 76, 94),
+ (121, 84, 102), (133, 92, 111), (144, 100, 118), (154, 108, 127),
+ (165, 119, 145), (163, 120, 149), (161, 122, 153), (159, 121, 154),
+ (158, 121, 155), (156, 120, 157), (152, 116, 155), (148, 112, 151),
+ (142, 105, 146), (123, 93, 135), (116, 88, 131), (110, 84, 127),
+ (98, 76, 119), (88, 68, 111), (77, 62, 102), (70, 55, 93),
+ (57, 41, 73), (54, 38, 68), (51, 36, 64), (45, 31, 57),
+ (41, 28, 51), (42, 27, 47), (47, 30, 47), (53, 35, 50),
+ (60, 37, 52), (70, 41, 55), (70, 41, 56), (71, 41, 57),
+ (69, 40, 56), (67, 39, 55), (66, 38, 54), (68, 40, 55),
+ (71, 42, 55), (71, 41, 54), (71, 41, 53), (68, 38, 50),
+ (59, 33, 44), (48, 25, 36), (35, 17, 28), (24, 11, 20),
+ (16, 6, 14), (9, 3, 9), (5, 1, 6), (3, 0, 5),
+ (2, 0, 4), (2, 0, 4), (1, 0, 4), (1, 0, 4),
+ (1, 0, 3), (1, 0, 3), (1, 0, 3), (1, 0, 2),
+ (1, 0, 2), (1, 0, 2), (1, 0, 3), (1, 0, 3),
+ (1, 0, 5), (1, 0, 6), (2, 0, 8), (3, 0, 9),
+ (4, 1, 10), (5, 1, 11), (6, 1, 12), (7, 1, 12),
+ (7, 1, 12), (7, 1, 13), (7, 1, 14), (8, 1, 15),
+ (8, 1, 15), (8, 1, 16), (8, 1, 16), (8, 1, 15),
+ (8, 1, 14), (8, 1, 13), (7, 2, 13), (7, 2, 13),
+ (9, 4, 17), (11, 6, 22), (15, 12, 31), (23, 18, 42),
+ (33, 26, 53), (44, 35, 63), (55, 44, 73), (66, 52, 81),
+ (77, 62, 89), (87, 69, 97), (96, 77, 107), (106, 86, 117),
+ (117, 94, 130), (127, 103, 141), (137, 112, 151), (147, 118, 157),
+ (155, 125, 161), (162, 128, 162), (166, 131, 161), (169, 133, 159),
+ (170, 132, 158), (168, 130, 159), (163, 128, 159), (157, 123, 157),
+ (149, 118, 152), (140, 110, 145), (129, 102, 135), (119, 93, 123),
+ (110, 85, 111), (100, 77, 99), (91, 69, 91), (81, 61, 83),
+ (70, 53, 75), (59, 45, 67), (48, 37, 60), (40, 31, 53),
+ (32, 25, 43), (24, 18, 33), (19, 13, 25), (15, 9, 19),
+ (12, 7, 15), (10, 5, 12), (6, 1, 9), (8, 3, 11)
+ ),
+
+// 394 040221-37
+((128, 92, 57), (118, 83, 51), (108, 76, 46), (98, 69, 41),
+ (81, 56, 36), (64, 43, 32), (59, 39, 32), (55, 35, 32),
+ (45, 32, 32), (42, 32, 32), (40, 32, 32), (39, 32, 32),
+ (39, 32, 32), (38, 32, 32), (37, 32, 32), (37, 32, 32),
+ (38, 32, 32), (39, 32, 32), (40, 32, 32), (41, 32, 32),
+ (41, 32, 32), (41, 32, 32), (40, 32, 32), (40, 32, 32),
+ (38, 32, 32), (35, 32, 32), (33, 32, 32), (32, 32, 32),
+ (32, 32, 32), (32, 32, 32), (32, 32, 32), (32, 32, 32),
+ (32, 32, 32), (32, 32, 32), (33, 32, 32), (35, 32, 32),
+ (39, 32, 32), (44, 32, 32), (47, 33, 32), (50, 34, 33),
+ (63, 44, 41), (72, 51, 43), (82, 58, 46), (91, 65, 48),
+ (101, 73, 50), (105, 76, 51), (109, 80, 53), (113, 82, 56),
+ (115, 83, 57), (113, 82, 56), (110, 79, 54), (107, 76, 52),
+ (103, 73, 51), (99, 71, 50), (95, 69, 48), (92, 67, 47),
+ (77, 58, 41), (72, 54, 39), (68, 50, 37), (66, 47, 35),
+ (65, 45, 34), (66, 45, 34), (67, 45, 35), (68, 46, 35),
+ (70, 47, 37), (80, 55, 41), (84, 57, 43), (89, 59, 45),
+ (91, 60, 45), (94, 62, 46), (98, 63, 49), (100, 64, 50),
+ (106, 69, 50), (110, 72, 50), (115, 75, 50), (119, 80, 52),
+ (124, 85, 55), (124, 86, 57), (125, 87, 59), (127, 89, 62),
+ (127, 92, 64), (127, 93, 65), (124, 92, 63), (122, 92, 62),
+ (119, 90, 62), (117, 89, 62), (110, 85, 61), (99, 79, 61),
+ (81, 64, 58), (71, 57, 53), (62, 50, 49), (57, 46, 45),
+ (53, 43, 41), (45, 37, 35), (35, 32, 32), (32, 32, 32),
+ (32, 32, 32), (32, 32, 32), (32, 32, 32), (32, 32, 32),
+ (32, 32, 32), (32, 32, 32), (32, 32, 32), (32, 32, 32),
+ (32, 32, 32), (32, 32, 32), (32, 32, 32), (32, 32, 32),
+ (32, 32, 32), (34, 32, 32), (37, 32, 32), (39, 32, 32),
+ (43, 32, 32), (47, 32, 32), (48, 33, 32), (50, 34, 32),
+ (55, 37, 32), (59, 41, 34), (68, 50, 39), (79, 57, 46),
+ (101, 76, 63), (114, 88, 74), (128, 101, 85), (132, 105, 88),
+ (137, 110, 92), (142, 117, 100), (148, 122, 107), (152, 125, 110),
+ (153, 125, 111), (154, 128, 115), (154, 127, 113), (154, 127, 112),
+ (149, 122, 109), (143, 117, 105), (135, 110, 98), (125, 100, 88),
+ (104, 80, 68), (96, 71, 59), (89, 63, 50), (86, 60, 46),
+ (83, 58, 43), (79, 53, 39), (77, 52, 37), (77, 53, 35),
+ (76, 53, 34), (71, 50, 32), (69, 48, 32), (68, 47, 32),
+ (65, 45, 32), (63, 44, 32), (63, 46, 32), (64, 49, 32),
+ (73, 55, 38), (74, 56, 39), (76, 58, 40), (80, 62, 44),
+ (82, 64, 49), (86, 68, 53), (89, 71, 58), (94, 76, 64),
+ (98, 79, 70), (107, 88, 79), (109, 88, 79), (111, 89, 80),
+ (112, 89, 80), (115, 89, 80), (115, 91, 79), (112, 87, 80),
+ (105, 82, 81), (103, 80, 81), (101, 79, 81), (103, 80, 82),
+ (109, 85, 86), (122, 97, 93), (137, 111, 104), (153, 127, 112),
+ (164, 136, 118), (172, 142, 124), (175, 145, 125), (175, 145, 127),
+ (177, 147, 131), (179, 151, 140), (188, 160, 147), (189, 160, 145),
+ (181, 151, 130), (173, 143, 121), (165, 135, 113), (146, 117, 95),
+ (124, 99, 83), (109, 87, 77), (93, 74, 69), (86, 65, 63),
+ (79, 59, 53), (74, 53, 45), (71, 51, 37), (73, 52, 33),
+ (75, 55, 32), (80, 58, 34), (87, 63, 39), (92, 68, 44),
+ (98, 71, 49), (103, 76, 55), (110, 83, 61), (118, 91, 65),
+ (129, 98, 67), (140, 106, 71), (151, 113, 75), (161, 122, 81),
+ (169, 130, 88), (176, 137, 98), (181, 143, 104), (187, 148, 107),
+ (189, 153, 110), (189, 152, 109), (189, 151, 109), (188, 149, 109),
+ (185, 148, 110), (181, 145, 110), (177, 141, 109), (171, 137, 107),
+ (160, 128, 104), (151, 118, 98), (140, 109, 92), (130, 100, 87),
+ (122, 92, 80), (115, 85, 74), (109, 79, 69), (103, 71, 64),
+ (95, 65, 61), (89, 61, 57), (85, 57, 55), (82, 56, 53),
+ (82, 56, 52), (82, 57, 52), (82, 58, 51), (83, 59, 55),
+ (85, 62, 58), (86, 65, 61), (88, 68, 62), (92, 69, 59),
+ (94, 73, 59), (97, 74, 57), (98, 75, 55), (101, 76, 55),
+ (105, 80, 56), (110, 83, 58), (117, 87, 59), (124, 93, 62),
+ (139, 103, 69), (143, 106, 69), (141, 103, 65), (139, 99, 63),
+ (133, 97, 62), (130, 94, 61), (121, 87, 53), (125, 91, 57)
+ ),
+
+// 395 040221-38
+((197, 85, 22), (191, 80, 20), (192, 79, 19), (193, 78, 18),
+ (197, 80, 19), (201, 83, 20), (202, 84, 22), (204, 86, 25),
+ (204, 100, 41), (208, 111, 52), (213, 123, 64), (219, 135, 78),
+ (225, 148, 92), (230, 162, 106), (236, 177, 120), (238, 182, 125),
+ (241, 187, 131), (246, 202, 145), (245, 203, 146), (245, 204, 148),
+ (237, 200, 145), (230, 196, 143), (225, 191, 140), (221, 187, 137),
+ (204, 167, 117), (196, 158, 109), (189, 150, 101), (177, 141, 95),
+ (166, 132, 89), (160, 127, 86), (155, 123, 83), (145, 115, 77),
+ (137, 109, 74), (130, 104, 70), (128, 100, 67), (126, 97, 64),
+ (124, 91, 58), (123, 86, 53), (122, 83, 50), (122, 81, 48),
+ (117, 77, 45), (116, 76, 44), (115, 76, 43), (118, 73, 39),
+ (121, 70, 35), (123, 69, 33), (125, 69, 31), (126, 67, 30),
+ (123, 66, 30), (111, 67, 34), (107, 65, 33), (104, 63, 32),
+ (102, 61, 30), (101, 59, 28), (99, 58, 28), (98, 58, 29),
+ (86, 58, 33), (81, 58, 35), (76, 59, 38), (78, 60, 38),
+ (81, 62, 39), (83, 63, 39), (85, 64, 40), (90, 66, 40),
+ (95, 68, 40), (107, 70, 40), (113, 71, 39), (120, 72, 39),
+ (122, 73, 38), (125, 74, 38), (131, 75, 36), (135, 75, 35),
+ (145, 75, 33), (148, 76, 34), (152, 78, 35), (155, 80, 36),
+ (159, 83, 37), (160, 84, 37), (161, 85, 38), (164, 86, 37),
+ (164, 85, 37), (161, 84, 37), (158, 82, 36), (156, 80, 35),
+ (155, 78, 33), (154, 77, 32), (152, 73, 29), (150, 70, 27),
+ (149, 65, 22), (150, 66, 22), (152, 67, 23), (154, 70, 25),
+ (156, 73, 28), (161, 81, 35), (165, 91, 45), (170, 99, 53),
+ (173, 104, 58), (182, 112, 62), (184, 115, 64), (187, 119, 66),
+ (188, 120, 67), (189, 122, 69), (187, 123, 72), (185, 121, 71),
+ (183, 119, 68), (186, 121, 70), (189, 124, 73), (191, 128, 77),
+ (194, 132, 82), (199, 138, 89), (201, 144, 95), (202, 149, 101),
+ (200, 149, 101), (196, 145, 99), (195, 143, 97), (195, 142, 96),
+ (189, 136, 92), (179, 130, 88), (166, 120, 80), (150, 106, 69),
+ (122, 80, 47), (111, 72, 41), (100, 64, 36), (95, 62, 35),
+ (91, 61, 35), (83, 59, 36), (76, 57, 36), (77, 56, 34),
+ (83, 54, 30), (98, 53, 24), (103, 53, 23), (108, 54, 22),
+ (115, 56, 22), (126, 58, 21), (140, 60, 18), (151, 61, 16),
+ (167, 60, 8), (170, 60, 7), (173, 60, 7), (176, 62, 7),
+ (179, 64, 7), (186, 67, 9), (189, 71, 11), (193, 76, 14),
+ (194, 79, 17), (197, 84, 22), (199, 85, 23), (201, 87, 24),
+ (204, 87, 25), (205, 88, 26), (203, 89, 26), (201, 88, 26),
+ (192, 84, 26), (189, 81, 25), (187, 79, 24), (179, 74, 23),
+ (170, 71, 23), (163, 72, 25), (156, 74, 29), (151, 78, 36),
+ (150, 84, 42), (150, 94, 54), (151, 97, 58), (152, 101, 62),
+ (153, 108, 69), (155, 115, 75), (161, 123, 83), (167, 131, 89),
+ (188, 149, 100), (193, 153, 102), (198, 157, 104), (206, 162, 106),
+ (213, 169, 109), (218, 174, 111), (221, 178, 117), (225, 184, 121),
+ (230, 189, 124), (231, 188, 124), (229, 186, 121), (226, 180, 114),
+ (219, 171, 108), (212, 163, 104), (204, 158, 102), (197, 150, 100),
+ (180, 135, 89), (177, 130, 84), (174, 126, 79), (172, 115, 68),
+ (172, 108, 59), (176, 104, 52), (177, 103, 51), (177, 104, 52),
+ (175, 108, 55), (178, 111, 58), (183, 115, 61), (192, 121, 64),
+ (200, 127, 68), (205, 130, 73), (203, 132, 75), (199, 131, 76),
+ (196, 129, 76), (194, 127, 74), (195, 127, 73), (196, 124, 70),
+ (194, 119, 67), (190, 113, 62), (186, 106, 56), (180, 99, 49),
+ (174, 96, 46), (168, 94, 45), (163, 94, 47), (160, 94, 49),
+ (158, 95, 51), (159, 95, 51), (158, 94, 50), (159, 94, 49),
+ (158, 92, 48), (156, 90, 47), (155, 89, 46), (157, 90, 46),
+ (156, 90, 45), (156, 89, 44), (156, 88, 43), (152, 87, 44),
+ (147, 86, 45), (142, 87, 48), (135, 88, 52), (130, 90, 55),
+ (125, 92, 58), (122, 93, 61), (119, 93, 61), (120, 94, 62),
+ (123, 93, 60), (130, 94, 58), (139, 97, 57), (149, 101, 55),
+ (158, 104, 55), (165, 111, 60), (172, 118, 66), (181, 126, 74),
+ (190, 135, 81), (201, 142, 84), (209, 143, 84), (211, 143, 81),
+ (210, 140, 79), (207, 137, 77), (203, 133, 78), (202, 133, 77),
+ (203, 129, 74), (201, 123, 67), (197, 115, 59), (194, 106, 48),
+ (192, 97, 39), (193, 92, 31), (196, 89, 26), (198, 86, 22)
+ ),
+
+// 396 040221-39
+((44, 41, 38), (39, 39, 48), (36, 45, 59), (33, 51, 71),
+ (37, 59, 87), (41, 68, 104), (44, 74, 112), (47, 81, 120),
+ (52, 102, 154), (46, 104, 165), (41, 106, 176), (33, 99, 175),
+ (25, 93, 175), (24, 86, 164), (24, 80, 153), (25, 77, 146),
+ (27, 75, 140), (40, 70, 124), (44, 66, 114), (49, 63, 105),
+ (57, 61, 94), (65, 59, 83), (70, 60, 78), (76, 62, 74),
+ (109, 83, 79), (129, 99, 88), (149, 115, 97), (164, 134, 111),
+ (180, 153, 126), (185, 161, 133), (190, 170, 140), (199, 186, 153),
+ (209, 199, 168), (229, 219, 184), (234, 225, 188), (240, 231, 192),
+ (239, 230, 189), (239, 230, 186), (238, 228, 183), (238, 227, 180),
+ (232, 217, 161), (223, 205, 152), (214, 193, 143), (199, 177, 132),
+ (185, 162, 122), (177, 153, 115), (170, 145, 109), (157, 129, 95),
+ (150, 116, 78), (142, 99, 55), (146, 100, 54), (150, 101, 54),
+ (150, 104, 64), (151, 108, 74), (153, 110, 77), (156, 113, 80),
+ (158, 127, 96), (160, 135, 105), (163, 143, 114), (165, 152, 126),
+ (168, 162, 139), (170, 166, 144), (172, 170, 150), (172, 177, 164),
+ (173, 182, 170), (166, 179, 174), (157, 169, 167), (149, 159, 161),
+ (142, 152, 154), (136, 145, 148), (127, 132, 138), (124, 121, 123),
+ (117, 107, 98), (109, 101, 89), (102, 95, 80), (92, 88, 73),
+ (83, 82, 67), (79, 79, 68), (75, 77, 70), (63, 74, 79),
+ (59, 76, 89), (51, 94, 116), (51, 103, 122), (51, 113, 129),
+ (53, 117, 130), (56, 122, 132), (56, 126, 139), (60, 130, 141),
+ (62, 138, 151), (65, 142, 153), (69, 146, 156), (75, 148, 152),
+ (81, 150, 149), (93, 153, 146), (106, 155, 139), (113, 152, 129),
+ (122, 153, 124), (135, 154, 128), (144, 156, 131), (153, 158, 135),
+ (159, 161, 137), (165, 164, 140), (174, 167, 142), (184, 171, 143),
+ (188, 171, 141), (179, 162, 134), (171, 153, 128), (164, 146, 124),
+ (158, 139, 121), (140, 123, 115), (129, 113, 111), (123, 106, 105),
+ (123, 107, 105), (126, 109, 104), (127, 110, 104), (129, 111, 105),
+ (126, 108, 107), (122, 107, 114), (118, 108, 117), (120, 118, 125),
+ (144, 148, 140), (161, 165, 148), (179, 182, 157), (185, 187, 161),
+ (191, 192, 165), (195, 195, 170), (189, 201, 176), (181, 204, 177),
+ (174, 206, 175), (163, 199, 165), (163, 195, 161), (163, 192, 158),
+ (166, 181, 151), (163, 172, 146), (153, 159, 137), (140, 148, 127),
+ (109, 114, 99), (99, 96, 83), (89, 79, 68), (87, 72, 62),
+ (85, 66, 57), (82, 54, 49), (81, 48, 44), (80, 43, 42),
+ (77, 40, 39), (69, 33, 35), (65, 33, 35), (62, 34, 35),
+ (55, 37, 42), (52, 43, 53), (52, 48, 63), (54, 58, 73),
+ (72, 75, 91), (77, 81, 94), (83, 87, 97), (94, 101, 105),
+ (103, 114, 116), (116, 124, 123), (128, 137, 128), (138, 145, 131),
+ (155, 150, 131), (177, 153, 115), (178, 152, 112), (179, 151, 110),
+ (189, 154, 105), (203, 158, 95), (211, 159, 85), (217, 156, 77),
+ (233, 154, 51), (225, 145, 48), (218, 136, 45), (200, 124, 41),
+ (183, 111, 35), (162, 101, 29), (142, 92, 28), (135, 94, 27),
+ (133, 99, 23), (123, 92, 23), (105, 85, 27), (88, 73, 28),
+ (69, 62, 26), (51, 51, 26), (34, 44, 29), (25, 43, 32),
+ (32, 51, 43), (36, 53, 46), (41, 56, 50), (53, 61, 56),
+ (67, 64, 60), (78, 69, 63), (87, 74, 69), (100, 82, 75),
+ (114, 93, 85), (128, 106, 97), (143, 123, 112), (159, 138, 126),
+ (171, 155, 139), (175, 170, 153), (174, 182, 166), (173, 191, 174),
+ (174, 198, 180), (175, 207, 187), (182, 213, 193), (191, 219, 198),
+ (199, 226, 204), (198, 231, 215), (193, 235, 220), (183, 235, 225),
+ (171, 234, 227), (160, 227, 228), (158, 223, 229), (158, 221, 227),
+ (153, 219, 231), (145, 216, 233), (132, 204, 235), (115, 191, 226),
+ (93, 167, 210), (76, 146, 195), (63, 127, 176), (53, 112, 156),
+ (45, 101, 138), (39, 89, 127), (33, 77, 114), (26, 60, 95),
+ (21, 43, 78), (23, 28, 61), (29, 19, 44), (37, 17, 32),
+ (45, 21, 28), (55, 27, 30), (62, 33, 33), (68, 39, 38),
+ (72, 47, 47), (76, 57, 56), (86, 67, 65), (98, 79, 76),
+ (113, 94, 88), (128, 112, 103), (146, 128, 117), (160, 144, 132),
+ (166, 159, 144), (174, 169, 151), (179, 174, 157), (180, 174, 156),
+ (178, 172, 153), (174, 167, 147), (170, 159, 141), (160, 150, 133),
+ (148, 140, 123), (134, 128, 112), (118, 112, 99), (103, 94, 82),
+ (85, 79, 68), (69, 65, 56), (58, 53, 48), (51, 45, 41)
+ ),
+
+// 397 040221-40
+((111, 54, 43), (93, 45, 37), (95, 49, 39), (98, 53, 42),
+ (103, 60, 54), (108, 68, 66), (103, 69, 69), (98, 70, 73),
+ (80, 78, 86), (75, 78, 87), (70, 78, 88), (52, 70, 82),
+ (35, 62, 77), (24, 50, 67), (14, 38, 58), (14, 32, 52),
+ (15, 27, 47), (20, 18, 24), (24, 14, 19), (28, 11, 15),
+ (31, 7, 15), (34, 3, 16), (35, 5, 18), (37, 8, 20),
+ (45, 33, 47), (53, 46, 65), (62, 59, 84), (66, 69, 96),
+ (71, 80, 108), (70, 84, 113), (70, 89, 119), (76, 91, 123),
+ (79, 91, 122), (81, 75, 94), (70, 62, 79), (59, 49, 64),
+ (48, 35, 49), (38, 21, 34), (34, 17, 30), (30, 14, 26),
+ (17, 14, 26), (12, 12, 25), (8, 11, 25), (5, 12, 25),
+ (3, 13, 26), (3, 13, 26), (3, 14, 26), (6, 14, 24),
+ (11, 12, 19), (23, 8, 10), (28, 8, 8), (34, 8, 6),
+ (40, 9, 6), (46, 11, 6), (49, 11, 6), (53, 12, 7),
+ (65, 15, 12), (70, 18, 15), (76, 21, 18), (81, 23, 21),
+ (86, 26, 24), (87, 26, 26), (89, 26, 28), (94, 23, 33),
+ (99, 30, 44), (115, 51, 71), (119, 58, 82), (124, 66, 94),
+ (121, 69, 98), (118, 73, 103), (105, 76, 112), (96, 82, 119),
+ (86, 94, 127), (74, 87, 116), (62, 81, 106), (51, 68, 89),
+ (41, 56, 72), (41, 53, 66), (41, 50, 61), (40, 44, 54),
+ (42, 36, 41), (50, 21, 19), (54, 19, 15), (58, 17, 12),
+ (59, 17, 12), (61, 18, 13), (64, 21, 15), (68, 27, 21),
+ (100, 54, 42), (120, 65, 51), (140, 77, 60), (142, 79, 61),
+ (145, 81, 63), (155, 84, 65), (160, 85, 63), (168, 85, 62),
+ (182, 83, 59), (183, 83, 60), (166, 76, 60), (150, 70, 61),
+ (144, 62, 57), (138, 54, 54), (127, 41, 44), (124, 39, 41),
+ (102, 42, 49), (85, 32, 43), (68, 22, 38), (61, 16, 30),
+ (55, 10, 22), (47, 4, 11), (38, 4, 5), (33, 5, 3),
+ (30, 5, 5), (35, 4, 10), (38, 5, 10), (42, 7, 10),
+ (49, 10, 11), (55, 10, 12), (62, 8, 13), (70, 8, 15),
+ (99, 18, 18), (118, 26, 21), (137, 35, 25), (145, 41, 29),
+ (153, 48, 34), (160, 59, 45), (168, 71, 54), (178, 77, 57),
+ (179, 81, 55), (160, 80, 57), (149, 78, 57), (139, 76, 57),
+ (120, 66, 54), (99, 53, 45), (73, 42, 35), (53, 28, 26),
+ (32, 9, 13), (33, 7, 11), (34, 5, 10), (35, 5, 10),
+ (37, 6, 10), (40, 6, 8), (44, 6, 6), (48, 6, 5),
+ (51, 6, 4), (50, 6, 4), (48, 6, 3), (46, 6, 3),
+ (40, 5, 3), (33, 4, 1), (25, 4, 1), (20, 2, 1),
+ (11, 1, 0), (9, 1, 0), (8, 1, 1), (6, 2, 2),
+ (5, 5, 9), (6, 11, 19), (7, 18, 29), (7, 21, 37),
+ (8, 21, 37), (6, 19, 33), (6, 20, 34), (6, 21, 36),
+ (5, 22, 38), (5, 20, 35), (3, 15, 26), (2, 8, 14),
+ (7, 1, 2), (9, 0, 1), (12, 0, 1), (18, 0, 0),
+ (24, 1, 0), (30, 1, 0), (34, 1, 0), (36, 0, 0),
+ (39, 1, 0), (40, 1, 0), (42, 1, 0), (43, 1, 0),
+ (44, 0, 0), (46, 0, 0), (46, 0, 0), (48, 1, 1),
+ (55, 4, 2), (57, 5, 3), (59, 7, 4), (64, 12, 8),
+ (68, 22, 21), (77, 36, 39), (86, 52, 59), (102, 71, 77),
+ (122, 85, 85), (137, 101, 96), (159, 116, 111), (170, 135, 137),
+ (184, 156, 163), (200, 172, 179), (210, 185, 188), (225, 189, 189),
+ (228, 193, 196), (224, 194, 202), (217, 191, 202), (207, 187, 196),
+ (194, 169, 174), (180, 154, 154), (164, 133, 134), (145, 111, 111),
+ (133, 97, 92), (115, 74, 66), (98, 58, 44), (81, 49, 32),
+ (66, 43, 31), (64, 50, 45), (66, 59, 62), (73, 68, 77),
+ (79, 82, 90), (86, 96, 107), (98, 110, 125), (110, 128, 148),
+ (126, 143, 170), (136, 160, 189), (149, 174, 202), (162, 183, 211),
+ (171, 193, 219), (187, 199, 221), (191, 205, 229), (198, 211, 232),
+ (205, 213, 234), (205, 215, 236), (205, 213, 231), (197, 206, 227),
+ (186, 198, 217), (173, 186, 206), (158, 170, 192), (141, 153, 176),
+ (125, 132, 158), (110, 112, 137), (98, 94, 117), (85, 78, 96),
+ (77, 62, 76), (74, 46, 57), (73, 32, 40), (78, 22, 27),
+ (79, 20, 19), (81, 20, 16), (83, 21, 14), (91, 23, 12),
+ (105, 29, 16), (116, 38, 22), (122, 49, 33), (117, 51, 39),
+ (110, 47, 36), (109, 48, 36), (110, 46, 32), (113, 53, 38)
+ ),
+
+// 398 040221-41
+((26, 82, 100), (26, 68, 89), (22, 64, 84), (19, 60, 80),
+ (15, 58, 74), (12, 57, 68), (10, 57, 65), (9, 57, 62),
+ (16, 67, 66), (18, 64, 61), (20, 62, 56), (19, 57, 49),
+ (18, 52, 43), (16, 50, 39), (15, 49, 36), (15, 49, 35),
+ (15, 49, 35), (17, 49, 37), (16, 44, 34), (16, 40, 31),
+ (14, 32, 27), (12, 25, 23), (11, 23, 21), (10, 22, 19),
+ (11, 25, 19), (17, 33, 26), (24, 42, 34), (30, 51, 43),
+ (37, 61, 52), (38, 64, 57), (39, 67, 63), (41, 72, 73),
+ (39, 76, 82), (36, 84, 100), (37, 89, 108), (39, 94, 116),
+ (39, 97, 121), (40, 100, 127), (39, 100, 129), (39, 101, 132),
+ (31, 93, 127), (23, 83, 120), (16, 74, 114), (11, 64, 102),
+ (7, 55, 90), (6, 51, 84), (5, 47, 79), (3, 41, 71),
+ (3, 36, 61), (4, 32, 47), (4, 30, 40), (4, 29, 34),
+ (4, 30, 29), (5, 31, 24), (4, 32, 23), (4, 34, 22),
+ (3, 42, 22), (5, 47, 28), (8, 52, 34), (11, 59, 44),
+ (14, 66, 54), (16, 70, 61), (18, 75, 68), (24, 85, 79),
+ (32, 97, 89), (46, 121, 105), (53, 126, 111), (60, 131, 117),
+ (62, 132, 120), (65, 133, 123), (66, 131, 130), (66, 129, 137),
+ (65, 128, 152), (63, 127, 154), (61, 127, 156), (60, 126, 155),
+ (60, 126, 155), (57, 124, 155), (55, 122, 155), (48, 116, 154),
+ (41, 110, 152), (26, 94, 138), (19, 84, 128), (12, 74, 118),
+ (10, 71, 114), (9, 68, 110), (7, 64, 106), (6, 61, 103),
+ (4, 60, 107), (3, 60, 106), (2, 61, 106), (2, 60, 104),
+ (2, 59, 102), (1, 54, 93), (1, 50, 84), (0, 44, 74),
+ (0, 41, 69), (1, 37, 67), (1, 37, 68), (1, 37, 69),
+ (1, 36, 68), (1, 35, 67), (1, 35, 65), (1, 33, 62),
+ (2, 33, 61), (7, 37, 64), (12, 41, 67), (16, 45, 70),
+ (20, 49, 74), (29, 57, 80), (37, 66, 86), (44, 75, 91),
+ (47, 82, 95), (48, 91, 103), (47, 91, 104), (47, 91, 105),
+ (46, 90, 107), (47, 89, 105), (48, 87, 100), (51, 84, 94),
+ (48, 73, 72), (41, 64, 61), (35, 56, 50), (31, 50, 45),
+ (27, 45, 41), (19, 35, 33), (12, 27, 29), (8, 21, 28),
+ (3, 17, 29), (1, 17, 35), (1, 18, 35), (1, 19, 36),
+ (1, 18, 37), (1, 17, 35), (1, 17, 34), (2, 16, 33),
+ (2, 17, 34), (2, 18, 35), (3, 19, 36), (2, 18, 35),
+ (2, 18, 34), (2, 16, 31), (2, 17, 29), (2, 17, 29),
+ (2, 20, 32), (4, 28, 46), (5, 31, 51), (6, 35, 56),
+ (8, 42, 66), (12, 48, 75), (15, 56, 80), (20, 64, 84),
+ (26, 77, 94), (26, 79, 96), (27, 81, 99), (27, 81, 101),
+ (27, 80, 101), (27, 77, 100), (24, 71, 93), (25, 67, 85),
+ (27, 63, 75), (25, 55, 56), (24, 53, 53), (23, 52, 51),
+ (22, 51, 47), (24, 51, 49), (25, 53, 52), (29, 58, 57),
+ (45, 73, 69), (49, 76, 72), (53, 79, 75), (58, 86, 80),
+ (60, 91, 83), (60, 94, 85), (59, 94, 85), (57, 92, 85),
+ (58, 94, 85), (59, 95, 85), (60, 91, 82), (61, 87, 78),
+ (58, 80, 72), (52, 73, 63), (44, 64, 53), (33, 55, 44),
+ (15, 48, 32), (11, 48, 31), (8, 49, 30), (5, 50, 30),
+ (6, 56, 35), (11, 66, 43), (18, 75, 50), (24, 84, 58),
+ (30, 93, 67), (34, 101, 74), (39, 111, 83), (45, 120, 93),
+ (48, 127, 104), (55, 137, 117), (61, 142, 128), (69, 146, 137),
+ (74, 149, 147), (77, 147, 152), (79, 146, 157), (80, 144, 160),
+ (79, 140, 162), (79, 138, 166), (80, 137, 170), (83, 139, 175),
+ (87, 143, 182), (90, 146, 185), (92, 149, 186), (94, 150, 185),
+ (93, 150, 182), (88, 148, 180), (84, 144, 178), (79, 141, 177),
+ (75, 137, 177), (71, 133, 173), (67, 128, 167), (64, 121, 157),
+ (61, 112, 144), (55, 104, 130), (48, 94, 117), (42, 84, 105),
+ (35, 75, 100), (27, 69, 98), (20, 66, 102), (16, 64, 104),
+ (15, 63, 106), (16, 63, 106), (17, 63, 105), (19, 64, 103),
+ (24, 66, 104), (28, 70, 107), (31, 76, 117), (34, 84, 129),
+ (36, 92, 142), (38, 99, 153), (39, 104, 163), (37, 107, 165),
+ (37, 107, 160), (35, 106, 152), (33, 105, 143), (32, 105, 136),
+ (32, 105, 129), (33, 107, 125), (35, 108, 129), (37, 109, 133),
+ (39, 110, 133), (36, 103, 123), (31, 97, 115), (26, 92, 109),
+ (24, 88, 103), (21, 86, 95), (20, 83, 92), (21, 80, 92)
+ ),
+
+// 399 040221-42
+((147, 160, 181), (166, 171, 186), (170, 173, 187), (174, 176, 188),
+ (174, 175, 186), (174, 174, 185), (174, 171, 182), (174, 168, 179),
+ (159, 157, 169), (144, 151, 167), (129, 145, 166), (115, 138, 165),
+ (101, 132, 164), (87, 126, 162), (74, 121, 160), (67, 118, 160),
+ (61, 116, 161), (49, 108, 164), (48, 108, 165), (48, 108, 166),
+ (54, 111, 166), (60, 115, 167), (67, 119, 169), (75, 123, 172),
+ (109, 143, 185), (123, 155, 193), (138, 168, 201), (156, 180, 206),
+ (175, 193, 212), (184, 197, 213), (193, 201, 214), (197, 204, 213),
+ (197, 203, 210), (191, 193, 200), (180, 184, 190), (170, 175, 181),
+ (153, 163, 173), (136, 151, 165), (127, 145, 163), (119, 139, 161),
+ (89, 116, 146), (78, 107, 137), (68, 98, 128), (60, 91, 124),
+ (52, 84, 121), (50, 81, 118), (48, 78, 116), (46, 75, 109),
+ (47, 72, 103), (62, 82, 108), (71, 89, 113), (81, 97, 119),
+ (85, 101, 123), (90, 106, 128), (90, 107, 129), (91, 109, 130),
+ (87, 104, 126), (79, 98, 123), (71, 92, 120), (60, 85, 116),
+ (49, 79, 113), (45, 76, 112), (41, 74, 111), (36, 72, 113),
+ (33, 72, 119), (31, 74, 127), (31, 73, 125), (32, 73, 124),
+ (32, 73, 124), (33, 74, 125), (36, 76, 127), (37, 77, 127),
+ (39, 77, 124), (39, 78, 126), (39, 79, 128), (42, 83, 133),
+ (46, 88, 138), (48, 91, 142), (51, 94, 147), (53, 99, 156),
+ (55, 103, 164), (53, 103, 168), (53, 103, 168), (53, 103, 169),
+ (53, 103, 169), (53, 103, 170), (53, 103, 171), (53, 104, 170),
+ (55, 105, 167), (64, 109, 167), (74, 114, 167), (81, 119, 168),
+ (88, 124, 170), (105, 135, 175), (118, 145, 181), (130, 152, 183),
+ (143, 159, 185), (161, 169, 185), (160, 166, 179), (159, 164, 174),
+ (155, 159, 169), (152, 154, 164), (140, 144, 156), (128, 134, 149),
+ (109, 120, 135), (102, 113, 129), (95, 107, 123), (92, 106, 124),
+ (90, 105, 125), (86, 105, 130), (81, 106, 138), (73, 109, 144),
+ (65, 109, 145), (50, 100, 140), (47, 96, 137), (44, 92, 135),
+ (38, 87, 133), (32, 86, 132), (29, 89, 136), (29, 89, 138),
+ (39, 85, 134), (50, 90, 133), (62, 95, 133), (69, 98, 134),
+ (77, 102, 136), (82, 106, 139), (84, 106, 140), (83, 105, 137),
+ (84, 104, 132), (92, 101, 121), (91, 100, 120), (90, 99, 120),
+ (86, 99, 121), (83, 100, 125), (86, 101, 125), (92, 104, 127),
+ (103, 113, 132), (110, 118, 135), (117, 124, 139), (120, 126, 140),
+ (124, 128, 141), (131, 133, 143), (137, 139, 148), (141, 142, 153),
+ (143, 147, 156), (150, 153, 163), (152, 156, 165), (154, 159, 168),
+ (159, 163, 174), (164, 168, 179), (168, 173, 183), (173, 176, 185),
+ (175, 179, 189), (174, 179, 188), (174, 179, 187), (172, 177, 185),
+ (173, 177, 181), (174, 177, 181), (175, 176, 182), (175, 178, 181),
+ (175, 180, 183), (188, 193, 195), (192, 196, 199), (196, 200, 204),
+ (201, 207, 213), (203, 210, 219), (202, 211, 221), (200, 209, 220),
+ (182, 195, 211), (174, 188, 207), (167, 182, 203), (145, 163, 193),
+ (123, 144, 180), (102, 125, 165), (82, 110, 152), (69, 101, 142),
+ (59, 94, 141), (49, 90, 142), (44, 86, 144), (40, 85, 145),
+ (39, 87, 145), (43, 92, 149), (47, 98, 154), (51, 102, 159),
+ (57, 104, 162), (60, 105, 161), (64, 107, 161), (73, 112, 164),
+ (85, 120, 166), (97, 130, 173), (110, 140, 182), (125, 151, 187),
+ (141, 161, 193), (157, 171, 196), (171, 180, 198), (180, 186, 205),
+ (187, 191, 206), (191, 191, 205), (190, 188, 200), (184, 182, 190),
+ (175, 174, 182), (159, 162, 176), (144, 148, 167), (126, 132, 159),
+ (108, 120, 150), (94, 114, 145), (80, 109, 145), (69, 105, 146),
+ (61, 97, 144), (55, 86, 135), (51, 82, 124), (50, 81, 118),
+ (53, 83, 119), (56, 86, 122), (61, 85, 121), (64, 85, 117),
+ (68, 85, 112), (75, 87, 111), (79, 92, 114), (85, 96, 119),
+ (89, 102, 124), (94, 108, 129), (102, 114, 131), (109, 119, 134),
+ (116, 123, 136), (121, 128, 139), (125, 133, 144), (129, 138, 147),
+ (134, 142, 151), (136, 143, 152), (135, 143, 152), (129, 140, 152),
+ (119, 134, 151), (109, 127, 146), (97, 117, 138), (85, 106, 129),
+ (75, 96, 120), (63, 87, 113), (58, 78, 105), (56, 73, 99),
+ (52, 70, 96), (54, 70, 99), (53, 74, 107), (55, 78, 116),
+ (63, 84, 123), (65, 89, 128), (68, 94, 136), (67, 98, 145),
+ (67, 102, 152), (74, 108, 157), (81, 114, 160), (91, 121, 164),
+ (103, 129, 166), (113, 136, 170), (124, 144, 172), (136, 153, 176)
+ ),
+
+// 400 040221-43
+((53, 75, 76), (58, 80, 82), (57, 80, 80), (57, 81, 79),
+ (53, 78, 77), (50, 75, 76), (48, 74, 76), (46, 73, 77),
+ (41, 71, 80), (39, 67, 77), (37, 64, 74), (35, 60, 70),
+ (34, 56, 66), (35, 53, 62), (37, 51, 58), (38, 51, 57),
+ (40, 51, 56), (48, 54, 57), (51, 56, 58), (55, 59, 60),
+ (56, 59, 59), (57, 59, 59), (57, 59, 59), (57, 59, 59),
+ (60, 60, 56), (66, 64, 59), (72, 68, 62), (79, 73, 67),
+ (86, 79, 72), (88, 80, 73), (90, 81, 75), (91, 82, 76),
+ (89, 80, 74), (88, 76, 69), (89, 76, 67), (91, 76, 66),
+ (92, 75, 65), (93, 74, 64), (92, 73, 63), (91, 72, 62),
+ (84, 63, 56), (78, 59, 52), (72, 56, 49), (70, 57, 49),
+ (68, 58, 50), (66, 59, 51), (65, 60, 52), (63, 61, 57),
+ (61, 62, 59), (57, 60, 60), (56, 59, 58), (56, 59, 56),
+ (55, 58, 55), (55, 58, 54), (54, 58, 54), (54, 58, 54),
+ (49, 53, 51), (46, 49, 49), (43, 46, 47), (42, 43, 44),
+ (41, 41, 42), (42, 41, 42), (43, 42, 42), (44, 43, 43),
+ (47, 47, 46), (47, 60, 64), (47, 68, 74), (48, 76, 84),
+ (49, 80, 89), (50, 84, 95), (55, 96, 108), (61, 104, 115),
+ (72, 113, 121), (73, 116, 124), (74, 119, 128), (73, 121, 131),
+ (72, 123, 134), (71, 122, 133), (71, 121, 133), (72, 117, 129),
+ (72, 113, 120), (71, 101, 102), (70, 93, 90), (70, 85, 79),
+ (70, 82, 75), (70, 79, 71), (68, 71, 65), (66, 67, 59),
+ (65, 60, 48), (69, 59, 45), (73, 59, 43), (75, 60, 44),
+ (78, 62, 45), (82, 64, 47), (83, 66, 52), (82, 67, 56),
+ (78, 68, 59), (72, 67, 60), (69, 66, 62), (66, 66, 64),
+ (65, 66, 65), (64, 67, 67), (61, 67, 71), (57, 67, 73),
+ (48, 63, 72), (41, 58, 67), (35, 54, 63), (32, 51, 60),
+ (30, 48, 57), (25, 42, 53), (23, 40, 51), (23, 40, 51),
+ (27, 42, 53), (37, 55, 60), (40, 58, 62), (43, 61, 65),
+ (48, 68, 70), (52, 72, 73), (56, 76, 75), (63, 78, 76),
+ (83, 86, 78), (92, 91, 80), (102, 97, 83), (105, 98, 83),
+ (108, 99, 84), (112, 103, 86), (114, 105, 87), (118, 107, 86),
+ (123, 107, 87), (142, 117, 93), (144, 119, 95), (147, 122, 98),
+ (152, 127, 104), (153, 130, 110), (152, 133, 112), (148, 134, 116),
+ (157, 143, 126), (159, 145, 128), (161, 148, 131), (161, 146, 129),
+ (161, 145, 127), (157, 139, 119), (148, 130, 110), (140, 121, 102),
+ (133, 114, 96), (122, 106, 91), (120, 105, 90), (119, 104, 89),
+ (114, 99, 83), (108, 91, 75), (101, 85, 69), (92, 79, 64),
+ (77, 72, 64), (74, 71, 65), (71, 70, 67), (66, 69, 70),
+ (61, 66, 70), (57, 64, 69), (53, 61, 66), (50, 57, 63),
+ (47, 54, 59), (42, 51, 56), (41, 50, 56), (40, 49, 57),
+ (39, 49, 58), (39, 49, 59), (40, 52, 60), (42, 55, 61),
+ (46, 62, 65), (46, 63, 66), (47, 64, 67), (46, 65, 68),
+ (44, 63, 69), (41, 63, 69), (40, 63, 69), (39, 63, 70),
+ (39, 63, 69), (40, 64, 68), (43, 64, 66), (44, 62, 63),
+ (45, 58, 58), (45, 54, 52), (47, 51, 47), (48, 49, 43),
+ (54, 49, 41), (55, 49, 41), (57, 50, 41), (60, 51, 42),
+ (64, 54, 43), (68, 56, 44), (70, 57, 44), (72, 59, 46),
+ (73, 60, 46), (74, 59, 46), (72, 59, 49), (70, 61, 52),
+ (68, 63, 57), (66, 66, 62), (66, 70, 69), (68, 77, 77),
+ (73, 84, 82), (79, 91, 88), (85, 97, 94), (90, 101, 98),
+ (90, 104, 101), (89, 103, 103), (88, 103, 104), (86, 103, 104),
+ (86, 104, 103), (88, 104, 101), (90, 103, 99), (88, 101, 94),
+ (83, 95, 90), (77, 90, 86), (71, 85, 84), (63, 82, 82),
+ (57, 79, 81), (52, 76, 80), (48, 75, 77), (45, 71, 75),
+ (40, 67, 73), (39, 65, 73), (37, 65, 72), (36, 64, 71),
+ (34, 62, 72), (33, 62, 70), (33, 59, 65), (32, 54, 58),
+ (33, 48, 51), (35, 44, 44), (39, 40, 37), (41, 37, 33),
+ (43, 37, 32), (46, 39, 31), (46, 39, 31), (48, 39, 31),
+ (50, 40, 31), (52, 39, 28), (54, 37, 25), (53, 35, 24),
+ (53, 34, 24), (51, 34, 25), (48, 34, 27), (44, 35, 30),
+ (40, 35, 33), (37, 36, 33), (33, 34, 34), (32, 34, 36),
+ (33, 36, 38), (39, 41, 42), (43, 46, 46), (46, 50, 50),
+ (48, 57, 54), (50, 62, 59), (50, 65, 65), (50, 69, 69)
+ ),
+
+// 401 040221-44
+((56, 32, 15), (81, 40, 17), (91, 41, 20), (101, 43, 23),
+ (104, 42, 23), (108, 42, 23), (105, 40, 20), (102, 39, 17),
+ (86, 28, 13), (81, 26, 12), (77, 24, 11), (75, 24, 10),
+ (73, 25, 9), (78, 26, 9), (83, 28, 9), (87, 29, 9),
+ (91, 30, 10), (102, 31, 13), (102, 28, 11), (103, 26, 9),
+ (100, 22, 7), (98, 18, 6), (94, 16, 5), (90, 15, 5),
+ (68, 12, 5), (62, 13, 7), (57, 14, 10), (55, 17, 14),
+ (54, 21, 19), (54, 23, 19), (55, 26, 20), (61, 30, 25),
+ (72, 37, 25), (104, 54, 39), (115, 64, 44), (127, 74, 49),
+ (137, 76, 47), (147, 79, 46), (150, 76, 43), (154, 74, 41),
+ (152, 75, 41), (141, 69, 39), (130, 64, 38), (116, 51, 29),
+ (103, 39, 21), (95, 34, 18), (88, 30, 15), (76, 22, 12),
+ (69, 22, 13), (54, 30, 11), (45, 29, 9), (36, 28, 7),
+ (33, 27, 6), (31, 27, 5), (31, 28, 5), (32, 29, 6),
+ (27, 26, 5), (26, 20, 4), (25, 14, 4), (32, 13, 4),
+ (40, 13, 5), (48, 14, 5), (56, 15, 6), (72, 22, 5),
+ (89, 31, 7), (123, 46, 20), (143, 62, 34), (163, 79, 48),
+ (173, 91, 59), (184, 104, 71), (196, 130, 86), (212, 145, 94),
+ (215, 145, 86), (210, 144, 93), (206, 144, 101), (194, 130, 87),
+ (183, 116, 73), (176, 107, 61), (169, 99, 49), (153, 77, 34),
+ (142, 62, 30), (139, 47, 26), (142, 58, 37), (146, 69, 48),
+ (151, 79, 56), (156, 90, 64), (171, 106, 77), (183, 116, 80),
+ (200, 121, 85), (199, 123, 87), (198, 126, 90), (194, 122, 84),
+ (191, 118, 78), (188, 108, 65), (183, 88, 52), (178, 74, 38),
+ (172, 65, 32), (156, 55, 19), (156, 53, 17), (156, 52, 16),
+ (156, 51, 15), (156, 51, 14), (159, 52, 13), (153, 52, 11),
+ (141, 48, 6), (136, 43, 4), (132, 38, 2), (129, 35, 1),
+ (126, 32, 1), (121, 29, 1), (116, 27, 1), (111, 26, 1),
+ (107, 25, 1), (93, 22, 3), (89, 21, 3), (86, 21, 4),
+ (80, 21, 7), (74, 19, 7), (71, 17, 8), (67, 16, 9),
+ (67, 16, 10), (72, 16, 9), (78, 16, 9), (82, 17, 9),
+ (86, 18, 10), (95, 22, 9), (105, 26, 10), (114, 31, 13),
+ (124, 33, 14), (133, 35, 14), (131, 34, 13), (130, 34, 12),
+ (126, 35, 12), (119, 33, 13), (112, 32, 12), (105, 30, 11),
+ (90, 24, 3), (86, 22, 2), (83, 20, 2), (82, 19, 3),
+ (81, 19, 5), (82, 15, 5), (81, 13, 4), (80, 12, 5),
+ (79, 12, 4), (76, 7, 6), (75, 5, 5), (74, 4, 4),
+ (67, 2, 3), (58, 4, 3), (48, 5, 3), (39, 4, 3),
+ (28, 2, 1), (25, 2, 0), (23, 2, 0), (19, 3, 1),
+ (17, 4, 1), (17, 3, 1), (19, 4, 1), (22, 4, 0),
+ (23, 6, 1), (24, 8, 3), (24, 8, 3), (25, 9, 4),
+ (26, 9, 4), (25, 9, 4), (21, 10, 4), (18, 10, 4),
+ (12, 10, 4), (11, 9, 4), (11, 9, 4), (10, 9, 4),
+ (9, 9, 3), (9, 10, 3), (10, 12, 6), (13, 17, 12),
+ (13, 25, 17), (21, 33, 22), (31, 39, 26), (46, 44, 29),
+ (67, 48, 34), (79, 56, 39), (98, 68, 44), (113, 80, 45),
+ (150, 89, 38), (155, 88, 36), (160, 88, 35), (170, 89, 36),
+ (175, 94, 33), (172, 98, 33), (171, 96, 31), (164, 90, 25),
+ (157, 78, 26), (151, 69, 25), (140, 64, 23), (132, 57, 24),
+ (123, 53, 25), (110, 42, 31), (98, 32, 32), (83, 23, 28),
+ (68, 16, 23), (57, 15, 17), (46, 14, 20), (36, 12, 19),
+ (27, 9, 18), (18, 5, 13), (14, 4, 7), (12, 7, 6),
+ (15, 9, 9), (21, 13, 11), (32, 15, 13), (49, 16, 17),
+ (67, 19, 21), (83, 23, 27), (96, 28, 31), (105, 34, 30),
+ (115, 36, 30), (127, 36, 29), (132, 35, 26), (130, 34, 24),
+ (123, 33, 19), (110, 32, 16), (99, 28, 13), (85, 23, 10),
+ (70, 17, 6), (57, 13, 3), (45, 9, 2), (35, 7, 2),
+ (26, 5, 2), (18, 4, 2), (11, 3, 1), (6, 2, 0),
+ (4, 2, 0), (3, 1, 0), (2, 1, 0), (2, 1, 0),
+ (1, 0, 0), (0, 0, 1), (0, 0, 0), (1, 0, 0),
+ (1, 0, 0), (3, 0, 1), (4, 0, 1), (5, 0, 1),
+ (5, 0, 1), (5, 0, 0), (5, 1, 1), (6, 1, 0),
+ (6, 2, 0), (5, 2, 0), (5, 3, 0), (5, 5, 1),
+ (8, 7, 1), (17, 11, 2), (28, 17, 8), (42, 24, 11)
+ ),
+
+// 402 040221-45
+((78, 97, 108), (74, 87, 90), (61, 74, 76), (48, 61, 63),
+ (52, 67, 70), (57, 73, 77), (64, 81, 85), (71, 89, 94),
+ (92, 120, 129), (95, 133, 148), (98, 146, 167), (95, 151, 175),
+ (93, 157, 183), (85, 158, 182), (78, 160, 182), (71, 157, 180),
+ (65, 155, 178), (44, 144, 172), (42, 141, 166), (41, 138, 161),
+ (41, 128, 151), (41, 118, 142), (39, 111, 136), (38, 104, 130),
+ (35, 73, 106), (36, 61, 93), (37, 49, 80), (32, 38, 72),
+ (28, 27, 65), (24, 23, 63), (20, 19, 61), (15, 14, 53),
+ (13, 10, 48), (12, 11, 49), (11, 15, 54), (11, 20, 59),
+ (13, 27, 62), (16, 35, 66), (19, 40, 69), (22, 46, 73),
+ (30, 67, 99), (33, 73, 104), (36, 79, 109), (34, 78, 106),
+ (33, 78, 103), (32, 75, 101), (31, 72, 100), (28, 66, 91),
+ (24, 57, 83), (11, 42, 66), (9, 37, 64), (8, 32, 63),
+ (9, 30, 58), (10, 28, 53), (8, 27, 51), (7, 27, 49),
+ (11, 30, 53), (14, 30, 49), (17, 30, 45), (18, 29, 42),
+ (19, 29, 40), (19, 32, 43), (19, 36, 47), (21, 45, 58),
+ (21, 55, 69), (25, 78, 99), (28, 93, 118), (32, 108, 138),
+ (36, 115, 145), (40, 122, 153), (51, 136, 168), (65, 147, 176),
+ (86, 161, 188), (95, 161, 189), (105, 162, 190), (110, 160, 187),
+ (116, 159, 184), (113, 157, 182), (111, 155, 181), (102, 148, 177),
+ (90, 142, 173), (66, 134, 165), (55, 132, 161), (44, 130, 158),
+ (39, 129, 159), (34, 129, 160), (28, 131, 162), (24, 135, 164),
+ (28, 138, 170), (35, 139, 171), (42, 140, 173), (46, 141, 174),
+ (50, 142, 175), (55, 148, 178), (59, 153, 187), (65, 157, 191),
+ (73, 156, 191), (90, 149, 184), (91, 152, 184), (92, 156, 184),
+ (92, 157, 182), (92, 159, 180), (90, 156, 175), (90, 145, 164),
+ (83, 119, 139), (73, 109, 121), (63, 100, 103), (56, 95, 99),
+ (50, 91, 95), (46, 79, 91), (42, 70, 94), (37, 68, 94),
+ (32, 67, 94), (21, 80, 107), (22, 84, 114), (23, 89, 122),
+ (24, 100, 136), (25, 110, 148), (23, 120, 156), (22, 127, 159),
+ (24, 125, 156), (24, 120, 153), (25, 115, 151), (26, 113, 149),
+ (27, 111, 148), (29, 105, 146), (30, 103, 144), (31, 104, 144),
+ (30, 107, 147), (31, 113, 152), (32, 113, 151), (33, 114, 151),
+ (35, 117, 149), (35, 118, 143), (35, 118, 139), (29, 115, 135),
+ (22, 106, 129), (23, 103, 126), (25, 100, 123), (24, 100, 123),
+ (23, 101, 124), (18, 100, 125), (13, 104, 132), (11, 108, 136),
+ (11, 112, 141), (13, 114, 148), (14, 112, 147), (15, 111, 146),
+ (18, 104, 141), (22, 99, 135), (25, 95, 130), (29, 94, 130),
+ (46, 93, 130), (50, 94, 130), (54, 96, 131), (60, 99, 131),
+ (63, 106, 135), (62, 112, 140), (63, 117, 146), (65, 124, 149),
+ (72, 132, 154), (88, 144, 165), (91, 146, 169), (94, 148, 174),
+ (101, 151, 178), (113, 158, 183), (122, 162, 188), (132, 164, 191),
+ (136, 164, 191), (135, 162, 189), (134, 160, 187), (127, 152, 178),
+ (118, 142, 173), (107, 135, 167), (99, 128, 160), (94, 125, 158),
+ (92, 121, 152), (87, 116, 148), (82, 115, 146), (79, 110, 143),
+ (74, 108, 140), (71, 101, 133), (66, 88, 120), (57, 78, 103),
+ (39, 54, 72), (34, 48, 64), (29, 43, 57), (21, 28, 42),
+ (13, 15, 31), (9, 7, 29), (9, 9, 34), (10, 16, 44),
+ (15, 25, 53), (20, 36, 65), (24, 45, 83), (27, 61, 102),
+ (29, 76, 122), (30, 91, 136), (35, 103, 143), (41, 111, 150),
+ (48, 119, 156), (56, 128, 163), (65, 138, 169), (74, 145, 174),
+ (85, 153, 179), (98, 157, 185), (111, 163, 190), (125, 170, 194),
+ (139, 176, 198), (149, 185, 203), (157, 188, 207), (163, 194, 213),
+ (166, 197, 216), (170, 202, 220), (170, 207, 224), (170, 206, 224),
+ (173, 208, 225), (173, 205, 223), (173, 204, 221), (169, 203, 221),
+ (160, 198, 217), (153, 192, 210), (143, 179, 195), (130, 161, 176),
+ (116, 142, 154), (101, 121, 132), (88, 103, 111), (76, 86, 89),
+ (59, 67, 71), (42, 52, 56), (28, 39, 49), (25, 35, 50),
+ (26, 37, 53), (32, 43, 62), (40, 53, 73), (43, 66, 89),
+ (51, 81, 110), (60, 93, 126), (72, 107, 141), (87, 120, 152),
+ (99, 132, 160), (109, 145, 171), (117, 152, 177), (122, 158, 182),
+ (124, 162, 183), (126, 163, 183), (124, 165, 185), (123, 167, 189),
+ (125, 169, 194), (128, 172, 196), (130, 175, 197), (134, 179, 200),
+ (135, 181, 201), (116, 157, 179), (101, 135, 156), (86, 111, 129)
+ ),
+
+// 403 040221-46
+((76, 81, 83), (85, 89, 95), (92, 97, 106), (100, 105, 118),
+ (110, 114, 129), (120, 124, 140), (124, 128, 146), (129, 133, 153),
+ (136, 140, 165), (133, 137, 163), (131, 135, 161), (125, 129, 157),
+ (119, 124, 153), (112, 113, 141), (105, 103, 130), (100, 98, 123),
+ (96, 93, 117), (79, 80, 105), (82, 80, 97), (85, 81, 89),
+ (88, 82, 86), (92, 84, 84), (92, 86, 86), (93, 88, 88),
+ (109, 101, 93), (115, 106, 96), (122, 112, 99), (124, 114, 101),
+ (127, 116, 103), (127, 116, 104), (128, 117, 106), (128, 119, 112),
+ (126, 120, 119), (120, 119, 126), (116, 117, 127), (112, 116, 129),
+ (106, 112, 130), (100, 108, 132), (96, 104, 132), (93, 101, 132),
+ (79, 87, 130), (72, 80, 127), (65, 74, 124), (58, 67, 120),
+ (51, 60, 116), (49, 58, 114), (48, 56, 113), (48, 56, 111),
+ (49, 56, 112), (50, 59, 112), (53, 62, 115), (57, 66, 119),
+ (61, 71, 123), (66, 76, 128), (68, 78, 129), (70, 81, 130),
+ (87, 93, 133), (101, 100, 136), (115, 108, 139), (123, 113, 137),
+ (132, 118, 135), (133, 118, 131), (134, 118, 127), (135, 115, 124),
+ (134, 112, 120), (124, 103, 118), (108, 94, 114), (92, 85, 111),
+ (83, 79, 108), (75, 73, 105), (59, 63, 99), (49, 54, 96),
+ (38, 49, 96), (38, 49, 95), (39, 50, 95), (43, 52, 94),
+ (47, 55, 94), (48, 56, 94), (50, 58, 94), (54, 63, 94),
+ (56, 65, 91), (59, 66, 86), (58, 65, 85), (58, 65, 85),
+ (58, 65, 84), (59, 66, 83), (56, 64, 82), (56, 63, 81),
+ (56, 64, 91), (59, 68, 98), (62, 72, 105), (63, 72, 107),
+ (65, 73, 109), (64, 75, 115), (63, 73, 120), (61, 71, 122),
+ (58, 69, 124), (55, 66, 122), (53, 64, 119), (52, 62, 116),
+ (52, 62, 115), (52, 62, 114), (57, 64, 113), (63, 70, 114),
+ (91, 89, 119), (108, 100, 125), (125, 111, 131), (130, 115, 134),
+ (135, 119, 138), (143, 129, 142), (149, 135, 145), (155, 141, 148),
+ (160, 144, 149), (153, 142, 157), (150, 142, 159), (147, 142, 162),
+ (138, 142, 172), (135, 143, 177), (132, 141, 179), (128, 138, 178),
+ (122, 134, 175), (121, 132, 169), (120, 131, 164), (118, 127, 159),
+ (116, 124, 155), (119, 115, 143), (117, 109, 136), (119, 107, 130),
+ (126, 114, 130), (146, 135, 149), (151, 140, 157), (156, 146, 165),
+ (163, 157, 176), (174, 167, 181), (182, 182, 183), (195, 189, 185),
+ (203, 203, 200), (201, 199, 197), (199, 196, 194), (197, 190, 188),
+ (195, 185, 182), (189, 175, 176), (177, 167, 171), (163, 155, 165),
+ (150, 144, 162), (122, 123, 147), (115, 118, 143), (108, 113, 140),
+ (96, 105, 134), (88, 96, 131), (82, 92, 129), (80, 90, 129),
+ (87, 96, 136), (92, 100, 141), (98, 105, 146), (112, 118, 158),
+ (132, 136, 170), (150, 155, 181), (169, 172, 193), (187, 190, 204),
+ (203, 203, 218), (231, 229, 231), (233, 231, 231), (236, 233, 231),
+ (233, 231, 223), (222, 219, 218), (204, 204, 209), (190, 189, 197),
+ (161, 160, 166), (155, 153, 159), (149, 147, 152), (137, 136, 145),
+ (130, 131, 142), (128, 131, 146), (128, 131, 145), (130, 133, 145),
+ (134, 136, 148), (135, 138, 155), (137, 143, 167), (135, 144, 176),
+ (130, 140, 177), (124, 134, 174), (115, 125, 168), (110, 120, 164),
+ (109, 117, 161), (111, 118, 158), (113, 119, 156), (119, 120, 148),
+ (128, 120, 141), (137, 125, 138), (149, 131, 139), (158, 136, 141),
+ (169, 144, 144), (180, 149, 145), (192, 156, 150), (204, 170, 157),
+ (212, 178, 168), (218, 190, 182), (223, 201, 193), (228, 208, 201),
+ (234, 223, 207), (241, 232, 214), (245, 240, 225), (240, 243, 237),
+ (233, 240, 243), (220, 231, 239), (204, 216, 228), (193, 202, 213),
+ (173, 182, 201), (153, 165, 192), (130, 143, 179), (106, 119, 162),
+ (89, 99, 138), (73, 81, 117), (63, 70, 99), (58, 66, 88),
+ (54, 62, 84), (54, 61, 79), (54, 61, 79), (56, 62, 80),
+ (62, 68, 84), (66, 74, 89), (73, 80, 93), (78, 85, 99),
+ (81, 88, 106), (84, 89, 112), (83, 89, 118), (83, 89, 122),
+ (84, 89, 124), (88, 94, 127), (92, 97, 130), (95, 100, 133),
+ (94, 99, 136), (87, 93, 136), (83, 89, 134), (79, 86, 132),
+ (75, 82, 129), (70, 78, 125), (62, 71, 119), (54, 62, 114),
+ (47, 55, 111), (44, 51, 109), (42, 49, 112), (42, 51, 112),
+ (45, 54, 113), (49, 57, 116), (54, 61, 117), (59, 66, 119),
+ (65, 73, 118), (71, 78, 115), (74, 80, 109), (74, 78, 100),
+ (74, 77, 94), (73, 76, 88), (72, 77, 85), (74, 80, 85)
+ ),
+
+// 404 040221-47
+((141, 128, 93), (130, 114, 87), (117, 102, 81), (105, 91, 76),
+ (89, 83, 74), (74, 75, 73), (75, 75, 74), (76, 75, 75),
+ (78, 78, 76), (77, 75, 72), (77, 72, 68), (73, 65, 61),
+ (70, 59, 55), (68, 56, 53), (67, 53, 51), (67, 53, 50),
+ (68, 54, 50), (76, 60, 51), (85, 62, 50), (95, 65, 49),
+ (101, 65, 49), (108, 66, 49), (107, 67, 49), (107, 68, 49),
+ (98, 69, 52), (90, 67, 52), (82, 66, 53), (73, 62, 52),
+ (65, 59, 52), (59, 56, 51), (53, 54, 51), (40, 49, 51),
+ (26, 44, 50), (5, 40, 51), (2, 39, 50), (0, 38, 50),
+ (0, 37, 50), (0, 36, 50), (0, 35, 49), (0, 35, 49),
+ (0, 35, 49), (0, 35, 49), (0, 35, 50), (0, 35, 50),
+ (0, 36, 50), (0, 36, 50), (0, 36, 51), (0, 36, 51),
+ (0, 37, 52), (1, 38, 53), (8, 42, 55), (16, 47, 57),
+ (33, 58, 63), (50, 70, 69), (60, 78, 73), (71, 86, 78),
+ (107, 114, 89), (119, 121, 92), (132, 129, 95), (142, 130, 92),
+ (152, 132, 89), (158, 133, 90), (164, 135, 91), (171, 137, 91),
+ (177, 138, 89), (175, 133, 84), (166, 121, 73), (158, 109, 63),
+ (153, 101, 59), (149, 94, 56), (139, 82, 50), (130, 71, 45),
+ (121, 62, 41), (119, 61, 39), (118, 60, 38), (111, 58, 38),
+ (104, 57, 39), (99, 55, 39), (94, 54, 40), (85, 53, 41),
+ (76, 52, 45), (63, 50, 46), (54, 48, 46), (46, 47, 47),
+ (41, 46, 47), (36, 45, 48), (24, 43, 47), (14, 40, 48),
+ (1, 35, 48), (0, 34, 48), (0, 34, 48), (0, 33, 48),
+ (0, 33, 48), (0, 34, 48), (0, 34, 48), (0, 35, 48),
+ (0, 36, 48), (1, 37, 49), (1, 37, 49), (1, 37, 50),
+ (1, 37, 50), (1, 37, 51), (1, 38, 51), (1, 39, 52),
+ (2, 41, 52), (3, 40, 52), (4, 40, 53), (6, 39, 52),
+ (8, 39, 52), (13, 39, 51), (20, 39, 50), (27, 41, 48),
+ (35, 44, 45), (47, 47, 44), (50, 47, 43), (53, 48, 43),
+ (58, 51, 43), (65, 54, 47), (75, 59, 49), (91, 69, 52),
+ (126, 95, 67), (138, 105, 71), (151, 116, 76), (153, 118, 78),
+ (155, 121, 80), (151, 120, 83), (144, 117, 83), (137, 117, 81),
+ (131, 114, 84), (121, 112, 85), (118, 111, 84), (116, 111, 84),
+ (105, 103, 82), (88, 92, 77), (71, 78, 67), (53, 63, 58),
+ (25, 39, 44), (23, 35, 39), (22, 31, 35), (22, 30, 34),
+ (23, 30, 34), (23, 29, 34), (23, 27, 33), (23, 24, 33),
+ (20, 23, 32), (22, 23, 29), (22, 23, 28), (23, 23, 28),
+ (22, 25, 31), (20, 26, 33), (17, 26, 37), (11, 26, 41),
+ (3, 27, 47), (2, 27, 47), (1, 28, 48), (1, 28, 48),
+ (1, 27, 46), (2, 26, 43), (3, 25, 39), (4, 24, 37),
+ (6, 24, 34), (5, 26, 36), (4, 26, 36), (4, 26, 37),
+ (6, 25, 37), (7, 25, 34), (13, 25, 31), (22, 27, 27),
+ (38, 33, 27), (41, 34, 28), (44, 36, 29), (49, 37, 32),
+ (47, 39, 36), (44, 39, 38), (43, 40, 38), (42, 40, 39),
+ (43, 41, 40), (44, 42, 40), (46, 42, 40), (43, 41, 43),
+ (36, 40, 45), (28, 39, 47), (19, 37, 49), (11, 36, 51),
+ (1, 34, 52), (1, 34, 52), (1, 34, 52), (1, 34, 51),
+ (1, 34, 51), (0, 35, 51), (0, 35, 51), (0, 36, 51),
+ (0, 37, 51), (0, 37, 50), (0, 38, 50), (0, 39, 50),
+ (0, 40, 49), (0, 41, 49), (0, 41, 49), (0, 41, 48),
+ (0, 41, 49), (0, 41, 49), (0, 41, 49), (0, 41, 49),
+ (0, 41, 49), (0, 41, 49), (0, 41, 49), (0, 40, 49),
+ (0, 40, 49), (0, 40, 49), (0, 40, 49), (0, 40, 50),
+ (0, 39, 50), (0, 39, 50), (0, 39, 50), (0, 39, 49),
+ (0, 39, 49), (0, 39, 49), (0, 38, 48), (0, 38, 48),
+ (0, 37, 48), (1, 36, 49), (4, 34, 47), (9, 34, 45),
+ (16, 35, 43), (25, 38, 42), (36, 44, 43), (52, 56, 46),
+ (68, 69, 52), (84, 80, 57), (100, 91, 61), (113, 97, 62),
+ (123, 100, 63), (126, 101, 65), (130, 104, 66), (131, 107, 68),
+ (127, 110, 72), (122, 113, 76), (117, 112, 76), (111, 106, 73),
+ (104, 98, 71), (98, 89, 68), (97, 84, 64), (95, 82, 63),
+ (98, 86, 66), (105, 94, 70), (110, 101, 72), (119, 106, 74),
+ (128, 110, 75), (135, 110, 72), (133, 107, 69), (132, 106, 68),
+ (131, 108, 70), (130, 113, 74), (129, 118, 81), (131, 125, 91)
+ ),
+
+// 405 040221-48
+((100, 70, 92), (101, 71, 93), (107, 78, 100), (114, 85, 108),
+ (118, 89, 112), (122, 94, 116), (123, 96, 117), (124, 98, 118),
+ (124, 99, 119), (125, 100, 120), (127, 102, 121), (126, 103, 124),
+ (126, 105, 127), (130, 110, 131), (135, 115, 135), (136, 118, 137),
+ (138, 121, 139), (139, 130, 137), (133, 129, 132), (127, 129, 128),
+ (118, 121, 119), (109, 114, 110), (104, 108, 106), (99, 103, 102),
+ (87, 78, 84), (83, 67, 77), (79, 57, 71), (74, 52, 65),
+ (70, 47, 60), (68, 45, 57), (66, 43, 55), (62, 44, 54),
+ (60, 44, 52), (50, 40, 45), (43, 36, 38), (37, 33, 32),
+ (29, 27, 26), (22, 22, 21), (20, 20, 19), (18, 19, 18),
+ (22, 21, 22), (28, 27, 30), (34, 33, 38), (41, 38, 43),
+ (48, 43, 48), (50, 45, 51), (53, 48, 54), (55, 49, 53),
+ (55, 48, 49), (47, 45, 45), (44, 42, 42), (41, 40, 39),
+ (42, 40, 40), (43, 40, 41), (47, 43, 45), (51, 46, 49),
+ (79, 69, 71), (91, 82, 82), (103, 96, 93), (108, 101, 96),
+ (114, 107, 99), (112, 104, 98), (111, 101, 98), (105, 91, 94),
+ (96, 81, 86), (82, 62, 75), (79, 59, 74), (77, 56, 73),
+ (79, 56, 75), (82, 57, 77), (90, 62, 85), (97, 69, 95),
+ (109, 85, 110), (109, 87, 110), (109, 89, 111), (104, 87, 105),
+ (100, 86, 99), (96, 84, 93), (92, 82, 88), (87, 78, 82),
+ (84, 76, 78), (85, 70, 75), (89, 70, 82), (94, 71, 90),
+ (97, 73, 93), (101, 76, 96), (111, 84, 107), (120, 95, 116),
+ (135, 113, 136), (145, 124, 144), (156, 136, 153), (158, 138, 157),
+ (161, 140, 161), (166, 145, 166), (176, 155, 175), (183, 161, 182),
+ (180, 158, 179), (179, 160, 179), (172, 156, 170), (165, 152, 161),
+ (162, 149, 156), (160, 147, 152), (152, 140, 146), (149, 138, 146),
+ (154, 136, 149), (155, 134, 152), (156, 133, 156), (158, 133, 157),
+ (160, 133, 158), (157, 128, 157), (152, 124, 149), (149, 121, 140),
+ (143, 117, 133), (130, 114, 119), (124, 111, 114), (119, 108, 110),
+ (107, 103, 102), (96, 99, 94), (87, 91, 85), (76, 83, 75),
+ (56, 69, 57), (51, 62, 51), (46, 56, 46), (44, 53, 45),
+ (42, 50, 45), (40, 45, 44), (45, 45, 48), (58, 51, 59),
+ (69, 58, 69), (99, 77, 96), (106, 82, 103), (113, 87, 111),
+ (121, 97, 121), (130, 103, 127), (132, 103, 128), (126, 99, 120),
+ (115, 85, 100), (102, 75, 87), (89, 66, 74), (85, 62, 71),
+ (81, 59, 69), (73, 54, 64), (66, 51, 60), (62, 49, 57),
+ (63, 51, 60), (74, 65, 74), (77, 71, 78), (81, 77, 82),
+ (94, 88, 93), (103, 98, 103), (109, 110, 107), (115, 117, 111),
+ (113, 111, 107), (111, 107, 102), (109, 103, 97), (105, 98, 93),
+ (103, 92, 91), (103, 88, 88), (106, 89, 91), (111, 97, 100),
+ (119, 105, 114), (135, 117, 135), (138, 119, 138), (141, 122, 141),
+ (148, 128, 149), (150, 134, 150), (151, 138, 147), (152, 141, 144),
+ (146, 147, 137), (145, 146, 135), (144, 145, 133), (143, 141, 128),
+ (139, 139, 128), (136, 138, 128), (134, 132, 125), (128, 123, 119),
+ (120, 121, 114), (111, 116, 107), (106, 105, 99), (104, 103, 98),
+ (102, 103, 97), (104, 100, 95), (105, 97, 99), (104, 95, 100),
+ (95, 85, 94), (91, 81, 89), (87, 78, 85), (78, 72, 75),
+ (73, 64, 68), (69, 59, 62), (64, 55, 57), (63, 52, 57),
+ (65, 49, 58), (66, 50, 60), (68, 50, 61), (69, 49, 61),
+ (71, 50, 61), (70, 50, 61), (69, 50, 63), (73, 52, 66),
+ (78, 57, 71), (83, 66, 80), (92, 71, 91), (102, 81, 99),
+ (108, 92, 105), (114, 98, 110), (113, 101, 111), (110, 99, 107),
+ (108, 92, 102), (102, 84, 97), (95, 76, 93), (93, 68, 90),
+ (92, 65, 90), (93, 69, 91), (99, 75, 95), (106, 85, 102),
+ (114, 95, 108), (122, 104, 116), (129, 109, 125), (134, 112, 129),
+ (131, 112, 128), (126, 107, 126), (119, 98, 120), (106, 88, 107),
+ (93, 82, 97), (81, 74, 84), (68, 66, 71), (66, 68, 67),
+ (64, 69, 65), (65, 65, 65), (73, 69, 67), (80, 71, 71),
+ (84, 66, 73), (89, 68, 73), (94, 70, 74), (100, 71, 78),
+ (101, 79, 83), (104, 85, 91), (112, 91, 100), (115, 99, 106),
+ (119, 102, 110), (124, 104, 114), (124, 109, 114), (126, 111, 112),
+ (128, 113, 113), (129, 117, 114), (128, 120, 112), (126, 119, 111),
+ (125, 119, 110), (123, 114, 107), (119, 107, 105), (115, 100, 103),
+ (109, 92, 102), (107, 82, 101), (100, 74, 95), (95, 70, 89)
+ ),
+
+// 406 040221-49
+((129, 121, 95), (110, 101, 78), (98, 89, 68), (86, 78, 59),
+ (75, 67, 49), (64, 56, 40), (61, 54, 38), (59, 52, 37),
+ (52, 42, 29), (49, 38, 25), (47, 35, 22), (48, 36, 22),
+ (50, 38, 22), (57, 46, 28), (65, 54, 35), (70, 59, 39),
+ (76, 65, 44), (97, 86, 62), (109, 97, 71), (121, 109, 80),
+ (129, 117, 86), (137, 125, 92), (140, 128, 93), (143, 131, 95),
+ (151, 134, 96), (154, 135, 93), (158, 136, 91), (159, 135, 89),
+ (161, 135, 87), (160, 133, 84), (160, 132, 82), (155, 126, 76),
+ (147, 117, 68), (126, 96, 48), (116, 85, 41), (106, 75, 34),
+ (100, 71, 32), (94, 67, 30), (92, 66, 30), (90, 65, 31),
+ (84, 66, 35), (81, 64, 36), (78, 62, 38), (77, 61, 37),
+ (76, 61, 37), (77, 61, 37), (78, 62, 37), (82, 64, 38),
+ (90, 71, 41), (109, 87, 52), (118, 96, 59), (128, 106, 66),
+ (137, 115, 75), (146, 124, 84), (150, 128, 89), (154, 132, 94),
+ (172, 151, 113), (180, 160, 122), (189, 170, 132), (195, 178, 141),
+ (201, 186, 150), (202, 188, 152), (203, 190, 155), (202, 192, 158),
+ (200, 188, 157), (191, 176, 141), (184, 167, 131), (178, 159, 121),
+ (173, 154, 115), (169, 150, 110), (157, 138, 99), (144, 124, 85),
+ (117, 96, 58), (105, 83, 46), (93, 71, 35), (86, 65, 30),
+ (79, 59, 26), (76, 57, 25), (73, 55, 25), (70, 55, 27),
+ (69, 55, 28), (72, 61, 37), (78, 67, 42), (85, 73, 48),
+ (88, 76, 50), (91, 80, 53), (98, 87, 58), (108, 93, 61),
+ (124, 106, 68), (132, 111, 71), (140, 117, 74), (142, 119, 75),
+ (145, 121, 77), (146, 124, 80), (146, 125, 81), (143, 123, 80),
+ (140, 121, 79), (138, 118, 76), (140, 121, 79), (143, 124, 82),
+ (145, 127, 86), (147, 130, 90), (152, 138, 99), (155, 145, 109),
+ (161, 152, 117), (162, 151, 114), (164, 150, 112), (164, 148, 109),
+ (165, 147, 106), (166, 147, 103), (166, 145, 102), (165, 143, 100),
+ (162, 140, 98), (152, 130, 89), (150, 126, 85), (148, 123, 81),
+ (144, 118, 73), (142, 115, 70), (144, 115, 72), (147, 120, 77),
+ (157, 132, 91), (164, 140, 97), (172, 148, 104), (176, 152, 108),
+ (181, 157, 112), (190, 166, 120), (199, 176, 130), (206, 184, 140),
+ (211, 191, 149), (221, 200, 152), (221, 200, 150), (221, 200, 148),
+ (219, 197, 142), (215, 190, 134), (208, 182, 127), (197, 173, 121),
+ (176, 152, 104), (163, 140, 94), (150, 129, 84), (144, 122, 78),
+ (138, 116, 73), (125, 103, 61), (112, 91, 53), (101, 81, 45),
+ (93, 72, 41), (77, 61, 35), (74, 59, 34), (72, 57, 33),
+ (69, 54, 32), (66, 52, 32), (66, 52, 33), (68, 54, 33),
+ (76, 59, 34), (77, 60, 34), (79, 62, 34), (79, 62, 33),
+ (81, 62, 32), (81, 61, 31), (81, 62, 32), (84, 65, 35),
+ (89, 69, 38), (103, 84, 46), (107, 87, 47), (112, 90, 49),
+ (119, 95, 51), (125, 99, 52), (128, 101, 54), (131, 104, 58),
+ (137, 113, 68), (139, 116, 70), (141, 119, 73), (145, 124, 79),
+ (149, 128, 83), (151, 130, 85), (150, 130, 87), (146, 128, 89),
+ (143, 127, 91), (139, 126, 92), (136, 126, 95), (135, 128, 100),
+ (136, 131, 104), (139, 134, 107), (143, 138, 110), (150, 143, 112),
+ (159, 150, 114), (160, 150, 114), (161, 151, 115), (160, 151, 116),
+ (161, 151, 115), (159, 149, 114), (159, 148, 111), (158, 146, 108),
+ (159, 144, 102), (158, 140, 96), (156, 135, 91), (153, 131, 85),
+ (148, 125, 81), (145, 120, 75), (139, 114, 70), (134, 108, 65),
+ (130, 104, 61), (126, 101, 59), (125, 99, 57), (125, 100, 58),
+ (128, 104, 62), (132, 108, 67), (136, 114, 74), (141, 121, 83),
+ (146, 129, 92), (151, 135, 100), (155, 142, 109), (164, 151, 118),
+ (171, 159, 125), (180, 167, 131), (190, 176, 136), (197, 182, 140),
+ (202, 185, 140), (202, 183, 136), (202, 180, 131), (198, 174, 124),
+ (193, 167, 115), (189, 160, 109), (184, 157, 105), (181, 153, 103),
+ (177, 150, 100), (174, 147, 97), (170, 144, 94), (166, 138, 89),
+ (162, 133, 85), (157, 129, 81), (153, 125, 81), (149, 122, 79),
+ (143, 117, 75), (136, 113, 73), (128, 105, 67), (119, 98, 61),
+ (109, 88, 53), (100, 79, 47), (92, 73, 43), (87, 68, 37),
+ (83, 65, 34), (81, 63, 33), (81, 63, 35), (80, 65, 39),
+ (80, 69, 44), (84, 74, 53), (91, 83, 62), (101, 93, 70),
+ (114, 106, 80), (127, 117, 89), (133, 125, 94), (138, 129, 98),
+ (140, 132, 101), (139, 131, 103), (136, 128, 100), (132, 125, 98)
+ ),
+
+// 407 040221-50
+((100, 53, 51), (104, 58, 56), (102, 56, 53), (101, 55, 51),
+ (97, 51, 48), (93, 47, 45), (92, 46, 45), (92, 45, 45),
+ (99, 49, 48), (99, 48, 48), (99, 47, 49), (99, 46, 48),
+ (100, 45, 48), (95, 43, 45), (91, 41, 43), (88, 39, 42),
+ (85, 37, 42), (80, 36, 40), (81, 37, 41), (82, 39, 42),
+ (88, 43, 46), (95, 48, 50), (100, 52, 53), (105, 56, 57),
+ (125, 67, 68), (128, 69, 69), (131, 71, 71), (129, 68, 70),
+ (127, 66, 70), (124, 63, 68), (121, 61, 67), (110, 57, 61),
+ (103, 54, 55), (90, 44, 50), (88, 44, 48), (87, 44, 46),
+ (86, 42, 44), (85, 41, 43), (84, 40, 42), (84, 39, 42),
+ (82, 36, 39), (82, 37, 40), (83, 38, 41), (89, 40, 43),
+ (95, 43, 45), (100, 45, 47), (105, 48, 50), (116, 57, 57),
+ (128, 69, 67), (153, 90, 90), (162, 96, 99), (172, 103, 109),
+ (169, 104, 111), (167, 106, 114), (164, 104, 113), (162, 103, 112),
+ (140, 84, 90), (126, 74, 78), (112, 64, 67), (100, 55, 55),
+ (89, 47, 44), (84, 44, 41), (80, 41, 38), (74, 37, 34),
+ (70, 33, 32), (66, 29, 30), (65, 29, 29), (64, 29, 28),
+ (64, 29, 28), (65, 30, 29), (65, 30, 29), (66, 31, 29),
+ (68, 32, 30), (68, 32, 30), (68, 33, 30), (67, 33, 30),
+ (67, 33, 31), (66, 33, 31), (66, 34, 31), (67, 34, 31),
+ (66, 34, 31), (67, 34, 31), (66, 33, 31), (66, 33, 31),
+ (66, 33, 30), (67, 33, 30), (67, 32, 30), (68, 32, 30),
+ (72, 35, 34), (78, 38, 37), (85, 42, 40), (89, 44, 43),
+ (94, 47, 46), (102, 51, 53), (108, 56, 59), (115, 60, 62),
+ (124, 65, 67), (138, 76, 80), (143, 81, 83), (149, 86, 87),
+ (153, 91, 90), (158, 96, 94), (168, 106, 105), (177, 113, 110),
+ (177, 111, 108), (174, 109, 107), (172, 107, 107), (168, 102, 104),
+ (164, 97, 101), (157, 89, 92), (150, 82, 87), (145, 78, 84),
+ (141, 75, 84), (145, 80, 89), (146, 83, 90), (147, 87, 92),
+ (149, 91, 96), (152, 97, 98), (154, 99, 100), (154, 98, 98),
+ (139, 85, 82), (129, 77, 73), (119, 70, 65), (113, 64, 59),
+ (108, 58, 53), (96, 47, 42), (84, 41, 36), (74, 38, 32),
+ (68, 34, 28), (64, 30, 24), (64, 30, 24), (65, 30, 25),
+ (67, 32, 27), (72, 33, 29), (79, 37, 33), (87, 44, 41),
+ (113, 62, 59), (128, 72, 69), (144, 82, 79), (152, 88, 85),
+ (161, 95, 92), (180, 111, 106), (200, 131, 124), (210, 141, 136),
+ (220, 145, 145), (238, 147, 159), (236, 147, 159), (234, 147, 160),
+ (231, 141, 159), (223, 122, 147), (219, 110, 140), (202, 102, 127),
+ (168, 80, 96), (160, 76, 90), (153, 73, 84), (134, 66, 73),
+ (118, 58, 58), (108, 51, 49), (101, 50, 47), (100, 50, 49),
+ (101, 51, 51), (109, 54, 57), (111, 55, 57), (113, 56, 58),
+ (113, 56, 60), (108, 55, 59), (103, 52, 56), (97, 49, 50),
+ (79, 39, 39), (74, 36, 36), (69, 34, 34), (62, 30, 28),
+ (57, 27, 24), (54, 26, 22), (53, 25, 21), (53, 24, 21),
+ (53, 24, 21), (54, 26, 22), (57, 27, 23), (60, 30, 25),
+ (64, 32, 28), (68, 35, 31), (72, 37, 33), (75, 39, 36),
+ (80, 41, 39), (81, 41, 39), (82, 42, 39), (82, 43, 38),
+ (80, 41, 39), (77, 39, 37), (75, 38, 35), (71, 37, 32),
+ (67, 34, 31), (63, 31, 29), (60, 29, 27), (57, 28, 25),
+ (56, 26, 24), (55, 25, 23), (54, 24, 23), (54, 24, 23),
+ (55, 24, 23), (56, 25, 23), (57, 25, 24), (58, 26, 25),
+ (59, 27, 26), (61, 28, 27), (63, 30, 28), (64, 31, 29),
+ (66, 32, 31), (67, 33, 32), (68, 34, 33), (69, 33, 33),
+ (70, 33, 33), (69, 33, 32), (68, 32, 31), (67, 30, 31),
+ (66, 28, 29), (64, 27, 27), (62, 26, 25), (60, 26, 24),
+ (59, 25, 23), (58, 25, 22), (57, 25, 22), (57, 26, 22),
+ (57, 27, 22), (57, 28, 23), (58, 28, 24), (59, 29, 26),
+ (61, 30, 28), (63, 31, 29), (65, 32, 30), (68, 33, 31),
+ (72, 34, 33), (75, 35, 35), (76, 36, 37), (77, 36, 37),
+ (78, 37, 36), (79, 37, 38), (79, 37, 39), (77, 36, 41),
+ (76, 36, 41), (75, 37, 41), (77, 37, 41), (79, 40, 43),
+ (85, 45, 48), (91, 52, 54), (100, 60, 61), (106, 65, 66),
+ (110, 71, 70), (113, 72, 70), (115, 73, 71), (112, 68, 68),
+ (106, 63, 64), (107, 64, 65), (110, 66, 65), (109, 63, 61)
+ ),
+
+// 408 040221-51
+((106, 94, 87), (105, 92, 84), (102, 88, 80), (100, 85, 77),
+ (93, 78, 70), (86, 72, 63), (87, 73, 64), (88, 75, 65),
+ (91, 78, 67), (93, 79, 67), (95, 80, 68), (99, 82, 69),
+ (103, 85, 71), (109, 92, 77), (116, 100, 84), (120, 103, 88),
+ (124, 107, 92), (137, 122, 107), (144, 128, 113), (151, 135, 120),
+ (156, 141, 127), (162, 148, 134), (164, 150, 135), (167, 152, 137),
+ (168, 153, 139), (164, 149, 136), (160, 146, 134), (156, 142, 129),
+ (152, 138, 125), (151, 136, 122), (150, 135, 120), (147, 132, 116),
+ (147, 131, 113), (146, 131, 111), (146, 131, 112), (147, 132, 113),
+ (147, 132, 113), (147, 133, 114), (147, 132, 113), (147, 132, 113),
+ (147, 131, 110), (145, 130, 110), (144, 130, 110), (140, 127, 109),
+ (137, 124, 108), (135, 122, 107), (134, 121, 106), (131, 117, 100),
+ (127, 111, 94), (119, 103, 85), (114, 99, 82), (110, 95, 79),
+ (109, 94, 78), (108, 94, 78), (107, 93, 77), (107, 93, 77),
+ (109, 95, 76), (106, 94, 75), (104, 93, 74), (101, 90, 73),
+ (98, 87, 72), (97, 87, 71), (97, 87, 71), (100, 89, 71),
+ (105, 92, 74), (121, 109, 88), (129, 117, 97), (137, 125, 106),
+ (139, 128, 109), (141, 131, 112), (145, 134, 114), (143, 133, 113),
+ (142, 131, 110), (138, 128, 108), (135, 126, 107), (131, 122, 104),
+ (128, 119, 102), (123, 115, 99), (119, 111, 96), (109, 102, 88),
+ (100, 92, 79), (80, 73, 62), (74, 66, 57), (69, 59, 53),
+ (67, 57, 51), (65, 55, 49), (61, 51, 47), (59, 48, 45),
+ (56, 45, 43), (56, 44, 43), (56, 43, 43), (56, 43, 43),
+ (56, 43, 43), (56, 42, 43), (56, 42, 42), (56, 43, 40),
+ (56, 43, 40), (57, 44, 40), (58, 45, 41), (60, 46, 42),
+ (61, 46, 42), (62, 47, 43), (64, 49, 43), (66, 50, 45),
+ (68, 52, 46), (68, 52, 46), (68, 52, 47), (67, 52, 46),
+ (67, 52, 46), (65, 50, 44), (62, 47, 41), (60, 44, 39),
+ (55, 40, 35), (49, 33, 29), (48, 33, 28), (47, 33, 27),
+ (46, 31, 25), (42, 30, 24), (41, 28, 22), (39, 26, 20),
+ (35, 22, 16), (36, 23, 17), (37, 25, 19), (38, 26, 20),
+ (39, 28, 22), (41, 31, 25), (43, 32, 27), (45, 33, 29),
+ (45, 34, 30), (47, 36, 31), (48, 37, 31), (49, 38, 32),
+ (51, 42, 35), (54, 44, 38), (57, 46, 41), (60, 48, 43),
+ (63, 51, 45), (65, 53, 46), (68, 56, 47), (70, 57, 47),
+ (72, 59, 48), (75, 62, 50), (78, 65, 52), (79, 66, 54),
+ (79, 67, 55), (79, 67, 54), (79, 66, 53), (79, 66, 53),
+ (79, 65, 52), (79, 65, 51), (79, 64, 49), (77, 63, 47),
+ (75, 61, 44), (74, 60, 44), (74, 60, 44), (74, 59, 44),
+ (74, 59, 45), (74, 59, 45), (74, 59, 45), (73, 58, 45),
+ (72, 58, 44), (71, 56, 44), (71, 56, 44), (71, 56, 45),
+ (72, 57, 47), (74, 59, 49), (76, 61, 53), (79, 64, 55),
+ (89, 74, 65), (93, 78, 69), (98, 83, 74), (107, 92, 83),
+ (117, 101, 91), (126, 111, 101), (135, 119, 109), (142, 127, 117),
+ (148, 134, 122), (156, 142, 128), (163, 149, 136), (171, 157, 144),
+ (178, 164, 151), (184, 170, 157), (187, 174, 162), (189, 175, 165),
+ (189, 175, 163), (189, 175, 163), (189, 176, 163), (190, 176, 164),
+ (195, 182, 169), (200, 187, 175), (204, 191, 180), (205, 193, 180),
+ (205, 193, 181), (206, 193, 181), (201, 189, 176), (202, 189, 176),
+ (204, 193, 180), (205, 193, 181), (203, 191, 178), (200, 188, 173),
+ (194, 182, 167), (183, 170, 154), (171, 157, 140), (160, 146, 130),
+ (152, 137, 123), (143, 128, 115), (134, 119, 107), (125, 110, 98),
+ (116, 102, 89), (107, 93, 79), (98, 85, 71), (93, 79, 64),
+ (89, 75, 60), (88, 73, 59), (88, 74, 59), (90, 75, 61),
+ (92, 77, 60), (95, 80, 62), (98, 84, 65), (102, 88, 67),
+ (107, 93, 70), (114, 100, 78), (124, 109, 88), (133, 117, 96),
+ (141, 125, 105), (148, 132, 113), (153, 138, 120), (158, 144, 125),
+ (161, 147, 130), (166, 153, 137), (172, 159, 144), (177, 164, 151),
+ (182, 169, 157), (187, 174, 163), (190, 178, 166), (191, 178, 167),
+ (191, 179, 167), (191, 179, 168), (191, 179, 167), (190, 178, 167),
+ (188, 176, 165), (183, 172, 160), (177, 166, 154), (171, 159, 148),
+ (163, 152, 141), (156, 145, 135), (152, 140, 130), (149, 137, 128),
+ (151, 139, 129), (148, 136, 127), (139, 126, 118), (129, 116, 107),
+ (119, 105, 97), (111, 96, 89), (101, 87, 80), (101, 89, 81)
+ ),
+
+// 409 040221-52
+((94, 102, 103), (98, 107, 121), (102, 111, 129), (106, 115, 137),
+ (110, 120, 146), (115, 125, 156), (116, 127, 159), (118, 129, 163),
+ (120, 132, 176), (115, 128, 175), (111, 125, 174), (104, 119, 167),
+ (98, 114, 161), (92, 108, 153), (86, 103, 146), (83, 101, 141),
+ (81, 99, 137), (74, 91, 118), (71, 87, 106), (69, 83, 95),
+ (68, 80, 88), (67, 78, 82), (67, 78, 82), (68, 79, 83),
+ (77, 87, 93), (83, 93, 101), (90, 99, 109), (98, 105, 115),
+ (107, 112, 122), (110, 115, 126), (113, 118, 130), (121, 125, 140),
+ (128, 132, 150), (141, 144, 171), (143, 147, 180), (145, 151, 189),
+ (145, 151, 193), (146, 152, 198), (146, 152, 198), (147, 153, 199),
+ (151, 157, 199), (153, 158, 199), (156, 160, 199), (155, 160, 199),
+ (154, 160, 199), (152, 159, 199), (151, 158, 200), (148, 156, 201),
+ (146, 153, 202), (145, 154, 202), (145, 154, 202), (145, 154, 202),
+ (143, 152, 197), (141, 150, 192), (138, 147, 188), (135, 144, 184),
+ (119, 129, 166), (111, 121, 156), (104, 114, 147), (95, 106, 139),
+ (87, 99, 131), (84, 96, 126), (81, 94, 121), (76, 89, 110),
+ (72, 85, 100), (65, 78, 84), (64, 77, 83), (64, 76, 82),
+ (64, 76, 85), (65, 77, 88), (68, 81, 95), (74, 86, 104),
+ (88, 99, 118), (96, 106, 127), (104, 114, 136), (112, 121, 146),
+ (120, 129, 157), (124, 132, 162), (128, 136, 168), (137, 144, 179),
+ (144, 151, 189), (158, 162, 200), (163, 166, 203), (169, 171, 206),
+ (170, 172, 207), (172, 174, 208), (176, 177, 209), (179, 179, 210),
+ (182, 181, 212), (180, 179, 211), (178, 178, 211), (175, 176, 210),
+ (173, 174, 210), (166, 169, 206), (159, 164, 201), (151, 156, 194),
+ (143, 149, 186), (128, 137, 168), (122, 131, 159), (117, 126, 151),
+ (114, 123, 146), (111, 121, 142), (106, 117, 135), (100, 112, 131),
+ (92, 106, 130), (91, 106, 131), (91, 107, 132), (93, 108, 133),
+ (95, 110, 135), (102, 115, 138), (110, 122, 141), (118, 128, 146),
+ (125, 134, 153), (138, 146, 172), (140, 148, 177), (143, 150, 182),
+ (147, 155, 192), (153, 161, 201), (160, 166, 206), (165, 170, 208),
+ (173, 175, 207), (173, 175, 204), (174, 175, 201), (171, 172, 198),
+ (169, 170, 196), (164, 166, 192), (158, 161, 189), (155, 158, 187),
+ (152, 156, 185), (150, 154, 185), (151, 155, 184), (153, 157, 184),
+ (152, 155, 182), (149, 153, 180), (145, 150, 177), (141, 147, 176),
+ (137, 143, 174), (139, 145, 177), (141, 147, 180), (144, 149, 182),
+ (148, 152, 184), (154, 157, 187), (158, 160, 190), (161, 163, 194),
+ (162, 164, 195), (156, 159, 193), (153, 157, 191), (151, 155, 190),
+ (146, 151, 185), (140, 145, 178), (133, 139, 169), (127, 134, 160),
+ (116, 123, 139), (112, 119, 134), (108, 115, 130), (99, 107, 120),
+ (91, 100, 110), (82, 91, 100), (73, 83, 89), (64, 75, 78),
+ (57, 68, 67), (47, 58, 47), (45, 56, 43), (44, 55, 40),
+ (43, 54, 35), (42, 53, 33), (42, 53, 32), (43, 54, 33),
+ (45, 57, 37), (46, 57, 38), (47, 58, 40), (48, 60, 46),
+ (51, 64, 54), (57, 70, 63), (64, 76, 73), (73, 84, 84),
+ (81, 92, 96), (89, 99, 107), (96, 106, 118), (101, 110, 129),
+ (103, 115, 140), (107, 120, 152), (111, 124, 163), (115, 129, 173),
+ (121, 136, 185), (122, 137, 184), (124, 138, 183), (124, 137, 178),
+ (120, 133, 170), (114, 127, 160), (106, 121, 150), (98, 114, 142),
+ (90, 106, 133), (82, 99, 126), (76, 93, 117), (71, 88, 109),
+ (66, 82, 99), (62, 78, 88), (60, 75, 77), (60, 73, 69),
+ (60, 72, 63), (59, 72, 60), (59, 70, 59), (59, 71, 62),
+ (59, 71, 65), (59, 72, 71), (61, 75, 78), (64, 78, 86),
+ (67, 81, 92), (71, 86, 98), (75, 89, 102), (78, 93, 106),
+ (80, 95, 111), (80, 95, 116), (81, 97, 125), (81, 99, 136),
+ (82, 101, 145), (82, 102, 151), (81, 102, 156), (80, 100, 155),
+ (79, 100, 151), (76, 96, 142), (74, 93, 134), (73, 91, 128),
+ (73, 91, 123), (74, 91, 118), (74, 90, 114), (74, 89, 109),
+ (73, 88, 102), (70, 85, 92), (67, 81, 79), (65, 77, 68),
+ (63, 75, 59), (62, 74, 52), (61, 74, 48), (63, 74, 46),
+ (64, 75, 45), (64, 76, 44), (64, 76, 43), (65, 76, 42),
+ (65, 77, 41), (66, 78, 40), (66, 78, 40), (65, 78, 39),
+ (65, 77, 40), (64, 77, 41), (63, 76, 43), (62, 75, 46),
+ (61, 74, 51), (63, 76, 51), (66, 78, 53), (72, 82, 55),
+ (77, 86, 62), (82, 90, 70), (87, 95, 79), (92, 99, 88)
+ ),
+
+// 410 040221-53
+((44, 119, 111), (47, 122, 116), (43, 128, 117), (40, 134, 119),
+ (41, 136, 123), (42, 139, 127), (46, 139, 132), (51, 140, 138),
+ (58, 152, 158), (65, 158, 168), (73, 164, 179), (83, 164, 186),
+ (94, 164, 194), (98, 166, 197), (102, 168, 201), (103, 170, 203),
+ (105, 172, 205), (111, 180, 216), (121, 185, 217), (132, 190, 218),
+ (143, 199, 222), (154, 208, 227), (150, 211, 231), (147, 215, 235),
+ (144, 213, 234), (149, 211, 231), (154, 209, 228), (141, 206, 227),
+ (128, 204, 226), (120, 198, 222), (112, 193, 218), (99, 181, 209),
+ (97, 169, 200), (84, 153, 180), (75, 144, 168), (67, 136, 156),
+ (60, 126, 142), (53, 117, 128), (51, 112, 121), (49, 107, 114),
+ (43, 84, 98), (43, 81, 98), (44, 79, 99), (50, 85, 104),
+ (57, 92, 110), (62, 94, 115), (67, 97, 121), (78, 97, 137),
+ (84, 98, 148), (88, 106, 152), (89, 106, 151), (91, 106, 151),
+ (91, 101, 151), (91, 97, 152), (87, 96, 151), (84, 96, 151),
+ (70, 100, 138), (65, 95, 134), (61, 90, 131), (58, 88, 131),
+ (55, 87, 132), (54, 86, 129), (53, 86, 127), (42, 84, 117),
+ (38, 79, 108), (37, 74, 103), (38, 76, 103), (40, 79, 104),
+ (41, 84, 106), (42, 90, 109), (45, 101, 117), (50, 114, 128),
+ (65, 129, 149), (72, 136, 158), (79, 144, 168), (84, 150, 177),
+ (90, 156, 186), (92, 157, 188), (95, 159, 191), (98, 160, 194),
+ (100, 161, 195), (100, 161, 195), (99, 159, 193), (98, 158, 191),
+ (97, 157, 189), (96, 156, 188), (92, 154, 184), (89, 153, 181),
+ (81, 146, 171), (73, 140, 162), (66, 134, 154), (61, 131, 149),
+ (57, 129, 144), (47, 123, 135), (42, 118, 127), (37, 114, 120),
+ (34, 109, 115), (31, 108, 113), (37, 113, 120), (43, 118, 127),
+ (47, 121, 132), (52, 124, 137), (64, 133, 150), (73, 142, 163),
+ (94, 159, 189), (99, 164, 196), (105, 170, 204), (105, 171, 205),
+ (106, 173, 207), (107, 174, 209), (106, 175, 209), (104, 174, 207),
+ (100, 170, 202), (87, 159, 185), (85, 156, 181), (83, 153, 178),
+ (78, 149, 172), (78, 143, 171), (78, 139, 171), (82, 132, 171),
+ (82, 122, 163), (79, 116, 158), (76, 110, 153), (75, 107, 151),
+ (75, 105, 149), (75, 102, 145), (72, 100, 138), (69, 102, 135),
+ (62, 106, 133), (59, 118, 134), (60, 121, 136), (62, 124, 139),
+ (68, 131, 148), (73, 143, 161), (79, 152, 173), (85, 159, 183),
+ (94, 165, 193), (95, 165, 195), (97, 166, 197), (97, 166, 196),
+ (98, 166, 196), (97, 165, 195), (98, 163, 194), (97, 163, 194),
+ (97, 162, 194), (97, 161, 192), (97, 160, 192), (98, 160, 192),
+ (97, 159, 191), (97, 158, 189), (93, 155, 185), (89, 150, 178),
+ (74, 134, 154), (70, 128, 147), (66, 122, 140), (56, 112, 128),
+ (49, 103, 116), (43, 99, 110), (42, 97, 107), (41, 98, 107),
+ (43, 101, 112), (53, 114, 128), (58, 118, 135), (64, 123, 142),
+ (75, 136, 156), (90, 142, 173), (99, 145, 184), (107, 146, 190),
+ (108, 141, 173), (109, 139, 168), (110, 137, 164), (110, 129, 147),
+ (109, 121, 137), (104, 111, 132), (97, 109, 123), (91, 114, 125),
+ (91, 121, 124), (91, 128, 126), (94, 133, 138), (95, 137, 150),
+ (96, 145, 168), (99, 155, 186), (100, 165, 196), (103, 173, 200),
+ (97, 171, 194), (94, 168, 190), (92, 165, 187), (86, 156, 181),
+ (79, 152, 171), (74, 147, 162), (68, 143, 155), (64, 136, 148),
+ (61, 130, 145), (56, 125, 141), (51, 123, 136), (43, 123, 133),
+ (37, 120, 127), (32, 116, 121), (31, 109, 112), (26, 100, 99),
+ (19, 95, 90), (12, 91, 80), (4, 87, 74), (3, 83, 68),
+ (8, 75, 62), (14, 71, 58), (19, 70, 55), (23, 69, 54),
+ (28, 73, 56), (33, 74, 59), (43, 77, 65), (52, 80, 73),
+ (60, 80, 81), (67, 86, 90), (69, 94, 101), (72, 103, 111),
+ (74, 111, 123), (75, 114, 131), (74, 117, 139), (68, 119, 145),
+ (58, 118, 142), (51, 116, 136), (43, 107, 124), (37, 96, 110),
+ (28, 85, 100), (18, 71, 88), (11, 61, 80), (10, 52, 74),
+ (13, 49, 68), (18, 47, 69), (24, 47, 73), (29, 47, 77),
+ (36, 53, 85), (39, 61, 92), (41, 71, 98), (44, 81, 104),
+ (45, 85, 107), (46, 90, 108), (44, 94, 108), (37, 95, 106),
+ (30, 95, 101), (25, 93, 96), (23, 92, 94), (22, 93, 95),
+ (17, 96, 96), (14, 98, 99), (10, 101, 99), (7, 103, 99),
+ (8, 107, 102), (12, 111, 107), (16, 115, 114), (21, 120, 120),
+ (25, 122, 126), (31, 124, 124), (36, 123, 120), (41, 120, 115)
+ ),
+
+// 411 040221-54
+((187, 125, 54), (191, 123, 49), (193, 132, 52), (195, 141, 56),
+ (197, 147, 57), (199, 153, 59), (199, 156, 60), (199, 160, 61),
+ (192, 156, 68), (182, 156, 75), (173, 157, 83), (162, 155, 91),
+ (151, 153, 99), (132, 141, 101), (113, 129, 104), (101, 120, 103),
+ (89, 112, 103), (47, 68, 93), (38, 58, 88), (30, 48, 83),
+ (31, 46, 79), (32, 45, 75), (36, 45, 72), (40, 46, 69),
+ (63, 54, 54), (77, 63, 52), (92, 72, 50), (107, 90, 58),
+ (123, 108, 67), (132, 115, 71), (141, 122, 75), (159, 136, 77),
+ (178, 143, 78), (203, 152, 57), (206, 152, 54), (209, 152, 52),
+ (205, 146, 51), (201, 140, 51), (197, 133, 48), (193, 127, 45),
+ (183, 114, 32), (176, 109, 30), (169, 105, 28), (151, 95, 27),
+ (133, 85, 27), (122, 79, 27), (111, 74, 27), (93, 67, 28),
+ (80, 60, 31), (63, 51, 31), (59, 50, 29), (55, 49, 27),
+ (54, 49, 25), (54, 49, 24), (55, 51, 26), (57, 53, 29),
+ (75, 69, 42), (98, 86, 52), (121, 103, 63), (141, 121, 71),
+ (162, 140, 80), (166, 145, 85), (171, 151, 90), (175, 160, 101),
+ (178, 167, 116), (174, 155, 119), (163, 143, 109), (152, 132, 100),
+ (142, 125, 95), (132, 118, 90), (112, 103, 85), (92, 89, 83),
+ (54, 50, 78), (38, 36, 75), (22, 22, 72), (15, 18, 77),
+ (8, 15, 82), (7, 16, 87), (6, 17, 93), (6, 23, 109),
+ (10, 31, 121), (20, 38, 129), (22, 39, 125), (24, 41, 122),
+ (23, 41, 118), (23, 41, 115), (23, 42, 107), (22, 41, 98),
+ (24, 33, 67), (21, 26, 51), (18, 20, 35), (15, 16, 29),
+ (13, 13, 23), (8, 7, 16), (4, 4, 13), (4, 3, 15),
+ (5, 5, 21), (4, 7, 33), (3, 6, 34), (3, 5, 35),
+ (4, 5, 34), (6, 5, 34), (12, 8, 38), (22, 14, 40),
+ (48, 23, 41), (57, 28, 39), (66, 33, 37), (69, 36, 37),
+ (72, 39, 37), (80, 51, 42), (85, 58, 43), (93, 65, 48),
+ (99, 69, 54), (105, 78, 72), (104, 82, 80), (104, 87, 88),
+ (96, 94, 103), (92, 101, 118), (90, 104, 128), (89, 108, 139),
+ (101, 114, 153), (100, 116, 157), (100, 118, 161), (98, 117, 162),
+ (96, 116, 163), (92, 114, 164), (89, 113, 159), (94, 111, 153),
+ (99, 112, 144), (107, 116, 133), (109, 117, 133), (111, 118, 133),
+ (113, 122, 135), (114, 126, 137), (124, 134, 139), (139, 147, 137),
+ (170, 171, 147), (169, 175, 155), (169, 180, 163), (162, 177, 168),
+ (156, 175, 174), (140, 169, 180), (130, 162, 182), (120, 150, 182),
+ (115, 143, 179), (90, 112, 163), (82, 105, 160), (74, 99, 157),
+ (61, 86, 147), (51, 74, 138), (53, 69, 129), (54, 68, 117),
+ (71, 67, 91), (76, 66, 82), (82, 66, 74), (91, 67, 60),
+ (102, 67, 48), (111, 68, 39), (119, 78, 32), (128, 87, 31),
+ (139, 94, 30), (146, 106, 43), (147, 106, 48), (149, 106, 53),
+ (151, 113, 61), (150, 120, 72), (149, 125, 80), (144, 130, 89),
+ (125, 132, 116), (121, 132, 120), (118, 132, 125), (112, 132, 133),
+ (108, 129, 134), (102, 123, 133), (95, 119, 134), (88, 112, 137),
+ (82, 110, 140), (85, 114, 143), (92, 123, 147), (100, 132, 150),
+ (109, 140, 160), (114, 145, 172), (116, 150, 179), (122, 157, 185),
+ (140, 177, 181), (145, 181, 178), (150, 186, 176), (155, 187, 174),
+ (150, 180, 166), (138, 167, 157), (127, 152, 146), (115, 139, 135),
+ (104, 127, 128), (96, 117, 125), (80, 103, 127), (62, 88, 128),
+ (46, 71, 128), (30, 55, 123), (18, 40, 119), (14, 32, 113),
+ (11, 28, 108), (9, 25, 102), (12, 26, 96), (20, 28, 87),
+ (34, 31, 76), (51, 36, 65), (70, 47, 58), (86, 58, 55),
+ (96, 72, 57), (109, 85, 63), (118, 98, 74), (124, 102, 84),
+ (131, 109, 97), (131, 113, 113), (123, 114, 131), (115, 113, 144),
+ (105, 114, 157), (93, 107, 159), (83, 100, 151), (74, 91, 142),
+ (62, 79, 130), (51, 64, 115), (46, 56, 102), (41, 49, 91),
+ (42, 47, 80), (49, 52, 74), (56, 60, 74), (63, 66, 76),
+ (70, 74, 80), (75, 82, 90), (78, 90, 102), (83, 99, 116),
+ (85, 110, 137), (93, 123, 160), (103, 139, 178), (114, 150, 193),
+ (124, 163, 204), (136, 174, 205), (141, 180, 207), (148, 184, 209),
+ (153, 189, 212), (159, 190, 214), (161, 191, 214), (168, 194, 205),
+ (177, 198, 195), (186, 199, 178), (195, 199, 164), (205, 198, 150),
+ (207, 190, 139), (205, 176, 125), (203, 170, 114), (205, 167, 103),
+ (203, 159, 92), (202, 157, 82), (199, 152, 74), (194, 139, 64)
+ ),
+
+// 412 040221-55
+((111, 80, 54), (113, 78, 51), (112, 77, 49), (111, 76, 48),
+ (107, 71, 44), (103, 66, 40), (105, 68, 42), (107, 71, 44),
+ (108, 77, 49), (106, 78, 51), (105, 80, 54), (107, 84, 58),
+ (110, 88, 63), (112, 93, 66), (115, 99, 69), (119, 101, 71),
+ (124, 104, 74), (132, 109, 75), (135, 111, 78), (139, 113, 82),
+ (141, 119, 85), (144, 126, 89), (148, 127, 92), (152, 129, 96),
+ (162, 136, 98), (162, 132, 97), (163, 129, 96), (163, 134, 101),
+ (163, 139, 107), (166, 142, 111), (169, 145, 116), (174, 154, 125),
+ (181, 163, 131), (182, 161, 125), (171, 153, 116), (161, 145, 107),
+ (148, 132, 97), (136, 119, 88), (130, 112, 82), (125, 105, 77),
+ (102, 79, 55), (87, 66, 43), (72, 53, 31), (58, 41, 21),
+ (44, 29, 12), (37, 24, 8), (31, 19, 4), (22, 11, 2),
+ (16, 6, 0), (13, 1, 1), (15, 2, 1), (17, 4, 1),
+ (22, 6, 1), (27, 8, 2), (30, 9, 2), (34, 10, 2),
+ (42, 15, 5), (44, 18, 5), (47, 22, 6), (50, 24, 6),
+ (53, 27, 6), (56, 27, 5), (59, 28, 5), (63, 27, 5),
+ (68, 27, 5), (72, 30, 6), (73, 34, 8), (74, 39, 10),
+ (76, 43, 13), (79, 48, 17), (87, 56, 25), (101, 65, 35),
+ (127, 81, 53), (132, 85, 55), (138, 90, 57), (135, 91, 57),
+ (133, 92, 57), (132, 92, 56), (132, 93, 56), (131, 93, 59),
+ (131, 91, 58), (127, 80, 52), (114, 69, 43), (102, 59, 34),
+ (94, 53, 28), (87, 48, 23), (74, 37, 15), (65, 26, 7),
+ (61, 14, 1), (62, 13, 0), (63, 12, 0), (63, 12, 0),
+ (63, 12, 0), (62, 12, 0), (60, 12, 0), (58, 11, 0),
+ (58, 11, 1), (64, 13, 3), (70, 18, 5), (77, 24, 8),
+ (79, 28, 11), (82, 33, 15), (88, 41, 22), (90, 47, 29),
+ (85, 50, 38), (80, 49, 37), (76, 48, 36), (73, 47, 36),
+ (71, 47, 37), (70, 47, 37), (69, 47, 38), (69, 48, 38),
+ (65, 45, 39), (48, 32, 29), (42, 28, 25), (37, 25, 22),
+ (28, 19, 16), (22, 14, 11), (22, 12, 8), (21, 11, 6),
+ (19, 9, 6), (17, 8, 5), (15, 8, 4), (13, 9, 4),
+ (12, 10, 4), (14, 11, 4), (16, 12, 4), (20, 14, 5),
+ (27, 15, 6), (46, 19, 6), (51, 23, 9), (57, 27, 12),
+ (74, 39, 20), (90, 54, 32), (108, 74, 50), (126, 94, 70),
+ (161, 128, 99), (176, 141, 111), (192, 154, 124), (195, 157, 128),
+ (198, 160, 132), (204, 170, 143), (205, 177, 157), (204, 183, 167),
+ (197, 184, 170), (193, 182, 168), (189, 176, 164), (186, 171, 160),
+ (176, 160, 148), (162, 143, 134), (148, 127, 120), (127, 108, 104),
+ (101, 82, 78), (97, 77, 72), (94, 72, 66), (88, 66, 57),
+ (81, 58, 48), (74, 51, 39), (63, 41, 30), (50, 30, 22),
+ (40, 20, 14), (29, 9, 3), (28, 8, 2), (27, 7, 1),
+ (27, 8, 0), (27, 8, 0), (29, 9, 0), (32, 10, 0),
+ (41, 17, 2), (44, 19, 3), (48, 21, 4), (53, 26, 6),
+ (56, 31, 10), (59, 34, 12), (59, 36, 15), (58, 37, 15),
+ (58, 39, 14), (58, 39, 14), (60, 39, 13), (61, 40, 14),
+ (62, 41, 15), (62, 42, 18), (59, 43, 22), (56, 45, 25),
+ (49, 43, 27), (47, 41, 25), (46, 40, 24), (43, 36, 21),
+ (42, 32, 18), (39, 29, 17), (38, 29, 17), (38, 28, 19),
+ (37, 29, 20), (38, 29, 21), (39, 29, 20), (41, 29, 17),
+ (44, 31, 16), (47, 35, 17), (51, 39, 22), (56, 45, 29),
+ (63, 51, 38), (70, 57, 45), (74, 61, 48), (77, 62, 49),
+ (78, 63, 48), (77, 63, 48), (76, 63, 47), (74, 62, 48),
+ (73, 59, 48), (71, 55, 47), (70, 49, 43), (71, 42, 36),
+ (70, 35, 28), (70, 28, 20), (71, 23, 13), (74, 19, 8),
+ (77, 17, 5), (81, 16, 5), (85, 17, 3), (90, 18, 3),
+ (95, 21, 3), (101, 28, 6), (105, 36, 13), (107, 43, 19),
+ (108, 49, 25), (107, 56, 32), (104, 58, 38), (99, 57, 41),
+ (96, 61, 44), (95, 68, 51), (98, 76, 59), (106, 86, 69),
+ (118, 101, 82), (130, 116, 97), (139, 127, 111), (146, 135, 121),
+ (148, 140, 127), (148, 142, 130), (147, 140, 130), (151, 141, 129),
+ (156, 141, 124), (157, 140, 120), (158, 138, 115), (152, 132, 109),
+ (141, 122, 99), (124, 109, 90), (112, 95, 79), (103, 82, 67),
+ (95, 74, 56), (96, 69, 51), (89, 58, 39), (87, 54, 32),
+ (86, 54, 32), (88, 56, 34), (93, 58, 37), (95, 65, 42)
+ ),
+
+// 413 040221-56
+((0, 0, 0), (0, 0, 0), (1, 1, 1), (2, 2, 2),
+ (4, 4, 4), (6, 6, 7), (8, 7, 9), (10, 9, 11),
+ (25, 20, 24), (32, 26, 33), (40, 33, 42), (53, 40, 52),
+ (66, 47, 63), (72, 54, 69), (79, 61, 75), (80, 62, 77),
+ (82, 63, 79), (77, 61, 72), (65, 53, 61), (54, 46, 50),
+ (44, 36, 40), (34, 26, 30), (28, 21, 25), (23, 17, 20),
+ (9, 7, 10), (6, 4, 7), (4, 2, 5), (3, 2, 4),
+ (2, 2, 4), (1, 1, 3), (1, 1, 3), (1, 1, 1),
+ (1, 1, 1), (0, 0, 0), (2, 1, 1), (5, 2, 3),
+ (10, 7, 8), (16, 13, 14), (21, 17, 19), (26, 21, 24),
+ (53, 47, 52), (69, 59, 66), (85, 71, 80), (98, 80, 93),
+ (112, 90, 106), (118, 95, 109), (124, 101, 112), (132, 102, 118),
+ (136, 103, 120), (137, 104, 116), (125, 99, 110), (114, 94, 105),
+ (103, 84, 97), (92, 74, 90), (86, 70, 87), (80, 67, 85),
+ (74, 58, 75), (76, 59, 78), (79, 60, 81), (88, 70, 88),
+ (98, 80, 95), (106, 85, 101), (114, 91, 108), (137, 107, 121),
+ (156, 127, 141), (202, 173, 185), (214, 186, 194), (227, 200, 203),
+ (223, 197, 205), (219, 195, 207), (211, 188, 194), (196, 171, 174),
+ (148, 128, 146), (136, 117, 133), (125, 107, 121), (116, 99, 113),
+ (108, 91, 106), (105, 87, 102), (102, 83, 99), (96, 82, 92),
+ (89, 77, 84), (74, 60, 71), (65, 54, 64), (56, 49, 58),
+ (54, 46, 56), (53, 43, 55), (51, 39, 57), (51, 39, 57),
+ (56, 40, 59), (56, 40, 59), (57, 40, 59), (56, 39, 56),
+ (56, 38, 53), (52, 34, 45), (45, 30, 42), (38, 26, 36),
+ (34, 21, 27), (21, 8, 19), (19, 6, 16), (17, 4, 13),
+ (16, 4, 12), (15, 5, 12), (17, 9, 13), (24, 14, 18),
+ (45, 32, 34), (56, 40, 43), (67, 48, 52), (72, 51, 57),
+ (77, 55, 62), (85, 61, 73), (88, 65, 76), (91, 71, 81),
+ (98, 78, 90), (111, 92, 109), (115, 97, 114), (119, 102, 119),
+ (128, 113, 130), (138, 121, 137), (143, 124, 142), (147, 128, 145),
+ (155, 131, 144), (155, 130, 144), (156, 130, 144), (163, 132, 143),
+ (170, 134, 143), (184, 150, 152), (188, 158, 167), (197, 160, 168),
+ (201, 164, 160), (177, 145, 147), (166, 135, 134), (155, 125, 122),
+ (132, 102, 96), (111, 86, 86), (97, 75, 74), (77, 58, 67),
+ (66, 55, 67), (65, 53, 67), (64, 51, 68), (66, 51, 68),
+ (68, 52, 69), (74, 55, 70), (78, 56, 72), (74, 53, 67),
+ (70, 50, 62), (48, 38, 45), (42, 33, 39), (36, 28, 34),
+ (25, 21, 24), (16, 15, 17), (10, 9, 11), (6, 6, 6),
+ (1, 1, 2), (0, 1, 1), (0, 1, 1), (0, 0, 1),
+ (1, 1, 2), (3, 3, 3), (5, 5, 5), (9, 9, 9),
+ (14, 13, 14), (25, 21, 28), (28, 23, 31), (32, 25, 34),
+ (37, 29, 41), (39, 31, 45), (40, 30, 44), (40, 28, 46),
+ (30, 21, 34), (28, 17, 31), (26, 13, 29), (20, 8, 21),
+ (14, 5, 14), (12, 2, 8), (8, 1, 4), (5, 1, 3),
+ (4, 0, 1), (3, 1, 1), (1, 1, 1), (1, 1, 1),
+ (1, 1, 1), (1, 1, 1), (2, 2, 2), (4, 3, 4),
+ (11, 7, 10), (13, 9, 12), (16, 11, 14), (26, 15, 19),
+ (36, 23, 29), (43, 29, 38), (51, 33, 45), (59, 42, 56),
+ (63, 48, 60), (62, 48, 60), (58, 46, 60), (55, 44, 56),
+ (48, 40, 48), (39, 32, 39), (29, 24, 32), (22, 18, 24),
+ (15, 13, 16), (8, 8, 10), (4, 4, 5), (2, 2, 2),
+ (1, 1, 1), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 1, 1), (1, 2, 2), (4, 3, 5),
+ (8, 8, 10), (14, 13, 15), (20, 16, 23), (28, 21, 32),
+ (40, 29, 42), (51, 36, 52), (59, 43, 63), (70, 52, 76),
+ (82, 61, 84), (88, 66, 89), (90, 73, 95), (93, 76, 95),
+ (89, 71, 90), (80, 64, 83), (70, 58, 72), (56, 46, 59),
+ (43, 34, 48), (33, 24, 34), (22, 15, 21), (13, 10, 14),
+ (8, 5, 7), (5, 2, 3), (2, 2, 2), (1, 0, 1),
+ (1, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 414 040221-57
+((22, 26, 25), (21, 24, 24), (16, 18, 18), (12, 12, 12),
+ (8, 7, 7), (4, 3, 3), (2, 1, 2), (1, 0, 1),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (1, 0, 0), (3, 1, 0), (3, 1, 0),
+ (4, 1, 0), (17, 1, 2), (27, 2, 6), (38, 4, 10),
+ (41, 11, 14), (44, 19, 19), (46, 23, 19), (48, 27, 20),
+ (60, 47, 29), (55, 51, 36), (51, 55, 43), (52, 58, 41),
+ (53, 62, 40), (52, 59, 42), (52, 57, 44), (48, 47, 47),
+ (43, 43, 43), (33, 33, 33), (28, 28, 28), (24, 24, 23),
+ (19, 20, 18), (15, 16, 14), (13, 14, 13), (12, 12, 12),
+ (8, 6, 7), (5, 4, 5), (3, 2, 3), (2, 1, 2),
+ (2, 0, 1), (1, 0, 0), (1, 0, 0), (1, 0, 0),
+ (0, 1, 0), (0, 2, 0), (0, 2, 1), (0, 2, 2),
+ (1, 3, 5), (2, 5, 9), (4, 6, 10), (6, 8, 12),
+ (15, 16, 20), (22, 22, 26), (29, 29, 33), (36, 36, 37),
+ (43, 44, 42), (45, 46, 44), (47, 48, 46), (52, 51, 49),
+ (54, 55, 53), (59, 60, 60), (63, 67, 66), (67, 75, 73),
+ (70, 81, 77), (74, 87, 81), (87, 100, 82), (104, 110, 81),
+ (126, 131, 82), (126, 133, 87), (127, 136, 92), (131, 131, 88),
+ (135, 126, 84), (130, 124, 86), (126, 122, 89), (121, 126, 109),
+ (122, 133, 125), (154, 159, 151), (160, 161, 153), (166, 163, 155),
+ (173, 165, 152), (181, 168, 150), (184, 172, 150), (177, 164, 144),
+ (142, 121, 111), (125, 108, 97), (108, 96, 83), (98, 91, 80),
+ (88, 86, 78), (72, 73, 70), (57, 58, 57), (44, 47, 46),
+ (36, 38, 37), (23, 25, 24), (20, 22, 21), (18, 19, 18),
+ (18, 19, 18), (19, 19, 19), (23, 23, 23), (30, 30, 30),
+ (52, 53, 52), (78, 72, 61), (104, 91, 71), (119, 102, 75),
+ (135, 114, 80), (154, 132, 98), (170, 149, 109), (179, 161, 108),
+ (177, 172, 101), (147, 149, 104), (138, 140, 99), (130, 131, 95),
+ (101, 119, 80), (74, 98, 65), (55, 75, 59), (52, 57, 54),
+ (47, 47, 47), (51, 48, 47), (56, 50, 47), (66, 54, 49),
+ (77, 59, 52), (104, 68, 62), (123, 72, 85), (126, 68, 91),
+ (128, 70, 91), (133, 80, 94), (125, 77, 95), (117, 75, 97),
+ (95, 71, 93), (79, 70, 76), (74, 76, 73), (72, 81, 74),
+ (69, 84, 77), (73, 81, 76), (78, 79, 75), (78, 77, 74),
+ (78, 76, 73), (69, 71, 70), (62, 64, 63), (55, 57, 56),
+ (52, 51, 51), (42, 42, 41), (40, 40, 39), (38, 38, 37),
+ (33, 34, 32), (30, 30, 29), (26, 26, 26), (21, 22, 22),
+ (11, 14, 14), (10, 12, 12), (9, 10, 11), (6, 7, 8),
+ (4, 6, 6), (2, 3, 4), (1, 1, 2), (0, 0, 1),
+ (0, 0, 1), (2, 2, 2), (3, 3, 2), (4, 4, 3),
+ (4, 10, 2), (7, 13, 5), (9, 15, 8), (13, 15, 13),
+ (17, 23, 13), (17, 23, 14), (18, 23, 15), (18, 19, 18),
+ (16, 19, 18), (16, 17, 15), (15, 15, 13), (12, 12, 10),
+ (10, 9, 8), (8, 7, 6), (8, 5, 4), (7, 3, 2),
+ (7, 2, 1), (6, 1, 3), (8, 0, 5), (8, 1, 6),
+ (5, 2, 5), (5, 2, 6), (6, 2, 7), (6, 2, 8),
+ (4, 3, 7), (2, 3, 4), (1, 3, 3), (2, 3, 4),
+ (3, 5, 5), (5, 7, 6), (8, 10, 7), (12, 12, 10),
+ (20, 12, 11), (25, 13, 10), (26, 13, 10), (22, 14, 10),
+ (24, 12, 11), (25, 11, 8), (20, 9, 9), (12, 10, 8),
+ (6, 8, 9), (4, 8, 7), (3, 8, 9), (4, 10, 11),
+ (5, 12, 12), (7, 14, 12), (8, 17, 15), (10, 22, 23),
+ (13, 24, 27), (19, 26, 29), (24, 32, 30), (35, 43, 33),
+ (44, 46, 32), (61, 44, 32), (73, 35, 26), (94, 40, 21),
+ (106, 43, 13), (121, 56, 21), (117, 54, 33), (116, 56, 40),
+ (107, 51, 39), (103, 63, 43), (87, 67, 52), (70, 67, 58),
+ (54, 57, 56), (45, 51, 49), (38, 43, 42), (33, 37, 36),
+ (30, 33, 32), (31, 27, 30), (37, 23, 32), (44, 18, 40),
+ (55, 23, 52), (76, 28, 61), (101, 39, 69), (118, 45, 69),
+ (121, 53, 77), (122, 58, 81), (120, 64, 82), (117, 67, 71),
+ (101, 65, 60), (78, 57, 51), (55, 46, 45), (37, 36, 36),
+ (26, 27, 28), (19, 21, 21), (15, 18, 17), (13, 17, 16),
+ (15, 18, 17), (19, 24, 23), (22, 27, 26), (22, 28, 27)
+ ),
+
+// 415 040221-58
+((72, 172, 134), (74, 175, 141), (69, 174, 143), (64, 173, 146),
+ (63, 183, 154), (63, 193, 163), (64, 198, 163), (66, 204, 164),
+ (65, 210, 166), (59, 204, 162), (53, 198, 158), (48, 189, 155),
+ (44, 181, 152), (43, 172, 153), (43, 163, 154), (42, 156, 153),
+ (42, 149, 153), (31, 130, 147), (26, 117, 138), (22, 104, 130),
+ (23, 87, 122), (24, 71, 115), (24, 64, 114), (24, 57, 113),
+ (30, 46, 103), (35, 46, 98), (41, 47, 93), (52, 47, 90),
+ (63, 47, 88), (67, 48, 87), (71, 50, 86), (78, 53, 85),
+ (84, 55, 84), (93, 72, 83), (95, 79, 82), (98, 86, 81),
+ (94, 94, 82), (91, 103, 84), (88, 108, 85), (85, 114, 87),
+ (76, 133, 94), (75, 136, 95), (74, 139, 96), (72, 135, 95),
+ (70, 131, 94), (68, 127, 95), (67, 124, 97), (66, 118, 99),
+ (65, 109, 98), (67, 94, 91), (68, 84, 86), (70, 74, 82),
+ (68, 64, 81), (66, 54, 81), (64, 50, 81), (63, 46, 81),
+ (54, 40, 80), (52, 40, 78), (50, 40, 76), (46, 39, 73),
+ (42, 38, 71), (39, 38, 70), (37, 38, 70), (32, 38, 70),
+ (26, 36, 70), (22, 40, 70), (20, 41, 70), (18, 43, 71),
+ (18, 45, 71), (18, 47, 72), (18, 47, 75), (19, 49, 80),
+ (24, 52, 90), (25, 53, 92), (26, 55, 95), (27, 55, 95),
+ (28, 55, 95), (28, 54, 94), (28, 53, 94), (28, 50, 91),
+ (26, 46, 87), (23, 40, 73), (20, 38, 68), (18, 36, 63),
+ (17, 34, 61), (17, 33, 59), (13, 27, 57), (11, 22, 52),
+ (7, 15, 47), (9, 16, 48), (11, 17, 50), (12, 17, 52),
+ (14, 17, 55), (17, 17, 59), (19, 17, 62), (21, 18, 64),
+ (23, 21, 67), (37, 30, 69), (51, 37, 70), (65, 44, 72),
+ (72, 52, 74), (80, 61, 76), (92, 79, 84), (101, 102, 97),
+ (117, 144, 128), (129, 160, 139), (141, 177, 150), (148, 185, 155),
+ (155, 193, 160), (164, 212, 175), (167, 230, 189), (164, 243, 205),
+ (157, 244, 211), (136, 226, 205), (131, 216, 199), (126, 206, 193),
+ (115, 186, 178), (105, 167, 167), (95, 148, 152), (82, 132, 140),
+ (69, 96, 111), (66, 79, 96), (64, 62, 82), (65, 56, 76),
+ (67, 50, 71), (69, 43, 66), (74, 43, 63), (82, 44, 61),
+ (91, 47, 64), (104, 63, 67), (105, 68, 68), (106, 73, 69),
+ (109, 85, 72), (109, 97, 73), (107, 106, 78), (107, 112, 83),
+ (96, 138, 102), (95, 154, 112), (95, 170, 122), (94, 177, 127),
+ (94, 185, 133), (96, 194, 142), (99, 202, 152), (95, 208, 160),
+ (94, 215, 168), (82, 222, 180), (79, 222, 180), (76, 223, 180),
+ (72, 221, 179), (68, 212, 175), (65, 200, 166), (57, 185, 158),
+ (36, 144, 133), (31, 136, 126), (26, 128, 119), (20, 112, 107),
+ (18, 96, 93), (15, 82, 85), (15, 70, 80), (13, 61, 76),
+ (13, 60, 76), (27, 69, 75), (31, 69, 74), (35, 69, 74),
+ (44, 70, 77), (49, 70, 77), (53, 73, 84), (57, 76, 91),
+ (64, 84, 106), (65, 83, 106), (67, 83, 107), (67, 76, 103),
+ (65, 67, 100), (61, 59, 94), (56, 54, 95), (53, 54, 95),
+ (52, 54, 93), (53, 55, 91), (57, 56, 87), (61, 56, 78),
+ (65, 54, 74), (70, 54, 71), (74, 55, 69), (80, 59, 68),
+ (86, 71, 68), (86, 74, 69), (86, 78, 70), (84, 83, 77),
+ (79, 87, 84), (74, 89, 89), (70, 91, 91), (63, 89, 93),
+ (60, 88, 93), (57, 84, 94), (54, 78, 97), (54, 73, 100),
+ (55, 67, 99), (51, 60, 97), (50, 55, 93), (50, 50, 87),
+ (51, 44, 84), (58, 41, 82), (65, 40, 79), (72, 42, 76),
+ (79, 45, 73), (85, 50, 71), (90, 56, 69), (100, 63, 70),
+ (115, 71, 77), (129, 85, 81), (142, 98, 86), (154, 112, 91),
+ (163, 125, 93), (171, 136, 95), (183, 143, 103), (194, 154, 112),
+ (204, 170, 123), (209, 187, 141), (211, 202, 157), (207, 216, 168),
+ (203, 222, 176), (200, 218, 175), (202, 211, 166), (195, 199, 161),
+ (187, 186, 159), (178, 174, 158), (166, 166, 162), (155, 160, 158),
+ (149, 156, 146), (141, 154, 139), (133, 151, 133), (129, 149, 130),
+ (123, 150, 139), (123, 155, 147), (118, 162, 149), (112, 171, 154),
+ (103, 176, 158), (98, 174, 157), (93, 170, 159), (95, 161, 156),
+ (96, 150, 147), (92, 138, 136), (79, 126, 127), (69, 110, 120),
+ (60, 95, 113), (56, 82, 107), (57, 77, 102), (61, 79, 96),
+ (60, 86, 92), (61, 97, 92), (64, 107, 94), (61, 102, 97),
+ (56, 104, 104), (58, 115, 110), (59, 129, 117), (60, 145, 126)
+ ),
+
+// 416 040221-59
+((87, 129, 157), (98, 136, 164), (100, 139, 166), (102, 142, 168),
+ (101, 142, 169), (101, 142, 170), (106, 147, 175), (112, 152, 180),
+ (131, 169, 199), (137, 174, 203), (143, 180, 207), (145, 182, 209),
+ (147, 185, 212), (148, 186, 213), (150, 187, 214), (150, 187, 215),
+ (151, 188, 216), (153, 190, 220), (154, 191, 221), (155, 193, 223),
+ (157, 194, 223), (159, 195, 224), (160, 195, 224), (161, 195, 224),
+ (159, 192, 221), (156, 188, 217), (154, 184, 213), (147, 178, 206),
+ (141, 172, 200), (138, 168, 196), (135, 165, 193), (128, 159, 186),
+ (121, 151, 177), (111, 136, 162), (104, 128, 153), (98, 121, 145),
+ (90, 112, 137), (83, 104, 129), (79, 99, 125), (75, 95, 121),
+ (64, 80, 106), (60, 74, 100), (57, 68, 94), (53, 62, 88),
+ (50, 56, 83), (48, 54, 82), (47, 52, 81), (44, 49, 79),
+ (42, 46, 78), (38, 44, 77), (37, 45, 77), (37, 46, 78),
+ (38, 48, 80), (40, 51, 82), (41, 52, 84), (43, 54, 86),
+ (48, 59, 91), (48, 60, 92), (48, 62, 94), (46, 61, 91),
+ (45, 61, 89), (43, 59, 87), (42, 58, 85), (39, 54, 81),
+ (36, 48, 77), (27, 38, 68), (25, 35, 66), (23, 33, 65),
+ (22, 32, 64), (22, 31, 64), (22, 31, 63), (23, 30, 62),
+ (26, 34, 65), (31, 40, 70), (36, 46, 76), (46, 57, 87),
+ (56, 68, 99), (61, 74, 104), (67, 80, 110), (77, 90, 120),
+ (85, 98, 127), (89, 103, 127), (86, 102, 126), (84, 101, 125),
+ (82, 99, 123), (81, 98, 122), (76, 94, 119), (73, 92, 117),
+ (67, 82, 109), (62, 78, 104), (58, 74, 99), (55, 71, 97),
+ (53, 69, 95), (48, 64, 93), (43, 64, 91), (42, 64, 91),
+ (42, 64, 90), (47, 66, 94), (47, 67, 96), (48, 69, 98),
+ (46, 70, 98), (45, 71, 98), (42, 71, 97), (39, 70, 95),
+ (38, 63, 89), (38, 60, 86), (38, 58, 84), (38, 58, 84),
+ (39, 58, 85), (39, 58, 85), (41, 61, 87), (44, 65, 91),
+ (51, 71, 98), (69, 87, 116), (74, 93, 123), (79, 99, 131),
+ (88, 109, 143), (94, 118, 151), (99, 123, 155), (100, 124, 156),
+ (99, 124, 151), (98, 123, 151), (97, 123, 151), (95, 122, 150),
+ (94, 122, 150), (93, 120, 148), (90, 115, 144), (85, 110, 137),
+ (79, 105, 129), (75, 98, 120), (75, 97, 119), (75, 97, 119),
+ (76, 96, 118), (76, 95, 119), (77, 94, 117), (74, 93, 116),
+ (67, 91, 115), (66, 92, 115), (65, 93, 115), (65, 93, 115),
+ (66, 94, 115), (70, 95, 115), (74, 97, 117), (76, 98, 119),
+ (78, 99, 122), (78, 102, 127), (77, 103, 127), (77, 104, 128),
+ (77, 104, 130), (80, 105, 131), (84, 106, 132), (89, 105, 134),
+ (90, 103, 134), (88, 101, 132), (86, 99, 130), (79, 92, 123),
+ (70, 82, 114), (61, 72, 103), (51, 61, 93), (42, 52, 83),
+ (35, 44, 74), (24, 30, 61), (21, 27, 58), (18, 25, 55),
+ (14, 20, 50), (11, 15, 47), (8, 11, 44), (6, 9, 42),
+ (2, 8, 41), (2, 8, 41), (2, 9, 42), (3, 10, 42),
+ (4, 12, 44), (6, 14, 47), (9, 16, 51), (12, 20, 54),
+ (16, 23, 57), (17, 26, 60), (19, 28, 60), (19, 29, 61),
+ (19, 30, 61), (20, 30, 62), (20, 30, 64), (23, 31, 66),
+ (27, 33, 68), (27, 33, 67), (27, 33, 67), (27, 32, 64),
+ (26, 31, 62), (24, 29, 61), (24, 30, 62), (25, 32, 64),
+ (28, 36, 68), (33, 42, 73), (39, 51, 79), (47, 60, 87),
+ (53, 69, 94), (60, 78, 103), (66, 86, 111), (73, 93, 118),
+ (79, 98, 123), (81, 102, 126), (85, 106, 129), (88, 109, 132),
+ (91, 111, 134), (92, 114, 136), (94, 116, 139), (97, 117, 141),
+ (95, 118, 143), (95, 119, 144), (93, 120, 144), (93, 120, 145),
+ (91, 121, 147), (89, 123, 148), (88, 124, 149), (85, 125, 151),
+ (82, 127, 153), (79, 127, 152), (77, 124, 151), (74, 120, 148),
+ (71, 115, 143), (67, 106, 134), (61, 95, 124), (53, 86, 116),
+ (45, 76, 106), (39, 67, 96), (35, 61, 88), (33, 59, 84),
+ (34, 58, 83), (37, 57, 85), (41, 62, 90), (46, 68, 97),
+ (52, 75, 104), (60, 83, 111), (66, 93, 119), (75, 106, 130),
+ (83, 116, 141), (92, 128, 153), (101, 139, 165), (110, 148, 175),
+ (117, 154, 184), (120, 158, 189), (121, 161, 191), (118, 160, 190),
+ (113, 158, 188), (109, 154, 184), (107, 152, 180), (107, 150, 178),
+ (109, 151, 180), (109, 151, 179), (99, 141, 169), (89, 133, 162),
+ (79, 125, 154), (72, 120, 148), (68, 115, 143), (72, 117, 145)
+ ),
+
+// 417 040221-60
+((75, 85, 97), (43, 46, 51), (39, 42, 47), (36, 39, 44),
+ (34, 36, 38), (33, 34, 33), (32, 32, 32), (31, 31, 31),
+ (27, 28, 28), (25, 26, 25), (23, 24, 23), (18, 20, 19),
+ (14, 16, 16), (11, 12, 12), (8, 9, 8), (7, 8, 7),
+ (6, 7, 7), (10, 11, 13), (16, 18, 19), (23, 26, 26),
+ (32, 35, 35), (42, 44, 44), (46, 48, 47), (50, 53, 51),
+ (63, 65, 63), (65, 67, 66), (67, 69, 69), (66, 68, 69),
+ (65, 68, 69), (65, 68, 69), (66, 68, 70), (67, 69, 71),
+ (67, 71, 76), (69, 74, 82), (67, 73, 83), (65, 72, 85),
+ (60, 68, 82), (55, 65, 79), (52, 63, 76), (50, 61, 74),
+ (54, 58, 65), (58, 62, 67), (63, 67, 70), (70, 73, 74),
+ (78, 79, 78), (79, 81, 80), (81, 83, 83), (84, 85, 86),
+ (88, 89, 89), (96, 98, 100), (102, 105, 105), (109, 112, 111),
+ (113, 116, 116), (118, 121, 122), (119, 122, 122), (120, 123, 123),
+ (117, 120, 119), (114, 116, 115), (111, 113, 111), (107, 109, 107),
+ (103, 105, 104), (100, 102, 101), (98, 100, 99), (94, 95, 95),
+ (87, 89, 89), (71, 73, 72), (63, 65, 64), (55, 57, 57),
+ (52, 54, 54), (50, 52, 51), (49, 51, 50), (50, 51, 50),
+ (65, 66, 65), (77, 78, 77), (90, 91, 90), (103, 105, 104),
+ (117, 119, 118), (124, 126, 124), (131, 133, 131), (139, 142, 140),
+ (149, 154, 154), (160, 166, 171), (157, 164, 168), (154, 162, 165),
+ (151, 159, 164), (148, 156, 163), (142, 150, 152), (134, 138, 137),
+ (123, 127, 128), (116, 119, 120), (109, 111, 112), (104, 106, 107),
+ (100, 102, 103), (88, 89, 89), (73, 74, 74), (60, 60, 62),
+ (46, 48, 51), (25, 30, 37), (24, 31, 39), (24, 32, 41),
+ (23, 32, 43), (23, 33, 46), (22, 35, 49), (30, 39, 47),
+ (27, 33, 41), (27, 31, 35), (28, 29, 29), (28, 28, 28),
+ (28, 28, 28), (29, 30, 29), (31, 33, 31), (35, 37, 36),
+ (40, 42, 42), (47, 48, 49), (47, 48, 49), (47, 49, 49),
+ (45, 47, 48), (44, 45, 45), (41, 42, 42), (37, 38, 37),
+ (29, 31, 30), (26, 28, 27), (24, 25, 24), (22, 23, 22),
+ (20, 22, 21), (17, 19, 18), (14, 14, 14), (11, 11, 11),
+ (8, 9, 10), (4, 5, 12), (5, 6, 12), (7, 8, 13),
+ (6, 7, 15), (7, 7, 15), (9, 9, 13), (10, 10, 13),
+ (10, 11, 15), (12, 13, 18), (14, 16, 22), (16, 18, 24),
+ (19, 21, 27), (25, 28, 32), (32, 35, 39), (41, 45, 49),
+ (51, 57, 62), (86, 91, 98), (96, 103, 113), (107, 115, 128),
+ (134, 142, 152), (168, 175, 181), (185, 194, 205), (188, 198, 208),
+ (197, 203, 207), (184, 191, 197), (171, 179, 187), (157, 166, 176),
+ (150, 156, 161), (145, 150, 155), (144, 151, 158), (153, 159, 162),
+ (165, 167, 167), (171, 179, 185), (168, 176, 183), (166, 174, 182),
+ (152, 162, 170), (137, 148, 157), (123, 131, 140), (106, 112, 119),
+ (84, 85, 85), (78, 79, 79), (73, 74, 74), (65, 66, 66),
+ (61, 63, 62), (59, 60, 60), (58, 59, 59), (59, 61, 61),
+ (62, 63, 64), (64, 66, 66), (66, 68, 68), (68, 70, 70),
+ (69, 71, 73), (70, 73, 74), (73, 75, 75), (73, 76, 77),
+ (76, 79, 80), (76, 79, 80), (77, 79, 80), (77, 81, 82),
+ (78, 82, 81), (78, 80, 79), (77, 79, 77), (74, 77, 75),
+ (71, 72, 71), (67, 68, 67), (63, 64, 64), (59, 60, 60),
+ (53, 55, 54), (47, 49, 48), (44, 45, 44), (38, 40, 37),
+ (31, 32, 30), (26, 28, 25), (21, 23, 20), (15, 16, 14),
+ (9, 11, 10), (6, 7, 6), (3, 4, 3), (0, 2, 2),
+ (1, 2, 2), (3, 3, 3), (6, 6, 7), (9, 9, 11),
+ (12, 13, 14), (15, 16, 16), (18, 18, 19), (19, 20, 21),
+ (21, 21, 21), (21, 22, 22), (21, 22, 24), (21, 22, 24),
+ (19, 20, 22), (18, 19, 21), (15, 15, 17), (10, 11, 13),
+ (8, 9, 10), (6, 6, 6), (4, 5, 5), (5, 6, 8),
+ (7, 8, 11), (9, 9, 11), (11, 12, 13), (11, 12, 14),
+ (9, 9, 10), (7, 8, 7), (5, 6, 5), (4, 4, 4),
+ (5, 6, 5), (10, 11, 10), (16, 17, 16), (26, 27, 26),
+ (38, 40, 38), (51, 53, 51), (62, 64, 62), (73, 75, 74),
+ (82, 85, 85), (83, 89, 92), (85, 92, 96), (88, 96, 104),
+ (87, 96, 105), (88, 96, 102), (93, 101, 107), (97, 104, 112),
+ (102, 109, 117), (105, 113, 121), (90, 98, 104), (77, 84, 93)
+ ),
+
+// 418 040221-61
+((180, 138, 160), (170, 104, 140), (171, 86, 137), (173, 68, 134),
+ (158, 75, 133), (144, 82, 132), (138, 87, 130), (133, 92, 128),
+ (105, 93, 109), (80, 89, 100), (55, 85, 91), (39, 86, 82),
+ (24, 88, 74), (23, 88, 68), (23, 88, 63), (27, 85, 64),
+ (32, 82, 65), (59, 70, 74), (76, 63, 72), (93, 57, 71),
+ (114, 45, 74), (136, 34, 77), (148, 28, 80), (161, 23, 84),
+ (199, 13, 94), (205, 10, 96), (212, 7, 98), (211, 8, 105),
+ (210, 10, 112), (207, 13, 115), (204, 16, 118), (198, 20, 120),
+ (185, 23, 115), (159, 29, 103), (148, 31, 99), (138, 34, 95),
+ (124, 37, 94), (111, 41, 93), (105, 43, 90), (99, 46, 88),
+ (77, 61, 78), (73, 67, 81), (70, 73, 84), (81, 85, 93),
+ (93, 98, 103), (100, 103, 107), (107, 108, 111), (124, 123, 123),
+ (140, 133, 139), (184, 160, 161), (187, 162, 164), (190, 165, 168),
+ (182, 158, 167), (174, 151, 166), (172, 146, 165), (171, 141, 165),
+ (152, 102, 142), (133, 88, 128), (115, 74, 115), (103, 58, 110),
+ (92, 43, 105), (88, 38, 104), (85, 33, 104), (79, 36, 99),
+ (68, 43, 88), (37, 59, 67), (29, 61, 65), (22, 63, 64),
+ (22, 62, 62), (22, 62, 61), (18, 61, 57), (18, 62, 55),
+ (18, 58, 63), (17, 53, 71), (16, 48, 80), (14, 47, 84),
+ (13, 47, 88), (12, 50, 89), (11, 53, 91), (11, 60, 91),
+ (10, 69, 91), (11, 86, 87), (11, 96, 89), (11, 106, 92),
+ (12, 111, 94), (13, 117, 96), (15, 125, 96), (18, 130, 93),
+ (24, 127, 83), (27, 124, 82), (31, 121, 82), (33, 118, 79),
+ (36, 116, 77), (39, 108, 67), (44, 100, 55), (44, 94, 46),
+ (44, 90, 42), (47, 92, 47), (48, 100, 52), (50, 109, 57),
+ (50, 117, 58), (51, 125, 60), (52, 135, 68), (54, 148, 79),
+ (61, 141, 96), (64, 133, 97), (68, 126, 99), (72, 124, 100),
+ (77, 122, 102), (92, 108, 99), (107, 86, 100), (118, 61, 97),
+ (131, 39, 95), (154, 20, 91), (160, 18, 89), (166, 16, 88),
+ (174, 12, 84), (177, 9, 79), (174, 11, 73), (160, 17, 68),
+ (137, 28, 61), (133, 28, 57), (130, 29, 53), (127, 30, 51),
+ (125, 31, 49), (119, 34, 47), (121, 34, 49), (126, 34, 52),
+ (138, 31, 57), (153, 27, 65), (154, 28, 65), (155, 29, 66),
+ (154, 40, 65), (155, 55, 67), (144, 69, 76), (128, 80, 81),
+ (98, 83, 87), (100, 84, 82), (103, 86, 78), (102, 86, 75),
+ (101, 86, 73), (91, 79, 70), (78, 74, 69), (76, 68, 68),
+ (78, 66, 62), (74, 71, 53), (70, 76, 53), (66, 81, 53),
+ (54, 88, 57), (46, 97, 56), (41, 103, 53), (40, 105, 53),
+ (45, 99, 58), (45, 95, 59), (45, 91, 61), (46, 82, 60),
+ (45, 74, 60), (40, 65, 61), (39, 59, 63), (34, 52, 70),
+ (29, 50, 72), (23, 49, 78), (24, 48, 79), (25, 48, 81),
+ (34, 47, 90), (47, 47, 96), (61, 48, 100), (71, 49, 104),
+ (85, 49, 114), (88, 47, 117), (92, 46, 121), (97, 45, 124),
+ (101, 46, 124), (100, 52, 114), (97, 66, 108), (90, 77, 101),
+ (81, 85, 95), (76, 86, 92), (74, 82, 81), (82, 84, 73),
+ (88, 81, 63), (89, 82, 59), (85, 78, 60), (75, 71, 62),
+ (74, 56, 66), (73, 54, 66), (73, 53, 67), (72, 51, 66),
+ (68, 54, 65), (69, 60, 62), (74, 67, 58), (80, 68, 56),
+ (87, 66, 56), (93, 62, 61), (106, 56, 61), (117, 56, 61),
+ (126, 55, 63), (129, 54, 68), (122, 59, 78), (114, 62, 83),
+ (106, 71, 86), (94, 81, 89), (84, 87, 91), (74, 102, 100),
+ (63, 116, 104), (58, 130, 105), (55, 138, 108), (62, 131, 106),
+ (79, 120, 107), (94, 108, 106), (103, 97, 100), (105, 88, 91),
+ (109, 78, 81), (116, 68, 70), (124, 62, 61), (121, 59, 54),
+ (108, 62, 47), (90, 67, 47), (74, 74, 45), (67, 84, 49),
+ (61, 87, 58), (62, 88, 65), (63, 86, 79), (63, 80, 87),
+ (63, 81, 92), (62, 76, 96), (63, 70, 95), (66, 65, 101),
+ (68, 59, 105), (63, 61, 106), (57, 63, 106), (48, 66, 100),
+ (42, 69, 95), (38, 71, 91), (31, 72, 89), (29, 73, 88),
+ (25, 74, 87), (26, 76, 86), (25, 78, 83), (20, 80, 82),
+ (21, 85, 84), (24, 88, 88), (34, 96, 95), (54, 107, 101),
+ (71, 122, 117), (95, 144, 136), (121, 161, 154), (141, 178, 172),
+ (170, 191, 182), (192, 204, 196), (201, 214, 205), (200, 221, 205),
+ (196, 203, 203), (193, 180, 188), (196, 160, 178), (193, 132, 171)
+ ),
+
+// 419 040221-62
+((110, 59, 34), (88, 44, 25), (79, 35, 26), (70, 27, 28),
+ (65, 26, 30), (60, 26, 33), (58, 26, 34), (56, 27, 36),
+ (52, 21, 43), (54, 24, 45), (56, 28, 48), (62, 33, 50),
+ (68, 38, 53), (80, 45, 51), (93, 53, 50), (98, 57, 49),
+ (103, 61, 49), (127, 80, 43), (129, 79, 38), (132, 79, 33),
+ (130, 75, 27), (128, 72, 22), (124, 70, 22), (121, 68, 22),
+ (104, 53, 20), (100, 49, 22), (97, 46, 25), (95, 47, 28),
+ (93, 49, 31), (94, 49, 33), (95, 50, 35), (96, 51, 39),
+ (97, 49, 43), (98, 57, 50), (103, 65, 56), (109, 74, 62),
+ (117, 81, 66), (125, 89, 71), (128, 93, 71), (132, 98, 71),
+ (150, 115, 69), (156, 117, 68), (163, 119, 67), (168, 120, 63),
+ (174, 122, 60), (176, 124, 60), (179, 127, 61), (182, 131, 66),
+ (180, 131, 71), (168, 125, 81), (164, 119, 79), (161, 114, 78),
+ (152, 105, 75), (143, 96, 72), (139, 92, 68), (135, 88, 65),
+ (117, 65, 52), (107, 56, 47), (98, 48, 43), (88, 41, 41),
+ (78, 35, 40), (74, 33, 40), (70, 31, 40), (64, 28, 37),
+ (61, 28, 35), (61, 31, 36), (63, 31, 37), (65, 32, 38),
+ (67, 32, 38), (70, 33, 39), (75, 36, 41), (81, 39, 42),
+ (92, 45, 43), (96, 48, 43), (100, 52, 44), (101, 55, 45),
+ (102, 58, 46), (102, 57, 45), (102, 57, 44), (98, 54, 43),
+ (94, 49, 42), (80, 35, 32), (74, 30, 30), (69, 25, 28),
+ (67, 23, 27), (65, 22, 27), (64, 21, 24), (63, 20, 23),
+ (71, 30, 28), (82, 38, 29), (93, 46, 31), (97, 50, 32),
+ (102, 54, 33), (112, 62, 36), (119, 69, 41), (128, 74, 48),
+ (133, 79, 52), (133, 85, 56), (128, 82, 58), (124, 80, 61),
+ (122, 77, 59), (120, 75, 58), (115, 71, 51), (111, 66, 44),
+ (101, 58, 39), (100, 53, 38), (99, 49, 37), (98, 47, 38),
+ (97, 46, 39), (89, 44, 42), (82, 40, 45), (76, 39, 47),
+ (72, 35, 49), (70, 33, 51), (72, 35, 53), (74, 37, 55),
+ (79, 42, 60), (88, 49, 63), (103, 60, 69), (116, 70, 76),
+ (125, 78, 79), (126, 80, 78), (127, 82, 77), (128, 81, 73),
+ (130, 81, 70), (130, 79, 64), (133, 81, 62), (136, 87, 65),
+ (148, 98, 72), (178, 132, 101), (181, 138, 106), (185, 145, 111),
+ (191, 152, 122), (195, 161, 131), (199, 170, 141), (197, 173, 144),
+ (178, 150, 131), (168, 142, 120), (159, 134, 110), (152, 127, 103),
+ (146, 120, 96), (128, 100, 80), (114, 82, 62), (100, 68, 48),
+ (92, 55, 37), (77, 34, 24), (74, 32, 22), (71, 31, 21),
+ (70, 28, 25), (75, 35, 33), (80, 40, 40), (83, 46, 45),
+ (83, 50, 51), (83, 50, 50), (83, 51, 49), (81, 46, 43),
+ (78, 39, 36), (74, 36, 32), (72, 36, 31), (71, 36, 31),
+ (75, 37, 36), (99, 65, 57), (108, 77, 65), (118, 89, 74),
+ (141, 112, 100), (169, 141, 120), (192, 166, 138), (203, 184, 148),
+ (210, 193, 164), (211, 193, 164), (213, 193, 165), (208, 190, 161),
+ (205, 182, 156), (197, 174, 155), (196, 171, 154), (194, 170, 151),
+ (199, 171, 148), (196, 170, 144), (192, 167, 141), (186, 159, 134),
+ (184, 153, 120), (182, 146, 106), (176, 142, 97), (172, 136, 96),
+ (188, 149, 104), (196, 158, 109), (205, 167, 115), (217, 180, 127),
+ (222, 187, 136), (223, 190, 144), (227, 192, 144), (227, 189, 135),
+ (223, 178, 117), (212, 166, 105), (194, 146, 87), (172, 123, 68),
+ (151, 100, 49), (134, 84, 41), (116, 70, 35), (95, 55, 30),
+ (76, 40, 27), (63, 32, 26), (54, 27, 26), (49, 22, 25),
+ (47, 17, 22), (52, 17, 21), (54, 18, 23), (56, 21, 27),
+ (56, 20, 29), (63, 21, 31), (68, 25, 34), (73, 33, 43),
+ (77, 43, 52), (85, 55, 61), (94, 63, 63), (104, 69, 67),
+ (110, 74, 69), (112, 79, 72), (114, 79, 70), (114, 77, 68),
+ (113, 71, 64), (109, 67, 61), (106, 62, 59), (105, 60, 59),
+ (107, 62, 60), (113, 67, 60), (123, 73, 60), (134, 80, 61),
+ (143, 88, 61), (148, 92, 62), (154, 95, 63), (157, 99, 63),
+ (161, 101, 64), (161, 102, 69), (160, 102, 77), (158, 105, 84),
+ (160, 110, 91), (158, 115, 97), (156, 118, 101), (154, 120, 104),
+ (156, 123, 105), (151, 119, 98), (141, 111, 86), (130, 98, 76),
+ (121, 87, 67), (114, 73, 56), (108, 62, 45), (106, 54, 39),
+ (106, 52, 36), (109, 52, 35), (112, 55, 34), (119, 59, 36),
+ (129, 70, 38), (126, 68, 36), (117, 63, 32), (107, 54, 31)
+ ),
+
+// 420 040221-63
+((85, 103, 82), (86, 117, 97), (88, 122, 104), (90, 127, 111),
+ (88, 126, 111), (86, 126, 112), (92, 134, 119), (99, 143, 127),
+ (127, 168, 149), (137, 171, 152), (147, 174, 155), (146, 167, 150),
+ (145, 161, 146), (139, 150, 136), (133, 139, 127), (127, 132, 121),
+ (122, 125, 115), (105, 95, 86), (90, 77, 68), (76, 60, 51),
+ (62, 45, 38), (49, 31, 25), (41, 25, 20), (34, 19, 15),
+ (17, 8, 6), (11, 6, 3), (6, 4, 1), (5, 6, 1),
+ (4, 8, 2), (4, 9, 2), (5, 10, 3), (7, 12, 6),
+ (10, 14, 7), (13, 17, 7), (14, 17, 7), (15, 17, 7),
+ (14, 17, 7), (14, 18, 7), (14, 17, 7), (15, 17, 8),
+ (15, 20, 9), (16, 23, 12), (18, 26, 16), (19, 33, 20),
+ (21, 40, 25), (23, 43, 27), (25, 47, 30), (30, 54, 36),
+ (37, 63, 43), (61, 84, 64), (74, 99, 80), (88, 115, 96),
+ (101, 130, 111), (114, 146, 126), (116, 152, 131), (119, 158, 136),
+ (129, 169, 148), (131, 170, 152), (134, 171, 157), (134, 169, 154),
+ (135, 167, 152), (132, 164, 148), (129, 162, 145), (120, 154, 137),
+ (110, 142, 125), (88, 114, 98), (80, 101, 85), (73, 89, 73),
+ (69, 84, 67), (66, 80, 62), (63, 75, 57), (63, 74, 55),
+ (63, 79, 61), (64, 84, 67), (66, 90, 74), (67, 98, 82),
+ (69, 106, 90), (71, 111, 95), (74, 117, 100), (81, 131, 113),
+ (89, 145, 127), (104, 168, 150), (106, 173, 156), (108, 178, 162),
+ (108, 179, 163), (109, 180, 164), (110, 182, 165), (111, 183, 166),
+ (113, 186, 169), (114, 188, 171), (115, 190, 173), (115, 191, 174),
+ (116, 192, 176), (116, 194, 178), (117, 197, 179), (120, 199, 181),
+ (124, 202, 184), (127, 205, 187), (122, 204, 185), (117, 203, 183),
+ (113, 200, 179), (109, 197, 175), (102, 188, 163), (97, 177, 150),
+ (83, 151, 125), (73, 135, 111), (64, 120, 98), (56, 111, 91),
+ (49, 102, 84), (36, 85, 67), (24, 67, 49), (14, 51, 34),
+ (9, 39, 23), (10, 24, 13), (11, 25, 15), (13, 26, 18),
+ (19, 34, 27), (29, 44, 37), (39, 56, 48), (53, 69, 61),
+ (78, 96, 86), (87, 112, 100), (97, 128, 115), (103, 136, 123),
+ (109, 145, 132), (116, 163, 148), (127, 178, 164), (140, 191, 176),
+ (149, 202, 188), (160, 217, 204), (162, 220, 207), (164, 223, 211),
+ (165, 228, 218), (167, 232, 223), (174, 235, 227), (182, 237, 230),
+ (199, 241, 237), (204, 243, 239), (209, 245, 242), (209, 245, 242),
+ (209, 246, 243), (211, 246, 243), (211, 246, 244), (212, 245, 242),
+ (213, 244, 240), (214, 235, 231), (212, 231, 226), (211, 228, 222),
+ (205, 220, 211), (198, 212, 202), (188, 205, 194), (176, 201, 186),
+ (162, 192, 174), (158, 189, 171), (155, 187, 169), (150, 180, 160),
+ (145, 173, 153), (139, 168, 149), (132, 170, 148), (128, 173, 149),
+ (126, 177, 154), (121, 178, 156), (120, 175, 153), (120, 173, 151),
+ (119, 163, 144), (116, 154, 134), (112, 145, 125), (111, 138, 118),
+ (123, 127, 105), (128, 126, 104), (133, 125, 104), (142, 121, 103),
+ (151, 119, 100), (154, 117, 97), (154, 116, 96), (149, 113, 94),
+ (147, 111, 88), (148, 112, 91), (146, 118, 96), (149, 126, 104),
+ (151, 137, 113), (149, 146, 123), (139, 150, 128), (126, 146, 123),
+ (97, 127, 104), (90, 121, 98), (83, 115, 93), (71, 106, 83),
+ (62, 99, 78), (53, 95, 76), (47, 93, 74), (44, 91, 71),
+ (44, 92, 72), (51, 94, 76), (59, 98, 81), (70, 106, 88),
+ (82, 117, 102), (97, 129, 117), (110, 143, 131), (124, 158, 148),
+ (138, 174, 164), (151, 189, 179), (164, 205, 193), (175, 219, 208),
+ (189, 231, 221), (201, 240, 232), (211, 246, 240), (218, 250, 246),
+ (220, 251, 249), (219, 251, 247), (213, 249, 245), (206, 247, 241),
+ (202, 244, 236), (198, 239, 229), (195, 234, 222), (188, 226, 214),
+ (179, 213, 199), (164, 198, 184), (146, 182, 167), (130, 165, 150),
+ (115, 148, 132), (103, 135, 117), (92, 123, 104), (84, 113, 91),
+ (77, 105, 83), (69, 100, 78), (65, 97, 76), (64, 94, 76),
+ (67, 94, 78), (68, 95, 79), (69, 97, 79), (70, 96, 79),
+ (69, 95, 77), (66, 93, 75), (63, 90, 73), (63, 88, 73),
+ (61, 85, 71), (61, 81, 67), (59, 75, 61), (56, 67, 53),
+ (52, 58, 42), (47, 49, 33), (45, 41, 25), (42, 36, 20),
+ (44, 34, 19), (51, 38, 23), (58, 47, 30), (67, 56, 39),
+ (81, 75, 57), (94, 87, 69), (90, 84, 66), (83, 80, 63),
+ (81, 76, 61), (76, 75, 59), (68, 71, 53), (70, 80, 63)
+ ),
+
+// 421 040221-64
+((54, 109, 89), (32, 97, 71), (21, 80, 59), (11, 64, 47),
+ (19, 75, 44), (28, 87, 41), (38, 95, 42), (48, 104, 43),
+ (79, 124, 50), (84, 121, 52), (89, 118, 55), (90, 113, 53),
+ (91, 108, 51), (84, 96, 45), (77, 85, 39), (73, 78, 35),
+ (69, 72, 32), (53, 47, 19), (55, 47, 17), (57, 47, 16),
+ (69, 53, 13), (81, 60, 10), (84, 59, 7), (87, 59, 5),
+ (78, 56, 6), (74, 54, 8), (71, 53, 11), (59, 44, 12),
+ (47, 36, 13), (37, 31, 13), (27, 26, 14), (14, 21, 17),
+ (5, 20, 21), (1, 26, 31), (2, 28, 32), (3, 31, 33),
+ (3, 37, 29), (3, 44, 26), (3, 48, 25), (3, 52, 24),
+ (4, 64, 25), (10, 69, 33), (17, 75, 42), (30, 86, 57),
+ (44, 97, 73), (50, 102, 80), (57, 108, 88), (64, 113, 100),
+ (67, 109, 108), (70, 93, 115), (66, 87, 109), (63, 81, 104),
+ (51, 69, 88), (40, 58, 72), (34, 52, 62), (28, 46, 53),
+ (18, 33, 25), (22, 31, 19), (27, 29, 13), (32, 32, 11),
+ (38, 36, 10), (42, 39, 8), (46, 42, 7), (52, 48, 5),
+ (59, 48, 4), (73, 52, 7), (78, 57, 9), (83, 62, 12),
+ (82, 63, 13), (81, 64, 14), (82, 65, 16), (75, 68, 21),
+ (61, 65, 24), (52, 60, 21), (44, 56, 19), (34, 57, 19),
+ (24, 59, 19), (20, 59, 19), (17, 59, 19), (11, 58, 19),
+ (11, 56, 17), (12, 54, 22), (12, 51, 25), (12, 48, 28),
+ (12, 45, 30), (12, 42, 32), (10, 36, 37), (9, 33, 43),
+ (11, 33, 46), (13, 38, 50), (16, 43, 55), (21, 50, 61),
+ (26, 58, 67), (41, 71, 72), (54, 81, 71), (68, 90, 70),
+ (71, 90, 67), (73, 99, 67), (70, 99, 58), (68, 99, 50),
+ (64, 96, 46), (61, 94, 43), (51, 91, 42), (42, 89, 42),
+ (35, 85, 50), (39, 89, 64), (43, 94, 78), (43, 95, 83),
+ (44, 97, 88), (51, 94, 96), (53, 87, 101), (60, 82, 109),
+ (69, 82, 116), (88, 93, 114), (93, 96, 111), (99, 99, 109),
+ (109, 105, 104), (116, 113, 103), (126, 111, 99), (138, 113, 89),
+ (165, 117, 71), (164, 110, 66), (163, 103, 61), (160, 100, 59),
+ (157, 97, 57), (153, 93, 53), (153, 100, 53), (156, 108, 52),
+ (160, 111, 58), (169, 132, 81), (168, 139, 92), (168, 147, 103),
+ (169, 163, 123), (174, 172, 139), (171, 171, 145), (179, 172, 142),
+ (166, 153, 136), (151, 141, 128), (136, 130, 121), (129, 124, 110),
+ (123, 119, 100), (110, 110, 78), (98, 103, 67), (97, 97, 61),
+ (96, 101, 75), (116, 123, 107), (122, 134, 113), (129, 145, 119),
+ (147, 156, 130), (164, 165, 136), (172, 169, 144), (182, 168, 146),
+ (187, 170, 126), (185, 165, 115), (184, 161, 105), (169, 151, 85),
+ (148, 135, 70), (124, 120, 54), (101, 110, 46), (82, 99, 43),
+ (70, 93, 38), (45, 87, 43), (39, 85, 43), (34, 84, 44),
+ (23, 77, 49), (17, 68, 51), (12, 65, 53), (8, 60, 55),
+ (4, 58, 55), (6, 58, 57), (8, 59, 60), (13, 70, 71),
+ (12, 83, 85), (11, 96, 101), (8, 111, 110), (9, 124, 115),
+ (16, 137, 114), (22, 145, 116), (25, 146, 120), (20, 146, 119),
+ (16, 142, 120), (13, 138, 107), (16, 134, 94), (23, 126, 84),
+ (23, 116, 80), (21, 111, 84), (19, 107, 88), (17, 102, 89),
+ (18, 96, 89), (22, 100, 92), (25, 106, 90), (25, 100, 97),
+ (25, 89, 94), (22, 75, 88), (19, 61, 81), (17, 57, 73),
+ (13, 51, 70), (12, 44, 67), (10, 38, 64), (6, 28, 60),
+ (4, 22, 59), (4, 19, 61), (8, 22, 62), (19, 32, 63),
+ (31, 41, 61), (45, 50, 55), (62, 62, 52), (78, 79, 53),
+ (102, 104, 59), (125, 126, 69), (152, 145, 79), (167, 157, 80),
+ (172, 166, 87), (165, 175, 92), (149, 173, 90), (143, 168, 95),
+ (131, 153, 84), (121, 136, 79), (101, 118, 71), (71, 95, 56),
+ (46, 74, 46), (29, 52, 35), (21, 38, 34), (21, 30, 37),
+ (20, 27, 43), (19, 27, 49), (21, 30, 56), (20, 33, 66),
+ (23, 41, 74), (22, 45, 77), (23, 49, 77), (24, 55, 75),
+ (23, 52, 73), (23, 50, 70), (19, 43, 64), (14, 35, 57),
+ (9, 31, 52), (5, 28, 45), (2, 25, 41), (6, 20, 34),
+ (15, 14, 28), (25, 10, 24), (41, 16, 18), (49, 24, 16),
+ (56, 32, 16), (59, 38, 21), (61, 38, 33), (72, 45, 44),
+ (81, 56, 60), (90, 76, 71), (93, 104, 86), (88, 120, 104),
+ (73, 114, 111), (63, 102, 114), (57, 88, 106), (51, 92, 94)
+ ),
+// 422 040221-71
+((211, 208, 193), (203, 195, 204), (204, 193, 210), (206, 191, 216),
+ (206, 191, 220), (207, 191, 225), (203, 190, 227), (199, 190, 229),
+ (187, 189, 241), (178, 185, 240), (170, 181, 239), (165, 180, 234),
+ (161, 180, 230), (162, 177, 218), (163, 174, 206), (163, 171, 195),
+ (164, 169, 185), (167, 143, 149), (158, 132, 143), (150, 122, 138),
+ (142, 115, 134), (134, 109, 131), (130, 104, 128), (126, 100, 126),
+ (115, 88, 119), (108, 91, 124), (102, 95, 130), (89, 97, 133),
+ (77, 100, 137), (73, 97, 135), (70, 94, 134), (63, 85, 131),
+ (64, 79, 125), (82, 76, 98), (87, 76, 82), (93, 77, 67),
+ (92, 66, 60), (92, 56, 54), (92, 52, 55), (92, 49, 56),
+ (103, 46, 68), (116, 55, 76), (129, 64, 84), (145, 78, 101),
+ (161, 92, 118), (165, 101, 128), (170, 111, 139), (182, 129, 159),
+ (194, 146, 180), (216, 178, 204), (223, 192, 213), (231, 207, 223),
+ (231, 217, 229), (231, 227, 235), (230, 230, 237), (230, 233, 240),
+ (220, 237, 244), (215, 235, 244), (210, 234, 245), (205, 230, 244),
+ (201, 226, 244), (199, 223, 241), (198, 220, 238), (191, 213, 227),
+ (182, 203, 210), (172, 185, 175), (174, 180, 157), (176, 176, 140),
+ (179, 173, 130), (182, 171, 121), (184, 164, 99), (183, 153, 77),
+ (166, 126, 40), (169, 126, 34), (173, 126, 29), (186, 131, 38),
+ (199, 136, 47), (202, 136, 54), (205, 137, 62), (203, 135, 79),
+ (201, 138, 90), (197, 153, 110), (207, 161, 113), (218, 169, 117),
+ (221, 168, 118), (224, 168, 120), (220, 158, 124), (211, 151, 126),
+ (180, 147, 127), (167, 148, 126), (154, 149, 125), (148, 147, 126),
+ (143, 145, 128), (136, 140, 137), (127, 139, 151), (113, 136, 170),
+ (103, 135, 188), (93, 146, 213), (95, 153, 222), (97, 161, 232),
+ (96, 163, 235), (95, 165, 239), (95, 165, 244), (89, 163, 245),
+ (107, 152, 244), (124, 151, 240), (141, 150, 236), (148, 147, 232),
+ (155, 145, 228), (160, 149, 218), (168, 147, 211), (179, 144, 196),
+ (198, 138, 185), (223, 116, 158), (227, 114, 152), (232, 113, 146),
+ (236, 112, 138), (237, 115, 123), (238, 116, 109), (239, 119, 91),
+ (226, 95, 80), (219, 88, 86), (212, 81, 93), (210, 83, 92),
+ (209, 86, 92), (211, 100, 78), (216, 104, 63), (217, 108, 53),
+ (216, 110, 52), (210, 99, 78), (206, 100, 83), (202, 102, 88),
+ (196, 105, 93), (188, 108, 90), (171, 111, 87), (156, 108, 92),
+ (125, 94, 116), (116, 99, 136), (108, 104, 157), (102, 108, 164),
+ (97, 112, 171), (92, 122, 181), (86, 129, 187), (83, 133, 192),
+ (85, 142, 202), (114, 175, 226), (124, 185, 231), (134, 195, 236),
+ (154, 212, 246), (172, 221, 250), (184, 228, 251), (194, 230, 251),
+ (208, 224, 247), (213, 221, 246), (219, 219, 245), (230, 220, 242),
+ (238, 223, 241), (243, 226, 241), (243, 230, 242), (237, 225, 243),
+ (225, 210, 241), (194, 192, 235), (186, 187, 233), (178, 183, 232),
+ (158, 181, 231), (145, 185, 234), (133, 182, 237), (126, 180, 239),
+ (125, 176, 240), (123, 174, 240), (122, 172, 240), (124, 171, 236),
+ (125, 171, 235), (125, 172, 233), (124, 176, 235), (127, 176, 236),
+ (126, 177, 241), (122, 176, 242), (116, 173, 240), (107, 172, 235),
+ (97, 169, 229), (89, 162, 222), (85, 160, 217), (86, 162, 216),
+ (98, 162, 212), (102, 165, 213), (106, 169, 215), (116, 169, 216),
+ (127, 171, 217), (138, 180, 218), (155, 188, 220), (167, 192, 219),
+ (177, 202, 225), (187, 207, 231), (196, 210, 236), (200, 217, 241),
+ (207, 226, 244), (212, 230, 241), (216, 237, 240), (220, 243, 237),
+ (227, 245, 234), (230, 247, 230), (232, 246, 227), (233, 242, 224),
+ (229, 237, 221), (222, 235, 218), (213, 229, 219), (203, 226, 219),
+ (190, 221, 217), (186, 215, 214), (182, 208, 209), (180, 208, 201),
+ (176, 205, 197), (176, 206, 194), (170, 206, 193), (169, 208, 195),
+ (171, 206, 200), (174, 208, 200), (178, 209, 201), (182, 211, 197),
+ (187, 209, 191), (197, 212, 175), (206, 212, 163), (213, 211, 156),
+ (217, 214, 161), (215, 218, 167), (212, 218, 176), (214, 219, 173),
+ (218, 223, 167), (225, 222, 161), (229, 225, 165), (231, 231, 176),
+ (227, 235, 195), (224, 236, 214), (220, 239, 226), (220, 238, 230),
+ (219, 235, 233), (218, 235, 234), (217, 234, 234), (216, 232, 234),
+ (212, 230, 233), (211, 228, 229), (209, 225, 224), (205, 223, 217),
+ (205, 224, 211), (207, 225, 205), (209, 226, 206), (212, 228, 206),
+ (213, 229, 206), (209, 226, 202), (206, 223, 196), (207, 224, 192),
+ (210, 225, 192), (213, 225, 191), (217, 223, 192), (217, 220, 194)
+ ),
+
+// 423 040221-74
+((142, 43, 16), (162, 53, 31), (171, 64, 43), (180, 76, 56),
+ (180, 86, 68), (180, 97, 80), (177, 101, 84), (175, 106, 88),
+ (176, 117, 102), (186, 128, 114), (196, 139, 127), (208, 154, 143),
+ (220, 170, 160), (226, 182, 172), (233, 194, 184), (234, 195, 186),
+ (236, 197, 189), (237, 197, 189), (234, 192, 185), (232, 188, 182),
+ (221, 181, 174), (211, 175, 167), (206, 170, 161), (202, 166, 155),
+ (187, 144, 128), (181, 128, 112), (176, 113, 96), (164, 94, 77),
+ (153, 76, 59), (145, 67, 49), (137, 59, 40), (123, 45, 26),
+ (111, 35, 16), (100, 26, 10), (98, 25, 10), (96, 25, 10),
+ (90, 26, 12), (85, 27, 14), (81, 28, 14), (78, 30, 15),
+ (61, 39, 21), (55, 43, 22), (50, 48, 23), (49, 49, 23),
+ (49, 50, 24), (49, 49, 23), (50, 49, 23), (51, 47, 21),
+ (50, 47, 21), (52, 44, 18), (57, 41, 17), (62, 38, 17),
+ (74, 33, 14), (87, 29, 12), (94, 27, 11), (102, 25, 10),
+ (132, 16, 5), (143, 13, 5), (154, 10, 5), (160, 11, 4),
+ (167, 13, 4), (169, 14, 3), (171, 15, 3), (176, 17, 2),
+ (180, 19, 1), (186, 19, 3), (179, 20, 5), (173, 22, 8),
+ (167, 24, 9), (161, 27, 10), (151, 34, 12), (141, 42, 17),
+ (134, 58, 27), (141, 67, 38), (149, 76, 49), (155, 88, 62),
+ (162, 100, 76), (166, 108, 85), (170, 116, 94), (175, 129, 109),
+ (181, 148, 126), (206, 176, 158), (216, 188, 173), (226, 201, 189),
+ (230, 206, 196), (235, 212, 203), (241, 218, 211), (241, 223, 213),
+ (231, 208, 199), (228, 194, 184), (225, 181, 169), (224, 173, 162),
+ (224, 165, 156), (226, 148, 141), (227, 135, 126), (229, 123, 110),
+ (225, 111, 98), (217, 95, 78), (219, 95, 82), (222, 95, 86),
+ (224, 99, 91), (226, 103, 96), (236, 114, 107), (240, 124, 117),
+ (221, 135, 130), (205, 135, 134), (189, 135, 138), (180, 134, 140),
+ (171, 134, 142), (156, 132, 143), (146, 128, 140), (134, 124, 132),
+ (124, 114, 120), (95, 85, 91), (89, 79, 84), (84, 73, 77),
+ (76, 65, 68), (78, 65, 66), (85, 71, 68), (100, 81, 73),
+ (126, 101, 88), (135, 104, 89), (145, 107, 91), (148, 107, 89),
+ (152, 107, 88), (156, 106, 86), (161, 104, 84), (163, 103, 82),
+ (161, 102, 83), (157, 88, 76), (154, 83, 70), (151, 78, 65),
+ (145, 67, 51), (140, 54, 38), (136, 43, 23), (132, 36, 13),
+ (135, 38, 10), (140, 48, 18), (145, 58, 27), (149, 64, 33),
+ (153, 70, 40), (161, 80, 52), (166, 82, 61), (167, 84, 63),
+ (166, 82, 63), (150, 83, 65), (146, 85, 66), (142, 88, 68),
+ (131, 98, 73), (119, 98, 81), (107, 100, 84), (95, 96, 81),
+ (65, 70, 66), (58, 63, 60), (51, 57, 54), (41, 51, 42),
+ (35, 45, 35), (32, 42, 31), (30, 42, 27), (26, 41, 27),
+ (27, 36, 27), (28, 26, 28), (30, 23, 26), (33, 21, 25),
+ (43, 16, 21), (57, 15, 15), (68, 17, 12), (83, 20, 8),
+ (108, 29, 18), (112, 32, 21), (116, 36, 25), (127, 43, 32),
+ (139, 48, 36), (150, 52, 38), (160, 57, 34), (172, 57, 30),
+ (181, 58, 27), (189, 60, 26), (195, 64, 27), (199, 65, 28),
+ (200, 64, 30), (199, 63, 28), (199, 59, 23), (199, 52, 17),
+ (200, 43, 6), (199, 42, 4), (199, 41, 3), (196, 38, 1),
+ (191, 36, 0), (182, 32, 0), (170, 29, 0), (158, 20, 0),
+ (145, 17, 0), (132, 15, 1), (119, 13, 1), (108, 15, 3),
+ (95, 17, 5), (81, 22, 7), (71, 24, 10), (62, 23, 11),
+ (60, 23, 12), (62, 22, 11), (69, 20, 10), (83, 17, 11),
+ (96, 18, 11), (113, 21, 12), (128, 22, 13), (143, 22, 13),
+ (158, 23, 12), (169, 22, 10), (178, 18, 9), (185, 16, 10),
+ (189, 16, 18), (189, 18, 27), (188, 20, 30), (188, 24, 32),
+ (187, 28, 31), (181, 30, 28), (174, 32, 22), (162, 32, 22),
+ (145, 33, 27), (131, 35, 31), (121, 36, 35), (122, 42, 40),
+ (130, 50, 44), (144, 61, 46), (158, 73, 51), (167, 84, 61),
+ (173, 96, 77), (176, 106, 92), (178, 116, 106), (184, 126, 118),
+ (194, 136, 129), (205, 143, 137), (211, 144, 138), (211, 144, 137),
+ (204, 140, 135), (190, 133, 129), (171, 123, 121), (152, 118, 114),
+ (137, 114, 108), (121, 107, 98), (102, 97, 87), (88, 86, 76),
+ (76, 75, 63), (68, 60, 48), (63, 50, 37), (65, 48, 32),
+ (75, 49, 29), (81, 52, 28), (98, 55, 31), (110, 57, 32),
+ (122, 53, 29), (130, 48, 24), (135, 43, 21), (141, 40, 18)
+ ),
+
+// 424 040221-78
+((152, 87, 41), (157, 79, 29), (147, 70, 22), (138, 62, 16),
+ (118, 50, 14), (99, 39, 13), (96, 38, 12), (93, 37, 11),
+ (90, 32, 7), (94, 31, 5), (98, 31, 3), (104, 33, 3),
+ (110, 35, 3), (115, 38, 3), (120, 42, 4), (122, 43, 3),
+ (124, 44, 3), (137, 49, 3), (145, 51, 4), (154, 54, 5),
+ (162, 58, 7), (171, 62, 9), (172, 62, 10), (174, 63, 11),
+ (165, 60, 11), (150, 56, 12), (136, 52, 13), (123, 50, 15),
+ (111, 48, 18), (107, 47, 20), (103, 47, 22), (100, 47, 25),
+ (98, 47, 26), (99, 48, 26), (102, 51, 27), (105, 54, 28),
+ (109, 56, 30), (114, 59, 33), (116, 60, 34), (119, 62, 35),
+ (128, 64, 36), (129, 64, 35), (130, 65, 35), (127, 63, 35),
+ (125, 61, 36), (124, 61, 36), (124, 62, 37), (124, 65, 39),
+ (125, 67, 41), (125, 70, 43), (119, 68, 43), (113, 66, 43),
+ (107, 63, 41), (102, 61, 40), (99, 60, 40), (97, 59, 40),
+ (95, 61, 42), (89, 58, 39), (83, 55, 37), (74, 47, 31),
+ (65, 39, 26), (58, 35, 24), (52, 31, 22), (42, 26, 19),
+ (37, 23, 18), (28, 18, 14), (29, 17, 13), (30, 16, 12),
+ (30, 16, 11), (31, 16, 11), (32, 17, 11), (34, 20, 14),
+ (46, 30, 23), (57, 36, 25), (68, 43, 28), (79, 48, 30),
+ (90, 54, 33), (94, 56, 33), (98, 58, 34), (102, 62, 38),
+ (105, 65, 41), (113, 70, 41), (116, 70, 38), (119, 71, 36),
+ (120, 70, 34), (121, 69, 33), (120, 68, 32), (117, 65, 33),
+ (112, 61, 33), (110, 59, 31), (108, 58, 30), (106, 57, 30),
+ (105, 57, 30), (102, 57, 30), (99, 56, 30), (94, 54, 30),
+ (91, 53, 32), (87, 50, 31), (86, 48, 29), (86, 46, 27),
+ (87, 45, 26), (88, 44, 25), (88, 40, 22), (86, 36, 19),
+ (82, 31, 13), (84, 31, 12), (87, 31, 11), (91, 32, 11),
+ (95, 34, 11), (107, 38, 14), (120, 41, 17), (132, 48, 21),
+ (143, 55, 25), (161, 66, 30), (165, 70, 31), (170, 75, 32),
+ (179, 84, 36), (188, 91, 38), (196, 96, 40), (198, 101, 43),
+ (192, 97, 41), (184, 92, 38), (177, 87, 35), (171, 85, 34),
+ (166, 83, 33), (156, 78, 29), (146, 74, 29), (136, 73, 29),
+ (127, 67, 28), (112, 56, 25), (109, 53, 24), (106, 51, 24),
+ (101, 47, 22), (97, 43, 21), (93, 44, 22), (91, 44, 23),
+ (86, 42, 23), (83, 41, 22), (80, 40, 21), (78, 39, 20),
+ (77, 38, 19), (75, 37, 18), (73, 37, 18), (72, 37, 19),
+ (72, 37, 20), (70, 38, 23), (69, 38, 23), (69, 38, 23),
+ (68, 38, 23), (68, 38, 24), (68, 39, 25), (70, 40, 25),
+ (69, 40, 25), (67, 39, 24), (66, 38, 24), (60, 35, 22),
+ (54, 32, 20), (48, 29, 18), (42, 25, 17), (38, 24, 16),
+ (38, 24, 16), (43, 28, 18), (45, 30, 18), (47, 32, 19),
+ (54, 37, 20), (64, 42, 21), (75, 48, 22), (87, 54, 25),
+ (112, 66, 30), (116, 67, 30), (121, 69, 31), (127, 74, 31),
+ (134, 77, 29), (143, 80, 28), (150, 82, 27), (156, 83, 28),
+ (161, 81, 29), (164, 77, 28), (162, 73, 28), (160, 71, 23),
+ (163, 69, 19), (168, 71, 15), (176, 76, 13), (184, 82, 15),
+ (195, 91, 23), (194, 90, 24), (194, 90, 25), (196, 89, 26),
+ (194, 87, 27), (193, 85, 24), (192, 86, 23), (192, 88, 22),
+ (188, 86, 21), (179, 82, 21), (172, 77, 22), (164, 71, 22),
+ (158, 61, 20), (154, 55, 18), (156, 54, 19), (159, 57, 19),
+ (163, 62, 20), (168, 69, 25), (174, 83, 37), (181, 91, 44),
+ (187, 98, 45), (192, 104, 51), (193, 106, 55), (195, 110, 56),
+ (194, 109, 54), (192, 115, 62), (188, 115, 69), (185, 117, 66),
+ (181, 113, 66), (176, 103, 63), (173, 94, 56), (171, 78, 43),
+ (169, 66, 33), (165, 54, 29), (160, 48, 23), (155, 41, 20),
+ (150, 33, 16), (142, 30, 13), (138, 26, 10), (133, 23, 8),
+ (131, 20, 8), (125, 22, 7), (119, 22, 9), (112, 21, 10),
+ (102, 24, 11), (94, 26, 11), (87, 27, 10), (83, 27, 10),
+ (80, 27, 9), (76, 30, 10), (74, 30, 11), (75, 31, 11),
+ (76, 32, 11), (77, 34, 11), (80, 35, 11), (83, 34, 12),
+ (85, 35, 12), (84, 36, 15), (83, 37, 18), (84, 39, 22),
+ (84, 45, 26), (88, 52, 32), (94, 59, 40), (104, 67, 45),
+ (117, 77, 48), (130, 86, 48), (130, 85, 48), (129, 85, 47),
+ (129, 83, 45), (127, 83, 46), (129, 80, 46), (132, 81, 46)
+ ),
+
+// 425 040221-80
+((59, 60, 92), (51, 53, 84), (50, 51, 83), (49, 50, 83),
+ (46, 47, 81), (44, 45, 80), (43, 45, 79), (43, 45, 78),
+ (44, 45, 75), (45, 45, 76), (46, 46, 78), (46, 46, 80),
+ (47, 47, 83), (45, 46, 82), (44, 45, 82), (43, 44, 79),
+ (42, 43, 77), (36, 37, 68), (33, 34, 65), (30, 31, 62),
+ (30, 30, 61), (31, 30, 60), (32, 31, 61), (33, 33, 62),
+ (45, 45, 71), (51, 51, 79), (57, 58, 87), (64, 65, 96),
+ (72, 72, 105), (75, 76, 109), (79, 80, 114), (85, 86, 121),
+ (94, 95, 130), (108, 109, 144), (110, 111, 147), (112, 114, 151),
+ (108, 110, 149), (104, 106, 147), (101, 102, 144), (98, 99, 141),
+ (85, 85, 125), (77, 77, 116), (70, 70, 108), (62, 62, 98),
+ (54, 55, 89), (50, 50, 84), (46, 46, 80), (38, 38, 72),
+ (31, 31, 64), (26, 25, 56), (29, 27, 55), (32, 30, 55),
+ (38, 37, 59), (45, 44, 64), (48, 47, 68), (51, 50, 72),
+ (66, 66, 90), (75, 75, 100), (84, 84, 110), (93, 93, 118),
+ (103, 102, 127), (105, 104, 129), (108, 107, 132), (111, 110, 137),
+ (114, 113, 140), (124, 123, 151), (132, 131, 158), (140, 140, 165),
+ (143, 143, 168), (147, 147, 171), (154, 154, 176), (157, 158, 180),
+ (162, 162, 182), (161, 161, 181), (160, 161, 181), (156, 158, 179),
+ (153, 156, 177), (149, 152, 174), (146, 149, 171), (136, 139, 160),
+ (127, 128, 148), (104, 104, 121), (90, 90, 107), (76, 77, 93),
+ (69, 70, 85), (63, 64, 78), (51, 51, 63), (41, 41, 49),
+ (28, 27, 29), (25, 24, 23), (22, 21, 17), (21, 20, 16),
+ (21, 20, 16), (21, 21, 19), (21, 22, 23), (21, 22, 27),
+ (22, 22, 31), (22, 22, 34), (21, 20, 33), (20, 19, 32),
+ (19, 18, 32), (19, 18, 32), (19, 18, 33), (19, 18, 34),
+ (22, 21, 38), (25, 24, 41), (29, 28, 44), (31, 30, 46),
+ (34, 32, 49), (40, 37, 56), (47, 43, 62), (53, 49, 68),
+ (57, 54, 74), (63, 60, 86), (63, 61, 88), (64, 62, 91),
+ (64, 62, 96), (64, 62, 98), (64, 60, 96), (60, 58, 90),
+ (52, 50, 77), (46, 44, 68), (40, 39, 60), (36, 36, 56),
+ (33, 34, 53), (28, 28, 45), (25, 24, 37), (23, 22, 34),
+ (24, 23, 35), (29, 29, 42), (30, 31, 46), (32, 33, 51),
+ (36, 37, 59), (40, 41, 66), (42, 44, 72), (47, 49, 81),
+ (61, 63, 100), (71, 73, 112), (81, 84, 125), (87, 90, 131),
+ (94, 97, 138), (105, 108, 146), (116, 119, 155), (126, 129, 161),
+ (135, 137, 166), (151, 154, 177), (156, 159, 180), (161, 165, 184),
+ (172, 176, 192), (180, 184, 198), (186, 189, 204), (189, 191, 207),
+ (186, 189, 205), (182, 185, 202), (178, 181, 200), (172, 175, 198),
+ (164, 167, 192), (154, 158, 187), (143, 146, 179), (131, 133, 167),
+ (118, 120, 155), (88, 88, 124), (81, 81, 116), (74, 74, 108),
+ (61, 61, 95), (49, 49, 83), (37, 38, 70), (29, 28, 58),
+ (15, 15, 36), (13, 12, 31), (11, 10, 26), (8, 7, 20),
+ (7, 6, 15), (6, 5, 11), (6, 5, 10), (6, 6, 9),
+ (6, 6, 8), (7, 7, 8), (9, 8, 8), (10, 10, 8),
+ (11, 11, 8), (11, 11, 8), (10, 11, 9), (10, 11, 8),
+ (10, 11, 8), (10, 10, 8), (10, 10, 8), (10, 10, 8),
+ (9, 9, 7), (8, 9, 7), (7, 8, 6), (6, 7, 5),
+ (6, 7, 4), (5, 6, 3), (5, 6, 3), (5, 6, 2),
+ (5, 6, 2), (4, 5, 2), (4, 5, 2), (3, 4, 3),
+ (3, 4, 4), (3, 4, 6), (4, 4, 7), (4, 5, 10),
+ (5, 5, 12), (5, 6, 14), (5, 5, 16), (5, 5, 18),
+ (5, 6, 20), (5, 6, 21), (5, 6, 22), (6, 6, 23),
+ (6, 6, 25), (6, 6, 25), (5, 5, 24), (5, 5, 24),
+ (6, 6, 24), (7, 7, 25), (9, 9, 28), (13, 13, 33),
+ (18, 18, 39), (22, 23, 46), (27, 28, 53), (30, 31, 59),
+ (33, 34, 62), (34, 35, 63), (35, 36, 63), (36, 37, 62),
+ (37, 38, 61), (38, 39, 61), (39, 41, 61), (40, 42, 60),
+ (41, 42, 60), (43, 43, 61), (47, 48, 64), (54, 54, 68),
+ (63, 63, 75), (74, 74, 84), (84, 86, 93), (94, 95, 103),
+ (103, 104, 111), (110, 110, 121), (114, 114, 129), (119, 120, 138),
+ (124, 125, 146), (127, 129, 152), (128, 131, 156), (129, 132, 155),
+ (128, 130, 156), (122, 124, 152), (114, 116, 146), (103, 106, 138),
+ (92, 95, 128), (81, 84, 119), (70, 73, 107), (63, 65, 99)
+ ),
+
+// 426 040221-81
+((168, 37, 1), (168, 35, 1), (168, 30, 1), (169, 25, 1),
+ (166, 20, 2), (163, 15, 3), (161, 14, 3), (160, 14, 3),
+ (160, 22, 8), (167, 32, 15), (174, 43, 22), (179, 53, 30),
+ (185, 64, 39), (187, 71, 41), (190, 78, 44), (192, 80, 44),
+ (195, 82, 44), (208, 93, 46), (213, 98, 51), (218, 103, 57),
+ (220, 103, 58), (222, 103, 59), (220, 99, 56), (219, 96, 54),
+ (205, 76, 43), (189, 70, 42), (174, 65, 41), (165, 63, 41),
+ (156, 61, 41), (152, 59, 39), (149, 58, 38), (148, 51, 31),
+ (142, 47, 23), (128, 48, 12), (134, 52, 10), (141, 56, 9),
+ (158, 60, 8), (175, 64, 7), (182, 65, 7), (189, 67, 7),
+ (204, 75, 12), (205, 76, 15), (207, 78, 19), (197, 73, 19),
+ (187, 69, 20), (178, 65, 20), (169, 62, 20), (150, 54, 19),
+ (130, 47, 20), (116, 34, 18), (109, 28, 15), (103, 23, 12),
+ (98, 20, 9), (94, 17, 6), (92, 17, 6), (90, 18, 6),
+ (112, 16, 5), (125, 16, 5), (139, 17, 6), (145, 22, 5),
+ (152, 28, 4), (153, 29, 5), (154, 31, 7), (154, 33, 7),
+ (154, 32, 8), (148, 28, 9), (136, 30, 10), (125, 33, 12),
+ (119, 34, 13), (113, 35, 14), (107, 39, 20), (109, 46, 29),
+ (127, 67, 48), (131, 79, 57), (136, 91, 66), (138, 100, 71),
+ (141, 110, 76), (149, 113, 75), (157, 117, 75), (174, 123, 72),
+ (189, 126, 70), (201, 125, 59), (198, 119, 52), (196, 114, 45),
+ (196, 112, 41), (196, 110, 37), (197, 108, 32), (202, 111, 33),
+ (206, 119, 46), (209, 126, 58), (213, 134, 70), (215, 139, 74),
+ (218, 144, 79), (224, 153, 88), (233, 164, 97), (239, 170, 103),
+ (242, 173, 108), (244, 174, 115), (246, 173, 116), (248, 172, 118),
+ (249, 173, 119), (250, 175, 120), (252, 178, 124), (252, 184, 132),
+ (252, 195, 143), (251, 194, 144), (251, 194, 146), (251, 192, 145),
+ (251, 190, 144), (248, 186, 143), (245, 181, 138), (242, 176, 133),
+ (242, 166, 124), (242, 147, 108), (242, 144, 103), (242, 141, 98),
+ (241, 134, 88), (238, 130, 83), (238, 122, 77), (240, 118, 75),
+ (241, 110, 73), (240, 115, 73), (239, 120, 73), (238, 121, 72),
+ (238, 123, 71), (236, 125, 68), (235, 120, 66), (232, 110, 57),
+ (228, 98, 49), (218, 80, 35), (216, 77, 31), (214, 75, 27),
+ (211, 74, 27), (209, 71, 25), (207, 68, 23), (206, 65, 25),
+ (212, 67, 41), (215, 79, 52), (218, 92, 64), (220, 100, 70),
+ (222, 108, 76), (226, 126, 88), (231, 144, 101), (238, 155, 116),
+ (244, 169, 127), (252, 192, 140), (252, 195, 139), (253, 199, 139),
+ (253, 201, 133), (252, 196, 125), (250, 185, 114), (249, 174, 101),
+ (243, 152, 74), (241, 148, 67), (240, 144, 61), (236, 136, 49),
+ (229, 125, 36), (222, 114, 25), (213, 98, 15), (206, 85, 8),
+ (201, 77, 4), (195, 72, 2), (195, 72, 2), (195, 73, 2),
+ (195, 72, 2), (192, 66, 3), (190, 59, 2), (188, 53, 2),
+ (184, 43, 3), (185, 43, 3), (186, 43, 3), (183, 42, 3),
+ (178, 40, 3), (171, 36, 3), (156, 32, 6), (138, 29, 9),
+ (125, 29, 14), (121, 32, 20), (120, 37, 23), (130, 45, 28),
+ (138, 56, 37), (144, 66, 47), (146, 80, 58), (155, 95, 73),
+ (176, 117, 85), (185, 121, 88), (195, 126, 91), (212, 128, 94),
+ (222, 129, 93), (230, 130, 93), (232, 131, 91), (231, 133, 84),
+ (231, 135, 78), (231, 134, 74), (228, 130, 68), (224, 117, 61),
+ (215, 105, 53), (197, 96, 46), (179, 89, 38), (162, 85, 35),
+ (146, 86, 36), (140, 81, 39), (140, 72, 38), (137, 66, 38),
+ (137, 61, 38), (139, 59, 40), (137, 69, 49), (144, 81, 62),
+ (159, 94, 72), (174, 107, 80), (192, 119, 89), (212, 130, 98),
+ (224, 143, 108), (235, 157, 121), (242, 172, 133), (244, 184, 141),
+ (245, 190, 144), (245, 194, 147), (244, 192, 146), (245, 188, 142),
+ (245, 185, 137), (246, 180, 129), (246, 173, 120), (245, 167, 108),
+ (244, 161, 97), (241, 153, 86), (236, 145, 74), (232, 138, 59),
+ (228, 128, 50), (226, 118, 39), (226, 110, 33), (226, 106, 32),
+ (225, 107, 33), (222, 111, 32), (219, 114, 33), (215, 111, 30),
+ (211, 101, 27), (206, 89, 27), (203, 78, 26), (200, 72, 30),
+ (194, 69, 31), (188, 68, 27), (181, 61, 21), (174, 50, 16),
+ (165, 36, 7), (157, 25, 4), (151, 17, 3), (148, 16, 3),
+ (146, 17, 1), (148, 24, 1), (152, 33, 0), (154, 32, 0),
+ (157, 32, 1), (161, 32, 2), (163, 29, 1), (164, 27, 1)
+ ),
+
+// 427 040221-84
+((129, 81, 52), (116, 71, 50), (101, 62, 46), (87, 53, 43),
+ (83, 49, 38), (79, 46, 34), (82, 44, 33), (85, 43, 32),
+ (96, 43, 28), (99, 43, 27), (103, 43, 27), (106, 43, 25),
+ (109, 43, 24), (109, 43, 24), (110, 44, 25), (110, 43, 25),
+ (111, 43, 25), (116, 43, 25), (119, 44, 23), (122, 45, 22),
+ (127, 47, 21), (133, 50, 21), (136, 53, 23), (140, 56, 26),
+ (151, 63, 30), (155, 64, 28), (160, 65, 27), (162, 66, 28),
+ (165, 67, 29), (165, 68, 30), (165, 70, 32), (158, 72, 34),
+ (152, 72, 36), (128, 65, 35), (116, 62, 36), (104, 60, 38),
+ (91, 62, 39), (79, 65, 41), (74, 65, 40), (69, 65, 40),
+ (45, 65, 40), (42, 62, 40), (39, 60, 41), (45, 60, 40),
+ (52, 60, 39), (53, 59, 39), (54, 59, 40), (53, 60, 40),
+ (54, 59, 42), (53, 59, 43), (53, 60, 43), (54, 62, 44),
+ (48, 64, 49), (43, 67, 55), (40, 69, 58), (38, 71, 61),
+ (29, 81, 69), (29, 91, 76), (29, 101, 84), (30, 104, 86),
+ (31, 107, 88), (31, 107, 88), (31, 108, 89), (32, 101, 82),
+ (39, 101, 80), (52, 102, 77), (57, 97, 70), (63, 93, 63),
+ (71, 86, 58), (79, 79, 54), (82, 63, 44), (87, 55, 39),
+ (92, 45, 31), (89, 45, 32), (86, 46, 33), (80, 51, 36),
+ (75, 56, 40), (72, 60, 42), (70, 64, 45), (57, 71, 49),
+ (48, 73, 52), (37, 74, 60), (33, 74, 62), (29, 75, 64),
+ (28, 74, 64), (27, 74, 64), (26, 72, 61), (27, 69, 58),
+ (29, 58, 52), (29, 55, 50), (30, 53, 48), (29, 52, 47),
+ (29, 51, 46), (29, 51, 46), (29, 51, 46), (30, 52, 47),
+ (30, 55, 48), (31, 62, 54), (31, 64, 57), (31, 67, 61),
+ (32, 67, 60), (33, 68, 60), (36, 68, 61), (38, 68, 61),
+ (42, 72, 60), (40, 73, 60), (39, 75, 61), (38, 75, 61),
+ (38, 75, 61), (37, 74, 62), (37, 75, 60), (37, 75, 60),
+ (35, 75, 60), (30, 75, 59), (28, 73, 59), (27, 72, 59),
+ (26, 71, 58), (26, 69, 56), (25, 67, 56), (26, 65, 54),
+ (27, 62, 53), (27, 61, 53), (27, 60, 54), (27, 60, 54),
+ (28, 60, 54), (28, 60, 55), (28, 61, 55), (28, 62, 54),
+ (28, 63, 54), (28, 65, 56), (27, 65, 57), (27, 66, 59),
+ (27, 67, 61), (26, 68, 61), (26, 69, 60), (26, 69, 60),
+ (26, 68, 59), (26, 66, 60), (27, 65, 61), (27, 64, 59),
+ (28, 64, 57), (29, 61, 55), (32, 59, 51), (36, 57, 45),
+ (43, 57, 39), (69, 55, 34), (73, 56, 33), (77, 57, 32),
+ (82, 58, 31), (87, 57, 32), (87, 58, 33), (87, 63, 36),
+ (96, 80, 44), (97, 83, 45), (98, 86, 47), (101, 86, 48),
+ (99, 84, 46), (91, 77, 46), (86, 75, 46), (85, 74, 46),
+ (84, 73, 45), (88, 63, 40), (87, 59, 37), (86, 55, 34),
+ (81, 48, 29), (78, 42, 27), (74, 41, 26), (73, 39, 26),
+ (75, 38, 26), (75, 37, 26), (75, 36, 27), (75, 38, 28),
+ (73, 38, 29), (69, 40, 30), (66, 42, 31), (65, 42, 32),
+ (66, 43, 31), (70, 44, 31), (74, 44, 30), (75, 43, 30),
+ (72, 42, 30), (66, 42, 31), (61, 43, 32), (58, 43, 32),
+ (69, 42, 28), (72, 41, 27), (76, 41, 26), (79, 41, 26),
+ (82, 40, 27), (82, 39, 28), (83, 40, 27), (85, 39, 28),
+ (87, 40, 27), (87, 40, 27), (84, 42, 28), (80, 43, 29),
+ (75, 45, 31), (71, 45, 34), (66, 47, 35), (61, 46, 34),
+ (56, 45, 34), (52, 48, 34), (52, 48, 34), (56, 47, 33),
+ (62, 49, 33), (72, 48, 32), (82, 48, 30), (93, 47, 27),
+ (104, 46, 25), (116, 47, 23), (124, 48, 21), (133, 52, 19),
+ (139, 55, 19), (140, 56, 20), (138, 58, 21), (133, 58, 24),
+ (123, 58, 27), (113, 57, 29), (106, 59, 30), (99, 57, 31),
+ (95, 54, 31), (93, 55, 32), (90, 54, 34), (87, 52, 35),
+ (89, 51, 34), (94, 49, 31), (101, 47, 27), (111, 48, 25),
+ (119, 48, 23), (126, 51, 25), (131, 58, 29), (136, 65, 37),
+ (144, 65, 40), (147, 65, 43), (149, 63, 40), (149, 60, 39),
+ (150, 58, 37), (145, 64, 40), (147, 63, 43), (145, 62, 46),
+ (143, 58, 44), (140, 53, 41), (138, 46, 33), (131, 46, 28),
+ (126, 45, 28), (121, 47, 29), (120, 51, 31), (123, 56, 34),
+ (129, 64, 37), (141, 77, 42), (153, 81, 48), (140, 82, 51),
+ (131, 80, 52), (122, 82, 53), (111, 77, 52), (110, 82, 50)
+ ),
+
+// 428 040221-85
+((13, 33, 5), (13, 29, 6), (13, 27, 6), (14, 26, 6),
+ (14, 26, 5), (15, 26, 5), (14, 25, 5), (14, 25, 6),
+ (19, 30, 12), (25, 35, 12), (32, 40, 13), (38, 52, 13),
+ (45, 64, 14), (47, 79, 12), (50, 95, 10), (49, 101, 11),
+ (48, 108, 13), (52, 112, 12), (53, 111, 12), (54, 111, 12),
+ (53, 111, 9), (52, 112, 6), (49, 112, 6), (46, 113, 6),
+ (37, 101, 2), (31, 86, 2), (26, 71, 2), (22, 57, 2),
+ (19, 43, 2), (18, 40, 2), (17, 37, 3), (17, 36, 3),
+ (18, 39, 2), (27, 61, 2), (30, 69, 1), (34, 78, 1),
+ (34, 79, 1), (35, 81, 2), (34, 79, 2), (33, 77, 3),
+ (33, 79, 4), (34, 82, 3), (36, 85, 3), (34, 82, 2),
+ (33, 79, 2), (31, 73, 2), (29, 68, 3), (24, 55, 3),
+ (20, 44, 6), (20, 36, 14), (27, 43, 19), (34, 51, 24),
+ (45, 63, 36), (56, 76, 48), (64, 83, 55), (72, 90, 63),
+ (101, 120, 89), (111, 127, 91), (122, 135, 94), (125, 136, 91),
+ (129, 138, 89), (130, 139, 92), (132, 141, 96), (131, 148, 103),
+ (132, 152, 113), (125, 153, 120), (115, 141, 103), (106, 130, 87),
+ (98, 122, 79), (91, 115, 71), (76, 104, 59), (63, 96, 52),
+ (47, 96, 53), (43, 92, 51), (39, 88, 50), (35, 80, 40),
+ (31, 72, 31), (29, 68, 26), (27, 64, 22), (23, 58, 15),
+ (20, 54, 7), (14, 45, 9), (13, 41, 10), (12, 37, 12),
+ (12, 34, 13), (13, 32, 15), (13, 28, 18), (14, 29, 20),
+ (22, 47, 35), (34, 64, 47), (46, 82, 59), (56, 90, 68),
+ (66, 99, 78), (84, 113, 97), (104, 128, 113), (122, 143, 133),
+ (140, 158, 149), (167, 194, 177), (179, 208, 184), (191, 223, 191),
+ (193, 225, 191), (195, 227, 191), (193, 221, 189), (187, 209, 181),
+ (160, 177, 159), (145, 163, 141), (130, 150, 123), (122, 143, 114),
+ (114, 137, 106), (97, 123, 91), (78, 109, 77), (60, 96, 66),
+ (48, 85, 61), (47, 80, 61), (50, 82, 62), (53, 84, 63),
+ (62, 90, 69), (71, 97, 78), (73, 100, 82), (73, 101, 86),
+ (74, 105, 91), (75, 104, 88), (76, 104, 85), (78, 104, 84),
+ (80, 105, 83), (78, 102, 76), (72, 95, 68), (64, 84, 59),
+ (54, 77, 49), (34, 59, 27), (31, 56, 23), (28, 54, 20),
+ (22, 52, 13), (19, 52, 8), (19, 50, 5), (18, 50, 4),
+ (20, 53, 5), (22, 54, 10), (25, 56, 15), (27, 60, 19),
+ (30, 65, 24), (40, 75, 35), (50, 85, 47), (62, 98, 58),
+ (74, 109, 69), (93, 125, 86), (94, 130, 88), (96, 135, 90),
+ (100, 145, 89), (102, 154, 90), (102, 160, 88), (103, 161, 84),
+ (99, 148, 76), (94, 142, 73), (90, 137, 71), (80, 125, 58),
+ (69, 116, 46), (57, 106, 33), (46, 95, 20), (36, 81, 13),
+ (29, 68, 7), (19, 41, 7), (17, 37, 7), (16, 33, 7),
+ (15, 29, 7), (14, 27, 7), (14, 27, 8), (15, 28, 9),
+ (16, 30, 13), (16, 31, 14), (17, 32, 16), (17, 34, 17),
+ (18, 36, 19), (18, 37, 20), (18, 38, 21), (20, 38, 23),
+ (20, 39, 25), (20, 42, 28), (20, 44, 30), (19, 46, 35),
+ (19, 49, 38), (20, 51, 41), (23, 55, 45), (30, 59, 52),
+ (57, 82, 74), (65, 90, 83), (73, 98, 92), (91, 115, 109),
+ (109, 131, 126), (123, 146, 140), (138, 158, 154), (153, 170, 166),
+ (168, 182, 177), (181, 195, 188), (193, 206, 199), (201, 214, 208),
+ (203, 221, 216), (202, 227, 225), (201, 231, 228), (195, 231, 230),
+ (185, 227, 226), (176, 222, 220), (167, 216, 213), (156, 205, 202),
+ (144, 195, 193), (136, 187, 184), (127, 180, 178), (118, 170, 168),
+ (107, 160, 157), (99, 151, 146), (91, 140, 132), (80, 125, 118),
+ (73, 116, 106), (67, 112, 104), (65, 107, 101), (62, 103, 98),
+ (58, 103, 97), (60, 106, 98), (64, 107, 99), (69, 110, 99),
+ (76, 118, 105), (83, 122, 114), (90, 126, 120), (90, 132, 127),
+ (93, 136, 131), (96, 138, 131), (98, 139, 130), (100, 142, 128),
+ (101, 143, 128), (104, 145, 125), (103, 147, 117), (102, 154, 107),
+ (98, 153, 93), (94, 152, 84), (91, 154, 80), (91, 154, 81),
+ (95, 157, 90), (104, 160, 100), (119, 176, 113), (131, 185, 115),
+ (144, 191, 108), (150, 197, 98), (151, 196, 88), (143, 186, 82),
+ (133, 171, 81), (126, 163, 85), (118, 153, 89), (114, 142, 86),
+ (109, 133, 78), (104, 126, 66), (90, 116, 48), (74, 101, 30),
+ (57, 85, 15), (40, 69, 8), (26, 54, 6), (17, 42, 5)
+ ),
+
+// 429 040221-86
+((134, 121, 111), (121, 114, 111), (114, 110, 106), (107, 107, 101),
+ (114, 114, 103), (121, 122, 106), (127, 126, 105), (133, 130, 105),
+ (148, 145, 99), (150, 148, 97), (153, 152, 95), (146, 144, 95),
+ (140, 137, 95), (131, 129, 97), (122, 121, 100), (120, 120, 101),
+ (118, 119, 103), (109, 112, 104), (109, 111, 103), (109, 111, 103),
+ (114, 110, 100), (120, 109, 98), (121, 106, 94), (123, 104, 91),
+ (117, 98, 77), (113, 95, 75), (110, 93, 74), (107, 85, 73),
+ (104, 77, 72), (102, 76, 72), (101, 75, 72), (104, 78, 75),
+ (112, 88, 77), (141, 109, 78), (157, 119, 82), (173, 129, 86),
+ (190, 141, 88), (208, 154, 91), (213, 158, 88), (218, 162, 86),
+ (217, 172, 91), (215, 176, 102), (214, 180, 113), (211, 177, 110),
+ (208, 174, 108), (204, 170, 104), (201, 167, 101), (200, 161, 99),
+ (199, 157, 100), (200, 144, 93), (197, 132, 81), (195, 120, 70),
+ (196, 119, 68), (197, 118, 66), (198, 119, 68), (199, 121, 71),
+ (193, 125, 79), (187, 131, 87), (182, 138, 95), (173, 140, 105),
+ (165, 142, 115), (160, 140, 118), (155, 138, 122), (147, 135, 125),
+ (145, 136, 123), (151, 134, 118), (155, 132, 119), (159, 131, 121),
+ (164, 134, 121), (170, 138, 122), (181, 145, 127), (193, 156, 131),
+ (194, 166, 142), (186, 163, 146), (179, 160, 150), (176, 164, 156),
+ (173, 168, 163), (173, 172, 168), (173, 176, 173), (171, 175, 176),
+ (169, 173, 176), (174, 174, 170), (181, 182, 172), (188, 190, 175),
+ (190, 191, 174), (192, 192, 173), (189, 188, 165), (185, 182, 153),
+ (174, 165, 134), (171, 155, 120), (169, 145, 106), (165, 139, 97),
+ (162, 133, 89), (156, 121, 75), (149, 107, 65), (145, 93, 53),
+ (142, 80, 42), (127, 57, 22), (120, 50, 16), (114, 43, 11),
+ (114, 43, 11), (115, 44, 12), (120, 47, 11), (124, 54, 15),
+ (134, 65, 21), (140, 73, 24), (146, 81, 28), (148, 84, 29),
+ (151, 88, 30), (155, 91, 30), (159, 91, 32), (160, 91, 33),
+ (162, 90, 35), (159, 91, 38), (156, 91, 41), (153, 91, 44),
+ (142, 89, 51), (132, 84, 57), (125, 82, 63), (118, 79, 65),
+ (98, 79, 76), (96, 79, 81), (95, 79, 86), (98, 78, 84),
+ (101, 78, 82), (105, 78, 74), (111, 77, 69), (114, 73, 64),
+ (125, 74, 63), (143, 78, 53), (146, 78, 50), (149, 79, 48),
+ (150, 77, 43), (156, 78, 43), (163, 88, 45), (168, 96, 46),
+ (172, 103, 47), (175, 104, 50), (178, 105, 53), (180, 107, 55),
+ (182, 110, 57), (186, 116, 61), (183, 119, 61), (177, 119, 61),
+ (170, 115, 63), (167, 108, 61), (167, 108, 60), (167, 108, 59),
+ (169, 115, 59), (171, 121, 66), (170, 125, 70), (170, 128, 75),
+ (162, 125, 83), (159, 124, 87), (157, 124, 92), (150, 120, 98),
+ (141, 118, 103), (129, 115, 104), (123, 110, 98), (119, 104, 92),
+ (116, 93, 86), (107, 73, 68), (104, 69, 63), (101, 66, 59),
+ (98, 62, 52), (96, 61, 51), (93, 63, 51), (91, 60, 49),
+ (71, 53, 50), (66, 51, 50), (61, 49, 50), (50, 48, 52),
+ (45, 42, 46), (40, 38, 40), (37, 34, 35), (35, 32, 32),
+ (37, 34, 35), (38, 35, 37), (38, 36, 40), (43, 39, 46),
+ (47, 44, 52), (57, 54, 62), (70, 70, 71), (83, 84, 78),
+ (109, 106, 87), (115, 109, 88), (121, 112, 89), (135, 121, 88),
+ (149, 129, 88), (161, 134, 83), (173, 137, 78), (179, 136, 74),
+ (181, 135, 71), (180, 131, 68), (174, 125, 63), (170, 115, 54),
+ (163, 103, 45), (148, 91, 40), (135, 83, 36), (123, 74, 31),
+ (117, 67, 25), (121, 63, 17), (120, 60, 15), (120, 65, 18),
+ (125, 71, 20), (134, 80, 24), (151, 95, 26), (168, 109, 33),
+ (180, 123, 44), (186, 137, 58), (193, 148, 76), (198, 160, 90),
+ (200, 167, 100), (202, 170, 108), (197, 171, 113), (195, 168, 118),
+ (194, 167, 122), (192, 165, 124), (191, 161, 121), (187, 157, 114),
+ (183, 146, 102), (178, 134, 88), (172, 124, 77), (159, 112, 72),
+ (146, 106, 72), (135, 100, 72), (126, 95, 70), (127, 95, 64),
+ (124, 91, 58), (121, 88, 54), (119, 86, 54), (116, 85, 54),
+ (121, 89, 53), (128, 92, 49), (127, 90, 48), (122, 84, 44),
+ (113, 75, 42), (102, 66, 41), (95, 63, 37), (82, 57, 39),
+ (71, 52, 42), (59, 50, 47), (54, 47, 51), (57, 51, 56),
+ (61, 56, 61), (72, 65, 66), (83, 77, 73), (97, 87, 76),
+ (113, 99, 82), (126, 108, 90), (142, 123, 98), (157, 137, 108),
+ (155, 135, 107), (149, 131, 105), (140, 122, 103), (129, 114, 102)
+ ),
+
+// 430 040221-88
+((71, 61, 35), (62, 67, 39), (60, 73, 48), (58, 79, 57),
+ (54, 84, 66), (51, 89, 75), (55, 93, 80), (60, 98, 85),
+ (70, 115, 92), (73, 122, 98), (76, 129, 104), (83, 134, 110),
+ (91, 139, 117), (103, 142, 124), (116, 145, 131), (121, 147, 133),
+ (126, 150, 135), (139, 156, 141), (138, 158, 139), (137, 161, 138),
+ (133, 162, 135), (130, 164, 133), (128, 164, 133), (127, 165, 133),
+ (125, 159, 130), (119, 152, 126), (113, 146, 123), (105, 138, 113),
+ (97, 130, 104), (92, 126, 99), (88, 122, 95), (83, 118, 90),
+ (85, 115, 86), (87, 111, 88), (87, 107, 87), (88, 104, 87),
+ (86, 98, 83), (84, 93, 79), (84, 90, 77), (85, 88, 75),
+ (85, 82, 68), (87, 78, 66), (89, 74, 65), (98, 67, 58),
+ (107, 61, 52), (110, 59, 52), (114, 58, 52), (117, 59, 55),
+ (124, 61, 58), (133, 79, 77), (144, 87, 87), (156, 95, 97),
+ (163, 101, 101), (170, 107, 106), (170, 108, 107), (170, 109, 109),
+ (151, 114, 104), (141, 115, 106), (132, 116, 108), (126, 112, 101),
+ (120, 108, 94), (115, 102, 90), (110, 97, 86), (98, 81, 71),
+ (83, 65, 53), (58, 40, 31), (51, 34, 26), (45, 28, 21),
+ (43, 25, 20), (41, 23, 19), (37, 18, 17), (33, 13, 14),
+ (27, 9, 11), (24, 8, 11), (21, 8, 11), (19, 8, 10),
+ (17, 9, 10), (17, 9, 9), (18, 10, 9), (20, 11, 9),
+ (24, 12, 7), (33, 12, 4), (36, 13, 3), (40, 14, 3),
+ (41, 13, 2), (42, 13, 2), (43, 13, 2), (44, 13, 3),
+ (49, 12, 6), (53, 12, 7), (57, 12, 9), (59, 12, 8),
+ (62, 12, 8), (65, 12, 7), (67, 11, 7), (69, 10, 5),
+ (68, 9, 7), (64, 8, 10), (64, 8, 9), (64, 8, 9),
+ (63, 8, 8), (62, 9, 8), (61, 10, 5), (60, 9, 4),
+ (54, 7, 4), (50, 5, 4), (47, 4, 4), (44, 4, 4),
+ (42, 5, 4), (37, 8, 3), (33, 8, 3), (32, 10, 4),
+ (32, 12, 5), (32, 16, 6), (32, 17, 7), (33, 19, 8),
+ (35, 23, 9), (38, 29, 12), (40, 37, 14), (45, 46, 16),
+ (58, 60, 23), (60, 61, 24), (62, 63, 26), (63, 63, 26),
+ (65, 63, 27), (63, 61, 27), (64, 63, 26), (66, 65, 25),
+ (72, 65, 26), (82, 58, 25), (85, 54, 24), (89, 51, 23),
+ (92, 43, 23), (93, 39, 25), (94, 41, 27), (96, 45, 32),
+ (100, 53, 46), (105, 53, 48), (110, 54, 50), (109, 54, 50),
+ (109, 55, 51), (112, 57, 51), (114, 63, 54), (115, 68, 63),
+ (116, 78, 73), (125, 96, 89), (124, 98, 91), (123, 101, 93),
+ (120, 104, 93), (118, 106, 90), (117, 108, 90), (116, 111, 92),
+ (124, 122, 100), (127, 123, 102), (130, 125, 104), (134, 126, 106),
+ (140, 121, 100), (144, 113, 91), (149, 104, 83), (146, 93, 73),
+ (142, 83, 63), (131, 65, 49), (128, 61, 45), (125, 57, 42),
+ (120, 48, 33), (121, 40, 28), (116, 35, 24), (106, 34, 27),
+ (85, 49, 42), (79, 57, 50), (74, 66, 59), (63, 81, 74),
+ (60, 91, 84), (64, 99, 90), (68, 109, 102), (78, 119, 110),
+ (82, 123, 115), (89, 134, 126), (92, 145, 135), (91, 146, 139),
+ (92, 142, 131), (90, 135, 125), (91, 127, 114), (87, 110, 96),
+ (81, 87, 71), (76, 80, 66), (72, 74, 62), (62, 62, 50),
+ (50, 49, 42), (39, 40, 33), (31, 31, 23), (26, 23, 16),
+ (24, 19, 11), (25, 15, 7), (28, 13, 3), (33, 10, 3),
+ (37, 9, 4), (41, 10, 4), (43, 11, 5), (43, 12, 6),
+ (43, 14, 7), (43, 18, 8), (44, 19, 8), (46, 21, 9),
+ (47, 23, 11), (49, 26, 13), (48, 29, 16), (48, 33, 20),
+ (46, 38, 24), (44, 41, 30), (46, 46, 34), (51, 52, 40),
+ (57, 60, 48), (64, 68, 55), (72, 75, 59), (79, 83, 63),
+ (83, 87, 67), (87, 90, 70), (92, 94, 72), (97, 98, 76),
+ (100, 100, 81), (105, 104, 81), (109, 106, 82), (108, 106, 79),
+ (106, 101, 75), (106, 96, 70), (106, 88, 63), (106, 79, 58),
+ (108, 72, 51), (112, 64, 46), (111, 58, 40), (109, 51, 34),
+ (107, 46, 29), (104, 39, 24), (98, 33, 18), (93, 29, 13),
+ (89, 23, 9), (84, 19, 4), (79, 16, 2), (75, 17, 3),
+ (71, 19, 5), (66, 24, 9), (62, 30, 14), (59, 36, 18),
+ (55, 43, 22), (52, 49, 25), (51, 50, 26), (54, 48, 25),
+ (60, 47, 24), (70, 47, 24), (70, 45, 24), (69, 47, 25),
+ (68, 51, 30), (67, 55, 32), (64, 55, 34), (62, 57, 34)
+ ),
+
+// 431 040221-89
+((25, 36, 53), (32, 40, 69), (33, 41, 74), (34, 42, 79),
+ (35, 43, 79), (37, 44, 80), (36, 48, 86), (35, 52, 92),
+ (32, 68, 120), (34, 74, 131), (37, 81, 143), (41, 84, 147),
+ (46, 87, 151), (49, 89, 152), (52, 92, 154), (53, 93, 155),
+ (55, 94, 157), (62, 106, 160), (69, 109, 163), (76, 113, 166),
+ (81, 115, 168), (87, 117, 171), (90, 116, 172), (94, 116, 173),
+ (101, 116, 171), (106, 115, 169), (111, 115, 168), (110, 115, 167),
+ (110, 116, 167), (108, 116, 166), (107, 116, 165), (101, 111, 163),
+ (95, 103, 155), (82, 82, 127), (74, 74, 117), (67, 66, 107),
+ (60, 68, 107), (54, 71, 108), (52, 72, 110), (50, 74, 113),
+ (55, 91, 130), (67, 101, 139), (79, 111, 149), (94, 126, 161),
+ (110, 142, 173), (116, 150, 179), (123, 158, 186), (140, 174, 199),
+ (154, 190, 214), (178, 202, 223), (185, 200, 218), (192, 199, 214),
+ (188, 186, 198), (184, 174, 183), (178, 168, 175), (173, 163, 168),
+ (141, 129, 135), (122, 112, 119), (103, 96, 103), (84, 78, 88),
+ (65, 61, 73), (58, 54, 67), (51, 48, 62), (43, 42, 56),
+ (42, 39, 54), (51, 56, 65), (65, 72, 80), (80, 89, 95),
+ (88, 97, 103), (97, 106, 112), (112, 125, 130), (128, 140, 147),
+ (157, 168, 175), (165, 173, 181), (174, 178, 187), (173, 174, 183),
+ (173, 171, 180), (169, 166, 175), (165, 161, 171), (158, 153, 159),
+ (144, 141, 146), (111, 110, 118), (93, 91, 100), (76, 72, 83),
+ (67, 62, 73), (58, 53, 64), (45, 39, 47), (34, 29, 33),
+ (21, 20, 20), (19, 19, 19), (18, 18, 18), (17, 18, 17),
+ (17, 18, 17), (18, 18, 17), (18, 18, 17), (18, 18, 16),
+ (17, 17, 16), (16, 18, 15), (15, 17, 15), (14, 17, 15),
+ (13, 16, 14), (13, 16, 13), (12, 15, 12), (12, 14, 11),
+ (13, 14, 12), (14, 15, 14), (16, 17, 16), (16, 17, 18),
+ (17, 18, 21), (19, 22, 28), (21, 28, 38), (26, 36, 51),
+ (32, 47, 69), (44, 71, 104), (47, 76, 112), (50, 82, 121),
+ (52, 88, 134), (50, 91, 141), (46, 90, 142), (45, 90, 141),
+ (41, 87, 136), (44, 88, 134), (47, 89, 132), (46, 90, 133),
+ (46, 91, 134), (42, 89, 133), (40, 87, 129), (40, 87, 127),
+ (45, 90, 126), (81, 109, 132), (91, 117, 137), (102, 126, 143),
+ (122, 144, 160), (139, 161, 177), (153, 177, 195), (163, 193, 211),
+ (192, 216, 236), (195, 218, 238), (199, 221, 241), (197, 219, 239),
+ (196, 217, 237), (187, 207, 228), (168, 192, 216), (152, 178, 200),
+ (137, 161, 185), (102, 127, 151), (92, 119, 143), (83, 111, 136),
+ (65, 93, 117), (48, 75, 100), (33, 61, 82), (24, 48, 67),
+ (16, 30, 42), (16, 27, 38), (16, 25, 35), (19, 22, 31),
+ (23, 25, 33), (30, 31, 39), (39, 38, 48), (50, 47, 61),
+ (60, 57, 75), (80, 74, 98), (83, 78, 102), (87, 82, 107),
+ (90, 88, 115), (94, 94, 120), (98, 97, 125), (99, 102, 131),
+ (102, 112, 145), (102, 114, 147), (102, 116, 149), (99, 118, 153),
+ (95, 116, 154), (89, 110, 150), (83, 102, 145), (74, 92, 138),
+ (70, 87, 135), (67, 82, 133), (63, 81, 134), (63, 81, 138),
+ (64, 80, 142), (66, 78, 143), (64, 74, 142), (63, 70, 135),
+ (53, 58, 115), (50, 55, 110), (48, 52, 105), (44, 48, 96),
+ (41, 43, 88), (39, 41, 82), (37, 40, 75), (36, 39, 69),
+ (35, 38, 64), (32, 37, 61), (31, 38, 59), (32, 36, 59),
+ (33, 35, 62), (34, 36, 65), (36, 38, 70), (43, 42, 76),
+ (47, 47, 86), (54, 57, 95), (65, 68, 109), (80, 85, 126),
+ (97, 103, 144), (112, 120, 160), (129, 134, 173), (144, 147, 184),
+ (156, 158, 194), (165, 164, 200), (167, 171, 204), (170, 177, 208),
+ (169, 181, 211), (167, 184, 212), (167, 187, 212), (169, 187, 210),
+ (164, 176, 205), (152, 163, 197), (137, 146, 184), (118, 129, 169),
+ (95, 110, 151), (74, 95, 133), (62, 84, 115), (53, 73, 101),
+ (49, 64, 91), (46, 56, 84), (44, 51, 79), (40, 46, 75),
+ (32, 45, 74), (27, 48, 75), (23, 53, 79), (21, 59, 85),
+ (20, 62, 92), (19, 66, 98), (20, 66, 101), (19, 65, 101),
+ (18, 64, 100), (16, 62, 99), (15, 60, 98), (13, 58, 96),
+ (11, 57, 93), (10, 52, 85), (10, 45, 74), (9, 38, 61),
+ (9, 30, 48), (9, 23, 37), (11, 17, 30), (14, 18, 30),
+ (15, 24, 37), (18, 28, 43), (21, 29, 43), (22, 30, 42),
+ (22, 30, 42), (21, 30, 40), (25, 28, 37), (24, 30, 41)
+ ),
+
+// 432 040221-90
+((2, 0, 1), (0, 0, 1), (0, 0, 1), (1, 0, 2),
+ (1, 0, 1), (2, 0, 0), (3, 0, 0), (4, 0, 0),
+ (8, 4, 1), (13, 9, 4), (18, 14, 7), (24, 20, 13),
+ (31, 27, 19), (35, 31, 23), (40, 36, 27), (40, 37, 28),
+ (41, 38, 30), (38, 34, 28), (32, 28, 22), (26, 23, 17),
+ (20, 18, 12), (15, 13, 8), (13, 11, 6), (12, 9, 4),
+ (14, 12, 6), (20, 17, 11), (27, 23, 17), (36, 32, 25),
+ (45, 41, 33), (50, 46, 37), (56, 51, 41), (62, 57, 47),
+ (64, 61, 49), (68, 60, 44), (65, 59, 43), (63, 58, 42),
+ (66, 60, 44), (70, 63, 47), (73, 66, 51), (76, 70, 55),
+ (92, 86, 70), (95, 90, 75), (99, 95, 80), (96, 93, 80),
+ (94, 91, 80), (91, 87, 76), (88, 84, 73), (81, 78, 66),
+ (74, 71, 59), (60, 56, 47), (58, 53, 44), (56, 51, 42),
+ (59, 53, 43), (62, 56, 45), (67, 60, 46), (72, 65, 47),
+ (104, 96, 61), (126, 115, 75), (148, 135, 89), (172, 159, 109),
+ (196, 184, 130), (196, 185, 139), (197, 186, 148), (188, 180, 136),
+ (180, 174, 126), (137, 132, 93), (133, 123, 80), (129, 114, 67),
+ (132, 120, 69), (135, 126, 72), (151, 141, 84), (166, 152, 98),
+ (168, 163, 120), (154, 149, 113), (141, 135, 106), (122, 117, 93),
+ (103, 99, 81), (93, 89, 70), (83, 79, 60), (70, 65, 44),
+ (58, 55, 31), (36, 34, 16), (31, 28, 10), (26, 23, 4),
+ (24, 21, 4), (22, 20, 4), (21, 18, 2), (21, 18, 1),
+ (22, 19, 5), (22, 19, 8), (23, 20, 11), (23, 20, 12),
+ (23, 21, 14), (24, 20, 16), (21, 17, 17), (19, 17, 16),
+ (18, 16, 15), (10, 8, 8), (9, 9, 6), (8, 11, 4),
+ (8, 10, 4), (9, 9, 4), (12, 13, 5), (19, 19, 6),
+ (43, 38, 21), (50, 46, 27), (58, 55, 33), (57, 53, 31),
+ (57, 52, 30), (58, 54, 40), (49, 46, 34), (36, 32, 20),
+ (28, 24, 15), (23, 18, 10), (22, 18, 10), (22, 18, 10),
+ (25, 19, 10), (28, 25, 12), (30, 28, 16), (32, 28, 18),
+ (33, 29, 20), (33, 28, 19), (33, 28, 19), (33, 27, 18),
+ (33, 27, 17), (35, 30, 15), (38, 36, 17), (43, 39, 19),
+ (45, 41, 20), (50, 47, 31), (50, 46, 32), (50, 46, 33),
+ (49, 45, 36), (49, 44, 38), (50, 45, 39), (49, 45, 37),
+ (52, 49, 35), (52, 49, 34), (53, 50, 33), (53, 50, 33),
+ (53, 51, 33), (53, 51, 35), (54, 51, 37), (55, 50, 37),
+ (55, 50, 35), (55, 48, 35), (54, 47, 34), (54, 47, 33),
+ (50, 44, 30), (47, 39, 26), (42, 37, 24), (39, 34, 22),
+ (39, 32, 20), (40, 33, 21), (42, 35, 23), (49, 41, 28),
+ (58, 51, 32), (71, 65, 39), (88, 82, 51), (108, 101, 62),
+ (127, 118, 76), (140, 131, 90), (139, 130, 92), (139, 130, 94),
+ (135, 126, 96), (117, 109, 85), (103, 99, 76), (97, 91, 71),
+ (85, 77, 59), (83, 75, 59), (81, 74, 59), (81, 74, 59),
+ (82, 75, 58), (83, 76, 61), (85, 80, 64), (89, 83, 66),
+ (91, 84, 68), (90, 84, 70), (89, 83, 69), (88, 81, 69),
+ (87, 79, 68), (83, 77, 63), (80, 73, 59), (76, 69, 53),
+ (59, 55, 36), (55, 50, 34), (51, 46, 32), (41, 37, 25),
+ (32, 28, 18), (26, 21, 18), (23, 17, 16), (21, 15, 14),
+ (21, 16, 14), (25, 20, 17), (31, 27, 21), (39, 34, 26),
+ (48, 44, 35), (56, 54, 44), (65, 62, 52), (73, 68, 58),
+ (76, 72, 59), (78, 74, 56), (80, 71, 54), (78, 66, 50),
+ (74, 66, 45), (73, 65, 42), (70, 62, 41), (66, 60, 40),
+ (63, 60, 37), (59, 56, 35), (54, 51, 32), (49, 43, 26),
+ (42, 37, 23), (37, 33, 22), (33, 28, 20), (30, 24, 20),
+ (29, 25, 21), (27, 24, 19), (28, 23, 19), (29, 25, 18),
+ (29, 26, 15), (28, 24, 12), (27, 24, 12), (26, 23, 9),
+ (24, 19, 6), (21, 16, 5), (16, 13, 3), (12, 9, 0),
+ (9, 8, 0), (5, 6, 0), (2, 3, 0), (1, 3, 0),
+ (2, 2, 0), (2, 1, 0), (3, 0, 0), (4, 0, 0),
+ (4, 0, 0), (4, 0, 0), (4, 0, 0), (5, 0, 0),
+ (6, 1, 0), (7, 2, 2), (8, 2, 3), (9, 4, 4),
+ (11, 5, 7), (12, 5, 8), (13, 8, 5), (13, 8, 5),
+ (12, 8, 4), (10, 9, 1), (8, 7, 0), (7, 5, 0),
+ (4, 3, 0), (3, 1, 0), (3, 0, 0), (2, 0, 0)
+ ),
+
+// 433 040221-91
+((118, 89, 90), (111, 85, 88), (100, 81, 83), (90, 77, 78),
+ (79, 75, 74), (69, 74, 70), (64, 73, 68), (59, 72, 67),
+ (41, 65, 61), (37, 62, 58), (33, 60, 56), (28, 59, 55),
+ (24, 58, 54), (20, 58, 56), (17, 59, 59), (17, 59, 59),
+ (17, 59, 60), (17, 62, 63), (17, 64, 67), (18, 67, 71),
+ (19, 65, 70), (21, 63, 69), (23, 62, 67), (25, 61, 65),
+ (29, 57, 58), (27, 52, 51), (25, 47, 44), (23, 40, 36),
+ (21, 33, 28), (21, 31, 26), (21, 30, 24), (19, 28, 20),
+ (17, 29, 21), (8, 28, 23), (5, 27, 23), (3, 27, 23),
+ (3, 27, 24), (3, 28, 25), (3, 28, 25), (4, 28, 26),
+ (10, 30, 29), (12, 32, 30), (15, 34, 32), (18, 39, 36),
+ (21, 44, 41), (24, 47, 44), (28, 51, 48), (31, 58, 56),
+ (36, 64, 63), (56, 82, 81), (71, 90, 88), (86, 98, 96),
+ (92, 98, 96), (98, 99, 96), (100, 98, 94), (102, 98, 93),
+ (104, 92, 88), (95, 87, 83), (86, 83, 79), (71, 74, 70),
+ (56, 65, 61), (48, 61, 57), (41, 57, 54), (28, 52, 50),
+ (17, 48, 46), (5, 38, 36), (5, 36, 33), (5, 35, 31),
+ (5, 35, 31), (6, 36, 31), (10, 38, 34), (16, 41, 36),
+ (30, 46, 43), (38, 52, 50), (46, 59, 58), (60, 67, 68),
+ (75, 75, 79), (81, 79, 83), (87, 84, 88), (95, 89, 91),
+ (96, 91, 93), (91, 92, 91), (87, 92, 90), (84, 93, 90),
+ (81, 91, 88), (78, 90, 86), (70, 87, 80), (64, 83, 75),
+ (69, 88, 81), (85, 96, 90), (101, 105, 99), (110, 111, 104),
+ (120, 117, 109), (140, 127, 119), (156, 138, 129), (171, 144, 138),
+ (182, 146, 143), (177, 141, 138), (162, 133, 128), (148, 125, 119),
+ (139, 118, 112), (130, 111, 106), (109, 97, 94), (85, 83, 82),
+ (47, 63, 59), (36, 57, 53), (25, 52, 48), (22, 50, 47),
+ (19, 49, 46), (17, 49, 46), (19, 49, 46), (24, 49, 47),
+ (32, 50, 48), (53, 59, 56), (57, 61, 58), (61, 64, 60),
+ (71, 67, 63), (78, 68, 62), (85, 69, 64), (89, 71, 64),
+ (90, 72, 66), (87, 69, 62), (85, 67, 59), (83, 65, 57),
+ (82, 64, 56), (75, 62, 52), (71, 61, 52), (68, 62, 51),
+ (67, 63, 50), (65, 65, 52), (63, 66, 53), (62, 68, 55),
+ (58, 72, 59), (54, 76, 61), (52, 78, 62), (50, 77, 62),
+ (42, 74, 62), (41, 73, 60), (41, 72, 59), (42, 70, 57),
+ (43, 69, 56), (45, 65, 55), (46, 61, 52), (48, 55, 47),
+ (49, 52, 43), (47, 46, 37), (45, 45, 37), (43, 44, 38),
+ (39, 42, 39), (34, 40, 40), (29, 40, 38), (26, 40, 38),
+ (25, 46, 46), (28, 49, 50), (31, 53, 55), (43, 64, 67),
+ (57, 75, 75), (76, 85, 84), (95, 95, 94), (114, 105, 103),
+ (135, 116, 112), (159, 124, 122), (164, 127, 125), (170, 130, 128),
+ (182, 134, 135), (195, 144, 142), (205, 150, 149), (210, 153, 153),
+ (217, 163, 167), (219, 167, 170), (221, 171, 173), (226, 178, 181),
+ (231, 183, 186), (237, 191, 193), (242, 198, 199), (244, 204, 203),
+ (244, 205, 204), (238, 201, 198), (232, 195, 192), (224, 188, 185),
+ (216, 181, 175), (206, 171, 165), (187, 156, 150), (166, 136, 131),
+ (113, 96, 91), (102, 88, 83), (92, 81, 76), (72, 68, 64),
+ (58, 58, 56), (48, 52, 51), (46, 52, 51), (56, 57, 56),
+ (70, 62, 64), (84, 71, 74), (99, 80, 83), (111, 91, 94),
+ (124, 106, 107), (140, 115, 118), (153, 122, 126), (162, 125, 129),
+ (163, 124, 128), (160, 127, 130), (154, 127, 128), (147, 124, 124),
+ (142, 117, 117), (133, 108, 107), (125, 99, 100), (111, 91, 92),
+ (97, 83, 83), (81, 76, 75), (66, 68, 68), (54, 62, 63),
+ (42, 58, 60), (33, 55, 58), (26, 54, 57), (22, 54, 57),
+ (20, 55, 57), (17, 56, 58), (13, 54, 58), (12, 52, 57),
+ (11, 52, 56), (12, 53, 55), (12, 54, 55), (11, 53, 55),
+ (12, 50, 53), (13, 50, 54), (18, 54, 56), (28, 60, 60),
+ (42, 69, 68), (60, 77, 76), (75, 84, 85), (90, 93, 93),
+ (105, 104, 104), (123, 116, 116), (145, 129, 129), (164, 137, 139),
+ (179, 141, 145), (186, 143, 148), (189, 143, 148), (191, 143, 148),
+ (186, 140, 144), (177, 133, 136), (167, 123, 126), (152, 112, 112),
+ (138, 101, 101), (122, 92, 89), (107, 85, 79), (94, 78, 71),
+ (86, 76, 67), (84, 76, 67), (92, 78, 71), (98, 81, 75),
+ (107, 82, 78), (114, 82, 80), (113, 84, 82), (120, 86, 87)
+ ),
+
+// 434 040221-92
+((60, 43, 7), (55, 41, 9), (50, 37, 9), (46, 34, 10),
+ (38, 31, 9), (31, 28, 8), (31, 28, 6), (32, 29, 5),
+ (35, 27, 4), (32, 24, 5), (29, 21, 7), (25, 17, 9),
+ (22, 14, 11), (19, 12, 11), (17, 10, 12), (16, 9, 13),
+ (16, 8, 14), (13, 6, 16), (10, 6, 17), (7, 6, 18),
+ (4, 6, 17), (2, 6, 16), (2, 5, 15), (2, 5, 14),
+ (5, 3, 9), (8, 3, 7), (11, 3, 6), (13, 4, 5),
+ (16, 6, 4), (17, 6, 3), (18, 7, 2), (20, 8, 1),
+ (24, 8, 0), (31, 8, 0), (35, 8, 1), (39, 8, 2),
+ (43, 9, 5), (47, 11, 8), (47, 12, 9), (48, 14, 10),
+ (51, 19, 12), (49, 17, 12), (47, 16, 13), (47, 13, 15),
+ (47, 11, 17), (46, 10, 17), (46, 10, 17), (47, 9, 18),
+ (48, 11, 16), (53, 12, 12), (52, 11, 10), (51, 10, 8),
+ (50, 8, 7), (49, 7, 6), (48, 7, 4), (48, 8, 3),
+ (54, 14, 2), (60, 18, 2), (66, 23, 2), (71, 26, 2),
+ (76, 29, 2), (78, 30, 2), (80, 32, 2), (83, 36, 4),
+ (87, 41, 6), (103, 53, 13), (111, 57, 14), (119, 61, 15),
+ (122, 60, 14), (125, 59, 13), (129, 58, 13), (128, 56, 11),
+ (122, 57, 11), (114, 57, 12), (106, 57, 13), (96, 52, 12),
+ (87, 47, 11), (82, 43, 11), (77, 40, 12), (68, 36, 12),
+ (68, 38, 19), (76, 48, 28), (80, 51, 27), (84, 55, 26),
+ (85, 54, 26), (87, 53, 26), (85, 50, 21), (83, 48, 24),
+ (94, 51, 31), (99, 57, 30), (105, 64, 30), (106, 65, 29),
+ (108, 67, 28), (104, 66, 19), (93, 63, 12), (81, 58, 9),
+ (70, 54, 7), (48, 52, 7), (41, 52, 10), (35, 53, 13),
+ (32, 52, 13), (30, 52, 13), (25, 49, 12), (23, 44, 11),
+ (13, 36, 6), (10, 35, 8), (7, 34, 11), (5, 34, 13),
+ (4, 34, 15), (5, 33, 18), (10, 31, 20), (16, 30, 21),
+ (22, 31, 19), (37, 34, 17), (39, 36, 18), (41, 38, 20),
+ (51, 44, 26), (63, 52, 31), (77, 61, 35), (90, 72, 38),
+ (122, 92, 44), (136, 98, 43), (150, 105, 43), (155, 107, 43),
+ (160, 110, 43), (171, 113, 44), (179, 117, 39), (179, 124, 42),
+ (180, 126, 40), (173, 122, 34), (168, 117, 31), (163, 113, 29),
+ (154, 103, 26), (146, 90, 19), (131, 80, 13), (117, 68, 8),
+ (85, 48, 6), (70, 39, 4), (55, 31, 3), (50, 27, 4),
+ (45, 23, 5), (36, 16, 9), (32, 12, 13), (27, 7, 26),
+ (23, 5, 41), (17, 3, 47), (15, 2, 46), (14, 2, 46),
+ (11, 3, 45), (11, 5, 39), (9, 7, 37), (8, 11, 48),
+ (14, 24, 55), (16, 26, 55), (18, 28, 55), (23, 32, 52),
+ (28, 38, 41), (32, 40, 25), (33, 41, 20), (34, 42, 16),
+ (36, 44, 15), (39, 41, 16), (39, 40, 16), (40, 40, 16),
+ (42, 38, 13), (42, 33, 12), (39, 27, 9), (37, 23, 6),
+ (29, 13, 2), (27, 10, 1), (26, 8, 0), (24, 5, 0),
+ (24, 3, 0), (26, 1, 0), (33, 1, 0), (43, 1, 0),
+ (53, 1, 2), (60, 3, 2), (64, 6, 2), (67, 7, 4),
+ (65, 8, 7), (66, 10, 11), (69, 13, 12), (75, 15, 17),
+ (83, 25, 18), (83, 28, 17), (83, 31, 17), (79, 36, 16),
+ (72, 38, 17), (64, 40, 16), (60, 43, 18), (59, 45, 21),
+ (61, 49, 21), (63, 56, 21), (66, 63, 23), (73, 67, 25),
+ (80, 68, 26), (83, 70, 26), (87, 71, 30), (91, 72, 28),
+ (94, 72, 26), (94, 75, 28), (99, 78, 31), (110, 80, 30),
+ (117, 80, 28), (119, 79, 30), (121, 77, 26), (118, 71, 19),
+ (107, 65, 14), (93, 58, 11), (87, 54, 8), (82, 47, 5),
+ (78, 43, 5), (76, 40, 3), (74, 38, 3), (73, 36, 4),
+ (68, 34, 7), (65, 37, 11), (64, 39, 15), (65, 43, 18),
+ (66, 50, 19), (60, 54, 19), (58, 60, 20), (57, 73, 23),
+ (57, 87, 26), (55, 94, 29), (53, 96, 32), (55, 101, 37),
+ (49, 102, 37), (42, 96, 37), (35, 100, 40), (34, 104, 48),
+ (26, 102, 48), (19, 93, 46), (17, 86, 49), (16, 75, 49),
+ (14, 57, 47), (10, 46, 45), (14, 42, 54), (15, 40, 58),
+ (18, 37, 57), (21, 34, 56), (23, 28, 49), (23, 20, 41),
+ (23, 16, 31), (26, 15, 26), (29, 17, 26), (34, 20, 25),
+ (46, 26, 26), (56, 30, 22), (55, 30, 21), (56, 31, 18),
+ (57, 31, 14), (57, 33, 11), (50, 34, 8), (52, 38, 10)
+ ),
+
+// 435 040221-93
+((186, 187, 147), (208, 206, 183), (217, 215, 198), (227, 224, 214),
+ (233, 231, 226), (239, 239, 238), (236, 236, 234), (234, 233, 231),
+ (218, 216, 205), (207, 204, 190), (197, 193, 175), (185, 183, 162),
+ (174, 174, 149), (162, 165, 137), (150, 156, 126), (145, 151, 119),
+ (140, 146, 113), (121, 129, 83), (114, 121, 69), (108, 113, 55),
+ (104, 110, 50), (100, 108, 46), (99, 108, 46), (99, 108, 46),
+ (100, 111, 46), (103, 112, 43), (106, 113, 40), (106, 114, 36),
+ (107, 115, 33), (106, 114, 31), (105, 114, 29), (98, 112, 28),
+ (93, 108, 27), (78, 99, 22), (72, 96, 19), (66, 93, 17),
+ (61, 91, 16), (57, 89, 16), (55, 89, 17), (53, 90, 18),
+ (50, 86, 23), (50, 85, 25), (51, 85, 27), (54, 86, 28),
+ (58, 88, 30), (60, 90, 31), (62, 93, 32), (66, 95, 36),
+ (70, 97, 39), (77, 99, 43), (77, 97, 40), (78, 96, 38),
+ (75, 94, 34), (73, 93, 30), (71, 91, 28), (69, 89, 27),
+ (61, 83, 23), (59, 80, 20), (58, 77, 18), (55, 75, 14),
+ (53, 74, 11), (51, 73, 9), (49, 72, 8), (45, 72, 7),
+ (44, 72, 7), (54, 80, 14), (68, 90, 23), (83, 101, 33),
+ (90, 109, 41), (98, 117, 50), (113, 130, 68), (126, 141, 87),
+ (149, 160, 115), (157, 163, 118), (165, 167, 122), (169, 170, 123),
+ (174, 174, 125), (174, 174, 126), (174, 174, 128), (172, 176, 132),
+ (173, 175, 134), (171, 168, 125), (167, 161, 113), (163, 154, 101),
+ (158, 150, 94), (153, 146, 87), (142, 139, 75), (133, 131, 68),
+ (127, 127, 64), (133, 130, 68), (139, 134, 72), (143, 136, 75),
+ (147, 139, 78), (154, 146, 82), (159, 153, 91), (162, 156, 101),
+ (165, 161, 112), (175, 175, 136), (184, 183, 148), (193, 191, 160),
+ (198, 197, 166), (204, 203, 172), (216, 213, 185), (224, 221, 196),
+ (228, 224, 201), (218, 218, 194), (208, 212, 188), (201, 206, 180),
+ (195, 200, 172), (183, 188, 155), (168, 178, 140), (154, 164, 125),
+ (142, 151, 108), (112, 126, 76), (103, 119, 68), (95, 112, 60),
+ (81, 99, 45), (67, 88, 34), (56, 74, 27), (48, 63, 20),
+ (42, 51, 12), (44, 53, 10), (46, 56, 9), (48, 59, 10),
+ (51, 62, 11), (56, 67, 14), (60, 71, 15), (64, 73, 17),
+ (68, 76, 18), (76, 85, 20), (78, 88, 20), (80, 91, 21),
+ (84, 98, 23), (85, 104, 22), (84, 105, 22), (82, 105, 22),
+ (77, 104, 22), (76, 102, 23), (76, 100, 24), (76, 100, 24),
+ (76, 101, 24), (75, 100, 22), (73, 98, 20), (71, 96, 18),
+ (67, 93, 16), (63, 84, 16), (63, 82, 17), (64, 80, 18),
+ (63, 76, 18), (61, 72, 18), (57, 67, 17), (54, 61, 17),
+ (50, 59, 19), (51, 59, 20), (53, 60, 21), (56, 62, 23),
+ (60, 67, 27), (64, 71, 30), (71, 74, 35), (78, 81, 42),
+ (88, 90, 49), (117, 114, 64), (126, 122, 69), (136, 130, 75),
+ (153, 146, 89), (168, 160, 104), (180, 172, 120), (191, 181, 137),
+ (208, 198, 165), (212, 200, 169), (216, 203, 173), (224, 211, 183),
+ (229, 217, 192), (233, 220, 198), (235, 220, 198), (231, 217, 196),
+ (224, 213, 191), (217, 205, 180), (211, 198, 168), (204, 194, 159),
+ (200, 189, 151), (195, 183, 139), (189, 176, 125), (181, 169, 111),
+ (162, 151, 82), (157, 149, 77), (153, 147, 73), (147, 145, 70),
+ (146, 144, 71), (147, 146, 74), (151, 150, 79), (158, 154, 85),
+ (162, 156, 92), (165, 159, 97), (161, 159, 98), (155, 154, 97),
+ (148, 149, 94), (139, 143, 89), (131, 135, 84), (124, 127, 81),
+ (118, 117, 78), (108, 109, 73), (95, 96, 66), (81, 84, 57),
+ (65, 72, 47), (49, 62, 34), (37, 54, 24), (32, 48, 18),
+ (31, 46, 14), (30, 44, 13), (31, 43, 15), (33, 43, 18),
+ (36, 46, 22), (41, 52, 26), (50, 61, 30), (61, 73, 37),
+ (75, 86, 45), (92, 99, 55), (107, 113, 73), (121, 126, 90),
+ (133, 138, 107), (144, 148, 121), (153, 156, 130), (160, 164, 134),
+ (169, 169, 131), (181, 177, 136), (191, 183, 142), (202, 190, 150),
+ (213, 198, 158), (220, 201, 163), (219, 200, 161), (215, 194, 150),
+ (212, 189, 138), (207, 182, 126), (205, 176, 117), (204, 176, 113),
+ (207, 178, 111), (208, 177, 110), (205, 176, 106), (199, 173, 99),
+ (190, 169, 91), (181, 161, 83), (170, 155, 78), (162, 152, 71),
+ (155, 148, 66), (150, 147, 61), (145, 144, 57), (140, 141, 54),
+ (138, 140, 52), (136, 137, 54), (142, 144, 68), (146, 151, 84),
+ (155, 159, 99), (163, 167, 113), (172, 176, 128), (181, 185, 142)
+ ),
+
+// 436 040221-94
+((117, 143, 160), (109, 132, 146), (97, 123, 139), (86, 115, 132),
+ (71, 100, 118), (56, 86, 104), (50, 81, 99), (45, 76, 94),
+ (24, 62, 86), (18, 55, 78), (12, 48, 71), (12, 44, 65),
+ (13, 41, 59), (15, 46, 64), (18, 52, 69), (21, 54, 71),
+ (24, 56, 73), (39, 58, 69), (39, 58, 68), (39, 58, 67),
+ (37, 56, 65), (36, 54, 64), (36, 52, 61), (36, 50, 58),
+ (31, 35, 42), (24, 32, 39), (18, 30, 37), (24, 40, 50),
+ (30, 51, 63), (37, 58, 71), (44, 66, 80), (60, 82, 97),
+ (74, 100, 117), (104, 137, 157), (119, 149, 169), (134, 161, 181),
+ (141, 165, 184), (149, 169, 187), (148, 169, 187), (147, 169, 187),
+ (134, 160, 179), (122, 150, 168), (111, 140, 157), (98, 125, 141),
+ (85, 110, 125), (77, 102, 118), (70, 95, 111), (57, 82, 97),
+ (50, 75, 90), (51, 73, 86), (56, 77, 90), (62, 81, 94),
+ (73, 91, 103), (84, 101, 113), (90, 107, 120), (96, 114, 128),
+ (116, 140, 157), (122, 144, 161), (128, 149, 165), (122, 145, 162),
+ (117, 142, 160), (112, 139, 158), (107, 136, 156), (97, 125, 144),
+ (84, 109, 126), (53, 72, 86), (40, 58, 71), (28, 45, 57),
+ (22, 37, 48), (17, 30, 39), (10, 17, 23), (4, 7, 9),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 1, 3), (3, 12, 14), (7, 23, 25),
+ (12, 31, 33), (17, 39, 41), (30, 56, 56), (43, 67, 69),
+ (60, 93, 98), (67, 106, 113), (75, 119, 128), (78, 121, 131),
+ (82, 124, 135), (84, 123, 137), (85, 122, 139), (81, 121, 142),
+ (84, 122, 145), (95, 129, 150), (105, 136, 157), (116, 144, 165),
+ (122, 150, 170), (129, 157, 176), (141, 170, 188), (152, 178, 196),
+ (167, 189, 207), (171, 196, 213), (176, 203, 219), (176, 204, 220),
+ (177, 206, 222), (172, 205, 221), (166, 197, 215), (163, 192, 209),
+ (162, 190, 206), (161, 188, 202), (159, 185, 199), (157, 183, 197),
+ (152, 178, 192), (148, 175, 191), (148, 175, 192), (148, 177, 195),
+ (157, 182, 198), (163, 187, 202), (170, 192, 206), (171, 193, 207),
+ (173, 195, 209), (173, 195, 208), (173, 192, 204), (175, 190, 201),
+ (175, 190, 197), (164, 183, 193), (160, 180, 190), (156, 177, 188),
+ (149, 170, 185), (143, 168, 182), (141, 168, 183), (138, 170, 187),
+ (144, 170, 187), (141, 164, 179), (139, 158, 171), (132, 151, 164),
+ (126, 145, 158), (109, 125, 138), (96, 108, 118), (84, 90, 97),
+ (71, 73, 76), (35, 37, 40), (27, 28, 32), (19, 20, 24),
+ (8, 15, 18), (7, 21, 21), (14, 35, 35), (25, 52, 51),
+ (51, 77, 80), (58, 86, 89), (66, 95, 99), (82, 112, 118),
+ (99, 134, 139), (117, 146, 153), (132, 156, 165), (143, 164, 175),
+ (153, 168, 182), (166, 177, 190), (168, 179, 191), (171, 181, 193),
+ (175, 186, 197), (178, 188, 201), (182, 191, 202), (183, 193, 204),
+ (184, 194, 204), (182, 194, 204), (181, 195, 205), (178, 196, 207),
+ (173, 194, 208), (168, 193, 207), (163, 186, 203), (151, 178, 195),
+ (138, 169, 187), (119, 155, 175), (99, 139, 162), (83, 118, 140),
+ (69, 97, 116), (56, 79, 95), (42, 62, 75), (26, 47, 60),
+ (4, 16, 24), (2, 11, 17), (1, 6, 10), (1, 1, 1),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 1),
+ (0, 1, 2), (0, 11, 10), (2, 20, 18), (2, 27, 29),
+ (3, 35, 40), (6, 35, 46), (7, 43, 56), (9, 53, 62),
+ (8, 53, 62), (6, 52, 61), (6, 42, 53), (7, 33, 48),
+ (7, 33, 44), (6, 26, 33), (4, 18, 22), (6, 14, 16),
+ (11, 14, 18), (17, 25, 30), (24, 37, 45), (28, 49, 55),
+ (36, 63, 69), (49, 78, 86), (62, 95, 106), (75, 109, 126),
+ (79, 122, 137), (81, 130, 143), (82, 131, 144), (80, 131, 144),
+ (79, 125, 144), (72, 118, 138), (65, 115, 133), (61, 110, 129),
+ (59, 110, 125), (60, 111, 127), (61, 112, 129), (65, 116, 133),
+ (73, 119, 140), (85, 126, 144), (96, 136, 152), (103, 144, 160),
+ (108, 150, 166), (111, 150, 170), (114, 148, 170), (115, 145, 166),
+ (113, 144, 165), (111, 144, 165), (112, 146, 168), (110, 146, 168),
+ (119, 153, 174), (124, 156, 177), (124, 155, 175), (126, 156, 174)
+ ),
+
+// 437 040221-95
+((87, 115, 72), (85, 115, 74), (90, 120, 78), (95, 126, 82),
+ (102, 130, 85), (110, 135, 88), (110, 133, 88), (110, 131, 89),
+ (109, 135, 91), (112, 142, 96), (115, 149, 101), (122, 161, 109),
+ (130, 173, 118), (136, 182, 126), (143, 191, 135), (143, 192, 135),
+ (144, 194, 136), (138, 194, 133), (136, 191, 128), (134, 189, 124),
+ (131, 186, 120), (128, 183, 117), (125, 180, 115), (123, 177, 113),
+ (103, 154, 92), (92, 138, 79), (82, 123, 67), (73, 109, 54),
+ (65, 96, 42), (60, 93, 39), (56, 90, 36), (47, 84, 31),
+ (39, 78, 25), (24, 63, 21), (20, 51, 20), (17, 40, 20),
+ (18, 37, 22), (19, 34, 24), (20, 34, 25), (21, 34, 26),
+ (20, 40, 24), (20, 41, 24), (21, 42, 25), (22, 44, 27),
+ (24, 46, 30), (27, 47, 32), (30, 49, 34), (37, 56, 37),
+ (46, 63, 38), (60, 80, 42), (63, 87, 45), (67, 94, 48),
+ (67, 96, 49), (68, 99, 50), (68, 98, 49), (69, 97, 49),
+ (68, 92, 49), (67, 89, 50), (67, 86, 51), (62, 80, 52),
+ (57, 74, 53), (54, 71, 51), (51, 68, 50), (43, 60, 44),
+ (36, 50, 39), (26, 36, 26), (26, 33, 26), (26, 30, 27),
+ (27, 31, 28), (28, 33, 29), (30, 40, 31), (32, 47, 34),
+ (32, 62, 31), (33, 66, 30), (34, 70, 30), (38, 73, 31),
+ (42, 77, 32), (46, 82, 35), (51, 88, 38), (61, 101, 47),
+ (70, 112, 55), (85, 137, 75), (91, 139, 79), (98, 141, 83),
+ (101, 140, 83), (105, 139, 84), (110, 140, 84), (114, 136, 82),
+ (113, 135, 83), (110, 132, 81), (107, 130, 79), (105, 126, 76),
+ (103, 123, 74), (97, 116, 67), (91, 105, 57), (83, 93, 49),
+ (74, 85, 43), (65, 82, 39), (64, 86, 42), (63, 90, 46),
+ (64, 91, 47), (65, 92, 48), (66, 90, 50), (64, 86, 51),
+ (61, 78, 53), (58, 75, 57), (55, 73, 62), (53, 72, 62),
+ (52, 71, 63), (50, 67, 64), (45, 59, 64), (43, 52, 61),
+ (40, 45, 59), (36, 33, 56), (35, 32, 57), (35, 31, 58),
+ (34, 31, 60), (35, 31, 62), (40, 36, 63), (47, 46, 67),
+ (69, 75, 80), (80, 93, 90), (92, 111, 101), (96, 119, 105),
+ (100, 127, 110), (108, 140, 119), (118, 155, 129), (128, 167, 137),
+ (138, 182, 145), (157, 208, 163), (159, 214, 167), (162, 220, 171),
+ (163, 226, 175), (163, 230, 178), (162, 229, 177), (158, 226, 173),
+ (147, 211, 160), (137, 203, 151), (127, 195, 143), (121, 190, 137),
+ (116, 186, 132), (104, 174, 118), (95, 161, 105), (86, 147, 91),
+ (76, 132, 77), (55, 106, 55), (50, 102, 50), (46, 99, 46),
+ (36, 91, 38), (30, 83, 30), (29, 77, 22), (29, 72, 16),
+ (33, 60, 10), (34, 59, 10), (35, 59, 11), (37, 60, 12),
+ (37, 62, 15), (40, 64, 18), (45, 70, 20), (52, 76, 23),
+ (61, 84, 27), (76, 103, 43), (79, 108, 47), (83, 113, 52),
+ (87, 119, 61), (91, 125, 67), (93, 130, 72), (97, 136, 76),
+ (100, 147, 85), (101, 150, 87), (102, 153, 90), (101, 152, 93),
+ (98, 147, 92), (92, 138, 89), (86, 127, 83), (78, 113, 73),
+ (68, 99, 65), (60, 89, 59), (52, 79, 56), (45, 66, 52),
+ (38, 56, 47), (32, 50, 40), (26, 48, 33), (21, 48, 29),
+ (20, 61, 29), (21, 63, 32), (23, 66, 35), (27, 68, 40),
+ (31, 71, 41), (35, 74, 41), (41, 82, 43), (50, 91, 45),
+ (60, 103, 47), (69, 114, 55), (78, 121, 64), (86, 125, 70),
+ (89, 124, 72), (92, 122, 71), (95, 119, 70), (98, 117, 67),
+ (99, 118, 68), (100, 122, 71), (99, 127, 75), (96, 134, 78),
+ (92, 138, 80), (88, 141, 83), (88, 143, 84), (88, 141, 83),
+ (88, 140, 85), (85, 140, 85), (83, 143, 88), (81, 148, 90),
+ (79, 152, 97), (81, 159, 102), (85, 165, 107), (89, 165, 111),
+ (91, 164, 113), (92, 164, 114), (92, 164, 112), (88, 163, 108),
+ (86, 160, 103), (84, 157, 99), (82, 150, 94), (78, 141, 89),
+ (77, 133, 84), (78, 128, 80), (75, 128, 78), (76, 130, 76),
+ (80, 134, 76), (82, 138, 80), (85, 141, 85), (87, 141, 89),
+ (93, 139, 90), (98, 139, 94), (105, 144, 97), (113, 153, 101),
+ (121, 163, 107), (129, 175, 118), (135, 186, 129), (141, 194, 137),
+ (145, 198, 143), (148, 197, 144), (148, 195, 142), (146, 188, 134),
+ (143, 183, 127), (140, 176, 121), (134, 169, 117), (128, 165, 114),
+ (123, 165, 112), (117, 160, 108), (114, 161, 107), (112, 159, 103),
+ (108, 155, 97), (105, 147, 90), (101, 135, 82), (96, 131, 79)
+ ),
+
+// 438 040221-96
+((179, 154, 69), (165, 128, 66), (155, 118, 62), (145, 108, 59),
+ (144, 109, 62), (144, 110, 65), (148, 113, 68), (153, 117, 72),
+ (161, 126, 81), (156, 125, 80), (152, 125, 79), (150, 121, 72),
+ (149, 118, 65), (150, 119, 64), (152, 121, 64), (154, 122, 64),
+ (156, 123, 65), (164, 128, 64), (175, 130, 56), (186, 132, 49),
+ (200, 139, 44), (214, 146, 40), (218, 150, 41), (223, 155, 42),
+ (233, 176, 47), (237, 183, 48), (242, 190, 49), (246, 193, 52),
+ (251, 197, 56), (251, 197, 57), (252, 198, 58), (250, 201, 61),
+ (249, 204, 65), (235, 197, 80), (221, 186, 85), (207, 175, 90),
+ (186, 158, 88), (165, 142, 86), (156, 134, 83), (147, 126, 80),
+ (104, 94, 73), (85, 81, 66), (67, 68, 60), (52, 59, 59),
+ (38, 51, 59), (32, 48, 58), (27, 46, 58), (19, 39, 60),
+ (20, 30, 65), (33, 27, 69), (42, 32, 79), (51, 37, 89),
+ (58, 42, 96), (65, 47, 104), (70, 48, 101), (76, 49, 99),
+ (107, 58, 82), (122, 71, 75), (138, 84, 68), (146, 95, 58),
+ (155, 106, 49), (159, 110, 43), (163, 114, 38), (166, 118, 28),
+ (165, 118, 20), (153, 112, 17), (144, 106, 21), (136, 101, 26),
+ (133, 99, 28), (131, 97, 30), (121, 92, 37), (110, 85, 42),
+ (81, 63, 42), (69, 52, 42), (57, 42, 42), (55, 43, 44),
+ (54, 44, 46), (57, 46, 44), (60, 48, 43), (67, 54, 41),
+ (71, 57, 37), (73, 50, 28), (76, 51, 25), (80, 53, 23),
+ (86, 57, 25), (93, 61, 27), (108, 71, 30), (116, 77, 29),
+ (112, 79, 38), (109, 83, 44), (107, 88, 51), (109, 92, 56),
+ (112, 97, 62), (119, 107, 68), (125, 115, 76), (128, 122, 89),
+ (131, 130, 102), (152, 147, 117), (160, 153, 119), (169, 159, 122),
+ (170, 160, 124), (172, 161, 126), (172, 164, 133), (174, 168, 136),
+ (183, 167, 132), (185, 167, 132), (188, 168, 132), (187, 169, 134),
+ (186, 171, 137), (182, 174, 145), (176, 174, 151), (168, 168, 147),
+ (162, 164, 142), (151, 142, 123), (145, 136, 117), (140, 130, 112),
+ (128, 115, 101), (110, 98, 87), (91, 87, 72), (79, 70, 61),
+ (80, 58, 33), (87, 57, 25), (94, 56, 17), (98, 59, 15),
+ (102, 63, 14), (111, 70, 18), (127, 81, 19), (146, 92, 23),
+ (164, 104, 26), (194, 122, 30), (198, 125, 32), (203, 128, 34),
+ (208, 132, 36), (212, 134, 38), (215, 136, 38), (217, 137, 38),
+ (220, 139, 38), (223, 141, 39), (226, 143, 40), (227, 143, 40),
+ (229, 144, 40), (230, 145, 38), (230, 145, 39), (229, 144, 39),
+ (225, 142, 38), (218, 136, 37), (215, 134, 35), (213, 133, 34),
+ (204, 127, 32), (191, 118, 30), (177, 109, 27), (163, 102, 23),
+ (156, 97, 19), (156, 97, 18), (157, 98, 17), (159, 98, 19),
+ (162, 103, 20), (162, 106, 24), (166, 114, 29), (176, 128, 43),
+ (191, 145, 57), (220, 179, 94), (225, 185, 101), (231, 191, 108),
+ (237, 203, 114), (242, 214, 119), (247, 222, 120), (250, 230, 128),
+ (254, 240, 152), (254, 242, 156), (254, 244, 161), (253, 247, 165),
+ (249, 243, 160), (244, 240, 156), (240, 238, 159), (239, 236, 167),
+ (238, 236, 180), (241, 240, 197), (241, 242, 204), (240, 238, 204),
+ (236, 231, 193), (233, 221, 178), (231, 211, 163), (232, 204, 150),
+ (234, 195, 130), (233, 190, 123), (233, 186, 116), (229, 175, 96),
+ (225, 164, 76), (221, 152, 58), (216, 143, 46), (213, 138, 41),
+ (211, 136, 41), (207, 133, 42), (202, 132, 44), (192, 130, 51),
+ (179, 130, 64), (167, 129, 76), (162, 131, 83), (163, 132, 89),
+ (171, 135, 87), (179, 141, 87), (183, 149, 97), (183, 157, 115),
+ (183, 170, 134), (188, 180, 153), (199, 190, 163), (216, 200, 161),
+ (233, 208, 159), (244, 213, 153), (250, 221, 150), (249, 220, 149),
+ (243, 217, 148), (236, 208, 141), (223, 194, 140), (213, 179, 133),
+ (209, 170, 120), (205, 160, 104), (203, 153, 90), (202, 148, 73),
+ (196, 138, 64), (189, 129, 63), (188, 125, 62), (188, 126, 62),
+ (194, 130, 63), (202, 139, 61), (208, 148, 63), (214, 157, 72),
+ (217, 166, 84), (220, 174, 97), (225, 184, 111), (229, 192, 120),
+ (231, 200, 134), (235, 209, 151), (233, 215, 165), (231, 219, 179),
+ (225, 219, 187), (217, 217, 188), (208, 211, 183), (202, 206, 180),
+ (192, 198, 172), (192, 193, 163), (191, 183, 149), (192, 176, 133),
+ (193, 170, 115), (197, 168, 101), (195, 168, 91), (201, 174, 83),
+ (208, 177, 76), (220, 180, 69), (232, 183, 61), (220, 168, 49),
+ (206, 157, 45), (190, 153, 46), (174, 150, 51), (162, 144, 58)
+ ),
+
+// 439 040221-97
+((138, 99, 27), (149, 112, 31), (141, 102, 29), (134, 93, 27),
+ (133, 88, 24), (133, 83, 21), (132, 80, 19), (131, 78, 18),
+ (120, 64, 22), (107, 55, 21), (94, 46, 21), (76, 36, 19),
+ (58, 27, 17), (44, 25, 17), (31, 24, 17), (27, 29, 23),
+ (23, 34, 29), (12, 78, 51), (9, 90, 57), (6, 103, 64),
+ (6, 111, 80), (6, 120, 96), (7, 133, 104), (8, 147, 112),
+ (18, 163, 120), (18, 139, 111), (19, 116, 103), (17, 104, 96),
+ (15, 93, 89), (15, 90, 85), (16, 87, 81), (19, 68, 62),
+ (22, 50, 40), (25, 25, 15), (33, 23, 10), (41, 22, 5),
+ (53, 27, 4), (66, 32, 3), (72, 36, 2), (78, 41, 2),
+ (101, 55, 2), (112, 56, 2), (123, 57, 2), (132, 54, 2),
+ (142, 51, 2), (149, 49, 2), (157, 48, 2), (165, 58, 5),
+ (168, 63, 14), (145, 72, 31), (135, 77, 34), (125, 83, 38),
+ (111, 91, 43), (97, 99, 48), (87, 100, 48), (77, 101, 48),
+ (55, 94, 37), (54, 85, 31), (54, 77, 26), (72, 69, 17),
+ (91, 61, 9), (104, 59, 6), (117, 57, 3), (131, 57, 2),
+ (137, 54, 1), (133, 51, 1), (133, 48, 2), (134, 45, 3),
+ (130, 43, 3), (127, 41, 3), (118, 37, 4), (108, 36, 4),
+ (93, 30, 3), (84, 26, 3), (76, 22, 3), (72, 23, 3),
+ (68, 25, 3), (66, 27, 3), (65, 30, 4), (61, 33, 5),
+ (62, 35, 3), (73, 44, 4), (79, 52, 7), (85, 61, 10),
+ (89, 64, 9), (93, 68, 9), (102, 71, 7), (107, 76, 3),
+ (101, 77, 8), (87, 72, 7), (74, 67, 7), (65, 64, 5),
+ (57, 61, 3), (42, 54, 2), (30, 45, 4), (20, 39, 4),
+ (13, 31, 4), (5, 20, 0), (6, 19, 0), (7, 18, 0),
+ (10, 18, 0), (13, 19, 0), (21, 22, 1), (37, 26, 3),
+ (73, 42, 9), (86, 52, 11), (100, 63, 14), (105, 65, 15),
+ (110, 67, 16), (120, 69, 16), (128, 71, 14), (131, 72, 16),
+ (130, 73, 14), (111, 60, 11), (105, 55, 8), (99, 50, 6),
+ (83, 41, 2), (70, 37, 1), (58, 37, 1), (48, 42, 1),
+ (33, 56, 1), (29, 63, 8), (25, 70, 15), (23, 76, 17),
+ (22, 83, 19), (26, 89, 20), (27, 95, 15), (27, 96, 17),
+ (26, 89, 22), (24, 78, 25), (26, 75, 21), (28, 72, 17),
+ (29, 63, 11), (31, 55, 9), (32, 48, 9), (37, 47, 7),
+ (67, 62, 5), (85, 74, 9), (104, 86, 14), (110, 89, 14),
+ (117, 93, 15), (123, 99, 16), (121, 105, 18), (120, 114, 26),
+ (129, 133, 41), (152, 150, 55), (149, 148, 54), (147, 146, 53),
+ (131, 132, 48), (122, 132, 46), (124, 134, 49), (138, 135, 46),
+ (152, 116, 30), (150, 111, 24), (148, 107, 18), (145, 102, 11),
+ (144, 102, 6), (147, 100, 4), (151, 100, 4), (157, 102, 6),
+ (164, 105, 6), (182, 103, 4), (187, 105, 4), (192, 107, 4),
+ (202, 108, 9), (209, 116, 14), (215, 128, 21), (220, 128, 27),
+ (228, 136, 39), (229, 140, 41), (230, 144, 44), (224, 151, 51),
+ (209, 156, 58), (191, 161, 60), (177, 155, 60), (172, 153, 59),
+ (173, 144, 54), (173, 139, 53), (162, 138, 49), (155, 134, 44),
+ (152, 131, 42), (154, 125, 35), (165, 120, 33), (171, 118, 31),
+ (174, 122, 34), (173, 123, 33), (173, 124, 32), (173, 127, 34),
+ (177, 128, 35), (184, 132, 41), (189, 133, 49), (193, 136, 51),
+ (194, 139, 53), (193, 141, 52), (196, 145, 54), (196, 144, 58),
+ (195, 143, 59), (197, 142, 55), (194, 140, 49), (192, 139, 42),
+ (189, 135, 39), (185, 130, 38), (183, 123, 35), (179, 112, 31),
+ (173, 103, 26), (166, 93, 20), (161, 89, 18), (158, 88, 16),
+ (158, 88, 16), (158, 92, 18), (158, 96, 17), (162, 105, 23),
+ (168, 117, 32), (176, 129, 39), (184, 140, 47), (186, 146, 48),
+ (184, 147, 44), (179, 142, 45), (166, 130, 43), (151, 120, 41),
+ (134, 107, 38), (116, 93, 26), (99, 81, 17), (81, 66, 9),
+ (64, 57, 4), (50, 49, 2), (39, 42, 0), (32, 40, 0),
+ (29, 44, 0), (27, 51, 2), (29, 59, 3), (36, 64, 6),
+ (44, 66, 8), (52, 69, 10), (60, 73, 12), (64, 77, 15),
+ (74, 78, 17), (84, 75, 20), (92, 71, 19), (96, 66, 16),
+ (91, 63, 16), (86, 63, 18), (81, 66, 25), (74, 71, 33),
+ (69, 75, 38), (62, 76, 39), (54, 76, 37), (51, 77, 35),
+ (50, 79, 38), (61, 86, 42), (84, 102, 54), (99, 106, 53),
+ (106, 106, 44), (106, 99, 37), (103, 85, 22), (119, 92, 24)
+ ),
+
+// 440 040221-98
+((217, 111, 68), (225, 131, 74), (235, 144, 77), (246, 157, 81),
+ (248, 163, 83), (251, 169, 86), (250, 168, 85), (249, 167, 85),
+ (242, 154, 78), (240, 148, 77), (239, 143, 76), (239, 138, 75),
+ (239, 133, 74), (239, 128, 71), (240, 124, 69), (241, 123, 68),
+ (242, 122, 68), (242, 115, 64), (240, 112, 63), (238, 110, 62),
+ (238, 107, 62), (239, 105, 63), (239, 103, 63), (239, 102, 63),
+ (244, 95, 61), (248, 92, 60), (252, 89, 59), (252, 89, 60),
+ (252, 90, 62), (250, 91, 62), (248, 93, 63), (235, 96, 61),
+ (222, 94, 60), (198, 88, 58), (185, 81, 56), (173, 75, 55),
+ (162, 67, 54), (151, 60, 53), (149, 56, 54), (148, 53, 55),
+ (124, 43, 49), (118, 37, 46), (113, 32, 43), (112, 25, 37),
+ (111, 19, 32), (111, 15, 29), (111, 12, 27), (115, 6, 23),
+ (128, 3, 23), (147, 5, 23), (156, 10, 25), (166, 15, 27),
+ (178, 24, 30), (190, 34, 33), (196, 40, 35), (203, 46, 38),
+ (227, 72, 48), (236, 84, 52), (245, 96, 57), (247, 107, 62),
+ (250, 118, 67), (250, 124, 69), (251, 131, 71), (251, 144, 78),
+ (252, 159, 85), (252, 189, 101), (252, 201, 109), (253, 214, 118),
+ (253, 218, 121), (253, 223, 125), (253, 230, 132), (253, 234, 135),
+ (253, 237, 136), (253, 235, 133), (253, 233, 130), (250, 229, 124),
+ (248, 225, 118), (244, 223, 115), (240, 221, 112), (238, 212, 108),
+ (238, 203, 104), (238, 184, 98), (239, 180, 96), (240, 176, 94),
+ (240, 173, 93), (241, 171, 92), (246, 172, 90), (240, 176, 89),
+ (238, 178, 92), (237, 179, 96), (237, 181, 101), (237, 182, 104),
+ (238, 183, 108), (239, 188, 116), (242, 191, 125), (250, 196, 136),
+ (252, 206, 145), (252, 228, 162), (252, 236, 167), (252, 245, 173),
+ (252, 247, 174), (252, 249, 175), (253, 250, 176), (253, 249, 174),
+ (253, 245, 167), (253, 241, 163), (253, 237, 160), (252, 235, 158),
+ (252, 234, 157), (252, 228, 151), (252, 220, 144), (253, 210, 137),
+ (253, 197, 129), (253, 171, 109), (253, 164, 103), (253, 157, 98),
+ (254, 141, 89), (253, 128, 83), (254, 117, 77), (253, 106, 72),
+ (254, 85, 66), (253, 78, 62), (253, 71, 59), (253, 68, 57),
+ (253, 65, 56), (254, 61, 54), (254, 57, 53), (254, 56, 52),
+ (254, 56, 51), (252, 56, 51), (252, 56, 50), (252, 56, 50),
+ (251, 56, 51), (246, 57, 51), (235, 56, 52), (223, 56, 54),
+ (199, 54, 55), (187, 52, 54), (175, 50, 54), (169, 47, 53),
+ (164, 45, 52), (156, 39, 49), (157, 34, 42), (155, 27, 38),
+ (154, 21, 36), (152, 10, 33), (152, 8, 32), (152, 6, 31),
+ (152, 6, 30), (153, 7, 30), (151, 9, 31), (160, 13, 29),
+ (182, 20, 27), (187, 21, 27), (193, 23, 27), (205, 27, 27),
+ (218, 29, 26), (228, 32, 25), (239, 36, 24), (243, 39, 24),
+ (246, 43, 24), (249, 49, 23), (249, 50, 23), (249, 51, 24),
+ (250, 54, 26), (251, 54, 28), (252, 55, 30), (252, 58, 33),
+ (247, 70, 37), (245, 74, 38), (244, 79, 40), (243, 89, 44),
+ (242, 97, 47), (242, 106, 51), (243, 113, 56), (243, 120, 61),
+ (245, 125, 66), (248, 134, 65), (247, 142, 66), (246, 154, 65),
+ (245, 167, 69), (243, 178, 72), (243, 187, 76), (243, 194, 79),
+ (244, 196, 87), (245, 195, 87), (247, 195, 88), (249, 193, 90),
+ (249, 192, 88), (251, 196, 90), (250, 199, 92), (250, 203, 97),
+ (250, 209, 102), (250, 213, 109), (250, 213, 115), (250, 211, 120),
+ (247, 205, 125), (246, 196, 127), (247, 190, 125), (247, 182, 121),
+ (247, 176, 118), (247, 171, 116), (247, 166, 115), (248, 160, 111),
+ (250, 153, 106), (250, 144, 100), (249, 133, 94), (249, 120, 86),
+ (249, 106, 76), (249, 91, 67), (249, 77, 59), (247, 63, 53),
+ (247, 49, 48), (246, 39, 43), (242, 31, 39), (236, 25, 37),
+ (232, 20, 34), (230, 16, 32), (229, 11, 29), (230, 8, 28),
+ (230, 8, 27), (232, 8, 27), (233, 7, 25), (234, 8, 24),
+ (232, 9, 25), (230, 11, 26), (229, 15, 28), (228, 19, 28),
+ (229, 24, 29), (231, 33, 31), (235, 45, 34), (239, 57, 37),
+ (245, 70, 41), (249, 83, 45), (251, 97, 50), (252, 111, 58),
+ (252, 122, 64), (252, 129, 69), (252, 134, 72), (252, 137, 74),
+ (249, 137, 76), (243, 135, 77), (232, 131, 78), (222, 128, 78),
+ (217, 129, 78), (216, 133, 79), (216, 138, 83), (217, 144, 88),
+ (218, 146, 89), (222, 146, 89), (226, 143, 87), (225, 138, 84),
+ (220, 129, 81), (216, 119, 76), (215, 112, 69), (215, 107, 66)
+ ),
+
+// 441 040221-99
+((176, 74, 34), (153, 63, 28), (145, 58, 25), (137, 54, 22),
+ (137, 51, 20), (137, 48, 18), (139, 49, 20), (141, 51, 23),
+ (141, 61, 32), (142, 68, 34), (144, 75, 37), (150, 84, 41),
+ (157, 93, 45), (172, 102, 53), (187, 112, 62), (192, 115, 65),
+ (197, 118, 69), (211, 125, 77), (209, 121, 73), (208, 117, 70),
+ (206, 111, 66), (204, 106, 62), (203, 103, 60), (202, 100, 58),
+ (202, 105, 60), (202, 108, 63), (202, 111, 67), (204, 116, 72),
+ (207, 121, 78), (207, 122, 79), (207, 124, 81), (207, 127, 80),
+ (202, 133, 83), (194, 150, 99), (199, 163, 112), (204, 176, 125),
+ (212, 187, 137), (220, 198, 150), (221, 200, 152), (222, 203, 155),
+ (213, 197, 154), (203, 191, 147), (193, 186, 140), (190, 184, 138),
+ (188, 183, 137), (188, 182, 134), (188, 182, 132), (189, 178, 124),
+ (192, 173, 120), (186, 161, 104), (174, 155, 101), (163, 150, 98),
+ (150, 145, 94), (138, 141, 91), (135, 138, 89), (132, 136, 87),
+ (128, 130, 81), (127, 129, 84), (126, 128, 88), (124, 129, 90),
+ (122, 130, 93), (121, 129, 92), (120, 129, 91), (113, 125, 87),
+ (109, 120, 79), (110, 111, 70), (108, 107, 67), (106, 104, 64),
+ (104, 103, 61), (103, 102, 59), (99, 98, 54), (90, 91, 47),
+ (74, 76, 33), (69, 71, 29), (64, 66, 26), (58, 61, 23),
+ (52, 57, 20), (48, 54, 18), (44, 51, 17), (36, 45, 12),
+ (27, 37, 7), (19, 26, 2), (19, 24, 2), (20, 22, 2),
+ (22, 22, 2), (24, 22, 2), (32, 23, 2), (40, 24, 2),
+ (51, 27, 2), (52, 27, 2), (53, 27, 3), (52, 29, 3),
+ (51, 31, 3), (56, 35, 4), (62, 41, 6), (77, 48, 8),
+ (89, 54, 9), (114, 65, 16), (117, 71, 20), (120, 78, 24),
+ (119, 81, 27), (118, 84, 31), (120, 90, 36), (122, 93, 38),
+ (130, 93, 41), (134, 89, 40), (139, 85, 40), (141, 83, 41),
+ (144, 82, 42), (149, 83, 43), (153, 82, 42), (155, 80, 42),
+ (154, 76, 40), (141, 58, 29), (136, 53, 26), (131, 48, 24),
+ (124, 43, 20), (121, 42, 20), (124, 45, 21), (130, 53, 26),
+ (147, 73, 41), (150, 80, 49), (153, 88, 58), (153, 93, 64),
+ (153, 99, 70), (156, 111, 78), (162, 123, 88), (176, 138, 100),
+ (193, 154, 109), (226, 171, 122), (232, 173, 124), (238, 176, 127),
+ (246, 179, 127), (249, 174, 125), (249, 169, 119), (246, 163, 112),
+ (239, 153, 95), (238, 152, 90), (238, 151, 85), (238, 150, 85),
+ (239, 150, 85), (240, 148, 83), (240, 145, 83), (239, 142, 81),
+ (234, 142, 79), (226, 140, 79), (223, 142, 80), (220, 144, 81),
+ (215, 144, 84), (208, 142, 85), (202, 137, 84), (188, 131, 83),
+ (154, 107, 71), (144, 101, 66), (135, 95, 62), (116, 82, 54),
+ (99, 70, 47), (86, 62, 42), (75, 56, 39), (61, 53, 35),
+ (52, 47, 31), (32, 37, 22), (28, 35, 19), (25, 34, 17),
+ (25, 35, 16), (32, 38, 16), (42, 44, 19), (58, 51, 24),
+ (94, 69, 34), (101, 73, 36), (109, 78, 39), (125, 87, 45),
+ (140, 95, 50), (154, 100, 54), (169, 105, 56), (184, 108, 58),
+ (199, 111, 59), (210, 112, 61), (219, 114, 64), (228, 117, 67),
+ (230, 116, 69), (231, 112, 68), (227, 108, 67), (224, 105, 62),
+ (210, 92, 48), (208, 89, 44), (206, 86, 41), (199, 81, 37),
+ (191, 73, 32), (179, 67, 31), (169, 64, 30), (165, 65, 28),
+ (159, 63, 27), (157, 65, 25), (161, 69, 26), (167, 74, 27),
+ (170, 81, 33), (168, 87, 39), (169, 95, 46), (169, 100, 53),
+ (167, 108, 58), (169, 115, 61), (178, 123, 67), (189, 134, 74),
+ (196, 144, 80), (201, 153, 86), (205, 156, 91), (200, 158, 94),
+ (191, 155, 93), (181, 150, 92), (173, 144, 87), (165, 138, 80),
+ (160, 134, 77), (157, 128, 69), (151, 123, 64), (142, 116, 60),
+ (132, 112, 58), (122, 108, 59), (116, 106, 58), (112, 105, 61),
+ (108, 106, 60), (103, 104, 58), (96, 100, 57), (89, 98, 54),
+ (80, 98, 54), (77, 97, 53), (79, 96, 54), (83, 97, 52),
+ (91, 97, 50), (101, 95, 51), (109, 91, 49), (112, 87, 47),
+ (114, 83, 44), (119, 76, 42), (122, 71, 37), (128, 68, 31),
+ (136, 64, 27), (145, 61, 27), (151, 60, 28), (154, 65, 34),
+ (159, 71, 43), (161, 74, 49), (162, 80, 52), (162, 83, 51),
+ (164, 84, 51), (167, 84, 49), (167, 89, 49), (168, 97, 53),
+ (170, 102, 57), (173, 111, 64), (176, 113, 62), (180, 111, 60),
+ (185, 105, 54), (188, 97, 47), (186, 89, 41), (185, 78, 33)
+ ),
+
+// 442 040222
+((92, 110, 105), (106, 101, 96), (104, 95, 91), (102, 89, 86),
+ (98, 84, 84), (94, 80, 83), (94, 82, 83), (95, 84, 84),
+ (111, 102, 96), (125, 116, 106), (139, 131, 117), (147, 144, 127),
+ (155, 158, 137), (165, 169, 149), (176, 181, 162), (181, 186, 167),
+ (187, 191, 173), (201, 196, 185), (197, 188, 178), (193, 180, 171),
+ (187, 172, 162), (182, 164, 153), (181, 162, 149), (181, 161, 146),
+ (176, 144, 129), (174, 136, 119), (173, 129, 110), (172, 126, 104),
+ (171, 123, 98), (171, 122, 95), (171, 122, 93), (169, 122, 92),
+ (169, 119, 94), (166, 115, 96), (159, 107, 93), (153, 99, 90),
+ (139, 89, 81), (125, 80, 72), (117, 75, 66), (110, 70, 61),
+ (83, 51, 43), (74, 44, 37), (66, 37, 32), (60, 36, 30),
+ (55, 35, 29), (52, 35, 29), (50, 36, 29), (49, 39, 30),
+ (47, 47, 32), (51, 65, 36), (61, 76, 42), (72, 88, 48),
+ (86, 99, 60), (101, 110, 72), (106, 121, 79), (112, 133, 87),
+ (126, 147, 93), (134, 145, 93), (142, 144, 93), (144, 135, 93),
+ (147, 127, 93), (144, 125, 92), (142, 123, 92), (132, 113, 85),
+ (121, 103, 77), (96, 78, 55), (82, 66, 45), (69, 54, 35),
+ (63, 48, 30), (58, 42, 25), (47, 34, 21), (38, 31, 17),
+ (23, 35, 19), (20, 36, 22), (17, 37, 25), (20, 39, 31),
+ (23, 42, 37), (26, 43, 44), (30, 44, 52), (36, 59, 64),
+ (44, 71, 74), (52, 88, 92), (54, 86, 97), (56, 85, 103),
+ (55, 85, 105), (55, 85, 107), (59, 88, 107), (66, 89, 105),
+ (83, 98, 93), (92, 98, 89), (102, 99, 86), (106, 100, 85),
+ (110, 101, 85), (119, 98, 85), (131, 101, 81), (144, 107, 79),
+ (160, 117, 84), (183, 139, 98), (186, 145, 106), (190, 151, 115),
+ (190, 152, 116), (190, 154, 118), (193, 157, 117), (194, 161, 117),
+ (192, 162, 118), (184, 153, 114), (176, 144, 110), (172, 137, 105),
+ (168, 131, 101), (161, 123, 93), (153, 112, 84), (145, 102, 79),
+ (137, 92, 72), (119, 68, 60), (116, 64, 57), (113, 61, 55),
+ (111, 57, 50), (109, 56, 50), (107, 58, 49), (106, 61, 48),
+ (103, 64, 44), (103, 63, 45), (104, 63, 46), (103, 63, 47),
+ (102, 64, 48), (98, 66, 50), (99, 70, 55), (95, 77, 55),
+ (95, 80, 59), (103, 95, 72), (103, 99, 75), (104, 104, 79),
+ (109, 111, 86), (114, 122, 90), (115, 125, 93), (120, 128, 98),
+ (136, 138, 112), (148, 143, 118), (161, 148, 125), (164, 150, 128),
+ (167, 153, 131), (171, 155, 135), (173, 154, 136), (173, 149, 133),
+ (172, 144, 132), (181, 135, 124), (182, 136, 122), (183, 137, 121),
+ (184, 141, 120), (182, 142, 113), (177, 141, 106), (173, 136, 98),
+ (165, 117, 80), (161, 115, 78), (158, 113, 76), (152, 107, 73),
+ (143, 102, 68), (135, 99, 67), (124, 94, 66), (118, 86, 65),
+ (111, 79, 66), (89, 62, 62), (84, 59, 60), (79, 56, 58),
+ (65, 51, 55), (54, 46, 52), (50, 42, 54), (46, 40, 54),
+ (42, 37, 50), (40, 36, 47), (39, 35, 44), (34, 35, 35),
+ (34, 32, 33), (33, 33, 31), (36, 34, 31), (36, 35, 33),
+ (36, 35, 33), (37, 39, 31), (39, 37, 32), (40, 40, 34),
+ (46, 49, 42), (53, 59, 52), (65, 70, 59), (81, 85, 67),
+ (111, 97, 73), (117, 100, 74), (124, 103, 76), (131, 107, 79),
+ (142, 109, 80), (152, 114, 81), (166, 115, 87), (174, 116, 84),
+ (176, 115, 85), (169, 111, 79), (160, 106, 77), (147, 102, 74),
+ (143, 100, 78), (141, 104, 86), (142, 112, 102), (138, 122, 112),
+ (131, 131, 119), (122, 134, 122), (119, 134, 122), (119, 135, 122),
+ (126, 135, 129), (137, 139, 137), (142, 143, 142), (146, 147, 141),
+ (148, 147, 134), (149, 147, 120), (150, 144, 107), (153, 136, 98),
+ (150, 127, 93), (148, 123, 89), (146, 119, 84), (150, 117, 78),
+ (155, 118, 75), (162, 116, 76), (167, 116, 80), (167, 115, 89),
+ (165, 115, 104), (170, 122, 115), (178, 133, 126), (190, 142, 142),
+ (206, 156, 156), (214, 165, 166), (214, 168, 179), (211, 167, 182),
+ (201, 167, 173), (187, 158, 164), (176, 151, 156), (163, 141, 143),
+ (151, 129, 132), (141, 111, 123), (128, 94, 111), (117, 78, 98),
+ (111, 69, 88), (107, 64, 83), (108, 70, 83), (113, 82, 88),
+ (121, 95, 100), (131, 113, 114), (140, 127, 128), (142, 138, 137),
+ (142, 145, 149), (140, 153, 155), (132, 157, 160), (127, 167, 163),
+ (125, 172, 166), (128, 175, 164), (123, 175, 162), (121, 163, 152),
+ (111, 147, 142), (101, 133, 130), (89, 120, 118), (93, 110, 109)
+ ),
+
+// 443 040222-00
+((94, 93, 77), (85, 102, 65), (85, 100, 67), (86, 98, 69),
+ (99, 105, 72), (112, 113, 75), (116, 117, 79), (121, 121, 84),
+ (143, 124, 76), (152, 126, 75), (162, 129, 74), (176, 139, 82),
+ (191, 149, 91), (203, 149, 99), (215, 150, 107), (218, 152, 109),
+ (222, 154, 112), (221, 153, 125), (215, 139, 115), (209, 125, 106),
+ (192, 111, 92), (176, 98, 78), (173, 94, 74), (170, 90, 70),
+ (158, 91, 42), (159, 100, 36), (161, 110, 30), (162, 127, 33),
+ (164, 144, 37), (168, 147, 38), (172, 150, 40), (177, 144, 45),
+ (177, 141, 55), (167, 155, 87), (161, 154, 96), (155, 153, 106),
+ (141, 152, 107), (127, 152, 109), (120, 150, 107), (114, 148, 106),
+ (99, 125, 92), (99, 102, 83), (99, 79, 75), (100, 57, 68),
+ (102, 36, 61), (101, 29, 57), (100, 22, 54), (100, 17, 50),
+ (100, 23, 48), (88, 43, 54), (74, 46, 63), (60, 49, 72),
+ (60, 54, 85), (61, 59, 98), (63, 58, 105), (66, 58, 112),
+ (81, 62, 125), (92, 67, 127), (103, 73, 129), (120, 81, 122),
+ (138, 90, 115), (144, 93, 109), (151, 97, 103), (155, 97, 92),
+ (152, 95, 87), (134, 89, 73), (118, 72, 66), (103, 55, 60),
+ (97, 51, 58), (91, 48, 56), (82, 43, 54), (76, 29, 51),
+ (73, 4, 59), (81, 3, 64), (90, 3, 70), (101, 7, 73),
+ (113, 11, 76), (116, 18, 79), (119, 26, 83), (134, 39, 85),
+ (161, 55, 75), (190, 103, 54), (200, 118, 56), (210, 134, 58),
+ (216, 135, 60), (222, 137, 63), (232, 147, 63), (228, 141, 61),
+ (221, 108, 68), (212, 90, 66), (204, 72, 65), (200, 63, 65),
+ (196, 54, 65), (180, 45, 59), (172, 39, 56), (166, 37, 58),
+ (172, 38, 66), (175, 55, 61), (177, 64, 53), (179, 74, 45),
+ (175, 78, 43), (172, 83, 41), (160, 81, 37), (152, 78, 33),
+ (139, 60, 37), (129, 48, 46), (119, 37, 56), (116, 29, 60),
+ (114, 22, 65), (110, 13, 76), (103, 13, 81), (95, 24, 82),
+ (81, 33, 72), (45, 38, 56), (42, 45, 52), (39, 53, 48),
+ (45, 65, 32), (58, 59, 27), (76, 48, 17), (93, 51, 14),
+ (135, 70, 9), (155, 74, 8), (175, 78, 8), (171, 80, 10),
+ (167, 82, 13), (152, 92, 19), (143, 101, 25), (136, 106, 29),
+ (121, 105, 37), (106, 92, 64), (109, 86, 67), (113, 81, 70),
+ (117, 73, 69), (121, 73, 67), (128, 75, 71), (139, 78, 76),
+ (156, 99, 84), (158, 117, 93), (161, 135, 103), (160, 138, 108),
+ (159, 142, 114), (165, 144, 131), (172, 147, 140), (176, 153, 146),
+ (177, 149, 141), (184, 142, 146), (187, 151, 147), (190, 161, 149),
+ (200, 170, 141), (208, 169, 129), (221, 156, 122), (224, 159, 115),
+ (234, 153, 85), (238, 143, 80), (243, 134, 75), (245, 131, 73),
+ (246, 138, 71), (246, 151, 73), (242, 152, 80), (239, 152, 91),
+ (236, 146, 98), (231, 129, 100), (224, 123, 103), (218, 117, 106),
+ (198, 109, 109), (182, 107, 105), (172, 115, 100), (157, 124, 105),
+ (133, 159, 135), (134, 171, 140), (136, 183, 146), (139, 193, 143),
+ (134, 197, 145), (129, 193, 141), (131, 188, 146), (132, 178, 136),
+ (125, 173, 128), (118, 164, 118), (117, 158, 117), (114, 145, 109),
+ (109, 140, 106), (99, 133, 106), (95, 125, 110), (86, 105, 105),
+ (62, 79, 95), (57, 72, 95), (53, 66, 95), (46, 47, 88),
+ (47, 32, 70), (46, 32, 53), (44, 41, 49), (46, 50, 54),
+ (63, 61, 54), (84, 76, 41), (91, 95, 31), (91, 103, 27),
+ (100, 110, 33), (125, 102, 31), (146, 93, 26), (154, 77, 12),
+ (139, 69, 15), (119, 57, 23), (109, 47, 36), (113, 43, 36),
+ (114, 49, 49), (106, 56, 67), (105, 64, 86), (111, 77, 90),
+ (130, 90, 98), (142, 102, 102), (155, 116, 110), (165, 134, 113),
+ (177, 151, 117), (184, 169, 113), (188, 181, 105), (191, 186, 100),
+ (199, 181, 88), (207, 175, 74), (207, 162, 56), (195, 142, 50),
+ (182, 118, 39), (165, 105, 30), (151, 98, 19), (136, 97, 29),
+ (121, 97, 42), (106, 107, 47), (95, 115, 39), (90, 114, 36),
+ (81, 108, 48), (76, 113, 53), (80, 126, 55), (88, 135, 44),
+ (89, 142, 44), (90, 146, 50), (97, 156, 71), (108, 165, 86),
+ (112, 182, 93), (112, 185, 96), (107, 180, 104), (102, 168, 112),
+ (94, 162, 117), (88, 156, 110), (89, 155, 104), (93, 155, 98),
+ (98, 156, 97), (103, 158, 91), (112, 158, 83), (119, 152, 81),
+ (127, 140, 85), (129, 133, 89), (134, 127, 90), (132, 117, 90),
+ (136, 107, 89), (120, 103, 85), (108, 102, 84), (90, 95, 82)
+ ),
+
+// 444 040222-01
+((54, 94, 49), (43, 94, 43), (41, 93, 50), (39, 93, 58),
+ (38, 95, 61), (38, 97, 65), (37, 98, 63), (36, 99, 62),
+ (25, 88, 69), (21, 78, 73), (17, 68, 77), (16, 63, 66),
+ (15, 58, 56), (15, 54, 48), (15, 50, 41), (14, 46, 40),
+ (14, 43, 40), (15, 33, 44), (16, 33, 44), (18, 34, 44),
+ (20, 40, 45), (22, 46, 46), (24, 50, 48), (27, 55, 51),
+ (35, 67, 56), (35, 68, 57), (35, 70, 59), (35, 73, 61),
+ (36, 77, 64), (38, 78, 65), (41, 79, 66), (42, 77, 74),
+ (44, 73, 76), (43, 70, 95), (48, 73, 106), (53, 76, 117),
+ (68, 87, 123), (83, 99, 129), (93, 107, 135), (103, 115, 142),
+ (146, 152, 174), (163, 169, 184), (181, 186, 195), (200, 201, 200),
+ (220, 216, 206), (223, 219, 206), (227, 222, 206), (219, 221, 196),
+ (201, 214, 177), (161, 191, 136), (139, 170, 112), (118, 150, 89),
+ (92, 133, 69), (66, 116, 50), (57, 110, 43), (49, 105, 37),
+ (33, 80, 27), (29, 70, 24), (26, 60, 22), (24, 54, 19),
+ (23, 49, 17), (24, 47, 17), (25, 46, 17), (26, 44, 17),
+ (28, 44, 17), (33, 59, 21), (39, 69, 26), (45, 80, 32),
+ (48, 84, 34), (52, 88, 36), (60, 95, 43), (69, 101, 48),
+ (77, 111, 64), (73, 106, 73), (70, 102, 83), (66, 92, 88),
+ (62, 82, 93), (59, 78, 97), (57, 75, 101), (50, 70, 109),
+ (42, 69, 120), (36, 68, 131), (35, 65, 128), (34, 62, 125),
+ (34, 62, 120), (35, 62, 116), (36, 67, 106), (38, 72, 95),
+ (38, 71, 72), (37, 69, 60), (37, 68, 48), (37, 70, 44),
+ (37, 73, 40), (39, 81, 38), (40, 83, 45), (42, 82, 56),
+ (46, 82, 68), (52, 89, 95), (56, 93, 113), (60, 98, 131),
+ (65, 101, 139), (70, 105, 147), (82, 112, 169), (96, 124, 180),
+ (122, 145, 200), (134, 154, 202), (147, 164, 205), (151, 166, 203),
+ (155, 169, 201), (158, 171, 203), (156, 169, 209), (149, 163, 205),
+ (143, 157, 205), (121, 138, 182), (116, 136, 177), (111, 134, 172),
+ (95, 131, 161), (85, 127, 149), (77, 125, 134), (71, 113, 117),
+ (65, 103, 97), (61, 100, 91), (57, 98, 86), (55, 94, 84),
+ (54, 90, 83), (51, 81, 85), (49, 73, 94), (47, 69, 103),
+ (47, 68, 112), (54, 71, 124), (55, 74, 127), (57, 78, 130),
+ (59, 83, 135), (59, 86, 141), (57, 86, 141), (56, 84, 145),
+ (54, 83, 150), (49, 80, 148), (44, 77, 147), (41, 74, 143),
+ (39, 72, 139), (36, 65, 132), (34, 59, 121), (31, 55, 107),
+ (28, 51, 92), (25, 45, 61), (25, 43, 55), (25, 41, 50),
+ (25, 41, 39), (25, 43, 31), (25, 47, 25), (25, 53, 20),
+ (21, 56, 32), (21, 57, 38), (21, 59, 45), (22, 59, 61),
+ (22, 61, 72), (23, 64, 83), (23, 66, 90), (25, 67, 98),
+ (27, 71, 105), (38, 86, 105), (40, 91, 102), (43, 96, 100),
+ (50, 103, 97), (55, 116, 94), (62, 129, 92), (69, 143, 90),
+ (78, 155, 105), (80, 154, 109), (82, 153, 114), (86, 149, 125),
+ (87, 143, 132), (86, 141, 135), (86, 134, 141), (87, 132, 139),
+ (90, 129, 132), (91, 128, 125), (88, 130, 115), (88, 132, 111),
+ (86, 141, 106), (87, 150, 97), (86, 156, 88), (80, 158, 81),
+ (70, 142, 86), (68, 138, 89), (66, 134, 92), (61, 122, 91),
+ (54, 112, 83), (46, 101, 72), (41, 88, 65), (37, 77, 63),
+ (34, 63, 68), (33, 57, 69), (32, 56, 69), (30, 56, 69),
+ (28, 60, 64), (25, 59, 70), (23, 60, 76), (27, 68, 83),
+ (33, 77, 89), (39, 89, 86), (42, 100, 81), (42, 105, 76),
+ (45, 108, 67), (47, 110, 60), (51, 109, 51), (52, 105, 43),
+ (50, 97, 37), (47, 85, 30), (41, 73, 23), (36, 60, 17),
+ (30, 47, 12), (25, 36, 9), (21, 28, 6), (19, 25, 4),
+ (18, 25, 3), (17, 28, 3), (17, 29, 3), (18, 32, 4),
+ (19, 36, 7), (21, 40, 10), (23, 48, 14), (26, 56, 18),
+ (31, 65, 22), (36, 75, 26), (40, 81, 30), (42, 85, 32),
+ (42, 88, 32), (42, 89, 31), (41, 89, 28), (39, 86, 25),
+ (34, 81, 22), (32, 76, 21), (31, 73, 20), (31, 72, 22),
+ (32, 75, 22), (33, 79, 25), (38, 87, 31), (46, 98, 37),
+ (58, 113, 47), (69, 132, 55), (80, 142, 64), (89, 150, 79),
+ (92, 151, 95), (100, 151, 111), (109, 155, 120), (112, 151, 123),
+ (114, 144, 122), (106, 131, 120), (91, 114, 116), (86, 106, 111),
+ (77, 97, 98), (73, 91, 84), (69, 91, 70), (58, 87, 54)
+ ),
+
+// 445 040222-02
+((140, 109, 204), (117, 101, 203), (109, 100, 208), (102, 99, 213),
+ (98, 93, 210), (95, 88, 208), (101, 89, 205), (107, 90, 203),
+ (133, 104, 206), (150, 116, 217), (167, 128, 229), (184, 136, 240),
+ (202, 144, 252), (216, 146, 252), (230, 149, 253), (235, 149, 253),
+ (240, 150, 254), (247, 153, 254), (240, 150, 254), (233, 148, 254),
+ (218, 141, 252), (204, 134, 250), (195, 128, 244), (186, 122, 239),
+ (151, 98, 207), (132, 86, 188), (114, 74, 170), (96, 65, 156),
+ (79, 57, 143), (69, 52, 135), (59, 47, 127), (43, 39, 110),
+ (29, 31, 91), (8, 14, 53), (5, 9, 42), (2, 4, 32),
+ (2, 4, 34), (2, 5, 36), (4, 8, 43), (6, 12, 51),
+ (16, 28, 82), (20, 35, 97), (24, 43, 112), (23, 42, 112),
+ (22, 42, 113), (21, 42, 113), (21, 42, 114), (21, 42, 114),
+ (21, 42, 114), (24, 45, 118), (21, 41, 108), (19, 37, 99),
+ (14, 29, 82), (10, 21, 65), (8, 17, 57), (6, 13, 49),
+ (1, 3, 26), (0, 2, 24), (0, 1, 22), (0, 3, 27),
+ (1, 6, 33), (3, 9, 41), (5, 13, 49), (11, 21, 67),
+ (17, 29, 85), (29, 43, 118), (30, 47, 126), (32, 51, 134),
+ (32, 52, 136), (33, 53, 138), (33, 54, 139), (32, 54, 139),
+ (35, 55, 142), (37, 58, 149), (39, 61, 157), (45, 62, 160),
+ (51, 63, 164), (54, 62, 164), (57, 62, 164), (63, 60, 163),
+ (71, 58, 161), (90, 65, 176), (108, 75, 193), (127, 85, 211),
+ (138, 89, 219), (149, 94, 228), (168, 103, 241), (186, 108, 251),
+ (208, 114, 254), (214, 116, 254), (221, 118, 254), (222, 119, 254),
+ (224, 120, 254), (223, 121, 254), (219, 121, 254), (208, 119, 251),
+ (191, 116, 242), (156, 99, 212), (137, 88, 193), (119, 78, 175),
+ (110, 73, 166), (102, 68, 158), (83, 60, 144), (65, 52, 128),
+ (32, 35, 93), (21, 26, 74), (10, 17, 55), (7, 13, 47),
+ (5, 10, 40), (2, 4, 29), (1, 1, 23), (0, 0, 21),
+ (0, 0, 20), (0, 0, 20), (0, 0, 21), (0, 0, 22),
+ (1, 0, 24), (1, 2, 28), (3, 5, 35), (7, 12, 52),
+ (24, 28, 89), (35, 35, 107), (47, 43, 126), (52, 46, 133),
+ (58, 49, 140), (68, 53, 150), (76, 60, 167), (83, 67, 184),
+ (87, 74, 200), (88, 80, 212), (88, 79, 211), (88, 79, 210),
+ (85, 76, 200), (84, 73, 194), (83, 73, 194), (84, 75, 201),
+ (82, 77, 205), (74, 75, 200), (67, 74, 195), (62, 70, 186),
+ (57, 67, 178), (49, 62, 164), (45, 58, 155), (44, 55, 150),
+ (47, 52, 145), (47, 49, 137), (45, 46, 129), (43, 43, 122),
+ (34, 37, 105), (23, 29, 86), (13, 21, 66), (7, 13, 47),
+ (1, 3, 21), (1, 2, 18), (1, 1, 16), (1, 1, 14),
+ (0, 0, 12), (1, 0, 12), (1, 1, 14), (1, 1, 16),
+ (2, 4, 22), (8, 15, 46), (10, 18, 54), (12, 22, 63),
+ (18, 29, 81), (24, 37, 99), (27, 43, 114), (30, 48, 125),
+ (29, 49, 128), (28, 49, 128), (27, 49, 129), (28, 49, 129),
+ (29, 48, 129), (29, 47, 127), (29, 47, 124), (26, 41, 110),
+ (22, 35, 96), (15, 27, 78), (10, 20, 61), (5, 12, 46),
+ (2, 5, 34), (0, 2, 28), (0, 0, 23), (0, 0, 22),
+ (0, 0, 21), (0, 0, 21), (0, 0, 22), (0, 0, 23),
+ (0, 0, 24), (0, 0, 26), (0, 0, 27), (0, 1, 28),
+ (0, 1, 29), (0, 1, 30), (0, 2, 30), (0, 2, 30),
+ (0, 2, 30), (0, 2, 31), (0, 2, 32), (0, 3, 35),
+ (1, 6, 40), (3, 10, 51), (9, 18, 67), (18, 26, 85),
+ (30, 35, 103), (43, 44, 120), (54, 51, 135), (64, 56, 149),
+ (68, 61, 161), (69, 67, 174), (69, 71, 183), (70, 73, 188),
+ (71, 76, 192), (73, 79, 194), (79, 82, 200), (81, 83, 202),
+ (81, 85, 206), (76, 85, 210), (71, 83, 209), (65, 82, 206),
+ (60, 78, 199), (59, 78, 198), (60, 79, 200), (63, 82, 205),
+ (66, 86, 215), (66, 87, 215), (64, 85, 212), (60, 78, 198),
+ (55, 71, 184), (51, 64, 169), (47, 59, 158), (44, 58, 156),
+ (42, 59, 155), (43, 61, 158), (47, 62, 159), (55, 63, 159),
+ (68, 63, 158), (83, 64, 159), (96, 67, 162), (106, 73, 173),
+ (116, 81, 190), (125, 91, 208), (134, 100, 225), (149, 107, 239),
+ (168, 113, 251), (187, 119, 254), (202, 122, 254), (211, 126, 254),
+ (216, 131, 254), (216, 138, 254), (200, 135, 252), (186, 131, 250),
+ (175, 129, 247), (163, 122, 237), (151, 114, 224), (139, 105, 211)
+ ),
+
+// 446 040222-03
+((108, 61, 116), (101, 42, 124), (99, 37, 123), (98, 32, 122),
+ (94, 32, 122), (91, 33, 122), (90, 33, 121), (89, 33, 121),
+ (96, 45, 138), (103, 51, 149), (111, 58, 161), (114, 66, 165),
+ (118, 75, 170), (114, 82, 166), (111, 89, 162), (108, 91, 158),
+ (106, 93, 154), (97, 99, 138), (94, 95, 132), (92, 92, 126),
+ (87, 87, 120), (83, 83, 115), (79, 81, 112), (76, 80, 109),
+ (62, 71, 94), (57, 64, 85), (53, 57, 77), (52, 51, 69),
+ (51, 45, 61), (52, 43, 58), (54, 42, 56), (61, 43, 56),
+ (70, 48, 62), (93, 68, 82), (107, 80, 95), (121, 93, 109),
+ (133, 104, 120), (145, 115, 131), (151, 119, 136), (158, 123, 141),
+ (182, 143, 162), (193, 151, 171), (204, 160, 181), (209, 164, 186),
+ (214, 168, 192), (213, 169, 193), (213, 171, 195), (211, 172, 196),
+ (208, 172, 194), (199, 169, 189), (193, 165, 184), (187, 161, 179),
+ (176, 152, 171), (166, 143, 164), (160, 138, 160), (155, 134, 157),
+ (142, 117, 144), (137, 114, 142), (133, 112, 141), (126, 110, 140),
+ (119, 108, 139), (116, 106, 138), (113, 105, 138), (107, 101, 137),
+ (100, 100, 135), (96, 87, 126), (95, 85, 123), (95, 83, 121),
+ (94, 82, 118), (93, 81, 115), (90, 77, 110), (86, 76, 108),
+ (76, 74, 101), (74, 70, 96), (73, 67, 92), (75, 67, 90),
+ (78, 68, 89), (79, 67, 87), (81, 67, 86), (85, 68, 85),
+ (89, 68, 84), (98, 75, 89), (98, 76, 93), (98, 77, 97),
+ (97, 79, 98), (97, 81, 99), (96, 82, 100), (97, 82, 99),
+ (105, 82, 98), (109, 85, 98), (113, 89, 98), (113, 89, 99),
+ (113, 90, 101), (112, 92, 102), (111, 94, 103), (112, 93, 102),
+ (115, 91, 102), (122, 86, 100), (124, 86, 99), (127, 86, 98),
+ (126, 86, 98), (125, 86, 99), (121, 87, 99), (114, 86, 97),
+ (110, 83, 95), (110, 80, 93), (110, 77, 91), (109, 75, 91),
+ (109, 74, 91), (108, 70, 92), (104, 66, 96), (97, 61, 101),
+ (94, 57, 106), (95, 48, 120), (98, 49, 123), (102, 50, 126),
+ (111, 56, 134), (126, 64, 143), (139, 72, 153), (151, 82, 163),
+ (171, 104, 187), (181, 114, 199), (191, 124, 211), (194, 128, 213),
+ (198, 133, 216), (209, 143, 220), (216, 152, 223), (223, 158, 221),
+ (225, 162, 217), (223, 168, 206), (221, 169, 204), (219, 170, 202),
+ (213, 168, 196), (206, 166, 189), (200, 162, 183), (193, 156, 177),
+ (175, 132, 161), (165, 121, 149), (156, 110, 138), (151, 105, 132),
+ (146, 100, 127), (135, 90, 116), (124, 83, 105), (113, 78, 94),
+ (100, 74, 85), (77, 57, 74), (73, 56, 73), (69, 55, 72),
+ (63, 53, 69), (63, 52, 68), (64, 53, 68), (67, 56, 71),
+ (73, 65, 82), (73, 65, 84), (74, 65, 86), (74, 67, 93),
+ (73, 72, 99), (75, 75, 105), (76, 78, 109), (81, 82, 113),
+ (87, 87, 117), (106, 89, 133), (110, 87, 136), (115, 85, 139),
+ (121, 83, 144), (125, 80, 151), (126, 75, 155), (127, 69, 159),
+ (129, 63, 160), (129, 61, 162), (129, 60, 164), (134, 58, 169),
+ (140, 60, 173), (147, 67, 177), (152, 74, 180), (158, 80, 186),
+ (163, 89, 192), (168, 95, 197), (166, 103, 199), (166, 106, 200),
+ (166, 110, 201), (168, 118, 202), (170, 126, 199), (173, 137, 196),
+ (183, 158, 198), (184, 162, 198), (186, 167, 198), (192, 169, 199),
+ (196, 167, 199), (198, 165, 199), (199, 160, 197), (200, 157, 193),
+ (202, 156, 191), (206, 153, 192), (207, 150, 191), (207, 145, 194),
+ (210, 140, 198), (213, 134, 200), (215, 126, 199), (213, 118, 198),
+ (212, 112, 198), (210, 106, 196), (209, 102, 191), (203, 97, 185),
+ (195, 93, 185), (187, 92, 185), (180, 90, 184), (169, 89, 181),
+ (157, 88, 180), (144, 87, 174), (134, 85, 162), (126, 83, 147),
+ (114, 79, 136), (104, 76, 124), (96, 74, 114), (87, 73, 103),
+ (80, 72, 99), (70, 71, 95), (62, 68, 91), (57, 65, 83),
+ (54, 60, 76), (53, 57, 69), (53, 53, 65), (53, 50, 60),
+ (55, 49, 57), (56, 48, 57), (59, 49, 58), (61, 50, 59),
+ (65, 52, 63), (71, 57, 68), (78, 64, 76), (87, 71, 85),
+ (96, 79, 92), (106, 84, 101), (116, 89, 109), (125, 92, 114),
+ (134, 96, 119), (145, 100, 123), (155, 104, 129), (166, 111, 136),
+ (177, 119, 143), (188, 127, 152), (195, 134, 160), (198, 136, 164),
+ (198, 137, 165), (194, 134, 162), (191, 129, 157), (183, 123, 151),
+ (176, 119, 143), (169, 114, 134), (161, 109, 128), (153, 102, 120),
+ (143, 97, 117), (131, 89, 116), (122, 81, 113), (112, 69, 112)
+ ),
+
+// 447 040222-05
+((97, 154, 138), (60, 119, 109), (59, 117, 109), (58, 115, 109),
+ (65, 124, 114), (73, 133, 120), (78, 139, 123), (83, 146, 126),
+ (104, 166, 142), (111, 173, 147), (119, 181, 152), (122, 183, 157),
+ (125, 186, 162), (128, 189, 165), (131, 192, 168), (132, 193, 168),
+ (133, 195, 169), (142, 198, 178), (149, 202, 181), (157, 207, 184),
+ (162, 208, 182), (168, 209, 180), (171, 211, 180), (175, 213, 181),
+ (158, 191, 164), (148, 178, 155), (138, 165, 147), (118, 153, 139),
+ (99, 141, 131), (97, 139, 129), (95, 137, 128), (92, 136, 131),
+ (95, 136, 126), (94, 139, 123), (91, 132, 117), (88, 126, 111),
+ (76, 124, 108), (65, 122, 105), (61, 117, 102), (57, 112, 100),
+ (50, 106, 97), (47, 104, 94), (45, 102, 91), (43, 102, 89),
+ (41, 102, 87), (40, 101, 85), (39, 101, 84), (39, 99, 84),
+ (40, 101, 85), (45, 103, 91), (49, 107, 99), (53, 111, 107),
+ (58, 116, 112), (63, 122, 118), (65, 125, 120), (68, 128, 123),
+ (73, 134, 125), (74, 135, 125), (76, 136, 125), (72, 132, 121),
+ (69, 128, 117), (65, 125, 115), (62, 122, 113), (58, 117, 110),
+ (55, 112, 105), (55, 114, 105), (62, 118, 108), (69, 123, 111),
+ (74, 125, 116), (79, 127, 121), (89, 132, 127), (93, 138, 131),
+ (103, 147, 145), (103, 155, 149), (104, 163, 153), (108, 168, 154),
+ (113, 173, 156), (113, 174, 157), (114, 176, 158), (119, 179, 159),
+ (124, 184, 162), (132, 193, 170), (142, 199, 177), (152, 206, 184),
+ (156, 208, 186), (161, 211, 189), (169, 215, 191), (176, 219, 197),
+ (188, 220, 203), (191, 221, 205), (194, 222, 208), (191, 220, 207),
+ (188, 218, 206), (184, 218, 205), (174, 210, 196), (151, 197, 184),
+ (125, 182, 173), (87, 146, 141), (72, 130, 127), (58, 115, 113),
+ (53, 111, 108), (49, 107, 104), (44, 102, 95), (43, 100, 89),
+ (43, 106, 86), (48, 112, 90), (53, 119, 94), (55, 123, 95),
+ (57, 127, 96), (64, 134, 101), (69, 139, 108), (70, 144, 108),
+ (70, 141, 109), (72, 134, 113), (75, 131, 112), (78, 128, 111),
+ (84, 123, 109), (88, 119, 110), (98, 121, 109), (104, 125, 105),
+ (101, 135, 110), (96, 138, 111), (91, 141, 112), (88, 142, 113),
+ (85, 144, 115), (80, 146, 119), (78, 145, 121), (81, 146, 125),
+ (84, 146, 130), (96, 137, 128), (97, 136, 127), (99, 135, 126),
+ (87, 128, 120), (80, 120, 109), (75, 113, 100), (60, 108, 94),
+ (44, 104, 91), (48, 108, 94), (52, 113, 97), (55, 116, 101),
+ (58, 119, 105), (63, 127, 111), (71, 136, 115), (80, 145, 123),
+ (85, 151, 130), (95, 160, 137), (97, 162, 139), (99, 164, 141),
+ (101, 164, 145), (101, 166, 144), (99, 163, 141), (94, 157, 137),
+ (78, 139, 123), (73, 134, 120), (68, 130, 118), (63, 122, 115),
+ (61, 120, 114), (62, 123, 117), (70, 131, 124), (79, 140, 130),
+ (86, 148, 135), (99, 162, 143), (100, 163, 142), (101, 165, 141),
+ (99, 165, 139), (95, 161, 133), (88, 155, 127), (81, 148, 121),
+ (62, 124, 103), (58, 119, 99), (54, 115, 95), (48, 106, 89),
+ (42, 98, 84), (37, 95, 79), (35, 94, 76), (36, 94, 78),
+ (37, 94, 81), (42, 100, 88), (51, 111, 97), (60, 122, 109),
+ (73, 135, 122), (88, 152, 134), (104, 167, 145), (122, 180, 154),
+ (152, 199, 165), (153, 200, 165), (155, 202, 165), (154, 202, 167),
+ (152, 200, 165), (143, 196, 160), (131, 191, 162), (125, 187, 164),
+ (123, 186, 162), (123, 186, 163), (121, 183, 165), (118, 181, 162),
+ (115, 180, 157), (113, 179, 151), (107, 174, 146), (100, 169, 142),
+ (98, 168, 137), (93, 163, 131), (85, 154, 128), (81, 148, 124),
+ (77, 140, 121), (70, 130, 118), (65, 124, 115), (65, 122, 116),
+ (66, 123, 118), (68, 127, 118), (75, 136, 122), (81, 146, 127),
+ (87, 153, 131), (95, 161, 135), (100, 167, 141), (103, 170, 145),
+ (109, 174, 148), (114, 178, 152), (116, 181, 154), (121, 185, 154),
+ (127, 190, 154), (130, 194, 156), (134, 198, 157), (141, 202, 160),
+ (153, 205, 164), (152, 204, 168), (148, 203, 174), (153, 202, 175),
+ (149, 199, 174), (139, 196, 174), (135, 194, 171), (134, 192, 168),
+ (130, 191, 165), (126, 188, 162), (124, 186, 159), (121, 182, 155),
+ (115, 179, 152), (113, 176, 151), (112, 174, 150), (111, 175, 148),
+ (113, 176, 151), (116, 177, 154), (116, 179, 154), (115, 179, 157),
+ (115, 176, 156), (112, 170, 152), (108, 161, 150), (109, 151, 143),
+ (112, 143, 134), (110, 137, 136), (111, 144, 140), (121, 153, 142),
+ (126, 159, 150), (124, 174, 160), (112, 174, 152), (101, 160, 140)
+ ),
+
+// 448 040222-06
+((101, 0, 0), (96, 0, 1), (94, 0, 1), (92, 0, 1),
+ (86, 0, 0), (80, 0, 0), (78, 0, 0), (77, 0, 0),
+ (74, 0, 0), (71, 0, 0), (68, 0, 0), (61, 0, 2),
+ (55, 0, 4), (50, 0, 2), (46, 1, 0), (46, 0, 0),
+ (46, 0, 0), (59, 0, 0), (77, 0, 0), (96, 1, 0),
+ (114, 0, 0), (132, 0, 0), (138, 0, 0), (144, 0, 0),
+ (156, 0, 0), (153, 4, 7), (150, 9, 15), (136, 4, 7),
+ (122, 0, 0), (114, 0, 0), (106, 0, 0), (98, 0, 0),
+ (92, 1, 0), (79, 0, 0), (82, 0, 0), (86, 0, 1),
+ (87, 0, 0), (89, 1, 0), (85, 1, 0), (82, 1, 0),
+ (70, 2, 1), (64, 1, 0), (58, 0, 0), (56, 0, 0),
+ (55, 0, 0), (55, 0, 0), (55, 0, 0), (56, 0, 1),
+ (58, 0, 1), (68, 0, 1), (69, 0, 2), (71, 0, 4),
+ (62, 0, 3), (53, 1, 3), (48, 1, 3), (44, 2, 4),
+ (17, 6, 4), (9, 5, 2), (2, 4, 0), (3, 2, 0),
+ (4, 0, 0), (7, 0, 0), (11, 0, 0), (30, 0, 0),
+ (39, 0, 0), (46, 0, 0), (50, 0, 0), (54, 0, 0),
+ (56, 0, 0), (59, 1, 0), (67, 8, 4), (74, 15, 21),
+ (53, 11, 15), (50, 5, 10), (48, 0, 5), (47, 1, 4),
+ (46, 2, 3), (45, 1, 1), (45, 1, 0), (47, 2, 0),
+ (52, 1, 0), (72, 4, 3), (81, 19, 19), (90, 34, 35),
+ (103, 27, 26), (116, 21, 17), (122, 24, 23), (134, 5, 10),
+ (140, 0, 1), (132, 0, 0), (125, 0, 0), (121, 0, 0),
+ (117, 0, 0), (103, 0, 0), (97, 0, 0), (91, 1, 0),
+ (83, 1, 5), (73, 1, 4), (64, 1, 5), (56, 1, 6),
+ (53, 2, 5), (50, 4, 4), (47, 1, 3), (44, 0, 1),
+ (49, 1, 1), (53, 0, 1), (58, 0, 1), (62, 0, 1),
+ (66, 0, 1), (72, 0, 1), (80, 1, 0), (90, 2, 1),
+ (93, 0, 0), (95, 1, 0), (93, 2, 1), (91, 3, 2),
+ (87, 3, 1), (79, 1, 1), (69, 1, 0), (58, 0, 0),
+ (47, 0, 0), (44, 0, 0), (42, 0, 1), (41, 1, 1),
+ (40, 2, 1), (39, 0, 1), (31, 0, 0), (13, 0, 0),
+ (7, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0),
+ (0, 1, 2), (0, 1, 5), (6, 0, 4), (22, 0, 0),
+ (59, 0, 2), (86, 2, 2), (113, 5, 3), (121, 11, 8),
+ (130, 18, 14), (154, 32, 29), (163, 8, 12), (173, 4, 11),
+ (183, 7, 17), (187, 2, 0), (180, 5, 1), (174, 9, 3),
+ (151, 3, 1), (136, 0, 0), (123, 1, 0), (106, 0, 0),
+ (74, 0, 1), (67, 0, 0), (61, 0, 0), (52, 0, 0),
+ (46, 0, 0), (45, 0, 0), (45, 0, 0), (45, 0, 0),
+ (44, 0, 0), (44, 0, 1), (42, 0, 1), (41, 1, 2),
+ (41, 1, 1), (41, 0, 0), (44, 0, 0), (45, 0, 0),
+ (53, 0, 2), (55, 0, 2), (57, 1, 2), (62, 0, 1),
+ (69, 0, 1), (75, 1, 2), (80, 0, 1), (85, 1, 1),
+ (89, 0, 0), (89, 0, 0), (81, 0, 0), (78, 0, 0),
+ (73, 1, 2), (67, 2, 0), (56, 0, 1), (48, 0, 0),
+ (33, 0, 0), (24, 0, 0), (15, 0, 0), (7, 0, 0),
+ (1, 0, 4), (4, 0, 4), (8, 0, 0), (15, 0, 0),
+ (33, 0, 0), (40, 0, 0), (43, 0, 0), (45, 0, 1),
+ (50, 0, 1), (54, 0, 0), (58, 0, 0), (65, 1, 0),
+ (68, 0, 0), (70, 0, 0), (71, 0, 0), (71, 0, 0),
+ (71, 1, 1), (72, 0, 1), (74, 0, 0), (74, 0, 0),
+ (75, 0, 0), (79, 0, 0), (85, 0, 0), (93, 0, 0),
+ (100, 0, 0), (108, 0, 0), (120, 15, 9), (119, 23, 25),
+ (97, 19, 17), (90, 5, 12), (80, 11, 14), (75, 3, 6),
+ (80, 0, 1), (91, 0, 0), (103, 0, 0), (115, 1, 1),
+ (137, 1, 1), (148, 0, 0), (171, 2, 0), (173, 0, 0),
+ (186, 1, 0), (195, 1, 1), (223, 13, 12), (234, 11, 12),
+ (236, 0, 0), (215, 0, 0), (213, 0, 0), (194, 0, 0),
+ (182, 0, 1), (168, 0, 0), (151, 1, 2), (138, 0, 0),
+ (133, 0, 1), (128, 0, 0), (123, 0, 0), (122, 2, 1),
+ (118, 0, 0), (114, 0, 4), (109, 0, 3), (103, 0, 1),
+ (100, 3, 0), (99, 3, 4), (97, 1, 2), (97, 0, 0),
+ (102, 0, 0), (103, 0, 0), (114, 2, 0), (108, 0, 0)
+ ),
+
+// 449 040222-07
+((91, 49, 67), (81, 45, 62), (77, 41, 58), (74, 37, 54),
+ (72, 33, 50), (71, 30, 47), (71, 27, 45), (72, 24, 44),
+ (83, 21, 49), (84, 23, 51), (86, 26, 53), (89, 30, 59),
+ (93, 35, 65), (102, 42, 73), (112, 50, 81), (119, 53, 86),
+ (127, 56, 91), (160, 73, 115), (171, 84, 126), (183, 96, 138),
+ (189, 107, 147), (195, 118, 156), (195, 121, 157), (195, 124, 159),
+ (185, 123, 154), (175, 115, 145), (166, 107, 136), (154, 100, 125),
+ (142, 93, 114), (135, 90, 109), (129, 87, 104), (116, 81, 93),
+ (101, 73, 83), (71, 55, 57), (57, 44, 45), (43, 33, 34),
+ (37, 27, 30), (32, 21, 26), (32, 22, 26), (33, 24, 27),
+ (51, 35, 45), (66, 43, 61), (82, 52, 77), (97, 61, 89),
+ (112, 70, 102), (120, 76, 108), (128, 82, 115), (144, 100, 132),
+ (155, 114, 145), (183, 140, 169), (193, 147, 181), (203, 155, 194),
+ (206, 155, 194), (210, 155, 194), (210, 156, 193), (211, 157, 193),
+ (202, 150, 184), (197, 144, 175), (193, 138, 166), (193, 129, 164),
+ (194, 120, 163), (192, 114, 159), (190, 109, 155), (185, 102, 146),
+ (178, 97, 138), (159, 80, 117), (147, 68, 104), (136, 56, 92),
+ (134, 51, 88), (132, 47, 84), (125, 40, 79), (119, 34, 72),
+ (106, 32, 61), (93, 31, 51), (81, 30, 42), (68, 24, 32),
+ (55, 19, 22), (49, 15, 18), (44, 12, 14), (34, 6, 8),
+ (27, 1, 4), (19, 0, 0), (16, 0, 0), (14, 0, 0),
+ (13, 0, 0), (13, 0, 0), (11, 0, 0), (8, 0, 0),
+ (4, 0, 0), (2, 0, 0), (1, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (1, 0, 0), (2, 0, 0),
+ (3, 0, 0), (5, 0, 0), (5, 0, 0), (6, 0, 0),
+ (6, 0, 0), (6, 0, 0), (6, 0, 0), (7, 0, 0),
+ (11, 1, 1), (14, 1, 4), (18, 1, 7), (19, 0, 7),
+ (21, 0, 8), (23, 1, 8), (23, 1, 8), (22, 2, 9),
+ (20, 2, 8), (17, 2, 6), (17, 2, 6), (17, 3, 7),
+ (17, 2, 8), (17, 2, 9), (18, 2, 9), (17, 3, 9),
+ (12, 3, 5), (8, 3, 3), (4, 3, 1), (3, 3, 0),
+ (2, 3, 0), (0, 2, 0), (0, 1, 0), (0, 1, 0),
+ (1, 2, 0), (5, 2, 1), (7, 2, 2), (10, 2, 3),
+ (15, 3, 5), (23, 7, 10), (31, 12, 17), (40, 18, 25),
+ (62, 31, 43), (76, 34, 52), (90, 37, 61), (98, 38, 64),
+ (106, 39, 68), (121, 39, 67), (129, 39, 70), (136, 42, 74),
+ (138, 45, 77), (133, 50, 78), (130, 48, 77), (128, 46, 76),
+ (123, 46, 79), (120, 41, 69), (113, 32, 61), (104, 26, 53),
+ (81, 18, 36), (73, 16, 31), (65, 15, 27), (49, 10, 19),
+ (34, 8, 19), (27, 8, 16), (24, 9, 14), (26, 11, 14),
+ (32, 16, 19), (53, 31, 36), (60, 34, 41), (68, 38, 47),
+ (83, 45, 60), (96, 52, 74), (110, 59, 88), (126, 66, 99),
+ (152, 85, 121), (159, 91, 127), (166, 97, 133), (180, 111, 143),
+ (193, 122, 152), (201, 130, 163), (207, 137, 172), (209, 138, 175),
+ (206, 138, 176), (199, 135, 171), (187, 130, 164), (174, 124, 152),
+ (159, 118, 137), (144, 108, 123), (131, 102, 112), (122, 95, 102),
+ (112, 84, 94), (110, 81, 93), (109, 79, 93), (105, 75, 90),
+ (101, 73, 87), (97, 72, 84), (92, 69, 81), (89, 67, 76),
+ (89, 66, 72), (92, 65, 72), (98, 68, 76), (106, 73, 81),
+ (117, 79, 89), (130, 89, 99), (141, 96, 110), (149, 105, 119),
+ (156, 112, 122), (159, 115, 124), (159, 116, 124), (158, 116, 124),
+ (157, 116, 121), (160, 118, 123), (165, 120, 127), (171, 125, 132),
+ (179, 132, 140), (186, 135, 147), (191, 139, 150), (191, 140, 152),
+ (187, 138, 148), (183, 134, 145), (179, 127, 140), (174, 120, 134),
+ (169, 115, 131), (166, 108, 128), (162, 104, 124), (156, 100, 119),
+ (150, 94, 111), (142, 86, 104), (134, 76, 95), (128, 66, 87),
+ (121, 59, 82), (120, 52, 80), (123, 45, 86), (124, 41, 93),
+ (131, 37, 101), (138, 33, 110), (146, 37, 120), (154, 41, 127),
+ (160, 44, 133), (166, 49, 135), (171, 51, 140), (174, 55, 144),
+ (177, 59, 147), (180, 57, 152), (179, 59, 154), (177, 60, 154),
+ (170, 60, 150), (162, 60, 141), (152, 61, 130), (142, 62, 119),
+ (131, 66, 106), (120, 65, 95), (110, 62, 86), (105, 63, 81),
+ (99, 63, 76), (91, 62, 69), (84, 58, 65), (82, 56, 63),
+ (83, 53, 61), (84, 53, 61), (83, 50, 60), (86, 48, 63)
+ ),
+
+// 450 040222-08
+((63, 75, 138), (68, 68, 145), (67, 64, 142), (67, 60, 139),
+ (66, 54, 133), (66, 48, 127), (65, 45, 124), (65, 43, 122),
+ (67, 43, 123), (67, 49, 130), (68, 55, 137), (67, 60, 140),
+ (66, 65, 143), (64, 66, 139), (62, 68, 136), (60, 66, 132),
+ (58, 65, 128), (53, 60, 109), (52, 60, 107), (52, 61, 106),
+ (53, 61, 109), (55, 61, 113), (57, 62, 117), (59, 63, 121),
+ (67, 58, 138), (72, 53, 143), (78, 49, 149), (82, 44, 153),
+ (86, 39, 157), (89, 37, 157), (92, 36, 158), (95, 33, 156),
+ (97, 34, 156), (98, 45, 163), (95, 53, 167), (93, 61, 172),
+ (89, 69, 177), (85, 77, 182), (85, 80, 183), (85, 84, 185),
+ (84, 90, 176), (85, 90, 170), (87, 91, 165), (88, 94, 165),
+ (90, 97, 165), (91, 99, 166), (92, 102, 167), (91, 108, 171),
+ (92, 111, 179), (96, 117, 194), (100, 112, 198), (105, 108, 202),
+ (110, 104, 209), (116, 100, 216), (119, 99, 219), (122, 98, 222),
+ (127, 103, 227), (124, 109, 229), (121, 115, 232), (115, 116, 227),
+ (109, 117, 222), (105, 114, 216), (101, 111, 211), (93, 105, 200),
+ (86, 97, 191), (76, 86, 166), (72, 82, 157), (68, 79, 149),
+ (67, 78, 146), (67, 77, 144), (66, 78, 144), (64, 77, 144),
+ (64, 73, 149), (68, 70, 152), (72, 67, 155), (80, 63, 156),
+ (89, 59, 157), (93, 57, 158), (98, 56, 160), (106, 61, 168),
+ (114, 67, 179), (134, 84, 204), (140, 93, 216), (146, 102, 228),
+ (148, 105, 232), (150, 109, 236), (153, 114, 236), (152, 113, 230),
+ (145, 109, 211), (140, 106, 199), (135, 104, 188), (132, 102, 182),
+ (129, 100, 176), (117, 97, 164), (107, 94, 155), (100, 90, 144),
+ (91, 82, 131), (75, 60, 106), (69, 50, 93), (63, 41, 80),
+ (60, 37, 75), (58, 33, 70), (53, 25, 60), (49, 19, 52),
+ (45, 11, 42), (46, 8, 43), (48, 6, 45), (49, 5, 48),
+ (51, 5, 51), (57, 6, 62), (64, 8, 76), (70, 11, 91),
+ (76, 13, 105), (84, 18, 129), (85, 18, 132), (86, 19, 136),
+ (88, 19, 139), (88, 18, 140), (88, 18, 140), (88, 18, 140),
+ (87, 18, 139), (83, 20, 139), (79, 23, 139), (76, 24, 138),
+ (74, 26, 137), (69, 27, 131), (64, 28, 123), (58, 28, 113),
+ (52, 28, 103), (41, 28, 81), (38, 30, 78), (36, 33, 75),
+ (32, 38, 72), (28, 44, 72), (26, 48, 71), (26, 51, 71),
+ (27, 57, 76), (29, 57, 79), (31, 58, 82), (33, 58, 83),
+ (36, 59, 85), (42, 61, 89), (46, 64, 97), (53, 67, 104),
+ (61, 70, 113), (79, 79, 129), (81, 83, 133), (84, 88, 138),
+ (84, 94, 145), (85, 99, 150), (86, 106, 155), (89, 107, 161),
+ (95, 111, 179), (98, 109, 184), (101, 107, 190), (107, 104, 198),
+ (112, 103, 206), (114, 102, 213), (113, 103, 214), (108, 108, 212),
+ (107, 108, 209), (105, 107, 205), (105, 105, 204), (106, 103, 204),
+ (109, 98, 202), (113, 93, 203), (118, 86, 204), (120, 80, 201),
+ (110, 73, 184), (107, 72, 178), (105, 71, 173), (99, 69, 161),
+ (93, 65, 147), (88, 64, 133), (81, 63, 123), (76, 61, 116),
+ (72, 61, 111), (67, 59, 107), (61, 55, 102), (56, 51, 97),
+ (51, 46, 93), (48, 40, 87), (43, 35, 81), (38, 29, 76),
+ (26, 22, 63), (24, 21, 60), (22, 21, 57), (19, 19, 51),
+ (17, 18, 48), (16, 15, 45), (17, 13, 44), (19, 13, 44),
+ (22, 10, 46), (26, 10, 48), (29, 9, 50), (32, 10, 54),
+ (35, 11, 56), (38, 14, 58), (41, 16, 59), (42, 19, 61),
+ (43, 25, 62), (43, 30, 64), (45, 32, 67), (46, 34, 67),
+ (45, 36, 68), (46, 37, 71), (46, 41, 75), (50, 46, 82),
+ (51, 53, 91), (54, 66, 104), (53, 81, 116), (55, 94, 130),
+ (55, 107, 140), (53, 121, 148), (49, 130, 155), (44, 137, 158),
+ (42, 142, 160), (40, 143, 161), (41, 146, 164), (40, 152, 167),
+ (42, 158, 174), (44, 164, 181), (46, 171, 188), (49, 174, 192),
+ (51, 176, 196), (55, 173, 196), (60, 169, 195), (65, 161, 197),
+ (68, 152, 197), (73, 145, 195), (77, 138, 192), (79, 134, 187),
+ (81, 128, 182), (81, 128, 181), (80, 128, 180), (81, 131, 179),
+ (81, 132, 179), (80, 131, 183), (80, 130, 184), (81, 129, 186),
+ (81, 128, 185), (82, 125, 181), (80, 123, 178), (76, 121, 173),
+ (72, 125, 168), (66, 131, 163), (61, 135, 161), (55, 138, 161),
+ (50, 140, 161), (46, 137, 158), (44, 131, 151), (44, 121, 144),
+ (47, 108, 137), (50, 97, 132), (53, 88, 131), (58, 80, 133)
+ ),
+
+// 451 040222-09
+((129, 104, 65), (88, 68, 58), (66, 46, 50), (44, 25, 42),
+ (35, 13, 37), (26, 1, 32), (27, 1, 31), (29, 1, 30),
+ (41, 0, 23), (49, 0, 18), (58, 1, 14), (67, 1, 10),
+ (76, 1, 6), (83, 4, 5), (91, 7, 5), (95, 10, 7),
+ (99, 14, 9), (128, 35, 16), (145, 51, 20), (162, 67, 24),
+ (173, 85, 29), (184, 103, 35), (187, 109, 38), (190, 115, 42),
+ (206, 121, 40), (205, 118, 36), (204, 116, 33), (191, 111, 31),
+ (179, 106, 29), (171, 99, 27), (163, 92, 25), (149, 75, 19),
+ (135, 56, 12), (103, 22, 1), (88, 14, 0), (73, 7, 0),
+ (66, 4, 3), (59, 1, 6), (57, 1, 8), (56, 2, 11),
+ (62, 10, 19), (73, 17, 22), (84, 25, 25), (100, 32, 28),
+ (116, 40, 32), (123, 42, 32), (131, 45, 33), (144, 54, 35),
+ (157, 65, 34), (179, 83, 43), (181, 86, 54), (184, 90, 65),
+ (174, 92, 77), (165, 94, 89), (159, 93, 90), (154, 92, 91),
+ (142, 87, 96), (128, 83, 109), (114, 80, 122), (92, 79, 143),
+ (71, 78, 164), (64, 78, 169), (58, 79, 175), (54, 78, 180),
+ (53, 77, 178), (52, 88, 192), (44, 96, 208), (36, 104, 225),
+ (34, 104, 231), (32, 105, 237), (27, 102, 242), (24, 98, 237),
+ (28, 83, 214), (28, 76, 203), (29, 69, 192), (32, 62, 179),
+ (36, 55, 167), (43, 51, 158), (50, 47, 149), (68, 44, 128),
+ (84, 47, 105), (115, 56, 72), (128, 60, 60), (141, 64, 49),
+ (146, 62, 43), (152, 60, 37), (158, 59, 25), (159, 59, 21),
+ (140, 56, 20), (122, 47, 25), (104, 38, 30), (94, 32, 34),
+ (84, 26, 38), (64, 14, 50), (44, 9, 68), (30, 10, 91),
+ (18, 17, 113), (5, 31, 153), (3, 37, 167), (1, 43, 181),
+ (1, 43, 187), (1, 43, 193), (2, 44, 201), (2, 42, 203),
+ (2, 39, 188), (1, 37, 174), (1, 35, 161), (1, 31, 155),
+ (2, 28, 149), (2, 20, 139), (2, 12, 130), (3, 4, 116),
+ (6, 3, 100), (21, 9, 72), (25, 9, 68), (29, 9, 64),
+ (34, 9, 63), (35, 8, 64), (37, 7, 61), (36, 8, 59),
+ (46, 10, 39), (50, 9, 33), (54, 8, 27), (57, 7, 25),
+ (60, 6, 23), (63, 6, 21), (70, 8, 22), (81, 13, 23),
+ (96, 19, 22), (119, 29, 17), (123, 31, 14), (128, 33, 12),
+ (137, 34, 7), (144, 34, 7), (152, 37, 6), (157, 39, 7),
+ (156, 37, 6), (148, 31, 4), (140, 25, 2), (135, 22, 1),
+ (131, 19, 0), (123, 14, 0), (119, 11, 0), (113, 8, 0),
+ (107, 5, 0), (99, 1, 1), (98, 0, 1), (98, 0, 1),
+ (102, 1, 1), (108, 3, 0), (111, 5, 0), (114, 11, 1),
+ (127, 23, 1), (133, 27, 1), (139, 31, 1), (154, 39, 1),
+ (168, 47, 1), (182, 59, 3), (194, 71, 5), (200, 80, 8),
+ (204, 89, 11), (202, 92, 21), (200, 92, 22), (199, 92, 24),
+ (197, 93, 28), (193, 88, 30), (183, 83, 29), (169, 73, 32),
+ (131, 49, 36), (124, 45, 38), (117, 41, 40), (112, 38, 43),
+ (114, 39, 42), (119, 42, 40), (131, 51, 40), (137, 58, 39),
+ (146, 65, 39), (154, 74, 39), (165, 81, 39), (174, 84, 35),
+ (184, 89, 32), (185, 88, 28), (185, 86, 23), (178, 81, 19),
+ (159, 64, 10), (156, 60, 8), (153, 57, 6), (142, 49, 7),
+ (132, 40, 9), (119, 34, 12), (105, 27, 19), (92, 21, 28),
+ (81, 19, 35), (74, 19, 41), (71, 19, 50), (75, 22, 54),
+ (80, 26, 57), (88, 32, 59), (96, 36, 58), (103, 41, 53),
+ (111, 47, 50), (124, 54, 44), (140, 63, 38), (159, 74, 32),
+ (179, 81, 24), (195, 86, 16), (204, 88, 9), (205, 84, 3),
+ (200, 78, 1), (187, 72, 8), (174, 66, 20), (159, 62, 32),
+ (142, 56, 47), (126, 47, 57), (107, 38, 62), (86, 28, 65),
+ (66, 18, 70), (52, 14, 75), (37, 16, 89), (32, 23, 103),
+ (28, 29, 120), (22, 36, 135), (15, 38, 145), (12, 34, 144),
+ (4, 27, 143), (7, 26, 133), (14, 24, 127), (25, 31, 124),
+ (40, 43, 125), (61, 52, 119), (80, 61, 113), (99, 73, 98),
+ (118, 80, 83), (139, 93, 67), (159, 109, 56), (181, 120, 47),
+ (203, 133, 41), (223, 146, 37), (237, 153, 35), (246, 159, 35),
+ (248, 161, 35), (245, 155, 35), (236, 143, 32), (227, 130, 29),
+ (220, 119, 25), (219, 113, 23), (218, 113, 23), (222, 117, 29),
+ (223, 124, 31), (221, 130, 40), (218, 140, 47), (198, 126, 47),
+ (177, 116, 48), (161, 108, 53), (145, 101, 52), (128, 92, 56)
+ ),
+
+// 452 040222-10
+((105, 97, 60), (56, 52, 35), (45, 37, 28), (35, 22, 21),
+ (48, 26, 19), (61, 30, 18), (65, 31, 17), (70, 33, 16),
+ (76, 29, 14), (74, 30, 15), (72, 31, 16), (65, 36, 18),
+ (59, 41, 20), (45, 40, 24), (32, 40, 28), (25, 40, 29),
+ (18, 40, 31), (5, 41, 34), (4, 39, 32), (4, 38, 30),
+ (3, 33, 26), (3, 29, 22), (4, 26, 20), (6, 24, 18),
+ (26, 17, 12), (39, 14, 8), (53, 11, 5), (68, 12, 6),
+ (83, 13, 7), (89, 13, 8), (95, 13, 9), (103, 12, 9),
+ (98, 9, 6), (89, 12, 9), (78, 12, 11), (67, 13, 13),
+ (49, 12, 13), (31, 11, 14), (25, 12, 14), (19, 14, 15),
+ (22, 28, 23), (31, 36, 26), (41, 45, 29), (46, 55, 32),
+ (52, 66, 36), (55, 71, 37), (59, 76, 39), (61, 80, 42),
+ (59, 79, 43), (50, 75, 40), (41, 73, 40), (33, 71, 40),
+ (23, 61, 39), (13, 52, 38), (9, 48, 37), (6, 44, 36),
+ (3, 40, 32), (2, 38, 31), (2, 37, 31), (3, 37, 31),
+ (4, 37, 31), (6, 38, 29), (9, 39, 28), (21, 43, 28),
+ (36, 49, 29), (78, 70, 42), (95, 87, 55), (112, 105, 68),
+ (122, 115, 73), (132, 126, 79), (147, 143, 78), (158, 153, 72),
+ (139, 148, 82), (124, 144, 85), (109, 140, 88), (90, 129, 74),
+ (71, 119, 61), (62, 110, 60), (54, 102, 59), (43, 85, 62),
+ (42, 76, 69), (66, 83, 70), (82, 87, 72), (99, 91, 74),
+ (104, 88, 74), (109, 86, 75), (118, 91, 74), (133, 93, 69),
+ (157, 88, 55), (155, 81, 51), (153, 75, 47), (151, 73, 46),
+ (149, 71, 45), (152, 70, 47), (159, 73, 48), (166, 77, 51),
+ (174, 92, 53), (178, 123, 62), (172, 121, 63), (166, 120, 65),
+ (161, 119, 62), (157, 118, 60), (138, 115, 62), (121, 121, 57),
+ (91, 96, 45), (84, 74, 36), (78, 52, 27), (70, 47, 24),
+ (62, 42, 22), (46, 32, 20), (37, 27, 17), (43, 23, 15),
+ (62, 22, 12), (82, 26, 14), (83, 28, 15), (84, 31, 16),
+ (83, 34, 20), (89, 37, 21), (100, 43, 20), (100, 45, 23),
+ (87, 44, 25), (75, 40, 22), (63, 36, 19), (55, 33, 18),
+ (48, 30, 17), (33, 24, 14), (19, 20, 13), (8, 15, 12),
+ (3, 14, 9), (1, 16, 10), (1, 17, 11), (2, 19, 13),
+ (3, 24, 17), (4, 28, 20), (5, 34, 24), (5, 41, 32),
+ (15, 57, 61), (30, 72, 85), (45, 88, 110), (54, 99, 122),
+ (64, 111, 134), (84, 127, 150), (102, 142, 165), (119, 151, 181),
+ (127, 153, 191), (131, 155, 194), (129, 152, 185), (127, 150, 177),
+ (118, 137, 157), (103, 113, 129), (74, 92, 104), (54, 68, 81),
+ (25, 40, 46), (21, 35, 40), (17, 31, 34), (9, 27, 25),
+ (6, 25, 21), (12, 24, 21), (23, 28, 22), (35, 34, 24),
+ (47, 41, 28), (64, 55, 34), (72, 58, 35), (80, 62, 36),
+ (94, 71, 38), (109, 76, 42), (113, 80, 41), (113, 81, 42),
+ (117, 78, 38), (120, 77, 38), (124, 76, 39), (130, 72, 38),
+ (133, 69, 37), (135, 67, 37), (136, 63, 36), (132, 59, 40),
+ (130, 60, 48), (125, 63, 58), (121, 67, 69), (123, 80, 88),
+ (116, 92, 108), (111, 108, 120), (107, 129, 129), (95, 133, 121),
+ (76, 132, 115), (69, 127, 110), (63, 122, 106), (61, 123, 102),
+ (53, 115, 84), (43, 105, 60), (31, 85, 46), (15, 60, 31),
+ (8, 43, 25), (8, 33, 22), (14, 32, 20), (26, 35, 20),
+ (36, 41, 23), (47, 61, 32), (62, 75, 49), (77, 94, 69),
+ (96, 108, 90), (113, 115, 102), (134, 131, 106), (153, 135, 110),
+ (167, 143, 116), (175, 141, 121), (167, 128, 119), (164, 115, 105),
+ (150, 93, 86), (137, 77, 69), (121, 61, 57), (95, 51, 48),
+ (76, 44, 41), (53, 35, 36), (35, 30, 33), (18, 26, 34),
+ (7, 26, 34), (2, 29, 32), (1, 31, 31), (1, 35, 30),
+ (2, 37, 31), (4, 39, 31), (5, 39, 32), (4, 40, 33),
+ (4, 39, 33), (5, 38, 32), (5, 37, 30), (6, 34, 28),
+ (6, 31, 26), (4, 29, 25), (4, 27, 25), (4, 27, 24),
+ (4, 26, 25), (4, 26, 24), (4, 27, 24), (3, 29, 26),
+ (5, 32, 29), (12, 39, 36), (21, 47, 47), (34, 63, 67),
+ (56, 85, 93), (79, 109, 117), (108, 134, 140), (134, 152, 158),
+ (155, 171, 178), (179, 192, 201), (198, 214, 221), (215, 231, 228),
+ (230, 240, 223), (235, 234, 207), (229, 222, 187), (226, 206, 169),
+ (192, 176, 142), (160, 155, 119), (138, 130, 95), (104, 108, 74)
+ ),
+
+// 453 040222-11
+((203, 172, 123), (209, 179, 129), (213, 183, 131), (217, 187, 134),
+ (219, 188, 135), (222, 190, 137), (222, 189, 137), (222, 189, 137),
+ (209, 175, 124), (201, 167, 116), (193, 159, 109), (185, 150, 100),
+ (177, 141, 91), (170, 132, 84), (163, 124, 78), (159, 119, 74),
+ (156, 115, 71), (143, 100, 59), (137, 94, 54), (131, 89, 49),
+ (128, 86, 46), (125, 84, 43), (124, 83, 43), (124, 83, 43),
+ (123, 83, 44), (123, 83, 44), (123, 83, 44), (121, 81, 42),
+ (119, 80, 41), (118, 79, 40), (117, 79, 39), (113, 76, 35),
+ (109, 74, 33), (105, 70, 31), (103, 68, 31), (102, 67, 31),
+ (100, 66, 31), (99, 65, 31), (98, 64, 30), (98, 63, 29),
+ (95, 61, 27), (94, 60, 27), (93, 60, 28), (92, 60, 29),
+ (91, 60, 30), (90, 59, 31), (90, 59, 32), (89, 57, 32),
+ (86, 54, 28), (79, 46, 22), (75, 42, 20), (71, 38, 18),
+ (66, 34, 16), (62, 31, 15), (60, 30, 15), (58, 29, 16),
+ (49, 25, 14), (46, 22, 11), (43, 19, 9), (40, 16, 7),
+ (37, 14, 6), (35, 12, 5), (33, 11, 5), (28, 9, 4),
+ (25, 9, 4), (22, 10, 4), (24, 11, 5), (26, 13, 6),
+ (28, 15, 7), (30, 17, 8), (32, 19, 10), (33, 19, 10),
+ (32, 19, 11), (32, 19, 10), (32, 19, 9), (36, 21, 9),
+ (41, 24, 9), (44, 26, 10), (48, 29, 11), (54, 33, 15),
+ (61, 39, 20), (71, 49, 29), (72, 50, 30), (74, 52, 31),
+ (74, 53, 31), (75, 54, 31), (75, 54, 31), (75, 53, 31),
+ (79, 56, 33), (81, 57, 34), (83, 59, 35), (83, 59, 35),
+ (84, 60, 36), (85, 60, 35), (83, 59, 34), (80, 56, 31),
+ (78, 53, 29), (74, 50, 24), (77, 51, 24), (80, 52, 25),
+ (84, 54, 26), (88, 56, 27), (97, 65, 33), (106, 74, 41),
+ (128, 96, 59), (137, 107, 68), (147, 118, 78), (151, 123, 82),
+ (156, 128, 86), (165, 136, 92), (173, 144, 98), (179, 151, 104),
+ (181, 154, 109), (182, 156, 112), (181, 155, 112), (180, 155, 112),
+ (175, 151, 110), (170, 147, 106), (165, 143, 101), (162, 137, 96),
+ (151, 124, 84), (145, 116, 77), (139, 109, 71), (135, 104, 67),
+ (131, 99, 64), (125, 92, 58), (118, 86, 53), (114, 82, 48),
+ (110, 78, 45), (107, 73, 42), (105, 72, 41), (104, 72, 41),
+ (100, 68, 39), (97, 65, 37), (92, 61, 34), (86, 56, 32),
+ (69, 43, 23), (61, 37, 19), (53, 32, 16), (49, 28, 14),
+ (46, 25, 13), (40, 20, 9), (36, 17, 7), (34, 15, 6),
+ (33, 15, 6), (37, 19, 10), (39, 21, 12), (42, 23, 14),
+ (48, 29, 18), (55, 34, 22), (62, 41, 26), (71, 49, 31),
+ (96, 71, 45), (103, 77, 49), (110, 83, 53), (124, 96, 62),
+ (137, 108, 71), (149, 118, 77), (157, 124, 81), (160, 126, 82),
+ (160, 126, 80), (152, 119, 74), (148, 117, 73), (145, 115, 72),
+ (138, 111, 70), (131, 107, 68), (123, 100, 65), (114, 92, 60),
+ (93, 74, 49), (88, 69, 45), (84, 64, 42), (77, 56, 36),
+ (73, 52, 33), (73, 52, 34), (76, 56, 37), (84, 62, 41),
+ (92, 69, 46), (99, 74, 50), (107, 80, 52), (115, 84, 53),
+ (122, 88, 54), (128, 91, 54), (132, 95, 56), (138, 98, 56),
+ (142, 101, 54), (141, 100, 53), (140, 99, 52), (138, 97, 50),
+ (133, 93, 48), (128, 87, 44), (122, 83, 42), (119, 81, 40),
+ (118, 80, 40), (119, 81, 42), (122, 86, 47), (128, 91, 53),
+ (134, 100, 62), (142, 110, 73), (151, 120, 84), (160, 132, 96),
+ (169, 143, 106), (177, 150, 113), (184, 158, 118), (190, 161, 121),
+ (192, 163, 122), (194, 165, 124), (194, 165, 125), (192, 165, 125),
+ (191, 165, 125), (187, 162, 122), (183, 157, 117), (179, 150, 111),
+ (174, 142, 103), (168, 133, 96), (162, 127, 88), (157, 119, 80),
+ (155, 115, 75), (153, 112, 71), (150, 110, 69), (149, 108, 66),
+ (148, 106, 63), (147, 104, 61), (148, 104, 60), (148, 105, 60),
+ (151, 107, 62), (157, 112, 65), (164, 120, 71), (171, 128, 79),
+ (177, 136, 87), (182, 144, 96), (187, 151, 105), (191, 159, 114),
+ (194, 166, 125), (201, 174, 134), (209, 184, 143), (218, 194, 154),
+ (227, 204, 164), (234, 215, 174), (241, 223, 182), (246, 230, 188),
+ (248, 233, 191), (248, 233, 191), (246, 230, 188), (242, 225, 181),
+ (237, 217, 173), (230, 209, 163), (223, 200, 153), (215, 191, 143),
+ (207, 182, 134), (206, 178, 129), (205, 175, 126), (205, 174, 123),
+ (204, 171, 121), (204, 171, 121), (206, 172, 122), (206, 173, 124)
+ ),
+
+// 454 040222-12
+((61, 63, 55), (43, 52, 51), (37, 50, 50), (31, 48, 50),
+ (34, 50, 53), (37, 53, 56), (39, 55, 58), (42, 57, 60),
+ (59, 66, 63), (65, 65, 61), (71, 65, 59), (74, 65, 57),
+ (77, 65, 56), (79, 65, 57), (81, 65, 58), (82, 66, 58),
+ (84, 67, 58), (88, 72, 62), (87, 72, 62), (87, 73, 63),
+ (87, 73, 62), (87, 74, 62), (88, 73, 61), (89, 73, 61),
+ (105, 76, 53), (115, 81, 53), (126, 87, 54), (132, 91, 57),
+ (138, 96, 60), (136, 98, 64), (135, 100, 68), (132, 108, 78),
+ (131, 113, 85), (134, 118, 92), (139, 120, 93), (145, 123, 94),
+ (146, 121, 93), (148, 120, 92), (144, 119, 93), (141, 118, 95),
+ (122, 112, 95), (114, 106, 92), (107, 101, 89), (108, 98, 83),
+ (110, 95, 77), (111, 93, 75), (112, 92, 73), (113, 91, 72),
+ (113, 94, 77), (108, 109, 92), (103, 114, 99), (99, 120, 107),
+ (95, 123, 110), (92, 127, 113), (89, 127, 114), (87, 128, 116),
+ (69, 129, 126), (61, 132, 133), (53, 135, 140), (47, 139, 148),
+ (42, 143, 156), (41, 143, 156), (40, 144, 157), (40, 140, 153),
+ (40, 134, 146), (33, 114, 124), (32, 105, 113), (32, 96, 103),
+ (33, 93, 99), (34, 91, 96), (34, 88, 92), (36, 85, 88),
+ (41, 82, 83), (41, 76, 75), (41, 70, 68), (40, 64, 61),
+ (40, 58, 55), (39, 56, 52), (39, 54, 50), (40, 51, 47),
+ (42, 50, 46), (47, 51, 48), (48, 52, 49), (49, 54, 50),
+ (49, 54, 50), (50, 54, 51), (52, 54, 50), (56, 55, 48),
+ (68, 56, 44), (75, 56, 41), (83, 57, 38), (86, 58, 37),
+ (89, 59, 37), (95, 62, 37), (100, 63, 36), (105, 65, 35),
+ (106, 66, 34), (104, 67, 31), (100, 63, 28), (97, 60, 25),
+ (94, 59, 24), (92, 58, 24), (87, 56, 24), (85, 55, 24),
+ (81, 55, 25), (80, 54, 25), (80, 53, 25), (79, 51, 24),
+ (78, 50, 23), (74, 48, 21), (69, 45, 20), (64, 42, 18),
+ (61, 39, 17), (61, 36, 18), (62, 36, 18), (64, 37, 18),
+ (68, 39, 18), (74, 40, 19), (81, 40, 18), (85, 41, 18),
+ (84, 45, 22), (79, 49, 31), (75, 54, 40), (74, 58, 45),
+ (73, 63, 51), (70, 74, 66), (74, 86, 79), (86, 95, 87),
+ (99, 105, 92), (122, 118, 98), (122, 121, 102), (122, 124, 106),
+ (121, 131, 115), (117, 140, 125), (110, 147, 135), (110, 148, 140),
+ (119, 151, 138), (126, 144, 129), (133, 138, 120), (135, 135, 116),
+ (137, 132, 113), (138, 130, 109), (134, 127, 106), (131, 121, 101),
+ (131, 117, 96), (146, 111, 79), (151, 108, 73), (157, 106, 68),
+ (165, 102, 60), (168, 102, 58), (168, 103, 60), (165, 105, 63),
+ (160, 118, 83), (158, 122, 89), (156, 127, 95), (153, 134, 102),
+ (151, 141, 109), (145, 147, 117), (138, 151, 124), (129, 149, 126),
+ (116, 145, 127), (88, 135, 130), (81, 132, 129), (75, 129, 129),
+ (64, 122, 125), (53, 117, 120), (44, 113, 117), (38, 103, 107),
+ (28, 80, 82), (26, 75, 76), (24, 70, 71), (22, 60, 62),
+ (22, 50, 52), (24, 44, 43), (27, 40, 38), (33, 40, 36),
+ (40, 44, 37), (51, 48, 38), (62, 53, 39), (74, 59, 42),
+ (89, 66, 45), (103, 73, 45), (114, 78, 46), (125, 82, 46),
+ (141, 84, 45), (143, 83, 44), (145, 82, 43), (145, 80, 41),
+ (144, 78, 39), (143, 75, 36), (140, 72, 34), (139, 67, 30),
+ (137, 67, 26), (136, 63, 23), (137, 59, 19), (139, 60, 18),
+ (140, 60, 16), (141, 61, 16), (143, 64, 20), (148, 68, 24),
+ (155, 78, 28), (163, 88, 34), (172, 94, 39), (181, 100, 43),
+ (192, 106, 44), (197, 109, 43), (201, 110, 42), (201, 110, 42),
+ (199, 110, 42), (197, 112, 44), (190, 111, 50), (180, 109, 54),
+ (172, 107, 57), (163, 104, 58), (156, 100, 58), (149, 95, 57),
+ (143, 90, 55), (145, 89, 54), (148, 92, 56), (152, 97, 62),
+ (156, 105, 73), (159, 114, 84), (167, 125, 97), (175, 136, 111),
+ (170, 145, 123), (170, 154, 135), (170, 163, 143), (171, 171, 152),
+ (171, 180, 163), (167, 185, 169), (162, 190, 174), (165, 193, 179),
+ (154, 193, 181), (141, 190, 181), (129, 184, 177), (120, 175, 170),
+ (113, 168, 162), (107, 159, 152), (102, 150, 140), (108, 143, 129),
+ (114, 135, 116), (116, 128, 105), (118, 120, 94), (120, 112, 84),
+ (121, 105, 75), (123, 97, 66), (123, 90, 59), (121, 84, 54),
+ (122, 80, 48), (118, 77, 46), (112, 74, 46), (106, 74, 48),
+ (97, 74, 51), (89, 73, 54), (81, 71, 56), (68, 67, 56)
+ ),
+
+// 455 040222-13
+((33, 6, 3), (26, 9, 4), (23, 11, 4), (21, 13, 5),
+ (31, 15, 4), (41, 18, 4), (45, 21, 3), (50, 24, 3),
+ (71, 39, 5), (83, 46, 10), (95, 53, 15), (108, 61, 22),
+ (121, 70, 30), (131, 82, 40), (141, 95, 51), (146, 100, 55),
+ (152, 106, 59), (181, 132, 78), (191, 142, 87), (202, 153, 96),
+ (210, 156, 98), (219, 159, 100), (222, 159, 100), (226, 159, 100),
+ (222, 151, 93), (204, 136, 86), (186, 121, 79), (166, 100, 68),
+ (146, 80, 57), (136, 72, 50), (127, 64, 43), (109, 53, 37),
+ (90, 40, 29), (68, 27, 22), (62, 26, 18), (57, 25, 15),
+ (53, 26, 14), (49, 28, 14), (48, 30, 16), (48, 32, 18),
+ (40, 36, 16), (34, 35, 15), (29, 34, 14), (26, 31, 17),
+ (24, 29, 21), (23, 29, 23), (22, 30, 26), (20, 28, 30),
+ (23, 33, 30), (44, 40, 37), (61, 47, 42), (78, 54, 47),
+ (96, 58, 42), (114, 62, 37), (125, 65, 33), (136, 68, 30),
+ (177, 91, 34), (180, 87, 32), (184, 84, 30), (171, 72, 22),
+ (158, 61, 15), (150, 59, 14), (143, 58, 14), (124, 58, 17),
+ (102, 47, 18), (53, 18, 12), (40, 14, 12), (27, 10, 13),
+ (25, 9, 14), (23, 9, 15), (21, 6, 12), (22, 5, 12),
+ (25, 6, 13), (28, 5, 11), (31, 5, 9), (30, 4, 6),
+ (30, 3, 3), (28, 3, 3), (26, 4, 4), (24, 5, 8),
+ (23, 7, 9), (29, 16, 6), (37, 23, 9), (45, 30, 12),
+ (51, 33, 15), (57, 36, 19), (75, 49, 26), (93, 60, 32),
+ (127, 88, 40), (145, 96, 48), (163, 105, 57), (171, 110, 63),
+ (180, 115, 70), (189, 122, 80), (195, 137, 94), (203, 145, 100),
+ (209, 150, 99), (223, 156, 99), (223, 166, 116), (224, 177, 133),
+ (225, 183, 136), (227, 190, 139), (236, 199, 134), (244, 203, 123),
+ (243, 207, 131), (245, 213, 139), (248, 219, 148), (251, 217, 147),
+ (254, 216, 147), (252, 209, 132), (244, 197, 125), (233, 184, 121),
+ (219, 171, 115), (185, 135, 96), (172, 126, 88), (160, 118, 81),
+ (136, 103, 69), (115, 90, 56), (97, 82, 46), (87, 75, 39),
+ (71, 74, 38), (67, 72, 37), (63, 70, 37), (62, 66, 34),
+ (61, 62, 32), (63, 58, 32), (64, 55, 30), (66, 48, 29),
+ (62, 42, 25), (53, 21, 9), (54, 19, 6), (56, 17, 3),
+ (65, 21, 2), (74, 28, 6), (84, 37, 13), (90, 47, 21),
+ (99, 60, 39), (97, 63, 48), (95, 67, 58), (91, 66, 62),
+ (88, 66, 67), (81, 61, 65), (69, 54, 63), (57, 45, 58),
+ (43, 36, 52), (23, 20, 37), (20, 17, 31), (17, 15, 26),
+ (15, 14, 17), (14, 13, 9), (15, 17, 7), (17, 23, 9),
+ (22, 34, 14), (23, 35, 14), (24, 37, 15), (26, 39, 15),
+ (27, 41, 16), (29, 40, 15), (31, 41, 15), (32, 39, 13),
+ (33, 36, 11), (29, 34, 12), (29, 35, 12), (30, 36, 13),
+ (35, 38, 15), (38, 38, 15), (41, 40, 15), (40, 41, 16),
+ (39, 41, 16), (39, 38, 15), (40, 36, 15), (42, 29, 12),
+ (40, 24, 9), (36, 18, 4), (32, 14, 2), (29, 10, 1),
+ (28, 6, 0), (26, 3, 0), (22, 1, 0), (18, 0, 0),
+ (16, 1, 0), (16, 3, 0), (20, 6, 1), (25, 9, 2),
+ (44, 21, 3), (49, 24, 2), (54, 27, 2), (64, 29, 3),
+ (71, 29, 5), (80, 27, 5), (85, 25, 5), (86, 26, 2),
+ (83, 23, 2), (76, 19, 2), (70, 12, 2), (63, 5, 2),
+ (56, 3, 0), (53, 2, 0), (50, 4, 0), (48, 8, 0),
+ (45, 9, 0), (42, 11, 1), (43, 10, 1), (44, 10, 2),
+ (45, 12, 2), (42, 12, 1), (36, 14, 2), (33, 13, 1),
+ (33, 12, 1), (35, 13, 1), (42, 15, 3), (52, 21, 7),
+ (63, 33, 14), (82, 46, 21), (98, 60, 29), (112, 72, 37),
+ (125, 78, 46), (131, 85, 57), (140, 91, 61), (139, 97, 65),
+ (135, 102, 66), (124, 96, 67), (111, 91, 77), (105, 86, 84),
+ (94, 81, 89), (83, 79, 90), (67, 70, 84), (54, 63, 84),
+ (52, 59, 86), (52, 56, 86), (51, 53, 85), (47, 48, 74),
+ (40, 40, 63), (39, 33, 56), (41, 31, 50), (41, 30, 50),
+ (44, 31, 51), (45, 36, 54), (52, 42, 63), (60, 50, 74),
+ (66, 59, 87), (71, 67, 98), (76, 76, 110), (88, 86, 115),
+ (96, 93, 114), (101, 95, 110), (102, 91, 99), (93, 80, 89),
+ (89, 73, 77), (86, 64, 62), (81, 54, 47), (79, 44, 33),
+ (62, 30, 21), (48, 20, 12), (38, 12, 7), (30, 7, 4)
+ ),
+
+// 456 040222-15
+((153, 104, 63), (189, 101, 74), (188, 94, 76), (188, 88, 78),
+ (211, 75, 65), (235, 63, 52), (240, 53, 46), (246, 44, 41),
+ (251, 16, 20), (240, 16, 15), (230, 16, 10), (201, 15, 7),
+ (173, 15, 4), (148, 19, 7), (123, 23, 11), (115, 25, 13),
+ (108, 28, 16), (61, 46, 26), (52, 64, 36), (43, 82, 47),
+ (51, 103, 68), (59, 125, 89), (63, 136, 99), (68, 147, 110),
+ (81, 183, 133), (78, 183, 135), (75, 184, 138), (66, 173, 135),
+ (57, 162, 133), (50, 152, 126), (44, 143, 120), (34, 121, 105),
+ (23, 98, 86), (13, 71, 63), (19, 73, 69), (26, 75, 76),
+ (42, 94, 95), (59, 114, 114), (66, 126, 121), (74, 138, 128),
+ (98, 180, 147), (122, 202, 154), (146, 224, 162), (168, 223, 162),
+ (191, 223, 163), (195, 213, 156), (199, 203, 149), (208, 175, 124),
+ (219, 156, 97), (244, 119, 68), (247, 105, 60), (251, 92, 52),
+ (251, 94, 50), (252, 96, 49), (250, 100, 49), (248, 105, 50),
+ (232, 100, 37), (220, 97, 35), (209, 95, 34), (205, 92, 37),
+ (202, 90, 41), (200, 80, 36), (198, 70, 31), (193, 47, 18),
+ (187, 23, 5), (193, 20, 2), (199, 20, 3), (205, 21, 5),
+ (200, 22, 4), (196, 23, 3), (176, 29, 5), (155, 40, 10),
+ (115, 67, 22), (97, 80, 26), (79, 94, 30), (56, 97, 35),
+ (34, 100, 41), (25, 97, 43), (17, 94, 45), (16, 90, 45),
+ (15, 84, 39), (12, 62, 35), (8, 48, 32), (5, 34, 29),
+ (4, 30, 26), (4, 26, 23), (4, 27, 22), (5, 38, 33),
+ (14, 79, 71), (21, 102, 91), (28, 125, 112), (33, 136, 123),
+ (38, 148, 135), (40, 169, 155), (52, 192, 179), (62, 215, 205),
+ (73, 231, 218), (83, 241, 230), (79, 232, 223), (75, 224, 216),
+ (75, 218, 212), (76, 213, 208), (79, 206, 198), (81, 197, 187),
+ (67, 191, 156), (66, 189, 149), (66, 188, 142), (68, 178, 147),
+ (71, 169, 152), (73, 152, 164), (76, 142, 173), (78, 145, 185),
+ (83, 161, 182), (100, 150, 173), (107, 145, 168), (114, 141, 163),
+ (129, 133, 168), (142, 148, 161), (163, 154, 139), (178, 154, 115),
+ (215, 131, 66), (218, 119, 60), (222, 107, 55), (220, 102, 52),
+ (219, 97, 50), (204, 79, 35), (189, 68, 28), (162, 60, 29),
+ (138, 64, 37), (107, 87, 58), (99, 93, 60), (91, 100, 62),
+ (73, 107, 64), (54, 113, 77), (50, 122, 91), (48, 127, 104),
+ (50, 128, 98), (57, 119, 86), (65, 111, 74), (75, 106, 68),
+ (85, 101, 63), (98, 90, 57), (111, 90, 49), (119, 100, 44),
+ (111, 109, 41), (113, 123, 25), (116, 127, 23), (119, 131, 22),
+ (135, 147, 37), (131, 163, 61), (123, 179, 82), (114, 189, 93),
+ (105, 212, 91), (107, 214, 93), (109, 216, 95), (122, 223, 107),
+ (139, 208, 112), (152, 196, 102), (163, 180, 90), (162, 162, 72),
+ (168, 155, 64), (175, 145, 79), (180, 137, 84), (186, 130, 90),
+ (180, 112, 103), (177, 91, 103), (171, 81, 106), (141, 86, 110),
+ (90, 106, 124), (80, 106, 126), (71, 106, 128), (77, 108, 135),
+ (70, 121, 138), (71, 135, 133), (69, 157, 141), (69, 175, 150),
+ (86, 189, 167), (103, 202, 187), (123, 213, 197), (143, 223, 199),
+ (161, 216, 196), (180, 206, 185), (198, 183, 175), (208, 160, 155),
+ (208, 132, 109), (202, 131, 101), (197, 131, 93), (184, 128, 87),
+ (169, 127, 81), (158, 133, 70), (148, 138, 66), (147, 143, 63),
+ (149, 146, 66), (149, 146, 67), (155, 146, 60), (160, 141, 57),
+ (177, 136, 50), (198, 132, 46), (204, 129, 45), (195, 127, 43),
+ (174, 126, 48), (150, 126, 49), (136, 125, 49), (119, 136, 53),
+ (99, 148, 60), (77, 160, 80), (61, 170, 100), (55, 175, 119),
+ (57, 184, 132), (64, 192, 139), (77, 198, 147), (98, 207, 156),
+ (123, 217, 164), (147, 224, 174), (167, 223, 179), (186, 213, 170),
+ (202, 199, 152), (221, 184, 123), (236, 172, 98), (246, 156, 82),
+ (251, 137, 68), (245, 118, 52), (232, 102, 37), (204, 94, 24),
+ (174, 86, 17), (147, 79, 16), (122, 69, 13), (106, 57, 14),
+ (79, 52, 18), (52, 48, 23), (28, 44, 24), (9, 40, 21),
+ (5, 35, 19), (4, 33, 18), (7, 35, 22), (9, 38, 25),
+ (11, 45, 24), (9, 53, 27), (6, 59, 27), (5, 62, 26),
+ (6, 61, 27), (7, 61, 26), (7, 62, 28), (7, 65, 33),
+ (7, 65, 35), (9, 60, 34), (10, 54, 34), (11, 48, 32),
+ (13, 41, 31), (20, 38, 29), (42, 39, 25), (73, 52, 27),
+ (73, 65, 40), (80, 74, 52), (83, 87, 61), (96, 94, 66)
+ ),
+
+// 457 040222-16
+((100, 134, 148), (88, 123, 138), (82, 116, 131), (76, 110, 125),
+ (73, 106, 121), (70, 102, 117), (69, 101, 115), (69, 100, 114),
+ (64, 97, 110), (65, 98, 112), (67, 100, 115), (68, 103, 118),
+ (70, 106, 122), (71, 108, 124), (72, 110, 127), (72, 110, 128),
+ (72, 110, 129), (72, 110, 129), (73, 111, 130), (75, 113, 131),
+ (78, 115, 132), (81, 118, 134), (83, 120, 136), (85, 123, 138),
+ (92, 130, 145), (95, 133, 147), (99, 136, 150), (100, 138, 153),
+ (102, 141, 157), (104, 144, 159), (106, 147, 162), (111, 154, 168),
+ (115, 159, 173), (125, 168, 179), (125, 167, 177), (125, 166, 176),
+ (121, 160, 169), (118, 154, 162), (115, 149, 157), (113, 145, 152),
+ (98, 123, 131), (91, 114, 122), (84, 105, 113), (79, 99, 106),
+ (75, 93, 99), (73, 91, 97), (72, 89, 96), (69, 86, 92),
+ (67, 83, 89), (68, 80, 85), (66, 76, 80), (64, 73, 76),
+ (60, 68, 71), (57, 64, 67), (55, 61, 65), (53, 59, 63),
+ (46, 52, 57), (44, 51, 55), (43, 50, 54), (44, 51, 55),
+ (46, 52, 56), (48, 54, 58), (51, 57, 61), (56, 64, 67),
+ (64, 72, 75), (83, 92, 95), (93, 102, 105), (104, 113, 115),
+ (108, 117, 120), (113, 122, 126), (122, 131, 134), (126, 137, 141),
+ (138, 149, 154), (144, 155, 159), (151, 162, 165), (159, 170, 172),
+ (167, 179, 180), (171, 183, 184), (175, 188, 189), (184, 197, 197),
+ (189, 205, 206), (202, 218, 219), (207, 223, 223), (212, 228, 228),
+ (213, 229, 229), (214, 231, 231), (216, 232, 233), (216, 232, 232),
+ (215, 231, 231), (213, 229, 229), (211, 227, 227), (210, 226, 226),
+ (209, 226, 225), (208, 224, 224), (208, 223, 222), (207, 222, 221),
+ (206, 221, 221), (204, 219, 220), (203, 218, 220), (202, 217, 220),
+ (202, 216, 218), (202, 215, 217), (200, 212, 214), (195, 209, 212),
+ (184, 199, 203), (177, 192, 196), (170, 185, 189), (166, 181, 185),
+ (162, 177, 182), (155, 170, 175), (147, 163, 169), (141, 158, 164),
+ (135, 153, 160), (122, 141, 150), (119, 140, 149), (117, 139, 149),
+ (114, 137, 148), (110, 137, 148), (108, 136, 148), (106, 137, 149),
+ (103, 136, 149), (102, 136, 149), (101, 136, 149), (100, 135, 148),
+ (100, 134, 148), (97, 130, 144), (95, 127, 143), (94, 126, 142),
+ (93, 127, 143), (98, 132, 147), (100, 134, 148), (103, 136, 150),
+ (107, 139, 154), (111, 143, 157), (112, 145, 159), (113, 146, 160),
+ (107, 139, 154), (101, 131, 146), (96, 123, 138), (91, 118, 133),
+ (87, 113, 128), (80, 105, 120), (74, 98, 111), (70, 91, 104),
+ (67, 86, 99), (63, 82, 96), (63, 82, 96), (64, 83, 97),
+ (66, 87, 100), (68, 90, 104), (69, 93, 108), (68, 94, 112),
+ (67, 96, 116), (67, 96, 116), (67, 97, 117), (67, 98, 117),
+ (67, 98, 117), (67, 97, 116), (65, 95, 115), (66, 95, 112),
+ (65, 94, 111), (63, 93, 111), (63, 93, 110), (63, 93, 110),
+ (63, 92, 109), (63, 92, 109), (64, 91, 107), (63, 90, 106),
+ (59, 83, 99), (57, 81, 96), (56, 79, 94), (53, 74, 89),
+ (50, 69, 83), (46, 64, 77), (42, 59, 72), (39, 54, 66),
+ (36, 50, 62), (35, 47, 58), (33, 45, 56), (33, 45, 55),
+ (33, 45, 55), (33, 45, 56), (34, 47, 59), (36, 50, 62),
+ (39, 55, 71), (39, 56, 73), (40, 58, 75), (42, 60, 79),
+ (43, 63, 82), (45, 65, 84), (47, 68, 87), (51, 72, 91),
+ (56, 76, 94), (61, 81, 99), (67, 87, 104), (73, 94, 110),
+ (79, 100, 116), (86, 107, 123), (92, 113, 129), (99, 120, 135),
+ (105, 125, 141), (110, 130, 145), (115, 136, 150), (122, 142, 155),
+ (127, 148, 160), (134, 155, 164), (140, 161, 170), (146, 167, 175),
+ (151, 173, 179), (156, 177, 182), (159, 179, 183), (161, 179, 181),
+ (158, 174, 178), (153, 169, 172), (148, 163, 166), (142, 156, 160),
+ (136, 150, 154), (130, 146, 150), (126, 142, 148), (123, 141, 148),
+ (121, 141, 149), (121, 142, 150), (120, 143, 150), (120, 141, 150),
+ (119, 138, 147), (118, 135, 144), (118, 133, 140), (117, 130, 137),
+ (116, 128, 135), (116, 127, 134), (117, 129, 135), (118, 132, 139),
+ (122, 137, 146), (128, 146, 153), (134, 154, 161), (142, 162, 169),
+ (147, 168, 175), (152, 173, 180), (156, 176, 183), (157, 177, 183),
+ (155, 174, 180), (152, 170, 175), (149, 164, 170), (144, 160, 166),
+ (142, 158, 164), (138, 155, 161), (133, 150, 156), (128, 145, 152),
+ (123, 142, 149), (119, 140, 148), (117, 140, 149), (115, 140, 149),
+ (112, 139, 149), (110, 138, 149), (104, 136, 147), (102, 135, 148)
+ ),
+
+// 458 040222-17
+((145, 86, 63), (120, 68, 49), (105, 61, 47), (90, 55, 45),
+ (90, 54, 45), (90, 53, 45), (90, 52, 43), (90, 51, 42),
+ (79, 41, 34), (73, 36, 30), (67, 32, 26), (63, 28, 23),
+ (59, 24, 20), (55, 20, 17), (51, 16, 14), (49, 14, 12),
+ (48, 13, 10), (47, 9, 7), (49, 8, 8), (51, 7, 9),
+ (59, 10, 11), (67, 13, 13), (71, 15, 14), (75, 17, 16),
+ (88, 30, 25), (95, 36, 29), (102, 42, 34), (110, 48, 40),
+ (119, 55, 46), (123, 60, 49), (128, 65, 53), (139, 74, 58),
+ (148, 82, 67), (164, 81, 73), (168, 81, 73), (173, 81, 74),
+ (173, 82, 75), (173, 83, 76), (171, 81, 74), (170, 79, 73),
+ (167, 66, 66), (157, 62, 61), (147, 58, 57), (137, 55, 51),
+ (128, 52, 46), (125, 50, 44), (122, 48, 43), (111, 43, 36),
+ (97, 34, 30), (64, 21, 17), (51, 17, 13), (39, 13, 9),
+ (32, 10, 6), (26, 7, 4), (25, 6, 3), (24, 5, 3),
+ (26, 8, 6), (31, 9, 8), (36, 11, 11), (42, 12, 13),
+ (49, 14, 15), (52, 14, 16), (55, 15, 17), (61, 17, 21),
+ (65, 22, 25), (74, 32, 31), (75, 35, 33), (76, 39, 36),
+ (75, 40, 38), (74, 42, 41), (73, 46, 42), (73, 48, 42),
+ (71, 45, 35), (70, 41, 33), (69, 37, 32), (70, 35, 31),
+ (71, 34, 31), (72, 34, 30), (73, 34, 30), (75, 32, 31),
+ (78, 34, 34), (92, 49, 50), (105, 66, 63), (119, 84, 76),
+ (128, 91, 81), (137, 99, 87), (150, 108, 98), (158, 112, 105),
+ (169, 119, 115), (175, 114, 108), (182, 110, 102), (178, 103, 96),
+ (175, 96, 91), (162, 83, 85), (145, 69, 78), (132, 57, 64),
+ (122, 45, 51), (100, 27, 29), (89, 23, 25), (78, 20, 22),
+ (73, 19, 21), (69, 18, 21), (61, 16, 16), (55, 13, 12),
+ (45, 8, 6), (45, 9, 7), (45, 11, 8), (45, 12, 9),
+ (46, 14, 10), (47, 18, 13), (49, 20, 14), (54, 23, 17),
+ (60, 26, 18), (67, 33, 23), (66, 34, 24), (65, 35, 25),
+ (62, 34, 27), (58, 34, 27), (56, 34, 28), (55, 34, 29),
+ (55, 40, 38), (57, 43, 42), (59, 47, 46), (61, 47, 47),
+ (63, 48, 48), (69, 49, 51), (75, 54, 55), (85, 59, 60),
+ (93, 63, 64), (110, 67, 66), (113, 69, 65), (116, 71, 64),
+ (125, 76, 64), (132, 81, 67), (136, 89, 70), (147, 93, 73),
+ (162, 106, 76), (162, 108, 75), (163, 110, 75), (161, 109, 74),
+ (160, 109, 74), (153, 104, 73), (146, 100, 72), (136, 92, 68),
+ (123, 84, 63), (97, 67, 50), (92, 63, 47), (87, 59, 45),
+ (75, 51, 39), (65, 43, 33), (58, 35, 28), (52, 29, 23),
+ (46, 23, 19), (44, 22, 17), (43, 21, 16), (40, 16, 15),
+ (37, 14, 12), (35, 11, 11), (34, 10, 11), (34, 11, 13),
+ (33, 12, 15), (32, 13, 17), (31, 13, 16), (30, 14, 16),
+ (29, 14, 17), (31, 14, 17), (33, 14, 18), (35, 12, 17),
+ (41, 9, 13), (43, 8, 12), (46, 8, 12), (51, 9, 15),
+ (58, 12, 18), (68, 15, 19), (78, 18, 21), (86, 21, 21),
+ (92, 25, 22), (93, 27, 22), (94, 29, 23), (96, 29, 23),
+ (96, 29, 23), (95, 31, 22), (88, 32, 21), (79, 29, 18),
+ (62, 21, 17), (58, 20, 17), (55, 19, 17), (49, 18, 19),
+ (44, 19, 18), (41, 18, 18), (41, 17, 18), (45, 16, 18),
+ (53, 16, 20), (65, 17, 22), (82, 21, 24), (99, 29, 27),
+ (113, 36, 29), (125, 44, 32), (134, 50, 35), (144, 55, 40),
+ (154, 64, 45), (157, 70, 49), (154, 77, 53), (142, 82, 54),
+ (131, 83, 59), (122, 83, 64), (117, 83, 67), (116, 82, 72),
+ (111, 84, 74), (109, 89, 78), (106, 91, 83), (106, 91, 84),
+ (111, 87, 87), (118, 85, 89), (126, 91, 87), (135, 99, 89),
+ (142, 106, 89), (148, 110, 90), (154, 111, 92), (159, 109, 88),
+ (163, 110, 83), (165, 107, 77), (163, 100, 69), (161, 97, 66),
+ (157, 91, 64), (154, 89, 61), (149, 86, 59), (145, 80, 55),
+ (142, 78, 54), (137, 76, 56), (134, 80, 60), (130, 85, 64),
+ (127, 85, 65), (125, 84, 62), (121, 80, 59), (115, 75, 56),
+ (108, 70, 53), (100, 62, 49), (96, 56, 42), (94, 50, 37),
+ (92, 46, 33), (92, 45, 32), (93, 48, 34), (97, 55, 38),
+ (104, 62, 42), (113, 71, 51), (121, 81, 60), (128, 90, 71),
+ (136, 101, 78), (147, 107, 79), (156, 107, 78), (163, 109, 78),
+ (154, 104, 79), (146, 103, 79), (142, 99, 77), (137, 90, 70)
+ ),
+
+// 459 040222-18
+((52, 100, 5), (50, 86, 6), (49, 74, 6), (49, 62, 7),
+ (43, 54, 6), (37, 47, 6), (31, 47, 5), (26, 47, 5),
+ (9, 53, 6), (5, 50, 5), (1, 48, 5), (4, 49, 4),
+ (7, 51, 3), (15, 55, 2), (24, 59, 1), (27, 58, 1),
+ (31, 57, 1), (36, 54, 1), (32, 53, 1), (29, 52, 1),
+ (29, 54, 1), (30, 56, 1), (31, 56, 1), (32, 56, 1),
+ (36, 50, 1), (29, 46, 1), (23, 42, 1), (14, 41, 1),
+ (6, 40, 1), (3, 41, 0), (1, 42, 0), (0, 42, 0),
+ (0, 42, 0), (0, 42, 0), (0, 42, 0), (0, 42, 0),
+ (0, 42, 0), (0, 42, 0), (0, 41, 0), (0, 40, 0),
+ (7, 32, 1), (9, 31, 1), (12, 30, 1), (12, 31, 3),
+ (12, 33, 6), (11, 35, 7), (11, 37, 9), (9, 40, 14),
+ (11, 41, 18), (17, 44, 26), (19, 47, 29), (21, 50, 33),
+ (20, 55, 41), (20, 61, 50), (24, 61, 59), (29, 61, 69),
+ (50, 56, 91), (62, 52, 94), (74, 48, 98), (82, 50, 89),
+ (91, 52, 80), (96, 52, 81), (102, 52, 82), (109, 56, 82),
+ (108, 55, 83), (108, 52, 97), (110, 49, 90), (113, 47, 84),
+ (112, 47, 77), (111, 47, 71), (113, 59, 58), (106, 68, 48),
+ (70, 78, 33), (59, 76, 37), (48, 75, 42), (45, 71, 43),
+ (42, 67, 44), (43, 68, 43), (44, 70, 42), (42, 72, 34),
+ (31, 77, 24), (16, 87, 15), (11, 87, 16), (6, 88, 17),
+ (8, 94, 22), (10, 100, 27), (20, 114, 46), (31, 130, 65),
+ (67, 154, 85), (74, 159, 77), (82, 164, 70), (82, 165, 64),
+ (82, 167, 59), (84, 169, 56), (76, 168, 60), (75, 166, 65),
+ (80, 163, 71), (81, 145, 60), (73, 130, 42), (66, 115, 24),
+ (57, 107, 17), (48, 99, 11), (30, 82, 2), (16, 69, 0),
+ (7, 43, 2), (7, 36, 5), (8, 30, 9), (9, 29, 11),
+ (10, 29, 13), (11, 32, 16), (11, 42, 15), (16, 50, 15),
+ (21, 59, 14), (27, 70, 12), (27, 71, 13), (28, 72, 14),
+ (27, 70, 16), (23, 75, 16), (20, 80, 15), (20, 85, 13),
+ (19, 94, 3), (17, 92, 2), (16, 91, 1), (13, 89, 1),
+ (11, 87, 1), (6, 82, 1), (3, 78, 1), (2, 73, 2),
+ (0, 69, 1), (0, 65, 1), (0, 64, 1), (0, 64, 1),
+ (0, 63, 1), (0, 64, 1), (0, 62, 1), (0, 59, 1),
+ (0, 51, 0), (0, 46, 1), (0, 41, 2), (0, 38, 2),
+ (1, 36, 3), (3, 34, 6), (3, 33, 8), (3, 33, 10),
+ (3, 34, 11), (1, 37, 10), (1, 36, 9), (1, 35, 9),
+ (3, 37, 9), (3, 38, 9), (3, 41, 10), (3, 46, 11),
+ (2, 65, 9), (1, 70, 8), (0, 75, 7), (1, 83, 4),
+ (1, 88, 2), (1, 91, 1), (0, 91, 0), (1, 92, 0),
+ (1, 95, 0), (1, 116, 1), (2, 123, 1), (3, 130, 1),
+ (7, 142, 3), (7, 148, 6), (7, 147, 8), (9, 137, 12),
+ (8, 123, 21), (7, 120, 22), (7, 118, 23), (12, 115, 27),
+ (14, 113, 29), (21, 110, 31), (32, 99, 35), (41, 86, 39),
+ (48, 71, 40), (50, 53, 37), (49, 42, 37), (43, 34, 31),
+ (41, 33, 27), (44, 33, 24), (53, 38, 22), (72, 48, 20),
+ (114, 72, 20), (119, 79, 20), (124, 86, 20), (133, 98, 23),
+ (137, 107, 25), (142, 118, 26), (151, 128, 27), (165, 133, 28),
+ (174, 135, 40), (174, 148, 51), (172, 162, 73), (164, 171, 91),
+ (152, 177, 103), (136, 184, 104), (123, 185, 90), (109, 169, 85),
+ (91, 160, 72), (68, 152, 71), (47, 147, 72), (32, 137, 78),
+ (17, 138, 80), (9, 140, 66), (6, 133, 52), (8, 123, 33),
+ (11, 113, 18), (21, 107, 8), (39, 100, 5), (60, 100, 8),
+ (80, 106, 11), (98, 117, 13), (109, 124, 14), (113, 135, 14),
+ (114, 139, 15), (114, 141, 15), (116, 138, 18), (117, 135, 23),
+ (121, 135, 28), (119, 129, 31), (112, 127, 31), (97, 120, 28),
+ (77, 111, 24), (56, 98, 19), (37, 84, 17), (23, 74, 16),
+ (15, 65, 17), (16, 64, 17), (27, 67, 16), (43, 72, 15),
+ (62, 80, 11), (80, 84, 10), (95, 87, 11), (108, 85, 10),
+ (115, 88, 11), (123, 93, 11), (129, 97, 12), (138, 105, 11),
+ (147, 115, 11), (152, 126, 14), (156, 126, 14), (149, 127, 16),
+ (137, 128, 15), (119, 125, 14), (102, 123, 12), (89, 126, 8),
+ (78, 136, 7), (76, 139, 4), (78, 135, 5), (80, 129, 5),
+ (79, 121, 6), (75, 114, 6), (68, 107, 6), (59, 101, 5)
+ ),
+
+// 460 040222-19
+((195, 72, 19), (223, 63, 7), (229, 65, 7), (235, 67, 7),
+ (233, 73, 16), (231, 80, 26), (228, 81, 35), (225, 82, 44),
+ (195, 69, 75), (177, 53, 82), (160, 38, 89), (147, 30, 88),
+ (135, 23, 88), (127, 20, 98), (119, 18, 108), (116, 18, 117),
+ (113, 19, 126), (101, 19, 172), (97, 19, 187), (93, 19, 202),
+ (93, 18, 199), (93, 17, 197), (96, 17, 194), (99, 17, 192),
+ (102, 19, 183), (102, 20, 179), (103, 21, 176), (102, 23, 169),
+ (101, 26, 162), (96, 25, 155), (92, 25, 149), (86, 22, 135),
+ (79, 22, 124), (71, 17, 93), (73, 16, 75), (76, 16, 58),
+ (83, 17, 42), (91, 18, 26), (97, 17, 20), (104, 17, 14),
+ (126, 19, 4), (138, 17, 3), (151, 15, 3), (162, 15, 3),
+ (173, 16, 3), (175, 16, 3), (177, 17, 3), (178, 18, 3),
+ (173, 17, 3), (152, 16, 4), (139, 15, 4), (127, 15, 4),
+ (121, 14, 4), (116, 13, 4), (113, 13, 4), (111, 13, 4),
+ (101, 11, 3), (89, 12, 3), (77, 13, 4), (66, 12, 7),
+ (55, 12, 11), (53, 11, 13), (52, 11, 16), (52, 11, 22),
+ (52, 11, 28), (65, 9, 55), (65, 10, 71), (65, 12, 87),
+ (62, 12, 95), (59, 13, 104), (50, 14, 121), (41, 15, 138),
+ (30, 17, 164), (35, 16, 177), (41, 16, 190), (51, 17, 189),
+ (61, 19, 188), (67, 19, 185), (74, 20, 183), (88, 21, 176),
+ (99, 22, 166), (114, 24, 138), (117, 24, 140), (121, 24, 142),
+ (124, 23, 141), (127, 23, 140), (133, 23, 138), (140, 22, 135),
+ (150, 21, 122), (159, 22, 107), (168, 23, 92), (170, 24, 91),
+ (173, 25, 91), (177, 27, 91), (182, 29, 92), (188, 30, 93),
+ (193, 30, 97), (203, 31, 94), (208, 31, 78), (213, 31, 63),
+ (216, 31, 55), (219, 31, 47), (226, 31, 32), (235, 32, 17),
+ (245, 30, 5), (247, 29, 5), (249, 29, 5), (248, 29, 5),
+ (247, 29, 5), (247, 29, 4), (246, 29, 4), (243, 28, 4),
+ (238, 27, 4), (221, 24, 5), (213, 23, 6), (206, 23, 7),
+ (191, 22, 11), (174, 20, 16), (159, 19, 21), (144, 18, 26),
+ (122, 18, 32), (118, 16, 30), (115, 14, 29), (112, 13, 28),
+ (110, 13, 28), (104, 12, 31), (96, 13, 43), (89, 16, 61),
+ (82, 15, 81), (76, 22, 116), (77, 23, 123), (79, 24, 130),
+ (83, 25, 140), (89, 27, 144), (94, 28, 150), (100, 31, 163),
+ (98, 33, 197), (89, 34, 214), (80, 35, 232), (74, 34, 239),
+ (69, 33, 246), (60, 30, 242), (52, 26, 231), (50, 25, 213),
+ (53, 24, 196), (72, 22, 160), (80, 23, 151), (89, 24, 143),
+ (104, 25, 133), (117, 26, 119), (125, 31, 106), (134, 46, 90),
+ (148, 59, 77), (148, 59, 77), (148, 60, 78), (152, 62, 79),
+ (155, 63, 88), (158, 57, 100), (157, 53, 117), (154, 54, 129),
+ (153, 67, 137), (136, 68, 171), (130, 67, 175), (125, 67, 180),
+ (119, 65, 180), (115, 54, 180), (112, 41, 180), (112, 27, 173),
+ (128, 24, 140), (133, 24, 135), (139, 24, 130), (145, 23, 121),
+ (152, 22, 103), (159, 21, 85), (161, 19, 67), (160, 20, 50),
+ (157, 19, 35), (154, 17, 22), (151, 16, 18), (141, 16, 20),
+ (129, 15, 22), (117, 13, 23), (105, 9, 23), (89, 11, 20),
+ (55, 9, 18), (48, 10, 18), (42, 12, 19), (32, 16, 22),
+ (23, 19, 23), (16, 21, 24), (14, 18, 27), (13, 18, 28),
+ (11, 16, 30), (15, 17, 39), (20, 20, 53), (28, 23, 69),
+ (39, 27, 85), (53, 32, 100), (65, 34, 116), (75, 35, 131),
+ (81, 33, 136), (93, 32, 138), (104, 28, 138), (114, 27, 138),
+ (126, 24, 137), (139, 26, 135), (148, 27, 131), (148, 27, 130),
+ (140, 24, 123), (134, 22, 115), (127, 18, 103), (118, 17, 93),
+ (109, 14, 86), (103, 13, 85), (102, 13, 85), (95, 13, 90),
+ (84, 12, 99), (70, 12, 115), (58, 13, 131), (46, 14, 141),
+ (33, 12, 142), (24, 10, 147), (22, 9, 151), (23, 9, 156),
+ (24, 9, 158), (24, 9, 158), (24, 9, 160), (27, 11, 161),
+ (25, 11, 148), (24, 13, 131), (25, 17, 116), (26, 21, 101),
+ (27, 24, 87), (26, 26, 70), (24, 24, 61), (24, 24, 61),
+ (23, 21, 62), (21, 19, 60), (19, 19, 59), (19, 19, 58),
+ (21, 21, 60), (23, 25, 57), (23, 25, 57), (29, 26, 60),
+ (39, 24, 59), (48, 19, 57), (57, 14, 54), (65, 9, 51),
+ (73, 6, 50), (90, 9, 46), (101, 20, 43), (114, 35, 44),
+ (130, 51, 40), (147, 65, 35), (166, 67, 29), (185, 70, 24)
+ ),
+
+// 461 040222-20
+((141, 196, 173), (149, 202, 166), (150, 200, 159), (151, 199, 152),
+ (155, 198, 148), (160, 197, 145), (158, 190, 138), (157, 184, 131),
+ (153, 167, 103), (148, 156, 88), (144, 145, 74), (136, 134, 64),
+ (129, 124, 54), (118, 111, 49), (107, 98, 45), (101, 93, 44),
+ (95, 88, 43), (73, 69, 42), (67, 64, 41), (62, 60, 40),
+ (61, 58, 40), (61, 56, 40), (62, 56, 40), (63, 57, 40),
+ (63, 57, 45), (64, 59, 46), (66, 62, 48), (69, 66, 54),
+ (72, 70, 60), (75, 73, 64), (79, 76, 69), (87, 85, 78),
+ (91, 88, 84), (92, 92, 90), (89, 94, 91), (86, 96, 93),
+ (87, 99, 95), (89, 103, 97), (91, 105, 95), (94, 107, 93),
+ (109, 117, 87), (115, 123, 86), (121, 130, 85), (123, 134, 93),
+ (126, 138, 101), (127, 140, 104), (129, 142, 107), (137, 151, 118),
+ (151, 160, 121), (183, 179, 117), (196, 181, 117), (209, 184, 117),
+ (211, 179, 117), (213, 175, 118), (211, 172, 117), (209, 169, 117),
+ (197, 159, 104), (192, 153, 95), (188, 147, 87), (184, 143, 81),
+ (181, 139, 76), (177, 136, 75), (173, 133, 75), (164, 132, 73),
+ (154, 128, 75), (132, 118, 79), (128, 119, 82), (125, 120, 86),
+ (126, 122, 90), (127, 125, 94), (132, 134, 102), (137, 142, 111),
+ (144, 151, 121), (143, 146, 119), (143, 142, 117), (140, 137, 114),
+ (138, 132, 111), (136, 130, 111), (135, 128, 111), (132, 125, 109),
+ (129, 124, 110), (119, 118, 107), (115, 116, 104), (111, 115, 101),
+ (110, 114, 102), (109, 113, 103), (110, 113, 105), (114, 113, 110),
+ (122, 121, 112), (126, 122, 109), (130, 123, 107), (130, 124, 107),
+ (131, 126, 107), (129, 129, 107), (129, 132, 110), (130, 131, 111),
+ (127, 132, 110), (116, 115, 99), (104, 105, 92), (93, 96, 85),
+ (86, 93, 82), (79, 91, 79), (69, 83, 75), (60, 79, 72),
+ (51, 73, 73), (47, 66, 72), (43, 60, 72), (41, 59, 71),
+ (40, 58, 71), (40, 58, 70), (40, 55, 67), (42, 53, 63),
+ (42, 52, 62), (45, 49, 56), (46, 49, 54), (48, 50, 53),
+ (55, 54, 50), (66, 57, 49), (75, 59, 46), (80, 60, 46),
+ (91, 65, 50), (98, 73, 50), (105, 82, 51), (113, 87, 52),
+ (121, 92, 53), (133, 102, 51), (141, 107, 49), (145, 111, 50),
+ (148, 113, 52), (148, 123, 59), (151, 127, 61), (155, 131, 63),
+ (164, 141, 70), (171, 148, 74), (175, 152, 80), (176, 152, 83),
+ (168, 148, 93), (167, 148, 94), (166, 148, 95), (168, 149, 94),
+ (171, 150, 94), (177, 151, 96), (183, 153, 94), (191, 158, 96),
+ (197, 163, 99), (193, 173, 99), (191, 173, 96), (190, 173, 94),
+ (186, 168, 89), (179, 160, 79), (175, 153, 69), (171, 146, 62),
+ (164, 147, 58), (161, 147, 59), (158, 148, 60), (149, 143, 64),
+ (136, 133, 62), (122, 119, 59), (102, 99, 54), (88, 83, 48),
+ (77, 71, 40), (60, 63, 38), (57, 63, 39), (54, 64, 40),
+ (55, 66, 42), (55, 65, 45), (59, 64, 50), (70, 63, 51),
+ (94, 70, 49), (99, 76, 50), (105, 82, 51), (117, 97, 57),
+ (127, 107, 64), (136, 117, 75), (147, 125, 84), (158, 127, 87),
+ (163, 123, 86), (168, 123, 84), (167, 124, 82), (161, 123, 80),
+ (151, 121, 83), (141, 120, 87), (135, 118, 91), (129, 114, 92),
+ (128, 111, 88), (129, 111, 86), (130, 112, 85), (133, 115, 86),
+ (138, 120, 90), (145, 129, 95), (151, 138, 103), (157, 151, 111),
+ (165, 163, 122), (170, 173, 129), (177, 181, 136), (180, 182, 139),
+ (180, 180, 140), (176, 173, 137), (168, 167, 132), (159, 158, 129),
+ (146, 150, 121), (138, 144, 116), (131, 136, 113), (124, 130, 109),
+ (118, 122, 103), (112, 116, 97), (103, 108, 91), (92, 101, 86),
+ (82, 99, 87), (78, 98, 94), (79, 101, 101), (85, 104, 106),
+ (93, 110, 113), (97, 114, 115), (100, 116, 113), (100, 116, 112),
+ (100, 116, 114), (104, 120, 118), (116, 126, 121), (133, 136, 125),
+ (151, 148, 126), (168, 159, 123), (182, 166, 118), (190, 170, 110),
+ (193, 171, 102), (194, 174, 99), (196, 177, 98), (200, 182, 98),
+ (205, 192, 101), (210, 204, 106), (215, 213, 112), (219, 217, 112),
+ (220, 219, 115), (219, 217, 116), (218, 215, 117), (216, 215, 117),
+ (215, 219, 122), (215, 223, 130), (221, 230, 142), (225, 236, 154),
+ (228, 237, 165), (233, 239, 175), (233, 238, 180), (231, 237, 182),
+ (228, 234, 176), (228, 235, 175), (222, 232, 174), (212, 227, 175),
+ (198, 220, 177), (188, 211, 176), (176, 213, 186), (165, 209, 188),
+ (155, 208, 188), (147, 204, 186), (148, 204, 186), (141, 205, 186)
+ ),
+
+// 462 040222-21
+((46, 7, 70), (35, 5, 85), (31, 4, 92), (28, 4, 100),
+ (22, 3, 103), (17, 3, 107), (18, 3, 104), (19, 3, 101),
+ (18, 1, 89), (17, 0, 84), (16, 0, 79), (20, 0, 72),
+ (25, 0, 65), (35, 0, 55), (45, 1, 45), (50, 2, 40),
+ (56, 3, 36), (72, 3, 18), (76, 3, 13), (81, 3, 8),
+ (82, 3, 6), (84, 3, 5), (84, 3, 6), (84, 4, 8),
+ (79, 4, 16), (74, 4, 19), (69, 4, 23), (59, 3, 24),
+ (50, 2, 26), (45, 2, 26), (40, 2, 27), (28, 2, 29),
+ (19, 2, 30), (7, 0, 31), (6, 0, 29), (5, 0, 27),
+ (6, 0, 23), (7, 0, 20), (8, 0, 18), (10, 0, 17),
+ (17, 0, 11), (22, 0, 8), (27, 0, 5), (33, 0, 3),
+ (39, 0, 1), (41, 0, 0), (44, 0, 0), (47, 0, 0),
+ (49, 0, 1), (56, 4, 1), (61, 8, 4), (67, 13, 7),
+ (73, 16, 7), (80, 19, 8), (82, 19, 8), (84, 20, 9),
+ (83, 19, 8), (77, 19, 7), (72, 19, 7), (69, 19, 7),
+ (67, 20, 8), (67, 20, 8), (67, 20, 9), (67, 20, 12),
+ (64, 15, 13), (51, 7, 16), (41, 4, 21), (32, 2, 27),
+ (28, 1, 29), (25, 1, 32), (20, 2, 38), (17, 2, 44),
+ (15, 2, 51), (14, 2, 53), (14, 2, 55), (17, 3, 52),
+ (20, 5, 50), (23, 6, 49), (27, 7, 48), (35, 10, 46),
+ (47, 12, 42), (74, 25, 36), (91, 39, 39), (109, 53, 43),
+ (118, 61, 46), (127, 69, 49), (143, 86, 57), (161, 104, 72),
+ (178, 122, 94), (173, 120, 106), (169, 119, 118), (164, 117, 124),
+ (159, 116, 130), (149, 110, 133), (142, 109, 145), (134, 114, 153),
+ (134, 117, 157), (125, 110, 154), (119, 103, 149), (114, 96, 144),
+ (109, 88, 140), (105, 80, 137), (96, 75, 128), (98, 77, 117),
+ (118, 85, 94), (131, 92, 86), (144, 100, 79), (149, 101, 78),
+ (155, 102, 78), (158, 102, 79), (157, 105, 76), (156, 102, 73),
+ (150, 96, 69), (142, 81, 55), (144, 78, 53), (146, 76, 52),
+ (146, 69, 51), (145, 69, 53), (143, 70, 55), (136, 68, 57),
+ (113, 57, 50), (103, 46, 42), (94, 35, 34), (90, 30, 32),
+ (87, 26, 30), (85, 22, 27), (86, 18, 25), (84, 16, 22),
+ (79, 15, 21), (69, 11, 15), (64, 10, 13), (60, 9, 12),
+ (55, 7, 11), (54, 6, 10), (54, 6, 9), (55, 7, 10),
+ (54, 7, 10), (49, 7, 8), (45, 7, 7), (42, 7, 6),
+ (39, 7, 6), (33, 5, 4), (30, 5, 4), (28, 4, 5),
+ (27, 3, 6), (27, 2, 11), (27, 2, 12), (27, 2, 13),
+ (26, 1, 13), (26, 1, 13), (27, 1, 11), (28, 1, 10),
+ (30, 1, 11), (30, 1, 11), (31, 2, 12), (32, 2, 14),
+ (33, 2, 15), (33, 2, 15), (33, 2, 13), (33, 2, 12),
+ (33, 2, 10), (31, 2, 8), (30, 2, 8), (29, 2, 8),
+ (27, 2, 8), (24, 2, 9), (21, 2, 10), (18, 1, 10),
+ (14, 1, 11), (14, 1, 11), (14, 1, 11), (15, 1, 11),
+ (17, 1, 12), (19, 1, 15), (21, 1, 19), (24, 2, 23),
+ (26, 1, 28), (26, 1, 33), (29, 1, 36), (32, 2, 37),
+ (33, 2, 40), (34, 2, 40), (36, 4, 40), (40, 4, 40),
+ (45, 8, 43), (46, 9, 43), (47, 10, 44), (48, 15, 47),
+ (50, 18, 49), (52, 20, 48), (55, 21, 45), (55, 20, 43),
+ (58, 20, 38), (59, 19, 35), (63, 22, 33), (68, 26, 35),
+ (74, 32, 37), (83, 37, 36), (90, 40, 35), (95, 40, 30),
+ (96, 37, 27), (95, 38, 25), (94, 36, 26), (91, 41, 31),
+ (95, 48, 35), (100, 59, 41), (108, 69, 45), (118, 76, 50),
+ (126, 85, 52), (134, 86, 56), (139, 89, 62), (146, 91, 64),
+ (148, 94, 67), (153, 98, 66), (159, 102, 64), (166, 106, 61),
+ (170, 108, 57), (174, 110, 57), (179, 109, 56), (178, 105, 57),
+ (175, 101, 57), (169, 100, 59), (162, 101, 62), (155, 98, 62),
+ (146, 97, 62), (134, 91, 67), (122, 83, 71), (109, 74, 74),
+ (99, 66, 78), (87, 62, 82), (77, 54, 86), (70, 51, 85),
+ (61, 46, 91), (53, 40, 95), (42, 30, 101), (34, 19, 109),
+ (25, 11, 117), (17, 5, 126), (12, 2, 131), (7, 1, 135),
+ (6, 1, 137), (8, 1, 142), (11, 2, 143), (14, 2, 144),
+ (18, 2, 142), (22, 2, 139), (25, 2, 132), (30, 5, 121),
+ (37, 5, 111), (45, 6, 98), (44, 7, 90), (43, 7, 85),
+ (47, 8, 81), (47, 6, 75), (43, 8, 73), (40, 6, 73)
+ ),
+
+// 463 040222-22
+((87, 97, 127), (91, 103, 136), (91, 102, 134), (92, 102, 133),
+ (93, 102, 131), (94, 102, 130), (94, 102, 129), (95, 102, 129),
+ (98, 104, 131), (102, 108, 135), (106, 112, 139), (110, 117, 145),
+ (114, 122, 152), (113, 121, 151), (113, 121, 151), (111, 119, 149),
+ (109, 117, 147), (99, 106, 135), (94, 101, 131), (90, 96, 127),
+ (91, 96, 125), (92, 96, 124), (94, 98, 125), (96, 100, 126),
+ (111, 117, 144), (120, 127, 153), (129, 137, 163), (136, 145, 170),
+ (143, 153, 178), (145, 156, 180), (148, 159, 182), (152, 163, 186),
+ (156, 167, 189), (165, 174, 191), (170, 179, 194), (175, 184, 197),
+ (180, 188, 199), (185, 192, 202), (186, 192, 202), (187, 193, 202),
+ (184, 188, 192), (177, 180, 183), (170, 173, 175), (160, 163, 164),
+ (150, 153, 153), (145, 147, 147), (140, 142, 142), (129, 131, 131),
+ (119, 122, 122), (99, 100, 101), (88, 89, 90), (77, 78, 80),
+ (66, 67, 69), (56, 56, 58), (50, 50, 53), (45, 45, 48),
+ (27, 26, 29), (20, 20, 23), (14, 14, 17), (12, 13, 16),
+ (10, 12, 15), (10, 12, 15), (10, 12, 16), (12, 13, 17),
+ (13, 15, 20), (14, 16, 22), (14, 16, 22), (15, 17, 23),
+ (15, 16, 23), (15, 16, 23), (14, 16, 22), (14, 15, 21),
+ (14, 15, 22), (14, 15, 22), (15, 16, 23), (15, 16, 23),
+ (15, 17, 24), (15, 17, 24), (16, 17, 24), (16, 18, 25),
+ (17, 18, 26), (18, 19, 26), (19, 19, 26), (20, 19, 26),
+ (20, 19, 26), (21, 20, 26), (23, 22, 27), (25, 23, 28),
+ (33, 30, 34), (40, 36, 40), (48, 43, 47), (52, 47, 52),
+ (56, 52, 57), (65, 62, 67), (75, 73, 77), (86, 83, 88),
+ (97, 94, 99), (120, 117, 121), (129, 126, 129), (138, 136, 138),
+ (142, 140, 141), (146, 144, 145), (154, 152, 153), (162, 161, 161),
+ (175, 176, 177), (181, 183, 184), (188, 191, 192), (190, 194, 196),
+ (193, 198, 200), (198, 204, 208), (202, 209, 213), (202, 211, 216),
+ (198, 208, 216), (184, 195, 205), (179, 190, 201), (175, 186, 197),
+ (166, 176, 187), (155, 166, 177), (144, 154, 166), (132, 143, 156),
+ (111, 120, 135), (102, 111, 125), (93, 102, 116), (88, 97, 111),
+ (84, 92, 106), (74, 82, 96), (64, 72, 86), (54, 61, 75),
+ (44, 51, 64), (27, 32, 44), (23, 27, 39), (19, 23, 35),
+ (12, 16, 26), (8, 10, 18), (5, 7, 14), (3, 4, 10),
+ (1, 2, 7), (1, 2, 6), (1, 2, 5), (1, 2, 4),
+ (1, 2, 4), (1, 2, 4), (1, 2, 5), (2, 4, 6),
+ (4, 6, 8), (14, 14, 18), (17, 17, 22), (20, 21, 26),
+ (28, 29, 36), (36, 38, 46), (44, 47, 57), (52, 56, 67),
+ (68, 74, 86), (71, 77, 90), (74, 81, 94), (78, 86, 102),
+ (81, 90, 108), (84, 92, 111), (85, 93, 115), (86, 95, 119),
+ (87, 96, 122), (90, 99, 128), (90, 100, 129), (91, 101, 130),
+ (94, 103, 133), (97, 106, 134), (101, 109, 137), (104, 113, 140),
+ (107, 115, 140), (107, 115, 140), (108, 115, 141), (109, 117, 141),
+ (110, 117, 141), (111, 118, 141), (112, 119, 141), (113, 120, 142),
+ (115, 122, 142), (119, 125, 143), (126, 131, 147), (131, 137, 152),
+ (139, 144, 158), (146, 151, 164), (153, 159, 172), (161, 167, 180),
+ (174, 182, 194), (176, 185, 197), (179, 188, 200), (182, 192, 205),
+ (184, 195, 209), (186, 197, 211), (185, 198, 212), (184, 196, 212),
+ (180, 192, 210), (173, 186, 205), (165, 178, 199), (156, 170, 191),
+ (147, 160, 182), (138, 150, 172), (129, 141, 162), (119, 131, 153),
+ (111, 122, 144), (105, 116, 136), (101, 111, 129), (98, 107, 125),
+ (97, 104, 121), (95, 101, 119), (93, 100, 119), (90, 98, 118),
+ (88, 95, 115), (86, 92, 111), (82, 87, 106), (78, 81, 99),
+ (73, 75, 93), (70, 71, 87), (68, 69, 83), (69, 68, 81),
+ (70, 68, 79), (72, 70, 80), (74, 71, 83), (75, 74, 85),
+ (77, 76, 87), (78, 77, 88), (78, 77, 88), (76, 75, 86),
+ (72, 72, 83), (67, 67, 79), (61, 62, 74), (56, 56, 68),
+ (53, 52, 62), (49, 48, 57), (47, 45, 55), (45, 44, 53),
+ (46, 45, 54), (49, 48, 57), (50, 49, 58), (50, 49, 58),
+ (51, 49, 57), (51, 49, 57), (51, 49, 57), (51, 49, 59),
+ (50, 49, 60), (51, 50, 62), (50, 50, 62), (52, 51, 63),
+ (55, 54, 67), (58, 58, 72), (60, 59, 73), (62, 61, 76),
+ (64, 63, 79), (67, 66, 83), (69, 71, 89), (72, 75, 96),
+ (75, 79, 103), (77, 83, 109), (78, 86, 114), (82, 90, 118)
+ ),
+
+// 464 040222-23
+((114, 119, 136), (103, 112, 130), (98, 108, 125), (93, 104, 121),
+ (91, 100, 116), (89, 96, 111), (88, 95, 109), (87, 94, 107),
+ (90, 97, 108), (95, 101, 113), (100, 106, 118), (110, 114, 126),
+ (120, 123, 134), (131, 133, 144), (143, 144, 155), (148, 149, 159),
+ (154, 155, 164), (173, 175, 180), (178, 181, 187), (184, 187, 194),
+ (184, 189, 197), (185, 191, 200), (184, 190, 201), (183, 190, 202),
+ (175, 182, 195), (167, 176, 187), (160, 170, 180), (153, 162, 170),
+ (147, 154, 160), (143, 150, 155), (140, 146, 151), (134, 138, 142),
+ (130, 131, 134), (123, 121, 126), (119, 118, 123), (115, 116, 120),
+ (113, 115, 119), (111, 114, 119), (111, 114, 119), (111, 115, 120),
+ (117, 119, 125), (119, 121, 128), (122, 124, 132), (121, 124, 133),
+ (120, 124, 135), (118, 123, 134), (117, 122, 133), (114, 120, 132),
+ (111, 118, 129), (111, 113, 124), (114, 114, 125), (117, 115, 126),
+ (119, 116, 126), (121, 117, 127), (121, 117, 126), (121, 117, 125),
+ (116, 110, 115), (114, 107, 110), (113, 104, 106), (112, 102, 104),
+ (112, 101, 103), (110, 101, 103), (109, 101, 104), (106, 99, 105),
+ (100, 96, 104), (85, 82, 89), (77, 75, 82), (69, 69, 76),
+ (67, 67, 74), (65, 66, 72), (62, 66, 74), (63, 70, 80),
+ (73, 83, 99), (81, 92, 109), (89, 101, 120), (98, 112, 131),
+ (108, 124, 142), (113, 130, 147), (118, 136, 152), (126, 147, 164),
+ (133, 158, 176), (150, 175, 195), (157, 181, 202), (165, 187, 210),
+ (167, 190, 213), (170, 193, 217), (176, 198, 222), (179, 203, 226),
+ (182, 205, 225), (183, 203, 223), (184, 201, 221), (184, 199, 219),
+ (185, 197, 218), (186, 197, 217), (189, 199, 219), (193, 203, 222),
+ (198, 207, 225), (209, 215, 230), (214, 218, 230), (220, 221, 230),
+ (222, 221, 229), (224, 221, 229), (226, 222, 229), (227, 224, 231),
+ (227, 225, 233), (224, 223, 231), (222, 222, 230), (220, 220, 228),
+ (219, 219, 227), (215, 214, 224), (210, 209, 219), (204, 205, 214),
+ (198, 200, 210), (182, 188, 201), (177, 184, 198), (172, 180, 195),
+ (162, 173, 188), (153, 164, 182), (143, 155, 174), (134, 147, 165),
+ (118, 133, 151), (109, 126, 145), (101, 120, 140), (97, 117, 136),
+ (93, 115, 132), (85, 106, 125), (78, 98, 117), (72, 89, 106),
+ (68, 82, 98), (68, 77, 89), (69, 77, 88), (70, 77, 88),
+ (74, 80, 89), (78, 83, 92), (82, 86, 97), (84, 88, 99),
+ (88, 95, 104), (90, 97, 107), (93, 99, 110), (94, 100, 111),
+ (95, 101, 112), (98, 103, 115), (101, 106, 120), (102, 108, 122),
+ (103, 109, 126), (104, 117, 136), (105, 118, 139), (107, 120, 142),
+ (108, 123, 146), (110, 125, 148), (113, 128, 151), (118, 130, 152),
+ (133, 137, 154), (136, 140, 156), (140, 143, 158), (151, 153, 166),
+ (162, 163, 176), (171, 173, 185), (180, 182, 194), (186, 190, 203),
+ (192, 196, 207), (200, 200, 211), (201, 200, 210), (202, 200, 210),
+ (205, 199, 211), (205, 200, 210), (205, 200, 210), (201, 199, 210),
+ (193, 193, 208), (191, 191, 206), (189, 190, 205), (184, 185, 201),
+ (181, 181, 198), (180, 177, 195), (178, 174, 193), (176, 173, 190),
+ (173, 171, 188), (170, 168, 183), (167, 166, 180), (162, 162, 176),
+ (158, 160, 174), (155, 159, 173), (152, 158, 175), (150, 158, 178),
+ (144, 158, 180), (142, 157, 179), (140, 156, 178), (133, 149, 172),
+ (125, 143, 166), (118, 137, 159), (111, 132, 154), (107, 128, 152),
+ (106, 127, 153), (107, 129, 155), (111, 132, 158), (115, 135, 160),
+ (120, 136, 160), (124, 138, 159), (128, 137, 155), (129, 136, 152),
+ (131, 136, 148), (135, 135, 145), (139, 135, 144), (142, 138, 144),
+ (145, 140, 147), (146, 144, 152), (149, 147, 157), (151, 151, 163),
+ (149, 156, 166), (153, 160, 171), (156, 164, 176), (161, 169, 179),
+ (165, 173, 183), (167, 179, 187), (173, 185, 195), (180, 191, 204),
+ (183, 198, 210), (187, 204, 216), (189, 208, 223), (194, 211, 226),
+ (198, 212, 227), (199, 212, 225), (199, 211, 222), (199, 208, 219),
+ (194, 201, 212), (185, 193, 203), (174, 183, 195), (162, 172, 186),
+ (152, 161, 177), (141, 150, 169), (130, 142, 160), (124, 135, 154),
+ (119, 129, 150), (115, 128, 148), (111, 127, 146), (105, 124, 144),
+ (101, 122, 142), (97, 119, 141), (94, 116, 138), (93, 114, 134),
+ (95, 113, 132), (100, 115, 131), (107, 120, 135), (113, 124, 138),
+ (121, 130, 143), (127, 136, 149), (131, 139, 152), (131, 139, 154),
+ (132, 138, 153), (131, 134, 147), (130, 131, 143), (129, 127, 139),
+ (127, 126, 137), (126, 124, 136), (124, 123, 135), (118, 120, 134)
+ ),
+
+// 465 040222-24
+((38, 7, 7), (42, 8, 7), (45, 7, 6), (48, 6, 6),
+ (49, 6, 6), (50, 6, 7), (48, 5, 6), (46, 4, 6),
+ (41, 1, 3), (40, 2, 4), (39, 3, 6), (41, 5, 12),
+ (43, 7, 19), (48, 11, 26), (53, 16, 34), (55, 16, 35),
+ (57, 16, 37), (57, 18, 38), (56, 17, 37), (55, 16, 36),
+ (53, 17, 38), (52, 19, 41), (52, 18, 40), (53, 18, 39),
+ (50, 19, 33), (47, 15, 25), (45, 12, 18), (40, 9, 13),
+ (35, 6, 9), (34, 4, 8), (33, 3, 7), (33, 5, 9),
+ (36, 13, 18), (58, 31, 48), (72, 42, 67), (87, 54, 86),
+ (100, 62, 102), (113, 70, 119), (120, 79, 124), (128, 88, 130),
+ (150, 115, 138), (157, 117, 136), (165, 120, 135), (162, 112, 129),
+ (160, 104, 124), (157, 101, 119), (154, 98, 115), (144, 93, 112),
+ (131, 90, 94), (107, 70, 55), (90, 54, 36), (73, 38, 17),
+ (56, 23, 10), (39, 8, 4), (32, 5, 4), (26, 2, 5),
+ (14, 7, 9), (15, 14, 15), (17, 21, 22), (23, 31, 32),
+ (30, 41, 42), (32, 44, 45), (35, 47, 49), (38, 52, 52),
+ (39, 54, 55), (54, 53, 57), (65, 57, 58), (77, 61, 59),
+ (84, 64, 59), (92, 67, 60), (103, 70, 57), (104, 65, 52),
+ (105, 48, 38), (101, 37, 28), (97, 26, 18), (99, 23, 12),
+ (101, 20, 7), (101, 18, 5), (101, 17, 3), (100, 17, 0),
+ (99, 15, 1), (97, 8, 0), (100, 9, 0), (103, 11, 0),
+ (105, 13, 0), (108, 16, 0), (118, 23, 1), (127, 28, 4),
+ (137, 29, 5), (139, 29, 5), (141, 29, 6), (139, 28, 6),
+ (138, 27, 6), (137, 30, 5), (135, 32, 7), (128, 34, 9),
+ (120, 29, 9), (99, 20, 9), (88, 14, 7), (78, 8, 6),
+ (76, 6, 5), (74, 4, 5), (72, 4, 4), (73, 3, 4),
+ (80, 3, 7), (82, 2, 6), (85, 1, 6), (85, 0, 5),
+ (85, 0, 5), (83, 0, 4), (81, 0, 3), (78, 0, 3),
+ (74, 0, 5), (65, 0, 5), (62, 0, 5), (59, 1, 5),
+ (52, 1, 4), (45, 1, 3), (38, 0, 1), (33, 0, 1),
+ (29, 0, 0), (30, 0, 0), (32, 0, 0), (33, 0, 0),
+ (35, 0, 0), (37, 0, 0), (39, 0, 0), (41, 0, 0),
+ (41, 0, 0), (39, 0, 0), (38, 0, 0), (37, 0, 0),
+ (35, 0, 0), (31, 0, 0), (27, 0, 0), (23, 1, 0),
+ (12, 2, 0), (8, 2, 0), (4, 3, 0), (3, 3, 0),
+ (2, 3, 0), (1, 3, 0), (0, 2, 0), (0, 2, 0),
+ (1, 2, 0), (5, 3, 1), (7, 3, 1), (9, 4, 1),
+ (13, 5, 2), (18, 5, 5), (23, 6, 9), (27, 6, 12),
+ (38, 5, 16), (39, 5, 16), (41, 5, 16), (45, 5, 15),
+ (46, 5, 15), (46, 5, 16), (45, 7, 17), (41, 7, 20),
+ (39, 7, 22), (33, 8, 19), (31, 9, 19), (30, 10, 19),
+ (27, 13, 17), (21, 18, 17), (14, 26, 20), (10, 32, 25),
+ (7, 37, 27), (8, 37, 27), (9, 37, 28), (12, 35, 26),
+ (15, 32, 25), (17, 32, 23), (19, 33, 24), (22, 34, 25),
+ (26, 33, 23), (31, 30, 21), (40, 24, 17), (49, 17, 13),
+ (59, 9, 8), (66, 5, 5), (76, 6, 3), (91, 10, 9),
+ (123, 31, 15), (131, 40, 22), (140, 50, 29), (158, 69, 43),
+ (160, 82, 60), (156, 92, 67), (151, 97, 78), (145, 99, 84),
+ (138, 103, 81), (134, 115, 92), (145, 133, 107), (149, 146, 129),
+ (144, 150, 140), (138, 145, 149), (128, 131, 149), (114, 109, 134),
+ (97, 86, 116), (87, 75, 99), (87, 71, 92), (84, 66, 86),
+ (85, 62, 86), (83, 52, 80), (81, 40, 69), (74, 23, 53),
+ (62, 12, 36), (51, 6, 24), (40, 3, 13), (30, 3, 9),
+ (22, 3, 5), (16, 3, 2), (13, 2, 1), (11, 1, 1),
+ (10, 1, 0), (9, 0, 0), (9, 0, 0), (10, 0, 0),
+ (10, 0, 0), (12, 0, 1), (14, 1, 2), (17, 1, 2),
+ (19, 0, 2), (21, 0, 2), (21, 0, 2), (22, 0, 2),
+ (22, 0, 2), (22, 0, 2), (22, 0, 3), (22, 0, 3),
+ (22, 0, 2), (21, 0, 2), (21, 0, 1), (20, 0, 1),
+ (19, 0, 0), (18, 0, 0), (17, 0, 0), (16, 1, 1),
+ (15, 4, 4), (14, 9, 9), (16, 13, 13), (18, 14, 14),
+ (19, 13, 14), (20, 13, 15), (19, 12, 13), (18, 12, 11),
+ (16, 13, 12), (17, 16, 15), (23, 19, 18), (27, 20, 19),
+ (33, 19, 20), (38, 16, 18), (40, 12, 14), (41, 9, 10)
+ ),
+
+// 466 040222-25
+((134, 105, 81), (107, 78, 57), (92, 64, 45), (77, 50, 33),
+ (68, 43, 28), (59, 37, 24), (56, 35, 22), (53, 34, 21),
+ (41, 26, 15), (38, 22, 12), (36, 18, 10), (39, 21, 13),
+ (43, 24, 17), (51, 31, 23), (60, 38, 30), (65, 41, 33),
+ (70, 45, 36), (90, 60, 45), (99, 67, 49), (108, 75, 54),
+ (114, 81, 58), (120, 87, 63), (121, 88, 63), (123, 89, 63),
+ (121, 88, 57), (118, 87, 54), (116, 86, 51), (115, 87, 54),
+ (115, 89, 57), (116, 90, 59), (117, 92, 62), (121, 97, 67),
+ (127, 103, 71), (139, 118, 80), (145, 125, 87), (151, 132, 94),
+ (155, 134, 97), (159, 136, 101), (158, 135, 101), (158, 134, 102),
+ (145, 124, 91), (134, 115, 83), (124, 107, 75), (116, 96, 68),
+ (109, 85, 62), (105, 81, 59), (101, 77, 57), (97, 73, 53),
+ (96, 74, 53), (106, 86, 57), (115, 93, 63), (125, 101, 69),
+ (132, 106, 76), (140, 112, 83), (142, 115, 85), (144, 118, 87),
+ (146, 119, 88), (142, 114, 84), (139, 109, 80), (131, 100, 76),
+ (124, 91, 72), (119, 86, 68), (115, 82, 65), (107, 74, 59),
+ (105, 67, 55), (105, 68, 55), (113, 78, 64), (121, 88, 74),
+ (125, 94, 79), (130, 101, 84), (142, 114, 97), (152, 126, 108),
+ (171, 145, 121), (178, 154, 127), (185, 164, 133), (191, 169, 135),
+ (197, 175, 137), (197, 175, 137), (197, 176, 138), (197, 173, 133),
+ (194, 170, 128), (183, 162, 115), (179, 158, 109), (176, 154, 103),
+ (174, 152, 101), (173, 150, 99), (169, 143, 95), (164, 137, 92),
+ (154, 128, 87), (154, 129, 88), (155, 131, 89), (157, 132, 91),
+ (160, 134, 93), (165, 139, 97), (170, 145, 103), (174, 150, 110),
+ (177, 155, 116), (191, 173, 130), (197, 179, 134), (204, 186, 138),
+ (206, 188, 139), (209, 191, 140), (209, 192, 141), (208, 191, 141),
+ (205, 186, 142), (200, 180, 139), (196, 175, 137), (192, 171, 135),
+ (189, 168, 133), (183, 161, 125), (178, 153, 117), (172, 147, 112),
+ (165, 138, 107), (150, 121, 98), (146, 117, 94), (142, 114, 90),
+ (137, 106, 82), (133, 102, 74), (131, 98, 70), (131, 98, 69),
+ (132, 102, 76), (135, 105, 80), (138, 109, 84), (138, 110, 85),
+ (139, 112, 87), (141, 113, 86), (141, 113, 85), (137, 109, 84),
+ (133, 106, 83), (114, 94, 72), (108, 89, 68), (102, 85, 64),
+ (91, 75, 53), (78, 62, 45), (67, 51, 36), (55, 39, 28),
+ (36, 27, 17), (31, 25, 14), (27, 23, 11), (27, 22, 11),
+ (27, 22, 12), (26, 19, 12), (25, 17, 11), (25, 15, 8),
+ (24, 15, 6), (25, 15, 6), (25, 14, 6), (25, 14, 6),
+ (23, 12, 7), (22, 9, 6), (19, 7, 5), (18, 6, 2),
+ (15, 5, 1), (14, 5, 1), (13, 5, 1), (13, 5, 1),
+ (12, 7, 1), (15, 8, 1), (19, 9, 1), (22, 13, 2),
+ (28, 16, 5), (39, 24, 10), (42, 25, 11), (45, 27, 12),
+ (49, 29, 14), (51, 30, 14), (53, 31, 15), (53, 31, 16),
+ (53, 29, 15), (52, 28, 16), (51, 28, 17), (47, 25, 16),
+ (45, 23, 15), (43, 22, 16), (44, 22, 16), (47, 22, 16),
+ (51, 23, 19), (53, 26, 21), (54, 26, 23), (55, 28, 25),
+ (57, 29, 26), (57, 28, 26), (59, 29, 25), (58, 30, 24),
+ (55, 30, 20), (55, 30, 20), (56, 31, 20), (56, 33, 20),
+ (60, 35, 21), (63, 41, 22), (69, 46, 23), (77, 53, 26),
+ (87, 62, 32), (97, 72, 38), (107, 79, 46), (114, 86, 51),
+ (118, 88, 53), (119, 89, 53), (120, 88, 55), (121, 89, 56),
+ (120, 89, 59), (120, 91, 62), (122, 93, 65), (125, 97, 70),
+ (132, 102, 77), (141, 112, 87), (153, 123, 97), (164, 137, 108),
+ (174, 148, 116), (184, 160, 126), (194, 171, 133), (205, 181, 142),
+ (214, 190, 151), (221, 199, 162), (226, 204, 168), (228, 208, 176),
+ (230, 213, 179), (231, 215, 180), (228, 211, 176), (221, 206, 173),
+ (212, 197, 165), (198, 182, 159), (187, 171, 150), (178, 160, 140),
+ (169, 150, 127), (159, 139, 114), (148, 126, 100), (133, 109, 86),
+ (119, 92, 72), (107, 78, 62), (100, 69, 52), (96, 64, 45),
+ (96, 64, 44), (100, 67, 46), (106, 74, 49), (115, 83, 57),
+ (124, 93, 65), (134, 103, 72), (145, 114, 80), (155, 126, 91),
+ (166, 138, 100), (178, 152, 110), (188, 164, 119), (197, 174, 126),
+ (202, 180, 130), (205, 183, 134), (206, 185, 139), (206, 186, 141),
+ (206, 185, 142), (204, 183, 140), (197, 176, 133), (184, 160, 120),
+ (171, 144, 109), (158, 131, 99), (148, 118, 91), (138, 109, 86)
+ ),
+
+// 467 040222-26
+((78, 46, 94), (49, 30, 72), (25, 15, 54), (2, 1, 37),
+ (2, 1, 38), (3, 1, 40), (2, 1, 40), (2, 1, 41),
+ (3, 2, 43), (3, 1, 44), (4, 1, 45), (3, 1, 45),
+ (2, 1, 46), (2, 1, 46), (2, 1, 46), (2, 1, 46),
+ (2, 2, 46), (4, 2, 49), (10, 4, 53), (16, 7, 57),
+ (28, 15, 65), (41, 23, 73), (49, 27, 78), (57, 32, 84),
+ (91, 52, 109), (109, 64, 120), (127, 77, 132), (146, 89, 145),
+ (165, 101, 158), (172, 106, 163), (179, 111, 169), (187, 117, 174),
+ (188, 118, 175), (177, 110, 166), (163, 102, 157), (150, 95, 149),
+ (131, 83, 136), (113, 71, 124), (103, 64, 117), (94, 58, 111),
+ (61, 38, 89), (55, 34, 86), (50, 31, 84), (59, 35, 91),
+ (69, 40, 98), (75, 43, 102), (82, 47, 106), (95, 56, 115),
+ (104, 62, 121), (118, 69, 129), (115, 66, 126), (112, 63, 123),
+ (99, 56, 114), (87, 49, 106), (79, 45, 100), (72, 41, 95),
+ (41, 22, 73), (28, 15, 64), (16, 9, 56), (11, 6, 52),
+ (7, 3, 49), (7, 2, 48), (7, 2, 48), (10, 3, 51),
+ (16, 6, 55), (41, 21, 73), (61, 32, 88), (82, 44, 103),
+ (94, 51, 111), (106, 59, 120), (130, 74, 137), (156, 90, 154),
+ (195, 116, 182), (204, 121, 188), (214, 127, 194), (207, 123, 189),
+ (200, 120, 184), (191, 115, 178), (183, 110, 172), (160, 97, 157),
+ (137, 80, 141), (88, 51, 106), (67, 39, 90), (47, 28, 74),
+ (39, 23, 68), (31, 18, 63), (21, 12, 57), (15, 8, 53),
+ (13, 7, 51), (16, 8, 53), (19, 9, 56), (20, 10, 57),
+ (21, 11, 59), (23, 11, 63), (23, 11, 65), (23, 11, 65),
+ (22, 10, 65), (18, 9, 62), (15, 8, 59), (12, 7, 57),
+ (10, 6, 55), (9, 5, 54), (6, 4, 50), (4, 4, 48),
+ (2, 3, 44), (1, 2, 43), (0, 2, 42), (0, 2, 41),
+ (0, 2, 41), (0, 2, 41), (0, 2, 41), (0, 2, 42),
+ (0, 2, 42), (1, 2, 44), (1, 2, 44), (2, 2, 45),
+ (3, 2, 47), (4, 2, 48), (5, 3, 49), (7, 3, 50),
+ (12, 6, 53), (15, 8, 57), (19, 10, 61), (22, 11, 63),
+ (25, 12, 65), (30, 15, 69), (34, 17, 72), (39, 20, 75),
+ (46, 23, 80), (59, 30, 90), (62, 32, 92), (66, 34, 95),
+ (72, 37, 98), (81, 42, 104), (89, 47, 110), (94, 51, 113),
+ (93, 52, 111), (88, 49, 107), (84, 47, 104), (80, 45, 101),
+ (77, 43, 99), (70, 39, 90), (61, 35, 81), (50, 31, 71),
+ (42, 25, 65), (32, 19, 60), (33, 18, 60), (34, 18, 61),
+ (40, 24, 63), (48, 29, 70), (60, 36, 81), (76, 47, 94),
+ (116, 72, 126), (127, 80, 134), (138, 88, 142), (160, 102, 159),
+ (181, 118, 175), (199, 130, 188), (215, 142, 201), (230, 151, 211),
+ (238, 155, 217), (243, 158, 220), (241, 156, 218), (239, 155, 217),
+ (238, 151, 215), (233, 146, 210), (225, 141, 203), (217, 135, 196),
+ (206, 127, 188), (204, 125, 187), (203, 123, 186), (195, 119, 181),
+ (184, 113, 173), (170, 105, 163), (155, 96, 153), (140, 85, 145),
+ (124, 74, 134), (106, 62, 121), (85, 51, 109), (67, 40, 96),
+ (50, 30, 85), (36, 20, 75), (26, 13, 66), (17, 8, 58),
+ (8, 5, 49), (8, 5, 47), (9, 5, 46), (9, 5, 44),
+ (9, 6, 42), (8, 5, 42), (7, 5, 41), (7, 6, 41),
+ (7, 6, 41), (6, 6, 41), (6, 6, 42), (6, 6, 42),
+ (7, 7, 41), (11, 9, 41), (14, 11, 42), (15, 12, 43),
+ (17, 13, 44), (16, 12, 44), (17, 12, 44), (17, 12, 45),
+ (15, 11, 46), (13, 10, 47), (9, 8, 47), (6, 5, 47),
+ (3, 3, 47), (1, 2, 47), (0, 1, 46), (0, 1, 45),
+ (0, 1, 44), (0, 1, 43), (0, 1, 42), (0, 1, 42),
+ (0, 1, 41), (1, 1, 41), (2, 2, 40), (5, 4, 39),
+ (9, 6, 39), (13, 9, 39), (17, 10, 43), (22, 13, 48),
+ (27, 16, 53), (34, 19, 57), (41, 24, 62), (47, 28, 68),
+ (49, 28, 72), (50, 28, 77), (48, 26, 78), (44, 23, 78),
+ (42, 23, 76), (36, 20, 70), (31, 17, 65), (25, 13, 58),
+ (17, 9, 51), (12, 6, 47), (7, 3, 41), (5, 2, 36),
+ (3, 1, 33), (2, 1, 31), (1, 1, 31), (2, 0, 32),
+ (3, 1, 35), (5, 1, 38), (9, 4, 43), (17, 9, 51),
+ (28, 15, 61), (44, 25, 73), (67, 39, 91), (85, 49, 105),
+ (82, 47, 101), (76, 43, 96), (65, 37, 86), (65, 38, 84)
+ ),
+
+// 468 040222-27
+((183, 145, 135), (187, 128, 111), (180, 117, 99), (173, 106, 88),
+ (160, 93, 76), (147, 81, 64), (141, 75, 59), (135, 69, 55),
+ (95, 46, 39), (74, 38, 33), (54, 30, 27), (44, 25, 21),
+ (35, 20, 16), (30, 17, 14), (25, 14, 12), (24, 13, 11),
+ (23, 13, 10), (26, 17, 14), (37, 22, 20), (49, 28, 26),
+ (71, 44, 42), (93, 60, 59), (104, 71, 69), (115, 82, 79),
+ (159, 125, 119), (179, 144, 138), (199, 164, 158), (201, 171, 163),
+ (204, 178, 168), (200, 176, 166), (197, 174, 165), (188, 161, 154),
+ (174, 143, 143), (137, 115, 115), (123, 101, 100), (110, 87, 86),
+ (105, 83, 85), (101, 79, 85), (100, 79, 85), (99, 79, 86),
+ (117, 87, 92), (133, 101, 105), (150, 115, 119), (163, 130, 132),
+ (177, 146, 146), (184, 154, 154), (192, 162, 162), (207, 180, 176),
+ (217, 193, 185), (219, 199, 188), (213, 190, 179), (207, 181, 171),
+ (187, 162, 152), (168, 144, 134), (157, 132, 122), (147, 120, 111),
+ (101, 76, 70), (79, 57, 53), (57, 38, 36), (43, 27, 26),
+ (29, 17, 16), (25, 14, 13), (22, 12, 11), (19, 11, 10),
+ (22, 14, 14), (46, 36, 36), (64, 51, 53), (82, 67, 70),
+ (92, 75, 78), (103, 83, 86), (125, 99, 103), (143, 116, 117),
+ (157, 125, 131), (152, 122, 129), (148, 120, 127), (145, 116, 121),
+ (142, 113, 115), (139, 110, 113), (136, 107, 112), (135, 105, 108),
+ (137, 105, 104), (151, 109, 99), (155, 108, 96), (160, 107, 93),
+ (160, 108, 93), (161, 110, 94), (163, 112, 97), (162, 112, 99),
+ (151, 110, 95), (143, 105, 94), (136, 101, 93), (131, 98, 91),
+ (126, 95, 89), (113, 89, 82), (98, 79, 74), (88, 69, 65),
+ (78, 58, 59), (65, 50, 50), (63, 47, 46), (62, 44, 42),
+ (61, 42, 40), (61, 40, 38), (57, 38, 36), (54, 35, 31),
+ (43, 25, 20), (36, 21, 15), (29, 17, 11), (26, 14, 10),
+ (23, 12, 9), (17, 8, 6), (12, 6, 4), (7, 4, 2),
+ (4, 2, 1), (1, 0, 0), (0, 0, 0), (0, 0, 0),
+ (2, 0, 1), (4, 1, 1), (7, 3, 4), (10, 6, 8),
+ (21, 11, 13), (24, 15, 17), (28, 19, 21), (28, 19, 21),
+ (28, 20, 21), (30, 20, 22), (29, 19, 20), (29, 20, 21),
+ (27, 19, 19), (29, 17, 16), (30, 18, 17), (32, 19, 18),
+ (36, 22, 20), (43, 27, 25), (52, 33, 31), (60, 42, 38),
+ (81, 57, 53), (89, 64, 61), (98, 72, 69), (102, 75, 73),
+ (106, 78, 78), (115, 85, 85), (129, 94, 97), (141, 108, 108),
+ (154, 122, 123), (183, 155, 155), (190, 165, 163), (198, 176, 172),
+ (215, 194, 190), (224, 208, 202), (230, 218, 211), (232, 223, 214),
+ (232, 220, 212), (231, 217, 209), (230, 214, 206), (225, 203, 198),
+ (221, 195, 190), (213, 185, 179), (206, 171, 165), (192, 154, 151),
+ (177, 138, 138), (154, 116, 108), (149, 109, 102), (144, 103, 96),
+ (137, 91, 89), (136, 89, 86), (141, 91, 85), (148, 100, 90),
+ (167, 116, 108), (171, 121, 112), (176, 126, 116), (184, 138, 125),
+ (189, 148, 131), (198, 156, 137), (202, 162, 144), (206, 164, 150),
+ (207, 169, 156), (216, 177, 163), (221, 187, 171), (225, 192, 180),
+ (223, 194, 184), (224, 193, 185), (220, 192, 183), (216, 188, 181),
+ (196, 165, 162), (188, 156, 153), (181, 148, 145), (165, 133, 131),
+ (151, 118, 121), (136, 103, 110), (120, 90, 96), (105, 81, 84),
+ (96, 74, 77), (89, 67, 73), (87, 63, 67), (90, 60, 60),
+ (101, 61, 56), (116, 65, 57), (124, 69, 59), (123, 68, 58),
+ (117, 62, 53), (117, 58, 47), (111, 54, 44), (99, 50, 43),
+ (77, 42, 39), (62, 35, 34), (54, 30, 33), (53, 31, 36),
+ (53, 32, 38), (52, 32, 37), (50, 31, 38), (49, 33, 42),
+ (50, 35, 44), (49, 34, 40), (46, 31, 35), (44, 29, 33),
+ (45, 32, 34), (49, 35, 37), (57, 40, 42), (66, 44, 46),
+ (74, 51, 54), (81, 59, 63), (87, 66, 73), (95, 73, 79),
+ (97, 76, 85), (98, 78, 86), (95, 78, 86), (94, 78, 83),
+ (91, 78, 79), (89, 73, 73), (87, 68, 68), (87, 66, 63),
+ (85, 67, 60), (87, 67, 57), (88, 65, 57), (89, 62, 57),
+ (87, 61, 55), (87, 60, 53), (89, 59, 52), (92, 58, 54),
+ (95, 59, 56), (97, 62, 57), (100, 65, 57), (105, 69, 62),
+ (115, 75, 67), (122, 83, 75), (126, 85, 78), (127, 88, 85),
+ (130, 91, 90), (137, 98, 100), (147, 105, 111), (156, 115, 121),
+ (163, 126, 129), (164, 127, 131), (167, 129, 133), (173, 132, 133)
+ ),
+
+// 469 040222-28
+((101, 156, 123), (83, 141, 116), (72, 130, 115), (62, 120, 114),
+ (62, 124, 118), (63, 128, 123), (62, 127, 123), (61, 126, 123),
+ (50, 116, 125), (42, 107, 121), (35, 98, 117), (28, 88, 108),
+ (22, 79, 100), (20, 73, 93), (19, 68, 86), (20, 64, 82),
+ (22, 61, 79), (28, 43, 63), (31, 39, 52), (34, 36, 42),
+ (40, 35, 34), (47, 35, 27), (51, 33, 26), (56, 32, 26),
+ (51, 34, 29), (49, 41, 35), (48, 49, 42), (50, 57, 52),
+ (53, 65, 63), (51, 69, 69), (50, 74, 76), (48, 79, 85),
+ (48, 84, 93), (50, 85, 90), (51, 82, 84), (53, 80, 79),
+ (56, 74, 69), (59, 69, 60), (61, 65, 55), (64, 62, 51),
+ (77, 67, 48), (83, 78, 54), (90, 90, 60), (93, 101, 69),
+ (97, 113, 78), (98, 119, 85), (100, 126, 93), (103, 140, 109),
+ (107, 157, 123), (110, 172, 135), (107, 171, 137), (105, 171, 139),
+ (101, 166, 133), (97, 162, 128), (95, 160, 124), (94, 158, 121),
+ (91, 149, 120), (81, 141, 116), (71, 133, 113), (58, 122, 106),
+ (45, 112, 100), (42, 107, 99), (40, 102, 98), (38, 92, 95),
+ (33, 81, 91), (17, 62, 74), (13, 53, 64), (9, 45, 55),
+ (8, 41, 49), (7, 37, 44), (4, 29, 33), (5, 24, 26),
+ (7, 23, 20), (7, 27, 19), (7, 31, 19), (11, 34, 18),
+ (15, 37, 18), (17, 37, 16), (19, 37, 15), (21, 37, 14),
+ (20, 36, 14), (18, 33, 15), (18, 29, 12), (19, 25, 9),
+ (18, 22, 8), (17, 20, 8), (16, 13, 10), (15, 9, 16),
+ (21, 7, 21), (23, 7, 20), (26, 8, 20), (26, 8, 21),
+ (27, 9, 22), (33, 14, 23), (39, 17, 22), (44, 22, 17),
+ (43, 25, 13), (35, 27, 9), (33, 30, 11), (32, 34, 13),
+ (32, 37, 15), (32, 41, 17), (31, 43, 20), (26, 44, 24),
+ (16, 38, 37), (17, 38, 41), (18, 39, 45), (19, 40, 43),
+ (21, 42, 42), (23, 45, 39), (29, 48, 37), (38, 52, 33),
+ (52, 62, 33), (80, 86, 39), (82, 92, 43), (85, 98, 47),
+ (88, 104, 53), (88, 110, 58), (92, 114, 64), (101, 115, 64),
+ (100, 107, 65), (92, 102, 59), (85, 97, 54), (86, 95, 49),
+ (88, 94, 44), (99, 99, 34), (109, 105, 29), (119, 115, 29),
+ (126, 128, 38), (130, 146, 63), (130, 149, 69), (130, 152, 75),
+ (124, 159, 89), (122, 164, 103), (115, 166, 115), (112, 166, 125),
+ (104, 159, 135), (100, 150, 131), (96, 142, 128), (96, 137, 123),
+ (96, 133, 119), (96, 124, 113), (96, 118, 111), (89, 118, 118),
+ (81, 112, 119), (70, 106, 110), (69, 104, 107), (68, 103, 105),
+ (62, 110, 113), (55, 114, 124), (55, 119, 134), (59, 130, 141),
+ (82, 151, 141), (85, 155, 142), (89, 159, 143), (97, 161, 146),
+ (104, 163, 146), (113, 167, 138), (124, 170, 125), (130, 170, 110),
+ (133, 165, 96), (126, 143, 81), (123, 138, 74), (120, 133, 68),
+ (114, 123, 53), (110, 111, 38), (103, 97, 29), (97, 82, 30),
+ (82, 66, 37), (81, 66, 40), (80, 67, 43), (78, 74, 50),
+ (80, 79, 59), (79, 84, 70), (79, 88, 79), (78, 87, 89),
+ (77, 88, 96), (75, 93, 98), (71, 96, 95), (64, 97, 90),
+ (56, 90, 88), (48, 78, 85), (41, 69, 81), (38, 64, 74),
+ (41, 82, 64), (46, 85, 63), (51, 88, 63), (64, 96, 63),
+ (76, 103, 63), (92, 112, 60), (103, 129, 58), (116, 137, 52),
+ (124, 136, 42), (126, 126, 34), (123, 112, 27), (111, 101, 23),
+ (98, 94, 20), (84, 80, 18), (69, 63, 16), (58, 48, 14),
+ (48, 38, 13), (44, 36, 11), (44, 38, 9), (43, 40, 11),
+ (45, 45, 14), (46, 54, 22), (46, 62, 26), (47, 65, 30),
+ (46, 67, 36), (44, 66, 41), (40, 71, 50), (37, 78, 56),
+ (37, 80, 62), (37, 80, 64), (41, 73, 62), (43, 71, 59),
+ (46, 73, 54), (51, 79, 54), (54, 86, 54), (60, 89, 56),
+ (61, 90, 55), (59, 87, 52), (57, 84, 51), (51, 82, 51),
+ (48, 82, 55), (44, 82, 58), (41, 82, 59), (41, 81, 61),
+ (41, 79, 60), (42, 78, 63), (42, 82, 68), (44, 89, 70),
+ (53, 96, 70), (62, 101, 68), (74, 101, 64), (79, 99, 62),
+ (78, 99, 64), (79, 99, 65), (78, 99, 70), (83, 100, 75),
+ (84, 97, 78), (84, 100, 89), (81, 103, 99), (81, 107, 111),
+ (85, 122, 126), (89, 139, 137), (104, 159, 144), (113, 171, 151),
+ (120, 176, 153), (127, 180, 153), (126, 186, 152), (136, 197, 148),
+ (129, 186, 136), (120, 173, 128), (111, 157, 122), (97, 146, 117)
+ ),
+
+// 470 040222-29
+((202, 107, 147), (191, 91, 132), (188, 88, 128), (186, 85, 125),
+ (185, 84, 125), (185, 83, 125), (184, 83, 126), (184, 84, 128),
+ (182, 88, 130), (182, 90, 131), (182, 92, 132), (185, 98, 137),
+ (188, 104, 142), (194, 112, 149), (201, 121, 157), (204, 126, 162),
+ (208, 131, 167), (220, 153, 186), (224, 158, 190), (228, 163, 194),
+ (229, 162, 193), (230, 162, 192), (230, 159, 190), (230, 157, 188),
+ (226, 144, 176), (221, 137, 170), (216, 130, 164), (212, 123, 158),
+ (209, 116, 153), (208, 112, 150), (207, 109, 148), (205, 103, 144),
+ (205, 96, 139), (203, 84, 129), (201, 77, 124), (200, 70, 119),
+ (196, 64, 115), (193, 59, 111), (191, 57, 109), (190, 56, 107),
+ (189, 53, 105), (190, 55, 107), (191, 58, 109), (194, 61, 111),
+ (197, 65, 114), (197, 67, 115), (197, 69, 116), (196, 71, 116),
+ (194, 73, 117), (189, 71, 114), (186, 68, 111), (183, 65, 109),
+ (178, 62, 105), (173, 60, 101), (170, 59, 98), (167, 58, 96),
+ (154, 57, 91), (148, 56, 88), (143, 55, 85), (141, 55, 84),
+ (139, 55, 84), (138, 55, 85), (138, 55, 86), (138, 55, 85),
+ (136, 53, 83), (131, 49, 77), (126, 46, 73), (122, 43, 70),
+ (121, 43, 69), (120, 43, 68), (119, 44, 69), (120, 48, 71),
+ (132, 60, 84), (139, 68, 92), (146, 77, 100), (152, 83, 107),
+ (158, 90, 115), (160, 92, 117), (162, 94, 120), (165, 99, 124),
+ (168, 103, 127), (175, 110, 134), (180, 115, 139), (185, 120, 144),
+ (188, 122, 147), (192, 125, 151), (198, 130, 157), (205, 133, 163),
+ (215, 137, 171), (218, 136, 171), (222, 135, 172), (222, 132, 171),
+ (222, 130, 170), (219, 123, 165), (214, 115, 157), (208, 107, 149),
+ (199, 99, 140), (181, 83, 123), (171, 75, 114), (162, 68, 105),
+ (158, 64, 101), (155, 60, 97), (146, 53, 88), (136, 43, 79),
+ (118, 27, 59), (111, 20, 52), (104, 14, 45), (101, 12, 42),
+ (98, 11, 40), (96, 11, 38), (99, 14, 40), (105, 19, 45),
+ (114, 25, 53), (132, 41, 71), (135, 45, 75), (139, 50, 79),
+ (148, 56, 87), (154, 64, 96), (159, 71, 102), (164, 77, 107),
+ (174, 85, 116), (179, 90, 121), (184, 95, 127), (185, 98, 129),
+ (187, 101, 132), (190, 106, 137), (193, 111, 143), (193, 115, 145),
+ (191, 118, 146), (184, 115, 141), (181, 113, 138), (179, 111, 136),
+ (175, 106, 131), (170, 101, 126), (167, 99, 122), (167, 97, 122),
+ (172, 101, 127), (178, 105, 131), (184, 109, 136), (186, 111, 138),
+ (189, 113, 140), (193, 115, 143), (195, 116, 145), (197, 118, 146),
+ (198, 120, 149), (204, 130, 159), (206, 134, 162), (208, 138, 166),
+ (214, 145, 173), (220, 150, 179), (226, 154, 184), (230, 155, 186),
+ (234, 147, 184), (233, 143, 181), (233, 140, 179), (229, 132, 172),
+ (225, 125, 164), (219, 120, 157), (212, 113, 149), (207, 106, 141),
+ (197, 99, 132), (178, 78, 112), (173, 72, 106), (168, 66, 100),
+ (157, 53, 88), (147, 40, 75), (136, 31, 64), (125, 23, 55),
+ (116, 18, 45), (114, 18, 44), (113, 19, 44), (112, 21, 46),
+ (113, 25, 50), (115, 30, 56), (120, 36, 61), (125, 43, 68),
+ (129, 48, 74), (137, 52, 81), (145, 56, 88), (154, 63, 97),
+ (164, 69, 104), (174, 76, 114), (183, 85, 124), (194, 95, 134),
+ (214, 121, 158), (217, 126, 162), (221, 131, 167), (226, 139, 175),
+ (231, 146, 183), (235, 151, 186), (236, 152, 188), (236, 153, 189),
+ (235, 152, 189), (234, 152, 188), (232, 154, 187), (231, 155, 186),
+ (230, 156, 186), (229, 156, 187), (228, 156, 185), (225, 152, 182),
+ (223, 147, 176), (219, 140, 170), (215, 131, 164), (209, 122, 155),
+ (203, 113, 146), (196, 105, 139), (190, 99, 133), (184, 95, 128),
+ (178, 92, 123), (173, 88, 117), (169, 85, 113), (164, 83, 110),
+ (160, 81, 106), (156, 79, 102), (151, 77, 100), (148, 75, 97),
+ (145, 74, 95), (143, 75, 95), (140, 74, 95), (139, 74, 95),
+ (138, 75, 95), (136, 75, 93), (135, 73, 91), (131, 68, 87),
+ (127, 64, 83), (123, 59, 78), (120, 55, 75), (120, 52, 73),
+ (121, 51, 73), (122, 53, 75), (125, 56, 78), (131, 60, 83),
+ (135, 62, 86), (139, 66, 90), (143, 71, 94), (145, 74, 97),
+ (150, 76, 100), (155, 81, 105), (160, 86, 112), (166, 93, 119),
+ (176, 102, 129), (187, 111, 139), (197, 119, 150), (207, 126, 159),
+ (213, 133, 166), (219, 137, 170), (224, 139, 174), (228, 140, 176),
+ (231, 142, 179), (233, 142, 181), (234, 142, 181), (233, 140, 180),
+ (229, 135, 177), (224, 131, 173), (218, 125, 167), (212, 118, 159)
+ ),
+
+// 471 040223
+((183, 89, 57), (215, 132, 89), (229, 149, 101), (243, 166, 113),
+ (242, 165, 110), (242, 164, 108), (239, 162, 105), (236, 161, 103),
+ (227, 148, 89), (220, 133, 76), (214, 118, 63), (202, 109, 57),
+ (190, 100, 52), (187, 106, 55), (185, 112, 59), (188, 114, 58),
+ (191, 117, 57), (203, 124, 65), (201, 133, 82), (199, 142, 100),
+ (189, 155, 108), (180, 168, 117), (174, 169, 115), (168, 170, 113),
+ (142, 151, 104), (134, 147, 108), (127, 144, 112), (118, 140, 107),
+ (109, 137, 102), (106, 135, 99), (104, 134, 97), (101, 134, 88),
+ (103, 133, 90), (105, 117, 87), (104, 110, 82), (104, 103, 78),
+ (106, 95, 66), (108, 87, 55), (111, 82, 51), (115, 78, 48),
+ (146, 78, 48), (157, 84, 45), (169, 90, 43), (177, 93, 44),
+ (186, 97, 46), (186, 99, 49), (187, 102, 52), (175, 106, 59),
+ (161, 103, 61), (141, 86, 48), (144, 71, 41), (148, 57, 35),
+ (145, 44, 29), (142, 32, 24), (139, 29, 21), (137, 27, 18),
+ (129, 21, 9), (117, 20, 5), (106, 19, 2), (87, 17, 1),
+ (68, 15, 1), (60, 15, 1), (52, 15, 1), (38, 14, 1),
+ (28, 16, 2), (25, 16, 4), (33, 16, 7), (42, 16, 10),
+ (45, 18, 14), (49, 21, 18), (56, 30, 29), (63, 39, 36),
+ (84, 49, 36), (88, 47, 34), (93, 45, 33), (91, 43, 32),
+ (89, 42, 31), (87, 39, 28), (85, 36, 26), (81, 29, 15),
+ (75, 19, 7), (62, 5, 0), (51, 3, 0), (41, 1, 0),
+ (36, 2, 0), (31, 4, 0), (22, 8, 1), (18, 13, 4),
+ (11, 25, 15), (12, 35, 22), (14, 45, 30), (17, 51, 33),
+ (20, 58, 37), (24, 69, 42), (29, 77, 44), (40, 78, 45),
+ (50, 75, 43), (70, 63, 36), (78, 56, 29), (87, 49, 22),
+ (90, 43, 18), (94, 37, 15), (98, 25, 7), (95, 14, 5),
+ (81, 2, 5), (71, 1, 6), (61, 0, 7), (55, 0, 8),
+ (49, 1, 9), (39, 1, 6), (31, 1, 6), (24, 1, 7),
+ (21, 1, 6), (32, 1, 4), (37, 1, 3), (42, 1, 2),
+ (50, 3, 4), (56, 7, 7), (66, 16, 15), (81, 29, 26),
+ (123, 71, 53), (131, 93, 67), (140, 116, 82), (143, 125, 91),
+ (146, 135, 101), (150, 148, 107), (158, 161, 114), (166, 169, 118),
+ (171, 173, 120), (183, 172, 124), (183, 167, 120), (184, 162, 116),
+ (191, 154, 106), (197, 141, 98), (207, 136, 92), (216, 128, 85),
+ (209, 112, 63), (196, 109, 59), (184, 106, 56), (176, 106, 56),
+ (168, 106, 57), (152, 100, 52), (135, 96, 51), (115, 97, 53),
+ (102, 108, 68), (79, 118, 97), (75, 114, 98), (71, 110, 99),
+ (64, 93, 87), (62, 94, 76), (54, 86, 81), (52, 82, 79),
+ (41, 64, 68), (38, 66, 58), (36, 69, 48), (25, 70, 39),
+ (23, 76, 36), (20, 83, 40), (28, 89, 54), (40, 100, 64),
+ (51, 105, 67), (87, 112, 66), (94, 112, 66), (102, 112, 67),
+ (116, 113, 71), (126, 105, 71), (131, 100, 66), (138, 93, 64),
+ (121, 81, 45), (115, 74, 41), (110, 68, 37), (88, 58, 28),
+ (72, 47, 25), (55, 37, 20), (36, 28, 16), (27, 18, 11),
+ (21, 11, 7), (20, 8, 4), (22, 11, 4), (27, 13, 6),
+ (32, 18, 7), (41, 22, 8), (51, 24, 10), (64, 28, 8),
+ (88, 27, 7), (92, 26, 7), (97, 26, 8), (104, 24, 8),
+ (112, 21, 6), (120, 15, 5), (130, 11, 2), (137, 9, 2),
+ (140, 10, 2), (143, 13, 1), (145, 14, 2), (150, 15, 1),
+ (151, 14, 2), (148, 12, 3), (141, 19, 6), (130, 23, 10),
+ (117, 29, 18), (100, 30, 23), (81, 25, 25), (64, 24, 26),
+ (55, 26, 27), (50, 34, 32), (46, 46, 36), (38, 56, 40),
+ (32, 62, 39), (32, 59, 41), (37, 56, 42), (49, 52, 42),
+ (55, 53, 42), (58, 59, 40), (56, 57, 41), (53, 52, 43),
+ (51, 42, 45), (45, 35, 44), (40, 33, 39), (32, 30, 34),
+ (28, 29, 28), (23, 24, 25), (18, 21, 23), (18, 19, 20),
+ (19, 17, 17), (28, 13, 13), (43, 11, 8), (59, 9, 5),
+ (78, 10, 3), (93, 12, 1), (104, 11, 2), (113, 15, 3),
+ (117, 18, 8), (120, 21, 11), (121, 24, 12), (115, 25, 15),
+ (108, 27, 16), (97, 30, 22), (83, 35, 28), (75, 38, 35),
+ (72, 44, 36), (72, 46, 33), (76, 46, 28), (73, 45, 24),
+ (67, 42, 24), (62, 39, 22), (59, 34, 20), (64, 29, 14),
+ (70, 23, 6), (73, 16, 2), (76, 9, 0), (81, 4, 1),
+ (95, 19, 13), (117, 41, 26), (142, 61, 37), (164, 82, 53)
+ ),
+
+// 472 040224
+((164, 132, 113), (149, 103, 81), (146, 85, 63), (144, 68, 46),
+ (133, 54, 31), (122, 40, 17), (113, 34, 13), (105, 29, 9),
+ (73, 10, 1), (60, 6, 0), (47, 2, 0), (38, 1, 0),
+ (30, 1, 0), (25, 1, 0), (20, 2, 0), (18, 2, 0),
+ (16, 2, 0), (10, 2, 0), (7, 2, 0), (5, 2, 0),
+ (4, 3, 0), (3, 4, 0), (3, 4, 0), (3, 5, 0),
+ (6, 5, 0), (12, 4, 0), (18, 4, 0), (25, 3, 1),
+ (32, 3, 2), (35, 3, 2), (38, 4, 3), (40, 7, 4),
+ (40, 12, 6), (41, 29, 13), (43, 37, 18), (45, 45, 24),
+ (51, 47, 27), (57, 50, 31), (60, 50, 30), (63, 50, 30),
+ (79, 55, 33), (86, 59, 36), (94, 64, 40), (108, 66, 47),
+ (122, 68, 55), (128, 67, 55), (135, 66, 55), (149, 66, 52),
+ (164, 61, 49), (192, 62, 36), (204, 68, 37), (217, 75, 39),
+ (224, 90, 43), (231, 105, 47), (233, 112, 47), (235, 119, 48),
+ (229, 135, 40), (213, 136, 39), (197, 138, 39), (179, 144, 51),
+ (162, 150, 63), (153, 152, 71), (145, 154, 80), (133, 157, 86),
+ (125, 156, 92), (88, 141, 90), (67, 131, 84), (47, 122, 79),
+ (37, 117, 81), (27, 112, 84), (13, 107, 85), (13, 103, 87),
+ (11, 81, 83), (9, 73, 76), (7, 66, 70), (7, 69, 68),
+ (8, 73, 67), (7, 78, 72), (7, 83, 78), (19, 92, 91),
+ (39, 98, 103), (78, 96, 117), (99, 92, 116), (120, 89, 116),
+ (122, 88, 120), (125, 88, 124), (133, 91, 127), (140, 94, 128),
+ (147, 87, 118), (152, 79, 103), (157, 72, 88), (153, 68, 83),
+ (150, 64, 79), (141, 60, 73), (130, 63, 76), (113, 76, 79),
+ (106, 85, 90), (109, 106, 81), (116, 112, 76), (124, 118, 72),
+ (132, 118, 73), (141, 118, 74), (150, 125, 72), (159, 130, 90),
+ (190, 130, 112), (203, 119, 107), (216, 108, 103), (221, 98, 97),
+ (227, 88, 92), (231, 72, 73), (224, 59, 62), (221, 54, 59),
+ (216, 51, 62), (213, 53, 64), (213, 58, 66), (214, 64, 68),
+ (217, 75, 65), (216, 87, 63), (216, 95, 61), (215, 102, 62),
+ (211, 108, 54), (212, 112, 51), (213, 116, 48), (214, 120, 49),
+ (216, 124, 50), (215, 125, 52), (209, 123, 53), (197, 119, 50),
+ (186, 103, 43), (171, 76, 23), (172, 75, 19), (174, 75, 15),
+ (180, 78, 10), (185, 84, 12), (167, 91, 14), (154, 89, 19),
+ (128, 81, 22), (123, 74, 20), (119, 68, 19), (129, 67, 19),
+ (140, 67, 20), (131, 71, 19), (123, 69, 21), (105, 65, 22),
+ (87, 60, 20), (44, 40, 15), (45, 36, 12), (46, 33, 10),
+ (47, 32, 8), (47, 29, 9), (42, 28, 8), (36, 30, 8),
+ (35, 40, 9), (37, 44, 7), (39, 49, 6), (51, 60, 8),
+ (65, 66, 9), (82, 69, 8), (95, 72, 9), (108, 73, 13),
+ (120, 68, 16), (133, 67, 12), (135, 66, 12), (137, 66, 12),
+ (138, 66, 12), (136, 68, 13), (129, 74, 18), (119, 77, 25),
+ (97, 82, 26), (91, 83, 26), (86, 84, 27), (73, 93, 26),
+ (58, 106, 24), (46, 122, 28), (32, 133, 37), (24, 147, 49),
+ (16, 156, 56), (12, 158, 59), (12, 154, 59), (10, 148, 51),
+ (12, 145, 46), (9, 134, 41), (8, 126, 40), (6, 116, 42),
+ (9, 86, 45), (10, 77, 43), (12, 68, 41), (19, 54, 33),
+ (26, 40, 24), (33, 28, 14), (37, 18, 7), (41, 12, 5),
+ (44, 8, 5), (44, 7, 4), (46, 5, 4), (48, 5, 4),
+ (50, 4, 4), (50, 2, 2), (49, 2, 0), (48, 1, 1),
+ (47, 2, 0), (49, 3, 2), (53, 3, 1), (57, 3, 2),
+ (62, 3, 2), (71, 2, 2), (79, 2, 2), (88, 2, 3),
+ (96, 3, 4), (107, 4, 3), (117, 4, 3), (124, 4, 4),
+ (131, 4, 4), (136, 5, 2), (140, 7, 3), (142, 8, 3),
+ (144, 9, 3), (146, 10, 3), (146, 10, 4), (144, 11, 7),
+ (141, 10, 7), (136, 12, 9), (131, 12, 10), (124, 12, 10),
+ (115, 12, 8), (107, 10, 6), (100, 11, 7), (94, 11, 7),
+ (86, 11, 9), (79, 10, 10), (72, 9, 11), (64, 9, 10),
+ (56, 8, 6), (49, 8, 7), (43, 11, 9), (37, 13, 11),
+ (33, 15, 12), (30, 17, 12), (30, 18, 12), (32, 20, 11),
+ (40, 21, 11), (55, 25, 19), (75, 29, 28), (93, 38, 39),
+ (105, 51, 57), (112, 67, 74), (108, 86, 87), (110, 102, 100),
+ (116, 119, 113), (137, 123, 121), (160, 128, 122), (183, 132, 127),
+ (203, 134, 130), (200, 139, 124), (196, 138, 122), (177, 140, 120)
+ ),
+
+// 473 040225
+((174, 52, 5), (173, 60, 7), (171, 58, 6), (169, 56, 5),
+ (155, 51, 5), (142, 47, 5), (136, 46, 5), (130, 45, 5),
+ (112, 44, 6), (113, 47, 9), (115, 50, 12), (113, 53, 18),
+ (112, 57, 24), (106, 55, 28), (101, 53, 32), (98, 51, 30),
+ (95, 49, 29), (99, 46, 28), (106, 49, 30), (113, 52, 32),
+ (118, 49, 31), (124, 47, 31), (124, 43, 28), (124, 39, 25),
+ (119, 22, 13), (116, 19, 10), (113, 17, 8), (110, 17, 8),
+ (107, 18, 9), (107, 19, 8), (107, 20, 8), (112, 18, 8),
+ (116, 16, 6), (124, 7, 2), (128, 6, 1), (133, 6, 0),
+ (147, 12, 1), (161, 19, 2), (170, 23, 3), (179, 28, 4),
+ (209, 46, 7), (214, 52, 9), (219, 58, 11), (214, 60, 10),
+ (210, 62, 10), (208, 65, 10), (206, 68, 10), (204, 79, 12),
+ (197, 84, 13), (190, 91, 17), (185, 85, 17), (180, 79, 17),
+ (176, 76, 16), (172, 73, 16), (174, 76, 17), (176, 79, 18),
+ (176, 86, 22), (179, 85, 25), (183, 84, 29), (179, 83, 32),
+ (176, 82, 36), (170, 80, 35), (165, 78, 34), (158, 72, 32),
+ (153, 69, 30), (160, 65, 32), (162, 65, 32), (164, 66, 33),
+ (165, 64, 32), (166, 63, 32), (172, 63, 30), (180, 65, 28),
+ (184, 90, 34), (185, 109, 45), (187, 128, 56), (195, 145, 71),
+ (203, 162, 87), (200, 169, 90), (197, 176, 93), (187, 192, 97),
+ (181, 196, 98), (173, 191, 98), (179, 178, 96), (186, 166, 94),
+ (186, 162, 88), (187, 158, 83), (189, 145, 73), (181, 129, 55),
+ (195, 99, 40), (203, 89, 35), (211, 79, 30), (212, 79, 29),
+ (214, 79, 28), (217, 81, 28), (221, 86, 31), (224, 94, 35),
+ (229, 102, 41), (237, 110, 45), (241, 112, 45), (246, 115, 45),
+ (246, 116, 44), (247, 117, 43), (249, 120, 42), (248, 121, 39),
+ (226, 114, 32), (214, 106, 29), (202, 98, 26), (197, 96, 27),
+ (193, 94, 28), (188, 93, 29), (181, 95, 29), (171, 97, 28),
+ (163, 99, 26), (144, 103, 30), (143, 105, 32), (143, 107, 35),
+ (152, 112, 40), (164, 119, 45), (177, 125, 47), (188, 131, 47),
+ (197, 136, 52), (205, 134, 53), (213, 133, 54), (216, 130, 54),
+ (220, 128, 54), (226, 125, 53), (229, 120, 56), (224, 117, 52),
+ (218, 108, 47), (208, 89, 34), (205, 85, 31), (202, 82, 28),
+ (196, 73, 24), (189, 67, 20), (182, 62, 16), (177, 58, 13),
+ (181, 54, 5), (186, 53, 5), (191, 52, 5), (194, 53, 5),
+ (198, 55, 6), (200, 59, 8), (203, 67, 9), (211, 76, 10),
+ (219, 84, 12), (236, 92, 19), (237, 93, 22), (239, 95, 25),
+ (230, 106, 34), (222, 118, 40), (215, 128, 43), (204, 131, 41),
+ (177, 113, 34), (166, 107, 34), (156, 102, 35), (134, 96, 37),
+ (118, 90, 36), (106, 88, 33), (99, 89, 29), (96, 83, 24),
+ (94, 83, 25), (91, 101, 40), (93, 108, 47), (95, 116, 54),
+ (106, 135, 64), (115, 150, 73), (127, 169, 79), (139, 182, 85),
+ (161, 186, 96), (166, 184, 96), (171, 183, 97), (174, 168, 92),
+ (175, 155, 85), (177, 138, 71), (175, 115, 58), (179, 92, 47),
+ (185, 71, 37), (188, 50, 28), (188, 36, 22), (187, 27, 13),
+ (181, 19, 7), (176, 12, 4), (175, 8, 2), (175, 4, 2),
+ (176, 1, 1), (176, 0, 1), (176, 0, 1), (175, 0, 0),
+ (175, 1, 1), (176, 3, 1), (176, 6, 1), (177, 10, 1),
+ (179, 14, 1), (181, 18, 2), (182, 23, 4), (186, 29, 8),
+ (191, 36, 11), (196, 43, 15), (200, 49, 17), (203, 52, 19),
+ (203, 52, 19), (204, 53, 21), (207, 54, 23), (208, 55, 24),
+ (211, 58, 24), (212, 58, 23), (209, 55, 19), (204, 50, 14),
+ (201, 46, 12), (196, 40, 10), (193, 38, 7), (190, 38, 5),
+ (185, 38, 4), (174, 36, 3), (163, 35, 3), (154, 35, 6),
+ (145, 32, 8), (142, 30, 7), (144, 32, 7), (145, 32, 8),
+ (148, 35, 7), (153, 43, 11), (157, 50, 16), (163, 54, 18),
+ (175, 58, 19), (185, 60, 18), (196, 58, 14), (205, 57, 11),
+ (210, 57, 11), (216, 61, 12), (221, 64, 13), (222, 67, 12),
+ (224, 69, 10), (224, 66, 7), (217, 61, 4), (210, 56, 2),
+ (203, 52, 1), (194, 47, 2), (186, 45, 2), (180, 43, 2),
+ (171, 39, 1), (162, 33, 2), (159, 28, 0), (154, 21, 1),
+ (150, 15, 1), (148, 12, 1), (147, 12, 1), (146, 14, 2),
+ (153, 18, 1), (164, 24, 1), (175, 30, 1), (184, 33, 2),
+ (190, 37, 2), (188, 40, 2), (183, 42, 3), (177, 47, 5)
+ ),
+
+// 474 040226
+((49, 78, 48), (42, 93, 55), (38, 103, 59), (34, 113, 63),
+ (29, 114, 64), (25, 115, 65), (23, 114, 63), (22, 114, 61),
+ (23, 109, 56), (21, 100, 51), (20, 92, 47), (15, 81, 38),
+ (10, 71, 30), (13, 61, 26), (16, 52, 22), (21, 49, 21),
+ (26, 46, 21), (57, 41, 18), (78, 42, 18), (99, 44, 19),
+ (108, 46, 21), (118, 48, 23), (118, 48, 24), (119, 49, 25),
+ (120, 57, 27), (110, 56, 27), (101, 55, 27), (83, 49, 25),
+ (66, 43, 24), (60, 41, 23), (54, 40, 23), (45, 38, 25),
+ (38, 38, 26), (34, 45, 29), (34, 52, 34), (35, 60, 39),
+ (34, 69, 42), (34, 79, 46), (32, 82, 47), (31, 85, 49),
+ (28, 87, 53), (32, 86, 53), (36, 85, 54), (38, 83, 51),
+ (41, 82, 48), (41, 81, 47), (42, 80, 46), (53, 74, 49),
+ (69, 72, 51), (108, 80, 53), (120, 87, 52), (132, 94, 52),
+ (135, 94, 49), (139, 95, 46), (138, 92, 45), (137, 90, 44),
+ (117, 76, 34), (100, 73, 29), (84, 70, 25), (63, 63, 21),
+ (42, 56, 17), (34, 50, 15), (26, 45, 13), (16, 37, 13),
+ (11, 36, 12), (5, 42, 15), (3, 42, 15), (2, 42, 15),
+ (2, 40, 15), (3, 38, 15), (5, 32, 14), (7, 30, 15),
+ (11, 29, 16), (14, 26, 16), (18, 23, 16), (21, 19, 15),
+ (25, 15, 14), (27, 14, 13), (29, 14, 13), (33, 15, 14),
+ (40, 18, 15), (59, 22, 15), (62, 22, 14), (66, 23, 13),
+ (65, 24, 13), (65, 25, 14), (66, 28, 15), (69, 33, 18),
+ (64, 47, 22), (54, 49, 23), (45, 51, 25), (42, 50, 27),
+ (40, 50, 30), (36, 52, 32), (34, 53, 32), (32, 53, 32),
+ (30, 50, 27), (31, 38, 21), (35, 32, 17), (39, 27, 13),
+ (42, 24, 11), (45, 22, 9), (51, 19, 7), (56, 19, 4),
+ (70, 18, 2), (73, 16, 1), (77, 14, 1), (76, 13, 0),
+ (75, 13, 0), (70, 14, 1), (66, 14, 1), (62, 11, 1),
+ (57, 10, 2), (38, 6, 1), (33, 6, 1), (29, 6, 2),
+ (22, 6, 4), (20, 7, 5), (17, 9, 5), (14, 9, 3),
+ (8, 11, 4), (10, 13, 7), (13, 16, 10), (16, 17, 10),
+ (19, 18, 11), (28, 21, 10), (40, 24, 9), (56, 28, 10),
+ (78, 32, 10), (114, 42, 10), (118, 43, 10), (123, 44, 10),
+ (125, 46, 12), (123, 45, 11), (123, 44, 13), (118, 43, 11),
+ (105, 45, 16), (107, 51, 28), (109, 58, 41), (113, 69, 48),
+ (117, 80, 55), (117, 103, 76), (135, 121, 95), (151, 132, 101),
+ (178, 134, 109), (214, 160, 100), (221, 168, 102), (228, 177, 104),
+ (229, 190, 106), (234, 193, 111), (245, 183, 102), (243, 178, 87),
+ (245, 163, 62), (246, 163, 63), (247, 163, 64), (243, 159, 68),
+ (236, 157, 74), (229, 138, 70), (227, 118, 57), (228, 96, 43),
+ (227, 84, 32), (218, 81, 26), (215, 82, 25), (213, 83, 24),
+ (216, 78, 21), (218, 80, 20), (218, 84, 21), (210, 93, 27),
+ (175, 95, 31), (165, 92, 32), (156, 90, 34), (144, 81, 33),
+ (130, 79, 38), (107, 75, 38), (87, 66, 36), (65, 54, 35),
+ (56, 42, 28), (55, 33, 24), (58, 30, 20), (63, 29, 15),
+ (67, 30, 16), (75, 33, 14), (84, 35, 14), (92, 39, 13),
+ (102, 39, 13), (102, 39, 13), (103, 39, 14), (102, 38, 15),
+ (101, 39, 16), (99, 37, 17), (100, 35, 15), (102, 34, 13),
+ (104, 33, 13), (115, 40, 13), (130, 50, 14), (146, 62, 12),
+ (166, 73, 10), (179, 81, 13), (193, 86, 19), (205, 91, 26),
+ (210, 100, 31), (208, 101, 33), (191, 112, 42), (171, 118, 52),
+ (155, 118, 63), (140, 127, 68), (134, 120, 67), (124, 131, 72),
+ (106, 146, 80), (86, 158, 90), (70, 175, 97), (65, 172, 95),
+ (70, 169, 91), (70, 161, 86), (59, 153, 81), (45, 141, 77),
+ (31, 125, 69), (24, 106, 62), (23, 84, 51), (19, 65, 39),
+ (16, 47, 27), (14, 31, 16), (14, 20, 10), (14, 11, 7),
+ (11, 6, 6), (10, 5, 5), (8, 6, 5), (9, 7, 6),
+ (10, 11, 5), (11, 17, 7), (12, 24, 7), (14, 32, 10),
+ (16, 40, 13), (20, 51, 19), (26, 60, 24), (29, 70, 28),
+ (38, 79, 32), (47, 82, 34), (57, 85, 39), (68, 83, 44),
+ (72, 80, 47), (78, 78, 48), (87, 76, 45), (98, 72, 44),
+ (110, 71, 45), (120, 66, 45), (125, 63, 44), (125, 64, 40),
+ (124, 60, 37), (119, 61, 38), (116, 60, 39), (114, 57, 40),
+ (111, 57, 40), (100, 63, 41), (83, 67, 44), (65, 72, 45)
+ ),
+
+// 475 040227
+((180, 72, 104), (178, 67, 104), (177, 66, 100), (177, 66, 97),
+ (187, 60, 96), (197, 55, 95), (201, 54, 94), (205, 54, 94),
+ (211, 65, 90), (204, 81, 87), (198, 97, 85), (184, 119, 86),
+ (171, 141, 88), (151, 154, 98), (131, 168, 108), (124, 165, 110),
+ (118, 163, 113), (102, 138, 125), (84, 130, 136), (67, 122, 147),
+ (61, 99, 163), (56, 76, 179), (63, 62, 185), (71, 48, 191),
+ (84, 45, 208), (79, 62, 209), (74, 80, 211), (71, 98, 205),
+ (68, 117, 199), (68, 124, 196), (68, 132, 194), (60, 131, 195),
+ (56, 133, 187), (32, 123, 169), (29, 110, 167), (26, 97, 165),
+ (40, 76, 161), (54, 55, 157), (63, 50, 153), (72, 46, 149),
+ (103, 64, 132), (107, 84, 122), (111, 105, 113), (107, 123, 117),
+ (104, 142, 121), (105, 149, 127), (106, 157, 133), (104, 175, 139),
+ (100, 196, 149), (77, 213, 177), (81, 204, 194), (85, 195, 211),
+ (102, 191, 217), (119, 188, 223), (125, 189, 224), (132, 191, 226),
+ (146, 197, 228), (149, 193, 224), (153, 189, 220), (168, 176, 212),
+ (183, 164, 205), (184, 159, 200), (186, 155, 195), (179, 142, 189),
+ (171, 129, 180), (170, 97, 155), (174, 75, 146), (179, 54, 137),
+ (177, 44, 136), (176, 34, 136), (175, 25, 140), (178, 24, 134),
+ (186, 19, 109), (189, 12, 99), (192, 6, 89), (200, 6, 84),
+ (209, 7, 80), (212, 7, 75), (215, 8, 70), (205, 9, 57),
+ (192, 6, 51), (179, 5, 55), (179, 5, 69), (179, 6, 83),
+ (175, 6, 91), (172, 6, 99), (166, 13, 109), (168, 21, 121),
+ (167, 44, 157), (159, 52, 173), (151, 60, 190), (145, 61, 193),
+ (140, 63, 196), (144, 69, 196), (146, 77, 191), (151, 82, 183),
+ (152, 96, 190), (136, 100, 199), (128, 107, 196), (121, 115, 193),
+ (120, 123, 193), (119, 131, 194), (118, 146, 203), (115, 143, 207),
+ (89, 139, 214), (88, 141, 201), (87, 143, 188), (94, 139, 176),
+ (101, 136, 164), (111, 132, 133), (113, 128, 118), (112, 122, 103),
+ (123, 120, 83), (163, 120, 41), (171, 120, 39), (179, 121, 38),
+ (180, 125, 42), (181, 124, 49), (190, 122, 58), (203, 119, 66),
+ (233, 96, 102), (230, 86, 111), (227, 76, 121), (226, 74, 121),
+ (225, 72, 122), (226, 66, 124), (231, 50, 128), (228, 35, 128),
+ (226, 21, 130), (225, 17, 126), (228, 18, 125), (231, 19, 125),
+ (233, 23, 120), (233, 23, 124), (230, 25, 127), (228, 31, 130),
+ (229, 53, 139), (227, 78, 153), (226, 104, 168), (222, 113, 169),
+ (219, 123, 171), (214, 130, 170), (209, 123, 160), (212, 122, 162),
+ (213, 121, 167), (202, 108, 152), (192, 97, 139), (182, 87, 127),
+ (165, 61, 104), (155, 42, 87), (141, 29, 74), (137, 26, 65),
+ (121, 41, 59), (116, 45, 60), (112, 50, 62), (93, 53, 68),
+ (90, 57, 70), (93, 64, 73), (106, 64, 72), (121, 64, 70),
+ (122, 57, 72), (135, 50, 71), (142, 45, 69), (150, 41, 67),
+ (166, 36, 63), (170, 27, 58), (171, 22, 55), (171, 28, 62),
+ (185, 35, 85), (187, 35, 90), (189, 36, 96), (186, 40, 100),
+ (177, 51, 104), (177, 64, 109), (184, 73, 117), (199, 78, 130),
+ (211, 80, 141), (212, 84, 147), (216, 88, 152), (219, 89, 154),
+ (228, 86, 155), (241, 78, 152), (245, 70, 143), (247, 59, 135),
+ (240, 44, 120), (238, 41, 114), (237, 39, 109), (236, 34, 93),
+ (230, 32, 81), (220, 36, 72), (206, 35, 70), (188, 39, 70),
+ (174, 35, 62), (164, 31, 54), (157, 31, 47), (157, 29, 46),
+ (161, 33, 57), (166, 34, 68), (171, 32, 77), (174, 32, 92),
+ (184, 33, 105), (201, 42, 123), (215, 56, 136), (221, 76, 140),
+ (212, 96, 145), (197, 115, 156), (185, 134, 172), (174, 154, 183),
+ (160, 174, 173), (141, 190, 153), (127, 194, 133), (116, 195, 127),
+ (118, 184, 135), (123, 166, 135), (122, 148, 138), (125, 120, 131),
+ (123, 101, 127), (126, 80, 133), (136, 59, 134), (140, 44, 141),
+ (142, 31, 146), (133, 28, 145), (125, 31, 142), (127, 39, 129),
+ (136, 60, 114), (151, 89, 102), (154, 118, 88), (153, 139, 79),
+ (137, 151, 71), (127, 165, 67), (123, 184, 67), (123, 196, 69),
+ (138, 196, 70), (135, 184, 74), (127, 162, 77), (115, 148, 80),
+ (107, 127, 81), (120, 104, 73), (141, 84, 64), (159, 74, 53),
+ (165, 79, 50), (165, 84, 54), (163, 84, 59), (164, 75, 66),
+ (169, 68, 72), (170, 69, 78), (174, 74, 84), (181, 79, 92),
+ (188, 74, 99), (197, 61, 106), (203, 51, 110), (202, 44, 109),
+ (203, 47, 105), (188, 60, 101), (184, 68, 98), (185, 75, 98)
+ ),
+
+// 476 040228
+((20, 32, 20), (21, 27, 20), (20, 25, 20), (20, 23, 20),
+ (20, 23, 20), (21, 23, 20), (20, 22, 20), (20, 22, 20),
+ (20, 22, 20), (20, 22, 20), (20, 22, 20), (20, 22, 20),
+ (20, 22, 20), (20, 22, 20), (20, 22, 20), (20, 21, 20),
+ (20, 21, 20), (22, 20, 20), (22, 20, 20), (23, 21, 20),
+ (22, 21, 20), (22, 22, 20), (22, 22, 20), (22, 23, 21),
+ (21, 25, 25), (20, 26, 28), (20, 28, 31), (21, 34, 41),
+ (22, 40, 52), (23, 43, 59), (25, 47, 66), (27, 56, 81),
+ (29, 67, 94), (33, 89, 114), (34, 88, 112), (35, 87, 111),
+ (31, 79, 100), (28, 72, 89), (28, 68, 81), (29, 64, 73),
+ (24, 39, 45), (22, 31, 37), (20, 23, 30), (20, 21, 27),
+ (20, 20, 25), (20, 20, 24), (20, 20, 24), (20, 20, 24),
+ (20, 20, 24), (20, 20, 24), (20, 20, 24), (20, 20, 25),
+ (20, 20, 24), (21, 20, 23), (21, 20, 22), (21, 21, 22),
+ (21, 24, 21), (21, 26, 20), (21, 29, 20), (20, 29, 21),
+ (20, 29, 23), (20, 29, 26), (20, 29, 30), (20, 29, 43),
+ (20, 27, 63), (24, 39, 83), (30, 41, 87), (36, 43, 92),
+ (37, 45, 90), (39, 47, 88), (52, 55, 80), (67, 75, 72),
+ (93, 111, 83), (109, 132, 97), (125, 153, 111), (128, 173, 137),
+ (131, 194, 164), (124, 192, 170), (118, 191, 177), (106, 188, 185),
+ (95, 183, 176), (80, 179, 189), (84, 174, 179), (89, 169, 169),
+ (100, 173, 165), (112, 177, 161), (140, 178, 150), (174, 173, 123),
+ (212, 156, 90), (200, 140, 68), (188, 124, 46), (176, 114, 36),
+ (164, 104, 26), (140, 89, 23), (116, 82, 26), (101, 90, 29),
+ (87, 94, 32), (100, 114, 58), (128, 134, 71), (157, 154, 84),
+ (165, 156, 85), (173, 159, 87), (169, 161, 100), (169, 169, 108),
+ (162, 157, 102), (154, 150, 89), (147, 143, 76), (144, 138, 71),
+ (142, 133, 66), (134, 123, 65), (133, 125, 67), (139, 128, 70),
+ (133, 129, 68), (131, 153, 113), (144, 162, 132), (158, 172, 152),
+ (173, 189, 172), (173, 201, 188), (177, 216, 191), (175, 210, 199),
+ (141, 161, 184), (115, 133, 155), (89, 105, 126), (70, 89, 110),
+ (52, 74, 94), (26, 44, 74), (20, 30, 55), (21, 21, 43),
+ (22, 21, 35), (23, 21, 29), (23, 21, 28), (24, 21, 28),
+ (24, 22, 28), (24, 22, 30), (24, 22, 30), (23, 21, 30),
+ (21, 21, 29), (20, 20, 30), (20, 20, 32), (21, 20, 34),
+ (23, 21, 37), (31, 27, 41), (48, 35, 42), (76, 45, 43),
+ (102, 46, 44), (116, 51, 40), (120, 51, 39), (124, 52, 39),
+ (146, 48, 32), (174, 51, 31), (181, 52, 30), (177, 59, 29),
+ (184, 79, 29), (185, 83, 38), (187, 88, 47), (181, 100, 59),
+ (173, 110, 64), (153, 116, 66), (121, 109, 74), (91, 96, 77),
+ (71, 81, 72), (48, 60, 58), (42, 54, 53), (37, 48, 48),
+ (29, 36, 36), (25, 27, 28), (23, 23, 26), (22, 21, 25),
+ (22, 21, 24), (22, 21, 24), (22, 22, 24), (22, 22, 25),
+ (21, 24, 25), (20, 25, 24), (20, 26, 24), (20, 28, 25),
+ (20, 28, 26), (20, 30, 27), (20, 29, 32), (20, 31, 37),
+ (25, 37, 43), (34, 48, 47), (46, 56, 57), (55, 64, 64),
+ (71, 83, 83), (70, 87, 87), (69, 92, 91), (64, 99, 97),
+ (63, 104, 99), (66, 101, 99), (65, 97, 89), (68, 97, 82),
+ (71, 103, 69), (83, 98, 58), (90, 87, 43), (93, 76, 35),
+ (89, 74, 28), (83, 68, 24), (75, 59, 22), (67, 45, 23),
+ (65, 37, 23), (81, 36, 22), (106, 41, 22), (133, 44, 22),
+ (152, 48, 21), (170, 52, 20), (171, 51, 20), (161, 46, 20),
+ (140, 47, 20), (124, 48, 21), (94, 40, 22), (62, 28, 24),
+ (34, 21, 26), (25, 21, 30), (22, 20, 36), (22, 23, 46),
+ (22, 38, 57), (21, 53, 64), (20, 56, 66), (22, 47, 69),
+ (22, 47, 70), (22, 56, 70), (20, 58, 60), (21, 45, 52),
+ (22, 30, 43), (22, 23, 37), (22, 22, 29), (23, 22, 25),
+ (25, 23, 23), (31, 24, 22), (40, 24, 21), (59, 27, 20),
+ (87, 41, 20), (122, 62, 20), (149, 84, 31), (173, 110, 49),
+ (197, 142, 76), (219, 174, 96), (234, 194, 112), (243, 216, 125),
+ (247, 233, 128), (244, 237, 127), (235, 224, 115), (216, 203, 109),
+ (200, 191, 93), (183, 175, 84), (170, 158, 71), (137, 131, 67),
+ (102, 115, 67), (75, 100, 72), (62, 89, 69), (49, 74, 58),
+ (36, 64, 47), (29, 55, 39), (24, 45, 31), (22, 37, 24)
+ ),
+
+// 477 10000
+((52, 44, 62), (50, 38, 55), (43, 38, 52), (36, 39, 50),
+ (30, 38, 48), (25, 37, 47), (23, 35, 44), (22, 34, 42),
+ (23, 21, 32), (28, 14, 26), (33, 7, 20), (36, 7, 21),
+ (40, 7, 23), (39, 12, 25), (38, 17, 28), (37, 19, 31),
+ (37, 21, 34), (44, 22, 37), (52, 23, 40), (61, 24, 43),
+ (69, 31, 46), (77, 39, 49), (78, 46, 52), (80, 53, 56),
+ (93, 76, 68), (106, 82, 71), (120, 88, 75), (132, 91, 74),
+ (144, 94, 74), (147, 97, 75), (150, 100, 76), (155, 105, 79),
+ (158, 110, 81), (160, 111, 87), (156, 107, 85), (152, 103, 83),
+ (140, 97, 78), (128, 91, 74), (120, 86, 72), (113, 82, 70),
+ (83, 70, 68), (74, 65, 66), (65, 60, 65), (61, 54, 61),
+ (58, 49, 57), (57, 47, 55), (57, 45, 54), (57, 43, 53),
+ (57, 42, 53), (56, 38, 54), (55, 33, 50), (55, 28, 46),
+ (54, 23, 41), (53, 19, 37), (53, 17, 35), (53, 16, 34),
+ (52, 19, 38), (51, 23, 40), (51, 27, 43), (53, 33, 48),
+ (55, 40, 53), (55, 42, 56), (56, 45, 60), (58, 53, 68),
+ (58, 61, 76), (60, 75, 93), (70, 83, 97), (81, 92, 101),
+ (87, 96, 104), (94, 101, 107), (115, 113, 113), (126, 122, 119),
+ (127, 126, 122), (122, 122, 116), (117, 119, 110), (116, 117, 105),
+ (115, 116, 100), (116, 117, 100), (117, 119, 101), (118, 120, 101),
+ (114, 119, 103), (101, 110, 103), (88, 103, 100), (75, 96, 97),
+ (71, 95, 97), (67, 95, 98), (63, 94, 100), (66, 95, 100),
+ (88, 109, 104), (100, 115, 106), (113, 122, 109), (119, 128, 112),
+ (125, 134, 116), (135, 144, 127), (149, 154, 136), (163, 166, 145),
+ (177, 177, 149), (201, 185, 146), (204, 185, 145), (207, 185, 144),
+ (205, 181, 143), (203, 177, 142), (197, 172, 145), (190, 167, 147),
+ (179, 158, 140), (172, 153, 134), (166, 148, 129), (162, 142, 125),
+ (159, 137, 122), (151, 128, 112), (141, 115, 107), (132, 103, 99),
+ (121, 92, 90), (102, 80, 77), (99, 77, 76), (96, 75, 76),
+ (91, 72, 68), (81, 65, 62), (73, 54, 54), (63, 42, 43),
+ (40, 18, 18), (31, 10, 12), (22, 3, 6), (18, 2, 4),
+ (15, 1, 2), (11, 0, 1), (10, 0, 1), (8, 0, 2),
+ (9, 2, 3), (9, 9, 9), (8, 11, 11), (8, 14, 13),
+ (7, 19, 18), (7, 23, 23), (5, 27, 27), (5, 29, 31),
+ (10, 34, 33), (13, 34, 34), (16, 35, 35), (18, 35, 35),
+ (21, 35, 35), (25, 35, 36), (29, 33, 37), (32, 35, 38),
+ (37, 37, 38), (40, 42, 43), (40, 43, 44), (41, 45, 46),
+ (44, 49, 51), (48, 50, 56), (52, 55, 65), (58, 63, 73),
+ (62, 80, 92), (61, 84, 96), (60, 88, 101), (57, 95, 108),
+ (54, 97, 113), (56, 95, 114), (63, 92, 114), (71, 87, 111),
+ (78, 81, 106), (88, 70, 97), (87, 68, 95), (86, 66, 93),
+ (86, 59, 86), (87, 53, 80), (89, 48, 72), (90, 41, 63),
+ (88, 27, 43), (85, 25, 40), (82, 24, 38), (74, 22, 35),
+ (65, 22, 34), (59, 26, 36), (53, 31, 40), (48, 37, 44),
+ (44, 40, 45), (39, 44, 45), (34, 43, 44), (29, 39, 42),
+ (26, 37, 39), (25, 34, 40), (26, 35, 43), (32, 35, 46),
+ (44, 35, 51), (46, 33, 50), (49, 31, 50), (52, 25, 45),
+ (50, 19, 39), (49, 14, 33), (48, 9, 30), (52, 6, 27),
+ (53, 8, 27), (54, 11, 29), (54, 15, 33), (51, 20, 38),
+ (47, 28, 43), (43, 36, 51), (45, 46, 62), (50, 57, 72),
+ (58, 69, 80), (66, 77, 85), (76, 81, 89), (86, 84, 90),
+ (90, 84, 91), (95, 83, 93), (99, 84, 97), (106, 86, 101),
+ (111, 89, 103), (117, 89, 101), (123, 87, 96), (126, 84, 89),
+ (125, 78, 80), (120, 71, 72), (117, 64, 67), (110, 60, 65),
+ (104, 57, 63), (102, 56, 62), (102, 57, 63), (102, 58, 64),
+ (100, 61, 65), (99, 62, 63), (98, 62, 60), (94, 58, 56),
+ (90, 53, 51), (88, 48, 47), (86, 44, 45), (84, 41, 46),
+ (81, 40, 48), (81, 43, 48), (76, 47, 51), (71, 52, 54),
+ (66, 54, 55), (61, 58, 58), (55, 59, 63), (51, 59, 68),
+ (49, 58, 70), (44, 60, 73), (41, 64, 76), (39, 66, 78),
+ (36, 72, 82), (32, 76, 86), (28, 78, 88), (27, 76, 88),
+ (24, 72, 84), (26, 66, 79), (29, 57, 72), (34, 50, 66),
+ (40, 45, 64), (46, 43, 62), (51, 44, 64), (51, 48, 66),
+ (51, 51, 69), (50, 52, 70), (51, 50, 69), (51, 48, 66)
+ ),
+
+// 478 Apophysis-040208-115d
+((0, 0, 0), (3, 0, 5), (1, 0, 12), (0, 1, 19),
+ (2, 5, 26), (4, 9, 33), (6, 12, 36), (9, 16, 40),
+ (15, 23, 54), (17, 26, 61), (20, 30, 68), (22, 33, 74),
+ (24, 37, 81), (25, 37, 88), (26, 37, 95), (26, 38, 99),
+ (27, 39, 104), (31, 41, 120), (32, 43, 127), (34, 45, 134),
+ (35, 45, 138), (36, 45, 142), (36, 43, 142), (36, 41, 142),
+ (34, 35, 142), (35, 35, 142), (37, 36, 142), (38, 37, 142),
+ (40, 39, 142), (41, 40, 142), (43, 42, 142), (42, 41, 142),
+ (38, 37, 142), (36, 33, 142), (34, 30, 140), (33, 28, 138),
+ (32, 26, 134), (31, 24, 131), (31, 23, 129), (31, 23, 127),
+ (31, 22, 120), (31, 21, 115), (32, 20, 110), (27, 17, 105),
+ (23, 15, 101), (22, 14, 98), (22, 14, 95), (23, 13, 88),
+ (23, 13, 82), (20, 10, 67), (18, 8, 58), (17, 7, 50),
+ (15, 5, 43), (14, 3, 36), (14, 2, 34), (14, 2, 32),
+ (12, 0, 22), (11, 0, 18), (10, 0, 15), (9, 0, 13),
+ (8, 0, 12), (7, 0, 11), (7, 0, 11), (7, 0, 10),
+ (7, 0, 11), (5, 2, 18), (13, 11, 23), (22, 20, 29),
+ (26, 24, 32), (30, 29, 36), (39, 38, 41), (48, 48, 48),
+ (57, 57, 57), (62, 62, 62), (68, 68, 68), (72, 71, 74),
+ (76, 74, 81), (75, 73, 83), (75, 72, 85), (77, 73, 92),
+ (80, 74, 98), (82, 77, 113), (83, 78, 120), (85, 80, 127),
+ (86, 81, 130), (88, 83, 134), (92, 90, 141), (99, 97, 142),
+ (112, 109, 142), (115, 112, 142), (118, 116, 142), (116, 115, 142),
+ (115, 114, 142), (114, 114, 142), (110, 110, 142), (104, 105, 142),
+ (98, 101, 142), (82, 87, 132), (71, 76, 127), (60, 66, 123),
+ (54, 60, 120), (49, 54, 118), (41, 48, 117), (34, 43, 116),
+ (30, 44, 115), (30, 48, 114), (31, 53, 113), (31, 53, 113),
+ (31, 54, 113), (31, 56, 115), (33, 59, 115), (33, 59, 113),
+ (32, 58, 111), (32, 56, 101), (32, 56, 99), (33, 57, 97),
+ (31, 51, 90), (28, 47, 85), (24, 42, 80), (20, 36, 73),
+ (15, 28, 64), (18, 29, 62), (21, 31, 60), (23, 32, 60),
+ (26, 34, 60), (33, 41, 64), (43, 50, 69), (52, 58, 76),
+ (60, 67, 83), (76, 81, 92), (79, 82, 93), (82, 84, 94),
+ (87, 89, 94), (90, 90, 92), (89, 89, 89), (88, 88, 88),
+ (87, 87, 87), (86, 86, 86), (85, 85, 85), (85, 85, 85),
+ (85, 85, 85), (81, 81, 81), (80, 80, 80), (80, 80, 80),
+ (81, 81, 81), (90, 90, 90), (93, 93, 93), (97, 97, 97),
+ (103, 103, 103), (104, 106, 106), (104, 109, 111), (107, 113, 116),
+ (110, 121, 128), (110, 123, 131), (110, 125, 134), (110, 127, 137),
+ (110, 129, 141), (109, 130, 142), (108, 129, 142), (107, 129, 142),
+ (104, 126, 142), (95, 118, 142), (93, 116, 142), (92, 115, 142),
+ (90, 112, 142), (87, 107, 142), (86, 106, 142), (86, 105, 142),
+ (87, 103, 142), (87, 103, 142), (87, 103, 142), (90, 106, 142),
+ (92, 107, 142), (95, 109, 141), (98, 110, 138), (99, 109, 134),
+ (100, 107, 127), (101, 106, 122), (99, 102, 116), (99, 100, 111),
+ (96, 97, 106), (93, 93, 104), (89, 89, 101), (87, 87, 99),
+ (78, 77, 92), (76, 74, 91), (74, 72, 90), (68, 66, 89),
+ (64, 61, 89), (61, 56, 89), (56, 51, 89), (53, 48, 89),
+ (51, 45, 89), (48, 44, 89), (49, 43, 89), (46, 41, 89),
+ (46, 41, 89), (44, 40, 92), (40, 36, 97), (37, 34, 101),
+ (32, 33, 105), (30, 31, 110), (25, 28, 113), (20, 23, 116),
+ (18, 23, 121), (14, 21, 126), (13, 22, 130), (15, 27, 134),
+ (16, 30, 139), (17, 31, 142), (17, 31, 142), (17, 29, 142),
+ (17, 29, 142), (17, 29, 142), (17, 25, 142), (17, 23, 142),
+ (17, 23, 142), (17, 23, 142), (17, 23, 142), (17, 25, 142),
+ (17, 27, 141), (15, 25, 136), (13, 22, 128), (10, 21, 121),
+ (8, 18, 113), (5, 14, 104), (2, 12, 95), (0, 9, 85),
+ (0, 11, 76), (0, 8, 67), (0, 9, 60), (0, 7, 51),
+ (0, 5, 43), (0, 3, 34), (0, 0, 27), (0, 0, 18),
+ (3, 0, 10), (2, 0, 3), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 479 Apophysis-040208-115e
+((0, 0, 0), (5, 1, 0), (12, 0, 3), (19, 0, 7),
+ (26, 2, 13), (33, 4, 19), (36, 6, 22), (40, 9, 26),
+ (54, 15, 36), (61, 17, 41), (68, 20, 46), (74, 22, 51),
+ (81, 24, 56), (88, 25, 58), (95, 26, 60), (99, 26, 62),
+ (104, 27, 65), (120, 31, 71), (127, 32, 75), (134, 34, 79),
+ (138, 35, 79), (142, 36, 80), (142, 36, 78), (142, 36, 76),
+ (142, 34, 72), (142, 35, 70), (142, 36, 69), (142, 37, 70),
+ (142, 39, 71), (142, 40, 72), (142, 42, 73), (142, 41, 73),
+ (142, 37, 70), (142, 33, 65), (140, 30, 62), (138, 28, 59),
+ (134, 26, 55), (131, 24, 52), (129, 23, 50), (127, 23, 49),
+ (120, 22, 45), (115, 21, 41), (110, 20, 38), (105, 17, 36),
+ (101, 15, 35), (98, 14, 34), (95, 14, 33), (88, 13, 28),
+ (82, 13, 25), (67, 10, 18), (58, 8, 14), (50, 7, 10),
+ (43, 5, 6), (36, 3, 3), (34, 3, 2), (32, 4, 2),
+ (22, 5, 0), (18, 5, 0), (15, 5, 0), (13, 4, 0),
+ (12, 4, 0), (11, 4, 0), (11, 4, 0), (10, 3, 0),
+ (11, 4, 0), (18, 2, 4), (23, 11, 12), (29, 20, 20),
+ (32, 24, 24), (36, 29, 29), (41, 38, 38), (48, 48, 48),
+ (57, 57, 57), (62, 62, 62), (68, 68, 68), (74, 71, 71),
+ (81, 74, 74), (83, 73, 73), (85, 72, 73), (92, 73, 75),
+ (98, 74, 76), (113, 77, 83), (120, 78, 87), (127, 80, 91),
+ (130, 81, 93), (134, 83, 95), (141, 90, 104), (142, 97, 110),
+ (142, 109, 117), (142, 112, 119), (142, 116, 122), (142, 115, 122),
+ (142, 114, 122), (142, 114, 123), (142, 110, 121), (142, 104, 118),
+ (142, 98, 116), (132, 82, 104), (127, 71, 95), (123, 60, 87),
+ (120, 54, 82), (118, 49, 78), (117, 41, 74), (116, 34, 71),
+ (115, 30, 72), (114, 30, 76), (113, 31, 80), (113, 31, 80),
+ (113, 31, 81), (115, 31, 84), (115, 33, 86), (113, 33, 86),
+ (111, 32, 84), (101, 32, 79), (99, 32, 79), (97, 33, 79),
+ (90, 31, 71), (85, 28, 66), (80, 24, 61), (73, 20, 53),
+ (64, 15, 44), (62, 18, 44), (60, 21, 44), (60, 23, 44),
+ (60, 26, 45), (64, 33, 51), (69, 43, 59), (76, 52, 66),
+ (83, 60, 74), (92, 76, 86), (93, 79, 87), (94, 82, 88),
+ (94, 87, 91), (92, 90, 91), (89, 89, 89), (88, 88, 88),
+ (87, 87, 87), (86, 86, 86), (85, 85, 85), (85, 85, 85),
+ (85, 85, 85), (81, 81, 81), (80, 80, 80), (80, 80, 80),
+ (81, 81, 81), (90, 90, 90), (93, 93, 93), (97, 97, 97),
+ (103, 103, 103), (106, 104, 106), (110, 104, 111), (116, 107, 116),
+ (128, 110, 127), (131, 110, 130), (134, 110, 133), (137, 110, 136),
+ (141, 110, 139), (142, 109, 141), (142, 108, 140), (142, 107, 140),
+ (142, 104, 139), (142, 95, 133), (142, 93, 132), (142, 92, 132),
+ (142, 90, 129), (142, 87, 125), (142, 86, 125), (142, 86, 123),
+ (142, 87, 122), (142, 87, 122), (142, 87, 122), (142, 90, 123),
+ (142, 92, 124), (141, 95, 124), (138, 98, 123), (134, 99, 121),
+ (127, 100, 116), (122, 101, 113), (116, 99, 108), (111, 99, 105),
+ (106, 96, 100), (104, 93, 97), (101, 89, 93), (99, 87, 90),
+ (92, 77, 80), (91, 74, 77), (90, 72, 75), (89, 66, 72),
+ (89, 61, 66), (89, 56, 62), (89, 51, 58), (89, 48, 56),
+ (89, 45, 54), (89, 44, 54), (89, 43, 52), (89, 41, 51),
+ (89, 41, 51), (92, 40, 53), (97, 36, 52), (101, 34, 53),
+ (105, 32, 57), (110, 30, 58), (113, 25, 57), (116, 20, 55),
+ (121, 18, 57), (126, 14, 59), (130, 13, 61), (134, 15, 66),
+ (139, 16, 71), (142, 17, 73), (142, 17, 73), (142, 17, 71),
+ (142, 17, 71), (142, 17, 71), (142, 17, 67), (142, 17, 65),
+ (142, 17, 65), (142, 17, 65), (142, 17, 65), (142, 17, 67),
+ (141, 17, 68), (136, 15, 65), (128, 13, 61), (121, 10, 58),
+ (113, 8, 53), (104, 5, 48), (95, 2, 44), (85, 0, 38),
+ (76, 0, 36), (67, 0, 31), (60, 0, 29), (51, 0, 24),
+ (43, 0, 19), (34, 0, 14), (27, 0, 9), (18, 0, 6),
+ (10, 0, 0), (3, 1, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 480 Apophysis-040208-115g
+((0, 0, 0), (5, 3, 0), (12, 1, 0), (19, 0, 1),
+ (26, 0, 3), (33, 0, 5), (36, 0, 7), (40, 1, 9),
+ (54, 5, 14), (61, 6, 16), (68, 7, 19), (74, 8, 21),
+ (81, 9, 24), (88, 8, 22), (95, 8, 21), (99, 8, 21),
+ (104, 8, 22), (120, 9, 20), (127, 9, 21), (134, 9, 22),
+ (138, 9, 20), (142, 10, 19), (142, 10, 16), (142, 10, 14),
+ (142, 8, 8), (142, 11, 9), (142, 14, 10), (142, 15, 11),
+ (142, 17, 13), (142, 18, 14), (142, 20, 16), (142, 19, 15),
+ (142, 15, 11), (142, 13, 7), (140, 12, 5), (138, 11, 3),
+ (134, 11, 1), (131, 11, 0), (129, 11, 0), (127, 12, 0),
+ (120, 13, 0), (115, 14, 0), (110, 16, 0), (105, 13, 0),
+ (101, 11, 0), (98, 10, 0), (95, 10, 0), (88, 12, 0),
+ (82, 13, 0), (67, 12, 0), (58, 12, 0), (50, 12, 0),
+ (43, 12, 0), (36, 12, 0), (34, 12, 0), (32, 12, 0),
+ (22, 12, 0), (18, 11, 0), (15, 10, 0), (13, 9, 0),
+ (12, 8, 0), (11, 7, 0), (11, 7, 0), (10, 7, 0),
+ (11, 7, 0), (18, 3, 0), (23, 10, 7), (29, 18, 14),
+ (32, 22, 18), (36, 26, 22), (41, 34, 30), (48, 39, 39),
+ (57, 46, 46), (62, 50, 50), (68, 55, 55), (74, 60, 57),
+ (81, 65, 59), (83, 64, 57), (85, 63, 56), (92, 66, 56),
+ (98, 67, 56), (113, 66, 56), (120, 65, 56), (127, 64, 57),
+ (130, 65, 58), (134, 67, 59), (141, 69, 64), (142, 76, 71),
+ (142, 90, 83), (142, 93, 86), (142, 96, 90), (142, 94, 89),
+ (142, 92, 88), (142, 90, 88), (142, 84, 84), (142, 78, 80),
+ (142, 72, 75), (132, 58, 64), (127, 48, 54), (123, 38, 44),
+ (120, 32, 38), (118, 27, 33), (117, 20, 27), (116, 13, 23),
+ (115, 9, 24), (114, 9, 29), (113, 10, 35), (113, 10, 36),
+ (113, 10, 38), (115, 10, 40), (115, 12, 42), (113, 12, 42),
+ (111, 12, 43), (101, 13, 43), (99, 14, 43), (97, 15, 44),
+ (90, 14, 39), (85, 12, 35), (80, 9, 31), (73, 6, 25),
+ (64, 3, 18), (62, 6, 19), (60, 10, 21), (60, 12, 22),
+ (60, 15, 24), (64, 21, 31), (69, 30, 41), (76, 38, 46),
+ (83, 45, 55), (92, 59, 67), (93, 62, 68), (94, 65, 70),
+ (94, 70, 77), (92, 73, 73), (89, 73, 73), (88, 72, 72),
+ (87, 71, 71), (86, 70, 70), (85, 69, 69), (85, 69, 69),
+ (85, 69, 69), (81, 66, 66), (80, 65, 65), (80, 65, 65),
+ (81, 66, 66), (90, 74, 74), (93, 76, 76), (97, 79, 79),
+ (103, 84, 84), (106, 85, 95), (111, 84, 103), (116, 86, 103),
+ (128, 87, 112), (131, 86, 114), (134, 86, 116), (137, 85, 118),
+ (141, 84, 119), (142, 83, 119), (142, 82, 117), (142, 81, 118),
+ (142, 78, 115), (142, 69, 103), (142, 67, 101), (142, 66, 100),
+ (142, 64, 96), (142, 61, 89), (142, 60, 89), (142, 60, 86),
+ (142, 61, 83), (142, 61, 83), (142, 61, 83), (142, 64, 87),
+ (142, 66, 87), (141, 69, 90), (138, 73, 91), (134, 75, 92),
+ (127, 77, 90), (122, 79, 89), (116, 78, 85), (111, 79, 82),
+ (106, 77, 80), (104, 74, 74), (101, 71, 71), (99, 69, 69),
+ (92, 64, 60), (91, 62, 58), (90, 61, 56), (89, 53, 50),
+ (89, 51, 45), (89, 47, 40), (89, 43, 35), (89, 40, 32),
+ (89, 37, 29), (89, 34, 28), (89, 36, 27), (89, 33, 25),
+ (89, 33, 25), (92, 30, 23), (97, 25, 18), (101, 20, 15),
+ (105, 13, 13), (110, 10, 10), (113, 4, 5), (116, 0, 1),
+ (121, 0, 3), (126, 0, 5), (130, 0, 7), (134, 0, 11),
+ (139, 0, 13), (142, 0, 13), (142, 0, 13), (142, 0, 11),
+ (142, 0, 11), (142, 0, 11), (142, 0, 6), (142, 0, 4),
+ (142, 0, 4), (142, 0, 4), (142, 0, 4), (142, 0, 6),
+ (141, 0, 9), (136, 0, 9), (128, 0, 7), (121, 0, 9),
+ (113, 0, 8), (104, 0, 8), (95, 0, 9), (85, 0, 8),
+ (76, 0, 10), (67, 0, 7), (60, 0, 8), (51, 0, 6),
+ (43, 0, 4), (34, 0, 2), (27, 0, 0), (18, 0, 0),
+ (10, 3, 0), (3, 2, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 481 Apophysis-040208-115h
+((0, 0, 0), (5, 5, 0), (12, 5, 0), (19, 6, 0),
+ (26, 7, 0), (33, 8, 0), (36, 8, 0), (40, 8, 1),
+ (54, 15, 5), (61, 17, 6), (68, 19, 7), (74, 21, 8),
+ (81, 23, 9), (88, 26, 8), (95, 29, 8), (99, 30, 8),
+ (104, 32, 8), (120, 42, 9), (127, 44, 9), (134, 46, 9),
+ (138, 50, 9), (142, 54, 10), (142, 56, 10), (142, 58, 10),
+ (142, 61, 8), (142, 64, 9), (142, 67, 10), (142, 68, 11),
+ (142, 69, 13), (142, 69, 14), (142, 70, 16), (142, 70, 15),
+ (142, 68, 11), (142, 68, 7), (140, 67, 5), (138, 66, 3),
+ (134, 64, 1), (131, 63, 0), (129, 63, 0), (127, 63, 0),
+ (120, 60, 0), (115, 60, 0), (110, 60, 0), (105, 56, 0),
+ (101, 52, 0), (98, 49, 0), (95, 47, 0), (88, 47, 0),
+ (82, 46, 0), (67, 39, 0), (58, 35, 0), (50, 31, 0),
+ (43, 28, 0), (36, 26, 0), (34, 25, 0), (32, 24, 0),
+ (22, 20, 0), (18, 17, 0), (14, 15, 0), (12, 13, 0),
+ (11, 12, 0), (10, 11, 0), (10, 11, 0), (9, 10, 0),
+ (10, 11, 0), (18, 10, 0), (23, 17, 7), (29, 24, 14),
+ (32, 27, 18), (36, 31, 22), (41, 38, 30), (48, 42, 39),
+ (57, 50, 46), (62, 55, 50), (68, 60, 55), (74, 66, 57),
+ (81, 73, 59), (83, 73, 57), (85, 74, 56), (92, 80, 56),
+ (98, 84, 56), (113, 89, 56), (120, 90, 56), (127, 92, 57),
+ (130, 94, 58), (134, 96, 59), (141, 100, 64), (142, 104, 71),
+ (142, 113, 83), (142, 115, 86), (142, 117, 90), (142, 115, 89),
+ (142, 113, 88), (142, 111, 88), (142, 107, 84), (142, 101, 78),
+ (142, 96, 72), (132, 81, 58), (127, 73, 48), (123, 66, 38),
+ (120, 61, 32), (118, 57, 27), (117, 52, 20), (116, 44, 13),
+ (115, 37, 9), (114, 31, 9), (113, 25, 10), (113, 24, 10),
+ (113, 23, 10), (115, 22, 10), (115, 24, 12), (113, 22, 12),
+ (111, 20, 12), (101, 18, 13), (99, 18, 14), (97, 19, 15),
+ (90, 19, 14), (85, 18, 12), (80, 14, 9), (73, 13, 6),
+ (64, 12, 3), (62, 15, 6), (60, 19, 10), (60, 21, 12),
+ (60, 24, 15), (64, 28, 21), (69, 34, 30), (76, 45, 38),
+ (83, 50, 45), (92, 64, 59), (93, 68, 62), (94, 72, 65),
+ (94, 72, 70), (92, 80, 73), (89, 79, 73), (88, 78, 72),
+ (87, 77, 71), (86, 76, 70), (85, 75, 69), (85, 75, 69),
+ (85, 75, 69), (81, 72, 66), (80, 71, 65), (80, 71, 65),
+ (81, 72, 66), (90, 80, 74), (93, 83, 76), (97, 86, 79),
+ (103, 91, 84), (106, 85, 87), (111, 84, 92), (116, 86, 91),
+ (128, 87, 96), (131, 86, 96), (134, 86, 97), (137, 85, 97),
+ (141, 84, 96), (142, 83, 96), (142, 82, 93), (142, 81, 93),
+ (142, 78, 90), (142, 69, 74), (142, 67, 72), (142, 66, 70),
+ (142, 64, 65), (142, 65, 61), (142, 64, 60), (142, 67, 60),
+ (142, 72, 61), (142, 72, 61), (142, 72, 61), (142, 72, 64),
+ (142, 75, 66), (141, 76, 69), (138, 80, 73), (134, 82, 75),
+ (127, 83, 77), (122, 86, 79), (116, 86, 78), (111, 88, 79),
+ (106, 86, 77), (104, 86, 74), (101, 83, 71), (99, 81, 69),
+ (92, 77, 60), (91, 75, 58), (90, 74, 56), (89, 69, 50),
+ (89, 68, 45), (89, 67, 40), (89, 64, 35), (89, 62, 32),
+ (89, 61, 29), (89, 58, 28), (89, 61, 27), (89, 59, 25),
+ (89, 59, 25), (92, 57, 23), (97, 56, 18), (101, 53, 15),
+ (105, 49, 13), (110, 50, 10), (113, 45, 4), (116, 44, 0),
+ (121, 46, 0), (126, 46, 0), (130, 45, 0), (134, 42, 0),
+ (139, 41, 0), (142, 45, 0), (142, 45, 0), (142, 45, 0),
+ (142, 45, 0), (142, 45, 0), (142, 49, 0), (142, 52, 0),
+ (142, 52, 0), (142, 52, 0), (142, 52, 0), (142, 49, 0),
+ (141, 47, 0), (136, 45, 0), (128, 44, 0), (121, 40, 0),
+ (113, 37, 0), (104, 33, 0), (95, 28, 0), (85, 25, 0),
+ (76, 20, 0), (67, 20, 0), (60, 16, 0), (51, 14, 0),
+ (43, 12, 0), (34, 11, 0), (27, 10, 0), (18, 7, 0),
+ (10, 7, 0), (2, 3, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 482 Apophysis-040208-115i
+((0, 0, 0), (3, 5, 0), (11, 9, 0), (19, 13, 0),
+ (26, 16, 0), (33, 19, 0), (36, 20, 0), (40, 22, 1),
+ (54, 32, 5), (61, 36, 6), (68, 40, 7), (74, 43, 8),
+ (81, 47, 9), (88, 53, 8), (95, 60, 8), (99, 62, 8),
+ (104, 65, 8), (120, 81, 9), (127, 85, 9), (134, 90, 9),
+ (138, 95, 9), (142, 100, 10), (142, 102, 10), (142, 105, 10),
+ (142, 108, 8), (142, 110, 9), (142, 113, 10), (142, 113, 11),
+ (142, 114, 13), (142, 114, 14), (142, 115, 16), (142, 114, 15),
+ (142, 114, 11), (142, 115, 7), (140, 114, 5), (138, 113, 3),
+ (134, 111, 1), (131, 109, 0), (129, 108, 0), (127, 108, 0),
+ (120, 102, 0), (115, 100, 0), (110, 99, 0), (105, 93, 0),
+ (101, 87, 0), (98, 84, 0), (95, 81, 0), (88, 78, 0),
+ (82, 75, 0), (67, 62, 0), (58, 55, 0), (50, 49, 0),
+ (41, 42, 0), (33, 36, 0), (30, 34, 0), (27, 32, 0),
+ (15, 22, 0), (11, 18, 0), (8, 15, 0), (7, 13, 0),
+ (7, 12, 0), (6, 11, 0), (6, 11, 0), (5, 10, 0),
+ (6, 11, 0), (18, 16, 0), (23, 22, 7), (28, 29, 14),
+ (31, 32, 18), (35, 36, 22), (39, 41, 30), (48, 45, 39),
+ (57, 54, 46), (62, 59, 50), (68, 65, 55), (74, 73, 57),
+ (80, 81, 59), (82, 82, 57), (85, 84, 56), (91, 92, 56),
+ (97, 98, 56), (113, 109, 56), (120, 112, 56), (127, 116, 57),
+ (130, 119, 58), (134, 123, 59), (141, 127, 64), (142, 129, 71),
+ (142, 134, 83), (142, 134, 86), (142, 135, 90), (142, 133, 89),
+ (142, 132, 88), (142, 130, 88), (142, 127, 84), (142, 124, 78),
+ (142, 121, 72), (132, 107, 58), (127, 101, 48), (123, 96, 38),
+ (120, 92, 32), (118, 89, 27), (117, 86, 20), (116, 80, 13),
+ (115, 74, 9), (114, 67, 9), (113, 61, 10), (113, 60, 10),
+ (113, 60, 10), (115, 59, 10), (115, 60, 12), (113, 57, 12),
+ (111, 55, 12), (101, 49, 13), (99, 48, 14), (97, 47, 15),
+ (90, 45, 14), (85, 43, 12), (80, 39, 9), (73, 37, 6),
+ (64, 33, 3), (62, 34, 6), (60, 36, 10), (60, 37, 12),
+ (60, 39, 15), (64, 43, 21), (69, 48, 30), (76, 58, 38),
+ (83, 63, 45), (92, 75, 59), (93, 78, 62), (94, 82, 65),
+ (94, 81, 70), (92, 87, 73), (89, 85, 73), (88, 84, 72),
+ (87, 83, 71), (86, 82, 70), (85, 81, 69), (85, 81, 69),
+ (85, 81, 69), (81, 77, 66), (80, 76, 65), (80, 76, 65),
+ (81, 77, 66), (90, 86, 74), (93, 89, 76), (97, 92, 79),
+ (103, 98, 84), (106, 90, 85), (111, 85, 84), (116, 91, 86),
+ (128, 92, 87), (131, 92, 86), (134, 92, 86), (137, 91, 85),
+ (141, 91, 84), (142, 91, 83), (142, 92, 82), (142, 90, 81),
+ (142, 89, 78), (142, 90, 69), (142, 89, 67), (142, 89, 66),
+ (142, 90, 64), (142, 93, 61), (142, 93, 60), (142, 95, 60),
+ (142, 100, 61), (142, 100, 61), (142, 100, 61), (142, 99, 64),
+ (142, 101, 66), (141, 103, 69), (138, 103, 73), (134, 102, 75),
+ (127, 101, 77), (122, 101, 79), (116, 99, 78), (111, 100, 79),
+ (106, 96, 77), (104, 96, 74), (101, 93, 71), (99, 91, 69),
+ (92, 88, 60), (91, 87, 58), (90, 86, 56), (89, 82, 50),
+ (89, 84, 45), (89, 84, 40), (89, 83, 35), (89, 82, 32),
+ (89, 82, 29), (89, 80, 28), (89, 83, 27), (89, 81, 25),
+ (89, 81, 25), (92, 81, 23), (97, 84, 18), (101, 84, 15),
+ (105, 82, 13), (110, 85, 10), (113, 84, 4), (116, 85, 0),
+ (121, 89, 0), (126, 90, 0), (130, 91, 0), (134, 89, 0),
+ (139, 90, 0), (142, 95, 0), (142, 95, 0), (142, 95, 0),
+ (142, 95, 0), (142, 95, 0), (142, 99, 0), (142, 102, 0),
+ (142, 102, 0), (142, 102, 0), (142, 102, 0), (142, 99, 0),
+ (141, 96, 0), (136, 93, 0), (128, 89, 0), (121, 83, 0),
+ (113, 77, 0), (104, 69, 0), (95, 61, 0), (85, 55, 0),
+ (76, 47, 0), (67, 43, 0), (60, 37, 0), (51, 32, 0),
+ (43, 28, 0), (34, 23, 0), (27, 20, 0), (18, 13, 0),
+ (9, 10, 0), (1, 3, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 483 Apophysis-040208-115j
+((0, 0, 0), (0, 5, 1), (3, 12, 0), (7, 19, 0),
+ (11, 26, 0), (16, 33, 0), (18, 36, 0), (21, 40, 1),
+ (30, 54, 5), (34, 61, 6), (39, 68, 7), (43, 74, 8),
+ (47, 81, 9), (48, 88, 8), (50, 95, 8), (52, 99, 8),
+ (54, 104, 8), (57, 120, 9), (60, 127, 9), (63, 134, 9),
+ (63, 138, 9), (63, 142, 10), (60, 142, 10), (58, 142, 10),
+ (52, 142, 8), (50, 142, 9), (49, 142, 10), (50, 142, 11),
+ (51, 142, 13), (52, 142, 14), (54, 142, 16), (53, 142, 15),
+ (50, 142, 11), (45, 142, 7), (42, 140, 5), (39, 138, 3),
+ (35, 134, 1), (32, 131, 0), (30, 129, 0), (29, 127, 0),
+ (28, 120, 0), (24, 115, 0), (20, 110, 0), (20, 105, 0),
+ (21, 101, 0), (21, 98, 0), (22, 95, 0), (17, 88, 0),
+ (13, 82, 0), (10, 67, 0), (7, 58, 0), (5, 50, 0),
+ (2, 43, 0), (0, 36, 0), (0, 34, 0), (0, 32, 1),
+ (0, 22, 4), (0, 18, 4), (0, 15, 5), (0, 13, 4),
+ (0, 12, 4), (0, 11, 3), (0, 11, 3), (0, 10, 3),
+ (0, 11, 3), (3, 18, 0), (9, 23, 7), (15, 29, 14),
+ (18, 32, 18), (22, 36, 22), (30, 41, 30), (42, 48, 39),
+ (49, 57, 46), (54, 62, 50), (59, 68, 55), (59, 74, 57),
+ (60, 81, 59), (59, 83, 57), (59, 85, 56), (58, 92, 56),
+ (59, 98, 56), (64, 113, 56), (68, 120, 56), (73, 127, 57),
+ (74, 130, 58), (76, 134, 59), (84, 141, 64), (90, 142, 71),
+ (96, 142, 83), (98, 142, 86), (101, 142, 90), (101, 142, 89),
+ (102, 142, 88), (104, 142, 88), (103, 142, 84), (101, 142, 78),
+ (99, 142, 72), (89, 132, 58), (80, 127, 48), (72, 123, 38),
+ (67, 120, 32), (63, 118, 27), (59, 117, 20), (57, 116, 13),
+ (58, 115, 9), (64, 114, 9), (70, 113, 10), (71, 113, 10),
+ (72, 113, 10), (75, 115, 10), (75, 115, 12), (76, 113, 12),
+ (76, 111, 12), (71, 101, 13), (71, 99, 14), (71, 97, 15),
+ (64, 90, 14), (59, 85, 12), (55, 80, 9), (47, 73, 6),
+ (38, 64, 3), (37, 62, 6), (37, 60, 10), (38, 60, 12),
+ (39, 60, 15), (45, 64, 21), (54, 69, 30), (59, 76, 38),
+ (68, 83, 45), (78, 92, 59), (78, 93, 62), (79, 94, 65),
+ (85, 94, 70), (79, 92, 73), (78, 89, 73), (77, 88, 72),
+ (76, 87, 71), (75, 86, 70), (74, 85, 69), (74, 85, 69),
+ (74, 85, 69), (71, 81, 66), (70, 80, 65), (70, 80, 65),
+ (71, 81, 66), (79, 90, 74), (82, 93, 76), (85, 97, 79),
+ (90, 103, 84), (102, 106, 85), (111, 110, 84), (113, 116, 86),
+ (126, 128, 87), (129, 131, 86), (132, 134, 86), (135, 137, 85),
+ (138, 141, 84), (139, 142, 83), (137, 142, 82), (138, 142, 81),
+ (137, 142, 78), (127, 142, 69), (126, 142, 67), (126, 142, 66),
+ (122, 142, 64), (116, 142, 61), (116, 142, 60), (113, 142, 60),
+ (110, 142, 61), (110, 142, 61), (110, 142, 61), (113, 142, 64),
+ (113, 142, 66), (115, 141, 69), (113, 138, 73), (111, 134, 75),
+ (107, 127, 77), (103, 122, 79), (98, 116, 78), (93, 111, 79),
+ (89, 106, 77), (84, 104, 74), (81, 101, 71), (79, 99, 69),
+ (66, 92, 60), (64, 91, 58), (62, 90, 56), (59, 89, 50),
+ (54, 89, 45), (49, 89, 40), (45, 89, 35), (43, 89, 32),
+ (41, 89, 29), (42, 89, 28), (38, 89, 27), (37, 89, 25),
+ (37, 89, 25), (39, 92, 23), (37, 97, 18), (39, 101, 15),
+ (43, 105, 13), (43, 110, 10), (42, 113, 4), (40, 116, 0),
+ (42, 121, 0), (46, 126, 0), (50, 130, 0), (56, 134, 0),
+ (60, 139, 0), (59, 142, 0), (59, 142, 0), (59, 142, 0),
+ (59, 142, 0), (59, 142, 0), (54, 142, 0), (52, 142, 0),
+ (52, 142, 0), (52, 142, 0), (52, 142, 0), (54, 142, 0),
+ (56, 141, 0), (54, 136, 0), (49, 128, 0), (48, 121, 0),
+ (45, 113, 0), (43, 104, 0), (41, 95, 0), (36, 85, 0),
+ (35, 76, 0), (29, 67, 0), (28, 60, 0), (23, 51, 0),
+ (18, 43, 0), (13, 34, 0), (9, 27, 0), (6, 18, 0),
+ (0, 10, 0), (0, 3, 1), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)
+ ),
+
+// 484 Apophysis-040208-115k
+((81, 81, 81), (81, 81, 81), (78, 78, 78), (75, 75, 75),
+ (72, 72, 72), (70, 70, 70), (67, 67, 67), (65, 65, 65),
+ (51, 51, 51), (44, 44, 44), (38, 38, 38), (33, 33, 33),
+ (28, 28, 28), (23, 23, 23), (19, 19, 19), (19, 19, 19),
+ (19, 19, 19), (12, 12, 12), (6, 6, 6), (1, 1, 1),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (1, 1, 1), (6, 6, 6), (12, 12, 12), (18, 18, 18),
+ (24, 24, 24), (24, 24, 24), (24, 24, 24), (22, 22, 22),
+ (19, 19, 19), (14, 14, 14), (8, 8, 8), (3, 3, 3),
+ (1, 1, 1), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (2, 2, 2), (5, 5, 5), (8, 8, 8),
+ (12, 12, 12), (13, 13, 13), (14, 14, 14), (12, 12, 12),
+ (12, 12, 12), (12, 12, 12), (10, 10, 10), (8, 8, 8),
+ (11, 11, 11), (14, 14, 14), (16, 16, 16), (19, 19, 19),
+ (33, 33, 33), (35, 35, 35), (38, 38, 38), (39, 39, 39),
+ (40, 40, 40), (40, 40, 40), (40, 40, 40), (38, 38, 38),
+ (38, 38, 38), (38, 38, 38), (39, 39, 39), (40, 40, 40),
+ (40, 40, 40), (40, 40, 40), (40, 40, 40), (40, 40, 40),
+ (38, 38, 38), (33, 33, 33), (28, 28, 28), (22, 22, 22),
+ (17, 17, 17), (14, 14, 14), (12, 12, 12), (12, 12, 12),
+ (8, 8, 8), (8, 8, 8), (13, 13, 13), (19, 19, 19),
+ (20, 20, 20), (22, 22, 22), (28, 28, 28), (30, 30, 30),
+ (35, 35, 35), (35, 35, 35), (35, 35, 35), (35, 35, 35),
+ (35, 35, 35), (35, 35, 35), (35, 35, 35), (38, 38, 38),
+ (40, 40, 40), (56, 56, 56), (64, 64, 64), (72, 72, 72),
+ (76, 76, 76), (81, 81, 81), (84, 84, 84), (86, 86, 86),
+ (89, 89, 89), (89, 89, 89), (89, 89, 89), (89, 89, 89),
+ (89, 89, 89), (89, 89, 89), (91, 91, 91), (97, 97, 97),
+ (102, 102, 102), (118, 118, 118), (122, 122, 122), (126, 126, 126),
+ (132, 132, 132), (137, 137, 137), (142, 142, 142), (146, 146, 146),
+ (156, 156, 156), (160, 160, 160), (164, 164, 164), (166, 166, 166),
+ (169, 169, 169), (172, 172, 172), (180, 180, 180), (185, 185, 185),
+ (190, 190, 190), (199, 199, 199), (200, 200, 200), (201, 201, 201),
+ (206, 206, 206), (209, 209, 209), (206, 206, 206), (201, 201, 201),
+ (190, 190, 190), (185, 185, 185), (180, 180, 180), (176, 176, 176),
+ (172, 172, 172), (169, 169, 169), (169, 169, 169), (169, 169, 169),
+ (169, 169, 169), (164, 164, 164), (161, 161, 161), (158, 158, 158),
+ (156, 156, 156), (148, 148, 148), (146, 146, 146), (139, 139, 139),
+ (132, 132, 132), (129, 129, 129), (126, 126, 126), (121, 121, 121),
+ (118, 118, 118), (113, 113, 113), (111, 111, 111), (113, 113, 113),
+ (118, 118, 118), (116, 116, 116), (113, 113, 113), (111, 111, 111),
+ (111, 111, 111), (105, 105, 105), (97, 97, 97), (91, 91, 91),
+ (84, 84, 84), (84, 84, 84), (84, 84, 84), (84, 84, 84),
+ (84, 84, 84), (86, 86, 86), (89, 89, 89), (89, 89, 89),
+ (89, 89, 89), (86, 86, 86), (84, 84, 84), (86, 86, 86),
+ (86, 86, 86), (84, 84, 84), (84, 84, 84), (81, 81, 81),
+ (75, 75, 75), (75, 75, 75), (75, 75, 75), (79, 79, 79),
+ (79, 79, 79), (79, 79, 79), (81, 81, 81), (81, 81, 81),
+ (79, 79, 79), (79, 79, 79), (75, 75, 75), (72, 72, 72),
+ (72, 72, 72), (70, 70, 70), (65, 65, 65), (65, 65, 65),
+ (63, 63, 63), (65, 65, 65), (67, 67, 67), (72, 72, 72),
+ (72, 72, 72), (79, 79, 79), (81, 81, 81), (81, 81, 81),
+ (81, 81, 81), (81, 81, 81), (81, 81, 81), (75, 75, 75),
+ (72, 72, 72), (72, 72, 72), (75, 75, 75), (79, 79, 79),
+ (81, 81, 81), (84, 84, 84), (86, 86, 86), (89, 89, 89),
+ (89, 89, 89), (89, 89, 89), (89, 89, 89), (89, 89, 89),
+ (91, 91, 91), (91, 91, 91), (89, 89, 89), (86, 86, 86),
+ (86, 86, 86), (84, 84, 84), (81, 81, 81), (72, 72, 72),
+ (67, 67, 67), (65, 65, 65), (59, 59, 59), (56, 56, 56),
+ (59, 59, 59), (65, 65, 65), (70, 70, 70), (72, 72, 72),
+ (81, 81, 81), (89, 89, 89), (97, 97, 97), (102, 102, 102),
+ (102, 102, 102), (105, 105, 105), (105, 105, 105), (102, 102, 102),
+ (97, 97, 97), (95, 95, 95), (95, 95, 95), (95, 95, 95),
+ (91, 91, 91), (89, 89, 89), (81, 81, 81), (81, 81, 81)
+ ),
+
+// 485 A_Bit_Confused
+((219, 140, 152), (243, 165, 171), (237, 167, 192), (232, 169, 213),
+ (213, 157, 212), (194, 146, 212), (184, 134, 199), (175, 122, 187),
+ (131, 84, 156), (111, 64, 145), (91, 44, 135), (78, 37, 115),
+ (66, 30, 96), (54, 35, 90), (42, 40, 84), (39, 42, 86),
+ (36, 44, 89), (39, 60, 127), (53, 70, 136), (68, 80, 145),
+ (88, 88, 136), (108, 97, 127), (117, 99, 126), (127, 101, 126),
+ (171, 102, 108), (184, 89, 87), (197, 77, 67), (192, 76, 60),
+ (188, 76, 54), (180, 74, 52), (172, 72, 51), (156, 53, 55),
+ (136, 41, 55), (106, 31, 53), (100, 31, 50), (94, 31, 47),
+ (105, 24, 40), (116, 17, 34), (126, 15, 28), (136, 13, 23),
+ (172, 26, 16), (180, 31, 22), (188, 36, 28), (187, 43, 26),
+ (186, 51, 25), (186, 57, 28), (187, 63, 32), (187, 71, 48),
+ (189, 75, 73), (178, 92, 113), (181, 108, 131), (184, 124, 150),
+ (199, 125, 164), (215, 126, 179), (222, 124, 180), (230, 122, 181),
+ (243, 116, 191), (235, 110, 180), (228, 105, 170), (204, 103, 155),
+ (181, 102, 140), (176, 99, 140), (171, 96, 141), (167, 93, 138),
+ (174, 85, 140), (167, 84, 114), (172, 81, 104), (178, 79, 94),
+ (185, 77, 92), (193, 75, 90), (205, 57, 81), (205, 47, 70),
+ (201, 33, 55), (190, 35, 59), (179, 38, 64), (157, 39, 66),
+ (136, 40, 69), (128, 42, 69), (121, 44, 70), (118, 46, 73),
+ (116, 46, 73), (106, 39, 59), (98, 38, 58), (90, 37, 58),
+ (88, 36, 59), (86, 35, 61), (79, 34, 62), (74, 31, 59),
+ (56, 21, 69), (47, 19, 76), (39, 17, 84), (35, 16, 85),
+ (31, 16, 86), (25, 16, 84), (23, 15, 79), (23, 17, 72),
+ (27, 17, 68), (48, 19, 69), (68, 26, 73), (89, 34, 78),
+ (98, 42, 84), (108, 51, 91), (113, 65, 108), (112, 75, 130),
+ (110, 81, 154), (119, 85, 156), (129, 90, 159), (135, 93, 162),
+ (142, 97, 165), (150, 103, 160), (154, 101, 157), (158, 93, 140),
+ (170, 87, 136), (221, 85, 150), (232, 87, 157), (243, 90, 165),
+ (253, 94, 172), (254, 108, 182), (254, 117, 187), (254, 130, 182),
+ (224, 144, 161), (201, 145, 143), (179, 146, 125), (170, 144, 115),
+ (161, 142, 105), (147, 145, 93), (130, 153, 84), (119, 150, 83),
+ (117, 147, 76), (119, 110, 71), (117, 107, 72), (115, 104, 73),
+ (112, 96, 75), (119, 101, 66), (130, 96, 57), (138, 87, 46),
+ (125, 54, 37), (107, 47, 45), (90, 41, 53), (86, 44, 60),
+ (83, 47, 68), (77, 59, 78), (74, 62, 84), (70, 58, 93),
+ (54, 54, 95), (30, 65, 88), (25, 70, 82), (21, 76, 76),
+ (19, 82, 67), (14, 81, 56), (14, 76, 45), (14, 72, 33),
+ (27, 63, 20), (32, 60, 19), (37, 58, 18), (48, 57, 22),
+ (61, 52, 21), (81, 44, 28), (106, 42, 33), (134, 49, 40),
+ (157, 67, 54), (194, 109, 75), (202, 115, 81), (210, 121, 88),
+ (222, 137, 110), (221, 152, 137), (209, 173, 156), (194, 198, 174),
+ (180, 218, 197), (180, 214, 204), (180, 211, 212), (177, 210, 228),
+ (169, 217, 236), (174, 231, 232), (175, 231, 210), (176, 216, 194),
+ (181, 206, 190), (173, 196, 190), (176, 191, 188), (171, 172, 163),
+ (156, 141, 139), (141, 112, 124), (124, 98, 125), (121, 94, 135),
+ (122, 84, 135), (123, 81, 134), (124, 79, 133), (119, 83, 139),
+ (128, 88, 144), (130, 95, 147), (120, 98, 148), (112, 105, 143),
+ (93, 106, 141), (85, 101, 135), (87, 95, 124), (80, 81, 109),
+ (76, 72, 89), (70, 65, 76), (62, 61, 69), (65, 61, 66),
+ (71, 65, 63), (85, 70, 62), (110, 79, 66), (134, 95, 88),
+ (153, 112, 117), (157, 127, 138), (150, 131, 161), (140, 121, 169),
+ (131, 111, 185), (133, 112, 200), (129, 104, 199), (121, 99, 196),
+ (103, 81, 174), (76, 52, 154), (57, 43, 131), (50, 29, 104),
+ (51, 26, 80), (63, 28, 56), (66, 21, 38), (64, 22, 25),
+ (62, 18, 20), (57, 15, 20), (61, 15, 21), (60, 14, 22),
+ (55, 14, 25), (47, 16, 30), (38, 19, 41), (33, 30, 49),
+ (32, 37, 53), (29, 41, 53), (23, 41, 46), (17, 36, 45),
+ (13, 37, 40), (17, 37, 37), (21, 37, 35), (21, 33, 27),
+ (20, 27, 20), (25, 24, 11), (34, 27, 8), (49, 35, 5),
+ (65, 39, 8), (72, 43, 12), (89, 48, 13), (106, 54, 14),
+ (122, 62, 14), (139, 59, 12), (144, 52, 15), (149, 42, 18),
+ (156, 34, 18), (163, 34, 27), (170, 35, 32), (177, 39, 45),
+ (182, 50, 60), (187, 68, 76), (196, 93, 106), (207, 120, 131)
+ ),
+
+// 486 Afternoon_Shadows
+((86, 73, 63), (76, 68, 62), (72, 65, 60), (68, 63, 58),
+ (62, 58, 54), (56, 53, 50), (49, 47, 46), (43, 41, 43),
+ (29, 32, 34), (25, 29, 29), (21, 26, 25), (17, 20, 19),
+ (13, 14, 13), (10, 10, 9), (8, 7, 6), (8, 6, 6),
+ (8, 6, 6), (11, 10, 11), (18, 18, 16), (26, 26, 21),
+ (37, 36, 29), (49, 47, 37), (55, 53, 41), (62, 60, 45),
+ (88, 82, 63), (97, 88, 70), (106, 94, 77), (114, 99, 77),
+ (122, 104, 78), (124, 104, 79), (126, 105, 80), (130, 106, 83),
+ (132, 109, 85), (133, 113, 89), (130, 110, 91), (127, 108, 93),
+ (119, 102, 88), (111, 96, 84), (106, 91, 81), (101, 86, 78),
+ (77, 64, 65), (65, 55, 59), (53, 47, 53), (46, 45, 53),
+ (40, 43, 53), (39, 46, 56), (39, 49, 59), (45, 58, 65),
+ (54, 69, 75), (80, 93, 98), (93, 105, 108), (107, 118, 119),
+ (117, 125, 125), (127, 133, 132), (132, 137, 136), (137, 142, 140),
+ (157, 160, 151), (168, 168, 156), (180, 176, 162), (191, 185, 169),
+ (203, 195, 176), (207, 198, 177), (212, 201, 179), (217, 204, 182),
+ (219, 204, 184), (216, 206, 182), (212, 202, 178), (208, 199, 174),
+ (204, 194, 171), (200, 190, 168), (192, 184, 162), (181, 176, 154),
+ (159, 156, 139), (151, 148, 132), (143, 141, 126), (140, 138, 122),
+ (138, 135, 118), (137, 132, 115), (136, 130, 113), (135, 126, 110),
+ (133, 124, 105), (120, 111, 95), (113, 102, 88), (106, 93, 81),
+ (104, 89, 77), (103, 85, 74), (105, 83, 68), (110, 83, 67),
+ (126, 94, 75), (135, 102, 82), (144, 111, 89), (145, 113, 92),
+ (147, 116, 95), (145, 116, 98), (139, 112, 97), (132, 106, 90),
+ (124, 98, 84), (109, 81, 71), (108, 81, 70), (108, 81, 70),
+ (108, 83, 72), (109, 85, 74), (112, 90, 81), (117, 96, 89),
+ (126, 107, 100), (128, 108, 101), (131, 110, 103), (132, 111, 102),
+ (133, 113, 102), (139, 119, 106), (145, 127, 113), (153, 137, 124),
+ (167, 150, 135), (196, 178, 158), (202, 184, 164), (208, 191, 170),
+ (218, 200, 179), (224, 207, 184), (228, 212, 187), (228, 211, 185),
+ (222, 204, 180), (216, 198, 175), (211, 192, 170), (208, 188, 168),
+ (206, 185, 167), (200, 178, 163), (192, 168, 157), (182, 160, 148),
+ (171, 147, 134), (149, 121, 108), (143, 115, 103), (137, 109, 98),
+ (124, 97, 86), (112, 84, 76), (101, 75, 69), (91, 64, 63),
+ (72, 53, 53), (65, 47, 48), (59, 41, 44), (57, 39, 43),
+ (56, 38, 42), (55, 37, 42), (55, 36, 41), (55, 36, 40),
+ (54, 35, 42), (45, 35, 43), (43, 33, 42), (41, 32, 41),
+ (39, 30, 39), (34, 27, 35), (34, 26, 36), (35, 26, 37),
+ (41, 30, 41), (42, 32, 42), (44, 34, 44), (47, 37, 45),
+ (49, 41, 47), (51, 44, 49), (51, 43, 48), (50, 41, 47),
+ (49, 38, 46), (46, 32, 42), (45, 31, 41), (45, 31, 41),
+ (43, 29, 39), (43, 29, 36), (42, 30, 36), (42, 30, 37),
+ (44, 31, 38), (43, 30, 37), (42, 29, 36), (40, 26, 35),
+ (37, 23, 33), (31, 19, 29), (27, 14, 23), (22, 12, 19),
+ (20, 11, 15), (19, 10, 13), (18, 9, 10), (17, 8, 8),
+ (17, 7, 7), (17, 7, 8), (17, 7, 7), (16, 6, 6),
+ (15, 7, 7), (15, 7, 7), (16, 8, 8), (17, 8, 9),
+ (17, 9, 8), (18, 8, 9), (17, 8, 10), (17, 10, 12),
+ (18, 13, 15), (21, 19, 20), (28, 28, 29), (38, 40, 39),
+ (50, 52, 50), (62, 65, 59), (76, 78, 69), (88, 89, 78),
+ (101, 100, 88), (115, 110, 95), (124, 121, 103), (136, 134, 113),
+ (149, 146, 125), (162, 159, 136), (175, 171, 147), (188, 183, 157),
+ (196, 190, 164), (200, 194, 168), (201, 190, 165), (193, 182, 157),
+ (181, 172, 147), (168, 161, 137), (155, 149, 127), (142, 137, 117),
+ (130, 126, 107), (118, 114, 99), (106, 104, 92), (94, 93, 84),
+ (82, 80, 73), (69, 67, 62), (56, 54, 51), (43, 41, 39),
+ (31, 29, 30), (23, 19, 20), (18, 13, 16), (19, 11, 16),
+ (25, 16, 21), (34, 22, 26), (46, 30, 32), (58, 38, 35),
+ (69, 47, 38), (76, 54, 41), (81, 62, 42), (86, 67, 42),
+ (91, 68, 43), (95, 70, 45), (97, 72, 47), (101, 75, 52),
+ (109, 77, 51), (115, 81, 51), (120, 81, 51), (121, 85, 52),
+ (119, 89, 52), (122, 92, 53), (127, 97, 56), (125, 97, 57),
+ (116, 91, 58), (110, 84, 59), (105, 81, 59), (104, 76, 61),
+ (100, 72, 61), (93, 71, 62), (84, 66, 60), (83, 69, 61)
+ ),
+
+// 487 Air
+((87, 148, 201), (88, 148, 200), (88, 148, 200), (88, 148, 200),
+ (89, 149, 201), (91, 151, 203), (92, 153, 204), (94, 155, 205),
+ (117, 160, 206), (135, 162, 209), (153, 165, 213), (166, 173, 219),
+ (179, 181, 225), (190, 183, 225), (202, 185, 226), (202, 183, 226),
+ (202, 181, 226), (187, 183, 230), (177, 183, 229), (167, 184, 229),
+ (149, 177, 224), (131, 171, 219), (123, 169, 217), (116, 167, 215),
+ (102, 163, 212), (100, 162, 212), (99, 161, 212), (98, 160, 211),
+ (98, 160, 210), (98, 159, 209), (98, 159, 209), (98, 158, 209),
+ (107, 156, 206), (126, 140, 192), (122, 130, 180), (119, 120, 168),
+ (112, 110, 157), (105, 100, 146), (101, 95, 141), (98, 90, 136),
+ (82, 70, 118), (72, 69, 117), (63, 69, 117), (70, 73, 124),
+ (77, 77, 131), (83, 80, 135), (89, 84, 140), (88, 93, 147),
+ (94, 104, 159), (110, 126, 179), (114, 131, 184), (119, 136, 190),
+ (112, 138, 190), (105, 141, 190), (102, 138, 186), (100, 135, 182),
+ (90, 115, 161), (81, 109, 156), (72, 104, 152), (74, 100, 148),
+ (76, 97, 145), (75, 95, 143), (74, 94, 141), (64, 93, 142),
+ (55, 95, 143), (49, 95, 147), (46, 91, 143), (44, 88, 139),
+ (41, 84, 134), (39, 81, 129), (34, 67, 112), (27, 54, 95),
+ (12, 30, 63), (8, 23, 54), (4, 16, 46), (3, 13, 40),
+ (3, 10, 34), (4, 12, 32), (6, 14, 30), (7, 22, 29),
+ (8, 30, 31), (9, 39, 47), (13, 50, 58), (17, 61, 69),
+ (20, 67, 75), (23, 74, 82), (32, 90, 95), (39, 93, 113),
+ (47, 105, 143), (52, 112, 154), (58, 119, 166), (60, 119, 168),
+ (63, 119, 170), (61, 115, 166), (55, 105, 153), (50, 94, 137),
+ (45, 82, 124), (34, 67, 109), (34, 63, 104), (35, 59, 99),
+ (43, 58, 99), (52, 58, 99), (66, 65, 104), (77, 77, 114),
+ (82, 109, 149), (95, 120, 164), (109, 131, 180), (114, 136, 182),
+ (120, 142, 185), (117, 150, 192), (107, 156, 196), (100, 157, 199),
+ (94, 154, 202), (89, 148, 197), (87, 146, 196), (86, 145, 195),
+ (84, 142, 192), (82, 139, 189), (79, 135, 186), (75, 131, 182),
+ (66, 118, 171), (60, 110, 163), (55, 102, 155), (52, 98, 151),
+ (50, 94, 148), (46, 91, 143), (43, 88, 142), (44, 89, 142),
+ (46, 90, 144), (51, 97, 150), (53, 100, 153), (55, 104, 156),
+ (61, 113, 164), (67, 122, 173), (72, 128, 178), (76, 132, 182),
+ (77, 134, 185), (77, 135, 186), (77, 136, 187), (78, 136, 187),
+ (79, 137, 188), (81, 138, 191), (83, 141, 193), (85, 144, 195),
+ (88, 147, 198), (94, 153, 203), (95, 154, 204), (96, 156, 205),
+ (95, 156, 206), (94, 154, 205), (91, 151, 201), (86, 144, 196),
+ (69, 121, 174), (63, 113, 166), (58, 105, 158), (48, 91, 141),
+ (39, 76, 124), (31, 62, 109), (22, 51, 96), (16, 41, 86),
+ (11, 36, 80), (13, 40, 82), (16, 45, 87), (20, 50, 93),
+ (29, 63, 108), (39, 79, 126), (48, 92, 140), (57, 106, 155),
+ (79, 135, 184), (84, 140, 189), (89, 146, 194), (102, 152, 199),
+ (118, 155, 202), (136, 156, 204), (152, 156, 207), (164, 158, 211),
+ (173, 160, 211), (184, 162, 212), (197, 163, 211), (195, 161, 212),
+ (191, 161, 214), (180, 163, 216), (165, 165, 216), (161, 168, 216),
+ (128, 164, 212), (120, 162, 210), (112, 160, 209), (97, 156, 206),
+ (84, 138, 180), (72, 119, 159), (60, 101, 140), (48, 85, 123),
+ (47, 87, 132), (40, 78, 119), (35, 70, 109), (30, 64, 103),
+ (27, 58, 96), (32, 67, 112), (35, 76, 124), (39, 82, 133),
+ (38, 85, 137), (38, 86, 137), (43, 85, 136), (55, 85, 136),
+ (72, 88, 140), (84, 92, 143), (92, 93, 144), (93, 92, 140),
+ (96, 86, 134), (100, 86, 126), (99, 86, 124), (97, 84, 123),
+ (87, 80, 117), (72, 67, 107), (56, 55, 85), (35, 42, 67),
+ (19, 29, 50), (8, 20, 38), (2, 10, 32), (1, 7, 26),
+ (0, 4, 25), (4, 4, 28), (6, 8, 33), (8, 13, 40),
+ (10, 18, 47), (7, 24, 56), (10, 25, 64), (11, 28, 72),
+ (12, 33, 79), (15, 39, 85), (13, 46, 91), (14, 49, 96),
+ (17, 53, 101), (22, 60, 109), (29, 69, 119), (37, 81, 130),
+ (45, 93, 144), (54, 104, 156), (63, 115, 169), (72, 127, 181),
+ (81, 138, 191), (88, 148, 199), (94, 154, 205), (98, 159, 209),
+ (100, 161, 212), (102, 163, 212), (103, 163, 213), (103, 163, 213),
+ (102, 163, 212), (101, 161, 211), (98, 159, 210), (97, 157, 209),
+ (95, 155, 207), (93, 153, 205), (90, 150, 203), (88, 148, 202)
+ ),
+
+// 488 Angora
+((87, 50, 73), (92, 61, 79), (107, 72, 90), (122, 84, 101),
+ (135, 98, 119), (148, 113, 137), (156, 118, 144), (164, 124, 152),
+ (183, 132, 158), (180, 135, 160), (177, 138, 163), (171, 133, 153),
+ (165, 128, 143), (153, 120, 132), (142, 112, 122), (137, 108, 118),
+ (133, 105, 114), (122, 94, 114), (120, 88, 111), (119, 83, 108),
+ (120, 84, 110), (122, 85, 113), (123, 87, 116), (124, 90, 120),
+ (142, 103, 131), (152, 112, 140), (163, 122, 150), (171, 124, 154),
+ (179, 127, 159), (179, 126, 157), (179, 125, 155), (173, 120, 151),
+ (161, 108, 139), (136, 76, 108), (117, 62, 93), (99, 49, 78),
+ (88, 40, 71), (78, 31, 64), (75, 28, 62), (72, 26, 61),
+ (64, 26, 59), (64, 26, 60), (65, 26, 61), (68, 29, 64),
+ (72, 33, 67), (75, 35, 69), (78, 38, 72), (86, 45, 78),
+ (95, 53, 86), (114, 68, 102), (119, 71, 106), (125, 74, 111),
+ (124, 72, 109), (124, 70, 108), (119, 65, 104), (115, 60, 100),
+ (99, 47, 87), (93, 45, 83), (87, 44, 80), (85, 45, 82),
+ (83, 46, 84), (87, 48, 86), (91, 50, 89), (96, 54, 91),
+ (98, 54, 93), (100, 54, 96), (99, 52, 90), (98, 51, 84),
+ (95, 49, 79), (92, 47, 75), (87, 43, 69), (86, 42, 65),
+ (79, 39, 53), (78, 35, 50), (77, 32, 47), (76, 31, 47),
+ (76, 31, 48), (75, 31, 48), (74, 31, 49), (73, 29, 48),
+ (72, 29, 48), (67, 25, 46), (65, 24, 45), (64, 24, 44),
+ (64, 24, 44), (65, 25, 45), (66, 27, 49), (69, 32, 54),
+ (82, 51, 75), (89, 57, 86), (97, 63, 98), (99, 65, 101),
+ (102, 68, 104), (105, 70, 105), (105, 72, 102), (106, 68, 99),
+ (104, 61, 93), (98, 49, 71), (98, 48, 67), (98, 48, 63),
+ (100, 50, 65), (102, 52, 67), (107, 58, 70), (114, 66, 75),
+ (130, 79, 92), (133, 79, 95), (136, 79, 99), (131, 75, 97),
+ (126, 72, 95), (122, 69, 97), (126, 70, 104), (141, 79, 117),
+ (145, 89, 126), (164, 125, 160), (175, 136, 171), (187, 148, 182),
+ (206, 165, 199), (220, 177, 212), (224, 186, 217), (223, 191, 215),
+ (221, 181, 210), (220, 178, 206), (219, 175, 203), (216, 174, 202),
+ (214, 174, 201), (211, 170, 203), (212, 166, 200), (209, 163, 194),
+ (203, 159, 183), (190, 150, 164), (186, 147, 159), (183, 144, 155),
+ (174, 137, 142), (166, 127, 133), (161, 123, 128), (159, 120, 128),
+ (150, 113, 124), (148, 108, 123), (146, 103, 122), (147, 102, 122),
+ (148, 101, 122), (149, 98, 121), (148, 97, 121), (146, 98, 123),
+ (149, 99, 127), (158, 100, 132), (158, 102, 132), (158, 104, 133),
+ (157, 110, 134), (157, 111, 131), (157, 112, 125), (155, 109, 119),
+ (136, 98, 105), (132, 95, 101), (128, 93, 98), (120, 88, 93),
+ (113, 81, 89), (105, 74, 86), (101, 70, 84), (96, 69, 82),
+ (93, 68, 80), (90, 63, 74), (89, 62, 74), (89, 62, 74),
+ (89, 63, 73), (95, 66, 77), (106, 69, 81), (121, 78, 89),
+ (149, 96, 114), (155, 98, 119), (161, 101, 124), (174, 109, 129),
+ (180, 113, 131), (180, 113, 134), (170, 109, 136), (163, 105, 134),
+ (156, 99, 126), (149, 94, 118), (138, 89, 113), (131, 86, 110),
+ (127, 83, 105), (122, 80, 98), (117, 76, 92), (112, 72, 89),
+ (107, 66, 85), (107, 63, 83), (107, 61, 82), (109, 57, 82),
+ (111, 55, 81), (109, 52, 82), (104, 45, 79), (104, 40, 76),
+ (102, 37, 71), (97, 35, 69), (86, 30, 65), (77, 26, 59),
+ (71, 24, 54), (68, 24, 52), (65, 25, 54), (61, 25, 55),
+ (60, 27, 55), (60, 28, 54), (65, 28, 55), (65, 29, 59),
+ (67, 31, 61), (67, 32, 63), (70, 33, 63), (73, 34, 64),
+ (76, 37, 65), (79, 39, 66), (84, 43, 69), (88, 41, 72),
+ (92, 43, 75), (93, 45, 77), (96, 48, 77), (96, 44, 78),
+ (95, 40, 78), (95, 38, 77), (97, 41, 77), (98, 44, 77),
+ (100, 48, 77), (106, 50, 78), (115, 56, 81), (122, 64, 86),
+ (126, 74, 94), (132, 82, 98), (136, 87, 100), (138, 88, 103),
+ (134, 89, 104), (132, 88, 103), (126, 85, 97), (121, 82, 92),
+ (114, 79, 89), (110, 74, 88), (104, 68, 86), (103, 66, 84),
+ (103, 67, 84), (111, 70, 90), (120, 69, 98), (128, 72, 104),
+ (133, 79, 111), (140, 90, 116), (148, 100, 123), (153, 111, 129),
+ (158, 121, 132), (157, 127, 127), (151, 129, 123), (142, 130, 121),
+ (138, 130, 116), (136, 120, 104), (128, 106, 97), (114, 89, 92),
+ (103, 79, 87), (96, 66, 78), (92, 57, 75), (89, 51, 73)
+ ),
+
+// 489 Antique
+((60, 18, 38), (72, 25, 55), (76, 31, 62), (81, 37, 69),
+ (82, 38, 73), (83, 39, 77), (82, 38, 77), (81, 38, 77),
+ (78, 33, 75), (80, 32, 73), (82, 31, 72), (84, 33, 71),
+ (87, 36, 71), (88, 38, 69), (90, 41, 67), (90, 41, 65),
+ (90, 42, 64), (86, 36, 59), (85, 34, 58), (85, 32, 58),
+ (86, 31, 59), (88, 30, 61), (88, 31, 62), (89, 32, 63),
+ (89, 38, 67), (87, 39, 67), (86, 41, 68), (83, 40, 66),
+ (80, 39, 65), (78, 36, 63), (77, 34, 62), (73, 30, 57),
+ (69, 26, 52), (61, 24, 42), (57, 23, 36), (54, 22, 31),
+ (52, 21, 28), (51, 21, 25), (51, 20, 23), (51, 20, 22),
+ (49, 16, 18), (48, 15, 17), (47, 14, 17), (46, 13, 17),
+ (45, 13, 17), (44, 13, 17), (44, 13, 17), (43, 13, 18),
+ (42, 13, 19), (41, 13, 19), (39, 13, 17), (38, 13, 16),
+ (36, 12, 16), (34, 12, 16), (34, 12, 16), (35, 13, 16),
+ (39, 17, 21), (44, 21, 25), (49, 25, 29), (51, 27, 31),
+ (54, 30, 33), (54, 30, 34), (55, 30, 35), (55, 31, 36),
+ (56, 31, 37), (57, 30, 39), (60, 31, 40), (63, 32, 42),
+ (64, 31, 43), (65, 31, 44), (64, 31, 46), (63, 30, 46),
+ (61, 26, 45), (60, 26, 47), (60, 26, 49), (66, 29, 55),
+ (72, 32, 62), (71, 31, 61), (71, 31, 61), (71, 31, 62),
+ (72, 31, 62), (76, 33, 64), (80, 37, 67), (85, 42, 70),
+ (90, 46, 75), (96, 51, 80), (101, 55, 82), (103, 57, 82),
+ (102, 53, 79), (95, 46, 72), (89, 40, 65), (86, 38, 62),
+ (84, 37, 60), (87, 41, 63), (94, 45, 66), (102, 51, 65),
+ (109, 60, 66), (126, 77, 72), (130, 80, 74), (135, 84, 77),
+ (135, 84, 77), (135, 85, 77), (135, 86, 79), (135, 84, 76),
+ (133, 85, 69), (133, 85, 67), (134, 86, 65), (133, 86, 64),
+ (132, 86, 64), (127, 84, 62), (121, 80, 62), (112, 71, 58),
+ (101, 60, 50), (76, 37, 34), (71, 32, 31), (66, 28, 28),
+ (58, 22, 25), (54, 18, 25), (54, 15, 29), (57, 16, 36),
+ (70, 26, 53), (76, 30, 61), (83, 35, 70), (84, 36, 72),
+ (86, 38, 75), (87, 40, 76), (88, 39, 75), (89, 39, 74),
+ (88, 37, 74), (92, 43, 75), (94, 44, 77), (96, 46, 79),
+ (98, 49, 81), (95, 49, 79), (91, 47, 75), (86, 42, 69),
+ (74, 30, 56), (71, 28, 53), (69, 27, 50), (70, 27, 51),
+ (71, 27, 52), (71, 27, 54), (71, 27, 56), (71, 28, 56),
+ (70, 26, 56), (70, 24, 52), (70, 23, 51), (70, 23, 51),
+ (72, 25, 52), (76, 29, 54), (78, 32, 56), (81, 36, 57),
+ (82, 38, 57), (81, 38, 56), (81, 38, 55), (79, 37, 52),
+ (78, 35, 51), (78, 36, 49), (79, 38, 50), (80, 40, 51),
+ (82, 43, 51), (83, 45, 54), (82, 44, 54), (82, 44, 54),
+ (79, 40, 52), (76, 35, 49), (73, 31, 44), (70, 28, 39),
+ (65, 26, 31), (65, 25, 30), (65, 25, 29), (65, 25, 28),
+ (64, 24, 28), (64, 23, 29), (65, 22, 28), (66, 22, 28),
+ (68, 22, 28), (72, 24, 28), (75, 26, 28), (77, 26, 28),
+ (77, 26, 28), (76, 26, 28), (75, 26, 28), (75, 27, 29),
+ (82, 34, 34), (85, 38, 35), (89, 43, 37), (99, 52, 43),
+ (107, 61, 48), (115, 69, 53), (119, 74, 58), (120, 76, 65),
+ (122, 78, 73), (126, 81, 84), (132, 89, 95), (142, 99, 109),
+ (152, 109, 122), (163, 119, 136), (173, 128, 144), (176, 130, 152),
+ (176, 129, 155), (173, 123, 156), (168, 117, 153), (159, 110, 148),
+ (150, 102, 142), (140, 95, 136), (132, 91, 127), (123, 84, 118),
+ (112, 75, 107), (102, 65, 95), (91, 55, 83), (79, 45, 69),
+ (69, 36, 56), (58, 28, 44), (48, 21, 32), (40, 16, 24),
+ (33, 11, 18), (29, 8, 15), (26, 6, 14), (25, 5, 14),
+ (25, 5, 15), (26, 6, 16), (28, 6, 17), (29, 7, 18),
+ (31, 7, 19), (32, 8, 21), (33, 9, 22), (34, 9, 22),
+ (34, 9, 23), (35, 10, 23), (36, 10, 24), (36, 11, 24),
+ (37, 10, 24), (38, 10, 25), (39, 10, 26), (39, 10, 26),
+ (39, 10, 27), (38, 11, 27), (38, 10, 27), (36, 10, 25),
+ (35, 9, 23), (34, 9, 21), (34, 8, 20), (34, 8, 19),
+ (34, 7, 18), (34, 8, 18), (35, 8, 17), (37, 9, 17),
+ (38, 10, 16), (39, 10, 16), (41, 10, 16), (43, 11, 17),
+ (45, 12, 19), (47, 13, 22), (50, 14, 26), (54, 16, 31)
+ ),
+
+// 490 Arizona
+((205, 130, 107), (212, 138, 114), (211, 136, 116), (210, 135, 119),
+ (217, 145, 142), (224, 155, 166), (221, 151, 166), (218, 148, 166),
+ (199, 104, 186), (173, 84, 199), (148, 64, 213), (134, 45, 210),
+ (120, 27, 208), (110, 22, 200), (100, 17, 193), (96, 14, 189),
+ (92, 11, 185), (94, 6, 162), (96, 7, 143), (99, 8, 125),
+ (97, 9, 114), (95, 11, 104), (93, 10, 99), (92, 10, 94),
+ (87, 7, 81), (85, 8, 80), (84, 9, 79), (82, 7, 79),
+ (81, 6, 79), (80, 6, 78), (79, 6, 77), (79, 4, 73),
+ (76, 3, 70), (58, 3, 61), (52, 2, 57), (46, 1, 54),
+ (42, 0, 55), (39, 0, 57), (38, 0, 58), (38, 0, 60),
+ (49, 1, 67), (53, 0, 69), (58, 0, 71), (59, 0, 68),
+ (60, 0, 66), (60, 0, 64), (61, 0, 62), (60, 0, 57),
+ (57, 0, 51), (58, 2, 52), (65, 3, 57), (73, 4, 63),
+ (85, 10, 70), (97, 17, 77), (102, 21, 80), (107, 25, 84),
+ (119, 37, 79), (123, 44, 73), (127, 52, 68), (115, 51, 57),
+ (103, 51, 47), (97, 46, 42), (92, 41, 37), (85, 36, 36),
+ (82, 29, 41), (69, 14, 49), (72, 9, 55), (75, 4, 62),
+ (78, 4, 64), (81, 4, 66), (86, 4, 71), (91, 4, 77),
+ (92, 8, 87), (92, 7, 97), (93, 6, 107), (97, 6, 112),
+ (102, 7, 118), (102, 7, 119), (103, 8, 120), (99, 6, 117),
+ (102, 2, 115), (103, 5, 95), (95, 4, 83), (87, 3, 72),
+ (82, 2, 67), (78, 2, 63), (64, 2, 53), (56, 3, 48),
+ (50, 1, 40), (49, 0, 35), (49, 0, 31), (51, 1, 28),
+ (53, 3, 26), (64, 7, 23), (77, 16, 20), (97, 24, 19),
+ (105, 32, 15), (104, 41, 5), (108, 44, 12), (113, 47, 19),
+ (111, 43, 23), (110, 40, 27), (100, 30, 33), (92, 26, 37),
+ (91, 14, 54), (101, 24, 58), (112, 34, 62), (123, 48, 61),
+ (135, 62, 60), (156, 86, 61), (177, 103, 59), (184, 109, 55),
+ (197, 122, 49), (192, 131, 57), (181, 121, 58), (171, 112, 59),
+ (154, 89, 61), (136, 73, 68), (118, 59, 78), (106, 44, 84),
+ (104, 29, 94), (105, 26, 97), (107, 23, 101), (110, 22, 104),
+ (114, 22, 108), (121, 23, 115), (129, 25, 122), (134, 27, 129),
+ (142, 28, 141), (140, 20, 157), (139, 19, 154), (139, 18, 151),
+ (136, 17, 144), (129, 14, 139), (115, 7, 132), (104, 4, 122),
+ (86, 5, 116), (80, 3, 118), (75, 2, 121), (78, 7, 118),
+ (82, 12, 116), (90, 25, 111), (108, 39, 100), (127, 59, 89),
+ (156, 89, 79), (196, 125, 42), (199, 125, 31), (202, 126, 20),
+ (205, 128, 16), (204, 133, 21), (194, 118, 20), (172, 91, 17),
+ (127, 54, 35), (123, 51, 42), (120, 49, 50), (118, 43, 63),
+ (112, 40, 76), (104, 38, 80), (104, 41, 85), (115, 47, 81),
+ (124, 57, 77), (132, 63, 62), (131, 61, 58), (131, 59, 54),
+ (127, 52, 51), (125, 49, 47), (123, 41, 49), (120, 33, 49),
+ (111, 22, 45), (112, 22, 44), (113, 23, 44), (117, 24, 44),
+ (123, 30, 36), (125, 38, 26), (121, 45, 22), (113, 42, 23),
+ (105, 37, 29), (99, 32, 33), (89, 30, 37), (80, 27, 43),
+ (76, 24, 57), (85, 23, 75), (95, 28, 96), (105, 37, 113),
+ (133, 54, 143), (140, 55, 148), (148, 56, 154), (154, 50, 154),
+ (167, 53, 141), (166, 46, 133), (159, 40, 128), (143, 26, 120),
+ (143, 18, 97), (137, 10, 79), (126, 7, 72), (111, 7, 74),
+ (107, 8, 80), (105, 7, 82), (104, 6, 81), (101, 8, 75),
+ (100, 13, 71), (96, 18, 64), (90, 22, 56), (81, 25, 45),
+ (73, 27, 32), (70, 25, 24), (64, 22, 18), (56, 18, 18),
+ (49, 23, 15), (48, 22, 11), (47, 22, 12), (44, 16, 17),
+ (41, 16, 22), (41, 16, 23), (41, 18, 25), (49, 17, 32),
+ (57, 14, 43), (70, 15, 56), (86, 12, 66), (107, 15, 83),
+ (128, 14, 100), (138, 18, 111), (148, 16, 109), (152, 21, 112),
+ (158, 21, 122), (146, 16, 126), (130, 10, 121), (119, 12, 115),
+ (117, 18, 114), (115, 17, 114), (111, 15, 118), (111, 13, 127),
+ (117, 15, 130), (124, 18, 131), (127, 23, 132), (125, 25, 142),
+ (120, 20, 149), (116, 16, 154), (113, 17, 159), (106, 18, 166),
+ (104, 16, 172), (110, 14, 176), (120, 19, 180), (119, 21, 180),
+ (113, 20, 179), (103, 17, 180), (100, 22, 175), (97, 26, 168),
+ (97, 28, 153), (94, 29, 148), (102, 41, 136), (125, 67, 128),
+ (154, 97, 113), (162, 92, 104), (166, 82, 99), (172, 87, 100)
+ ),
+
+// 491 Autumn_Garden
+((87, 71, 62), (91, 74, 71), (90, 75, 73), (90, 76, 76),
+ (90, 78, 81), (91, 81, 86), (88, 77, 82), (85, 74, 78),
+ (81, 70, 76), (84, 72, 78), (87, 75, 80), (90, 84, 85),
+ (93, 93, 90), (99, 99, 91), (105, 106, 92), (108, 108, 91),
+ (111, 111, 91), (120, 113, 86), (120, 112, 83), (120, 112, 81),
+ (119, 111, 73), (119, 110, 66), (119, 108, 60), (119, 107, 55),
+ (117, 102, 41), (118, 98, 38), (120, 95, 36), (119, 88, 32),
+ (119, 82, 28), (120, 78, 27), (121, 75, 26), (122, 70, 24),
+ (126, 68, 21), (133, 71, 22), (136, 76, 22), (139, 81, 22),
+ (141, 85, 26), (143, 89, 31), (143, 92, 33), (144, 95, 35),
+ (143, 106, 55), (147, 115, 63), (152, 125, 72), (152, 129, 71),
+ (153, 134, 70), (152, 135, 66), (152, 137, 63), (146, 133, 58),
+ (138, 132, 54), (129, 122, 55), (126, 114, 52), (123, 106, 49),
+ (117, 97, 39), (112, 88, 29), (104, 81, 23), (96, 75, 17),
+ (76, 58, 4), (71, 53, 2), (66, 48, 1), (65, 47, 4),
+ (65, 46, 7), (62, 44, 7), (59, 43, 7), (57, 44, 11),
+ (58, 43, 12), (63, 44, 12), (68, 45, 12), (74, 47, 12),
+ (75, 48, 12), (77, 49, 12), (80, 49, 12), (83, 48, 14),
+ (92, 51, 17), (98, 56, 17), (104, 62, 17), (109, 68, 21),
+ (115, 74, 26), (116, 75, 29), (118, 76, 33), (120, 77, 35),
+ (121, 76, 40), (121, 81, 44), (121, 87, 45), (121, 94, 46),
+ (120, 97, 47), (120, 100, 49), (117, 104, 50), (115, 103, 53),
+ (107, 99, 51), (102, 96, 44), (98, 94, 37), (95, 93, 34),
+ (93, 93, 32), (88, 94, 27), (83, 94, 26), (77, 93, 27),
+ (72, 91, 29), (65, 87, 35), (62, 86, 39), (59, 85, 44),
+ (57, 84, 45), (56, 84, 47), (53, 82, 51), (51, 78, 56),
+ (45, 75, 62), (44, 75, 64), (44, 76, 66), (46, 76, 67),
+ (48, 77, 69), (53, 76, 70), (59, 68, 72), (68, 62, 68),
+ (70, 57, 60), (71, 53, 43), (72, 54, 41), (73, 56, 39),
+ (77, 61, 36), (85, 67, 34), (102, 74, 35), (114, 83, 32),
+ (134, 101, 27), (139, 109, 27), (144, 117, 28), (144, 120, 27),
+ (145, 124, 26), (150, 134, 29), (155, 141, 30), (161, 150, 26),
+ (169, 159, 26), (176, 164, 21), (173, 161, 19), (171, 158, 17),
+ (161, 153, 16), (150, 143, 15), (139, 134, 10), (130, 127, 8),
+ (120, 119, 3), (117, 115, 3), (115, 112, 4), (112, 110, 4),
+ (110, 108, 5), (105, 105, 5), (101, 102, 7), (98, 102, 9),
+ (96, 101, 14), (95, 103, 29), (96, 105, 33), (97, 108, 37),
+ (99, 111, 46), (105, 115, 54), (107, 118, 60), (111, 119, 64),
+ (112, 116, 70), (111, 116, 71), (110, 116, 72), (109, 115, 77),
+ (110, 119, 78), (112, 123, 76), (114, 126, 73), (118, 125, 68),
+ (118, 121, 61), (113, 109, 43), (112, 106, 40), (111, 103, 37),
+ (111, 101, 30), (110, 101, 24), (112, 101, 19), (111, 101, 19),
+ (107, 96, 22), (106, 92, 24), (105, 89, 27), (103, 83, 31),
+ (100, 80, 36), (102, 78, 40), (102, 79, 44), (103, 78, 50),
+ (106, 77, 56), (107, 77, 61), (106, 76, 63), (104, 74, 64),
+ (103, 73, 64), (102, 75, 61), (100, 76, 56), (99, 73, 52),
+ (97, 71, 41), (95, 69, 37), (94, 68, 34), (90, 65, 30),
+ (85, 65, 27), (82, 65, 24), (79, 67, 21), (76, 71, 20),
+ (75, 74, 20), (75, 76, 20), (73, 76, 24), (72, 77, 29),
+ (74, 76, 36), (75, 75, 43), (74, 76, 50), (76, 79, 56),
+ (81, 80, 58), (84, 81, 63), (89, 82, 70), (94, 85, 75),
+ (99, 86, 82), (102, 87, 90), (105, 91, 99), (115, 94, 106),
+ (119, 95, 110), (122, 97, 120), (124, 101, 125), (134, 109, 127),
+ (142, 118, 136), (145, 127, 140), (154, 136, 144), (160, 141, 138),
+ (162, 143, 136), (158, 141, 132), (158, 140, 119), (153, 139, 112),
+ (147, 137, 102), (145, 137, 94), (143, 131, 83), (140, 126, 72),
+ (133, 117, 64), (123, 105, 52), (111, 96, 43), (99, 87, 40),
+ (89, 81, 37), (78, 74, 36), (67, 70, 34), (58, 64, 35),
+ (50, 58, 36), (46, 54, 40), (43, 51, 42), (41, 51, 46),
+ (39, 50, 51), (38, 52, 52), (38, 53, 53), (39, 55, 53),
+ (40, 56, 51), (44, 55, 48), (47, 57, 45), (53, 57, 44),
+ (59, 58, 42), (64, 58, 43), (68, 60, 46), (71, 62, 51),
+ (73, 64, 55), (75, 64, 54), (84, 74, 65), (92, 81, 70),
+ (94, 84, 71), (95, 83, 72), (96, 83, 72), (96, 83, 74)
+ ),
+
+// 492 Autumn_Leaves
+((151, 96, 34), (130, 130, 63), (125, 127, 57), (120, 124, 51),
+ (104, 107, 50), (88, 90, 50), (79, 79, 50), (71, 69, 50),
+ (41, 46, 33), (35, 40, 27), (30, 35, 22), (32, 35, 19),
+ (35, 36, 16), (43, 39, 25), (52, 43, 34), (58, 49, 39),
+ (64, 56, 44), (86, 80, 70), (97, 90, 74), (108, 101, 78),
+ (114, 103, 79), (121, 105, 80), (125, 104, 77), (129, 103, 75),
+ (141, 113, 61), (134, 119, 56), (128, 126, 52), (108, 125, 40),
+ (89, 125, 29), (79, 122, 28), (70, 119, 27), (57, 101, 21),
+ (50, 84, 15), (39, 47, 10), (39, 37, 10), (39, 27, 11),
+ (39, 24, 11), (39, 21, 12), (41, 24, 12), (44, 28, 12),
+ (59, 39, 19), (63, 40, 15), (67, 41, 11), (74, 39, 8),
+ (81, 37, 6), (81, 30, 4), (81, 23, 2), (74, 20, 4),
+ (68, 18, 8), (47, 6, 13), (38, 8, 12), (29, 11, 12),
+ (36, 13, 9), (44, 16, 6), (52, 19, 8), (60, 22, 11),
+ (87, 38, 20), (95, 39, 20), (104, 41, 21), (96, 37, 16),
+ (89, 34, 12), (81, 31, 13), (74, 28, 15), (56, 20, 18),
+ (42, 15, 21), (22, 22, 46), (34, 39, 49), (46, 57, 52),
+ (52, 67, 55), (58, 78, 59), (76, 94, 62), (103, 112, 60),
+ (141, 122, 55), (156, 119, 56), (172, 117, 57), (174, 116, 58),
+ (177, 116, 60), (172, 122, 60), (167, 129, 61), (160, 128, 74),
+ (151, 131, 88), (139, 131, 91), (139, 122, 94), (139, 114, 98),
+ (135, 107, 92), (132, 101, 87), (115, 89, 76), (106, 76, 72),
+ (80, 56, 63), (69, 51, 57), (59, 46, 51), (61, 42, 48),
+ (63, 38, 46), (67, 38, 38), (77, 39, 34), (95, 41, 31),
+ (106, 49, 30), (139, 70, 42), (149, 80, 46), (159, 91, 50),
+ (160, 94, 54), (162, 97, 58), (155, 93, 55), (152, 86, 50),
+ (129, 81, 54), (116, 76, 53), (104, 71, 53), (99, 71, 54),
+ (95, 72, 55), (86, 70, 54), (81, 72, 46), (80, 80, 41),
+ (80, 83, 48), (86, 88, 41), (90, 89, 43), (95, 90, 46),
+ (102, 87, 48), (112, 83, 45), (114, 75, 41), (119, 71, 36),
+ (110, 67, 38), (107, 61, 40), (105, 55, 42), (99, 55, 42),
+ (94, 56, 43), (90, 49, 47), (87, 42, 49), (79, 39, 43),
+ (76, 34, 37), (63, 33, 28), (64, 33, 28), (66, 34, 29),
+ (65, 41, 33), (67, 51, 41), (77, 62, 52), (88, 75, 60),
+ (116, 93, 57), (127, 93, 50), (139, 93, 43), (139, 91, 38),
+ (140, 89, 33), (132, 79, 27), (120, 66, 25), (108, 59, 25),
+ (93, 51, 30), (64, 43, 27), (62, 41, 27), (60, 39, 28),
+ (58, 39, 27), (56, 37, 17), (52, 37, 11), (51, 42, 10),
+ (41, 35, 5), (38, 34, 5), (35, 33, 6), (25, 33, 3),
+ (21, 25, 3), (18, 14, 3), (15, 9, 1), (15, 6, 0),
+ (22, 2, 0), (32, 0, 9), (38, 0, 10), (44, 0, 12),
+ (51, 0, 17), (61, 2, 24), (77, 7, 22), (83, 12, 18),
+ (93, 32, 13), (94, 36, 10), (95, 41, 7), (93, 47, 7),
+ (91, 53, 10), (91, 61, 17), (93, 63, 21), (90, 60, 21),
+ (85, 61, 28), (78, 63, 31), (69, 57, 27), (66, 53, 28),
+ (62, 56, 30), (56, 55, 29), (58, 52, 33), (58, 52, 32),
+ (57, 34, 32), (56, 29, 33), (55, 24, 34), (51, 16, 26),
+ (45, 8, 20), (39, 5, 19), (35, 6, 14), (34, 12, 7),
+ (34, 19, 5), (34, 22, 8), (41, 25, 9), (48, 27, 6),
+ (50, 24, 7), (51, 22, 8), (51, 15, 4), (46, 10, 2),
+ (39, 11, 1), (34, 8, 0), (32, 7, 3), (30, 12, 9),
+ (27, 22, 17), (25, 33, 29), (29, 47, 53), (44, 66, 70),
+ (60, 83, 68), (65, 103, 71), (77, 107, 70), (93, 98, 52),
+ (97, 100, 41), (91, 92, 37), (85, 75, 35), (83, 74, 42),
+ (74, 78, 51), (62, 79, 59), (62, 88, 61), (47, 86, 47),
+ (29, 77, 40), (26, 73, 39), (19, 61, 20), (19, 56, 5),
+ (26, 55, 11), (33, 53, 18), (51, 60, 20), (74, 66, 34),
+ (90, 71, 46), (105, 79, 51), (125, 90, 64), (141, 105, 71),
+ (149, 131, 77), (154, 147, 82), (154, 156, 76), (162, 168, 76),
+ (164, 168, 72), (161, 149, 60), (169, 130, 47), (162, 124, 40),
+ (155, 113, 38), (154, 98, 34), (135, 93, 37), (120, 90, 43),
+ (120, 92, 49), (113, 93, 59), (108, 87, 67), (117, 86, 64),
+ (121, 92, 61), (129, 93, 62), (143, 88, 54), (150, 87, 41),
+ (156, 88, 33), (165, 85, 28), (157, 90, 41), (148, 93, 50)
+ ),
+
+// 493 Autumn_Mountains
+((189, 156, 127), (195, 167, 135), (187, 158, 123), (179, 150, 112),
+ (172, 141, 107), (165, 133, 102), (160, 128, 97), (155, 123, 93),
+ (133, 99, 75), (119, 82, 53), (106, 66, 32), (101, 60, 27),
+ (97, 55, 23), (99, 57, 26), (102, 59, 30), (104, 61, 31),
+ (107, 64, 33), (124, 82, 42), (132, 90, 45), (140, 98, 48),
+ (141, 100, 50), (143, 103, 52), (143, 102, 52), (143, 102, 52),
+ (135, 95, 54), (131, 94, 55), (128, 93, 57), (128, 93, 58),
+ (128, 93, 60), (129, 94, 61), (130, 96, 62), (135, 96, 68),
+ (139, 102, 73), (151, 115, 86), (156, 121, 88), (162, 127, 91),
+ (167, 130, 92), (172, 133, 94), (174, 134, 92), (177, 135, 91),
+ (176, 131, 83), (172, 127, 78), (169, 124, 73), (163, 120, 68),
+ (158, 116, 63), (156, 114, 60), (155, 113, 58), (153, 110, 52),
+ (151, 106, 49), (146, 103, 48), (143, 102, 47), (140, 101, 46),
+ (136, 96, 44), (133, 91, 42), (132, 89, 41), (132, 87, 40),
+ (125, 74, 41), (123, 70, 38), (121, 67, 35), (120, 62, 31),
+ (119, 58, 27), (119, 57, 25), (119, 56, 24), (117, 53, 22),
+ (117, 52, 21), (123, 61, 30), (128, 65, 34), (134, 70, 38),
+ (135, 72, 39), (136, 74, 40), (136, 73, 38), (135, 73, 37),
+ (127, 69, 34), (122, 64, 32), (118, 59, 31), (112, 51, 26),
+ (106, 44, 21), (103, 42, 17), (101, 40, 14), (95, 39, 10),
+ (92, 38, 10), (88, 41, 14), (87, 44, 21), (87, 47, 29),
+ (87, 49, 32), (87, 52, 36), (91, 55, 43), (96, 61, 46),
+ (98, 71, 54), (96, 75, 59), (95, 79, 64), (95, 79, 65),
+ (95, 79, 67), (98, 76, 67), (104, 73, 62), (105, 70, 59),
+ (105, 67, 55), (103, 64, 52), (105, 63, 49), (107, 63, 46),
+ (108, 63, 44), (110, 63, 42), (111, 62, 37), (112, 60, 34),
+ (109, 54, 31), (107, 53, 28), (105, 52, 25), (103, 52, 23),
+ (102, 52, 21), (100, 53, 18), (100, 52, 15), (101, 52, 17),
+ (103, 53, 20), (108, 58, 27), (109, 60, 29), (111, 62, 31),
+ (114, 67, 34), (117, 72, 40), (121, 78, 46), (126, 85, 51),
+ (134, 97, 62), (137, 100, 65), (140, 104, 69), (140, 104, 69),
+ (141, 105, 69), (145, 106, 67), (148, 110, 65), (156, 119, 73),
+ (162, 123, 75), (161, 123, 75), (159, 120, 72), (157, 117, 70),
+ (146, 104, 55), (142, 101, 53), (137, 94, 48), (131, 87, 47),
+ (114, 71, 41), (103, 59, 29), (92, 47, 18), (89, 43, 14),
+ (87, 40, 10), (85, 39, 6), (85, 37, 5), (86, 38, 7),
+ (87, 42, 8), (97, 53, 15), (101, 58, 17), (105, 63, 20),
+ (111, 70, 27), (115, 77, 37), (119, 83, 43), (122, 89, 50),
+ (131, 101, 58), (134, 103, 59), (137, 105, 60), (139, 108, 65),
+ (141, 110, 67), (142, 109, 63), (140, 106, 57), (139, 102, 51),
+ (138, 97, 42), (131, 83, 33), (129, 78, 30), (127, 73, 27),
+ (120, 64, 19), (110, 53, 13), (100, 42, 6), (89, 32, 3),
+ (77, 18, 3), (76, 17, 3), (76, 16, 4), (75, 16, 7),
+ (74, 18, 10), (71, 19, 15), (66, 23, 18), (66, 26, 21),
+ (69, 30, 22), (71, 31, 22), (75, 34, 22), (73, 35, 21),
+ (67, 35, 24), (62, 35, 26), (63, 35, 27), (65, 34, 24),
+ (78, 39, 17), (79, 40, 16), (81, 41, 16), (81, 44, 20),
+ (85, 46, 24), (89, 48, 27), (98, 50, 29), (108, 55, 29),
+ (117, 62, 29), (125, 71, 33), (131, 77, 40), (134, 85, 47),
+ (137, 88, 53), (140, 90, 57), (144, 95, 62), (151, 104, 66),
+ (158, 112, 73), (171, 132, 93), (183, 150, 115), (192, 165, 135),
+ (202, 180, 155), (213, 194, 172), (218, 199, 176), (227, 213, 193),
+ (237, 225, 209), (243, 236, 224), (249, 245, 239), (254, 254, 252),
+ (254, 254, 252), (254, 254, 253), (255, 253, 252), (254, 253, 251),
+ (247, 242, 239), (240, 231, 226), (231, 220, 214), (221, 207, 202),
+ (211, 195, 189), (208, 193, 186), (199, 182, 174), (192, 170, 161),
+ (184, 160, 146), (175, 150, 135), (165, 137, 120), (163, 135, 114),
+ (160, 132, 108), (159, 126, 102), (158, 123, 97), (158, 121, 96),
+ (155, 120, 94), (155, 120, 94), (153, 119, 91), (151, 115, 85),
+ (148, 111, 78), (145, 107, 74), (140, 103, 70), (136, 101, 71),
+ (132, 100, 71), (131, 100, 69), (130, 100, 66), (130, 99, 62),
+ (129, 96, 54), (129, 95, 52), (128, 92, 52), (130, 92, 52),
+ (134, 94, 56), (138, 97, 61), (142, 102, 65), (148, 108, 73),
+ (153, 113, 79), (159, 118, 84), (167, 126, 92), (179, 141, 110)
+ ),
+
+// 494 Awakening
+((214, 197, 29), (211, 204, 88), (207, 201, 110), (204, 198, 132),
+ (203, 189, 153), (203, 181, 174), (208, 173, 176), (214, 166, 179),
+ (215, 131, 158), (210, 118, 144), (206, 105, 130), (206, 101, 133),
+ (206, 98, 136), (204, 122, 146), (203, 147, 157), (197, 152, 157),
+ (191, 157, 158), (172, 177, 168), (168, 174, 164), (164, 171, 160),
+ (162, 162, 154), (160, 154, 149), (159, 155, 149), (159, 156, 149),
+ (179, 167, 167), (187, 181, 180), (195, 195, 194), (195, 205, 196),
+ (195, 215, 199), (193, 214, 194), (191, 214, 189), (175, 209, 165),
+ (162, 196, 134), (134, 172, 86), (122, 165, 60), (110, 159, 34),
+ (123, 162, 22), (137, 165, 11), (145, 168, 10), (153, 171, 9),
+ (181, 177, 29), (197, 169, 41), (213, 161, 53), (203, 167, 77),
+ (193, 174, 102), (188, 169, 97), (183, 165, 93), (187, 145, 81),
+ (190, 154, 68), (185, 175, 63), (179, 170, 37), (174, 165, 12),
+ (163, 158, 8), (152, 152, 5), (141, 151, 5), (131, 150, 6),
+ (96, 140, 3), (98, 135, 1), (100, 130, 0), (106, 132, 3),
+ (113, 134, 7), (116, 137, 9), (119, 141, 11), (118, 141, 13),
+ (116, 135, 16), (81, 129, 29), (61, 119, 30), (41, 109, 31),
+ (33, 103, 32), (25, 97, 33), (12, 88, 33), (3, 80, 31),
+ (3, 75, 19), (8, 80, 16), (13, 86, 14), (19, 91, 10),
+ (25, 96, 6), (26, 98, 4), (27, 100, 3), (32, 104, 3),
+ (37, 106, 5), (37, 102, 9), (45, 104, 17), (53, 107, 26),
+ (64, 105, 33), (76, 103, 41), (99, 90, 55), (121, 73, 56),
+ (133, 82, 63), (141, 80, 59), (149, 79, 56), (149, 79, 50),
+ (150, 80, 44), (137, 95, 31), (120, 116, 31), (106, 126, 25),
+ (101, 128, 18), (86, 125, 16), (70, 119, 19), (54, 113, 22),
+ (45, 109, 23), (36, 106, 25), (24, 102, 32), (16, 97, 34),
+ (7, 84, 41), (7, 79, 43), (8, 74, 45), (14, 71, 42),
+ (20, 69, 40), (37, 75, 32), (59, 83, 27), (80, 97, 21),
+ (106, 101, 16), (144, 125, 9), (147, 130, 7), (150, 136, 5),
+ (148, 134, 6), (128, 128, 9), (110, 121, 12), (87, 112, 12),
+ (40, 91, 17), (25, 89, 19), (11, 87, 22), (11, 89, 22),
+ (11, 92, 22), (13, 95, 22), (18, 99, 22), (20, 100, 25),
+ (27, 103, 27), (25, 109, 26), (23, 107, 26), (21, 106, 27),
+ (20, 98, 29), (16, 90, 30), (8, 86, 29), (4, 84, 29),
+ (23, 88, 21), (42, 97, 17), (62, 107, 14), (74, 113, 12),
+ (86, 120, 11), (114, 138, 8), (139, 157, 4), (153, 169, 2),
+ (158, 166, 2), (147, 164, 3), (138, 161, 2), (130, 158, 2),
+ (108, 140, 2), (91, 123, 0), (76, 115, 3), (70, 115, 5),
+ (74, 113, 14), (77, 116, 17), (80, 120, 21), (93, 133, 28),
+ (111, 145, 44), (125, 152, 62), (124, 157, 76), (124, 159, 79),
+ (128, 161, 77), (111, 155, 70), (102, 152, 68), (94, 149, 66),
+ (85, 143, 57), (77, 137, 38), (65, 129, 23), (55, 125, 17),
+ (53, 120, 17), (54, 118, 15), (55, 116, 14), (57, 118, 10),
+ (60, 122, 8), (62, 126, 8), (63, 123, 7), (59, 119, 7),
+ (54, 115, 7), (46, 113, 12), (39, 106, 15), (28, 95, 19),
+ (20, 82, 21), (11, 71, 24), (6, 61, 25), (2, 54, 27),
+ (0, 47, 29), (0, 47, 27), (0, 47, 25), (4, 51, 21),
+ (12, 60, 16), (21, 73, 16), (27, 84, 15), (34, 94, 18),
+ (41, 102, 17), (49, 111, 18), (55, 118, 20), (61, 123, 23),
+ (64, 124, 26), (63, 124, 24), (64, 126, 25), (69, 130, 29),
+ (74, 130, 38), (74, 128, 46), (76, 132, 55), (78, 134, 63),
+ (72, 133, 68), (59, 124, 71), (52, 122, 73), (49, 118, 75),
+ (46, 115, 70), (42, 113, 60), (45, 116, 50), (61, 118, 48),
+ (75, 120, 48), (86, 125, 45), (90, 129, 41), (94, 130, 40),
+ (95, 128, 38), (87, 122, 36), (75, 115, 32), (60, 107, 29),
+ (45, 104, 27), (32, 96, 24), (25, 91, 22), (22, 91, 20),
+ (18, 96, 21), (21, 101, 23), (28, 103, 27), (45, 108, 32),
+ (63, 115, 46), (83, 127, 66), (101, 142, 91), (121, 157, 110),
+ (141, 163, 118), (152, 169, 127), (150, 173, 133), (137, 175, 134),
+ (124, 168, 119), (113, 157, 101), (100, 149, 87), (86, 141, 73),
+ (73, 135, 63), (77, 133, 54), (87, 134, 63), (108, 136, 82),
+ (128, 146, 103), (142, 160, 109), (152, 169, 98), (165, 164, 88),
+ (191, 167, 85), (204, 177, 79), (210, 189, 61), (209, 186, 33),
+ (220, 186, 12), (229, 193, 1), (234, 198, 1), (226, 199, 9)
+ ),
+
+// 495 Baby
+((168, 150, 133), (195, 153, 148), (200, 157, 153), (205, 162, 159),
+ (202, 161, 152), (200, 161, 145), (196, 163, 146), (193, 165, 147),
+ (179, 168, 150), (166, 161, 146), (154, 155, 142), (149, 147, 128),
+ (145, 140, 115), (139, 133, 107), (134, 127, 99), (133, 124, 95),
+ (133, 122, 91), (124, 120, 91), (118, 119, 90), (112, 119, 90),
+ (110, 119, 94), (109, 119, 99), (108, 122, 101), (107, 126, 104),
+ (124, 136, 118), (124, 145, 132), (125, 154, 146), (118, 168, 158),
+ (112, 182, 170), (111, 186, 173), (111, 191, 176), (104, 202, 179),
+ (105, 210, 180), (127, 205, 179), (142, 194, 181), (157, 184, 183),
+ (155, 180, 183), (154, 176, 184), (154, 173, 184), (154, 171, 184),
+ (152, 178, 171), (156, 179, 164), (160, 180, 158), (171, 176, 148),
+ (182, 172, 138), (182, 166, 136), (183, 161, 135), (178, 156, 134),
+ (172, 139, 133), (142, 112, 120), (137, 102, 117), (133, 93, 114),
+ (130, 96, 117), (127, 99, 121), (126, 104, 123), (126, 110, 126),
+ (93, 126, 142), (83, 131, 143), (73, 137, 145), (66, 130, 139),
+ (59, 124, 133), (65, 124, 128), (71, 124, 124), (80, 126, 106),
+ (83, 126, 101), (97, 124, 101), (100, 124, 110), (104, 125, 120),
+ (107, 125, 123), (111, 125, 126), (118, 123, 139), (126, 121, 141),
+ (133, 126, 145), (134, 126, 138), (135, 126, 132), (132, 122, 125),
+ (130, 119, 119), (130, 119, 114), (130, 119, 109), (130, 116, 97),
+ (133, 112, 90), (133, 98, 74), (131, 91, 68), (130, 84, 63),
+ (128, 79, 64), (126, 74, 66), (124, 70, 69), (123, 70, 75),
+ (140, 92, 97), (144, 103, 106), (149, 114, 115), (149, 122, 118),
+ (149, 131, 122), (146, 145, 131), (134, 159, 145), (117, 173, 158),
+ (102, 189, 172), (98, 190, 189), (107, 182, 180), (116, 175, 172),
+ (127, 169, 168), (138, 164, 164), (152, 152, 152), (162, 146, 146),
+ (162, 146, 149), (146, 152, 158), (130, 159, 167), (121, 166, 171),
+ (112, 173, 176), (93, 177, 173), (72, 180, 168), (57, 193, 165),
+ (45, 187, 157), (38, 175, 142), (37, 170, 142), (37, 166, 142),
+ (38, 163, 146), (37, 160, 149), (37, 154, 152), (37, 151, 152),
+ (37, 154, 148), (51, 152, 143), (65, 151, 139), (72, 150, 136),
+ (80, 149, 134), (85, 148, 130), (106, 140, 122), (124, 130, 114),
+ (124, 128, 103), (127, 122, 89), (128, 124, 87), (129, 126, 85),
+ (128, 127, 81), (129, 125, 86), (129, 123, 93), (129, 122, 98),
+ (121, 104, 116), (122, 106, 130), (124, 109, 144), (123, 110, 146),
+ (123, 112, 149), (126, 114, 155), (128, 107, 155), (131, 104, 143),
+ (130, 100, 134), (123, 81, 102), (123, 83, 99), (123, 86, 97),
+ (118, 92, 97), (107, 104, 97), (96, 118, 104), (83, 129, 113),
+ (57, 158, 125), (51, 157, 127), (45, 156, 130), (47, 158, 128),
+ (60, 158, 128), (71, 151, 130), (81, 140, 131), (96, 134, 128),
+ (110, 129, 120), (119, 127, 115), (118, 127, 113), (118, 128, 111),
+ (122, 134, 110), (117, 147, 120), (106, 158, 132), (101, 168, 152),
+ (87, 179, 178), (87, 177, 182), (87, 176, 186), (97, 181, 191),
+ (100, 174, 190), (100, 169, 186), (107, 176, 177), (106, 180, 172),
+ (88, 175, 162), (77, 170, 150), (81, 169, 152), (85, 164, 145),
+ (87, 150, 137), (98, 149, 141), (117, 154, 142), (134, 155, 143),
+ (140, 167, 142), (141, 172, 143), (143, 178, 144), (136, 183, 148),
+ (122, 179, 151), (105, 175, 153), (83, 172, 155), (68, 170, 157),
+ (61, 161, 156), (63, 157, 156), (71, 164, 160), (82, 160, 162),
+ (103, 153, 159), (118, 156, 154), (123, 154, 152), (129, 141, 147),
+ (133, 136, 139), (133, 129, 133), (131, 119, 130), (127, 109, 126),
+ (122, 99, 122), (121, 95, 120), (118, 90, 112), (115, 92, 100),
+ (114, 94, 87), (118, 89, 71), (123, 90, 58), (122, 93, 48),
+ (121, 93, 39), (121, 96, 46), (125, 101, 56), (124, 108, 65),
+ (120, 113, 85), (123, 119, 104), (130, 130, 112), (143, 138, 121),
+ (163, 136, 141), (184, 140, 155), (203, 151, 156), (220, 153, 157),
+ (225, 147, 158), (219, 144, 152), (211, 146, 139), (198, 143, 131),
+ (187, 137, 127), (181, 135, 123), (179, 139, 125), (180, 140, 127),
+ (179, 135, 122), (175, 134, 117), (169, 132, 113), (160, 126, 105),
+ (151, 118, 96), (146, 115, 89), (136, 114, 81), (130, 107, 75),
+ (129, 100, 69), (129, 97, 66), (127, 91, 65), (125, 83, 65),
+ (123, 82, 64), (119, 84, 62), (118, 86, 56), (115, 95, 50),
+ (116, 109, 52), (121, 120, 56), (121, 128, 55), (125, 135, 66),
+ (134, 143, 88), (136, 142, 97), (144, 136, 99), (162, 144, 117)
+ ),
+
+// 496 Banana
+((199, 176, 153), (195, 176, 150), (205, 186, 162), (216, 196, 174),
+ (213, 194, 172), (211, 192, 170), (210, 191, 170), (209, 191, 170),
+ (216, 194, 171), (218, 198, 176), (221, 202, 181), (221, 202, 181),
+ (221, 203, 181), (220, 203, 183), (219, 204, 185), (217, 204, 186),
+ (216, 204, 188), (213, 203, 189), (217, 205, 191), (221, 208, 194),
+ (226, 212, 197), (232, 217, 201), (232, 216, 200), (233, 216, 200),
+ (234, 213, 192), (228, 205, 182), (223, 198, 172), (216, 188, 160),
+ (209, 178, 148), (207, 173, 139), (205, 169, 131), (204, 160, 113),
+ (207, 157, 98), (212, 160, 92), (211, 157, 89), (211, 155, 86),
+ (209, 157, 92), (208, 160, 99), (206, 158, 102), (204, 157, 105),
+ (193, 148, 108), (191, 147, 108), (190, 147, 109), (192, 150, 112),
+ (194, 154, 115), (195, 157, 118), (197, 160, 122), (197, 166, 130),
+ (199, 170, 137), (203, 179, 150), (200, 179, 153), (197, 180, 156),
+ (196, 179, 157), (196, 179, 158), (196, 179, 158), (197, 180, 159),
+ (198, 184, 166), (202, 188, 170), (206, 192, 175), (208, 195, 178),
+ (211, 198, 181), (211, 198, 180), (212, 198, 180), (213, 195, 174),
+ (214, 190, 165), (214, 181, 149), (211, 175, 141), (209, 170, 134),
+ (208, 167, 129), (208, 165, 125), (206, 159, 118), (197, 151, 110),
+ (179, 140, 103), (177, 138, 102), (176, 137, 102), (173, 138, 105),
+ (171, 139, 109), (173, 141, 112), (176, 144, 116), (181, 149, 123),
+ (185, 152, 125), (181, 151, 124), (174, 144, 115), (168, 137, 106),
+ (164, 132, 99), (161, 128, 93), (155, 119, 82), (148, 113, 72),
+ (149, 105, 58), (151, 102, 46), (154, 100, 35), (159, 101, 33),
+ (165, 103, 32), (173, 106, 35), (178, 109, 35), (178, 111, 35),
+ (183, 115, 40), (189, 125, 65), (187, 129, 77), (185, 134, 90),
+ (186, 135, 95), (188, 137, 100), (189, 140, 108), (189, 144, 112),
+ (190, 147, 118), (191, 150, 118), (193, 154, 119), (193, 154, 120),
+ (194, 155, 121), (196, 156, 120), (198, 156, 121), (198, 158, 121),
+ (197, 159, 122), (195, 159, 123), (195, 159, 125), (195, 160, 127),
+ (196, 163, 130), (197, 164, 132), (198, 166, 132), (198, 166, 133),
+ (204, 167, 132), (205, 166, 131), (207, 166, 131), (206, 167, 132),
+ (206, 169, 134), (206, 171, 139), (208, 174, 145), (209, 177, 150),
+ (210, 183, 159), (211, 194, 172), (211, 194, 172), (212, 195, 172),
+ (212, 193, 170), (211, 189, 164), (209, 181, 150), (204, 170, 134),
+ (184, 143, 98), (173, 128, 80), (162, 113, 62), (154, 106, 56),
+ (146, 100, 51), (137, 95, 48), (130, 93, 48), (134, 98, 54),
+ (136, 105, 70), (149, 129, 102), (155, 135, 107), (161, 142, 113),
+ (173, 152, 126), (184, 162, 137), (190, 169, 142), (194, 175, 146),
+ (202, 180, 152), (203, 181, 152), (205, 183, 153), (208, 184, 152),
+ (209, 185, 151), (209, 184, 150), (207, 181, 148), (206, 175, 140),
+ (205, 167, 126), (199, 150, 95), (196, 145, 89), (193, 140, 83),
+ (189, 129, 68), (189, 125, 56), (193, 122, 42), (192, 124, 41),
+ (191, 127, 57), (193, 129, 59), (195, 132, 62), (197, 138, 74),
+ (201, 146, 86), (197, 149, 102), (193, 154, 112), (192, 157, 123),
+ (194, 162, 130), (194, 165, 137), (192, 170, 142), (192, 172, 148),
+ (193, 175, 152), (195, 177, 156), (198, 180, 157), (199, 181, 161),
+ (200, 183, 165), (201, 185, 166), (203, 187, 168), (208, 192, 174),
+ (211, 198, 182), (215, 204, 189), (221, 210, 196), (228, 217, 203),
+ (235, 225, 212), (238, 229, 217), (238, 232, 220), (240, 232, 220),
+ (240, 232, 221), (238, 229, 217), (232, 224, 213), (228, 219, 206),
+ (226, 216, 203), (224, 213, 198), (221, 210, 197), (218, 209, 195),
+ (217, 207, 194), (218, 206, 192), (217, 204, 189), (215, 201, 184),
+ (211, 194, 175), (208, 186, 163), (204, 177, 151), (200, 167, 136),
+ (193, 156, 122), (189, 148, 111), (186, 146, 107), (188, 145, 106),
+ (184, 143, 105), (185, 143, 107), (186, 147, 112), (192, 154, 118),
+ (196, 158, 122), (199, 161, 127), (202, 165, 131), (208, 170, 135),
+ (215, 175, 137), (217, 179, 142), (217, 184, 150), (218, 188, 159),
+ (221, 194, 165), (222, 198, 172), (220, 203, 181), (220, 208, 190),
+ (223, 212, 197), (227, 217, 202), (228, 220, 206), (231, 223, 211),
+ (231, 223, 212), (231, 222, 210), (229, 219, 206), (227, 216, 201),
+ (223, 210, 194), (220, 201, 187), (216, 193, 176), (213, 187, 166),
+ (208, 183, 156), (208, 176, 149), (206, 169, 143), (206, 165, 138),
+ (201, 166, 136), (199, 166, 136), (195, 162, 135), (193, 158, 133),
+ (186, 155, 131), (179, 150, 124), (184, 159, 133), (193, 166, 142)
+ ),
+
+// 497 Beach
+((131, 111, 158), (173, 150, 160), (177, 158, 172), (182, 167, 185),
+ (194, 179, 196), (206, 191, 208), (214, 198, 212), (223, 205, 217),
+ (240, 230, 231), (236, 229, 232), (233, 229, 234), (229, 214, 230),
+ (226, 199, 226), (223, 193, 223), (220, 187, 220), (217, 187, 219),
+ (215, 188, 218), (211, 180, 213), (207, 173, 212), (204, 167, 211),
+ (194, 162, 210), (184, 157, 210), (182, 156, 210), (180, 156, 210),
+ (178, 147, 194), (172, 138, 184), (166, 129, 175), (167, 129, 158),
+ (168, 130, 142), (173, 136, 136), (179, 143, 131), (190, 155, 124),
+ (193, 164, 127), (198, 179, 139), (202, 188, 145), (206, 197, 151),
+ (207, 200, 153), (209, 204, 156), (208, 203, 156), (208, 203, 157),
+ (202, 188, 157), (191, 172, 145), (181, 156, 133), (163, 140, 123),
+ (145, 125, 113), (136, 117, 113), (128, 110, 114), (113, 95, 122),
+ (102, 79, 122), (81, 65, 131), (76, 68, 145), (71, 72, 160),
+ (78, 81, 170), (86, 91, 180), (91, 96, 184), (96, 102, 188),
+ (126, 131, 204), (142, 147, 206), (159, 163, 208), (170, 172, 197),
+ (181, 181, 187), (185, 183, 182), (190, 185, 178), (201, 189, 173),
+ (204, 190, 171), (191, 174, 167), (179, 162, 168), (167, 151, 170),
+ (159, 146, 173), (151, 142, 177), (138, 130, 187), (125, 120, 198),
+ (107, 109, 213), (105, 111, 214), (104, 114, 215), (115, 121, 216),
+ (126, 129, 217), (132, 132, 216), (139, 135, 215), (149, 137, 211),
+ (151, 132, 203), (157, 110, 172), (153, 101, 160), (150, 93, 149),
+ (143, 88, 145), (136, 84, 142), (120, 68, 141), (106, 54, 131),
+ (80, 40, 128), (71, 43, 138), (63, 47, 148), (61, 49, 153),
+ (60, 51, 159), (61, 55, 163), (62, 58, 166), (63, 62, 169),
+ (65, 64, 173), (65, 67, 179), (66, 65, 179), (67, 63, 180),
+ (66, 62, 179), (66, 62, 178), (65, 60, 174), (61, 56, 168),
+ (56, 44, 156), (57, 43, 153), (58, 43, 150), (59, 45, 150),
+ (60, 47, 150), (65, 51, 150), (71, 58, 153), (77, 66, 159),
+ (84, 74, 164), (93, 91, 186), (96, 93, 190), (99, 96, 195),
+ (102, 100, 202), (108, 98, 200), (113, 90, 200), (118, 87, 199),
+ (125, 91, 209), (127, 93, 210), (130, 96, 212), (131, 97, 212),
+ (133, 98, 212), (139, 102, 214), (144, 113, 219), (153, 132, 226),
+ (161, 148, 231), (172, 172, 235), (174, 175, 236), (176, 178, 237),
+ (183, 182, 238), (185, 179, 239), (183, 177, 236), (176, 172, 229),
+ (158, 149, 217), (153, 135, 210), (148, 121, 203), (146, 116, 197),
+ (145, 111, 191), (137, 106, 185), (136, 106, 178), (139, 105, 178),
+ (140, 109, 182), (146, 113, 187), (145, 115, 186), (144, 118, 185),
+ (141, 117, 187), (138, 119, 187), (137, 117, 185), (137, 115, 181),
+ (139, 114, 156), (142, 116, 148), (145, 118, 141), (151, 120, 125),
+ (155, 124, 111), (158, 126, 97), (155, 123, 88), (152, 117, 83),
+ (150, 114, 80), (156, 120, 75), (157, 123, 73), (158, 127, 72),
+ (159, 126, 74), (161, 128, 76), (162, 130, 80), (168, 136, 83),
+ (173, 147, 85), (172, 146, 85), (172, 146, 86), (167, 142, 91),
+ (165, 139, 97), (163, 133, 106), (158, 120, 112), (154, 102, 116),
+ (146, 84, 123), (137, 74, 124), (134, 71, 125), (123, 64, 123),
+ (113, 53, 116), (98, 36, 113), (81, 24, 110), (74, 24, 97),
+ (50, 21, 79), (44, 18, 77), (38, 16, 75), (26, 11, 83),
+ (25, 14, 82), (31, 20, 87), (40, 30, 98), (52, 43, 113),
+ (67, 59, 131), (85, 77, 145), (105, 97, 155), (123, 116, 160),
+ (136, 128, 165), (148, 137, 164), (155, 141, 160), (155, 141, 158),
+ (154, 139, 152), (147, 132, 147), (140, 127, 145), (138, 122, 140),
+ (136, 119, 135), (138, 120, 131), (143, 126, 122), (149, 135, 120),
+ (158, 147, 118), (169, 157, 111), (179, 164, 102), (190, 174, 92),
+ (193, 178, 85), (192, 180, 85), (185, 171, 95), (169, 156, 102),
+ (157, 142, 111), (140, 128, 122), (129, 121, 132), (120, 111, 151),
+ (108, 101, 166), (101, 92, 172), (94, 86, 173), (91, 83, 163),
+ (94, 84, 158), (96, 84, 156), (101, 80, 160), (108, 77, 161),
+ (109, 76, 158), (108, 76, 157), (102, 75, 154), (96, 69, 157),
+ (92, 58, 162), (85, 52, 164), (79, 48, 167), (70, 46, 166),
+ (64, 46, 166), (61, 44, 166), (57, 43, 161), (54, 42, 157),
+ (51, 41, 152), (52, 39, 145), (54, 39, 139), (56, 36, 131),
+ (59, 34, 120), (62, 31, 113), (63, 33, 103), (65, 39, 103),
+ (71, 45, 105), (80, 51, 106), (95, 57, 110), (111, 72, 107),
+ (124, 92, 109), (119, 96, 121), (116, 100, 135), (120, 104, 151)
+ ),
+
+// 498 Beautiful
+((215, 129, 52), (194, 131, 15), (204, 142, 14), (214, 153, 13),
+ (233, 147, 29), (252, 142, 45), (235, 142, 69), (219, 143, 94),
+ (190, 147, 174), (134, 139, 168), (79, 132, 163), (71, 113, 153),
+ (64, 94, 144), (65, 78, 135), (67, 62, 126), (65, 64, 125),
+ (64, 66, 125), (106, 108, 97), (153, 117, 88), (200, 126, 79),
+ (220, 131, 63), (240, 136, 47), (243, 139, 52), (246, 142, 57),
+ (219, 188, 71), (216, 173, 77), (214, 158, 83), (206, 136, 66),
+ (199, 114, 50), (190, 115, 36), (182, 116, 22), (155, 121, 0),
+ (136, 108, 8), (147, 144, 49), (130, 139, 63), (114, 135, 78),
+ (93, 101, 102), (72, 68, 127), (66, 69, 126), (61, 70, 125),
+ (38, 140, 154), (44, 150, 166), (51, 161, 178), (45, 156, 178),
+ (40, 151, 178), (33, 148, 159), (26, 145, 141), (52, 155, 125),
+ (96, 142, 78), (173, 127, 33), (187, 141, 62), (201, 156, 91),
+ (195, 156, 134), (190, 157, 178), (192, 161, 183), (195, 166, 188),
+ (183, 153, 187), (124, 162, 195), (66, 171, 203), (48, 174, 194),
+ (30, 177, 185), (26, 169, 185), (23, 162, 185), (37, 139, 177),
+ (70, 113, 155), (147, 96, 93), (170, 109, 75), (193, 122, 58),
+ (197, 122, 58), (202, 122, 59), (203, 122, 56), (205, 123, 47),
+ (255, 138, 38), (253, 141, 42), (252, 144, 46), (242, 172, 45),
+ (233, 200, 45), (227, 194, 68), (222, 188, 91), (211, 176, 156),
+ (194, 156, 177), (191, 144, 176), (184, 151, 161), (177, 159, 147),
+ (187, 156, 116), (198, 153, 86), (212, 142, 83), (200, 123, 69),
+ (166, 108, 88), (170, 74, 117), (174, 41, 146), (166, 40, 145),
+ (159, 39, 145), (147, 30, 134), (157, 19, 114), (134, 32, 132),
+ (82, 52, 126), (66, 72, 130), (60, 108, 142), (54, 144, 155),
+ (49, 144, 166), (44, 144, 178), (40, 153, 185), (49, 174, 204),
+ (77, 144, 170), (104, 134, 132), (131, 124, 95), (139, 118, 94),
+ (148, 113, 93), (144, 104, 112), (144, 106, 119), (96, 118, 132),
+ (54, 139, 178), (48, 99, 178), (65, 93, 162), (82, 88, 146),
+ (128, 57, 137), (156, 46, 143), (151, 43, 144), (134, 37, 130),
+ (71, 60, 129), (59, 84, 127), (47, 108, 126), (51, 113, 121),
+ (56, 118, 117), (66, 133, 149), (75, 132, 161), (152, 133, 163),
+ (182, 140, 190), (84, 143, 173), (74, 141, 170), (64, 139, 168),
+ (84, 132, 146), (151, 125, 128), (175, 114, 86), (204, 123, 58),
+ (208, 123, 40), (196, 122, 27), (184, 121, 15), (183, 118, 18),
+ (182, 116, 22), (143, 137, 39), (109, 119, 66), (103, 115, 69),
+ (68, 108, 71), (35, 80, 122), (39, 79, 125), (43, 79, 129),
+ (40, 67, 122), (44, 56, 114), (61, 40, 109), (74, 51, 119),
+ (103, 24, 116), (99, 26, 116), (95, 29, 116), (85, 34, 111),
+ (60, 30, 104), (60, 39, 106), (47, 58, 112), (43, 63, 113),
+ (49, 66, 109), (67, 41, 112), (86, 31, 123), (106, 22, 134),
+ (126, 21, 175), (186, 17, 196), (190, 6, 192), (157, 0, 159),
+ (122, 36, 143), (100, 55, 141), (79, 74, 140), (82, 102, 161),
+ (72, 150, 188), (73, 159, 184), (81, 160, 177), (149, 164, 143),
+ (172, 189, 83), (135, 201, 91), (101, 206, 166), (55, 168, 184),
+ (57, 160, 179), (49, 156, 172), (45, 141, 163), (31, 128, 135),
+ (46, 66, 116), (48, 55, 110), (50, 44, 104), (48, 39, 94),
+ (46, 11, 77), (21, 19, 82), (36, 21, 90), (39, 34, 92),
+ (54, 34, 103), (65, 45, 108), (102, 48, 126), (143, 38, 141),
+ (169, 41, 138), (185, 95, 97), (151, 102, 98), (143, 95, 91),
+ (85, 58, 93), (50, 55, 111), (40, 48, 110), (31, 56, 110),
+ (37, 46, 101), (36, 34, 109), (47, 35, 109), (48, 41, 108),
+ (63, 59, 118), (119, 85, 118), (143, 104, 87), (153, 118, 90),
+ (155, 149, 53), (165, 152, 58), (185, 176, 71), (187, 179, 80),
+ (206, 159, 77), (203, 154, 88), (183, 161, 85), (171, 168, 87),
+ (161, 162, 82), (171, 161, 76), (173, 128, 95), (178, 131, 105),
+ (187, 146, 160), (171, 117, 153), (154, 53, 183), (146, 50, 176),
+ (159, 64, 184), (188, 135, 177), (186, 152, 189), (189, 156, 185),
+ (186, 156, 194), (63, 190, 222), (23, 220, 239), (23, 220, 239),
+ (54, 177, 210), (57, 154, 187), (58, 144, 167), (49, 86, 138),
+ (69, 66, 133), (74, 66, 123), (105, 115, 62), (174, 122, 13),
+ (199, 119, 20), (208, 137, 0), (209, 144, 14), (203, 151, 13),
+ (206, 143, 12), (200, 136, 13), (191, 124, 17), (179, 113, 17),
+ (165, 124, 0), (177, 133, 0), (213, 155, 12), (197, 144, 2)
+ ),
+
+// 499 Before_Dawn
+((85, 88, 111), (80, 81, 94), (91, 90, 103), (102, 100, 113),
+ (118, 117, 129), (135, 134, 145), (139, 138, 149), (144, 143, 154),
+ (143, 142, 158), (134, 134, 150), (126, 126, 142), (107, 108, 125),
+ (88, 91, 109), (73, 75, 90), (58, 59, 71), (49, 51, 62),
+ (41, 43, 54), (16, 18, 27), (11, 12, 19), (6, 7, 12),
+ (5, 5, 8), (4, 4, 4), (3, 3, 3), (3, 3, 3),
+ (2, 3, 2), (1, 2, 2), (1, 2, 3), (1, 1, 2),
+ (1, 0, 2), (0, 0, 2), (0, 0, 2), (0, 0, 3),
+ (0, 0, 4), (0, 0, 6), (0, 0, 7), (0, 1, 9),
+ (1, 2, 12), (3, 4, 15), (4, 6, 17), (6, 8, 20),
+ (16, 20, 34), (24, 28, 46), (32, 37, 58), (36, 43, 68),
+ (40, 50, 79), (40, 50, 79), (41, 50, 79), (40, 48, 78),
+ (36, 46, 78), (25, 35, 67), (20, 28, 53), (15, 22, 40),
+ (12, 18, 36), (10, 15, 33), (10, 14, 31), (10, 13, 29),
+ (9, 12, 20), (7, 10, 19), (6, 8, 18), (4, 6, 16),
+ (3, 5, 14), (2, 4, 13), (2, 4, 13), (1, 3, 12),
+ (1, 3, 11), (1, 2, 8), (1, 2, 8), (1, 2, 9),
+ (1, 2, 10), (2, 3, 11), (4, 5, 15), (5, 7, 20),
+ (8, 12, 27), (9, 13, 30), (10, 14, 33), (10, 14, 32),
+ (10, 15, 32), (10, 14, 29), (10, 14, 27), (10, 13, 24),
+ (9, 12, 23), (11, 15, 26), (13, 17, 30), (16, 19, 35),
+ (18, 21, 38), (20, 24, 42), (25, 30, 49), (28, 34, 56),
+ (42, 48, 74), (51, 56, 82), (60, 64, 90), (62, 66, 94),
+ (64, 69, 99), (66, 73, 102), (66, 72, 103), (65, 69, 98),
+ (60, 64, 92), (40, 46, 70), (31, 36, 56), (23, 26, 42),
+ (20, 22, 36), (18, 19, 30), (11, 14, 24), (9, 12, 22),
+ (13, 15, 26), (20, 23, 36), (28, 32, 47), (33, 37, 53),
+ (38, 42, 60), (46, 52, 79), (50, 59, 95), (51, 60, 103),
+ (51, 58, 99), (42, 50, 88), (35, 43, 82), (29, 37, 77),
+ (20, 25, 59), (13, 15, 38), (8, 10, 23), (4, 5, 15),
+ (2, 2, 10), (4, 4, 13), (6, 7, 16), (8, 9, 20),
+ (10, 12, 24), (17, 19, 34), (27, 30, 49), (40, 43, 65),
+ (51, 56, 82), (71, 80, 112), (77, 85, 118), (83, 91, 124),
+ (93, 100, 132), (97, 104, 132), (98, 106, 132), (95, 101, 125),
+ (84, 85, 105), (77, 77, 93), (71, 69, 82), (66, 65, 77),
+ (62, 61, 73), (56, 54, 68), (54, 52, 67), (56, 52, 64),
+ (58, 55, 67), (69, 69, 91), (73, 72, 97), (77, 76, 103),
+ (84, 84, 113), (94, 94, 124), (105, 107, 139), (116, 117, 149),
+ (125, 126, 150), (123, 126, 148), (122, 126, 147), (115, 118, 141),
+ (105, 108, 128), (90, 92, 111), (72, 75, 92), (52, 55, 74),
+ (35, 37, 56), (13, 14, 24), (10, 10, 19), (7, 7, 14),
+ (3, 3, 7), (1, 0, 3), (0, 0, 1), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 1, 1), (1, 2, 2), (2, 3, 3), (5, 6, 7),
+ (10, 11, 13), (17, 19, 24), (29, 30, 38), (45, 46, 56),
+ (65, 65, 76), (84, 84, 100), (106, 106, 125), (126, 130, 154),
+ (169, 173, 199), (177, 181, 205), (186, 189, 211), (197, 200, 223),
+ (212, 217, 238), (224, 228, 248), (233, 236, 247), (234, 235, 245),
+ (236, 237, 246), (238, 236, 245), (236, 235, 241), (225, 226, 236),
+ (214, 215, 230), (209, 208, 224), (208, 205, 218), (202, 202, 216),
+ (195, 195, 211), (191, 191, 207), (192, 192, 205), (191, 193, 205),
+ (188, 189, 204), (182, 183, 201), (175, 176, 194), (163, 166, 185),
+ (151, 154, 175), (133, 138, 162), (116, 120, 146), (94, 98, 122),
+ (74, 77, 101), (52, 57, 82), (35, 41, 64), (21, 25, 44),
+ (10, 13, 29), (3, 5, 20), (0, 2, 15), (0, 1, 10),
+ (2, 2, 7), (4, 4, 8), (7, 8, 13), (13, 14, 20),
+ (22, 23, 29), (35, 37, 42), (51, 54, 62), (71, 73, 84),
+ (90, 93, 107), (108, 111, 127), (125, 129, 146), (142, 145, 164),
+ (155, 156, 175), (162, 162, 183), (165, 166, 187), (164, 165, 189),
+ (157, 159, 184), (146, 148, 174), (135, 138, 162), (123, 127, 153),
+ (104, 111, 139), (82, 90, 120), (63, 72, 99), (50, 58, 82),
+ (38, 45, 66), (26, 33, 53), (19, 26, 45), (19, 25, 43),
+ (23, 28, 46), (33, 37, 55), (45, 51, 69), (61, 68, 88),
+ (74, 81, 104), (68, 74, 95), (64, 68, 87), (65, 69, 89)
+ ),
+
+// 500 Beginning_to_Thaw
+((205, 239, 212), (205, 231, 216), (202, 226, 212), (200, 222, 209),
+ (191, 210, 195), (182, 198, 181), (175, 189, 171), (168, 180, 161),
+ (131, 153, 115), (119, 141, 97), (107, 130, 80), (112, 123, 79),
+ (117, 116, 79), (128, 124, 83), (139, 132, 87), (145, 137, 89),
+ (151, 142, 92), (179, 162, 122), (185, 169, 136), (191, 177, 151),
+ (191, 188, 158), (191, 199, 165), (191, 202, 169), (191, 205, 173),
+ (187, 191, 178), (181, 185, 163), (176, 179, 149), (169, 168, 142),
+ (163, 157, 135), (161, 150, 134), (160, 144, 134), (155, 138, 117),
+ (152, 140, 106), (151, 140, 103), (156, 139, 114), (162, 138, 126),
+ (170, 147, 132), (178, 156, 138), (180, 159, 137), (183, 163, 137),
+ (176, 148, 129), (159, 135, 114), (143, 123, 100), (121, 110, 81),
+ (99, 98, 63), (87, 91, 54), (76, 84, 46), (57, 77, 28),
+ (41, 66, 17), (31, 66, 8), (38, 70, 8), (46, 75, 9),
+ (51, 79, 11), (56, 83, 14), (59, 86, 19), (62, 90, 25),
+ (86, 120, 51), (97, 126, 60), (109, 133, 70), (106, 132, 82),
+ (103, 132, 94), (99, 134, 105), (96, 136, 116), (101, 147, 138),
+ (105, 159, 156), (117, 166, 169), (113, 158, 170), (110, 151, 172),
+ (110, 149, 172), (111, 147, 172), (116, 142, 169), (128, 140, 156),
+ (135, 117, 124), (138, 105, 109), (141, 93, 94), (137, 88, 86),
+ (133, 83, 79), (134, 82, 77), (135, 81, 76), (142, 84, 83),
+ (154, 93, 96), (167, 121, 128), (166, 128, 139), (166, 135, 151),
+ (169, 137, 155), (173, 139, 159), (182, 142, 161), (188, 146, 156),
+ (180, 135, 128), (173, 120, 108), (166, 106, 89), (162, 102, 80),
+ (158, 98, 72), (153, 87, 56), (144, 82, 44), (142, 80, 37),
+ (142, 78, 37), (144, 81, 53), (134, 80, 60), (125, 80, 68),
+ (119, 81, 68), (113, 83, 68), (101, 84, 67), (96, 82, 67),
+ (86, 77, 72), (82, 91, 79), (78, 105, 86), (77, 112, 89),
+ (77, 120, 93), (84, 137, 100), (99, 152, 107), (115, 172, 126),
+ (138, 197, 144), (164, 229, 171), (167, 231, 170), (171, 234, 169),
+ (169, 234, 159), (165, 224, 151), (161, 211, 143), (150, 192, 135),
+ (134, 153, 106), (127, 133, 85), (120, 114, 64), (115, 102, 56),
+ (111, 91, 49), (100, 74, 38), (93, 58, 31), (86, 53, 23),
+ (86, 54, 16), (92, 61, 18), (92, 63, 21), (93, 65, 24),
+ (95, 78, 34), (105, 99, 48), (122, 119, 61), (138, 140, 80),
+ (151, 166, 115), (157, 175, 129), (164, 184, 143), (165, 186, 147),
+ (167, 189, 151), (163, 187, 150), (144, 178, 149), (126, 165, 145),
+ (116, 151, 141), (113, 141, 140), (112, 140, 140), (111, 139, 141),
+ (107, 141, 142), (112, 145, 144), (124, 153, 149), (146, 169, 156),
+ (183, 196, 180), (188, 201, 185), (193, 207, 191), (199, 216, 201),
+ (205, 224, 203), (215, 226, 202), (221, 228, 200), (223, 227, 200),
+ (217, 229, 207), (200, 223, 215), (198, 221, 215), (196, 220, 215),
+ (193, 219, 216), (188, 225, 219), (182, 226, 220), (180, 222, 218),
+ (188, 215, 209), (189, 216, 208), (191, 217, 208), (195, 219, 204),
+ (204, 218, 200), (206, 211, 192), (215, 205, 182), (218, 201, 178),
+ (215, 199, 177), (218, 199, 179), (212, 194, 181), (207, 191, 183),
+ (203, 190, 186), (196, 189, 186), (195, 190, 184), (196, 190, 183),
+ (195, 204, 187), (195, 208, 190), (195, 213, 194), (195, 221, 197),
+ (203, 224, 201), (205, 229, 207), (211, 237, 214), (216, 246, 226),
+ (216, 250, 233), (221, 249, 239), (225, 243, 241), (231, 239, 240),
+ (236, 239, 241), (237, 240, 240), (235, 242, 242), (230, 239, 243),
+ (227, 234, 240), (223, 228, 233), (222, 224, 225), (218, 221, 219),
+ (212, 213, 212), (209, 205, 204), (208, 194, 196), (212, 186, 189),
+ (218, 181, 188), (224, 178, 185), (229, 180, 181), (232, 184, 176),
+ (238, 191, 173), (241, 200, 179), (241, 209, 187), (237, 216, 195),
+ (231, 225, 199), (224, 230, 199), (220, 233, 201), (214, 232, 203),
+ (210, 227, 206), (207, 221, 207), (206, 216, 208), (209, 214, 209),
+ (211, 212, 211), (217, 214, 213), (218, 215, 210), (224, 219, 207),
+ (232, 223, 206), (238, 227, 208), (240, 230, 214), (232, 233, 219),
+ (220, 233, 218), (210, 229, 215), (200, 224, 211), (196, 213, 208),
+ (186, 202, 202), (176, 189, 194), (172, 178, 188), (170, 167, 178),
+ (176, 160, 175), (179, 156, 170), (183, 152, 162), (192, 152, 161),
+ (204, 152, 157), (216, 155, 159), (227, 164, 160), (231, 175, 154),
+ (231, 186, 153), (231, 196, 156), (223, 202, 159), (219, 208, 164),
+ (214, 215, 169), (211, 224, 175), (210, 233, 188), (207, 237, 203)
+ ),
+
+// 501 Beige
+((106, 95, 83), (97, 88, 77), (89, 81, 72), (81, 74, 67),
+ (69, 64, 60), (57, 54, 53), (55, 53, 52), (53, 52, 51),
+ (50, 50, 49), (50, 50, 49), (51, 51, 49), (53, 52, 50),
+ (56, 54, 51), (59, 56, 53), (62, 58, 56), (62, 59, 56),
+ (63, 60, 57), (63, 61, 58), (63, 61, 58), (63, 61, 59),
+ (64, 62, 59), (66, 63, 60), (67, 63, 60), (68, 63, 61),
+ (67, 62, 60), (67, 62, 59), (67, 62, 59), (68, 63, 60),
+ (70, 65, 62), (72, 66, 64), (74, 68, 66), (77, 70, 69),
+ (79, 72, 71), (83, 74, 72), (83, 74, 72), (83, 75, 72),
+ (84, 75, 72), (85, 76, 73), (85, 76, 73), (85, 77, 74),
+ (88, 78, 74), (90, 79, 74), (92, 80, 74), (94, 81, 74),
+ (96, 83, 75), (97, 84, 75), (98, 85, 75), (102, 88, 76),
+ (107, 91, 77), (120, 98, 82), (123, 100, 84), (127, 103, 87),
+ (126, 104, 88), (126, 106, 89), (125, 106, 89), (125, 106, 89),
+ (123, 104, 87), (122, 102, 86), (121, 100, 85), (116, 97, 83),
+ (112, 95, 81), (109, 93, 80), (106, 91, 79), (99, 86, 76),
+ (95, 82, 73), (89, 76, 67), (89, 75, 66), (90, 75, 66),
+ (90, 75, 66), (91, 76, 67), (93, 78, 69), (96, 81, 73),
+ (105, 89, 80), (110, 93, 84), (115, 98, 88), (118, 101, 91),
+ (121, 105, 94), (122, 106, 95), (123, 107, 97), (122, 108, 99),
+ (120, 107, 99), (114, 102, 94), (107, 97, 89), (100, 92, 85),
+ (96, 89, 82), (92, 86, 80), (84, 79, 74), (76, 72, 68),
+ (65, 61, 57), (61, 56, 53), (58, 52, 49), (57, 51, 48),
+ (56, 50, 47), (55, 49, 46), (55, 49, 46), (56, 49, 46),
+ (58, 50, 46), (65, 54, 46), (69, 56, 47), (73, 58, 48),
+ (74, 59, 48), (75, 60, 49), (77, 62, 52), (80, 65, 54),
+ (90, 74, 60), (97, 79, 64), (104, 84, 68), (107, 86, 70),
+ (110, 89, 73), (117, 95, 78), (122, 101, 83), (125, 105, 88),
+ (128, 109, 93), (133, 114, 100), (133, 115, 101), (133, 116, 102),
+ (134, 116, 104), (133, 115, 103), (129, 114, 101), (124, 110, 98),
+ (112, 101, 91), (106, 97, 88), (100, 93, 85), (98, 91, 83),
+ (97, 89, 81), (94, 86, 78), (91, 83, 73), (88, 79, 70),
+ (84, 76, 68), (76, 71, 63), (75, 70, 62), (74, 70, 62),
+ (73, 69, 63), (73, 69, 62), (74, 69, 62), (74, 69, 62),
+ (76, 70, 63), (78, 71, 64), (81, 72, 66), (82, 73, 67),
+ (84, 75, 68), (88, 78, 70), (94, 84, 75), (103, 91, 82),
+ (115, 100, 91), (148, 127, 112), (157, 135, 118), (166, 143, 125),
+ (180, 157, 136), (191, 167, 145), (197, 172, 150), (198, 174, 152),
+ (195, 170, 149), (194, 169, 148), (193, 168, 148), (189, 166, 143),
+ (183, 162, 139), (173, 153, 133), (161, 142, 124), (143, 128, 113),
+ (125, 112, 100), (94, 85, 76), (88, 80, 72), (82, 76, 69),
+ (72, 68, 63), (66, 62, 59), (60, 58, 56), (56, 55, 53),
+ (52, 53, 52), (52, 53, 52), (52, 53, 52), (53, 53, 52),
+ (53, 53, 52), (54, 53, 52), (55, 54, 53), (58, 55, 53),
+ (60, 57, 55), (63, 59, 57), (67, 61, 59), (71, 65, 63),
+ (78, 70, 67), (85, 75, 72), (93, 83, 78), (103, 91, 86),
+ (119, 103, 97), (121, 105, 99), (123, 107, 101), (125, 109, 102),
+ (125, 109, 101), (124, 108, 100), (123, 109, 102), (122, 107, 100),
+ (121, 106, 98), (117, 103, 95), (111, 98, 91), (104, 91, 85),
+ (94, 84, 77), (84, 77, 71), (75, 70, 65), (69, 65, 61),
+ (64, 61, 57), (60, 58, 55), (58, 55, 54), (57, 54, 53),
+ (57, 54, 52), (57, 54, 52), (57, 54, 52), (57, 53, 52),
+ (56, 53, 52), (56, 53, 52), (56, 52, 51), (56, 52, 50),
+ (56, 51, 50), (56, 51, 49), (57, 52, 49), (57, 52, 50),
+ (59, 54, 51), (60, 55, 52), (63, 58, 54), (67, 61, 55),
+ (71, 64, 58), (76, 68, 61), (81, 73, 64), (84, 76, 68),
+ (88, 79, 71), (90, 81, 73), (92, 83, 74), (93, 83, 75),
+ (92, 83, 74), (93, 83, 73), (91, 82, 73), (89, 80, 71),
+ (85, 77, 69), (81, 73, 66), (76, 69, 63), (70, 64, 59),
+ (65, 60, 56), (61, 56, 53), (57, 53, 51), (55, 52, 49),
+ (54, 51, 48), (56, 52, 48), (58, 54, 49), (61, 57, 51),
+ (65, 61, 54), (70, 66, 57), (77, 71, 62), (86, 79, 67),
+ (96, 87, 73), (108, 98, 80), (110, 100, 82), (111, 101, 83),
+ (111, 100, 83), (108, 97, 82), (105, 95, 81), (101, 90, 80)
+ ),
+
+// 502 Berry_Bush
+((160, 10, 24), (195, 13, 23), (194, 17, 27), (193, 22, 31),
+ (180, 30, 34), (168, 38, 38), (162, 42, 41), (156, 46, 44),
+ (141, 61, 52), (132, 71, 55), (124, 82, 59), (110, 86, 58),
+ (96, 91, 58), (83, 86, 58), (70, 82, 58), (67, 79, 59),
+ (65, 76, 60), (73, 70, 59), (86, 66, 52), (100, 62, 46),
+ (108, 53, 44), (117, 44, 43), (120, 41, 43), (124, 39, 43),
+ (149, 38, 34), (167, 45, 29), (185, 52, 24), (198, 63, 26),
+ (211, 74, 28), (212, 79, 28), (213, 85, 28), (208, 97, 28),
+ (200, 111, 28), (190, 140, 35), (190, 151, 39), (190, 162, 43),
+ (186, 168, 40), (183, 175, 38), (177, 176, 39), (171, 178, 40),
+ (131, 192, 59), (117, 193, 66), (104, 195, 74), (95, 188, 67),
+ (87, 182, 61), (82, 178, 58), (78, 175, 56), (72, 174, 57),
+ (69, 170, 67), (42, 160, 64), (36, 147, 55), (31, 135, 46),
+ (44, 123, 47), (57, 112, 49), (58, 109, 51), (60, 107, 53),
+ (52, 120, 71), (40, 126, 74), (29, 132, 77), (35, 126, 78),
+ (42, 121, 79), (43, 123, 78), (44, 126, 77), (39, 133, 75),
+ (34, 148, 72), (31, 181, 66), (45, 177, 53), (59, 173, 41),
+ (65, 165, 36), (71, 157, 31), (78, 140, 22), (77, 134, 16),
+ (66, 115, 16), (68, 104, 19), (71, 93, 23), (77, 79, 26),
+ (83, 65, 29), (83, 57, 30), (84, 50, 32), (84, 41, 27),
+ (80, 36, 23), (97, 44, 22), (108, 55, 23), (120, 66, 25),
+ (123, 69, 25), (127, 73, 26), (125, 72, 21), (121, 68, 19),
+ (104, 60, 13), (96, 63, 16), (88, 66, 19), (79, 65, 19),
+ (71, 64, 19), (54, 62, 19), (38, 57, 22), (20, 48, 22),
+ (14, 45, 19), (18, 53, 28), (29, 60, 34), (41, 67, 41),
+ (47, 71, 46), (53, 76, 51), (67, 83, 59), (81, 97, 63),
+ (110, 116, 71), (119, 126, 72), (129, 137, 73), (129, 142, 76),
+ (130, 147, 80), (122, 163, 84), (116, 176, 90), (108, 181, 100),
+ (98, 174, 94), (77, 154, 78), (67, 151, 74), (58, 149, 70),
+ (41, 153, 61), (26, 164, 68), (16, 168, 64), (11, 164, 58),
+ (27, 130, 44), (44, 118, 34), (61, 107, 24), (71, 109, 22),
+ (81, 111, 20), (99, 119, 16), (114, 128, 15), (128, 128, 21),
+ (148, 125, 30), (179, 130, 75), (177, 134, 83), (175, 138, 92),
+ (166, 154, 107), (147, 168, 120), (125, 181, 124), (115, 196, 141),
+ (89, 214, 168), (75, 220, 169), (61, 227, 170), (55, 224, 160),
+ (49, 222, 150), (47, 215, 136), (50, 209, 119), (54, 207, 109),
+ (57, 205, 93), (50, 210, 71), (52, 210, 67), (55, 210, 64),
+ (54, 206, 58), (50, 202, 55), (49, 201, 50), (40, 198, 45),
+ (27, 196, 40), (26, 191, 40), (25, 186, 40), (22, 177, 42),
+ (24, 174, 45), (25, 173, 47), (22, 172, 55), (22, 177, 60),
+ (22, 180, 67), (19, 183, 86), (18, 186, 92), (18, 190, 99),
+ (15, 196, 118), (13, 204, 133), (11, 211, 144), (10, 217, 149),
+ (21, 214, 145), (28, 209, 143), (35, 204, 141), (51, 191, 135),
+ (69, 170, 126), (87, 150, 110), (101, 133, 98), (118, 118, 82),
+ (137, 101, 70), (153, 89, 59), (170, 74, 49), (181, 58, 39),
+ (182, 46, 35), (176, 39, 33), (164, 33, 35), (151, 35, 36),
+ (119, 48, 39), (110, 56, 41), (101, 65, 43), (82, 83, 54),
+ (61, 99, 68), (43, 115, 82), (30, 131, 95), (19, 142, 101),
+ (14, 157, 108), (10, 176, 117), (6, 191, 128), (6, 203, 138),
+ (10, 214, 146), (17, 216, 147), (31, 207, 145), (48, 199, 137),
+ (66, 188, 124), (86, 171, 109), (102, 156, 96), (112, 146, 82),
+ (122, 135, 76), (135, 127, 74), (142, 118, 68), (149, 107, 60),
+ (156, 92, 53), (154, 82, 45), (143, 76, 40), (134, 78, 43),
+ (118, 83, 47), (100, 94, 55), (86, 108, 63), (75, 116, 70),
+ (61, 122, 70), (51, 129, 70), (42, 134, 67), (33, 135, 64),
+ (28, 139, 62), (23, 142, 61), (20, 147, 61), (17, 153, 60),
+ (14, 158, 58), (10, 156, 57), (10, 151, 52), (14, 139, 46),
+ (20, 130, 42), (29, 119, 39), (39, 115, 38), (49, 117, 44),
+ (59, 121, 50), (76, 113, 55), (91, 104, 57), (109, 91, 58),
+ (119, 79, 58), (126, 71, 57), (122, 71, 55), (119, 68, 53),
+ (111, 62, 50), (109, 56, 48), (100, 49, 49), (91, 41, 50),
+ (77, 37, 56), (62, 39, 56), (45, 34, 54), (35, 30, 51),
+ (34, 26, 45), (46, 24, 38), (64, 18, 41), (85, 17, 41),
+ (105, 12, 40), (119, 10, 39), (126, 7, 34), (143, 10, 27)
+ ),
+
+// 503 Biology_Class
+((157, 53, 16), (163, 96, 4), (158, 117, 4), (154, 138, 4),
+ (145, 159, 7), (136, 181, 10), (132, 189, 11), (129, 198, 12),
+ (103, 216, 9), (83, 213, 10), (64, 210, 11), (49, 198, 11),
+ (35, 186, 12), (27, 169, 15), (19, 152, 19), (14, 141, 20),
+ (10, 131, 22), (3, 86, 22), (3, 68, 23), (4, 50, 24),
+ (11, 48, 24), (19, 46, 25), (24, 50, 22), (30, 55, 19),
+ (43, 77, 8), (46, 86, 4), (50, 95, 1), (50, 100, 0),
+ (50, 106, 0), (48, 105, 2), (46, 105, 4), (47, 102, 10),
+ (44, 92, 19), (35, 60, 39), (36, 46, 50), (38, 33, 62),
+ (51, 26, 77), (64, 20, 92), (73, 19, 99), (83, 19, 106),
+ (113, 15, 127), (126, 15, 134), (139, 15, 141), (144, 16, 146),
+ (150, 17, 151), (148, 18, 151), (146, 19, 152), (137, 22, 149),
+ (126, 22, 152), (93, 18, 153), (77, 17, 142), (61, 16, 132),
+ (51, 15, 122), (41, 15, 112), (38, 15, 106), (35, 16, 101),
+ (27, 19, 74), (24, 22, 67), (21, 25, 60), (19, 31, 58),
+ (17, 38, 57), (15, 43, 56), (13, 48, 55), (7, 56, 49),
+ (3, 69, 45), (13, 96, 40), (20, 105, 37), (27, 115, 34),
+ (28, 116, 29), (29, 117, 24), (32, 116, 15), (35, 114, 10),
+ (45, 106, 28), (44, 97, 39), (44, 88, 50), (37, 78, 56),
+ (30, 68, 62), (27, 63, 65), (25, 59, 68), (20, 55, 73),
+ (18, 53, 80), (15, 52, 82), (13, 52, 79), (11, 53, 76),
+ (10, 54, 72), (9, 55, 69), (8, 60, 59), (11, 70, 51),
+ (29, 101, 42), (36, 119, 35), (44, 137, 28), (47, 144, 24),
+ (50, 152, 20), (56, 164, 15), (66, 173, 18), (77, 179, 26),
+ (86, 179, 34), (94, 160, 48), (91, 142, 51), (88, 124, 55),
+ (86, 118, 55), (84, 112, 56), (77, 99, 54), (67, 92, 51),
+ (42, 91, 39), (35, 99, 35), (28, 107, 32), (25, 111, 31),
+ (23, 115, 31), (25, 127, 30), (36, 138, 29), (49, 145, 31),
+ (62, 149, 34), (86, 144, 38), (93, 140, 38), (101, 136, 39),
+ (114, 125, 39), (122, 110, 38), (130, 97, 33), (131, 82, 30),
+ (128, 53, 37), (125, 39, 47), (122, 26, 57), (120, 21, 60),
+ (119, 16, 64), (110, 8, 69), (96, 5, 76), (81, 3, 85),
+ (70, 7, 95), (47, 21, 105), (40, 25, 102), (34, 30, 100),
+ (19, 36, 92), (8, 44, 83), (4, 55, 71), (3, 70, 62),
+ (19, 104, 46), (31, 118, 39), (43, 132, 32), (48, 139, 28),
+ (53, 146, 25), (63, 159, 21), (70, 167, 18), (78, 169, 21),
+ (83, 168, 24), (84, 153, 27), (83, 145, 27), (83, 138, 28),
+ (84, 120, 29), (87, 101, 29), (89, 80, 31), (97, 61, 32),
+ (110, 32, 30), (112, 27, 27), (115, 23, 24), (113, 20, 19),
+ (112, 19, 17), (109, 21, 12), (103, 27, 12), (97, 31, 8),
+ (87, 34, 4), (72, 43, 0), (72, 49, 0), (72, 56, 0),
+ (77, 71, 0), (83, 81, 0), (84, 85, 3), (81, 87, 6),
+ (67, 97, 13), (64, 100, 14), (61, 104, 16), (55, 106, 20),
+ (45, 106, 23), (33, 103, 25), (19, 98, 27), (8, 93, 33),
+ (2, 86, 42), (1, 80, 51), (1, 73, 60), (3, 61, 62),
+ (12, 50, 66), (25, 41, 76), (40, 33, 81), (53, 26, 86),
+ (66, 7, 75), (69, 4, 71), (73, 2, 67), (80, 4, 58),
+ (88, 15, 50), (94, 31, 45), (95, 49, 39), (90, 63, 32),
+ (81, 72, 26), (74, 83, 21), (68, 92, 19), (66, 100, 20),
+ (64, 102, 20), (60, 95, 19), (61, 86, 22), (61, 73, 27),
+ (63, 58, 34), (62, 45, 41), (55, 29, 42), (49, 19, 47),
+ (45, 15, 54), (42, 15, 63), (41, 18, 77), (36, 22, 85),
+ (25, 25, 93), (14, 30, 99), (4, 36, 104), (0, 43, 110),
+ (0, 50, 114), (0, 53, 117), (3, 55, 117), (10, 55, 113),
+ (19, 56, 105), (30, 58, 93), (40, 58, 79), (48, 60, 64),
+ (56, 58, 53), (61, 56, 45), (66, 57, 43), (66, 55, 44),
+ (63, 58, 49), (59, 62, 57), (50, 66, 67), (41, 76, 81),
+ (29, 83, 91), (19, 89, 96), (13, 98, 96), (8, 105, 91),
+ (7, 117, 87), (12, 127, 82), (22, 128, 72), (32, 122, 59),
+ (44, 111, 43), (53, 99, 28), (67, 90, 23), (88, 82, 21),
+ (108, 70, 25), (126, 61, 37), (139, 50, 44), (150, 39, 53),
+ (163, 34, 62), (173, 27, 68), (179, 25, 78), (181, 23, 84),
+ (180, 20, 86), (179, 17, 85), (177, 10, 77), (175, 5, 66),
+ (170, 3, 54), (165, 7, 42), (160, 17, 31), (157, 33, 23)
+ ),
+
+// 504 Birthday_Party
+((55, 78, 72), (63, 106, 50), (58, 130, 45), (53, 155, 41),
+ (60, 159, 59), (68, 164, 78), (74, 164, 86), (80, 164, 95),
+ (98, 167, 109), (109, 167, 131), (121, 168, 154), (129, 163, 171),
+ (138, 158, 188), (142, 162, 186), (147, 167, 185), (148, 165, 184),
+ (149, 164, 184), (154, 169, 196), (154, 173, 199), (155, 178, 202),
+ (153, 173, 193), (152, 169, 184), (152, 164, 177), (152, 160, 170),
+ (144, 123, 153), (143, 105, 142), (142, 87, 131), (144, 71, 116),
+ (147, 56, 102), (148, 51, 99), (150, 47, 96), (156, 41, 92),
+ (162, 36, 93), (165, 39, 82), (169, 43, 73), (173, 48, 65),
+ (179, 47, 60), (186, 46, 55), (185, 44, 51), (185, 43, 47),
+ (178, 32, 35), (180, 27, 40), (183, 23, 46), (189, 20, 58),
+ (196, 18, 71), (199, 19, 76), (202, 20, 81), (201, 25, 93),
+ (203, 33, 100), (209, 53, 112), (212, 58, 121), (215, 63, 131),
+ (204, 63, 131), (193, 64, 131), (184, 64, 125), (175, 65, 120),
+ (150, 94, 102), (140, 99, 94), (131, 104, 87), (129, 105, 73),
+ (128, 106, 59), (127, 109, 54), (127, 113, 49), (133, 118, 55),
+ (137, 108, 59), (151, 77, 65), (151, 64, 78), (152, 51, 92),
+ (150, 43, 98), (149, 35, 105), (155, 25, 102), (149, 20, 98),
+ (125, 32, 80), (123, 49, 79), (121, 66, 78), (124, 88, 70),
+ (127, 111, 63), (127, 120, 60), (127, 130, 58), (119, 144, 64),
+ (114, 154, 75), (132, 172, 96), (139, 177, 105), (147, 183, 115),
+ (141, 181, 118), (136, 180, 121), (131, 166, 121), (125, 158, 115),
+ (129, 137, 103), (129, 122, 103), (130, 108, 104), (132, 102, 105),
+ (135, 97, 106), (135, 90, 113), (138, 84, 120), (144, 82, 133),
+ (144, 82, 151), (147, 95, 187), (138, 112, 196), (129, 130, 205),
+ (125, 137, 206), (121, 145, 207), (116, 155, 205), (121, 156, 204),
+ (126, 158, 185), (131, 155, 177), (136, 152, 169), (140, 146, 168),
+ (145, 140, 167), (147, 125, 164), (144, 109, 160), (136, 99, 152),
+ (126, 88, 141), (107, 79, 120), (104, 74, 118), (101, 69, 116),
+ (93, 65, 112), (87, 67, 106), (88, 75, 103), (96, 88, 99),
+ (125, 94, 120), (140, 95, 135), (155, 97, 150), (160, 100, 153),
+ (166, 103, 157), (176, 108, 155), (183, 108, 158), (192, 110, 161),
+ (196, 109, 164), (207, 133, 151), (201, 140, 148), (195, 148, 145),
+ (186, 165, 140), (165, 173, 150), (148, 183, 164), (136, 196, 173),
+ (102, 218, 178), (85, 216, 176), (69, 215, 175), (64, 215, 174),
+ (60, 215, 174), (51, 202, 175), (62, 193, 164), (84, 182, 149),
+ (108, 165, 136), (146, 144, 129), (155, 139, 129), (164, 135, 129),
+ (186, 126, 128), (204, 114, 127), (213, 107, 122), (212, 102, 120),
+ (191, 100, 104), (186, 96, 98), (182, 93, 92), (167, 95, 77),
+ (152, 93, 65), (139, 93, 53), (130, 91, 50), (131, 85, 55),
+ (131, 90, 59), (116, 111, 79), (112, 114, 84), (109, 118, 89),
+ (110, 115, 107), (118, 109, 128), (131, 106, 150), (134, 114, 165),
+ (138, 121, 176), (139, 120, 178), (140, 119, 180), (150, 106, 189),
+ (154, 97, 193), (157, 91, 198), (151, 88, 203), (139, 83, 192),
+ (131, 75, 187), (120, 61, 179), (121, 48, 160), (116, 39, 155),
+ (116, 27, 131), (120, 21, 109), (126, 20, 94), (146, 24, 79),
+ (170, 46, 79), (171, 52, 79), (172, 58, 80), (168, 72, 84),
+ (169, 83, 96), (163, 98, 119), (155, 110, 136), (142, 118, 156),
+ (128, 126, 169), (119, 128, 173), (112, 130, 179), (109, 125, 170),
+ (99, 112, 162), (92, 99, 151), (91, 85, 135), (90, 79, 122),
+ (102, 71, 103), (107, 59, 83), (116, 49, 64), (129, 44, 50),
+ (138, 58, 45), (154, 78, 44), (169, 101, 52), (181, 109, 57),
+ (191, 110, 67), (198, 115, 76), (202, 111, 85), (208, 119, 108),
+ (211, 110, 127), (215, 97, 139), (215, 86, 145), (214, 69, 136),
+ (210, 62, 128), (200, 49, 122), (194, 43, 108), (191, 37, 99),
+ (197, 36, 81), (207, 45, 67), (204, 42, 59), (195, 43, 50),
+ (186, 37, 47), (187, 33, 45), (199, 40, 52), (213, 51, 65),
+ (218, 65, 77), (208, 79, 94), (197, 93, 108), (179, 102, 119),
+ (164, 118, 132), (150, 125, 138), (133, 131, 142), (118, 131, 149),
+ (103, 125, 161), (91, 125, 172), (78, 122, 184), (76, 132, 185),
+ (75, 138, 184), (80, 147, 188), (83, 156, 188), (84, 156, 190),
+ (86, 160, 182), (85, 156, 167), (87, 151, 161), (77, 148, 149),
+ (72, 133, 138), (66, 113, 127), (68, 90, 109), (71, 63, 102),
+ (67, 59, 93), (63, 62, 80), (49, 70, 79), (55, 81, 75)
+ ),
+
+// 505 Bistro
+((181, 69, 63), (185, 79, 72), (191, 77, 72), (197, 76, 72),
+ (196, 67, 65), (195, 58, 58), (191, 53, 54), (188, 48, 50),
+ (173, 41, 43), (171, 42, 46), (169, 44, 49), (171, 48, 51),
+ (174, 52, 53), (175, 58, 54), (176, 65, 55), (176, 66, 53),
+ (177, 67, 51), (183, 76, 48), (190, 83, 47), (197, 91, 46),
+ (204, 109, 39), (211, 127, 33), (211, 131, 30), (211, 136, 27),
+ (196, 129, 17), (186, 120, 16), (176, 111, 15), (168, 112, 16),
+ (161, 114, 17), (156, 113, 19), (152, 112, 21), (140, 104, 25),
+ (128, 91, 30), (112, 68, 44), (113, 72, 51), (115, 77, 58),
+ (124, 92, 69), (133, 107, 80), (137, 112, 84), (142, 117, 89),
+ (165, 138, 104), (173, 142, 106), (181, 147, 109), (180, 145, 108),
+ (179, 144, 107), (175, 139, 105), (171, 135, 103), (164, 123, 95),
+ (157, 106, 85), (154, 81, 66), (152, 73, 61), (150, 65, 57),
+ (151, 62, 58), (152, 60, 60), (154, 61, 61), (157, 62, 62),
+ (162, 65, 62), (162, 64, 62), (162, 63, 63), (160, 61, 62),
+ (158, 59, 62), (157, 59, 60), (156, 60, 59), (147, 56, 54),
+ (134, 49, 47), (101, 34, 28), (91, 32, 22), (81, 30, 17),
+ (80, 32, 16), (80, 34, 16), (84, 36, 16), (90, 39, 21),
+ (109, 50, 35), (117, 57, 37), (126, 64, 40), (137, 69, 36),
+ (149, 75, 32), (158, 80, 31), (168, 85, 31), (188, 96, 33),
+ (205, 115, 40), (225, 140, 56), (224, 144, 54), (223, 149, 53),
+ (223, 148, 49), (224, 148, 45), (228, 158, 38), (231, 165, 44),
+ (229, 181, 70), (226, 178, 76), (223, 175, 82), (224, 173, 73),
+ (225, 171, 64), (229, 166, 49), (232, 161, 40), (232, 160, 38),
+ (225, 156, 48), (208, 141, 49), (197, 133, 37), (186, 126, 26),
+ (181, 122, 22), (176, 118, 18), (158, 108, 15), (144, 95, 16),
+ (113, 68, 18), (104, 61, 15), (96, 54, 13), (93, 52, 10),
+ (91, 51, 8), (93, 47, 6), (94, 44, 6), (99, 43, 8),
+ (105, 41, 10), (123, 40, 15), (126, 38, 16), (130, 37, 18),
+ (138, 35, 20), (146, 36, 22), (152, 37, 25), (158, 40, 27),
+ (167, 43, 32), (172, 43, 34), (178, 43, 37), (179, 43, 39),
+ (180, 43, 41), (179, 43, 41), (175, 43, 38), (165, 43, 39),
+ (154, 45, 38), (148, 66, 45), (148, 73, 47), (149, 81, 50),
+ (148, 93, 55), (146, 102, 62), (142, 105, 67), (139, 105, 72),
+ (158, 121, 87), (171, 134, 94), (185, 147, 102), (189, 151, 104),
+ (194, 156, 107), (194, 156, 108), (193, 146, 107), (192, 138, 105),
+ (185, 128, 100), (165, 118, 82), (158, 117, 77), (151, 117, 73),
+ (141, 108, 62), (134, 98, 53), (124, 88, 46), (120, 77, 40),
+ (110, 58, 27), (106, 54, 25), (103, 50, 23), (96, 41, 21),
+ (89, 38, 20), (86, 34, 21), (86, 31, 21), (88, 29, 19),
+ (90, 27, 18), (74, 22, 17), (68, 21, 16), (62, 20, 15),
+ (51, 20, 15), (45, 19, 15), (50, 18, 14), (57, 18, 12),
+ (71, 19, 9), (72, 19, 9), (74, 20, 9), (74, 20, 9),
+ (75, 20, 9), (77, 18, 10), (76, 17, 9), (77, 16, 9),
+ (75, 15, 8), (71, 13, 6), (65, 13, 5), (58, 13, 6),
+ (48, 12, 6), (40, 10, 7), (32, 10, 6), (24, 9, 6),
+ (16, 12, 6), (15, 12, 6), (15, 13, 7), (17, 14, 9),
+ (18, 15, 10), (22, 15, 12), (24, 15, 14), (25, 16, 15),
+ (25, 18, 15), (27, 20, 15), (27, 22, 13), (31, 23, 13),
+ (38, 23, 14), (46, 23, 15), (58, 24, 14), (72, 23, 14),
+ (83, 21, 11), (93, 22, 9), (101, 22, 7), (104, 21, 7),
+ (104, 22, 7), (102, 23, 9), (102, 22, 11), (104, 23, 12),
+ (106, 22, 12), (105, 20, 14), (101, 21, 15), (95, 21, 18),
+ (89, 24, 21), (88, 28, 26), (94, 33, 31), (103, 40, 36),
+ (115, 49, 41), (131, 58, 49), (142, 71, 56), (152, 87, 65),
+ (164, 100, 76), (174, 117, 87), (184, 139, 97), (196, 154, 106),
+ (205, 165, 114), (213, 175, 120), (223, 182, 130), (226, 186, 138),
+ (232, 200, 147), (235, 210, 156), (236, 215, 161), (237, 213, 159),
+ (238, 205, 156), (228, 188, 147), (224, 176, 136), (217, 166, 126),
+ (209, 159, 117), (203, 150, 104), (197, 141, 93), (185, 127, 79),
+ (177, 109, 61), (168, 93, 44), (162, 76, 31), (162, 61, 18),
+ (164, 53, 15), (164, 48, 15), (162, 45, 15), (159, 47, 17),
+ (153, 48, 21), (152, 47, 21), (153, 43, 25), (163, 56, 40),
+ (172, 65, 49), (182, 69, 58), (186, 74, 65), (189, 80, 69)
+ ),
+
+// 506 Blossoms
+((153, 135, 91), (143, 145, 101), (148, 139, 97), (153, 134, 93),
+ (165, 127, 89), (178, 121, 85), (187, 118, 85), (196, 116, 86),
+ (217, 118, 99), (222, 119, 102), (228, 121, 106), (231, 117, 104),
+ (234, 114, 103), (235, 116, 106), (236, 118, 109), (234, 120, 110),
+ (232, 123, 112), (220, 147, 123), (211, 156, 122), (202, 165, 122),
+ (192, 167, 119), (183, 169, 117), (179, 167, 116), (175, 165, 115),
+ (142, 158, 109), (125, 157, 106), (108, 156, 104), (98, 147, 99),
+ (88, 138, 94), (87, 132, 91), (87, 127, 89), (90, 114, 79),
+ (93, 110, 73), (96, 107, 62), (106, 106, 60), (116, 106, 59),
+ (133, 106, 61), (151, 106, 64), (160, 108, 67), (169, 111, 70),
+ (190, 118, 85), (195, 123, 92), (200, 128, 100), (199, 128, 106),
+ (198, 129, 112), (196, 126, 113), (195, 124, 115), (186, 117, 117),
+ (181, 109, 120), (165, 97, 110), (160, 94, 99), (156, 92, 88),
+ (157, 89, 77), (158, 86, 66), (162, 86, 62), (166, 86, 59),
+ (181, 85, 49), (186, 84, 45), (192, 84, 41), (194, 86, 39),
+ (196, 88, 38), (199, 90, 38), (202, 92, 39), (207, 100, 41),
+ (212, 109, 45), (212, 112, 63), (202, 113, 69), (193, 114, 75),
+ (189, 115, 74), (185, 117, 73), (176, 122, 73), (175, 129, 74),
+ (185, 128, 82), (190, 124, 85), (195, 120, 88), (193, 116, 85),
+ (191, 113, 83), (190, 109, 81), (189, 106, 80), (187, 99, 76),
+ (189, 89, 79), (191, 80, 85), (188, 82, 89), (186, 85, 93),
+ (183, 88, 94), (181, 92, 95), (181, 94, 98), (187, 102, 102),
+ (185, 113, 114), (182, 124, 119), (180, 136, 125), (179, 142, 126),
+ (178, 148, 128), (186, 163, 135), (199, 177, 140), (209, 187, 147),
+ (220, 192, 153), (221, 203, 162), (218, 202, 162), (215, 201, 162),
+ (217, 199, 159), (219, 197, 157), (228, 191, 151), (237, 183, 152),
+ (239, 170, 148), (237, 165, 145), (236, 160, 143), (237, 159, 140),
+ (238, 158, 138), (238, 155, 134), (240, 155, 135), (238, 155, 136),
+ (235, 159, 137), (228, 180, 141), (225, 187, 139), (222, 194, 138),
+ (219, 202, 134), (218, 205, 134), (220, 203, 135), (219, 203, 139),
+ (216, 197, 145), (202, 186, 136), (188, 175, 128), (183, 167, 124),
+ (179, 159, 120), (170, 144, 111), (169, 131, 106), (171, 126, 103),
+ (173, 122, 97), (159, 110, 78), (152, 109, 73), (146, 108, 68),
+ (128, 108, 60), (113, 117, 54), (106, 130, 51), (108, 143, 52),
+ (134, 170, 87), (143, 181, 110), (152, 192, 133), (153, 198, 141),
+ (154, 204, 149), (158, 214, 156), (166, 213, 163), (181, 212, 167),
+ (196, 206, 170), (221, 187, 166), (223, 184, 159), (226, 181, 153),
+ (226, 173, 134), (230, 169, 114), (228, 165, 93), (215, 159, 74),
+ (192, 144, 45), (184, 141, 41), (177, 139, 37), (170, 137, 32),
+ (173, 140, 27), (168, 144, 25), (162, 147, 23), (159, 144, 26),
+ (151, 143, 29), (152, 131, 34), (157, 131, 33), (162, 131, 33),
+ (173, 135, 30), (185, 134, 31), (197, 137, 28), (206, 135, 28),
+ (222, 120, 30), (227, 117, 30), (232, 115, 30), (240, 112, 32),
+ (246, 113, 36), (247, 115, 41), (249, 119, 47), (248, 115, 53),
+ (248, 109, 58), (248, 106, 58), (249, 106, 58), (243, 108, 61),
+ (240, 116, 66), (235, 121, 74), (226, 120, 82), (219, 113, 83),
+ (215, 99, 79), (214, 98, 79), (214, 98, 79), (216, 99, 83),
+ (215, 96, 90), (215, 90, 94), (214, 84, 93), (219, 82, 91),
+ (223, 85, 85), (231, 97, 77), (239, 105, 76), (244, 109, 72),
+ (246, 107, 67), (246, 105, 65), (243, 103, 62), (239, 110, 54),
+ (237, 118, 51), (231, 123, 47), (227, 120, 41), (225, 116, 38),
+ (219, 110, 38), (211, 103, 37), (204, 100, 40), (192, 99, 44),
+ (182, 99, 45), (172, 97, 44), (164, 98, 42), (152, 92, 37),
+ (142, 86, 34), (130, 81, 37), (119, 85, 44), (111, 92, 53),
+ (106, 108, 62), (102, 119, 70), (103, 124, 71), (105, 121, 69),
+ (107, 121, 69), (114, 120, 70), (121, 125, 73), (128, 133, 81),
+ (136, 138, 86), (146, 136, 86), (154, 132, 89), (164, 128, 89),
+ (175, 127, 89), (185, 130, 95), (194, 139, 103), (203, 146, 111),
+ (211, 155, 121), (218, 163, 129), (225, 169, 134), (231, 171, 139),
+ (235, 170, 139), (236, 166, 139), (235, 161, 137), (231, 155, 133),
+ (226, 147, 125), (223, 139, 116), (225, 130, 102), (227, 117, 89),
+ (227, 106, 76), (227, 98, 68), (224, 92, 62), (220, 92, 61),
+ (214, 100, 63), (208, 111, 68), (204, 119, 71), (189, 118, 73),
+ (175, 117, 72), (166, 115, 74), (156, 114, 75), (147, 120, 82)
+ ),
+
+// 507 Blue_Velvet
+((55, 47, 96), (55, 48, 95), (55, 47, 93), (55, 47, 91),
+ (53, 45, 86), (52, 44, 81), (51, 42, 78), (50, 41, 76),
+ (46, 38, 68), (45, 37, 66), (45, 36, 64), (44, 35, 62),
+ (43, 35, 61), (43, 34, 59), (43, 34, 58), (43, 33, 57),
+ (43, 33, 57), (44, 35, 57), (44, 35, 58), (44, 36, 59),
+ (44, 35, 58), (45, 35, 58), (45, 35, 57), (46, 35, 57),
+ (47, 36, 58), (48, 37, 60), (49, 39, 62), (50, 40, 64),
+ (51, 41, 66), (51, 42, 67), (52, 43, 69), (52, 46, 74),
+ (55, 50, 81), (65, 67, 102), (66, 72, 110), (68, 77, 118),
+ (68, 77, 121), (68, 78, 124), (68, 78, 124), (69, 79, 124),
+ (70, 78, 121), (66, 71, 114), (63, 65, 108), (60, 59, 101),
+ (58, 54, 95), (56, 52, 93), (55, 51, 91), (52, 47, 87),
+ (51, 45, 85), (51, 45, 88), (50, 46, 90), (49, 47, 92),
+ (49, 47, 93), (49, 47, 94), (49, 47, 94), (50, 48, 95),
+ (53, 49, 95), (53, 48, 94), (54, 48, 93), (53, 48, 90),
+ (53, 48, 88), (52, 48, 86), (52, 48, 85), (52, 47, 83),
+ (52, 46, 83), (53, 48, 84), (53, 49, 84), (53, 50, 85),
+ (53, 50, 86), (53, 51, 87), (54, 52, 90), (55, 52, 92),
+ (56, 51, 92), (55, 50, 92), (55, 49, 92), (55, 48, 91),
+ (55, 48, 91), (56, 48, 91), (57, 48, 92), (58, 49, 94),
+ (59, 50, 97), (62, 59, 105), (65, 67, 113), (69, 76, 121),
+ (73, 81, 125), (77, 86, 129), (86, 97, 140), (101, 112, 149),
+ (138, 148, 174), (149, 157, 178), (160, 166, 182), (162, 167, 181),
+ (164, 168, 180), (160, 164, 178), (161, 168, 183), (154, 162, 181),
+ (146, 155, 175), (113, 128, 156), (99, 120, 153), (85, 113, 151),
+ (81, 111, 150), (78, 109, 150), (75, 106, 151), (76, 106, 151),
+ (82, 110, 154), (87, 114, 155), (92, 118, 157), (94, 119, 157),
+ (97, 121, 158), (96, 124, 161), (97, 125, 162), (99, 125, 162),
+ (99, 124, 160), (91, 111, 152), (88, 107, 149), (85, 104, 147),
+ (79, 95, 142), (75, 89, 137), (70, 81, 131), (65, 72, 124),
+ (57, 58, 111), (55, 55, 107), (53, 53, 103), (52, 52, 101),
+ (52, 52, 99), (50, 50, 94), (50, 48, 87), (49, 45, 79),
+ (48, 42, 71), (46, 37, 57), (45, 35, 53), (45, 34, 50),
+ (44, 32, 46), (44, 30, 43), (43, 30, 40), (43, 30, 40),
+ (44, 32, 45), (45, 34, 50), (47, 37, 56), (47, 37, 58),
+ (48, 38, 60), (49, 39, 63), (51, 41, 65), (53, 43, 69),
+ (55, 45, 73), (56, 46, 77), (55, 45, 77), (55, 45, 77),
+ (54, 45, 76), (54, 43, 76), (52, 42, 74), (51, 42, 75),
+ (49, 41, 75), (49, 40, 75), (49, 40, 75), (48, 40, 76),
+ (48, 42, 80), (49, 44, 85), (51, 50, 91), (56, 58, 100),
+ (60, 66, 108), (69, 86, 128), (72, 90, 132), (75, 95, 136),
+ (81, 105, 146), (85, 114, 154), (87, 121, 160), (86, 127, 164),
+ (90, 132, 168), (93, 134, 169), (96, 136, 170), (102, 139, 172),
+ (107, 143, 176), (116, 145, 174), (124, 148, 172), (135, 152, 169),
+ (139, 152, 165), (138, 152, 167), (137, 150, 166), (133, 144, 162),
+ (129, 137, 156), (119, 127, 147), (105, 114, 139), (90, 102, 134),
+ (68, 82, 125), (64, 78, 122), (61, 74, 120), (58, 68, 116),
+ (56, 63, 114), (55, 61, 111), (56, 60, 111), (57, 60, 111),
+ (57, 60, 112), (59, 61, 113), (61, 64, 117), (66, 70, 120),
+ (70, 77, 125), (75, 82, 129), (79, 87, 131), (82, 91, 134),
+ (85, 93, 134), (84, 95, 133), (83, 93, 132), (82, 91, 129),
+ (80, 88, 124), (78, 81, 118), (70, 73, 110), (64, 64, 103),
+ (57, 56, 97), (54, 52, 92), (53, 49, 87), (52, 46, 83),
+ (51, 45, 80), (51, 44, 79), (51, 45, 79), (53, 46, 80),
+ (54, 46, 81), (55, 47, 83), (56, 48, 86), (56, 49, 89),
+ (57, 49, 91), (57, 49, 93), (57, 49, 94), (57, 48, 95),
+ (56, 47, 95), (55, 47, 93), (54, 47, 90), (54, 46, 88),
+ (54, 46, 87), (54, 45, 86), (54, 47, 87), (55, 48, 87),
+ (55, 50, 90), (56, 53, 94), (58, 56, 99), (59, 60, 104),
+ (59, 63, 109), (60, 64, 112), (60, 66, 115), (61, 67, 117),
+ (62, 67, 119), (62, 66, 119), (62, 65, 118), (61, 64, 116),
+ (59, 62, 113), (58, 60, 109), (58, 57, 107), (57, 54, 104),
+ (55, 53, 102), (54, 51, 100), (53, 50, 98), (53, 49, 98),
+ (53, 49, 98), (53, 48, 98), (54, 47, 99), (54, 47, 98)
+ ),
+
+// 508 Bluebells
+((51, 31, 24), (40, 29, 26), (37, 28, 32), (35, 28, 39),
+ (37, 27, 52), (39, 27, 66), (41, 29, 73), (44, 31, 80),
+ (49, 40, 109), (44, 45, 119), (40, 50, 129), (35, 51, 136),
+ (30, 52, 144), (34, 53, 145), (38, 55, 147), (44, 60, 150),
+ (51, 66, 153), (87, 102, 178), (88, 115, 184), (90, 128, 190),
+ (88, 133, 191), (87, 139, 192), (93, 143, 191), (100, 148, 191),
+ (150, 179, 208), (169, 195, 218), (188, 211, 228), (189, 217, 238),
+ (191, 223, 248), (183, 219, 246), (176, 215, 244), (160, 204, 238),
+ (155, 195, 232), (151, 173, 215), (145, 162, 208), (139, 152, 202),
+ (120, 139, 197), (101, 126, 192), (91, 123, 191), (82, 120, 190),
+ (48, 96, 186), (36, 84, 178), (25, 73, 170), (22, 63, 154),
+ (19, 54, 139), (18, 53, 133), (17, 53, 128), (16, 53, 120),
+ (19, 53, 118), (25, 59, 118), (32, 59, 107), (39, 60, 97),
+ (39, 61, 85), (40, 62, 73), (40, 62, 71), (41, 63, 70),
+ (37, 69, 89), (37, 72, 100), (37, 76, 112), (36, 78, 113),
+ (35, 81, 115), (34, 80, 113), (33, 79, 111), (31, 76, 107),
+ (26, 69, 106), (14, 55, 115), (10, 46, 112), (7, 38, 109),
+ (5, 34, 103), (4, 30, 98), (3, 22, 82), (2, 14, 65),
+ (2, 5, 46), (2, 4, 43), (2, 3, 41), (3, 5, 42),
+ (5, 7, 43), (5, 9, 43), (5, 11, 43), (7, 17, 45),
+ (11, 23, 49), (19, 34, 60), (21, 35, 62), (24, 37, 65),
+ (24, 36, 65), (25, 35, 65), (25, 37, 66), (27, 39, 68),
+ (36, 50, 79), (41, 57, 85), (47, 64, 91), (54, 69, 94),
+ (62, 74, 98), (79, 88, 107), (95, 102, 115), (108, 110, 118),
+ (122, 118, 115), (119, 115, 109), (124, 117, 110), (129, 120, 111),
+ (138, 129, 119), (147, 138, 128), (164, 158, 151), (186, 175, 163),
+ (206, 192, 178), (201, 186, 172), (196, 180, 167), (195, 179, 167),
+ (194, 179, 168), (198, 188, 183), (208, 201, 200), (228, 220, 218),
+ (241, 236, 234), (239, 246, 250), (229, 240, 249), (220, 235, 248),
+ (200, 223, 246), (179, 207, 239), (159, 190, 228), (140, 172, 217),
+ (124, 156, 204), (112, 149, 199), (101, 143, 194), (100, 143, 195),
+ (99, 144, 196), (99, 144, 196), (99, 141, 194), (111, 146, 195),
+ (128, 150, 187), (147, 152, 160), (152, 153, 157), (157, 154, 154),
+ (166, 158, 150), (170, 160, 148), (170, 164, 154), (170, 162, 157),
+ (155, 152, 146), (143, 139, 127), (131, 126, 108), (124, 119, 97),
+ (118, 112, 86), (104, 105, 74), (92, 98, 70), (80, 92, 72),
+ (69, 88, 78), (53, 78, 86), (50, 75, 86), (47, 72, 86),
+ (44, 65, 85), (41, 62, 78), (39, 57, 71), (34, 50, 68),
+ (24, 36, 65), (22, 35, 65), (21, 34, 66), (21, 33, 68),
+ (22, 33, 66), (23, 37, 62), (25, 38, 55), (25, 36, 44),
+ (24, 33, 34), (25, 35, 17), (28, 35, 16), (31, 36, 16),
+ (36, 43, 15), (42, 51, 20), (46, 55, 25), (45, 55, 29),
+ (41, 43, 31), (41, 39, 31), (41, 36, 32), (40, 33, 29),
+ (45, 30, 28), (50, 30, 29), (51, 33, 30), (55, 32, 32),
+ (53, 29, 31), (49, 23, 33), (42, 19, 34), (37, 14, 36),
+ (33, 11, 37), (28, 12, 40), (27, 14, 44), (26, 17, 48),
+ (19, 26, 69), (17, 30, 75), (16, 34, 81), (17, 43, 95),
+ (19, 54, 109), (26, 68, 127), (47, 88, 140), (69, 106, 151),
+ (88, 122, 164), (106, 139, 176), (126, 157, 189), (144, 172, 199),
+ (152, 185, 212), (172, 202, 223), (193, 217, 231), (212, 229, 240),
+ (227, 239, 247), (242, 249, 253), (254, 254, 254), (251, 253, 249),
+ (241, 243, 238), (226, 233, 220), (211, 217, 200), (193, 197, 180),
+ (173, 176, 160), (156, 158, 146), (142, 147, 135), (126, 130, 125),
+ (107, 116, 113), (88, 100, 101), (69, 82, 89), (48, 62, 78),
+ (31, 46, 75), (21, 43, 79), (19, 43, 89), (22, 48, 99),
+ (26, 56, 107), (36, 61, 111), (46, 65, 113), (55, 66, 114),
+ (58, 67, 116), (58, 67, 117), (60, 71, 119), (59, 77, 124),
+ (64, 84, 126), (70, 90, 124), (88, 99, 122), (107, 113, 128),
+ (123, 121, 133), (136, 132, 140), (144, 143, 154), (152, 155, 168),
+ (155, 164, 183), (162, 175, 190), (180, 193, 206), (198, 210, 218),
+ (217, 225, 227), (233, 238, 236), (246, 245, 237), (246, 240, 233),
+ (236, 226, 219), (221, 209, 202), (202, 190, 183), (182, 170, 162),
+ (162, 152, 147), (146, 138, 132), (129, 122, 113), (114, 103, 94),
+ (99, 85, 76), (82, 66, 58), (67, 49, 41), (57, 37, 29)
+ ),
+
+
+// 509 Blush
+((245, 172, 163), (249, 180, 171), (248, 185, 177), (248, 191, 183),
+ (248, 200, 191), (249, 209, 199), (249, 214, 201), (249, 220, 204),
+ (252, 237, 213), (252, 241, 217), (252, 246, 222), (251, 247, 224),
+ (251, 248, 227), (251, 248, 228), (252, 249, 229), (252, 249, 230),
+ (253, 250, 231), (253, 249, 240), (252, 245, 239), (252, 241, 238),
+ (252, 234, 231), (252, 228, 224), (251, 223, 221), (251, 219, 218),
+ (250, 211, 213), (250, 209, 212), (250, 207, 212), (250, 207, 211),
+ (250, 208, 210), (250, 208, 209), (250, 209, 209), (248, 212, 213),
+ (246, 215, 217), (246, 219, 221), (241, 216, 212), (237, 214, 203),
+ (232, 202, 190), (227, 190, 178), (225, 182, 171), (223, 174, 165),
+ (224, 151, 143), (223, 141, 130), (223, 131, 118), (220, 120, 104),
+ (218, 110, 91), (217, 104, 86), (216, 99, 82), (216, 92, 78),
+ (213, 91, 79), (217, 93, 88), (217, 94, 88), (217, 95, 89),
+ (211, 91, 86), (205, 87, 84), (200, 85, 83), (195, 84, 82),
+ (175, 78, 85), (163, 75, 84), (152, 72, 83), (133, 64, 73),
+ (115, 56, 64), (108, 50, 58), (101, 45, 52), (81, 37, 41),
+ (68, 30, 32), (59, 21, 23), (58, 17, 18), (58, 13, 14),
+ (56, 11, 12), (54, 10, 10), (44, 7, 5), (42, 5, 4),
+ (44, 4, 3), (45, 5, 3), (46, 6, 4), (35, 5, 4),
+ (25, 5, 4), (20, 4, 3), (15, 3, 3), (7, 1, 2),
+ (1, 0, 1), (0, 0, 0), (0, 0, 0), (0, 0, 1),
+ (0, 0, 1), (0, 1, 1), (0, 0, 1), (0, 1, 1),
+ (10, 11, 11), (29, 20, 21), (48, 29, 31), (60, 37, 38),
+ (72, 45, 45), (93, 59, 60), (116, 81, 82), (130, 101, 101),
+ (144, 105, 106), (185, 126, 127), (205, 140, 141), (225, 155, 156),
+ (232, 170, 170), (240, 185, 184), (241, 195, 193), (240, 201, 198),
+ (240, 202, 200), (244, 211, 209), (248, 221, 218), (249, 227, 225),
+ (251, 234, 232), (253, 243, 240), (254, 249, 245), (254, 251, 248),
+ (254, 252, 249), (253, 251, 245), (253, 249, 242), (253, 247, 240),
+ (253, 241, 230), (253, 230, 217), (252, 217, 202), (252, 203, 189),
+ (246, 184, 171), (245, 180, 164), (245, 177, 157), (245, 175, 153),
+ (246, 174, 150), (246, 170, 145), (246, 163, 142), (245, 160, 142),
+ (241, 158, 142), (229, 151, 135), (224, 147, 130), (219, 144, 126),
+ (205, 130, 115), (188, 115, 103), (166, 102, 91), (145, 83, 77),
+ (103, 51, 47), (87, 35, 33), (72, 19, 19), (67, 14, 15),
+ (62, 10, 11), (59, 7, 9), (62, 11, 14), (73, 20, 24),
+ (84, 31, 35), (127, 55, 62), (136, 60, 68), (146, 65, 74),
+ (166, 74, 84), (185, 84, 94), (196, 91, 101), (205, 98, 108),
+ (211, 104, 115), (210, 103, 113), (209, 102, 112), (204, 97, 107),
+ (197, 91, 99), (188, 80, 87), (178, 71, 76), (167, 62, 65),
+ (157, 53, 55), (146, 41, 42), (145, 39, 40), (145, 38, 39),
+ (146, 38, 40), (148, 43, 43), (151, 48, 50), (158, 57, 61),
+ (175, 90, 93), (178, 98, 101), (182, 106, 109), (194, 124, 121),
+ (205, 141, 135), (215, 157, 150), (227, 172, 165), (236, 186, 183),
+ (239, 197, 198), (242, 206, 206), (242, 212, 209), (239, 215, 208),
+ (236, 210, 201), (234, 198, 189), (228, 182, 176), (223, 165, 161),
+ (207, 141, 139), (204, 140, 135), (202, 139, 132), (201, 139, 124),
+ (202, 139, 120), (207, 138, 117), (209, 140, 114), (212, 144, 121),
+ (214, 150, 132), (219, 162, 145), (226, 171, 157), (235, 179, 167),
+ (241, 181, 170), (245, 180, 172), (246, 176, 173), (245, 173, 173),
+ (246, 168, 174), (245, 165, 173), (246, 161, 172), (245, 158, 169),
+ (245, 159, 167), (246, 164, 167), (245, 172, 175), (245, 181, 182),
+ (247, 188, 189), (247, 190, 193), (246, 190, 192), (245, 187, 185),
+ (244, 183, 177), (242, 178, 169), (241, 172, 163), (241, 165, 159),
+ (241, 159, 157), (242, 151, 151), (242, 145, 146), (242, 142, 140),
+ (241, 142, 138), (244, 151, 140), (246, 163, 149), (248, 174, 159),
+ (248, 186, 170), (245, 193, 177), (239, 193, 178), (233, 192, 175),
+ (226, 184, 166), (220, 174, 153), (211, 162, 139), (203, 148, 126),
+ (192, 132, 113), (179, 117, 102), (165, 97, 88), (152, 78, 74),
+ (130, 57, 55), (114, 38, 38), (97, 24, 24), (79, 18, 16),
+ (67, 12, 11), (59, 10, 11), (47, 9, 12), (41, 8, 13),
+ (43, 13, 17), (50, 22, 24), (64, 40, 37), (86, 58, 52),
+ (108, 72, 65), (125, 86, 78), (145, 95, 85), (166, 99, 89),
+ (187, 113, 104), (208, 129, 120), (227, 143, 134), (239, 159, 151)
+ ),
+
+// 510 Bluster
+((65, 45, 53), (74, 53, 57), (71, 49, 54), (69, 46, 52),
+ (71, 46, 53), (73, 47, 54), (72, 47, 54), (72, 48, 54),
+ (62, 45, 52), (52, 43, 52), (42, 41, 53), (33, 42, 55),
+ (25, 43, 58), (21, 47, 62), (17, 51, 67), (15, 53, 70),
+ (14, 55, 74), (9, 63, 85), (10, 67, 89), (11, 71, 93),
+ (12, 71, 93), (14, 71, 94), (13, 71, 93), (12, 71, 93),
+ (11, 62, 82), (14, 57, 75), (18, 52, 69), (21, 48, 64),
+ (25, 44, 59), (26, 42, 57), (28, 41, 56), (34, 41, 56),
+ (41, 44, 60), (49, 53, 71), (53, 59, 77), (58, 65, 84),
+ (62, 71, 92), (67, 78, 100), (64, 79, 102), (61, 80, 105),
+ (47, 80, 104), (46, 79, 101), (45, 78, 99), (43, 75, 98),
+ (41, 73, 97), (42, 73, 97), (43, 74, 98), (45, 76, 101),
+ (50, 80, 106), (58, 85, 112), (65, 85, 112), (72, 85, 112),
+ (78, 86, 113), (84, 87, 114), (84, 87, 112), (85, 87, 111),
+ (75, 73, 92), (69, 63, 81), (64, 54, 70), (60, 49, 61),
+ (57, 44, 53), (54, 41, 49), (51, 38, 46), (47, 34, 42),
+ (44, 33, 42), (49, 39, 52), (56, 47, 62), (63, 56, 72),
+ (68, 61, 77), (73, 66, 83), (85, 79, 99), (94, 87, 112),
+ (104, 104, 135), (105, 108, 139), (107, 113, 143), (105, 110, 141),
+ (103, 108, 140), (97, 106, 139), (92, 104, 138), (82, 100, 133),
+ (71, 95, 127), (61, 85, 113), (59, 83, 108), (58, 81, 104),
+ (58, 80, 101), (58, 80, 99), (60, 79, 94), (64, 77, 89),
+ (78, 77, 82), (86, 76, 76), (95, 75, 71), (96, 74, 69),
+ (97, 74, 68), (95, 73, 70), (88, 75, 76), (80, 77, 80),
+ (78, 78, 83), (76, 86, 99), (64, 89, 107), (53, 92, 116),
+ (47, 91, 115), (42, 90, 115), (35, 87, 111), (37, 83, 108),
+ (35, 75, 100), (26, 70, 93), (18, 65, 87), (17, 61, 83),
+ (16, 58, 79), (16, 54, 74), (20, 50, 67), (24, 47, 63),
+ (25, 47, 62), (26, 46, 61), (26, 45, 61), (27, 45, 61),
+ (28, 47, 63), (27, 50, 65), (30, 52, 68), (32, 52, 69),
+ (31, 46, 63), (26, 43, 58), (21, 40, 54), (20, 37, 51),
+ (19, 35, 48), (18, 30, 41), (18, 23, 32), (16, 14, 23),
+ (11, 10, 17), (5, 8, 14), (5, 8, 14), (6, 9, 14),
+ (7, 9, 16), (12, 11, 18), (18, 15, 23), (24, 20, 30),
+ (38, 36, 45), (43, 44, 53), (49, 52, 61), (50, 54, 65),
+ (51, 57, 69), (51, 64, 78), (49, 69, 87), (47, 76, 94),
+ (47, 82, 100), (44, 86, 104), (43, 85, 103), (43, 85, 103),
+ (43, 84, 101), (48, 83, 98), (53, 82, 95), (63, 83, 92),
+ (77, 80, 85), (78, 78, 82), (80, 76, 80), (80, 69, 74),
+ (79, 63, 69), (78, 57, 62), (77, 53, 59), (79, 50, 59),
+ (84, 48, 56), (95, 42, 46), (96, 41, 43), (98, 41, 40),
+ (100, 43, 44), (104, 49, 48), (107, 57, 56), (112, 61, 62),
+ (120, 72, 76), (123, 77, 85), (127, 83, 95), (136, 98, 115),
+ (147, 106, 130), (154, 113, 143), (160, 111, 144), (161, 114, 149),
+ (159, 118, 153), (159, 115, 147), (152, 110, 141), (142, 93, 123),
+ (125, 79, 104), (100, 66, 89), (78, 54, 71), (59, 45, 56),
+ (38, 25, 32), (34, 21, 28), (30, 17, 24), (24, 12, 18),
+ (18, 9, 13), (13, 8, 10), (11, 6, 8), (12, 6, 7),
+ (11, 6, 8), (10, 7, 9), (7, 9, 11), (6, 11, 16),
+ (8, 15, 20), (13, 19, 25), (18, 23, 31), (22, 27, 35),
+ (24, 29, 39), (27, 31, 42), (31, 33, 44), (36, 35, 48),
+ (39, 38, 51), (38, 39, 54), (36, 42, 58), (32, 46, 61),
+ (30, 49, 67), (30, 55, 74), (30, 60, 81), (33, 65, 90),
+ (34, 71, 96), (32, 74, 102), (33, 78, 105), (32, 79, 106),
+ (34, 80, 108), (38, 79, 104), (38, 74, 100), (39, 68, 92),
+ (38, 63, 86), (36, 63, 85), (39, 63, 85), (42, 63, 84),
+ (46, 60, 80), (50, 55, 74), (49, 50, 68), (48, 48, 65),
+ (46, 46, 62), (43, 43, 59), (41, 37, 51), (37, 30, 41),
+ (32, 23, 31), (27, 17, 23), (22, 13, 19), (20, 10, 16),
+ (20, 10, 15), (23, 10, 15), (27, 12, 15), (29, 13, 17),
+ (30, 15, 20), (30, 16, 23), (33, 18, 25), (37, 20, 28),
+ (40, 22, 30), (41, 23, 31), (41, 24, 33), (41, 25, 34),
+ (43, 25, 35), (46, 26, 37), (51, 32, 41), (52, 36, 44),
+ (49, 34, 43), (49, 34, 42), (47, 30, 40), (54, 36, 45)
+ ),
+
+// 511 Boquet_of_Roses
+((154, 14, 6), (150, 22, 9), (145, 26, 10), (141, 30, 12),
+ (139, 35, 14), (138, 41, 17), (137, 44, 18), (136, 47, 19),
+ (138, 61, 31), (144, 74, 42), (151, 87, 53), (155, 95, 66),
+ (159, 104, 80), (159, 99, 74), (160, 95, 69), (158, 94, 66),
+ (157, 93, 64), (155, 101, 79), (154, 101, 75), (153, 101, 71),
+ (160, 118, 89), (168, 136, 107), (170, 143, 117), (173, 151, 127),
+ (184, 173, 146), (187, 175, 151), (190, 178, 157), (183, 173, 151),
+ (177, 169, 146), (174, 165, 142), (172, 161, 138), (166, 151, 128),
+ (158, 138, 114), (145, 110, 83), (139, 99, 69), (133, 88, 55),
+ (132, 74, 43), (131, 60, 32), (130, 55, 28), (129, 50, 24),
+ (127, 40, 14), (127, 38, 16), (128, 37, 18), (126, 38, 23),
+ (124, 40, 29), (123, 43, 29), (122, 46, 30), (117, 53, 32),
+ (113, 56, 38), (107, 62, 46), (103, 64, 44), (100, 67, 43),
+ (96, 65, 44), (92, 64, 45), (92, 63, 44), (92, 62, 44),
+ (80, 49, 35), (81, 41, 30), (83, 34, 25), (86, 26, 19),
+ (89, 18, 13), (90, 15, 11), (92, 12, 9), (99, 10, 6),
+ (108, 8, 5), (119, 3, 0), (125, 4, 1), (131, 6, 2),
+ (133, 7, 2), (135, 9, 2), (138, 10, 2), (140, 16, 5),
+ (143, 34, 12), (145, 44, 17), (147, 54, 22), (151, 68, 29),
+ (155, 83, 37), (154, 88, 42), (154, 93, 47), (154, 100, 58),
+ (159, 109, 66), (164, 123, 84), (159, 124, 91), (154, 125, 99),
+ (154, 125, 100), (155, 125, 102), (156, 118, 98), (153, 111, 89),
+ (142, 89, 69), (141, 71, 55), (140, 54, 41), (138, 46, 34),
+ (136, 39, 28), (133, 29, 17), (130, 20, 11), (130, 14, 7),
+ (131, 12, 7), (135, 20, 12), (134, 24, 14), (134, 28, 17),
+ (133, 27, 17), (133, 27, 17), (129, 30, 20), (122, 38, 23),
+ (114, 45, 26), (114, 53, 35), (114, 62, 45), (114, 70, 50),
+ (114, 78, 56), (116, 88, 62), (121, 95, 71), (126, 99, 78),
+ (129, 102, 78), (130, 104, 73), (132, 102, 70), (134, 101, 68),
+ (139, 95, 62), (143, 93, 58), (147, 93, 57), (152, 90, 51),
+ (156, 79, 46), (159, 82, 53), (163, 85, 60), (165, 87, 63),
+ (168, 90, 67), (168, 96, 73), (169, 107, 85), (176, 123, 104),
+ (187, 138, 118), (192, 154, 128), (192, 155, 129), (193, 156, 131),
+ (195, 152, 120), (190, 136, 105), (182, 115, 84), (174, 91, 67),
+ (161, 52, 31), (151, 34, 19), (142, 17, 7), (140, 12, 4),
+ (138, 8, 2), (137, 4, 1), (137, 9, 5), (139, 18, 10),
+ (141, 31, 19), (148, 68, 47), (152, 78, 55), (156, 88, 64),
+ (163, 105, 82), (164, 119, 95), (168, 127, 100), (171, 130, 99),
+ (168, 123, 94), (166, 120, 91), (164, 117, 89), (163, 112, 79),
+ (161, 105, 71), (153, 100, 63), (145, 94, 60), (145, 87, 55),
+ (147, 81, 51), (142, 64, 38), (141, 60, 35), (140, 57, 32),
+ (138, 52, 29), (133, 49, 25), (122, 46, 24), (117, 46, 24),
+ (121, 44, 20), (120, 41, 18), (120, 38, 17), (122, 31, 13),
+ (130, 24, 9), (143, 18, 5), (152, 12, 2), (159, 11, 2),
+ (163, 13, 5), (166, 14, 6), (163, 13, 7), (161, 15, 7),
+ (160, 20, 9), (161, 24, 11), (158, 27, 14), (154, 31, 13),
+ (161, 59, 21), (164, 65, 26), (168, 72, 31), (176, 87, 42),
+ (183, 105, 51), (194, 125, 58), (199, 134, 62), (199, 136, 68),
+ (195, 133, 70), (193, 131, 68), (182, 122, 62), (169, 109, 57),
+ (154, 97, 54), (144, 89, 50), (136, 85, 51), (134, 83, 54),
+ (133, 85, 62), (131, 88, 65), (130, 91, 67), (127, 92, 69),
+ (125, 91, 68), (115, 88, 64), (107, 79, 56), (101, 69, 47),
+ (104, 53, 36), (106, 41, 26), (111, 28, 16), (120, 21, 11),
+ (134, 12, 6), (152, 6, 4), (170, 1, 1), (187, 1, 1),
+ (193, 3, 2), (199, 8, 3), (199, 9, 4), (202, 9, 5),
+ (198, 11, 6), (193, 21, 9), (184, 33, 15), (178, 48, 23),
+ (178, 66, 35), (179, 88, 50), (176, 104, 67), (171, 120, 77),
+ (169, 134, 88), (167, 143, 99), (158, 141, 106), (147, 131, 100),
+ (133, 118, 89), (125, 106, 79), (117, 93, 68), (113, 83, 56),
+ (111, 77, 50), (117, 80, 51), (129, 86, 55), (143, 96, 66),
+ (154, 111, 84), (167, 130, 102), (179, 144, 109), (192, 154, 114),
+ (199, 160, 118), (199, 161, 121), (191, 147, 109), (185, 128, 90),
+ (182, 103, 67), (177, 82, 51), (169, 59, 38), (160, 40, 27),
+ (159, 22, 15), (158, 13, 6), (158, 11, 3), (155, 14, 4)
+ ),
+
+// 512 Brushed_Silver
+((184, 191, 195), (182, 187, 191), (183, 187, 190), (184, 188, 190),
+ (185, 189, 191), (186, 191, 193), (187, 192, 195), (188, 193, 197),
+ (192, 200, 210), (190, 202, 213), (188, 205, 216), (179, 199, 211),
+ (170, 194, 206), (158, 182, 195), (146, 171, 184), (140, 165, 178),
+ (134, 159, 172), (114, 139, 150), (107, 131, 143), (101, 123, 136),
+ (95, 119, 131), (90, 116, 126), (86, 113, 123), (83, 110, 120),
+ (69, 96, 103), (60, 84, 91), (52, 73, 79), (44, 62, 66),
+ (36, 52, 54), (33, 46, 49), (31, 41, 45), (29, 34, 36),
+ (30, 33, 35), (35, 37, 41), (40, 42, 46), (46, 48, 52),
+ (52, 55, 58), (59, 62, 64), (62, 65, 67), (65, 68, 71),
+ (82, 83, 85), (92, 93, 95), (102, 104, 106), (112, 115, 118),
+ (122, 127, 130), (126, 132, 135), (130, 137, 141), (138, 145, 151),
+ (146, 155, 159), (161, 169, 174), (166, 173, 176), (172, 177, 179),
+ (174, 178, 178), (177, 179, 178), (177, 178, 176), (178, 178, 175),
+ (169, 168, 166), (160, 160, 158), (151, 153, 150), (142, 145, 143),
+ (133, 137, 136), (129, 133, 132), (126, 130, 129), (119, 123, 122),
+ (115, 118, 115), (110, 114, 109), (106, 111, 107), (103, 109, 106),
+ (100, 106, 104), (98, 104, 102), (92, 99, 97), (87, 94, 93),
+ (77, 84, 85), (74, 80, 80), (71, 77, 75), (70, 76, 74),
+ (69, 76, 73), (68, 76, 73), (68, 76, 74), (67, 76, 75),
+ (65, 75, 74), (59, 69, 68), (54, 65, 65), (50, 62, 63),
+ (49, 60, 61), (48, 59, 60), (47, 56, 57), (47, 55, 55),
+ (49, 57, 57), (53, 62, 61), (58, 68, 66), (62, 71, 69),
+ (66, 75, 72), (75, 83, 79), (83, 90, 89), (93, 99, 98),
+ (104, 109, 107), (123, 125, 124), (128, 130, 131), (134, 136, 139),
+ (135, 138, 142), (136, 140, 145), (138, 144, 149), (139, 146, 151),
+ (141, 148, 154), (144, 150, 156), (148, 153, 158), (149, 154, 160),
+ (151, 156, 162), (154, 158, 165), (154, 160, 169), (153, 160, 173),
+ (151, 160, 173), (145, 159, 174), (144, 158, 173), (143, 157, 173),
+ (142, 157, 172), (143, 158, 172), (145, 159, 172), (150, 162, 173),
+ (159, 167, 176), (163, 168, 174), (168, 169, 173), (168, 168, 171),
+ (168, 168, 170), (165, 165, 167), (162, 162, 164), (158, 158, 158),
+ (153, 152, 152), (145, 143, 139), (142, 140, 137), (140, 138, 135),
+ (137, 135, 132), (135, 131, 128), (131, 128, 123), (122, 126, 120),
+ (105, 119, 115), (96, 112, 109), (87, 105, 104), (82, 101, 101),
+ (78, 98, 98), (69, 92, 94), (62, 88, 93), (59, 86, 94),
+ (63, 86, 95), (70, 94, 105), (73, 98, 108), (77, 103, 112),
+ (85, 111, 120), (93, 119, 129), (100, 126, 135), (106, 131, 139),
+ (114, 137, 145), (117, 137, 145), (120, 138, 145), (126, 138, 145),
+ (129, 137, 145), (131, 136, 145), (133, 136, 143), (134, 136, 142),
+ (134, 135, 140), (133, 130, 133), (132, 129, 131), (131, 129, 130),
+ (128, 127, 127), (126, 124, 125), (122, 122, 123), (117, 118, 122),
+ (109, 114, 123), (106, 113, 122), (104, 112, 121), (101, 110, 120),
+ (98, 108, 117), (97, 107, 115), (98, 108, 115), (101, 109, 115),
+ (104, 113, 119), (107, 116, 123), (114, 121, 129), (120, 128, 137),
+ (124, 134, 145), (130, 140, 153), (134, 144, 158), (137, 148, 162),
+ (146, 156, 168), (148, 158, 169), (151, 160, 170), (155, 162, 171),
+ (159, 163, 170), (164, 166, 171), (168, 168, 173), (173, 170, 175),
+ (179, 173, 174), (182, 174, 173), (183, 175, 173), (183, 175, 172),
+ (182, 174, 170), (179, 172, 169), (175, 170, 167), (172, 168, 166),
+ (169, 168, 166), (168, 169, 168), (171, 171, 169), (174, 173, 168),
+ (177, 175, 170), (179, 175, 171), (180, 177, 172), (180, 176, 172),
+ (178, 175, 171), (174, 171, 169), (166, 166, 166), (157, 161, 165),
+ (149, 157, 164), (143, 154, 162), (139, 150, 159), (137, 147, 157),
+ (136, 145, 153), (136, 143, 148), (136, 139, 142), (136, 137, 137),
+ (136, 134, 134), (134, 133, 131), (133, 131, 129), (131, 130, 128),
+ (129, 128, 127), (128, 128, 127), (126, 127, 126), (123, 126, 125),
+ (122, 123, 121), (120, 120, 116), (120, 118, 113), (122, 119, 112),
+ (125, 121, 112), (128, 123, 114), (132, 126, 118), (137, 131, 124),
+ (142, 137, 133), (147, 144, 142), (151, 149, 148), (153, 151, 152),
+ (153, 151, 154), (152, 151, 155), (152, 152, 154), (151, 151, 153),
+ (149, 151, 153), (147, 151, 151), (145, 149, 150), (144, 148, 149),
+ (149, 153, 155), (155, 159, 160), (159, 165, 168), (164, 171, 175),
+ (169, 177, 181), (174, 181, 185), (179, 184, 189), (182, 188, 192)
+ ),
+
+// 513 Bubblegum
+((194, 37, 79), (193, 49, 97), (193, 50, 99), (193, 52, 101),
+ (196, 51, 101), (199, 50, 102), (202, 50, 104), (205, 50, 107),
+ (206, 46, 110), (207, 46, 116), (208, 46, 122), (206, 44, 124),
+ (205, 43, 127), (200, 38, 126), (195, 33, 125), (192, 30, 123),
+ (190, 28, 122), (188, 29, 124), (188, 38, 132), (189, 48, 140),
+ (189, 61, 146), (190, 75, 152), (191, 82, 157), (192, 90, 162),
+ (191, 108, 172), (191, 117, 176), (192, 126, 180), (193, 135, 184),
+ (194, 145, 189), (195, 149, 189), (196, 154, 189), (199, 163, 193),
+ (198, 166, 193), (199, 161, 185), (201, 157, 185), (203, 154, 186),
+ (202, 150, 187), (202, 147, 188), (203, 144, 188), (205, 142, 189),
+ (206, 119, 171), (208, 104, 160), (211, 89, 150), (210, 80, 147),
+ (209, 71, 145), (207, 69, 145), (205, 68, 146), (203, 70, 154),
+ (197, 69, 154), (188, 59, 147), (188, 51, 138), (188, 43, 130),
+ (185, 43, 125), (183, 43, 120), (181, 48, 123), (180, 53, 127),
+ (170, 83, 143), (168, 90, 151), (166, 98, 160), (172, 103, 168),
+ (179, 108, 177), (183, 109, 181), (187, 111, 186), (196, 116, 194),
+ (201, 123, 196), (204, 138, 193), (204, 135, 196), (205, 133, 199),
+ (205, 129, 198), (206, 125, 197), (204, 115, 192), (200, 102, 189),
+ (189, 81, 169), (181, 72, 152), (173, 63, 135), (170, 54, 128),
+ (167, 46, 121), (167, 42, 118), (168, 38, 116), (169, 34, 115),
+ (168, 32, 114), (171, 47, 132), (170, 55, 140), (169, 64, 148),
+ (172, 64, 155), (175, 65, 162), (182, 66, 178), (191, 66, 193),
+ (198, 66, 200), (200, 67, 201), (203, 68, 203), (199, 68, 200),
+ (196, 69, 198), (194, 69, 196), (192, 66, 194), (191, 63, 197),
+ (197, 59, 199), (201, 47, 188), (198, 43, 176), (196, 39, 165),
+ (193, 37, 158), (191, 36, 152), (187, 26, 136), (187, 20, 129),
+ (194, 15, 125), (200, 14, 124), (207, 13, 123), (209, 13, 122),
+ (212, 13, 122), (214, 13, 117), (214, 14, 114), (213, 14, 110),
+ (211, 16, 110), (211, 15, 106), (212, 15, 105), (213, 15, 104),
+ (216, 18, 104), (217, 23, 100), (217, 33, 100), (216, 46, 103),
+ (214, 72, 119), (215, 82, 133), (216, 92, 148), (218, 97, 154),
+ (220, 102, 161), (223, 111, 173), (225, 121, 184), (226, 134, 194),
+ (223, 149, 205), (208, 157, 215), (200, 156, 213), (192, 156, 212),
+ (182, 152, 211), (171, 142, 212), (164, 131, 213), (166, 128, 216),
+ (157, 127, 213), (152, 129, 211), (147, 131, 209), (148, 135, 207),
+ (149, 139, 206), (152, 140, 197), (149, 131, 192), (158, 125, 192),
+ (168, 117, 193), (173, 101, 186), (172, 96, 184), (172, 92, 182),
+ (176, 95, 176), (170, 98, 158), (168, 94, 147), (169, 82, 137),
+ (176, 54, 125), (177, 47, 122), (179, 41, 119), (182, 32, 122),
+ (183, 26, 123), (183, 23, 124), (182, 20, 123), (184, 20, 124),
+ (189, 19, 127), (201, 21, 132), (203, 24, 134), (206, 27, 137),
+ (210, 35, 143), (215, 45, 153), (218, 56, 161), (220, 70, 170),
+ (222, 94, 188), (222, 96, 191), (223, 99, 194), (221, 106, 196),
+ (219, 114, 197), (218, 122, 199), (217, 130, 201), (219, 139, 206),
+ (220, 148, 211), (221, 155, 218), (218, 158, 222), (210, 161, 221),
+ (204, 163, 218), (198, 165, 216), (191, 163, 213), (195, 164, 215),
+ (204, 167, 218), (205, 167, 219), (206, 168, 221), (206, 169, 222),
+ (206, 170, 223), (205, 173, 224), (197, 171, 223), (194, 171, 223),
+ (195, 170, 225), (201, 168, 228), (206, 163, 231), (211, 156, 234),
+ (217, 150, 233), (219, 142, 229), (216, 133, 222), (211, 124, 214),
+ (206, 115, 206), (201, 107, 197), (199, 101, 189), (198, 97, 183),
+ (195, 96, 172), (190, 87, 159), (180, 75, 140), (167, 64, 122),
+ (153, 55, 110), (139, 46, 95), (129, 40, 89), (122, 35, 81),
+ (120, 34, 75), (119, 33, 76), (118, 31, 67), (114, 33, 65),
+ (111, 39, 71), (110, 45, 75), (113, 55, 88), (113, 64, 97),
+ (118, 72, 109), (123, 73, 125), (132, 80, 137), (142, 88, 146),
+ (146, 91, 154), (156, 98, 163), (169, 103, 175), (182, 107, 183),
+ (188, 108, 187), (189, 107, 188), (191, 107, 188), (192, 107, 185),
+ (190, 101, 181), (190, 96, 178), (191, 90, 176), (196, 87, 171),
+ (199, 76, 162), (199, 63, 149), (196, 51, 136), (192, 41, 124),
+ (188, 34, 116), (186, 29, 105), (187, 24, 95), (191, 23, 93),
+ (198, 22, 92), (205, 21, 94), (206, 19, 94), (205, 19, 93),
+ (199, 21, 92), (197, 27, 98), (196, 26, 88), (195, 28, 83),
+ (194, 30, 82), (196, 32, 78), (197, 33, 79), (199, 35, 81)
+ ),
+
+// 514 California
+((80, 121, 173), (83, 126, 183), (81, 124, 185), (79, 123, 187),
+ (72, 120, 188), (65, 118, 190), (60, 116, 189), (56, 114, 188),
+ (46, 114, 192), (50, 116, 194), (54, 118, 197), (64, 123, 199),
+ (75, 129, 202), (87, 132, 197), (100, 136, 193), (105, 135, 189),
+ (111, 134, 186), (134, 128, 166), (152, 127, 158), (170, 126, 150),
+ (183, 122, 145), (196, 119, 141), (202, 117, 138), (209, 115, 136),
+ (219, 96, 122), (219, 88, 120), (220, 80, 119), (214, 77, 127),
+ (208, 74, 136), (204, 74, 141), (200, 75, 146), (198, 73, 156),
+ (194, 68, 161), (185, 58, 174), (181, 52, 179), (178, 46, 184),
+ (164, 47, 190), (150, 48, 196), (144, 49, 197), (138, 51, 198),
+ (122, 59, 197), (126, 53, 190), (131, 48, 183), (132, 47, 175),
+ (134, 47, 168), (131, 46, 166), (129, 45, 164), (119, 44, 158),
+ (111, 51, 153), (100, 63, 147), (111, 66, 141), (122, 69, 135),
+ (134, 66, 131), (146, 64, 127), (151, 63, 126), (156, 62, 125),
+ (154, 64, 127), (154, 62, 132), (154, 61, 137), (154, 64, 141),
+ (155, 68, 146), (155, 68, 147), (156, 68, 148), (158, 69, 153),
+ (156, 74, 156), (150, 78, 164), (153, 81, 163), (157, 85, 162),
+ (158, 85, 160), (159, 86, 159), (157, 85, 160), (153, 81, 165),
+ (130, 76, 177), (125, 73, 176), (120, 71, 176), (122, 68, 170),
+ (125, 65, 164), (125, 61, 162), (126, 57, 161), (127, 47, 162),
+ (112, 40, 169), (82, 35, 179), (73, 39, 175), (64, 44, 171),
+ (63, 48, 167), (62, 52, 163), (66, 58, 158), (66, 61, 155),
+ (62, 63, 161), (58, 64, 166), (54, 65, 171), (54, 65, 172),
+ (55, 65, 174), (58, 63, 176), (62, 60, 178), (67, 61, 175),
+ (69, 58, 175), (63, 60, 171), (61, 63, 171), (60, 67, 171),
+ (59, 66, 172), (59, 66, 173), (62, 66, 169), (64, 65, 168),
+ (61, 73, 155), (58, 82, 156), (56, 92, 157), (55, 96, 160),
+ (55, 100, 164), (55, 102, 171), (57, 101, 179), (59, 101, 187),
+ (57, 100, 189), (57, 97, 196), (58, 98, 197), (59, 99, 199),
+ (66, 98, 202), (75, 96, 202), (82, 90, 203), (88, 83, 200),
+ (87, 73, 193), (79, 70, 190), (72, 67, 187), (70, 66, 186),
+ (69, 66, 185), (69, 63, 182), (77, 59, 178), (91, 55, 173),
+ (103, 53, 167), (123, 51, 155), (126, 52, 153), (130, 53, 152),
+ (129, 56, 149), (126, 60, 147), (130, 63, 146), (131, 70, 146),
+ (148, 84, 151), (156, 91, 152), (164, 98, 154), (164, 97, 154),
+ (165, 97, 154), (166, 94, 152), (165, 94, 149), (164, 92, 150),
+ (162, 92, 153), (162, 97, 166), (162, 95, 169), (162, 94, 173),
+ (159, 89, 177), (157, 85, 180), (159, 81, 181), (161, 81, 181),
+ (165, 90, 193), (167, 93, 194), (169, 96, 196), (168, 99, 195),
+ (167, 98, 194), (164, 94, 194), (161, 93, 195), (157, 96, 200),
+ (149, 97, 209), (143, 97, 218), (141, 94, 216), (140, 92, 215),
+ (134, 86, 206), (128, 77, 198), (121, 72, 194), (110, 68, 190),
+ (94, 74, 208), (92, 76, 212), (90, 79, 217), (88, 86, 223),
+ (91, 91, 225), (95, 98, 227), (103, 109, 222), (112, 122, 218),
+ (125, 133, 216), (139, 145, 215), (153, 155, 218), (162, 163, 222),
+ (166, 170, 231), (168, 178, 235), (172, 186, 238), (175, 188, 239),
+ (177, 193, 236), (175, 191, 234), (174, 190, 233), (168, 183, 234),
+ (154, 175, 233), (142, 168, 230), (131, 159, 227), (122, 146, 224),
+ (116, 134, 219), (113, 123, 215), (111, 115, 211), (106, 108, 210),
+ (102, 103, 209), (98, 101, 207), (93, 96, 207), (88, 88, 206),
+ (83, 82, 207), (80, 78, 204), (75, 78, 204), (74, 81, 205),
+ (74, 88, 208), (75, 98, 212), (75, 104, 215), (74, 109, 222),
+ (75, 111, 225), (71, 110, 224), (67, 110, 223), (64, 107, 221),
+ (63, 109, 218), (62, 109, 212), (63, 110, 209), (66, 112, 209),
+ (73, 109, 206), (82, 108, 203), (89, 99, 199), (96, 91, 198),
+ (98, 83, 193), (99, 75, 185), (95, 72, 181), (90, 67, 178),
+ (89, 68, 176), (87, 66, 175), (87, 64, 177), (84, 63, 180),
+ (82, 61, 180), (78, 63, 177), (71, 63, 174), (65, 61, 170),
+ (60, 60, 160), (57, 62, 156), (55, 69, 156), (56, 74, 160),
+ (61, 82, 164), (68, 93, 168), (75, 98, 174), (84, 100, 175),
+ (91, 100, 175), (96, 103, 173), (99, 105, 172), (98, 107, 174),
+ (96, 114, 176), (93, 119, 181), (93, 124, 186), (95, 125, 193),
+ (96, 129, 195), (101, 133, 195), (102, 136, 193), (99, 132, 186),
+ (94, 128, 179), (88, 127, 172), (84, 123, 171), (81, 123, 171)
+ ),
+
+// 515 Canyon
+((195, 147, 118), (190, 144, 108), (181, 123, 90), (172, 103, 73),
+ (179, 117, 79), (186, 131, 85), (190, 139, 88), (195, 148, 92),
+ (202, 155, 111), (201, 160, 115), (200, 166, 119), (184, 161, 123),
+ (168, 156, 128), (154, 139, 124), (141, 123, 120), (132, 116, 113),
+ (124, 110, 106), (86, 90, 82), (75, 76, 76), (65, 63, 71),
+ (59, 56, 72), (54, 50, 74), (54, 47, 77), (55, 44, 81),
+ (49, 63, 98), (58, 69, 106), (67, 75, 115), (76, 90, 121),
+ (86, 106, 127), (89, 112, 127), (92, 118, 127), (102, 120, 125),
+ (103, 124, 122), (106, 124, 118), (105, 124, 112), (105, 124, 106),
+ (96, 113, 96), (88, 102, 86), (86, 93, 79), (85, 84, 72),
+ (60, 62, 46), (49, 47, 36), (38, 32, 27), (32, 28, 27),
+ (27, 25, 28), (29, 28, 29), (31, 31, 30), (37, 35, 35),
+ (47, 43, 43), (75, 50, 52), (82, 49, 45), (90, 48, 39),
+ (99, 52, 39), (108, 56, 39), (110, 53, 34), (113, 51, 30),
+ (112, 61, 28), (121, 70, 41), (131, 80, 54), (131, 89, 60),
+ (132, 99, 67), (133, 100, 70), (135, 102, 73), (138, 111, 80),
+ (135, 118, 88), (123, 120, 86), (113, 110, 77), (104, 100, 69),
+ (99, 94, 65), (94, 88, 62), (86, 68, 53), (81, 54, 49),
+ (80, 56, 63), (85, 62, 67), (90, 69, 72), (97, 87, 85),
+ (105, 106, 98), (111, 113, 102), (118, 120, 107), (125, 125, 111),
+ (126, 128, 107), (128, 125, 85), (121, 112, 73), (114, 100, 62),
+ (108, 92, 54), (103, 84, 47), (90, 66, 33), (84, 62, 23),
+ (92, 62, 30), (102, 71, 41), (112, 81, 52), (123, 92, 56),
+ (135, 103, 61), (163, 133, 78), (186, 152, 87), (209, 166, 96),
+ (222, 168, 91), (222, 163, 89), (217, 153, 87), (212, 143, 86),
+ (205, 135, 85), (199, 127, 85), (183, 120, 91), (168, 116, 101),
+ (152, 122, 114), (143, 132, 125), (135, 143, 137), (133, 147, 142),
+ (132, 152, 147), (139, 158, 145), (146, 167, 146), (153, 168, 143),
+ (153, 164, 136), (175, 147, 99), (182, 136, 89), (189, 126, 79),
+ (182, 103, 59), (168, 87, 48), (145, 83, 39), (134, 68, 34),
+ (100, 41, 18), (79, 47, 18), (59, 54, 19), (55, 54, 23),
+ (52, 55, 27), (50, 48, 25), (45, 45, 23), (43, 54, 22),
+ (47, 62, 36), (66, 73, 60), (73, 79, 64), (80, 85, 68),
+ (96, 97, 82), (109, 113, 88), (122, 126, 98), (140, 139, 104),
+ (157, 156, 115), (157, 162, 126), (157, 168, 138), (162, 169, 145),
+ (168, 171, 152), (169, 186, 167), (172, 194, 174), (170, 194, 178),
+ (179, 178, 171), (178, 169, 151), (172, 162, 140), (166, 156, 130),
+ (153, 130, 105), (139, 112, 90), (130, 105, 79), (123, 99, 71),
+ (116, 98, 74), (118, 103, 74), (120, 108, 74), (130, 119, 73),
+ (138, 129, 78), (152, 134, 92), (162, 143, 98), (171, 153, 102),
+ (170, 160, 102), (166, 147, 110), (164, 143, 110), (162, 140, 110),
+ (159, 134, 98), (161, 122, 82), (159, 107, 64), (153, 95, 56),
+ (142, 78, 43), (141, 78, 44), (140, 78, 46), (135, 83, 60),
+ (130, 85, 77), (117, 84, 91), (106, 85, 102), (97, 92, 112),
+ (94, 92, 127), (82, 93, 144), (81, 95, 146), (78, 103, 141),
+ (86, 113, 138), (78, 115, 160), (80, 118, 170), (83, 120, 168),
+ (112, 142, 156), (116, 140, 157), (120, 138, 158), (128, 124, 147),
+ (149, 118, 122), (172, 117, 100), (186, 111, 86), (198, 102, 75),
+ (206, 89, 64), (213, 86, 56), (209, 88, 53), (202, 91, 54),
+ (184, 84, 53), (164, 84, 51), (142, 84, 46), (121, 86, 44),
+ (104, 83, 36), (91, 83, 32), (81, 84, 27), (74, 84, 37),
+ (66, 90, 48), (62, 98, 68), (61, 109, 78), (72, 112, 88),
+ (81, 118, 93), (92, 124, 95), (100, 128, 88), (112, 127, 84),
+ (122, 122, 82), (130, 118, 81), (133, 111, 71), (123, 101, 68),
+ (106, 91, 73), (91, 82, 90), (85, 80, 96), (82, 77, 98),
+ (83, 82, 93), (93, 82, 95), (112, 87, 101), (133, 87, 101),
+ (155, 94, 97), (173, 100, 86), (192, 107, 81), (199, 104, 74),
+ (198, 102, 72), (188, 102, 71), (178, 107, 64), (169, 107, 59),
+ (155, 104, 60), (138, 100, 69), (126, 102, 75), (126, 104, 83),
+ (129, 108, 90), (128, 111, 98), (129, 118, 101), (136, 126, 111),
+ (152, 134, 118), (165, 144, 125), (172, 149, 125), (175, 153, 124),
+ (182, 148, 120), (191, 150, 111), (201, 149, 100), (205, 148, 90),
+ (212, 142, 85), (215, 141, 90), (223, 150, 99), (227, 157, 106),
+ (235, 173, 115), (238, 181, 128), (227, 173, 127), (210, 152, 120)
+ ),
+
+// 516 Carnations
+((152, 48, 49), (153, 50, 49), (148, 40, 42), (143, 30, 35),
+ (147, 31, 37), (152, 32, 39), (155, 35, 44), (158, 39, 50),
+ (180, 58, 71), (187, 67, 79), (195, 76, 87), (196, 84, 89),
+ (197, 92, 92), (194, 95, 82), (192, 99, 72), (188, 95, 69),
+ (185, 92, 66), (180, 88, 61), (178, 89, 58), (177, 90, 55),
+ (177, 89, 63), (178, 88, 72), (178, 89, 71), (179, 90, 71),
+ (167, 91, 73), (154, 89, 71), (141, 87, 69), (139, 80, 62),
+ (138, 74, 56), (135, 69, 54), (132, 64, 52), (130, 55, 42),
+ (135, 42, 31), (146, 26, 18), (138, 21, 13), (131, 17, 9),
+ (117, 20, 9), (103, 23, 10), (95, 27, 11), (88, 31, 13),
+ (61, 42, 23), (61, 47, 26), (62, 53, 30), (64, 59, 33),
+ (66, 66, 36), (69, 68, 36), (72, 70, 37), (77, 73, 38),
+ (74, 73, 38), (72, 71, 35), (66, 64, 32), (60, 57, 29),
+ (54, 51, 24), (49, 45, 20), (47, 42, 18), (45, 39, 17),
+ (34, 34, 13), (32, 38, 14), (30, 43, 15), (33, 48, 18),
+ (37, 53, 21), (39, 56, 23), (42, 59, 25), (46, 61, 30),
+ (50, 64, 35), (48, 65, 37), (46, 61, 33), (44, 58, 29),
+ (40, 55, 26), (37, 53, 24), (29, 48, 22), (25, 47, 18),
+ (24, 39, 6), (26, 34, 7), (28, 30, 9), (34, 27, 8),
+ (40, 25, 8), (46, 23, 7), (53, 22, 7), (67, 18, 10),
+ (77, 17, 10), (85, 11, 7), (84, 13, 10), (84, 15, 14),
+ (83, 17, 15), (82, 19, 16), (77, 17, 19), (75, 18, 21),
+ (77, 25, 28), (90, 28, 31), (104, 31, 34), (114, 33, 35),
+ (125, 36, 37), (143, 47, 39), (160, 58, 49), (170, 67, 56),
+ (179, 75, 66), (193, 98, 74), (186, 100, 79), (179, 103, 85),
+ (175, 102, 85), (172, 101, 85), (170, 98, 82), (169, 88, 74),
+ (163, 72, 65), (157, 65, 57), (152, 59, 50), (147, 56, 45),
+ (142, 53, 41), (134, 47, 36), (120, 51, 37), (105, 57, 38),
+ (87, 63, 40), (70, 68, 46), (68, 72, 47), (66, 77, 49),
+ (64, 84, 52), (70, 89, 56), (81, 86, 58), (98, 90, 60),
+ (129, 111, 61), (141, 109, 64), (154, 108, 67), (156, 106, 66),
+ (159, 104, 65), (160, 106, 59), (149, 102, 55), (134, 90, 48),
+ (116, 75, 40), (77, 52, 22), (67, 47, 18), (58, 42, 14),
+ (42, 33, 7), (30, 24, 3), (24, 21, 1), (21, 21, 0),
+ (14, 21, 8), (18, 24, 11), (23, 28, 15), (27, 31, 16),
+ (32, 34, 17), (41, 38, 23), (53, 41, 28), (66, 43, 32),
+ (80, 42, 33), (103, 39, 31), (104, 40, 31), (105, 41, 31),
+ (100, 41, 31), (93, 43, 27), (86, 45, 23), (81, 50, 22),
+ (72, 53, 14), (74, 50, 12), (76, 47, 11), (91, 47, 14),
+ (103, 48, 18), (116, 49, 22), (126, 44, 25), (140, 47, 34),
+ (148, 55, 41), (149, 74, 46), (145, 76, 48), (142, 79, 51),
+ (133, 84, 55), (117, 83, 52), (101, 84, 44), (84, 78, 37),
+ (56, 63, 34), (51, 61, 32), (47, 60, 30), (45, 58, 25),
+ (54, 56, 26), (69, 58, 31), (89, 63, 37), (108, 73, 44),
+ (129, 81, 55), (149, 89, 67), (165, 98, 77), (187, 109, 78),
+ (200, 125, 85), (215, 141, 93), (215, 150, 103), (225, 147, 104),
+ (217, 144, 101), (212, 143, 100), (207, 143, 99), (205, 132, 95),
+ (188, 116, 92), (173, 102, 82), (162, 93, 73), (157, 87, 65),
+ (152, 81, 59), (143, 73, 51), (135, 65, 45), (126, 59, 41),
+ (121, 52, 37), (113, 44, 30), (102, 39, 22), (92, 41, 21),
+ (90, 44, 24), (91, 42, 28), (91, 43, 30), (93, 47, 35),
+ (96, 54, 41), (101, 52, 43), (103, 47, 40), (103, 36, 36),
+ (97, 34, 30), (89, 29, 26), (79, 25, 17), (74, 14, 11),
+ (69, 10, 5), (72, 10, 6), (78, 12, 12), (94, 14, 19),
+ (112, 21, 26), (130, 34, 34), (147, 44, 46), (160, 52, 54),
+ (172, 60, 63), (177, 71, 66), (181, 77, 69), (177, 77, 68),
+ (178, 73, 65), (175, 65, 62), (180, 56, 56), (182, 43, 49),
+ (185, 33, 40), (184, 23, 33), (186, 17, 26), (184, 10, 22),
+ (173, 7, 20), (159, 12, 17), (146, 26, 18), (133, 39, 22),
+ (120, 48, 32), (110, 61, 38), (114, 81, 49), (124, 107, 66),
+ (135, 123, 85), (140, 126, 87), (150, 122, 83), (161, 121, 83),
+ (170, 122, 92), (169, 113, 90), (162, 98, 78), (154, 81, 64),
+ (145, 71, 61), (141, 59, 60), (140, 54, 58), (144, 52, 55),
+ (148, 56, 59), (155, 61, 66), (153, 57, 62), (154, 53, 56)
+ ),
+
+// 517 Carnival
+((203, 92, 124), (201, 82, 109), (200, 79, 105), (199, 77, 101),
+ (197, 75, 96), (196, 73, 92), (195, 73, 89), (194, 73, 87),
+ (186, 72, 78), (183, 70, 75), (181, 69, 73), (177, 69, 76),
+ (173, 69, 79), (169, 68, 80), (166, 68, 81), (164, 69, 83),
+ (163, 71, 85), (164, 72, 97), (167, 77, 111), (170, 82, 125),
+ (171, 92, 139), (173, 102, 154), (173, 106, 160), (174, 110, 166),
+ (182, 126, 186), (188, 132, 196), (194, 139, 206), (196, 146, 212),
+ (199, 154, 219), (199, 157, 220), (200, 160, 221), (201, 159, 218),
+ (200, 155, 213), (201, 140, 187), (198, 128, 172), (195, 117, 158),
+ (190, 106, 148), (185, 95, 138), (184, 90, 134), (183, 86, 130),
+ (181, 81, 117), (181, 83, 115), (181, 85, 113), (182, 90, 121),
+ (183, 96, 129), (184, 100, 133), (186, 104, 138), (191, 115, 149),
+ (196, 122, 158), (203, 136, 166), (204, 138, 170), (206, 141, 174),
+ (206, 141, 176), (206, 141, 178), (206, 139, 177), (207, 137, 176),
+ (202, 129, 166), (199, 124, 159), (196, 119, 153), (195, 114, 145),
+ (195, 110, 138), (194, 106, 133), (193, 102, 129), (191, 95, 119),
+ (187, 86, 108), (178, 69, 91), (176, 64, 85), (174, 60, 80),
+ (174, 60, 80), (174, 60, 81), (173, 60, 83), (171, 64, 91),
+ (172, 75, 124), (175, 82, 141), (178, 89, 158), (183, 95, 171),
+ (188, 102, 185), (190, 106, 191), (193, 110, 198), (196, 117, 210),
+ (197, 122, 219), (201, 123, 228), (200, 119, 223), (199, 116, 218),
+ (198, 114, 213), (197, 113, 208), (194, 110, 195), (190, 111, 181),
+ (189, 113, 155), (186, 114, 151), (184, 115, 148), (183, 114, 149),
+ (183, 113, 151), (178, 112, 154), (182, 112, 156), (185, 111, 159),
+ (189, 111, 164), (192, 115, 186), (192, 115, 199), (192, 116, 213),
+ (193, 116, 216), (195, 116, 219), (196, 114, 215), (193, 112, 206),
+ (178, 101, 189), (168, 98, 185), (158, 96, 181), (155, 94, 176),
+ (153, 92, 171), (152, 89, 158), (149, 86, 147), (152, 80, 140),
+ (149, 75, 139), (149, 75, 153), (153, 77, 155), (157, 79, 158),
+ (164, 89, 163), (174, 96, 168), (184, 104, 177), (193, 113, 187),
+ (199, 122, 208), (199, 126, 215), (200, 131, 222), (200, 134, 225),
+ (200, 137, 228), (201, 143, 232), (199, 148, 233), (198, 150, 234),
+ (193, 147, 236), (193, 145, 236), (193, 145, 235), (193, 146, 235),
+ (193, 149, 230), (194, 153, 224), (192, 150, 217), (192, 145, 209),
+ (194, 132, 194), (193, 124, 188), (193, 117, 182), (191, 114, 179),
+ (189, 112, 176), (184, 102, 168), (180, 94, 158), (178, 85, 150),
+ (178, 78, 139), (177, 67, 132), (177, 64, 131), (177, 61, 130),
+ (175, 59, 130), (174, 58, 131), (175, 61, 127), (178, 62, 124),
+ (191, 79, 124), (194, 84, 127), (197, 89, 130), (201, 98, 142),
+ (203, 107, 155), (204, 115, 167), (203, 127, 176), (202, 136, 183),
+ (204, 144, 188), (205, 154, 199), (205, 154, 201), (206, 154, 204),
+ (206, 153, 209), (204, 151, 214), (199, 146, 217), (194, 142, 217),
+ (190, 132, 217), (190, 128, 217), (191, 125, 217), (195, 122, 220),
+ (198, 115, 224), (199, 111, 225), (198, 109, 228), (198, 113, 228),
+ (198, 112, 226), (202, 117, 224), (208, 119, 225), (212, 121, 223),
+ (212, 123, 223), (212, 130, 221), (209, 135, 219), (206, 143, 216),
+ (203, 151, 214), (202, 151, 213), (201, 152, 213), (201, 151, 212),
+ (197, 149, 208), (194, 147, 204), (193, 142, 200), (192, 139, 196),
+ (193, 137, 195), (193, 133, 195), (193, 126, 194), (194, 120, 192),
+ (195, 111, 193), (194, 103, 190), (192, 96, 184), (190, 90, 179),
+ (189, 85, 170), (189, 84, 160), (191, 80, 153), (193, 79, 145),
+ (193, 73, 131), (191, 68, 117), (189, 63, 101), (187, 63, 85),
+ (190, 66, 74), (195, 75, 72), (201, 84, 74), (205, 90, 80),
+ (207, 97, 86), (207, 102, 95), (210, 109, 105), (212, 116, 117),
+ (214, 125, 134), (217, 132, 152), (219, 137, 169), (217, 140, 184),
+ (217, 142, 197), (216, 142, 208), (217, 142, 216), (216, 143, 220),
+ (218, 142, 222), (217, 143, 218), (215, 141, 213), (213, 140, 209),
+ (214, 142, 207), (213, 144, 206), (213, 146, 205), (213, 150, 203),
+ (211, 151, 198), (208, 148, 195), (207, 146, 191), (205, 140, 185),
+ (202, 133, 183), (199, 128, 179), (198, 124, 172), (196, 118, 168),
+ (195, 114, 163), (197, 112, 159), (198, 110, 156), (198, 109, 156),
+ (202, 111, 151), (202, 113, 149), (202, 115, 147), (203, 119, 147),
+ (204, 121, 146), (202, 121, 151), (206, 121, 153), (207, 118, 155),
+ (208, 115, 155), (208, 109, 151), (207, 105, 142), (204, 96, 134)
+ ),
+
+// 518 Carpenter
+((143, 159, 149), (98, 114, 104), (77, 91, 82), (57, 68, 60),
+ (48, 59, 52), (39, 50, 44), (39, 49, 43), (39, 48, 43),
+ (41, 50, 47), (44, 55, 49), (47, 60, 51), (65, 62, 47),
+ (83, 65, 43), (95, 71, 43), (108, 78, 44), (105, 80, 51),
+ (103, 83, 58), (87, 98, 92), (108, 102, 84), (130, 107, 76),
+ (147, 112, 67), (164, 118, 58), (158, 112, 52), (152, 106, 47),
+ (109, 71, 26), (102, 66, 22), (95, 62, 19), (107, 70, 24),
+ (119, 79, 30), (123, 85, 36), (127, 91, 43), (148, 111, 59),
+ (165, 123, 73), (195, 138, 69), (180, 128, 61), (166, 118, 54),
+ (149, 105, 49), (133, 93, 44), (130, 91, 44), (127, 90, 45),
+ (120, 88, 47), (113, 90, 59), (107, 92, 71), (101, 102, 86),
+ (95, 112, 102), (96, 116, 105), (98, 120, 108), (98, 120, 108),
+ (93, 115, 103), (80, 93, 84), (75, 87, 76), (71, 82, 68),
+ (61, 73, 62), (52, 65, 56), (51, 64, 55), (51, 64, 55),
+ (49, 62, 53), (50, 63, 54), (52, 65, 56), (59, 74, 65),
+ (67, 84, 74), (72, 86, 78), (77, 88, 82), (82, 98, 87),
+ (92, 110, 98), (107, 127, 116), (132, 127, 102), (157, 127, 89),
+ (164, 128, 84), (171, 129, 79), (163, 113, 50), (152, 105, 49),
+ (88, 71, 45), (72, 66, 51), (56, 62, 58), (68, 72, 59),
+ (80, 82, 61), (94, 88, 68), (109, 94, 75), (147, 117, 79),
+ (167, 133, 88), (193, 139, 75), (179, 128, 65), (165, 117, 55),
+ (154, 111, 57), (144, 106, 59), (119, 99, 72), (94, 104, 96),
+ (90, 103, 94), (87, 100, 91), (84, 97, 88), (93, 96, 80),
+ (102, 96, 72), (108, 94, 68), (113, 94, 64), (136, 95, 51),
+ (155, 108, 52), (131, 95, 59), (120, 106, 86), (109, 118, 113),
+ (114, 125, 118), (120, 133, 124), (129, 140, 132), (135, 155, 144),
+ (140, 156, 146), (158, 149, 121), (176, 142, 96), (180, 143, 95),
+ (184, 144, 95), (194, 147, 93), (193, 148, 89), (176, 139, 87),
+ (159, 118, 72), (113, 93, 66), (107, 94, 72), (102, 95, 79),
+ (97, 110, 103), (95, 112, 102), (100, 117, 107), (102, 122, 110),
+ (129, 123, 107), (147, 128, 100), (165, 133, 94), (166, 134, 95),
+ (168, 136, 97), (168, 135, 92), (162, 127, 87), (159, 125, 87),
+ (152, 111, 65), (131, 95, 47), (129, 92, 44), (127, 89, 42),
+ (122, 88, 40), (107, 74, 29), (103, 73, 39), (96, 66, 28),
+ (95, 62, 19), (93, 63, 27), (92, 65, 35), (88, 69, 42),
+ (85, 73, 49), (91, 84, 68), (97, 108, 100), (102, 122, 111),
+ (112, 128, 117), (124, 144, 133), (120, 141, 129), (116, 138, 126),
+ (111, 128, 118), (98, 114, 103), (82, 95, 86), (66, 82, 72),
+ (50, 63, 56), (47, 59, 53), (45, 56, 50), (45, 54, 49),
+ (44, 50, 48), (44, 53, 48), (52, 54, 41), (69, 49, 24),
+ (75, 51, 23), (92, 61, 17), (93, 61, 17), (94, 61, 18),
+ (90, 65, 34), (74, 73, 55), (83, 78, 58), (93, 73, 48),
+ (114, 80, 43), (114, 81, 43), (115, 83, 44), (101, 84, 58),
+ (78, 91, 82), (79, 92, 83), (74, 90, 80), (69, 80, 72),
+ (59, 72, 63), (53, 62, 57), (47, 58, 50), (44, 55, 47),
+ (52, 54, 41), (73, 55, 35), (74, 50, 22), (82, 54, 15),
+ (84, 54, 16), (81, 53, 16), (78, 52, 17), (74, 51, 20),
+ (70, 48, 24), (72, 48, 20), (71, 46, 16), (71, 47, 21),
+ (66, 49, 23), (56, 47, 30), (48, 48, 38), (41, 50, 45),
+ (36, 45, 40), (34, 40, 36), (41, 42, 28), (58, 42, 19),
+ (64, 44, 19), (68, 44, 18), (60, 45, 24), (51, 52, 38),
+ (41, 52, 44), (43, 54, 48), (41, 50, 47), (40, 46, 42),
+ (60, 44, 21), (64, 46, 24), (74, 51, 20), (90, 58, 20),
+ (94, 68, 33), (103, 82, 55), (105, 89, 66), (121, 97, 69),
+ (154, 122, 83), (168, 137, 93), (186, 150, 102), (198, 157, 101),
+ (199, 159, 107), (195, 158, 106), (199, 152, 100), (197, 150, 94),
+ (196, 151, 96), (194, 152, 102), (186, 149, 105), (183, 146, 101),
+ (182, 146, 98), (182, 145, 93), (183, 139, 92), (198, 140, 76),
+ (194, 145, 87), (180, 140, 91), (169, 137, 96), (121, 132, 124),
+ (127, 140, 133), (126, 143, 133), (134, 150, 140), (137, 153, 143),
+ (139, 155, 145), (136, 153, 143), (123, 145, 132), (121, 141, 130),
+ (119, 132, 123), (115, 131, 121), (104, 124, 113), (105, 118, 109),
+ (105, 116, 108), (102, 118, 108), (104, 124, 113), (106, 123, 113),
+ (115, 137, 124), (126, 142, 132), (139, 150, 142), (179, 145, 100)
+ ),
+
+// 519 Cellist
+((141, 91, 68), (93, 57, 37), (80, 47, 29), (68, 37, 21),
+ (65, 36, 20), (63, 35, 20), (59, 33, 19), (55, 32, 18),
+ (43, 26, 14), (40, 25, 14), (37, 24, 14), (36, 23, 12),
+ (35, 23, 11), (38, 25, 12), (41, 27, 14), (43, 27, 14),
+ (46, 28, 15), (55, 36, 19), (60, 41, 22), (65, 46, 26),
+ (73, 52, 30), (81, 58, 34), (86, 63, 38), (92, 68, 43),
+ (109, 92, 68), (111, 98, 77), (113, 104, 87), (117, 102, 84),
+ (121, 101, 81), (116, 99, 79), (112, 98, 78), (106, 93, 78),
+ (105, 79, 62), (105, 66, 41), (110, 65, 40), (115, 64, 39),
+ (116, 64, 38), (117, 65, 37), (116, 65, 37), (115, 66, 38),
+ (105, 59, 35), (94, 54, 30), (83, 50, 26), (75, 48, 27),
+ (68, 47, 28), (68, 47, 29), (69, 47, 30), (75, 50, 33),
+ (88, 63, 39), (131, 100, 63), (150, 115, 73), (169, 131, 83),
+ (190, 152, 100), (212, 174, 117), (218, 179, 120), (224, 185, 124),
+ (231, 184, 123), (231, 183, 120), (232, 183, 117), (225, 170, 104),
+ (218, 157, 92), (215, 154, 90), (213, 151, 88), (206, 146, 80),
+ (194, 137, 74), (181, 121, 66), (175, 116, 64), (169, 112, 62),
+ (165, 109, 60), (162, 107, 58), (159, 101, 57), (159, 98, 53),
+ (143, 91, 48), (134, 85, 45), (126, 80, 43), (116, 77, 41),
+ (107, 74, 40), (102, 71, 39), (98, 69, 38), (91, 63, 36),
+ (87, 58, 34), (83, 54, 30), (80, 51, 29), (78, 48, 28),
+ (77, 47, 27), (76, 46, 27), (71, 43, 25), (66, 42, 24),
+ (55, 37, 22), (49, 32, 19), (44, 28, 16), (42, 26, 15),
+ (40, 24, 15), (38, 23, 14), (37, 22, 13), (38, 23, 13),
+ (41, 27, 15), (59, 39, 24), (75, 47, 30), (92, 56, 37),
+ (101, 59, 40), (111, 63, 43), (131, 72, 51), (153, 83, 58),
+ (192, 97, 71), (200, 109, 77), (209, 121, 84), (212, 124, 85),
+ (215, 128, 87), (208, 126, 85), (194, 120, 81), (176, 118, 77),
+ (160, 114, 72), (124, 90, 53), (115, 83, 49), (107, 77, 45),
+ (94, 66, 39), (85, 60, 33), (81, 57, 30), (79, 54, 29),
+ (71, 48, 26), (68, 47, 24), (66, 46, 23), (66, 45, 23),
+ (66, 44, 24), (64, 45, 24), (63, 45, 24), (64, 46, 25),
+ (68, 48, 27), (79, 53, 30), (81, 54, 31), (83, 55, 32),
+ (87, 58, 34), (92, 60, 36), (98, 65, 37), (104, 67, 37),
+ (123, 72, 42), (135, 73, 44), (147, 75, 47), (153, 77, 47),
+ (159, 80, 48), (170, 86, 54), (181, 95, 60), (188, 101, 67),
+ (190, 104, 69), (188, 104, 70), (186, 103, 68), (185, 102, 67),
+ (172, 98, 62), (155, 84, 54), (141, 71, 44), (132, 60, 35),
+ (104, 48, 24), (97, 46, 22), (91, 45, 20), (87, 45, 20),
+ (88, 49, 23), (91, 53, 29), (96, 59, 33), (106, 70, 38),
+ (115, 79, 46), (121, 84, 54), (123, 85, 53), (125, 87, 52),
+ (130, 89, 53), (132, 87, 52), (127, 78, 48), (119, 71, 42),
+ (111, 64, 34), (109, 62, 34), (107, 61, 34), (97, 59, 36),
+ (89, 59, 40), (82, 62, 46), (85, 66, 49), (92, 68, 50),
+ (100, 71, 52), (103, 74, 58), (107, 76, 57), (112, 73, 50),
+ (119, 69, 42), (119, 66, 39), (114, 63, 36), (107, 58, 31),
+ (92, 47, 21), (89, 45, 20), (87, 44, 19), (82, 41, 18),
+ (77, 38, 18), (73, 36, 17), (69, 35, 16), (67, 33, 15),
+ (67, 34, 16), (71, 36, 16), (77, 40, 19), (87, 48, 24),
+ (100, 60, 32), (117, 75, 39), (134, 89, 47), (151, 104, 57),
+ (163, 117, 70), (167, 122, 79), (164, 120, 84), (162, 118, 78),
+ (156, 114, 75), (146, 104, 69), (133, 90, 66), (125, 80, 56),
+ (123, 75, 47), (127, 71, 42), (139, 68, 42), (153, 68, 46),
+ (168, 73, 50), (177, 78, 56), (185, 85, 64), (189, 87, 70),
+ (199, 95, 73), (199, 104, 73), (195, 112, 75), (184, 113, 78),
+ (182, 114, 77), (177, 114, 71), (168, 111, 64), (152, 102, 60),
+ (138, 95, 57), (127, 88, 53), (114, 81, 48), (101, 74, 43),
+ (88, 66, 38), (79, 60, 34), (72, 53, 32), (67, 48, 29),
+ (61, 43, 25), (56, 39, 23), (51, 34, 21), (48, 32, 19),
+ (45, 30, 17), (45, 31, 17), (45, 34, 19), (47, 37, 21),
+ (49, 40, 23), (52, 40, 22), (54, 41, 23), (56, 43, 26),
+ (59, 45, 29), (63, 45, 29), (68, 46, 29), (76, 52, 32),
+ (88, 61, 37), (103, 73, 44), (119, 86, 50), (143, 100, 71),
+ (163, 111, 81), (154, 106, 77), (137, 96, 60), (128, 87, 62)
+ ),
+
+// 520 Cherry
+((179, 49, 37), (185, 76, 61), (196, 103, 83), (208, 130, 106),
+ (220, 138, 116), (233, 146, 126), (236, 145, 125), (239, 145, 125),
+ (239, 129, 112), (236, 106, 94), (233, 84, 76), (224, 68, 61),
+ (216, 53, 47), (205, 47, 43), (194, 41, 39), (188, 38, 35),
+ (182, 35, 31), (141, 27, 18), (126, 21, 13), (112, 16, 8),
+ (104, 13, 5), (96, 11, 2), (96, 10, 3), (97, 10, 4),
+ (118, 20, 13), (138, 25, 18), (158, 31, 24), (166, 37, 33),
+ (174, 43, 42), (178, 47, 47), (183, 51, 52), (192, 59, 56),
+ (193, 58, 58), (179, 58, 54), (174, 52, 47), (169, 47, 41),
+ (171, 38, 35), (174, 29, 29), (174, 23, 25), (174, 18, 21),
+ (179, 9, 21), (185, 10, 23), (191, 12, 25), (191, 13, 25),
+ (191, 14, 26), (188, 18, 26), (186, 22, 27), (183, 31, 28),
+ (182, 36, 32), (181, 51, 41), (183, 65, 50), (186, 80, 59),
+ (199, 91, 70), (213, 103, 82), (217, 107, 86), (221, 112, 91),
+ (226, 116, 94), (228, 112, 93), (231, 108, 92), (232, 111, 96),
+ (234, 115, 100), (235, 117, 102), (237, 120, 105), (235, 122, 108),
+ (229, 116, 105), (219, 113, 98), (199, 98, 86), (180, 84, 74),
+ (165, 71, 63), (151, 59, 53), (117, 41, 34), (93, 27, 22),
+ (66, 4, 8), (55, 2, 5), (45, 0, 2), (51, 0, 2),
+ (57, 1, 3), (59, 1, 2), (62, 2, 1), (64, 2, 0),
+ (66, 3, 1), (77, 8, 4), (87, 10, 5), (98, 12, 7),
+ (104, 12, 7), (110, 13, 8), (129, 16, 14), (144, 18, 19),
+ (157, 15, 16), (155, 14, 17), (153, 13, 18), (149, 11, 17),
+ (146, 9, 17), (133, 6, 13), (118, 6, 10), (103, 5, 7),
+ (91, 2, 3), (77, 0, 3), (73, 0, 1), (70, 0, 0),
+ (68, 0, 0), (66, 0, 0), (64, 0, 0), (61, 0, 0),
+ (59, 1, 1), (59, 1, 1), (59, 2, 1), (59, 2, 0),
+ (59, 2, 0), (58, 1, 0), (60, 2, 1), (62, 2, 1),
+ (64, 2, 1), (71, 1, 0), (73, 1, 0), (76, 1, 0),
+ (81, 3, 0), (90, 3, 0), (101, 4, 0), (113, 3, 3),
+ (131, 2, 6), (140, 2, 6), (150, 3, 7), (150, 2, 7),
+ (151, 2, 7), (146, 1, 7), (142, 2, 6), (139, 2, 4),
+ (134, 1, 2), (121, 2, 0), (118, 2, 0), (116, 3, 0),
+ (112, 2, 0), (110, 1, 0), (111, 1, 0), (110, 1, 0),
+ (114, 1, 0), (119, 4, 1), (125, 7, 3), (128, 10, 5),
+ (132, 14, 8), (140, 25, 15), (146, 33, 21), (146, 37, 25),
+ (144, 37, 23), (136, 37, 23), (132, 35, 23), (128, 33, 23),
+ (119, 25, 17), (112, 16, 11), (108, 9, 4), (104, 4, 2),
+ (96, 2, 2), (95, 1, 1), (95, 1, 1), (94, 1, 0),
+ (93, 1, 0), (92, 1, 0), (92, 1, 0), (92, 1, 0),
+ (93, 2, 1), (100, 5, 5), (104, 6, 6), (108, 8, 8),
+ (117, 11, 10), (123, 17, 12), (130, 23, 17), (136, 28, 20),
+ (143, 28, 16), (141, 27, 15), (140, 27, 15), (132, 25, 14),
+ (125, 19, 10), (118, 13, 6), (111, 9, 3), (103, 5, 1),
+ (97, 2, 0), (93, 1, 0), (90, 2, 0), (91, 3, 0),
+ (93, 5, 1), (98, 6, 4), (103, 9, 8), (108, 15, 12),
+ (131, 30, 22), (138, 33, 26), (146, 37, 31), (157, 44, 40),
+ (169, 53, 46), (187, 56, 49), (199, 58, 50), (209, 57, 52),
+ (213, 57, 54), (216, 56, 54), (208, 57, 51), (201, 58, 53),
+ (192, 66, 62), (192, 71, 66), (186, 78, 65), (187, 77, 61),
+ (181, 86, 70), (184, 88, 69), (182, 86, 64), (182, 72, 47),
+ (173, 61, 41), (164, 51, 31), (151, 43, 25), (135, 31, 16),
+ (123, 20, 11), (113, 11, 5), (105, 6, 3), (97, 3, 1),
+ (90, 1, 0), (83, 0, 0), (79, 0, 0), (79, 0, 0),
+ (79, 0, 0), (79, 0, 0), (81, 1, 0), (87, 2, 0),
+ (94, 4, 0), (102, 7, 0), (109, 10, 4), (114, 12, 7),
+ (116, 15, 9), (115, 17, 8), (112, 21, 11), (111, 20, 13),
+ (110, 22, 13), (115, 20, 11), (120, 19, 11), (132, 19, 15),
+ (147, 23, 18), (165, 27, 22), (180, 26, 25), (193, 26, 29),
+ (202, 26, 32), (203, 27, 33), (198, 22, 30), (189, 18, 26),
+ (179, 13, 22), (164, 9, 17), (149, 4, 12), (137, 1, 9),
+ (131, 0, 9), (127, 0, 7), (124, 0, 7), (123, 0, 8),
+ (125, 2, 8), (131, 4, 9), (138, 7, 9), (155, 14, 17),
+ (164, 20, 21), (160, 22, 19), (151, 21, 12), (162, 34, 21)
+ ),
+
+// 521 Circus
+((43, 95, 52), (58, 92, 51), (71, 87, 46), (85, 83, 41),
+ (95, 73, 37), (105, 63, 34), (111, 58, 35), (117, 53, 36),
+ (144, 35, 38), (153, 25, 33), (163, 15, 28), (168, 10, 29),
+ (173, 5, 30), (173, 8, 35), (173, 11, 41), (172, 14, 44),
+ (171, 18, 48), (164, 30, 70), (157, 35, 84), (151, 40, 98),
+ (143, 46, 108), (136, 53, 118), (137, 57, 124), (138, 61, 131),
+ (144, 63, 156), (142, 65, 157), (141, 68, 158), (140, 74, 147),
+ (139, 80, 136), (140, 82, 130), (141, 85, 125), (143, 94, 115),
+ (140, 104, 103), (125, 123, 68), (124, 129, 54), (123, 135, 40),
+ (123, 140, 34), (123, 146, 28), (121, 147, 27), (120, 148, 26),
+ (117, 144, 31), (119, 137, 34), (121, 131, 38), (117, 123, 47),
+ (113, 115, 57), (110, 110, 63), (107, 106, 69), (109, 100, 80),
+ (112, 92, 90), (125, 72, 111), (123, 64, 118), (122, 56, 126),
+ (120, 51, 128), (119, 47, 130), (118, 44, 129), (118, 42, 128),
+ (100, 33, 117), (87, 35, 111), (75, 38, 105), (66, 42, 101),
+ (58, 47, 97), (55, 48, 94), (53, 50, 91), (53, 52, 85),
+ (58, 54, 78), (77, 58, 67), (88, 57, 61), (99, 56, 55),
+ (105, 53, 50), (112, 50, 46), (126, 44, 35), (138, 37, 25),
+ (153, 26, 13), (155, 24, 10), (157, 22, 7), (155, 21, 4),
+ (154, 20, 2), (153, 18, 1), (152, 16, 1), (149, 13, 2),
+ (143, 10, 7), (130, 13, 18), (124, 13, 22), (119, 14, 26),
+ (117, 14, 30), (116, 14, 34), (115, 14, 46), (111, 17, 58),
+ (96, 26, 68), (88, 32, 70), (80, 38, 73), (77, 41, 76),
+ (74, 45, 79), (69, 53, 84), (63, 59, 86), (55, 64, 87),
+ (47, 67, 87), (36, 72, 92), (33, 74, 96), (30, 76, 100),
+ (29, 74, 101), (28, 73, 102), (25, 67, 103), (20, 59, 103),
+ (11, 48, 103), (9, 42, 101), (8, 37, 99), (9, 34, 97),
+ (11, 31, 96), (17, 27, 95), (28, 26, 97), (38, 27, 100),
+ (49, 28, 103), (70, 32, 99), (76, 32, 97), (83, 33, 95),
+ (96, 33, 90), (104, 31, 86), (107, 30, 76), (103, 30, 68),
+ (92, 28, 43), (86, 24, 33), (81, 21, 24), (77, 20, 20),
+ (73, 19, 17), (64, 19, 11), (58, 17, 7), (54, 18, 7),
+ (52, 17, 9), (49, 19, 20), (48, 18, 23), (48, 18, 26),
+ (45, 17, 32), (42, 16, 39), (41, 19, 49), (41, 26, 61),
+ (42, 36, 82), (44, 39, 88), (47, 42, 95), (51, 45, 99),
+ (56, 48, 103), (69, 57, 113), (85, 66, 124), (100, 74, 131),
+ (115, 80, 135), (145, 86, 134), (153, 87, 134), (162, 89, 135),
+ (174, 93, 136), (184, 96, 139), (191, 96, 143), (195, 92, 140),
+ (201, 76, 124), (201, 72, 120), (201, 69, 117), (199, 64, 118),
+ (195, 58, 115), (190, 51, 108), (181, 43, 91), (174, 40, 70),
+ (169, 43, 56), (162, 64, 40), (158, 69, 36), (155, 74, 32),
+ (151, 86, 24), (148, 97, 20), (148, 111, 19), (147, 126, 23),
+ (138, 145, 37), (136, 144, 41), (135, 143, 45), (135, 135, 51),
+ (136, 123, 55), (132, 110, 56), (128, 102, 55), (128, 91, 57),
+ (132, 76, 60), (142, 60, 65), (151, 45, 73), (156, 36, 79),
+ (161, 32, 85), (165, 30, 92), (170, 26, 99), (176, 24, 110),
+ (182, 27, 134), (181, 28, 138), (181, 29, 142), (181, 29, 146),
+ (182, 27, 145), (180, 24, 141), (177, 21, 137), (171, 18, 134),
+ (163, 16, 132), (156, 12, 129), (148, 8, 122), (139, 5, 113),
+ (127, 2, 103), (112, 1, 94), (97, 2, 88), (82, 2, 84),
+ (67, 3, 80), (56, 4, 77), (45, 6, 73), (35, 7, 70),
+ (25, 9, 69), (16, 12, 69), (10, 14, 71), (6, 16, 74),
+ (4, 16, 76), (2, 14, 76), (1, 13, 75), (2, 13, 73),
+ (7, 14, 73), (16, 17, 72), (25, 18, 69), (32, 16, 63),
+ (37, 14, 55), (42, 13, 48), (49, 18, 44), (57, 25, 41),
+ (62, 30, 39), (64, 31, 35), (62, 28, 33), (57, 27, 33),
+ (50, 27, 35), (43, 30, 40), (36, 31, 43), (32, 31, 51),
+ (27, 28, 57), (20, 26, 64), (14, 26, 72), (7, 27, 78),
+ (4, 28, 85), (3, 30, 91), (4, 34, 97), (5, 37, 101),
+ (7, 41, 105), (8, 42, 108), (10, 42, 110), (12, 42, 112),
+ (15, 44, 112), (17, 47, 112), (17, 48, 111), (16, 47, 111),
+ (14, 46, 111), (15, 45, 109), (16, 49, 107), (19, 55, 104),
+ (20, 60, 100), (20, 65, 96), (18, 69, 92), (18, 73, 87),
+ (22, 78, 80), (29, 84, 70), (37, 90, 61), (41, 94, 53)
+ ),
+
+// 522 City_Street
+((73, 45, 53), (42, 26, 29), (32, 16, 16), (22, 6, 4),
+ (28, 10, 6), (34, 14, 8), (39, 19, 10), (44, 24, 13),
+ (72, 51, 39), (86, 63, 51), (100, 76, 64), (109, 85, 71),
+ (118, 94, 78), (121, 95, 86), (124, 96, 94), (122, 94, 96),
+ (121, 93, 98), (104, 86, 96), (96, 82, 93), (89, 78, 90),
+ (85, 71, 84), (81, 64, 79), (79, 62, 77), (78, 60, 75),
+ (75, 65, 76), (74, 65, 72), (73, 65, 68), (71, 56, 58),
+ (70, 48, 48), (69, 44, 43), (69, 41, 39), (67, 35, 32),
+ (63, 30, 27), (56, 23, 16), (54, 17, 10), (52, 12, 5),
+ (49, 8, 3), (46, 5, 1), (44, 5, 1), (42, 5, 1),
+ (32, 6, 2), (31, 5, 1), (30, 5, 1), (31, 6, 0),
+ (33, 7, 0), (33, 7, 0), (33, 8, 1), (34, 9, 1),
+ (35, 9, 1), (43, 14, 3), (45, 17, 6), (47, 21, 10),
+ (47, 26, 14), (47, 31, 18), (47, 32, 19), (47, 34, 20),
+ (42, 34, 24), (39, 32, 25), (36, 31, 26), (35, 27, 23),
+ (34, 23, 20), (33, 20, 18), (33, 18, 16), (35, 14, 12),
+ (37, 10, 9), (44, 3, 4), (48, 2, 3), (52, 2, 2),
+ (54, 2, 1), (57, 3, 1), (59, 3, 1), (61, 2, 0),
+ (64, 2, 0), (64, 2, 0), (64, 3, 0), (65, 4, 0),
+ (66, 6, 0), (67, 6, 0), (69, 6, 0), (73, 6, 1),
+ (76, 5, 3), (75, 10, 5), (75, 17, 8), (76, 25, 12),
+ (76, 28, 16), (77, 31, 20), (78, 37, 25), (79, 42, 29),
+ (80, 55, 29), (83, 59, 30), (86, 64, 32), (89, 65, 34),
+ (92, 66, 36), (96, 68, 38), (98, 71, 40), (103, 78, 43),
+ (110, 83, 47), (133, 101, 65), (141, 113, 77), (150, 126, 90),
+ (153, 130, 95), (156, 134, 100), (159, 139, 107), (160, 140, 109),
+ (152, 129, 95), (146, 118, 85), (140, 108, 76), (137, 102, 71),
+ (135, 96, 66), (123, 81, 51), (112, 65, 37), (108, 50, 22),
+ (103, 37, 13), (108, 23, 4), (105, 21, 4), (103, 19, 4),
+ (96, 14, 5), (86, 10, 8), (79, 8, 12), (78, 11, 16),
+ (79, 21, 19), (81, 27, 23), (83, 34, 27), (87, 41, 30),
+ (91, 49, 34), (101, 63, 42), (116, 77, 47), (126, 90, 51),
+ (134, 93, 54), (137, 93, 51), (135, 90, 49), (134, 88, 48),
+ (127, 83, 44), (116, 74, 41), (108, 61, 34), (94, 51, 29),
+ (67, 32, 23), (63, 31, 25), (60, 31, 28), (62, 34, 30),
+ (64, 37, 32), (70, 45, 36), (70, 55, 45), (72, 62, 53),
+ (73, 67, 59), (80, 68, 55), (78, 66, 53), (77, 65, 51),
+ (73, 61, 49), (69, 59, 49), (66, 56, 47), (67, 57, 45),
+ (79, 65, 46), (84, 69, 48), (89, 73, 50), (96, 79, 56),
+ (101, 84, 60), (105, 90, 64), (108, 91, 68), (113, 90, 70),
+ (117, 94, 77), (109, 94, 84), (106, 94, 87), (103, 94, 90),
+ (103, 91, 93), (108, 98, 100), (115, 104, 106), (123, 113, 111),
+ (131, 126, 123), (133, 127, 124), (135, 128, 126), (136, 125, 126),
+ (136, 117, 119), (135, 110, 112), (130, 98, 95), (123, 85, 79),
+ (118, 70, 64), (113, 53, 52), (111, 39, 41), (110, 29, 29),
+ (106, 23, 16), (100, 17, 6), (95, 11, 2), (89, 4, 0),
+ (75, 4, 0), (69, 5, 1), (64, 6, 3), (55, 8, 5),
+ (47, 10, 9), (44, 10, 13), (45, 12, 18), (49, 19, 28),
+ (59, 32, 41), (73, 51, 59), (89, 71, 78), (110, 91, 98),
+ (131, 112, 119), (154, 133, 139), (172, 157, 163), (184, 182, 185),
+ (193, 204, 203), (206, 222, 221), (221, 234, 229), (233, 241, 235),
+ (234, 242, 239), (223, 236, 234), (211, 227, 227), (199, 216, 217),
+ (193, 200, 199), (182, 182, 181), (162, 158, 157), (139, 135, 131),
+ (116, 112, 107), (97, 91, 86), (82, 72, 66), (69, 54, 48),
+ (58, 38, 31), (48, 29, 19), (45, 25, 13), (46, 24, 10),
+ (50, 22, 8), (55, 20, 5), (57, 20, 4), (60, 24, 6),
+ (63, 29, 11), (65, 34, 16), (67, 36, 19), (63, 36, 20),
+ (56, 35, 23), (52, 35, 25), (48, 36, 30), (51, 36, 36),
+ (52, 36, 42), (48, 36, 47), (47, 34, 49), (44, 31, 47),
+ (47, 29, 45), (50, 27, 42), (50, 26, 40), (46, 25, 39),
+ (39, 22, 35), (32, 19, 29), (26, 16, 24), (23, 15, 18),
+ (23, 18, 17), (26, 22, 18), (33, 29, 21), (40, 35, 28),
+ (52, 44, 38), (67, 52, 50), (80, 60, 62), (91, 67, 68),
+ (86, 65, 63), (82, 63, 59), (78, 55, 55), (72, 47, 51)
+ ),
+
+// 523 Clash
+((85, 129, 75), (24, 79, 141), (27, 75, 124), (31, 72, 108),
+ (35, 62, 102), (39, 53, 97), (40, 51, 90), (41, 49, 84),
+ (33, 46, 59), (32, 48, 49), (31, 51, 39), (30, 46, 35),
+ (30, 41, 32), (40, 34, 30), (51, 28, 29), (56, 25, 26),
+ (61, 22, 23), (63, 15, 18), (52, 14, 24), (41, 13, 30),
+ (33, 12, 44), (26, 12, 58), (25, 10, 59), (25, 8, 60),
+ (23, 12, 70), (27, 13, 72), (31, 14, 75), (30, 16, 85),
+ (29, 19, 95), (26, 20, 100), (23, 22, 105), (19, 24, 115),
+ (22, 23, 116), (30, 28, 100), (48, 34, 87), (66, 40, 74),
+ (71, 41, 73), (77, 43, 73), (74, 42, 76), (71, 42, 79),
+ (51, 24, 109), (36, 19, 119), (21, 15, 130), (21, 22, 127),
+ (21, 29, 124), (22, 36, 117), (23, 43, 110), (28, 72, 91),
+ (31, 86, 62), (49, 94, 32), (61, 92, 27), (73, 91, 22),
+ (85, 79, 40), (98, 67, 59), (103, 61, 64), (108, 55, 70),
+ (84, 28, 123), (72, 18, 126), (60, 9, 130), (55, 7, 129),
+ (51, 6, 129), (54, 12, 121), (58, 19, 114), (78, 37, 97),
+ (98, 44, 75), (121, 84, 48), (122, 89, 36), (124, 94, 24),
+ (117, 91, 29), (110, 88, 35), (88, 78, 37), (63, 60, 36),
+ (26, 47, 40), (27, 62, 31), (28, 77, 23), (43, 106, 17),
+ (59, 135, 11), (74, 143, 9), (90, 152, 8), (108, 160, 10),
+ (119, 166, 12), (128, 160, 16), (124, 150, 18), (120, 141, 21),
+ (117, 136, 21), (114, 132, 21), (104, 122, 11), (102, 118, 16),
+ (120, 126, 15), (128, 133, 17), (136, 141, 20), (141, 140, 21),
+ (146, 139, 23), (135, 129, 29), (116, 118, 52), (101, 95, 83),
+ (88, 75, 92), (81, 54, 114), (99, 52, 99), (117, 51, 84),
+ (124, 57, 73), (131, 63, 63), (141, 63, 42), (144, 58, 34),
+ (104, 65, 15), (89, 61, 19), (74, 57, 23), (65, 55, 19),
+ (57, 54, 16), (51, 40, 16), (46, 32, 18), (40, 26, 17),
+ (35, 19, 23), (19, 4, 51), (14, 5, 58), (10, 6, 65),
+ (10, 15, 75), (13, 24, 77), (7, 39, 75), (13, 60, 60),
+ (16, 72, 40), (25, 70, 44), (34, 68, 48), (37, 56, 54),
+ (41, 44, 60), (60, 33, 69), (89, 40, 65), (109, 53, 60),
+ (120, 70, 51), (131, 101, 17), (121, 102, 12), (111, 104, 8),
+ (90, 101, 15), (79, 87, 23), (66, 66, 26), (50, 50, 41),
+ (59, 25, 57), (58, 20, 67), (57, 15, 78), (57, 11, 81),
+ (58, 7, 84), (54, 13, 94), (54, 16, 105), (49, 19, 114),
+ (45, 18, 126), (59, 23, 146), (61, 22, 151), (63, 21, 156),
+ (66, 17, 175), (75, 15, 186), (74, 15, 193), (57, 14, 199),
+ (37, 7, 202), (30, 7, 196), (24, 8, 191), (17, 11, 178),
+ (13, 16, 166), (8, 19, 147), (13, 25, 133), (16, 27, 118),
+ (9, 24, 99), (12, 26, 80), (10, 22, 75), (9, 19, 71),
+ (11, 17, 76), (9, 15, 78), (10, 9, 74), (16, 9, 76),
+ (32, 11, 84), (42, 15, 87), (53, 19, 91), (70, 32, 100),
+ (73, 42, 117), (78, 42, 134), (85, 40, 139), (76, 47, 145),
+ (58, 42, 144), (49, 31, 131), (46, 29, 113), (41, 25, 93),
+ (39, 19, 79), (37, 14, 73), (32, 8, 70), (32, 5, 76),
+ (18, 3, 104), (15, 7, 107), (12, 11, 111), (18, 18, 103),
+ (20, 25, 90), (35, 47, 72), (54, 68, 47), (74, 88, 27),
+ (97, 114, 15), (105, 132, 6), (109, 133, 4), (113, 132, 4),
+ (95, 126, 5), (72, 107, 14), (68, 91, 28), (56, 86, 36),
+ (34, 81, 43), (33, 81, 51), (39, 95, 45), (41, 101, 36),
+ (53, 108, 36), (50, 129, 51), (56, 128, 80), (63, 118, 106),
+ (42, 114, 147), (31, 96, 186), (26, 79, 198), (18, 64, 198),
+ (9, 52, 186), (4, 53, 167), (12, 53, 145), (11, 53, 134),
+ (11, 57, 131), (17, 53, 126), (19, 44, 137), (34, 39, 160),
+ (46, 44, 174), (37, 58, 196), (48, 58, 210), (70, 73, 197),
+ (69, 105, 181), (80, 118, 147), (103, 129, 105), (120, 142, 76),
+ (126, 150, 44), (125, 157, 47), (121, 151, 78), (101, 142, 81),
+ (79, 147, 84), (63, 144, 88), (60, 131, 71), (60, 130, 50),
+ (61, 138, 26), (75, 142, 14), (67, 144, 33), (53, 144, 61),
+ (60, 122, 94), (38, 109, 126), (14, 101, 140), (20, 68, 159),
+ (20, 45, 160), (17, 41, 139), (27, 32, 116), (39, 27, 89),
+ (50, 44, 68), (65, 59, 49), (82, 73, 28), (98, 103, 14),
+ (117, 127, 11), (131, 141, 7), (105, 132, 49), (78, 122, 91)
+ ),
+
+// 524 Clouds
+((135, 182, 203), (158, 189, 207), (169, 188, 207), (181, 188, 207),
+ (192, 188, 205), (203, 188, 204), (207, 187, 202), (211, 186, 200),
+ (205, 180, 193), (199, 176, 192), (193, 172, 191), (190, 171, 192),
+ (187, 170, 194), (186, 170, 194), (185, 170, 195), (183, 170, 196),
+ (181, 170, 198), (172, 172, 207), (172, 173, 209), (173, 174, 212),
+ (174, 175, 212), (175, 176, 213), (174, 175, 213), (174, 175, 214),
+ (162, 170, 211), (156, 162, 203), (151, 155, 196), (148, 144, 180),
+ (145, 133, 165), (142, 129, 161), (140, 126, 157), (140, 124, 153),
+ (143, 127, 153), (155, 135, 156), (160, 136, 154), (166, 137, 153),
+ (166, 142, 159), (167, 147, 166), (164, 151, 171), (162, 156, 177),
+ (149, 166, 189), (135, 161, 183), (122, 156, 178), (104, 147, 168),
+ (87, 138, 159), (78, 132, 153), (69, 127, 148), (55, 115, 136),
+ (43, 103, 126), (34, 89, 111), (34, 88, 110), (34, 87, 109),
+ (40, 92, 115), (46, 98, 121), (51, 101, 126), (56, 105, 132),
+ (77, 126, 157), (84, 135, 167), (91, 144, 177), (94, 149, 183),
+ (98, 155, 189), (100, 156, 191), (103, 157, 193), (107, 160, 197),
+ (108, 159, 197), (107, 162, 197), (107, 163, 196), (107, 164, 195),
+ (107, 164, 195), (107, 164, 195), (105, 163, 194), (104, 162, 193),
+ (95, 168, 192), (90, 167, 190), (86, 167, 188), (80, 161, 184),
+ (74, 156, 180), (70, 152, 176), (66, 148, 173), (59, 144, 167),
+ (52, 141, 161), (51, 136, 156), (55, 135, 157), (59, 135, 159),
+ (62, 136, 161), (66, 138, 164), (76, 144, 170), (84, 149, 176),
+ (104, 158, 187), (108, 156, 188), (112, 154, 190), (110, 151, 186),
+ (109, 148, 183), (102, 141, 176), (94, 131, 168), (88, 123, 158),
+ (85, 113, 144), (77, 87, 113), (64, 76, 100), (52, 65, 88),
+ (46, 62, 86), (40, 60, 84), (37, 60, 82), (44, 63, 86),
+ (71, 77, 100), (77, 87, 113), (84, 98, 127), (86, 104, 133),
+ (88, 110, 140), (91, 121, 155), (97, 133, 166), (106, 143, 178),
+ (111, 152, 187), (115, 165, 199), (113, 166, 199), (112, 168, 199),
+ (105, 167, 196), (98, 168, 194), (88, 167, 189), (79, 163, 184),
+ (63, 153, 169), (59, 148, 163), (55, 144, 158), (55, 144, 157),
+ (56, 145, 157), (60, 147, 159), (66, 149, 163), (72, 151, 169),
+ (79, 152, 172), (96, 156, 182), (101, 159, 185), (106, 162, 189),
+ (118, 167, 196), (126, 172, 204), (130, 173, 209), (132, 169, 209),
+ (127, 162, 202), (123, 156, 196), (120, 151, 190), (119, 149, 188),
+ (119, 148, 186), (120, 142, 178), (131, 136, 165), (139, 128, 150),
+ (140, 116, 131), (125, 97, 108), (118, 95, 108), (111, 94, 109),
+ (106, 96, 109), (113, 103, 112), (117, 107, 113), (116, 111, 112),
+ (103, 116, 129), (98, 120, 135), (94, 124, 142), (97, 136, 155),
+ (107, 148, 169), (118, 159, 177), (130, 166, 181), (136, 168, 183),
+ (140, 162, 176), (141, 142, 144), (139, 136, 137), (137, 130, 130),
+ (132, 117, 117), (117, 111, 111), (102, 99, 103), (83, 84, 89),
+ (53, 59, 60), (50, 53, 54), (48, 47, 49), (41, 45, 48),
+ (38, 49, 56), (37, 57, 69), (39, 66, 81), (43, 75, 93),
+ (53, 83, 103), (63, 89, 109), (70, 94, 115), (73, 100, 121),
+ (75, 106, 128), (74, 111, 137), (76, 114, 146), (80, 116, 147),
+ (88, 105, 132), (88, 101, 126), (88, 98, 121), (85, 91, 113),
+ (84, 88, 111), (84, 90, 113), (89, 94, 117), (92, 98, 119),
+ (97, 103, 123), (99, 108, 126), (100, 115, 134), (96, 114, 135),
+ (94, 115, 141), (91, 116, 146), (87, 117, 149), (83, 115, 150),
+ (80, 122, 156), (72, 117, 148), (65, 109, 136), (57, 99, 126),
+ (47, 85, 112), (40, 69, 98), (36, 63, 92), (32, 57, 86),
+ (28, 52, 79), (23, 51, 74), (17, 50, 73), (14, 48, 71),
+ (11, 47, 69), (9, 42, 64), (10, 38, 60), (11, 35, 57),
+ (15, 35, 57), (19, 36, 55), (25, 38, 56), (33, 39, 56),
+ (39, 40, 53), (39, 38, 52), (39, 37, 55), (37, 37, 53),
+ (35, 38, 56), (36, 41, 61), (40, 47, 63), (39, 52, 69),
+ (36, 59, 78), (28, 66, 86), (19, 73, 93), (11, 79, 101),
+ (9, 86, 106), (10, 90, 111), (12, 91, 112), (14, 93, 113),
+ (17, 93, 113), (21, 93, 115), (24, 96, 116), (27, 98, 119),
+ (30, 99, 120), (33, 99, 123), (32, 100, 123), (34, 100, 124),
+ (38, 102, 126), (42, 105, 128), (45, 111, 133), (52, 118, 140),
+ (54, 125, 146), (55, 132, 152), (59, 138, 160), (65, 144, 166),
+ (72, 150, 174), (87, 159, 182), (104, 167, 190), (120, 176, 198)
+ ),
+
+// 525 Copper
+((255, 217, 186), (255, 202, 167), (255, 188, 153), (255, 175, 140),
+ (243, 161, 124), (232, 147, 108), (225, 140, 99), (218, 134, 91),
+ (191, 106, 65), (181, 97, 58), (171, 88, 51), (163, 82, 47),
+ (155, 77, 44), (151, 78, 44), (148, 79, 44), (149, 79, 44),
+ (151, 80, 45), (165, 89, 56), (172, 97, 61), (179, 106, 67),
+ (186, 110, 69), (194, 114, 71), (194, 114, 70), (195, 114, 69),
+ (179, 102, 63), (164, 92, 55), (150, 83, 48), (131, 71, 39),
+ (112, 59, 31), (101, 53, 26), (91, 47, 22), (75, 39, 16),
+ (61, 29, 12), (59, 24, 9), (70, 32, 14), (81, 41, 20),
+ (101, 54, 30), (122, 67, 41), (133, 74, 48), (144, 81, 55),
+ (190, 111, 80), (207, 125, 91), (225, 139, 102), (233, 147, 108),
+ (241, 155, 115), (242, 154, 115), (244, 154, 115), (244, 152, 114),
+ (240, 147, 111), (228, 140, 98), (220, 131, 89), (213, 122, 80),
+ (203, 116, 73), (194, 110, 67), (188, 106, 64), (182, 103, 61),
+ (159, 83, 48), (147, 76, 42), (135, 69, 37), (121, 62, 31),
+ (108, 56, 25), (102, 52, 22), (96, 49, 20), (85, 41, 14),
+ (76, 35, 10), (55, 20, 2), (47, 14, 1), (40, 9, 0),
+ (39, 9, 0), (39, 9, 0), (36, 6, 0), (32, 2, 0),
+ (26, 1, 0), (25, 3, 0), (25, 5, 0), (24, 4, 0),
+ (24, 4, 0), (23, 3, 0), (22, 2, 0), (18, 0, 0),
+ (14, 0, 0), (6, 0, 0), (5, 0, 0), (4, 0, 0),
+ (4, 0, 0), (4, 0, 0), (2, 0, 0), (2, 0, 0),
+ (4, 0, 0), (8, 1, 0), (13, 2, 0), (16, 3, 0),
+ (20, 4, 0), (25, 6, 0), (31, 6, 0), (33, 10, 0),
+ (36, 13, 1), (43, 14, 1), (46, 14, 1), (49, 14, 1),
+ (51, 15, 1), (53, 16, 2), (59, 21, 6), (68, 28, 10),
+ (100, 48, 25), (119, 61, 35), (138, 75, 45), (148, 81, 50),
+ (158, 87, 56), (177, 104, 68), (197, 118, 79), (213, 130, 92),
+ (228, 144, 107), (248, 169, 132), (250, 173, 136), (253, 178, 140),
+ (255, 179, 146), (255, 182, 148), (255, 183, 150), (255, 185, 147),
+ (249, 174, 139), (240, 164, 129), (232, 155, 120), (225, 149, 113),
+ (218, 144, 107), (203, 135, 95), (190, 118, 84), (175, 111, 73),
+ (166, 99, 63), (148, 85, 55), (147, 85, 55), (147, 85, 56),
+ (144, 87, 56), (146, 84, 53), (148, 85, 55), (154, 85, 55),
+ (171, 94, 61), (175, 98, 61), (179, 103, 61), (180, 102, 58),
+ (181, 102, 56), (177, 98, 52), (174, 89, 51), (167, 87, 48),
+ (163, 85, 47), (155, 80, 40), (154, 79, 41), (154, 79, 43),
+ (154, 80, 47), (160, 88, 52), (170, 94, 59), (181, 104, 67),
+ (205, 126, 83), (209, 131, 87), (214, 136, 92), (222, 139, 98),
+ (223, 142, 98), (218, 136, 94), (209, 131, 89), (194, 123, 83),
+ (177, 110, 73), (136, 77, 48), (127, 70, 42), (118, 64, 37),
+ (102, 51, 28), (87, 45, 25), (77, 40, 20), (73, 37, 18),
+ (75, 32, 10), (73, 34, 11), (72, 36, 13), (71, 36, 17),
+ (72, 36, 18), (73, 37, 20), (77, 36, 14), (76, 33, 12),
+ (76, 33, 10), (77, 31, 12), (77, 37, 17), (84, 39, 18),
+ (91, 40, 17), (96, 40, 17), (100, 44, 16), (100, 43, 17),
+ (95, 43, 17), (93, 42, 16), (91, 41, 16), (91, 43, 14),
+ (91, 40, 13), (91, 40, 17), (94, 45, 18), (98, 48, 22),
+ (106, 52, 25), (115, 56, 26), (122, 61, 32), (128, 65, 35),
+ (132, 71, 37), (135, 68, 36), (131, 65, 33), (122, 61, 33),
+ (112, 57, 31), (106, 53, 29), (103, 48, 26), (102, 48, 25),
+ (104, 47, 25), (108, 53, 26), (116, 60, 32), (130, 65, 36),
+ (142, 73, 41), (156, 79, 44), (167, 87, 48), (173, 92, 49),
+ (174, 91, 49), (169, 88, 49), (163, 87, 45), (155, 79, 41),
+ (146, 73, 37), (140, 71, 33), (135, 67, 33), (139, 72, 39),
+ (144, 80, 43), (155, 89, 52), (171, 104, 65), (187, 122, 81),
+ (209, 138, 99), (230, 154, 114), (248, 173, 132), (255, 186, 150),
+ (255, 206, 170), (255, 217, 185), (255, 226, 191), (255, 222, 195),
+ (255, 228, 197), (255, 223, 199), (255, 222, 199), (255, 223, 193),
+ (255, 219, 182), (255, 207, 174), (255, 199, 165), (255, 197, 159),
+ (255, 189, 151), (255, 189, 148), (255, 186, 147), (255, 187, 148),
+ (255, 190, 152), (255, 193, 156), (255, 198, 163), (255, 202, 169),
+ (255, 206, 174), (255, 207, 179), (255, 214, 182), (255, 215, 189),
+ (255, 217, 193), (255, 218, 197), (255, 225, 195), (255, 217, 193)
+ ),
+
+// 526 Coral
+((155, 66, 54), (138, 51, 35), (140, 52, 36), (143, 54, 37),
+ (141, 52, 35), (139, 51, 34), (137, 50, 32), (136, 50, 30),
+ (127, 41, 24), (123, 38, 20), (119, 36, 16), (109, 31, 12),
+ (99, 26, 8), (89, 20, 6), (80, 15, 4), (75, 13, 2),
+ (71, 11, 1), (76, 5, 0), (86, 11, 4), (97, 18, 8),
+ (114, 24, 10), (131, 30, 13), (135, 33, 16), (140, 37, 20),
+ (154, 39, 20), (153, 36, 17), (153, 34, 15), (147, 35, 14),
+ (142, 37, 13), (140, 35, 12), (139, 33, 11), (133, 35, 12),
+ (129, 38, 13), (125, 38, 16), (125, 39, 17), (126, 41, 18),
+ (126, 45, 21), (127, 49, 24), (130, 49, 26), (133, 50, 29),
+ (142, 60, 37), (152, 65, 43), (162, 70, 50), (177, 78, 58),
+ (193, 86, 66), (200, 87, 69), (207, 89, 73), (222, 94, 79),
+ (229, 95, 79), (226, 93, 76), (215, 85, 69), (204, 78, 63),
+ (188, 70, 54), (172, 63, 46), (168, 59, 42), (165, 55, 39),
+ (147, 46, 29), (141, 44, 26), (135, 43, 24), (127, 40, 18),
+ (120, 37, 13), (119, 34, 11), (118, 31, 10), (118, 28, 6),
+ (114, 27, 3), (121, 24, 3), (125, 28, 7), (130, 33, 12),
+ (131, 34, 14), (133, 36, 16), (138, 40, 23), (142, 45, 28),
+ (143, 50, 32), (143, 51, 33), (143, 53, 34), (142, 52, 33),
+ (142, 51, 33), (140, 50, 32), (139, 50, 32), (134, 47, 31),
+ (131, 45, 30), (119, 44, 28), (120, 46, 29), (121, 49, 31),
+ (123, 50, 35), (125, 52, 40), (136, 58, 49), (145, 69, 57),
+ (165, 80, 74), (168, 84, 75), (172, 88, 77), (172, 88, 77),
+ (173, 88, 77), (171, 81, 75), (168, 75, 70), (162, 72, 65),
+ (155, 67, 59), (146, 54, 41), (140, 52, 37), (134, 50, 34),
+ (133, 49, 32), (133, 49, 31), (134, 50, 28), (138, 52, 26),
+ (149, 48, 26), (153, 48, 23), (158, 48, 21), (159, 47, 22),
+ (160, 47, 24), (163, 49, 27), (164, 51, 32), (164, 56, 38),
+ (167, 61, 43), (171, 67, 51), (170, 67, 52), (170, 67, 53),
+ (167, 67, 49), (163, 65, 45), (159, 62, 44), (155, 60, 42),
+ (154, 63, 45), (161, 69, 50), (169, 75, 56), (174, 79, 58),
+ (179, 84, 60), (190, 90, 66), (196, 96, 76), (206, 109, 93),
+ (220, 114, 97), (225, 110, 102), (225, 108, 101), (226, 107, 101),
+ (223, 94, 76), (211, 81, 64), (205, 72, 59), (197, 63, 48),
+ (188, 62, 47), (187, 67, 52), (187, 72, 58), (184, 74, 60),
+ (182, 77, 63), (176, 80, 62), (169, 77, 60), (160, 71, 54),
+ (148, 64, 46), (134, 51, 31), (133, 48, 28), (132, 46, 25),
+ (131, 44, 24), (131, 45, 24), (136, 45, 25), (143, 47, 28),
+ (152, 51, 33), (156, 53, 35), (160, 55, 37), (167, 60, 42),
+ (175, 65, 45), (184, 72, 50), (191, 78, 57), (195, 84, 66),
+ (195, 89, 70), (185, 86, 73), (179, 84, 73), (173, 83, 73),
+ (161, 76, 65), (153, 68, 55), (142, 60, 46), (131, 52, 36),
+ (112, 38, 19), (106, 33, 14), (101, 29, 10), (97, 25, 6),
+ (96, 30, 9), (100, 34, 16), (113, 42, 26), (131, 61, 42),
+ (155, 78, 59), (174, 84, 68), (182, 88, 75), (190, 91, 77),
+ (196, 85, 70), (187, 76, 60), (178, 68, 49), (176, 60, 41),
+ (171, 56, 35), (170, 54, 33), (169, 53, 31), (168, 52, 32),
+ (168, 54, 34), (166, 55, 33), (165, 55, 32), (164, 59, 35),
+ (161, 63, 38), (160, 64, 41), (158, 68, 46), (154, 72, 49),
+ (153, 71, 50), (151, 67, 50), (151, 65, 48), (155, 65, 44),
+ (158, 62, 41), (163, 59, 39), (168, 62, 39), (171, 62, 43),
+ (170, 61, 46), (169, 64, 48), (171, 65, 52), (168, 65, 52),
+ (168, 66, 50), (170, 68, 50), (170, 67, 47), (172, 66, 46),
+ (171, 65, 46), (166, 64, 45), (161, 62, 44), (157, 62, 45),
+ (152, 63, 46), (148, 63, 46), (141, 60, 43), (132, 58, 40),
+ (124, 55, 37), (119, 52, 34), (111, 46, 27), (103, 38, 19),
+ (100, 35, 14), (102, 29, 10), (105, 25, 5), (101, 23, 2),
+ (99, 20, 1), (103, 22, 2), (103, 25, 3), (98, 26, 5),
+ (98, 28, 9), (100, 31, 11), (104, 33, 14), (106, 33, 16),
+ (108, 35, 19), (115, 37, 22), (121, 38, 22), (126, 42, 24),
+ (129, 46, 26), (132, 48, 26), (137, 50, 28), (138, 52, 28),
+ (138, 52, 26), (139, 50, 28), (141, 50, 28), (143, 48, 27),
+ (143, 48, 29), (146, 49, 32), (152, 50, 34), (157, 56, 42),
+ (161, 63, 51), (166, 68, 55), (158, 64, 50), (152, 61, 49)
+ ),
+
+// 527 Cotton_Flower
+((100, 160, 186), (126, 177, 195), (134, 183, 199), (143, 189, 203),
+ (148, 189, 198), (153, 190, 194), (155, 191, 192), (158, 193, 191),
+ (174, 202, 200), (174, 203, 201), (174, 204, 202), (164, 193, 187),
+ (154, 183, 172), (149, 171, 157), (144, 160, 142), (142, 156, 139),
+ (141, 153, 137), (125, 142, 136), (110, 135, 132), (96, 129, 129),
+ (85, 119, 124), (75, 109, 119), (74, 106, 112), (74, 103, 106),
+ (74, 95, 104), (81, 94, 101), (88, 94, 99), (95, 88, 91),
+ (102, 82, 83), (101, 78, 75), (101, 74, 67), (101, 63, 53),
+ (98, 58, 41), (98, 49, 23), (95, 48, 21), (92, 47, 19),
+ (84, 50, 24), (77, 53, 29), (70, 55, 35), (63, 57, 41),
+ (51, 71, 75), (48, 76, 88), (46, 82, 101), (46, 82, 101),
+ (46, 83, 102), (46, 83, 101), (47, 83, 100), (46, 79, 98),
+ (43, 76, 95), (36, 66, 88), (37, 64, 74), (38, 62, 61),
+ (44, 59, 48), (51, 57, 36), (54, 57, 32), (58, 57, 29),
+ (64, 58, 27), (65, 61, 29), (66, 64, 32), (69, 67, 37),
+ (73, 70, 42), (74, 69, 44), (76, 69, 47), (76, 68, 51),
+ (72, 67, 55), (57, 58, 53), (50, 55, 55), (44, 52, 57),
+ (43, 51, 57), (43, 50, 57), (42, 51, 57), (42, 51, 57),
+ (43, 50, 51), (42, 48, 50), (42, 47, 49), (40, 47, 48),
+ (39, 47, 48), (39, 47, 46), (40, 47, 44), (45, 48, 39),
+ (48, 51, 39), (53, 53, 35), (51, 53, 32), (50, 53, 30),
+ (49, 52, 27), (48, 51, 25), (46, 50, 23), (44, 48, 18),
+ (44, 47, 13), (44, 48, 14), (44, 50, 15), (44, 51, 16),
+ (44, 52, 18), (44, 52, 20), (43, 52, 20), (44, 50, 20),
+ (48, 48, 21), (64, 51, 24), (77, 53, 25), (90, 56, 26),
+ (95, 56, 25), (101, 57, 24), (110, 57, 22), (117, 59, 21),
+ (121, 64, 18), (123, 67, 17), (126, 70, 16), (125, 69, 15),
+ (125, 69, 15), (123, 68, 15), (118, 68, 14), (112, 70, 16),
+ (113, 72, 18), (121, 68, 15), (121, 64, 15), (122, 61, 15),
+ (122, 52, 11), (117, 44, 12), (112, 40, 12), (114, 39, 10),
+ (113, 39, 7), (105, 34, 4), (97, 29, 2), (88, 27, 3),
+ (80, 26, 4), (68, 27, 9), (60, 32, 13), (55, 37, 16),
+ (51, 41, 17), (42, 43, 17), (40, 43, 18), (38, 43, 19),
+ (34, 43, 22), (34, 42, 23), (34, 39, 24), (33, 38, 21),
+ (26, 33, 12), (22, 32, 11), (18, 31, 10), (17, 29, 9),
+ (17, 27, 9), (19, 29, 8), (22, 32, 7), (28, 36, 6),
+ (31, 41, 7), (35, 45, 8), (35, 45, 7), (36, 46, 7),
+ (42, 49, 9), (50, 53, 9), (59, 57, 10), (67, 58, 11),
+ (70, 54, 14), (69, 53, 14), (68, 53, 15), (66, 54, 18),
+ (65, 55, 19), (65, 58, 22), (67, 60, 25), (67, 63, 29),
+ (68, 65, 30), (62, 67, 32), (59, 67, 32), (57, 67, 33),
+ (53, 66, 35), (50, 65, 39), (50, 64, 38), (50, 64, 37),
+ (49, 61, 34), (48, 59, 33), (47, 58, 33), (43, 57, 34),
+ (40, 55, 34), (37, 52, 31), (36, 50, 26), (33, 47, 22),
+ (31, 45, 20), (30, 44, 19), (28, 46, 20), (27, 47, 19),
+ (28, 48, 18), (29, 46, 16), (29, 46, 15), (29, 44, 16),
+ (29, 45, 20), (30, 46, 20), (31, 47, 21), (35, 47, 20),
+ (39, 47, 19), (44, 47, 17), (47, 46, 17), (51, 46, 18),
+ (53, 48, 22), (55, 53, 29), (53, 58, 42), (52, 61, 54),
+ (52, 68, 69), (55, 76, 82), (59, 83, 95), (65, 95, 105),
+ (70, 106, 119), (72, 114, 130), (74, 121, 143), (77, 129, 152),
+ (82, 135, 160), (89, 141, 161), (103, 145, 159), (115, 147, 153),
+ (121, 143, 147), (126, 138, 136), (130, 132, 125), (126, 127, 119),
+ (126, 123, 115), (129, 123, 114), (121, 122, 119), (113, 118, 122),
+ (104, 113, 120), (97, 109, 115), (89, 102, 107), (91, 102, 95),
+ (90, 103, 93), (88, 105, 91), (81, 104, 90), (81, 103, 87),
+ (81, 97, 80), (88, 92, 64), (95, 88, 50), (104, 84, 36),
+ (109, 79, 25), (114, 76, 19), (117, 70, 15), (120, 66, 12),
+ (121, 62, 12), (118, 58, 9), (116, 57, 10), (112, 56, 10),
+ (109, 56, 10), (106, 57, 9), (104, 57, 11), (102, 56, 8),
+ (101, 56, 9), (96, 56, 12), (91, 60, 14), (86, 64, 19),
+ (82, 68, 26), (77, 71, 35), (75, 78, 50), (75, 82, 65),
+ (77, 90, 79), (76, 99, 95), (79, 108, 110), (76, 115, 123),
+ (74, 124, 139), (76, 132, 156), (81, 139, 168), (89, 149, 177)
+ ),
+
+// 528 Country_Garden
+((64, 127, 54), (64, 145, 64), (54, 140, 73), (44, 136, 82),
+ (44, 115, 95), (44, 94, 108), (45, 89, 112), (46, 85, 116),
+ (44, 63, 112), (46, 44, 111), (49, 26, 111), (60, 19, 111),
+ (72, 12, 111), (86, 12, 103), (100, 13, 96), (104, 15, 92),
+ (109, 18, 89), (118, 46, 68), (131, 63, 65), (145, 80, 62),
+ (156, 90, 68), (168, 101, 74), (167, 110, 75), (167, 119, 77),
+ (179, 139, 68), (179, 135, 69), (179, 132, 70), (172, 122, 68),
+ (165, 113, 66), (163, 105, 63), (161, 97, 61), (147, 88, 59),
+ (130, 77, 57), (104, 61, 46), (102, 49, 43), (101, 38, 41),
+ (96, 34, 43), (92, 31, 45), (87, 31, 43), (83, 31, 42),
+ (63, 26, 31), (55, 34, 28), (48, 42, 25), (44, 51, 22),
+ (40, 60, 19), (42, 59, 17), (45, 59, 15), (52, 59, 11),
+ (61, 57, 13), (85, 52, 14), (104, 49, 11), (123, 47, 9),
+ (137, 45, 10), (152, 44, 11), (152, 46, 12), (153, 48, 14),
+ (137, 50, 11), (125, 53, 20), (114, 57, 29), (102, 55, 41),
+ (90, 54, 54), (83, 52, 57), (76, 50, 60), (61, 52, 70),
+ (54, 53, 80), (46, 50, 99), (52, 56, 100), (59, 63, 102),
+ (66, 68, 102), (73, 73, 102), (88, 87, 98), (104, 89, 91),
+ (137, 90, 65), (152, 82, 56), (168, 75, 48), (173, 65, 41),
+ (179, 56, 35), (179, 53, 33), (180, 50, 32), (171, 44, 32),
+ (163, 36, 29), (130, 31, 22), (107, 40, 24), (84, 50, 26),
+ (75, 54, 27), (67, 58, 28), (61, 70, 25), (57, 80, 20),
+ (47, 93, 16), (48, 89, 24), (49, 86, 33), (57, 83, 39),
+ (66, 80, 45), (86, 76, 56), (109, 74, 71), (124, 72, 89),
+ (133, 71, 101), (152, 60, 110), (148, 54, 115), (145, 49, 121),
+ (136, 50, 123), (127, 51, 126), (114, 52, 120), (101, 46, 111),
+ (77, 27, 94), (60, 19, 85), (44, 12, 76), (40, 10, 70),
+ (36, 9, 64), (41, 13, 54), (51, 14, 47), (62, 23, 38),
+ (69, 31, 31), (72, 57, 20), (72, 64, 22), (72, 71, 24),
+ (80, 83, 34), (92, 89, 45), (108, 83, 47), (124, 80, 48),
+ (150, 95, 38), (163, 102, 40), (177, 109, 42), (182, 107, 40),
+ (188, 105, 39), (202, 108, 32), (207, 111, 18), (202, 124, 19),
+ (187, 129, 17), (141, 124, 27), (130, 119, 27), (120, 114, 28),
+ (104, 105, 46), (92, 90, 55), (87, 74, 62), (91, 71, 70),
+ (102, 78, 87), (111, 77, 106), (120, 77, 126), (127, 74, 133),
+ (135, 72, 140), (141, 82, 138), (135, 99, 126), (126, 114, 113),
+ (105, 127, 105), (77, 119, 103), (71, 121, 92), (65, 123, 82),
+ (60, 127, 60), (52, 136, 39), (53, 139, 27), (58, 130, 28),
+ (88, 102, 22), (94, 95, 23), (101, 88, 25), (112, 73, 22),
+ (121, 61, 23), (126, 50, 22), (130, 37, 17), (131, 30, 18),
+ (129, 24, 17), (118, 26, 18), (113, 26, 18), (109, 26, 19),
+ (94, 28, 21), (78, 29, 23), (64, 34, 23), (56, 40, 27),
+ (49, 38, 39), (47, 38, 41), (45, 39, 43), (42, 46, 43),
+ (40, 60, 48), (47, 71, 46), (65, 72, 47), (88, 75, 43),
+ (116, 79, 38), (135, 92, 40), (150, 113, 42), (157, 119, 44),
+ (161, 119, 42), (163, 107, 38), (157, 93, 31), (147, 87, 30),
+ (111, 77, 29), (104, 74, 30), (97, 71, 31), (78, 63, 25),
+ (65, 55, 22), (56, 53, 20), (49, 52, 16), (52, 57, 18),
+ (51, 66, 18), (53, 71, 21), (52, 81, 24), (51, 88, 23),
+ (53, 92, 24), (52, 99, 27), (49, 96, 32), (44, 90, 42),
+ (39, 86, 44), (39, 82, 44), (42, 86, 44), (49, 92, 43),
+ (56, 94, 48), (68, 97, 47), (82, 99, 45), (95, 103, 38),
+ (110, 113, 30), (118, 123, 26), (126, 132, 19), (130, 138, 16),
+ (127, 141, 12), (119, 142, 8), (105, 146, 10), (91, 148, 17),
+ (73, 143, 26), (55, 143, 34), (37, 135, 40), (21, 131, 42),
+ (14, 123, 46), (11, 107, 51), (12, 92, 55), (16, 75, 61),
+ (21, 62, 62), (30, 48, 56), (40, 37, 53), (48, 27, 49),
+ (56, 18, 52), (64, 16, 64), (72, 18, 83), (74, 30, 103),
+ (76, 41, 119), (83, 45, 122), (85, 43, 120), (91, 37, 125),
+ (85, 40, 125), (75, 48, 135), (71, 50, 133), (68, 49, 120),
+ (73, 38, 108), (72, 32, 90), (63, 33, 85), (52, 38, 80),
+ (41, 45, 72), (33, 50, 69), (28, 50, 62), (23, 51, 54),
+ (19, 57, 48), (21, 66, 36), (28, 79, 28), (38, 83, 24),
+ (36, 94, 21), (31, 106, 27), (37, 116, 34), (44, 128, 43)
+ ),
+
+// 529 Creamsicle
+((255, 175, 47), (255, 163, 47), (255, 154, 46), (255, 145, 45),
+ (255, 131, 45), (255, 118, 45), (255, 113, 45), (255, 108, 45),
+ (255, 92, 45), (255, 87, 45), (255, 83, 45), (255, 83, 45),
+ (255, 83, 45), (255, 88, 45), (255, 94, 45), (255, 96, 45),
+ (255, 98, 45), (255, 108, 45), (255, 116, 45), (255, 124, 45),
+ (255, 131, 45), (255, 139, 45), (255, 142, 45), (255, 146, 45),
+ (247, 162, 43), (231, 166, 41), (215, 171, 39), (200, 172, 37),
+ (186, 174, 36), (180, 171, 34), (174, 168, 33), (163, 158, 31),
+ (150, 146, 29), (147, 124, 47), (165, 109, 68), (183, 95, 89),
+ (194, 82, 117), (206, 69, 146), (211, 65, 161), (216, 62, 177),
+ (247, 50, 223), (251, 47, 237), (255, 45, 251), (255, 45, 253),
+ (255, 46, 255), (255, 48, 255), (255, 51, 255), (255, 61, 255),
+ (255, 74, 253), (255, 101, 239), (255, 118, 229), (255, 135, 220),
+ (255, 146, 191), (255, 157, 162), (255, 158, 148), (255, 159, 135),
+ (255, 155, 98), (255, 144, 80), (255, 134, 62), (255, 124, 67),
+ (255, 115, 72), (255, 109, 76), (255, 104, 80), (255, 91, 89),
+ (255, 79, 99), (255, 65, 114), (255, 58, 120), (255, 52, 126),
+ (255, 49, 129), (255, 47, 133), (255, 45, 139), (249, 44, 146),
+ (239, 42, 165), (236, 42, 167), (233, 42, 170), (205, 43, 160),
+ (177, 44, 151), (171, 46, 145), (166, 49, 140), (168, 55, 126),
+ (162, 60, 103), (129, 69, 63), (144, 80, 54), (159, 91, 45),
+ (172, 96, 41), (185, 102, 38), (200, 109, 35), (204, 113, 40),
+ (233, 129, 71), (244, 132, 90), (255, 135, 109), (255, 130, 118),
+ (255, 126, 128), (255, 116, 154), (255, 104, 177), (255, 93, 197),
+ (255, 82, 211), (255, 59, 223), (255, 52, 222), (255, 45, 222),
+ (255, 45, 219), (255, 45, 217), (255, 45, 208), (255, 45, 194),
+ (255, 45, 161), (255, 49, 150), (255, 53, 139), (255, 57, 133),
+ (255, 62, 127), (255, 70, 109), (255, 78, 93), (255, 89, 81),
+ (255, 101, 76), (255, 118, 70), (255, 121, 72), (255, 124, 75),
+ (255, 127, 88), (255, 128, 106), (252, 124, 126), (244, 118, 153),
+ (229, 101, 205), (217, 94, 219), (206, 88, 233), (199, 85, 238),
+ (192, 83, 244), (185, 73, 252), (186, 66, 255), (191, 61, 255),
+ (198, 62, 250), (216, 54, 219), (222, 51, 208), (229, 48, 198),
+ (242, 49, 176), (251, 54, 150), (255, 59, 121), (255, 63, 95),
+ (255, 75, 62), (255, 81, 57), (255, 87, 52), (255, 90, 55),
+ (255, 93, 58), (255, 97, 66), (255, 99, 72), (255, 101, 79),
+ (255, 102, 89), (255, 109, 103), (255, 110, 102), (255, 112, 102),
+ (255, 112, 97), (255, 113, 90), (255, 117, 82), (255, 122, 75),
+ (255, 126, 57), (255, 125, 53), (255, 124, 50), (255, 123, 46),
+ (255, 123, 45), (255, 124, 45), (255, 123, 45), (255, 121, 45),
+ (255, 120, 45), (255, 124, 49), (255, 125, 50), (255, 126, 51),
+ (255, 128, 52), (255, 128, 52), (255, 128, 52), (255, 128, 52),
+ (255, 126, 50), (255, 124, 48), (255, 123, 47), (255, 121, 45),
+ (255, 119, 45), (255, 121, 45), (255, 124, 45), (255, 129, 45),
+ (255, 135, 45), (248, 145, 43), (236, 157, 42), (220, 166, 46),
+ (209, 168, 60), (194, 162, 75), (175, 159, 82), (155, 156, 85),
+ (133, 131, 110), (133, 121, 113), (133, 111, 117), (141, 91, 115),
+ (156, 81, 112), (173, 73, 111), (183, 63, 109), (185, 48, 108),
+ (180, 43, 106), (174, 48, 102), (163, 58, 98), (150, 63, 99),
+ (132, 69, 101), (114, 84, 102), (103, 104, 100), (105, 123, 93),
+ (116, 138, 83), (133, 151, 77), (151, 165, 75), (170, 178, 69),
+ (188, 187, 56), (205, 186, 44), (221, 181, 40), (236, 175, 42),
+ (245, 169, 43), (247, 160, 43), (245, 146, 43), (245, 132, 43),
+ (244, 119, 43), (244, 110, 43), (243, 101, 43), (245, 93, 43),
+ (247, 86, 43), (250, 82, 44), (253, 80, 44), (254, 80, 45),
+ (255, 82, 45), (255, 86, 45), (255, 90, 45), (255, 92, 45),
+ (255, 90, 45), (255, 87, 45), (255, 87, 45), (255, 87, 45),
+ (255, 86, 45), (255, 81, 45), (255, 74, 45), (255, 67, 45),
+ (255, 65, 45), (255, 63, 45), (255, 60, 47), (255, 55, 51),
+ (255, 49, 57), (255, 47, 60), (255, 48, 64), (255, 48, 69),
+ (255, 47, 76), (255, 46, 81), (255, 49, 84), (255, 56, 84),
+ (255, 65, 80), (255, 71, 76), (255, 80, 73), (255, 92, 71),
+ (255, 107, 64), (255, 122, 57), (255, 134, 51), (255, 144, 50),
+ (255, 154, 50), (255, 164, 48), (255, 173, 46), (255, 176, 46)
+ ),
+
+// 530 Cricket_Music
+((112, 38, 168), (104, 37, 182), (102, 36, 188), (100, 36, 194),
+ (94, 31, 177), (88, 26, 160), (82, 23, 153), (77, 20, 146),
+ (57, 28, 102), (57, 35, 81), (57, 43, 61), (44, 54, 42),
+ (32, 65, 24), (32, 71, 24), (32, 78, 24), (37, 77, 35),
+ (43, 76, 46), (54, 57, 84), (70, 47, 105), (86, 38, 126),
+ (96, 26, 145), (106, 14, 165), (108, 11, 173), (110, 8, 182),
+ (86, 0, 198), (71, 3, 211), (56, 6, 224), (42, 4, 227),
+ (28, 2, 230), (24, 1, 224), (21, 0, 218), (4, 0, 215),
+ (0, 4, 211), (0, 12, 179), (0, 17, 158), (0, 23, 137),
+ (0, 31, 117), (0, 39, 98), (0, 38, 85), (0, 38, 73),
+ (0, 52, 44), (0, 44, 42), (0, 36, 40), (0, 24, 50),
+ (0, 12, 61), (1, 11, 65), (3, 10, 70), (15, 7, 76),
+ (26, 5, 80), (29, 0, 77), (28, 1, 61), (27, 3, 45),
+ (21, 9, 37), (16, 16, 30), (15, 16, 31), (14, 16, 32),
+ (15, 10, 45), (21, 16, 55), (28, 22, 65), (36, 24, 77),
+ (45, 27, 89), (45, 28, 91), (46, 30, 94), (38, 36, 93),
+ (31, 49, 89), (23, 64, 84), (14, 55, 85), (6, 47, 86),
+ (5, 41, 90), (4, 35, 94), (2, 23, 102), (6, 12, 106),
+ (30, 0, 124), (30, 2, 122), (31, 5, 120), (33, 2, 118),
+ (35, 0, 117), (32, 0, 110), (29, 0, 104), (19, 8, 91),
+ (3, 6, 80), (0, 0, 55), (0, 5, 42), (0, 10, 30),
+ (0, 16, 26), (0, 22, 23), (0, 28, 8), (0, 27, 0),
+ (0, 44, 0), (0, 57, 7), (0, 71, 15), (3, 75, 19),
+ (6, 80, 24), (11, 89, 40), (14, 93, 59), (6, 93, 72),
+ (3, 89, 89), (6, 71, 102), (5, 61, 102), (4, 52, 103),
+ (7, 45, 110), (10, 39, 117), (29, 39, 135), (47, 44, 142),
+ (87, 35, 171), (106, 27, 185), (125, 20, 199), (129, 19, 199),
+ (134, 19, 200), (127, 14, 184), (112, 8, 160), (92, 11, 132),
+ (75, 27, 101), (39, 44, 54), (33, 44, 50), (27, 45, 46),
+ (22, 47, 46), (28, 42, 47), (32, 36, 64), (47, 31, 86),
+ (62, 4, 111), (59, 8, 114), (57, 13, 117), (52, 20, 110),
+ (48, 27, 104), (26, 27, 86), (14, 42, 61), (5, 62, 51),
+ (4, 65, 36), (7, 48, 0), (13, 45, 0), (19, 43, 0),
+ (40, 37, 14), (48, 13, 32), (65, 0, 63), (78, 0, 81),
+ (86, 0, 114), (85, 0, 121), (84, 0, 129), (80, 0, 121),
+ (76, 0, 114), (76, 0, 102), (89, 0, 98), (106, 0, 106),
+ (106, 0, 103), (112, 7, 128), (120, 7, 138), (128, 8, 149),
+ (140, 12, 162), (141, 15, 169), (144, 12, 174), (154, 8, 179),
+ (163, 13, 181), (169, 11, 179), (175, 10, 177), (183, 6, 181),
+ (194, 4, 194), (192, 20, 207), (184, 24, 199), (183, 37, 178),
+ (165, 44, 146), (141, 53, 154), (137, 51, 149), (133, 49, 144),
+ (122, 45, 117), (109, 53, 121), (91, 47, 130), (80, 42, 152),
+ (87, 45, 170), (90, 47, 171), (94, 49, 173), (100, 54, 185),
+ (106, 51, 190), (117, 49, 193), (122, 42, 185), (138, 32, 184),
+ (137, 23, 178), (133, 15, 176), (124, 8, 173), (121, 0, 177),
+ (111, 0, 178), (95, 0, 178), (80, 2, 183), (83, 4, 192),
+ (98, 2, 218), (97, 2, 224), (96, 2, 230), (93, 2, 231),
+ (88, 4, 233), (91, 0, 228), (84, 0, 224), (73, 0, 209),
+ (65, 0, 199), (59, 0, 183), (51, 0, 170), (49, 2, 153),
+ (49, 7, 149), (52, 11, 143), (51, 18, 141), (46, 28, 137),
+ (31, 28, 134), (29, 34, 129), (38, 44, 134), (38, 46, 144),
+ (38, 55, 156), (29, 54, 157), (42, 60, 167), (59, 54, 183),
+ (93, 63, 200), (97, 44, 199), (109, 32, 195), (127, 20, 198),
+ (144, 11, 206), (157, 5, 207), (163, 4, 195), (160, 8, 181),
+ (142, 15, 167), (117, 35, 156), (95, 53, 134), (77, 69, 110),
+ (54, 75, 80), (36, 93, 64), (20, 96, 44), (10, 97, 42),
+ (6, 89, 45), (3, 80, 53), (0, 63, 60), (0, 42, 69),
+ (0, 31, 91), (0, 26, 109), (0, 16, 122), (0, 8, 133),
+ (0, 0, 142), (12, 7, 152), (40, 19, 162), (59, 20, 174),
+ (77, 5, 184), (92, 0, 199), (101, 0, 208), (104, 7, 215),
+ (98, 15, 215), (92, 23, 210), (70, 37, 191), (31, 34, 171),
+ (18, 49, 148), (7, 59, 122), (0, 71, 92), (0, 93, 87),
+ (0, 88, 77), (0, 79, 69), (7, 71, 69), (28, 69, 65),
+ (38, 51, 72), (53, 49, 92), (67, 44, 130), (96, 48, 156)
+ ),
+
+// 531 Dark_Rainbow
+((90, 148, 72), (141, 187, 70), (162, 176, 67), (183, 165, 65),
+ (202, 148, 55), (221, 132, 45), (222, 124, 41), (224, 117, 38),
+ (188, 66, 18), (169, 48, 14), (151, 30, 11), (127, 24, 11),
+ (103, 19, 12), (80, 29, 13), (58, 39, 15), (49, 42, 18),
+ (41, 45, 22), (20, 40, 46), (14, 40, 51), (9, 40, 56),
+ (8, 38, 59), (8, 37, 62), (6, 32, 63), (5, 28, 64),
+ (10, 11, 61), (18, 8, 53), (27, 5, 45), (39, 5, 35),
+ (52, 5, 26), (58, 5, 23), (64, 5, 21), (77, 4, 19),
+ (92, 6, 21), (116, 7, 30), (112, 5, 32), (108, 3, 34),
+ (95, 3, 36), (83, 4, 38), (78, 4, 40), (73, 5, 42),
+ (52, 22, 48), (44, 34, 60), (36, 47, 72), (37, 55, 71),
+ (39, 64, 70), (43, 70, 64), (48, 77, 58), (61, 92, 56),
+ (72, 101, 58), (73, 108, 52), (67, 111, 37), (62, 115, 23),
+ (65, 108, 25), (69, 101, 28), (67, 93, 33), (65, 85, 38),
+ (46, 68, 56), (37, 64, 80), (29, 61, 105), (33, 42, 129),
+ (37, 24, 154), (34, 18, 153), (32, 13, 153), (20, 13, 149),
+ (12, 13, 146), (7, 6, 142), (18, 3, 121), (30, 0, 101),
+ (39, 0, 87), (49, 1, 74), (68, 2, 49), (83, 2, 34),
+ (114, 4, 14), (121, 9, 15), (128, 15, 17), (119, 27, 24),
+ (111, 40, 32), (104, 45, 33), (97, 51, 34), (80, 57, 35),
+ (67, 58, 41), (55, 56, 62), (55, 55, 68), (56, 54, 74),
+ (58, 53, 72), (61, 53, 70), (71, 43, 64), (76, 33, 60),
+ (79, 17, 61), (75, 16, 58), (71, 16, 55), (65, 16, 53),
+ (60, 17, 52), (49, 19, 53), (33, 12, 61), (22, 13, 78),
+ (18, 14, 96), (28, 16, 141), (34, 15, 152), (41, 14, 163),
+ (47, 16, 163), (53, 19, 163), (65, 24, 163), (85, 29, 157),
+ (110, 27, 131), (115, 27, 110), (121, 28, 90), (121, 29, 79),
+ (122, 31, 69), (121, 42, 53), (111, 59, 46), (100, 82, 45),
+ (102, 104, 44), (123, 137, 35), (125, 140, 32), (128, 143, 30),
+ (121, 152, 33), (115, 160, 35), (117, 166, 41), (126, 168, 44),
+ (143, 135, 43), (144, 115, 40), (146, 95, 38), (149, 87, 39),
+ (153, 80, 41), (158, 66, 37), (166, 54, 36), (176, 43, 29),
+ (186, 39, 18), (207, 26, 8), (208, 24, 8), (209, 22, 9),
+ (205, 17, 15), (197, 21, 17), (193, 28, 19), (189, 32, 18),
+ (186, 49, 18), (191, 67, 23), (197, 86, 28), (202, 95, 31),
+ (207, 104, 35), (192, 115, 45), (167, 122, 66), (149, 115, 89),
+ (127, 112, 114), (117, 99, 142), (101, 94, 143), (86, 90, 145),
+ (67, 70, 150), (39, 45, 148), (27, 29, 152), (26, 15, 138),
+ (18, 9, 92), (18, 6, 80), (18, 3, 69), (18, 6, 62),
+ (17, 10, 58), (14, 15, 58), (12, 23, 62), (15, 27, 63),
+ (23, 28, 60), (25, 30, 54), (25, 30, 54), (26, 31, 54),
+ (26, 33, 57), (39, 31, 58), (43, 27, 57), (50, 24, 64),
+ (37, 17, 88), (40, 16, 93), (44, 16, 99), (51, 13, 112),
+ (72, 19, 123), (89, 34, 129), (98, 44, 132), (107, 55, 126),
+ (106, 57, 121), (114, 52, 115), (119, 55, 105), (126, 57, 97),
+ (132, 59, 86), (136, 63, 76), (140, 57, 69), (141, 49, 57),
+ (155, 40, 43), (161, 42, 43), (167, 44, 43), (180, 55, 44),
+ (198, 65, 37), (213, 74, 34), (221, 74, 29), (227, 71, 22),
+ (226, 70, 21), (227, 70, 19), (228, 74, 19), (224, 72, 22),
+ (221, 67, 19), (214, 59, 15), (209, 53, 9), (209, 56, 3),
+ (208, 58, 3), (204, 62, 6), (197, 63, 8), (185, 65, 14),
+ (183, 73, 13), (184, 84, 17), (188, 99, 21), (200, 117, 26),
+ (198, 135, 41), (200, 153, 42), (200, 170, 43), (194, 180, 39),
+ (194, 191, 43), (184, 200, 58), (173, 202, 77), (163, 201, 103),
+ (148, 188, 120), (136, 173, 134), (128, 156, 146), (121, 134, 158),
+ (114, 111, 172), (111, 90, 180), (107, 70, 178), (112, 58, 165),
+ (120, 48, 148), (121, 38, 127), (121, 29, 106), (105, 17, 84),
+ (92, 8, 59), (79, 6, 44), (64, 6, 36), (56, 7, 34),
+ (42, 8, 30), (34, 6, 25), (22, 13, 21), (17, 23, 23),
+ (23, 38, 33), (32, 53, 50), (49, 66, 60), (74, 82, 67),
+ (101, 94, 66), (126, 113, 61), (144, 125, 66), (147, 136, 71),
+ (151, 149, 84), (153, 141, 92), (152, 135, 89), (141, 117, 78),
+ (117, 97, 66), (87, 95, 63), (61, 93, 67), (48, 95, 73),
+ (40, 102, 74), (38, 106, 74), (46, 108, 74), (64, 128, 73)
+ ),
+
+// 532 Dark_Rose
+((92, 63, 80), (75, 57, 74), (70, 54, 69), (66, 51, 65),
+ (62, 48, 60), (59, 45, 55), (57, 43, 51), (56, 42, 48),
+ (54, 42, 47), (55, 52, 48), (57, 63, 49), (61, 74, 55),
+ (66, 86, 62), (81, 94, 69), (97, 102, 77), (102, 92, 77),
+ (107, 82, 78), (129, 72, 98), (132, 64, 96), (136, 56, 95),
+ (132, 50, 93), (129, 45, 91), (125, 42, 85), (122, 39, 80),
+ (104, 39, 66), (91, 40, 61), (78, 42, 56), (71, 41, 51),
+ (64, 40, 47), (61, 40, 44), (58, 41, 41), (55, 41, 41),
+ (53, 42, 47), (42, 51, 39), (46, 44, 40), (50, 38, 41),
+ (50, 36, 37), (50, 35, 33), (49, 33, 32), (48, 31, 31),
+ (46, 25, 32), (42, 24, 29), (39, 23, 26), (35, 23, 28),
+ (32, 23, 31), (30, 22, 29), (28, 21, 27), (18, 18, 24),
+ (17, 22, 17), (12, 20, 12), (13, 19, 12), (15, 19, 13),
+ (18, 22, 15), (21, 26, 17), (21, 27, 19), (22, 29, 22),
+ (27, 37, 34), (29, 39, 34), (31, 42, 35), (31, 40, 37),
+ (31, 38, 39), (30, 38, 36), (29, 38, 34), (27, 37, 34),
+ (27, 35, 31), (35, 31, 27), (38, 30, 31), (41, 30, 35),
+ (42, 30, 36), (44, 31, 38), (48, 31, 36), (51, 32, 35),
+ (55, 30, 41), (54, 29, 38), (53, 28, 35), (49, 25, 31),
+ (45, 23, 27), (43, 22, 26), (42, 22, 25), (38, 21, 22),
+ (33, 19, 22), (24, 19, 15), (22, 15, 14), (21, 12, 13),
+ (20, 10, 14), (19, 9, 15), (17, 8, 13), (15, 7, 11),
+ (16, 6, 12), (15, 7, 11), (15, 8, 11), (16, 9, 11),
+ (18, 10, 11), (23, 16, 14), (29, 17, 22), (34, 19, 23),
+ (39, 21, 25), (50, 27, 38), (54, 27, 41), (58, 27, 44),
+ (59, 26, 43), (60, 26, 43), (61, 27, 47), (61, 28, 46),
+ (64, 29, 47), (65, 31, 46), (66, 34, 46), (67, 34, 46),
+ (68, 35, 47), (69, 39, 51), (72, 43, 55), (75, 49, 58),
+ (78, 52, 58), (80, 56, 60), (82, 56, 62), (85, 57, 65),
+ (92, 59, 70), (97, 60, 73), (104, 61, 75), (113, 65, 83),
+ (131, 79, 98), (142, 80, 104), (154, 81, 111), (156, 82, 111),
+ (158, 84, 111), (149, 86, 106), (145, 82, 108), (140, 75, 105),
+ (135, 67, 100), (104, 54, 72), (97, 52, 70), (90, 51, 68),
+ (80, 49, 64), (72, 49, 59), (67, 47, 49), (65, 47, 49),
+ (60, 49, 45), (59, 47, 47), (58, 45, 49), (58, 44, 49),
+ (59, 43, 50), (57, 39, 47), (57, 34, 47), (57, 30, 47),
+ (58, 27, 44), (63, 21, 42), (65, 19, 41), (68, 18, 41),
+ (74, 18, 46), (77, 20, 47), (80, 24, 51), (85, 27, 53),
+ (97, 31, 65), (97, 33, 65), (98, 35, 66), (99, 41, 72),
+ (99, 43, 70), (100, 46, 73), (97, 47, 69), (94, 50, 70),
+ (86, 53, 69), (69, 76, 57), (66, 77, 54), (63, 79, 52),
+ (60, 78, 49), (55, 76, 48), (51, 71, 46), (52, 69, 45),
+ (61, 55, 45), (58, 47, 43), (56, 40, 42), (54, 36, 44),
+ (50, 34, 36), (51, 44, 36), (50, 54, 36), (50, 55, 35),
+ (43, 54, 30), (44, 54, 30), (41, 52, 30), (44, 49, 30),
+ (43, 39, 27), (38, 22, 23), (36, 18, 24), (34, 18, 27),
+ (31, 13, 22), (30, 13, 22), (29, 13, 23), (26, 15, 25),
+ (22, 14, 24), (22, 15, 21), (24, 15, 20), (27, 16, 28),
+ (30, 20, 32), (33, 26, 38), (42, 37, 48), (66, 50, 65),
+ (86, 67, 80), (103, 80, 84), (113, 94, 89), (118, 88, 99),
+ (123, 88, 95), (126, 88, 94), (119, 86, 87), (104, 73, 82),
+ (89, 59, 68), (76, 51, 52), (70, 54, 49), (65, 62, 49),
+ (62, 58, 47), (62, 56, 46), (65, 49, 46), (75, 42, 53),
+ (89, 37, 62), (95, 30, 66), (92, 27, 61), (87, 22, 56),
+ (87, 18, 52), (82, 13, 51), (70, 11, 42), (53, 11, 28),
+ (45, 13, 23), (42, 14, 24), (44, 11, 24), (44, 10, 21),
+ (47, 13, 26), (54, 16, 33), (61, 17, 40), (65, 18, 41),
+ (69, 23, 48), (71, 29, 51), (73, 32, 56), (72, 32, 52),
+ (74, 32, 58), (73, 32, 54), (73, 32, 56), (70, 32, 55),
+ (68, 30, 54), (64, 30, 52), (62, 29, 51), (58, 30, 51),
+ (54, 28, 48), (49, 27, 43), (44, 26, 34), (42, 26, 33),
+ (40, 27, 31), (40, 34, 30), (40, 44, 31), (46, 50, 35),
+ (56, 57, 40), (63, 54, 44), (68, 55, 49), (80, 56, 58),
+ (90, 59, 65), (90, 58, 65), (83, 57, 67), (86, 60, 71)
+ ),
+
+// 533 Dark_Turquoise
+((38, 116, 114), (38, 115, 113), (37, 104, 104), (37, 93, 95),
+ (33, 80, 82), (30, 67, 70), (28, 60, 64), (27, 54, 58),
+ (25, 34, 40), (25, 32, 37), (26, 30, 35), (27, 34, 39),
+ (28, 38, 43), (30, 48, 52), (33, 59, 62), (34, 66, 67),
+ (36, 73, 73), (44, 105, 103), (47, 116, 113), (50, 127, 124),
+ (55, 131, 127), (61, 136, 130), (62, 139, 134), (63, 143, 138),
+ (61, 155, 150), (60, 153, 147), (60, 151, 145), (60, 148, 143),
+ (61, 146, 142), (59, 148, 145), (58, 151, 148), (53, 160, 156),
+ (52, 166, 162), (56, 169, 165), (57, 171, 168), (59, 174, 171),
+ (59, 180, 178), (60, 187, 185), (61, 189, 187), (62, 191, 190),
+ (63, 195, 195), (63, 195, 195), (63, 195, 195), (63, 188, 188),
+ (63, 182, 181), (63, 175, 174), (63, 168, 167), (60, 153, 151),
+ (58, 137, 136), (49, 105, 105), (47, 89, 89), (45, 74, 73),
+ (41, 65, 64), (37, 56, 56), (35, 53, 54), (34, 51, 53),
+ (34, 46, 49), (33, 45, 48), (33, 45, 47), (32, 45, 46),
+ (31, 45, 45), (31, 43, 44), (32, 42, 44), (32, 38, 40),
+ (30, 34, 37), (26, 29, 31), (25, 28, 30), (25, 28, 30),
+ (25, 28, 30), (26, 28, 31), (26, 30, 34), (27, 33, 39),
+ (27, 46, 53), (28, 59, 64), (30, 73, 76), (33, 86, 88),
+ (36, 99, 100), (35, 102, 102), (35, 105, 105), (32, 106, 107),
+ (32, 106, 107), (34, 101, 102), (32, 91, 92), (30, 82, 82),
+ (28, 76, 76), (27, 70, 70), (25, 59, 61), (26, 53, 56),
+ (33, 54, 55), (35, 58, 57), (38, 63, 60), (38, 63, 61),
+ (38, 64, 62), (36, 64, 65), (36, 64, 66), (38, 63, 67),
+ (41, 63, 68), (46, 65, 71), (51, 65, 73), (56, 66, 76),
+ (57, 66, 77), (59, 67, 78), (62, 70, 79), (60, 76, 75),
+ (64, 72, 73), (60, 66, 69), (57, 61, 66), (52, 59, 61),
+ (47, 58, 57), (40, 53, 52), (35, 45, 45), (32, 40, 41),
+ (32, 39, 41), (34, 46, 49), (34, 48, 50), (34, 50, 52),
+ (35, 53, 56), (36, 56, 60), (37, 59, 63), (37, 61, 64),
+ (34, 55, 60), (31, 52, 58), (29, 49, 57), (28, 49, 58),
+ (28, 49, 59), (27, 52, 60), (28, 58, 66), (31, 70, 75),
+ (33, 85, 89), (40, 117, 123), (41, 125, 131), (43, 134, 139),
+ (48, 151, 155), (51, 170, 171), (57, 184, 186), (60, 194, 197),
+ (61, 201, 204), (61, 200, 203), (61, 200, 202), (61, 199, 201),
+ (61, 198, 200), (60, 194, 195), (58, 185, 185), (53, 174, 172),
+ (48, 158, 158), (45, 127, 128), (44, 118, 119), (44, 109, 111),
+ (41, 95, 94), (35, 79, 79), (32, 64, 65), (29, 52, 53),
+ (34, 39, 42), (35, 40, 42), (37, 42, 43), (44, 50, 51),
+ (52, 63, 61), (72, 83, 81), (75, 102, 99), (75, 119, 114),
+ (77, 134, 132), (85, 158, 157), (84, 162, 161), (84, 167, 165),
+ (76, 169, 165), (66, 160, 159), (45, 139, 142), (40, 123, 128),
+ (35, 95, 99), (33, 87, 91), (31, 80, 83), (28, 66, 71),
+ (25, 58, 65), (25, 54, 63), (27, 59, 67), (30, 71, 75),
+ (34, 84, 87), (36, 98, 102), (38, 112, 115), (38, 119, 122),
+ (39, 124, 125), (40, 125, 125), (39, 121, 122), (39, 116, 118),
+ (33, 91, 95), (32, 83, 87), (32, 76, 80), (29, 61, 65),
+ (27, 48, 54), (26, 37, 45), (25, 31, 38), (26, 27, 34),
+ (26, 25, 31), (27, 25, 29), (28, 27, 29), (29, 29, 31),
+ (31, 33, 35), (35, 37, 41), (38, 44, 47), (42, 51, 53),
+ (43, 56, 59), (43, 61, 64), (43, 63, 70), (43, 67, 75),
+ (43, 69, 77), (42, 70, 77), (38, 67, 72), (34, 61, 66),
+ (31, 57, 62), (28, 53, 59), (27, 52, 57), (27, 52, 57),
+ (26, 52, 56), (25, 57, 59), (25, 63, 64), (25, 68, 69),
+ (26, 74, 77), (25, 76, 82), (26, 76, 85), (27, 79, 89),
+ (26, 76, 86), (26, 73, 82), (25, 67, 75), (25, 58, 67),
+ (26, 51, 61), (26, 44, 54), (26, 38, 47), (25, 33, 40),
+ (25, 30, 34), (25, 28, 31), (26, 26, 30), (27, 26, 29),
+ (27, 26, 28), (26, 26, 27), (26, 27, 26), (26, 27, 26),
+ (27, 28, 26), (27, 28, 26), (26, 28, 26), (25, 28, 26),
+ (25, 29, 26), (25, 28, 26), (25, 28, 27), (25, 27, 27),
+ (25, 26, 28), (25, 26, 28), (25, 27, 28), (25, 29, 30),
+ (25, 33, 33), (26, 39, 41), (28, 51, 52), (30, 66, 67),
+ (33, 81, 81), (36, 94, 91), (39, 102, 102), (40, 110, 109)
+ ),
+
+// 534 Dark_Waters
+((40, 9, 84), (36, 5, 75), (37, 2, 65), (39, 0, 56),
+ (21, 0, 42), (4, 0, 28), (2, 7, 14), (0, 14, 0),
+ (0, 14, 0), (0, 14, 0), (0, 14, 0), (0, 14, 0),
+ (0, 14, 0), (0, 7, 8), (0, 0, 17), (0, 0, 17),
+ (0, 0, 18), (0, 0, 31), (0, 2, 41), (0, 4, 52),
+ (0, 13, 64), (0, 22, 76), (0, 27, 82), (0, 32, 89),
+ (0, 48, 110), (0, 52, 118), (0, 57, 127), (0, 61, 133),
+ (0, 65, 140), (0, 66, 141), (0, 67, 142), (0, 63, 142),
+ (0, 61, 140), (0, 56, 124), (0, 48, 115), (0, 41, 106),
+ (0, 36, 96), (0, 31, 87), (0, 24, 83), (0, 17, 79),
+ (0, 5, 71), (0, 2, 71), (0, 0, 71), (0, 0, 73),
+ (0, 0, 76), (0, 2, 79), (0, 5, 83), (0, 0, 88),
+ (10, 4, 92), (13, 4, 100), (11, 4, 101), (9, 4, 102),
+ (7, 4, 99), (5, 4, 96), (7, 4, 94), (10, 4, 92),
+ (22, 4, 76), (23, 2, 67), (25, 0, 59), (25, 0, 50),
+ (25, 0, 41), (23, 0, 38), (22, 0, 35), (22, 0, 26),
+ (21, 0, 1), (0, 14, 0), (0, 14, 0), (0, 14, 0),
+ (0, 14, 0), (0, 14, 0), (0, 14, 0), (0, 14, 0),
+ (0, 0, 18), (9, 0, 24), (18, 0, 31), (24, 0, 41),
+ (31, 0, 52), (39, 0, 58), (48, 0, 65), (61, 5, 83),
+ (45, 17, 106), (28, 40, 158), (32, 55, 175), (36, 71, 193),
+ (38, 79, 198), (40, 88, 203), (36, 84, 210), (36, 79, 210),
+ (35, 83, 203), (31, 86, 200), (28, 89, 198), (25, 88, 194),
+ (22, 87, 190), (21, 88, 181), (14, 92, 166), (5, 75, 150),
+ (0, 56, 123), (0, 26, 83), (0, 22, 72), (0, 18, 61),
+ (0, 17, 60), (0, 17, 59), (0, 22, 59), (0, 21, 65),
+ (0, 28, 65), (0, 22, 65), (0, 17, 65), (0, 17, 63),
+ (0, 18, 61), (0, 18, 61), (0, 25, 59), (0, 25, 61),
+ (0, 25, 59), (0, 21, 53), (0, 17, 49), (0, 14, 45),
+ (0, 13, 39), (0, 8, 28), (0, 1, 21), (0, 17, 0),
+ (0, 14, 0), (0, 14, 0), (0, 14, 0), (0, 14, 0),
+ (0, 14, 0), (0, 14, 0), (0, 14, 0), (0, 14, 0),
+ (0, 14, 0), (0, 14, 0), (0, 14, 0), (0, 14, 0),
+ (0, 14, 0), (0, 14, 0), (0, 0, 17), (0, 1, 17),
+ (0, 0, 21), (0, 0, 21), (0, 0, 21), (0, 0, 19),
+ (0, 1, 18), (0, 1, 18), (0, 0, 18), (0, 0, 18),
+ (0, 0, 18), (0, 0, 25), (0, 0, 25), (0, 0, 26),
+ (0, 0, 26), (0, 0, 26), (1, 0, 26), (14, 0, 26),
+ (28, 0, 22), (24, 0, 27), (21, 0, 32), (22, 0, 39),
+ (36, 0, 45), (32, 0, 56), (26, 0, 67), (41, 1, 76),
+ (41, 8, 84), (45, 14, 107), (57, 18, 115), (69, 22, 123),
+ (73, 32, 146), (102, 45, 171), (135, 57, 201), (154, 73, 232),
+ (206, 107, 255), (208, 114, 255), (210, 122, 255), (255, 127, 255),
+ (255, 131, 255), (255, 136, 255), (255, 132, 255), (255, 128, 255),
+ (232, 131, 255), (198, 127, 255), (158, 123, 255), (118, 115, 255),
+ (106, 118, 255), (94, 119, 255), (83, 100, 255), (65, 79, 242),
+ (28, 40, 177), (22, 38, 162), (17, 36, 148), (4, 36, 123),
+ (0, 32, 107), (0, 36, 96), (0, 26, 84), (0, 17, 75),
+ (0, 4, 67), (0, 4, 57), (0, 0, 52), (0, 0, 49),
+ (0, 0, 49), (0, 0, 56), (0, 4, 61), (0, 25, 69),
+ (0, 32, 79), (0, 44, 87), (0, 52, 98), (5, 49, 111),
+ (10, 61, 128), (21, 67, 154), (32, 79, 181), (44, 80, 206),
+ (52, 84, 223), (53, 100, 233), (56, 106, 238), (53, 106, 241),
+ (52, 98, 241), (49, 111, 245), (49, 115, 255), (56, 122, 255),
+ (67, 124, 255), (79, 127, 255), (92, 138, 255), (94, 163, 255),
+ (92, 173, 255), (88, 183, 255), (79, 170, 255), (65, 181, 255),
+ (59, 181, 255), (57, 177, 255), (61, 159, 255), (63, 170, 255),
+ (71, 163, 255), (71, 162, 255), (69, 136, 255), (59, 124, 255),
+ (45, 118, 233), (31, 94, 202), (21, 65, 170), (10, 48, 140),
+ (8, 26, 118), (4, 17, 100), (1, 9, 87), (0, 0, 75),
+ (14, 0, 63), (32, 0, 56), (14, 0, 48), (13, 0, 45),
+ (14, 0, 48), (18, 0, 53), (14, 0, 63), (35, 4, 75),
+ (41, 9, 87), (40, 9, 84), (40, 5, 83), (49, 4, 80),
+ (44, 4, 79), (36, 5, 76), (21, 1, 75), (35, 4, 75)
+ ),
+
+// 535 Darkness
+((51, 35, 40), (48, 23, 29), (46, 20, 21), (45, 17, 13),
+ (38, 16, 12), (32, 16, 11), (28, 17, 9), (25, 18, 8),
+ (24, 21, 24), (24, 27, 34), (25, 33, 45), (23, 41, 62),
+ (22, 49, 80), (25, 51, 88), (29, 53, 96), (33, 54, 98),
+ (38, 56, 101), (49, 46, 116), (53, 45, 108), (57, 44, 100),
+ (52, 41, 90), (48, 39, 81), (45, 37, 72), (42, 35, 63),
+ (31, 27, 38), (25, 22, 32), (19, 18, 26), (18, 16, 23),
+ (17, 15, 20), (17, 15, 19), (18, 15, 19), (19, 15, 17),
+ (20, 16, 17), (21, 16, 15), (20, 16, 14), (19, 16, 14),
+ (17, 14, 14), (16, 13, 14), (13, 11, 12), (11, 10, 11),
+ (7, 7, 8), (7, 7, 8), (7, 8, 9), (17, 12, 13),
+ (28, 17, 18), (37, 20, 21), (46, 24, 24), (62, 26, 41),
+ (82, 30, 50), (121, 68, 60), (114, 74, 61), (107, 80, 63),
+ (91, 80, 60), (75, 80, 57), (65, 75, 56), (56, 70, 56),
+ (33, 39, 57), (29, 35, 59), (26, 31, 61), (28, 31, 69),
+ (31, 32, 77), (31, 32, 80), (32, 32, 84), (25, 29, 92),
+ (26, 29, 91), (19, 21, 79), (19, 22, 68), (20, 23, 58),
+ (23, 25, 56), (27, 27, 54), (33, 33, 59), (39, 36, 62),
+ (55, 46, 68), (53, 45, 66), (52, 45, 65), (48, 42, 58),
+ (45, 39, 51), (39, 36, 50), (34, 33, 49), (29, 29, 48),
+ (25, 27, 45), (13, 22, 49), (15, 22, 54), (17, 23, 59),
+ (18, 22, 65), (19, 22, 71), (21, 18, 81), (25, 20, 87),
+ (29, 20, 92), (25, 21, 82), (22, 22, 73), (22, 21, 67),
+ (23, 21, 61), (20, 21, 51), (16, 20, 44), (15, 19, 39),
+ (17, 18, 37), (19, 19, 33), (20, 18, 29), (22, 18, 26),
+ (22, 18, 25), (23, 19, 24), (23, 18, 21), (23, 17, 18),
+ (21, 16, 19), (21, 16, 19), (21, 16, 20), (22, 17, 21),
+ (23, 18, 23), (25, 20, 26), (31, 24, 32), (36, 29, 37),
+ (36, 31, 39), (40, 33, 41), (37, 31, 38), (35, 30, 36),
+ (29, 25, 32), (26, 23, 27), (22, 20, 23), (18, 17, 21),
+ (14, 16, 18), (13, 16, 20), (12, 17, 22), (12, 16, 23),
+ (13, 16, 24), (13, 19, 27), (15, 20, 29), (20, 20, 31),
+ (27, 24, 33), (45, 24, 25), (50, 26, 26), (56, 28, 28),
+ (78, 30, 38), (102, 24, 39), (108, 26, 42), (113, 33, 54),
+ (112, 28, 38), (107, 31, 45), (102, 34, 53), (102, 34, 56),
+ (102, 35, 59), (110, 41, 72), (111, 47, 83), (102, 47, 95),
+ (97, 43, 85), (54, 39, 60), (45, 34, 55), (37, 30, 50),
+ (29, 25, 38), (22, 21, 30), (19, 18, 26), (18, 17, 25),
+ (16, 14, 20), (16, 14, 19), (16, 14, 18), (16, 11, 17),
+ (15, 10, 16), (14, 12, 16), (14, 11, 16), (13, 10, 16),
+ (13, 11, 16), (12, 12, 17), (12, 12, 17), (13, 12, 17),
+ (13, 12, 17), (14, 12, 18), (14, 13, 19), (14, 14, 21),
+ (14, 15, 24), (14, 15, 25), (14, 16, 26), (14, 16, 27),
+ (13, 15, 28), (11, 15, 30), (12, 18, 33), (13, 20, 39),
+ (16, 22, 45), (18, 28, 58), (19, 37, 74), (29, 39, 76),
+ (37, 40, 76), (39, 45, 77), (44, 44, 71), (45, 39, 58),
+ (35, 30, 41), (32, 27, 41), (30, 25, 41), (30, 25, 40),
+ (31, 30, 44), (36, 32, 48), (43, 37, 50), (53, 40, 50),
+ (65, 42, 46), (74, 57, 48), (93, 52, 46), (114, 35, 33),
+ (113, 43, 27), (109, 45, 27), (110, 38, 25), (96, 39, 22),
+ (73, 40, 22), (60, 45, 34), (57, 53, 42), (56, 53, 45),
+ (59, 55, 45), (62, 59, 44), (58, 57, 49), (60, 57, 49),
+ (71, 63, 55), (77, 64, 72), (84, 57, 84), (89, 53, 103),
+ (85, 58, 109), (94, 57, 107), (82, 48, 109), (64, 45, 107),
+ (67, 47, 111), (75, 47, 113), (86, 55, 139), (94, 53, 151),
+ (101, 36, 126), (101, 45, 127), (88, 42, 111), (71, 17, 74),
+ (52, 15, 50), (33, 16, 33), (20, 10, 27), (16, 10, 24),
+ (13, 11, 22), (10, 9, 18), (9, 8, 13), (6, 7, 13),
+ (7, 6, 13), (8, 8, 12), (8, 9, 12), (10, 10, 15),
+ (12, 12, 19), (13, 14, 21), (16, 15, 23), (18, 17, 24),
+ (19, 18, 27), (19, 18, 27), (20, 18, 26), (19, 18, 26),
+ (16, 17, 24), (15, 16, 22), (15, 15, 22), (15, 14, 20),
+ (16, 16, 21), (19, 17, 23), (23, 19, 25), (27, 23, 28),
+ (32, 28, 33), (39, 35, 39), (37, 36, 40), (39, 32, 39)
+ ),
+
+// 536 Davinci
+((210, 157, 143), (233, 209, 178), (220, 210, 184), (207, 212, 190),
+ (181, 200, 172), (156, 189, 155), (151, 175, 164), (146, 161, 173),
+ (90, 107, 141), (105, 94, 145), (120, 81, 150), (130, 71, 134),
+ (140, 62, 118), (138, 41, 96), (137, 20, 74), (130, 15, 68),
+ (123, 11, 63), (86, 12, 41), (81, 31, 53), (77, 50, 66),
+ (77, 66, 77), (77, 82, 89), (80, 94, 101), (83, 106, 113),
+ (73, 84, 100), (66, 68, 90), (59, 52, 81), (56, 42, 74),
+ (53, 32, 68), (58, 30, 61), (64, 28, 55), (65, 36, 39),
+ (61, 56, 52), (38, 87, 51), (32, 101, 68), (27, 115, 86),
+ (30, 124, 89), (34, 133, 92), (43, 129, 92), (53, 126, 92),
+ (116, 146, 93), (160, 172, 115), (205, 198, 137), (217, 191, 135),
+ (229, 185, 134), (221, 177, 132), (213, 169, 130), (205, 128, 97),
+ (184, 83, 70), (155, 43, 50), (148, 28, 41), (142, 14, 33),
+ (146, 21, 49), (150, 29, 65), (152, 35, 73), (154, 42, 81),
+ (177, 82, 126), (184, 104, 146), (191, 127, 167), (186, 130, 157),
+ (182, 133, 147), (179, 137, 152), (176, 141, 157), (169, 123, 145),
+ (163, 102, 122), (150, 60, 67), (157, 66, 65), (164, 73, 63),
+ (172, 80, 63), (181, 87, 64), (192, 110, 69), (185, 101, 73),
+ (194, 75, 45), (178, 49, 29), (162, 23, 13), (162, 38, 16),
+ (162, 54, 19), (152, 67, 29), (143, 81, 40), (150, 118, 58),
+ (152, 147, 70), (114, 147, 73), (125, 147, 81), (137, 147, 89),
+ (141, 139, 91), (145, 131, 94), (147, 98, 73), (144, 55, 47),
+ (140, 36, 48), (141, 33, 42), (142, 30, 37), (139, 35, 44),
+ (137, 41, 52), (129, 49, 62), (125, 43, 50), (118, 40, 39),
+ (104, 41, 43), (99, 55, 43), (98, 48, 45), (98, 41, 47),
+ (97, 40, 48), (97, 39, 50), (104, 36, 49), (115, 36, 45),
+ (112, 52, 63), (115, 84, 77), (118, 116, 92), (106, 117, 95),
+ (95, 119, 98), (98, 138, 123), (99, 138, 108), (97, 144, 99),
+ (113, 149, 111), (174, 159, 114), (173, 149, 108), (172, 139, 102),
+ (165, 109, 83), (148, 81, 66), (115, 57, 63), (96, 53, 66),
+ (59, 43, 68), (38, 39, 57), (18, 35, 47), (14, 24, 41),
+ (11, 13, 35), (16, 7, 41), (34, 17, 44), (47, 12, 24),
+ (62, 6, 20), (109, 34, 20), (120, 51, 28), (131, 69, 36),
+ (136, 88, 56), (139, 118, 77), (138, 135, 81), (125, 130, 75),
+ (84, 105, 47), (70, 86, 33), (57, 67, 20), (49, 58, 19),
+ (41, 49, 18), (20, 33, 12), (8, 27, 7), (16, 39, 34),
+ (30, 61, 52), (54, 114, 66), (70, 127, 82), (86, 140, 98),
+ (101, 159, 97), (96, 181, 95), (109, 177, 109), (112, 165, 109),
+ (134, 147, 109), (134, 131, 105), (135, 115, 102), (138, 92, 91),
+ (156, 79, 81), (159, 74, 95), (161, 81, 100), (176, 92, 97),
+ (181, 109, 107), (177, 142, 116), (172, 144, 117), (168, 147, 118),
+ (150, 141, 116), (140, 138, 100), (108, 112, 83), (77, 82, 68),
+ (65, 66, 41), (66, 61, 40), (67, 56, 39), (83, 48, 31),
+ (90, 59, 35), (102, 79, 43), (137, 85, 42), (143, 89, 51),
+ (136, 109, 69), (150, 118, 71), (151, 103, 71), (148, 97, 82),
+ (142, 99, 91), (131, 90, 87), (132, 85, 83), (136, 107, 98),
+ (145, 150, 100), (145, 154, 109), (145, 158, 119), (135, 164, 122),
+ (139, 165, 119), (158, 168, 137), (161, 155, 148), (148, 126, 126),
+ (150, 120, 112), (147, 99, 97), (140, 83, 89), (142, 75, 82),
+ (149, 62, 70), (152, 53, 54), (152, 65, 56), (158, 78, 64),
+ (168, 109, 86), (175, 153, 115), (185, 183, 131), (179, 191, 144),
+ (177, 194, 150), (195, 198, 162), (193, 182, 163), (184, 173, 149),
+ (180, 153, 130), (176, 134, 117), (172, 144, 119), (174, 155, 118),
+ (169, 160, 117), (141, 154, 112), (122, 147, 111), (121, 146, 108),
+ (110, 137, 106), (115, 135, 119), (123, 127, 117), (127, 121, 111),
+ (124, 111, 110), (117, 112, 122), (110, 109, 119), (120, 109, 121),
+ (116, 105, 124), (126, 97, 116), (127, 74, 93), (116, 55, 68),
+ (117, 40, 40), (108, 33, 28), (83, 20, 12), (67, 26, 10),
+ (51, 31, 12), (31, 19, 5), (21, 11, 3), (13, 4, 4),
+ (11, 7, 10), (12, 9, 13), (7, 5, 11), (4, 9, 12),
+ (5, 17, 19), (2, 14, 18), (4, 19, 20), (8, 23, 21),
+ (9, 18, 21), (21, 22, 20), (39, 40, 26), (50, 53, 32),
+ (72, 71, 45), (98, 95, 59), (117, 126, 63), (146, 151, 78),
+ (165, 152, 101), (180, 167, 109), (207, 182, 114), (218, 162, 124)
+ ),
+
+// 537 Daylight_Fading
+((80, 105, 154), (70, 95, 136), (64, 82, 120), (58, 70, 105),
+ (50, 62, 94), (42, 54, 83), (39, 51, 78), (36, 49, 74),
+ (34, 44, 65), (38, 44, 63), (43, 44, 61), (47, 44, 62),
+ (52, 45, 63), (57, 47, 67), (62, 50, 71), (67, 53, 73),
+ (73, 56, 76), (99, 72, 86), (105, 75, 87), (112, 79, 88),
+ (114, 80, 91), (117, 82, 94), (120, 84, 96), (123, 87, 98),
+ (141, 88, 93), (148, 84, 92), (155, 80, 91), (165, 86, 99),
+ (175, 92, 108), (182, 98, 113), (190, 105, 119), (203, 112, 124),
+ (213, 113, 126), (210, 108, 123), (198, 111, 126), (186, 115, 129),
+ (170, 111, 128), (155, 107, 127), (147, 102, 124), (140, 97, 121),
+ (121, 93, 118), (126, 96, 122), (131, 100, 127), (142, 104, 126),
+ (153, 109, 126), (153, 109, 125), (154, 110, 125), (160, 107, 122),
+ (161, 101, 113), (150, 89, 93), (135, 80, 85), (121, 71, 77),
+ (104, 60, 70), (88, 50, 64), (82, 47, 61), (77, 45, 58),
+ (69, 43, 57), (68, 44, 58), (67, 46, 60), (64, 46, 60),
+ (62, 46, 61), (61, 45, 61), (60, 45, 61), (58, 45, 59),
+ (55, 45, 57), (45, 40, 53), (40, 38, 51), (36, 36, 50),
+ (36, 36, 49), (36, 37, 49), (37, 36, 50), (40, 35, 51),
+ (42, 36, 52), (43, 36, 52), (44, 37, 53), (46, 35, 53),
+ (49, 34, 53), (49, 33, 51), (49, 33, 50), (49, 32, 46),
+ (46, 30, 43), (39, 26, 37), (38, 26, 35), (37, 26, 33),
+ (39, 26, 32), (41, 27, 32), (46, 28, 32), (52, 29, 35),
+ (70, 41, 50), (83, 51, 61), (96, 62, 72), (103, 65, 76),
+ (110, 69, 81), (129, 79, 89), (144, 86, 97), (156, 95, 107),
+ (159, 102, 116), (139, 102, 117), (131, 95, 108), (124, 89, 99),
+ (121, 85, 95), (118, 81, 92), (102, 71, 88), (88, 62, 78),
+ (73, 41, 56), (84, 41, 56), (96, 42, 57), (106, 44, 60),
+ (117, 46, 63), (135, 53, 68), (152, 57, 74), (166, 63, 80),
+ (180, 73, 91), (193, 87, 115), (193, 89, 118), (193, 91, 121),
+ (184, 91, 121), (175, 94, 117), (159, 90, 113), (142, 87, 110),
+ (109, 77, 102), (96, 74, 97), (84, 72, 93), (79, 70, 90),
+ (75, 68, 88), (66, 65, 84), (60, 61, 80), (55, 59, 79),
+ (50, 56, 79), (49, 50, 76), (50, 48, 72), (51, 47, 68),
+ (54, 44, 61), (55, 41, 56), (57, 39, 57), (62, 38, 58),
+ (74, 42, 62), (79, 43, 63), (84, 45, 65), (86, 45, 66),
+ (89, 45, 68), (95, 49, 69), (100, 52, 71), (102, 52, 71),
+ (103, 52, 69), (109, 49, 64), (111, 48, 63), (114, 48, 62),
+ (119, 45, 60), (124, 43, 55), (126, 41, 55), (128, 41, 54),
+ (130, 43, 55), (130, 43, 55), (130, 44, 55), (128, 46, 56),
+ (124, 50, 61), (117, 54, 67), (107, 58, 72), (97, 61, 77),
+ (87, 64, 82), (76, 70, 92), (74, 71, 93), (72, 72, 95),
+ (69, 74, 96), (67, 73, 96), (69, 70, 94), (71, 69, 92),
+ (77, 67, 86), (79, 66, 84), (81, 65, 83), (87, 61, 81),
+ (90, 57, 78), (92, 52, 75), (92, 51, 72), (91, 52, 66),
+ (92, 56, 67), (93, 61, 67), (96, 62, 71), (98, 69, 79),
+ (100, 75, 85), (100, 81, 92), (97, 86, 93), (97, 84, 93),
+ (99, 82, 94), (98, 80, 95), (98, 79, 97), (93, 75, 94),
+ (88, 67, 88), (82, 58, 79), (82, 51, 71), (83, 49, 70),
+ (86, 49, 70), (91, 52, 73), (95, 54, 76), (101, 55, 77),
+ (107, 56, 80), (118, 59, 83), (131, 62, 85), (141, 65, 87),
+ (149, 63, 82), (150, 58, 77), (149, 53, 72), (147, 49, 66),
+ (142, 46, 62), (133, 41, 59), (122, 36, 54), (106, 31, 49),
+ (91, 28, 44), (77, 28, 41), (64, 27, 41), (55, 29, 44),
+ (49, 33, 48), (50, 39, 51), (59, 46, 55), (77, 50, 60),
+ (74, 49, 58), (70, 49, 57), (64, 46, 52), (57, 45, 50),
+ (78, 47, 56), (76, 43, 53), (71, 38, 49), (60, 31, 43),
+ (42, 26, 38), (43, 27, 39), (43, 29, 41), (43, 28, 42),
+ (41, 26, 41), (39, 25, 40), (37, 24, 37), (36, 25, 35),
+ (36, 26, 33), (33, 24, 33), (32, 23, 33), (34, 23, 34),
+ (38, 25, 35), (45, 29, 40), (51, 35, 47), (56, 41, 57),
+ (62, 49, 67), (67, 55, 75), (74, 62, 86), (81, 68, 92),
+ (85, 74, 99), (91, 77, 102), (94, 78, 103), (93, 83, 111),
+ (95, 86, 117), (96, 93, 126), (99, 98, 132), (102, 108, 142),
+ (101, 111, 147), (98, 111, 152), (93, 111, 156), (89, 102, 150)
+ ),
+
+// 538 Dinosaurs
+((27, 168, 193), (15, 167, 195), (12, 154, 194), (10, 141, 193),
+ (7, 133, 179), (4, 125, 165), (7, 118, 154), (10, 112, 144),
+ (12, 84, 92), (17, 80, 74), (23, 76, 56), (26, 77, 43),
+ (30, 78, 30), (41, 79, 43), (53, 81, 57), (55, 79, 67),
+ (57, 78, 77), (64, 92, 106), (67, 80, 114), (71, 69, 122),
+ (80, 62, 117), (89, 56, 112), (92, 56, 101), (96, 56, 91),
+ (91, 37, 68), (94, 40, 50), (98, 44, 33), (86, 52, 30),
+ (75, 61, 27), (75, 58, 26), (75, 56, 26), (77, 54, 23),
+ (71, 55, 23), (69, 80, 54), (68, 88, 71), (68, 96, 89),
+ (61, 116, 101), (55, 136, 113), (48, 141, 118), (41, 146, 124),
+ (33, 146, 139), (35, 130, 137), (37, 114, 135), (52, 94, 143),
+ (68, 74, 152), (82, 65, 155), (96, 56, 158), (104, 49, 165),
+ (104, 62, 170), (123, 82, 169), (109, 82, 154), (96, 83, 139),
+ (77, 83, 115), (59, 83, 92), (53, 81, 84), (47, 79, 76),
+ (24, 64, 40), (20, 70, 29), (16, 76, 19), (12, 90, 16),
+ (9, 104, 14), (8, 109, 17), (7, 114, 21), (9, 124, 27),
+ (11, 131, 34), (14, 136, 46), (14, 133, 55), (14, 131, 64),
+ (15, 126, 65), (17, 121, 66), (17, 112, 59), (22, 99, 51),
+ (24, 99, 36), (26, 107, 27), (28, 116, 18), (29, 132, 19),
+ (31, 148, 20), (28, 152, 24), (26, 157, 28), (25, 164, 27),
+ (24, 171, 23), (23, 161, 27), (32, 150, 25), (42, 139, 23),
+ (50, 136, 27), (59, 133, 32), (69, 121, 42), (85, 113, 58),
+ (117, 95, 61), (121, 80, 61), (126, 65, 61), (127, 62, 58),
+ (129, 60, 55), (142, 55, 44), (149, 48, 34), (152, 35, 33),
+ (155, 30, 43), (169, 48, 71), (165, 46, 75), (162, 44, 80),
+ (159, 42, 80), (157, 40, 80), (146, 56, 80), (133, 75, 75),
+ (138, 95, 71), (122, 103, 74), (107, 112, 77), (109, 115, 85),
+ (112, 119, 93), (120, 127, 121), (110, 133, 147), (84, 135, 156),
+ (63, 132, 160), (49, 136, 168), (46, 139, 161), (43, 142, 155),
+ (40, 142, 128), (52, 134, 105), (72, 116, 80), (99, 98, 62),
+ (144, 71, 22), (148, 58, 17), (153, 46, 13), (155, 39, 13),
+ (157, 33, 14), (153, 33, 14), (137, 33, 13), (114, 33, 14),
+ (94, 28, 13), (60, 18, 24), (55, 18, 28), (51, 18, 33),
+ (40, 19, 42), (31, 16, 51), (18, 12, 53), (13, 18, 56),
+ (10, 36, 63), (13, 39, 59), (17, 42, 55), (16, 44, 54),
+ (16, 47, 53), (15, 51, 61), (18, 64, 81), (20, 75, 100),
+ (21, 83, 116), (21, 93, 138), (20, 100, 138), (19, 107, 139),
+ (12, 117, 133), (12, 121, 122), (10, 117, 105), (15, 115, 82),
+ (8, 110, 48), (6, 105, 43), (5, 101, 38), (17, 94, 32),
+ (30, 93, 27), (44, 90, 23), (51, 82, 22), (66, 68, 23),
+ (79, 64, 28), (98, 44, 23), (106, 38, 23), (115, 32, 23),
+ (124, 26, 32), (133, 16, 48), (142, 10, 60), (163, 11, 73),
+ (186, 15, 107), (189, 16, 111), (192, 17, 115), (200, 24, 116),
+ (204, 27, 108), (195, 34, 103), (181, 43, 103), (164, 50, 107),
+ (160, 51, 102), (153, 53, 86), (152, 62, 70), (135, 64, 103),
+ (121, 66, 131), (101, 69, 145), (99, 82, 117), (100, 83, 134),
+ (102, 79, 176), (104, 78, 169), (106, 77, 163), (116, 72, 148),
+ (129, 63, 141), (147, 54, 127), (156, 40, 109), (152, 35, 87),
+ (134, 31, 76), (114, 28, 76), (95, 24, 81), (77, 28, 82),
+ (59, 44, 88), (43, 54, 90), (33, 58, 94), (29, 58, 85),
+ (34, 64, 79), (46, 66, 61), (50, 63, 46), (48, 57, 29),
+ (41, 50, 27), (42, 46, 29), (41, 37, 41), (46, 33, 55),
+ (51, 31, 79), (61, 35, 97), (72, 43, 116), (84, 54, 128),
+ (90, 72, 143), (95, 86, 146), (94, 104, 138), (89, 119, 123),
+ (70, 144, 113), (49, 161, 106), (35, 170, 100), (31, 164, 89),
+ (27, 158, 82), (26, 152, 71), (27, 144, 69), (31, 138, 64),
+ (33, 135, 61), (37, 134, 55), (39, 126, 50), (39, 122, 42),
+ (39, 123, 34), (36, 125, 32), (32, 128, 40), (27, 127, 47),
+ (30, 135, 45), (31, 144, 38), (30, 154, 38), (20, 154, 43),
+ (18, 150, 49), (19, 146, 47), (26, 137, 43), (24, 119, 36),
+ (24, 98, 36), (27, 79, 45), (37, 66, 60), (42, 56, 70),
+ (42, 53, 69), (44, 53, 70), (47, 63, 82), (47, 84, 100),
+ (42, 100, 112), (41, 110, 118), (43, 118, 128), (43, 138, 140),
+ (38, 159, 153), (36, 171, 163), (36, 170, 182), (34, 167, 191)
+ ),
+
+// 539 Dragon
+((148, 29, 29), (138, 15, 31), (124, 16, 40), (111, 17, 50),
+ (95, 26, 55), (79, 35, 61), (73, 39, 60), (67, 44, 60),
+ (71, 68, 51), (88, 75, 41), (106, 82, 32), (119, 76, 23),
+ (133, 70, 14), (145, 65, 9), (157, 61, 4), (158, 56, 5),
+ (159, 51, 6), (153, 47, 13), (148, 46, 14), (143, 46, 16),
+ (142, 51, 18), (141, 56, 21), (141, 59, 18), (141, 62, 16),
+ (135, 65, 14), (124, 75, 10), (113, 85, 7), (94, 99, 6),
+ (75, 113, 5), (68, 116, 7), (61, 120, 9), (45, 123, 9),
+ (26, 129, 8), (12, 124, 11), (9, 114, 9), (7, 104, 7),
+ (7, 100, 9), (8, 96, 11), (8, 95, 11), (9, 94, 11),
+ (9, 90, 13), (9, 98, 15), (10, 106, 18), (9, 107, 21),
+ (8, 108, 25), (7, 108, 26), (7, 109, 28), (7, 112, 29),
+ (8, 116, 28), (17, 118, 39), (25, 119, 44), (34, 121, 49),
+ (41, 117, 50), (48, 113, 52), (59, 104, 54), (70, 96, 57),
+ (107, 68, 52), (119, 57, 43), (131, 46, 34), (142, 42, 28),
+ (153, 39, 22), (152, 39, 19), (151, 40, 16), (139, 43, 9),
+ (120, 49, 7), (86, 51, 13), (72, 43, 22), (58, 35, 31),
+ (52, 34, 37), (46, 33, 43), (36, 32, 48), (34, 23, 55),
+ (35, 10, 61), (31, 10, 63), (28, 10, 66), (27, 10, 61),
+ (26, 11, 57), (25, 11, 53), (25, 12, 49), (26, 13, 45),
+ (21, 17, 45), (22, 36, 35), (21, 43, 37), (21, 50, 40),
+ (24, 54, 45), (27, 58, 50), (28, 69, 57), (27, 85, 63),
+ (23, 101, 70), (27, 102, 65), (32, 103, 60), (34, 100, 55),
+ (37, 98, 50), (49, 89, 41), (71, 79, 33), (94, 68, 27),
+ (111, 59, 29), (145, 52, 26), (155, 60, 25), (165, 69, 25),
+ (164, 72, 27), (163, 76, 29), (160, 74, 34), (157, 74, 33),
+ (140, 78, 41), (134, 76, 47), (128, 75, 54), (125, 77, 52),
+ (123, 80, 51), (121, 90, 43), (116, 110, 37), (120, 127, 33),
+ (119, 138, 28), (107, 142, 15), (103, 144, 15), (100, 147, 16),
+ (89, 145, 22), (71, 131, 30), (54, 118, 31), (40, 112, 29),
+ (28, 100, 29), (29, 96, 27), (30, 93, 26), (35, 90, 23),
+ (41, 88, 21), (47, 86, 23), (50, 85, 31), (56, 84, 41),
+ (70, 79, 42), (95, 82, 39), (98, 86, 39), (102, 91, 39),
+ (115, 103, 32), (125, 113, 26), (136, 123, 21), (139, 125, 20),
+ (141, 112, 23), (134, 98, 32), (127, 85, 41), (121, 77, 46),
+ (115, 70, 52), (101, 54, 58), (90, 45, 63), (82, 44, 58),
+ (78, 47, 51), (76, 68, 43), (74, 74, 38), (73, 80, 34),
+ (75, 83, 22), (79, 83, 13), (78, 93, 11), (70, 106, 12),
+ (70, 104, 12), (71, 101, 11), (72, 98, 11), (72, 97, 11),
+ (79, 89, 9), (87, 77, 8), (94, 62, 9), (93, 56, 11),
+ (97, 49, 10), (80, 54, 9), (72, 56, 10), (65, 59, 12),
+ (64, 60, 12), (58, 62, 15), (46, 66, 22), (34, 68, 33),
+ (34, 68, 45), (35, 68, 49), (36, 68, 53), (39, 69, 63),
+ (40, 78, 69), (56, 92, 64), (77, 104, 57), (94, 110, 45),
+ (99, 114, 39), (106, 121, 33), (114, 129, 31), (113, 130, 26),
+ (98, 122, 22), (80, 111, 21), (66, 104, 24), (53, 99, 24),
+ (23, 68, 22), (18, 60, 26), (13, 53, 30), (15, 42, 37),
+ (19, 38, 41), (20, 30, 42), (14, 31, 45), (15, 33, 48),
+ (17, 43, 53), (19, 51, 53), (23, 63, 52), (32, 77, 45),
+ (50, 91, 40), (64, 101, 36), (80, 100, 35), (96, 104, 36),
+ (116, 105, 35), (130, 106, 34), (132, 100, 29), (131, 105, 28),
+ (123, 115, 33), (115, 124, 37), (108, 126, 36), (107, 129, 31),
+ (102, 123, 36), (87, 114, 42), (72, 98, 40), (62, 88, 32),
+ (58, 64, 26), (52, 39, 27), (44, 19, 26), (37, 13, 25),
+ (36, 13, 19), (49, 18, 14), (69, 34, 11), (88, 50, 14),
+ (99, 67, 20), (108, 86, 23), (115, 105, 23), (118, 126, 20),
+ (115, 143, 20), (101, 155, 24), (81, 156, 27), (63, 153, 24),
+ (55, 146, 17), (46, 138, 14), (32, 132, 15), (22, 123, 17),
+ (24, 116, 16), (33, 105, 17), (40, 103, 17), (47, 104, 15),
+ (57, 110, 15), (70, 114, 14), (79, 120, 14), (80, 126, 15),
+ (76, 130, 16), (72, 134, 19), (69, 135, 27), (58, 137, 34),
+ (44, 137, 38), (29, 136, 36), (24, 132, 40), (21, 124, 44),
+ (23, 117, 48), (25, 111, 47), (35, 102, 42), (53, 92, 38),
+ (76, 74, 36), (97, 60, 37), (115, 46, 35), (133, 38, 32)
+ ),
+
+// 540 Dust_Bunny
+((103, 105, 94), (100, 104, 95), (100, 104, 96), (101, 104, 97),
+ (104, 107, 101), (107, 111, 105), (107, 112, 107), (107, 113, 110),
+ (106, 115, 115), (105, 115, 114), (105, 115, 114), (105, 114, 113),
+ (106, 113, 113), (104, 111, 112), (103, 110, 112), (101, 108, 111),
+ (99, 107, 110), (91, 96, 104), (86, 92, 100), (82, 88, 97),
+ (76, 82, 92), (70, 76, 87), (67, 73, 84), (64, 70, 81),
+ (59, 63, 75), (57, 63, 75), (56, 63, 75), (57, 63, 74),
+ (58, 63, 73), (59, 64, 73), (60, 65, 74), (62, 68, 78),
+ (65, 71, 83), (71, 75, 83), (72, 75, 80), (73, 75, 77),
+ (72, 73, 75), (71, 71, 73), (71, 69, 71), (71, 68, 70),
+ (67, 60, 58), (65, 56, 53), (64, 53, 49), (63, 52, 49),
+ (63, 52, 49), (62, 51, 49), (62, 51, 49), (63, 51, 49),
+ (64, 51, 51), (68, 58, 57), (70, 61, 63), (73, 65, 69),
+ (74, 69, 74), (76, 74, 80), (76, 76, 82), (76, 78, 84),
+ (79, 80, 83), (78, 79, 81), (78, 78, 79), (73, 75, 77),
+ (69, 73, 75), (67, 71, 72), (66, 70, 70), (64, 67, 66),
+ (64, 64, 64), (63, 60, 61), (64, 60, 60), (65, 60, 59),
+ (67, 61, 59), (69, 63, 60), (74, 68, 64), (80, 73, 69),
+ (98, 88, 78), (108, 97, 85), (119, 107, 93), (125, 114, 100),
+ (131, 122, 108), (134, 125, 110), (137, 129, 113), (141, 131, 114),
+ (143, 132, 115), (137, 128, 112), (131, 122, 107), (125, 117, 103),
+ (120, 114, 101), (116, 111, 99), (110, 106, 95), (102, 101, 91),
+ (90, 89, 85), (85, 83, 83), (80, 78, 81), (77, 76, 79),
+ (75, 74, 78), (71, 69, 75), (67, 64, 71), (64, 59, 68),
+ (61, 55, 64), (56, 50, 54), (53, 48, 51), (50, 47, 48),
+ (49, 46, 48), (48, 46, 48), (48, 49, 49), (49, 51, 50),
+ (55, 58, 57), (58, 62, 63), (61, 67, 69), (63, 70, 72),
+ (65, 73, 75), (70, 77, 80), (74, 80, 83), (77, 81, 85),
+ (78, 79, 85), (74, 74, 81), (72, 73, 79), (71, 72, 78),
+ (69, 69, 75), (68, 65, 70), (68, 63, 66), (70, 64, 66),
+ (76, 74, 73), (82, 79, 75), (89, 84, 78), (94, 88, 80),
+ (99, 92, 83), (109, 99, 88), (115, 106, 90), (118, 109, 92),
+ (119, 109, 90), (123, 109, 88), (122, 107, 85), (121, 105, 83),
+ (115, 99, 77), (107, 92, 71), (99, 85, 65), (96, 82, 62),
+ (91, 76, 58), (89, 76, 59), (87, 76, 61), (86, 77, 62),
+ (86, 78, 63), (84, 80, 67), (85, 80, 69), (85, 82, 71),
+ (85, 81, 72), (81, 79, 74), (79, 77, 74), (78, 76, 75),
+ (77, 76, 77), (78, 76, 79), (81, 78, 82), (87, 83, 87),
+ (101, 95, 97), (104, 98, 99), (108, 101, 101), (112, 106, 106),
+ (114, 110, 109), (113, 112, 113), (112, 113, 113), (113, 113, 111),
+ (112, 112, 108), (104, 107, 103), (101, 105, 102), (98, 104, 102),
+ (93, 101, 98), (91, 99, 95), (90, 95, 91), (87, 91, 87),
+ (83, 81, 79), (82, 79, 76), (81, 77, 73), (79, 73, 68),
+ (77, 68, 62), (76, 65, 57), (77, 64, 55), (82, 66, 55),
+ (86, 71, 56), (92, 76, 59), (96, 80, 59), (99, 83, 61),
+ (101, 86, 63), (101, 86, 65), (101, 85, 67), (97, 82, 66),
+ (85, 72, 61), (81, 68, 59), (77, 65, 57), (70, 58, 53),
+ (62, 51, 52), (56, 47, 50), (53, 45, 49), (52, 47, 48),
+ (53, 47, 47), (56, 49, 48), (58, 51, 50), (63, 53, 53),
+ (66, 59, 56), (72, 65, 59), (79, 71, 60), (87, 76, 62),
+ (94, 80, 64), (97, 83, 67), (97, 86, 72), (97, 89, 75),
+ (95, 90, 78), (93, 90, 79), (90, 87, 78), (83, 81, 76),
+ (76, 76, 73), (69, 69, 69), (61, 63, 65), (57, 58, 60),
+ (53, 52, 54), (54, 50, 48), (56, 48, 44), (58, 48, 42),
+ (61, 50, 42), (64, 55, 45), (69, 60, 50), (75, 67, 57),
+ (81, 72, 65), (87, 79, 73), (90, 85, 79), (94, 90, 83),
+ (99, 94, 86), (103, 97, 88), (109, 100, 91), (115, 106, 95),
+ (120, 110, 96), (125, 113, 96), (129, 116, 95), (133, 117, 95),
+ (135, 120, 98), (135, 121, 103), (132, 121, 106), (128, 120, 107),
+ (122, 117, 107), (115, 112, 104), (108, 106, 103), (99, 98, 100),
+ (89, 92, 96), (81, 86, 92), (76, 82, 86), (74, 79, 81),
+ (74, 75, 78), (73, 75, 76), (74, 76, 77), (75, 80, 80),
+ (79, 85, 82), (84, 89, 87), (88, 92, 88), (90, 94, 90),
+ (89, 95, 90), (91, 97, 90), (95, 99, 91), (98, 101, 92)
+ ),
+
+// 541 Dynasty
+((85, 96, 61), (34, 91, 51), (21, 89, 49), (8, 88, 48),
+ (8, 82, 35), (8, 77, 22), (7, 73, 19), (6, 69, 17),
+ (10, 51, 18), (16, 38, 14), (22, 25, 11), (36, 18, 14),
+ (51, 12, 17), (62, 12, 15), (74, 13, 14), (79, 13, 12),
+ (85, 13, 10), (88, 9, 23), (86, 11, 28), (84, 14, 33),
+ (80, 17, 42), (76, 21, 52), (76, 27, 58), (77, 33, 65),
+ (93, 55, 79), (94, 71, 80), (96, 88, 81), (95, 90, 68),
+ (95, 92, 56), (94, 87, 53), (94, 83, 50), (95, 70, 41),
+ (101, 58, 26), (123, 39, 4), (144, 33, 4), (166, 28, 5),
+ (176, 37, 11), (186, 47, 17), (185, 52, 26), (185, 57, 35),
+ (187, 70, 55), (178, 75, 54), (169, 80, 54), (162, 78, 57),
+ (156, 77, 60), (154, 74, 54), (152, 72, 49), (142, 72, 42),
+ (130, 70, 45), (101, 57, 51), (80, 48, 53), (59, 39, 56),
+ (46, 33, 51), (33, 28, 46), (27, 24, 41), (22, 20, 37),
+ (9, 19, 17), (15, 21, 13), (21, 24, 9), (28, 34, 8),
+ (35, 45, 7), (42, 45, 5), (49, 46, 4), (65, 43, 8),
+ (80, 46, 11), (98, 58, 12), (95, 62, 18), (93, 67, 25),
+ (90, 69, 30), (88, 72, 35), (73, 76, 36), (57, 88, 38),
+ (33, 99, 47), (30, 99, 56), (28, 99, 66), (28, 87, 73),
+ (29, 76, 80), (34, 69, 84), (39, 63, 88), (45, 58, 78),
+ (35, 56, 83), (26, 50, 68), (26, 54, 50), (26, 59, 32),
+ (29, 61, 27), (32, 63, 22), (51, 70, 15), (70, 69, 14),
+ (122, 50, 7), (143, 44, 9), (164, 38, 11), (170, 37, 11),
+ (177, 37, 11), (182, 38, 13), (183, 37, 14), (168, 37, 21),
+ (154, 42, 28), (144, 60, 29), (141, 65, 33), (138, 70, 38),
+ (135, 72, 44), (132, 74, 50), (128, 79, 50), (122, 84, 47),
+ (107, 98, 46), (96, 93, 44), (86, 88, 42), (81, 85, 42),
+ (77, 82, 42), (72, 74, 47), (71, 62, 47), (76, 54, 47),
+ (83, 51, 51), (86, 47, 50), (85, 50, 48), (84, 54, 46),
+ (90, 61, 44), (96, 71, 32), (96, 78, 21), (93, 88, 20),
+ (113, 95, 43), (126, 99, 52), (139, 104, 61), (142, 103, 67),
+ (145, 103, 73), (146, 107, 81), (147, 112, 86), (146, 112, 88),
+ (132, 99, 85), (89, 74, 63), (82, 69, 59), (76, 65, 56),
+ (67, 49, 49), (67, 33, 47), (79, 25, 41), (96, 23, 35),
+ (146, 16, 26), (169, 17, 22), (193, 18, 19), (199, 18, 18),
+ (205, 18, 17), (208, 16, 12), (203, 19, 8), (184, 23, 4),
+ (162, 26, 4), (119, 33, 5), (109, 35, 5), (100, 38, 5),
+ (88, 44, 10), (78, 58, 19), (75, 64, 33), (71, 68, 46),
+ (78, 79, 69), (83, 85, 76), (89, 91, 84), (90, 97, 94),
+ (91, 95, 99), (87, 84, 96), (89, 77, 93), (86, 66, 81),
+ (86, 57, 65), (80, 31, 44), (76, 27, 39), (72, 23, 35),
+ (61, 17, 25), (56, 18, 16), (55, 19, 13), (57, 30, 14),
+ (71, 52, 28), (78, 55, 34), (85, 59, 40), (103, 73, 50),
+ (125, 84, 63), (147, 97, 74), (168, 103, 83), (178, 102, 83),
+ (177, 97, 80), (172, 89, 74), (168, 81, 65), (160, 67, 54),
+ (143, 58, 44), (125, 49, 36), (116, 45, 26), (115, 38, 19),
+ (127, 32, 28), (136, 31, 29), (145, 31, 30), (163, 38, 25),
+ (178, 40, 28), (182, 49, 35), (189, 48, 52), (193, 63, 63),
+ (191, 71, 69), (175, 87, 67), (152, 89, 72), (128, 100, 74),
+ (107, 98, 72), (91, 95, 62), (76, 83, 53), (56, 77, 45),
+ (38, 65, 41), (29, 57, 35), (26, 48, 31), (24, 42, 25),
+ (19, 36, 24), (22, 36, 23), (33, 47, 25), (47, 58, 27),
+ (54, 63, 31), (52, 62, 34), (53, 65, 42), (57, 69, 49),
+ (66, 62, 55), (63, 49, 55), (61, 36, 57), (63, 29, 58),
+ (73, 25, 55), (85, 17, 48), (98, 10, 44), (118, 6, 46),
+ (131, 11, 43), (142, 13, 36), (145, 9, 29), (156, 6, 26),
+ (165, 6, 21), (172, 9, 18), (169, 7, 14), (164, 6, 18),
+ (162, 3, 19), (163, 5, 19), (155, 9, 20), (135, 11, 26),
+ (112, 12, 29), (98, 18, 26), (86, 31, 21), (75, 48, 18),
+ (67, 58, 17), (70, 64, 13), (83, 72, 10), (97, 79, 7),
+ (114, 78, 7), (126, 66, 5), (138, 58, 7), (145, 50, 13),
+ (151, 45, 19), (152, 33, 19), (151, 29, 15), (151, 31, 16),
+ (154, 42, 20), (163, 53, 22), (172, 65, 20), (167, 70, 25),
+ (162, 81, 29), (137, 85, 37), (125, 95, 43), (91, 94, 56)
+ ),
+
+// 542 Easter
+((178, 165, 213), (177, 160, 215), (176, 158, 215), (175, 156, 216),
+ (175, 154, 216), (176, 153, 217), (176, 151, 217), (177, 150, 217),
+ (178, 151, 217), (179, 154, 217), (180, 158, 217), (180, 158, 216),
+ (180, 159, 215), (180, 159, 214), (180, 159, 214), (179, 160, 214),
+ (179, 161, 214), (178, 164, 218), (177, 163, 219), (177, 163, 220),
+ (175, 164, 223), (173, 166, 226), (174, 167, 226), (175, 168, 227),
+ (182, 171, 227), (180, 170, 227), (178, 170, 227), (176, 164, 221),
+ (174, 158, 215), (173, 152, 210), (173, 147, 206), (167, 134, 196),
+ (158, 121, 186), (134, 89, 157), (120, 72, 143), (106, 56, 130),
+ (98, 46, 122), (91, 36, 115), (90, 33, 112), (89, 31, 109),
+ (90, 30, 111), (95, 35, 116), (100, 40, 121), (108, 47, 126),
+ (116, 54, 132), (118, 55, 135), (120, 57, 139), (122, 59, 141),
+ (121, 57, 140), (112, 51, 130), (104, 44, 126), (97, 37, 122),
+ (93, 31, 118), (89, 25, 115), (89, 25, 113), (89, 25, 112),
+ (95, 33, 119), (107, 48, 131), (119, 63, 144), (129, 79, 156),
+ (139, 96, 169), (141, 101, 172), (144, 106, 176), (158, 130, 193),
+ (169, 142, 202), (182, 169, 224), (182, 177, 227), (183, 185, 230),
+ (185, 188, 231), (188, 192, 232), (193, 196, 234), (197, 200, 237),
+ (199, 207, 240), (199, 206, 238), (199, 205, 237), (197, 199, 235),
+ (195, 193, 233), (193, 189, 232), (192, 185, 231), (185, 174, 228),
+ (180, 162, 225), (168, 143, 218), (166, 136, 214), (164, 129, 211),
+ (163, 125, 209), (163, 122, 208), (160, 117, 205), (158, 114, 200),
+ (156, 110, 190), (156, 107, 187), (157, 105, 184), (156, 104, 182),
+ (156, 103, 181), (155, 100, 178), (152, 99, 177), (150, 97, 178),
+ (149, 98, 180), (152, 103, 184), (155, 109, 187), (158, 115, 190),
+ (158, 119, 192), (158, 124, 195), (160, 132, 198), (163, 138, 201),
+ (170, 142, 199), (169, 142, 196), (169, 142, 194), (167, 140, 192),
+ (166, 139, 191), (164, 131, 188), (160, 120, 184), (155, 108, 177),
+ (148, 97, 170), (136, 78, 156), (131, 73, 153), (127, 69, 151),
+ (120, 60, 144), (113, 52, 139), (107, 46, 132), (106, 42, 127),
+ (105, 45, 126), (110, 50, 131), (116, 56, 137), (121, 61, 141),
+ (126, 67, 145), (136, 81, 155), (146, 96, 168), (155, 111, 180),
+ (163, 124, 193), (176, 150, 215), (178, 155, 218), (181, 161, 222),
+ (184, 169, 228), (185, 175, 233), (185, 177, 235), (185, 177, 237),
+ (186, 177, 236), (186, 175, 234), (186, 173, 232), (185, 170, 231),
+ (184, 168, 230), (182, 162, 227), (179, 156, 222), (178, 151, 218),
+ (177, 148, 214), (174, 139, 206), (172, 134, 203), (170, 129, 201),
+ (166, 121, 196), (164, 115, 191), (162, 110, 187), (159, 107, 182),
+ (148, 85, 173), (144, 78, 169), (141, 72, 166), (134, 64, 160),
+ (128, 58, 153), (120, 53, 144), (114, 45, 138), (105, 37, 130),
+ (94, 33, 122), (88, 32, 113), (89, 35, 114), (90, 39, 116),
+ (96, 45, 122), (98, 55, 129), (104, 65, 136), (113, 73, 144),
+ (136, 94, 171), (141, 100, 178), (146, 107, 185), (154, 119, 196),
+ (161, 127, 204), (164, 134, 212), (167, 139, 217), (168, 144, 221),
+ (171, 148, 223), (174, 152, 224), (175, 155, 225), (176, 155, 225),
+ (176, 154, 224), (175, 152, 221), (175, 149, 217), (173, 145, 212),
+ (162, 139, 210), (161, 139, 211), (160, 139, 213), (161, 140, 215),
+ (166, 144, 216), (166, 144, 217), (162, 147, 220), (161, 149, 223),
+ (163, 151, 228), (169, 155, 230), (173, 155, 229), (170, 152, 230),
+ (167, 150, 227), (166, 148, 228), (166, 147, 228), (168, 148, 226),
+ (167, 146, 226), (165, 146, 225), (166, 145, 225), (166, 144, 223),
+ (169, 144, 220), (171, 142, 218), (170, 140, 215), (169, 137, 212),
+ (166, 132, 209), (163, 127, 206), (160, 123, 205), (158, 122, 204),
+ (159, 123, 204), (161, 124, 204), (162, 125, 204), (163, 127, 205),
+ (164, 132, 207), (165, 137, 208), (170, 143, 210), (172, 146, 212),
+ (175, 147, 213), (174, 148, 215), (173, 148, 215), (173, 147, 216),
+ (172, 143, 216), (170, 135, 215), (168, 128, 214), (166, 124, 211),
+ (164, 122, 209), (165, 122, 207), (166, 119, 207), (166, 119, 207),
+ (167, 122, 207), (167, 126, 208), (169, 133, 209), (172, 139, 211),
+ (176, 147, 214), (179, 154, 218), (181, 162, 222), (185, 170, 226),
+ (188, 178, 228), (193, 186, 231), (198, 192, 233), (199, 198, 234),
+ (199, 200, 235), (197, 199, 235), (195, 199, 234), (193, 197, 233),
+ (192, 195, 230), (189, 191, 227), (185, 185, 225), (183, 179, 222),
+ (179, 175, 220), (178, 172, 217), (177, 170, 215), (177, 168, 213)
+ ),
+
+// 543 Easter_2
+((145, 146, 202), (154, 169, 210), (159, 183, 215), (165, 198, 220),
+ (173, 210, 225), (181, 222, 230), (187, 224, 232), (193, 227, 234),
+ (220, 240, 243), (229, 243, 246), (238, 247, 249), (239, 247, 249),
+ (241, 248, 250), (233, 244, 247), (226, 241, 244), (220, 236, 242),
+ (215, 232, 240), (185, 203, 229), (171, 186, 220), (157, 169, 211),
+ (148, 151, 203), (139, 134, 196), (135, 128, 193), (132, 122, 190),
+ (122, 101, 179), (110, 84, 172), (99, 67, 165), (89, 52, 154),
+ (79, 37, 144), (74, 29, 140), (70, 22, 136), (64, 12, 131),
+ (65, 8, 131), (93, 27, 143), (105, 38, 151), (118, 50, 160),
+ (125, 65, 165), (133, 81, 170), (134, 87, 171), (136, 93, 172),
+ (149, 120, 187), (161, 136, 197), (174, 153, 207), (190, 169, 217),
+ (207, 185, 228), (214, 193, 232), (221, 202, 237), (232, 217, 242),
+ (240, 228, 245), (246, 244, 251), (249, 248, 252), (252, 252, 254),
+ (250, 252, 253), (249, 252, 252), (246, 250, 251), (243, 249, 250),
+ (227, 242, 244), (217, 237, 241), (208, 233, 238), (200, 230, 235),
+ (193, 227, 233), (190, 226, 232), (187, 225, 231), (182, 223, 230),
+ (178, 221, 228), (176, 220, 227), (176, 220, 227), (176, 221, 227),
+ (177, 221, 227), (179, 221, 228), (184, 223, 230), (190, 225, 232),
+ (202, 226, 237), (209, 224, 239), (217, 223, 241), (224, 219, 243),
+ (231, 216, 245), (233, 214, 246), (236, 212, 247), (239, 207, 247),
+ (241, 200, 246), (236, 180, 243), (230, 168, 239), (225, 156, 236),
+ (222, 150, 235), (220, 144, 234), (215, 132, 230), (209, 123, 227),
+ (201, 104, 221), (196, 96, 218), (191, 89, 215), (188, 86, 213),
+ (186, 83, 212), (181, 78, 209), (178, 73, 207), (174, 72, 206),
+ (173, 71, 205), (172, 73, 204), (172, 76, 204), (173, 79, 204),
+ (174, 81, 204), (175, 83, 205), (178, 88, 206), (180, 93, 208),
+ (182, 104, 211), (176, 111, 210), (171, 118, 209), (167, 122, 209),
+ (164, 126, 209), (159, 133, 208), (156, 141, 208), (156, 151, 210),
+ (160, 160, 212), (172, 177, 218), (174, 181, 219), (176, 185, 221),
+ (177, 194, 223), (178, 201, 224), (179, 209, 226), (183, 217, 229),
+ (197, 229, 235), (209, 234, 239), (222, 240, 243), (227, 242, 245),
+ (233, 244, 247), (241, 244, 250), (246, 241, 251), (247, 235, 251),
+ (245, 226, 249), (235, 205, 242), (233, 200, 240), (232, 195, 239),
+ (229, 186, 237), (227, 179, 236), (225, 173, 236), (222, 164, 235),
+ (215, 150, 231), (207, 147, 227), (200, 144, 224), (197, 144, 223),
+ (195, 144, 222), (193, 148, 223), (196, 156, 225), (199, 164, 228),
+ (204, 173, 230), (215, 187, 237), (215, 190, 237), (216, 193, 238),
+ (215, 195, 236), (212, 195, 235), (207, 200, 234), (199, 204, 233),
+ (180, 204, 228), (176, 203, 227), (172, 202, 226), (166, 200, 223),
+ (160, 197, 221), (155, 190, 218), (149, 187, 216), (143, 185, 214),
+ (137, 184, 212), (121, 183, 207), (117, 184, 206), (113, 185, 205),
+ (108, 188, 204), (108, 190, 204), (113, 192, 206), (123, 193, 207),
+ (146, 190, 213), (150, 187, 214), (155, 184, 215), (160, 175, 214),
+ (160, 162, 211), (165, 165, 213), (165, 168, 215), (166, 171, 214),
+ (164, 172, 213), (162, 174, 214), (161, 175, 214), (160, 173, 215),
+ (153, 150, 208), (151, 143, 209), (147, 138, 213), (144, 138, 216),
+ (130, 148, 213), (126, 153, 213), (122, 158, 213), (114, 170, 214),
+ (102, 166, 207), (96, 157, 202), (87, 143, 198), (86, 128, 195),
+ (87, 115, 191), (87, 112, 189), (85, 113, 188), (81, 117, 187),
+ (75, 125, 185), (73, 136, 181), (67, 139, 180), (65, 140, 179),
+ (68, 131, 177), (78, 125, 177), (87, 120, 177), (94, 112, 177),
+ (98, 107, 176), (105, 108, 175), (107, 108, 174), (104, 108, 172),
+ (97, 102, 167), (97, 93, 160), (97, 82, 153), (96, 71, 147),
+ (96, 59, 143), (103, 51, 144), (111, 42, 144), (117, 36, 145),
+ (120, 34, 147), (123, 37, 149), (128, 44, 153), (133, 53, 156),
+ (137, 64, 159), (145, 79, 167), (156, 95, 176), (169, 109, 188),
+ (183, 122, 200), (196, 133, 211), (207, 143, 222), (216, 151, 230),
+ (224, 156, 234), (228, 162, 237), (230, 170, 238), (226, 180, 239),
+ (217, 186, 237), (206, 188, 234), (193, 188, 230), (179, 185, 226),
+ (167, 180, 222), (157, 174, 219), (152, 168, 217), (151, 164, 213),
+ (148, 159, 211), (145, 155, 209), (140, 150, 206), (134, 144, 202),
+ (127, 136, 197), (121, 128, 193), (117, 123, 191), (118, 118, 189),
+ (118, 118, 188), (120, 119, 190), (121, 122, 191), (124, 125, 193),
+ (127, 125, 194), (132, 126, 195), (133, 130, 197), (140, 135, 199)
+ ),
+
+// 544 Easter_3
+((216, 166, 226), (229, 189, 237), (235, 199, 242), (241, 210, 247),
+ (244, 216, 250), (247, 223, 253), (247, 223, 253), (247, 224, 253),
+ (243, 219, 250), (236, 213, 246), (229, 208, 242), (219, 199, 238),
+ (210, 190, 234), (200, 176, 231), (191, 162, 228), (187, 153, 225),
+ (184, 145, 223), (158, 118, 206), (146, 110, 198), (135, 102, 191),
+ (128, 96, 185), (122, 90, 179), (123, 88, 176), (124, 86, 174),
+ (129, 84, 165), (130, 84, 166), (132, 85, 167), (137, 89, 172),
+ (142, 93, 178), (148, 96, 180), (154, 100, 183), (166, 108, 187),
+ (176, 111, 191), (174, 106, 193), (166, 103, 191), (158, 100, 190),
+ (151, 98, 183), (145, 96, 176), (141, 93, 171), (138, 91, 167),
+ (111, 71, 146), (97, 62, 137), (83, 54, 128), (73, 49, 120),
+ (63, 44, 113), (60, 42, 111), (58, 41, 109), (55, 38, 106),
+ (52, 35, 104), (51, 34, 104), (50, 33, 104), (50, 32, 104),
+ (51, 33, 105), (52, 35, 106), (53, 35, 107), (54, 36, 109),
+ (63, 42, 121), (68, 47, 127), (74, 53, 133), (79, 57, 139),
+ (84, 62, 145), (86, 63, 149), (88, 64, 153), (94, 66, 161),
+ (101, 68, 168), (108, 74, 178), (109, 74, 177), (110, 75, 176),
+ (108, 73, 174), (107, 72, 172), (105, 68, 169), (103, 66, 165),
+ (105, 67, 167), (110, 72, 171), (116, 77, 176), (125, 87, 181),
+ (134, 98, 186), (138, 104, 189), (143, 110, 192), (155, 121, 202),
+ (170, 132, 212), (203, 155, 235), (214, 168, 242), (225, 181, 249),
+ (228, 184, 251), (232, 188, 253), (234, 191, 251), (234, 190, 248),
+ (226, 179, 237), (215, 172, 230), (205, 165, 224), (199, 160, 220),
+ (194, 156, 217), (184, 147, 213), (180, 138, 209), (177, 133, 210),
+ (174, 131, 209), (177, 134, 214), (179, 134, 216), (181, 134, 219),
+ (183, 135, 223), (185, 136, 227), (190, 137, 233), (193, 139, 239),
+ (193, 138, 243), (188, 133, 240), (184, 128, 237), (181, 124, 235),
+ (178, 120, 234), (172, 114, 231), (169, 113, 228), (165, 112, 226),
+ (165, 113, 224), (165, 115, 226), (167, 116, 226), (169, 117, 227),
+ (177, 122, 228), (186, 131, 230), (197, 139, 231), (204, 144, 230),
+ (201, 143, 222), (191, 136, 214), (181, 129, 206), (178, 126, 201),
+ (176, 124, 197), (173, 118, 191), (168, 112, 185), (164, 109, 181),
+ (158, 104, 175), (141, 99, 168), (139, 96, 168), (137, 94, 169),
+ (136, 91, 171), (140, 90, 176), (146, 92, 181), (153, 96, 183),
+ (165, 107, 186), (169, 107, 187), (173, 108, 188), (175, 108, 190),
+ (177, 109, 193), (180, 112, 196), (180, 112, 197), (183, 116, 201),
+ (184, 119, 205), (197, 123, 210), (202, 126, 212), (207, 130, 215),
+ (210, 130, 219), (209, 130, 221), (203, 129, 221), (194, 126, 215),
+ (179, 111, 199), (174, 108, 194), (170, 105, 189), (161, 97, 180),
+ (147, 90, 169), (132, 84, 159), (114, 74, 149), (100, 64, 139),
+ (87, 57, 131), (69, 45, 121), (67, 44, 119), (65, 43, 117),
+ (62, 43, 116), (61, 43, 116), (62, 43, 116), (62, 43, 117),
+ (67, 46, 123), (68, 47, 124), (70, 49, 126), (73, 51, 130),
+ (75, 53, 133), (75, 52, 134), (75, 51, 135), (75, 50, 136),
+ (78, 53, 137), (85, 57, 137), (97, 66, 141), (111, 73, 146),
+ (127, 83, 153), (142, 91, 159), (154, 101, 167), (167, 108, 171),
+ (193, 131, 186), (199, 135, 191), (206, 139, 197), (219, 150, 207),
+ (229, 160, 219), (236, 168, 227), (239, 177, 234), (241, 187, 238),
+ (240, 192, 243), (239, 196, 246), (239, 194, 246), (238, 193, 244),
+ (233, 191, 241), (228, 190, 235), (221, 190, 232), (212, 189, 228),
+ (203, 180, 222), (194, 167, 213), (180, 152, 204), (164, 133, 192),
+ (146, 118, 180), (131, 109, 172), (119, 100, 165), (110, 92, 160),
+ (106, 87, 159), (104, 78, 159), (102, 72, 160), (104, 70, 164),
+ (109, 71, 170), (116, 74, 177), (125, 83, 186), (137, 90, 197),
+ (147, 98, 206), (160, 108, 217), (172, 118, 224), (184, 125, 231),
+ (194, 136, 236), (205, 142, 242), (213, 147, 244), (221, 154, 248),
+ (229, 162, 249), (234, 166, 248), (238, 170, 246), (239, 170, 243),
+ (238, 165, 238), (233, 160, 233), (227, 156, 228), (219, 150, 225),
+ (210, 149, 221), (203, 148, 217), (198, 146, 215), (192, 142, 214),
+ (186, 139, 213), (178, 132, 213), (166, 127, 209), (156, 124, 204),
+ (149, 120, 198), (143, 116, 194), (141, 114, 192), (142, 111, 194),
+ (143, 107, 196), (143, 107, 196), (146, 107, 193), (147, 106, 188),
+ (150, 105, 181), (152, 109, 182), (158, 111, 185), (171, 121, 196),
+ (185, 133, 206), (197, 143, 216), (210, 150, 221), (216, 161, 228)
+ ),
+
+// 545 Egg_Hunt
+((119, 124, 148), (130, 119, 106), (148, 117, 90), (167, 116, 75),
+ (173, 123, 73), (180, 130, 71), (177, 135, 70), (175, 141, 70),
+ (159, 152, 77), (157, 153, 75), (155, 155, 74), (146, 160, 67),
+ (138, 165, 61), (128, 174, 64), (118, 183, 67), (119, 183, 62),
+ (121, 183, 58), (162, 187, 23), (179, 191, 18), (196, 196, 14),
+ (204, 192, 14), (212, 188, 15), (214, 182, 14), (216, 176, 13),
+ (225, 153, 22), (228, 146, 33), (232, 139, 45), (231, 133, 53),
+ (230, 128, 62), (229, 127, 63), (229, 127, 64), (229, 131, 69),
+ (230, 138, 64), (231, 145, 55), (229, 154, 47), (227, 164, 39),
+ (218, 173, 38), (209, 182, 38), (200, 178, 43), (192, 175, 48),
+ (164, 174, 75), (144, 181, 98), (125, 188, 122), (106, 187, 136),
+ (88, 186, 150), (86, 183, 147), (85, 180, 144), (80, 178, 130),
+ (73, 180, 131), (68, 187, 125), (86, 185, 104), (105, 183, 84),
+ (116, 177, 76), (127, 172, 68), (130, 169, 72), (133, 166, 77),
+ (160, 143, 94), (166, 127, 84), (172, 112, 75), (166, 111, 68),
+ (160, 111, 62), (161, 116, 61), (162, 121, 60), (166, 117, 55),
+ (165, 124, 40), (161, 151, 16), (170, 167, 14), (180, 184, 12),
+ (185, 188, 11), (191, 193, 11), (201, 196, 13), (208, 199, 21),
+ (230, 201, 44), (233, 198, 58), (237, 196, 73), (226, 189, 90),
+ (215, 183, 108), (205, 179, 110), (195, 176, 113), (177, 168, 111),
+ (154, 159, 113), (110, 153, 132), (98, 150, 121), (87, 147, 111),
+ (83, 142, 99), (79, 138, 88), (73, 135, 72), (77, 137, 68),
+ (121, 149, 61), (143, 143, 47), (165, 137, 34), (169, 129, 29),
+ (173, 121, 25), (170, 108, 25), (170, 92, 30), (167, 83, 45),
+ (162, 79, 58), (138, 66, 66), (119, 62, 64), (100, 59, 63),
+ (92, 64, 67), (85, 69, 72), (83, 75, 72), (86, 90, 67),
+ (117, 124, 33), (134, 139, 31), (151, 154, 29), (156, 156, 32),
+ (161, 159, 35), (175, 165, 47), (195, 169, 65), (213, 175, 84),
+ (232, 181, 104), (248, 179, 127), (248, 177, 131), (249, 175, 135),
+ (252, 172, 138), (253, 172, 141), (249, 169, 143), (247, 170, 143),
+ (243, 163, 142), (240, 154, 143), (238, 145, 144), (238, 138, 150),
+ (239, 132, 157), (238, 120, 177), (239, 107, 192), (235, 97, 199),
+ (232, 95, 205), (217, 100, 212), (211, 101, 211), (206, 102, 211),
+ (187, 99, 194), (164, 94, 176), (136, 89, 153), (112, 93, 129),
+ (76, 110, 87), (66, 109, 68), (57, 109, 49), (56, 106, 41),
+ (56, 103, 33), (64, 107, 25), (82, 124, 26), (101, 143, 34),
+ (122, 168, 55), (146, 188, 98), (147, 188, 106), (149, 189, 115),
+ (137, 186, 124), (123, 186, 132), (108, 180, 126), (98, 173, 126),
+ (83, 145, 102), (79, 142, 95), (75, 140, 88), (69, 133, 60),
+ (71, 134, 45), (92, 131, 31), (119, 133, 22), (148, 143, 22),
+ (171, 149, 17), (199, 164, 21), (206, 167, 24), (214, 171, 27),
+ (226, 179, 38), (233, 184, 48), (234, 184, 52), (232, 183, 54),
+ (239, 183, 56), (240, 184, 61), (241, 185, 66), (238, 186, 74),
+ (234, 186, 88), (236, 188, 98), (241, 186, 110), (247, 185, 123),
+ (248, 184, 133), (245, 181, 150), (244, 182, 164), (241, 185, 178),
+ (237, 187, 190), (224, 186, 193), (208, 180, 199), (195, 168, 197),
+ (153, 154, 192), (142, 153, 188), (131, 153, 185), (111, 150, 183),
+ (113, 142, 174), (111, 131, 179), (118, 125, 178), (129, 124, 186),
+ (135, 130, 196), (159, 142, 197), (181, 154, 207), (205, 166, 208),
+ (228, 170, 214), (240, 173, 218), (251, 170, 209), (254, 174, 196),
+ (254, 182, 171), (254, 185, 145), (239, 180, 138), (226, 166, 125),
+ (220, 160, 110), (219, 160, 89), (233, 169, 53), (230, 173, 42),
+ (224, 173, 37), (219, 176, 40), (219, 180, 43), (233, 189, 30),
+ (244, 195, 23), (248, 197, 17), (242, 196, 21), (233, 195, 29),
+ (227, 191, 45), (228, 177, 65), (231, 158, 78), (229, 143, 92),
+ (211, 137, 98), (189, 138, 106), (177, 139, 118), (181, 131, 124),
+ (197, 118, 128), (198, 116, 123), (187, 124, 115), (170, 139, 111),
+ (158, 153, 108), (160, 157, 103), (166, 160, 95), (173, 167, 92),
+ (177, 172, 103), (175, 177, 115), (170, 178, 121), (165, 165, 113),
+ (152, 150, 94), (140, 134, 81), (131, 129, 81), (120, 131, 79),
+ (111, 134, 71), (95, 129, 57), (79, 117, 38), (71, 113, 34),
+ (77, 112, 37), (95, 122, 43), (111, 129, 62), (122, 135, 82),
+ (126, 146, 108), (134, 147, 131), (145, 139, 147), (150, 129, 156),
+ (154, 117, 158), (150, 116, 162), (141, 121, 159), (130, 121, 157)
+ ),
+
+// 546 Elements
+((191, 131, 50), (184, 126, 50), (178, 119, 45), (172, 113, 40),
+ (170, 111, 37), (168, 109, 35), (167, 108, 35), (167, 107, 35),
+ (169, 108, 39), (163, 115, 50), (158, 122, 62), (144, 131, 78),
+ (131, 140, 94), (122, 136, 95), (113, 133, 97), (102, 128, 95),
+ (91, 124, 94), (49, 100, 86), (36, 86, 75), (23, 72, 64),
+ (16, 58, 52), (9, 44, 41), (7, 42, 38), (5, 40, 35),
+ (8, 46, 36), (6, 53, 44), (5, 61, 52), (4, 74, 60),
+ (4, 87, 69), (5, 90, 73), (6, 94, 77), (9, 98, 83),
+ (10, 100, 88), (15, 120, 104), (24, 132, 117), (34, 145, 131),
+ (53, 152, 136), (72, 160, 141), (84, 162, 138), (96, 165, 135),
+ (138, 173, 124), (139, 186, 142), (141, 199, 161), (145, 201, 162),
+ (149, 204, 163), (153, 199, 155), (158, 195, 147), (135, 190, 153),
+ (115, 180, 153), (104, 166, 142), (112, 158, 124), (120, 150, 106),
+ (121, 131, 83), (122, 113, 61), (126, 104, 49), (130, 96, 37),
+ (145, 82, 9), (140, 77, 6), (135, 72, 4), (127, 66, 3),
+ (119, 61, 2), (115, 57, 1), (111, 53, 1), (102, 45, 0),
+ (94, 39, 0), (85, 33, 0), (84, 32, 0), (83, 31, 0),
+ (82, 31, 0), (82, 31, 0), (81, 32, 0), (83, 34, 0),
+ (90, 42, 0), (95, 45, 0), (101, 48, 0), (106, 52, 0),
+ (111, 56, 1), (113, 57, 1), (115, 58, 1), (117, 59, 0),
+ (118, 58, 0), (114, 54, 1), (103, 51, 1), (93, 49, 1),
+ (86, 48, 3), (79, 48, 5), (65, 47, 12), (54, 43, 15),
+ (47, 32, 13), (49, 34, 14), (51, 37, 15), (52, 39, 15),
+ (54, 42, 16), (64, 45, 17), (77, 45, 13), (89, 43, 6),
+ (99, 43, 3), (102, 44, 0), (99, 42, 0), (96, 40, 1),
+ (92, 37, 1), (88, 35, 1), (81, 29, 1), (72, 22, 1),
+ (61, 13, 1), (60, 11, 1), (59, 10, 1), (59, 11, 1),
+ (60, 12, 1), (64, 15, 0), (69, 19, 0), (76, 25, 1),
+ (84, 30, 2), (100, 43, 7), (103, 46, 7), (107, 49, 8),
+ (113, 55, 7), (117, 59, 6), (120, 61, 6), (124, 65, 9),
+ (134, 74, 15), (141, 81, 18), (148, 88, 22), (152, 92, 26),
+ (157, 97, 30), (167, 106, 40), (178, 117, 50), (186, 125, 57),
+ (190, 128, 58), (188, 123, 52), (186, 121, 51), (185, 120, 50),
+ (180, 116, 47), (174, 109, 40), (164, 100, 29), (155, 91, 19),
+ (143, 82, 13), (143, 81, 15), (143, 81, 17), (144, 81, 18),
+ (145, 82, 19), (145, 84, 19), (146, 87, 20), (151, 90, 23),
+ (157, 94, 26), (165, 99, 30), (166, 101, 31), (168, 103, 32),
+ (171, 107, 35), (180, 112, 36), (187, 119, 40), (193, 124, 44),
+ (199, 132, 55), (200, 133, 55), (201, 134, 56), (202, 135, 56),
+ (203, 134, 55), (201, 133, 56), (196, 129, 55), (188, 124, 51),
+ (177, 115, 47), (152, 90, 34), (145, 82, 31), (139, 75, 29),
+ (123, 62, 22), (106, 50, 18), (88, 39, 12), (70, 27, 7),
+ (45, 7, 1), (42, 4, 0), (39, 2, 0), (35, 2, 0),
+ (35, 3, 0), (36, 5, 0), (38, 7, 1), (41, 12, 4),
+ (40, 19, 13), (42, 32, 26), (42, 53, 42), (46, 75, 60),
+ (52, 97, 78), (53, 114, 99), (53, 125, 118), (60, 132, 123),
+ (85, 144, 114), (92, 143, 109), (100, 143, 105), (102, 136, 102),
+ (107, 119, 88), (114, 101, 66), (119, 85, 41), (126, 73, 20),
+ (124, 67, 11), (119, 64, 8), (115, 61, 6), (114, 57, 4),
+ (112, 55, 3), (109, 52, 1), (107, 50, 1), (104, 48, 1),
+ (101, 43, 2), (98, 38, 2), (93, 33, 1), (86, 27, 1),
+ (79, 23, 0), (72, 19, 0), (68, 16, 0), (66, 14, 0),
+ (63, 13, 0), (61, 12, 0), (58, 10, 0), (55, 9, 0),
+ (56, 9, 0), (56, 11, 0), (57, 15, 3), (53, 20, 6),
+ (46, 24, 9), (39, 31, 13), (34, 37, 17), (34, 46, 24),
+ (41, 55, 29), (46, 57, 29), (52, 60, 28), (59, 62, 23),
+ (61, 65, 23), (75, 67, 24), (90, 66, 20), (104, 64, 16),
+ (119, 62, 8), (124, 63, 4), (127, 66, 3), (129, 68, 4),
+ (128, 70, 5), (127, 70, 7), (124, 68, 7), (115, 72, 12),
+ (103, 79, 22), (87, 86, 32), (74, 90, 42), (69, 79, 40),
+ (66, 70, 37), (64, 63, 37), (59, 62, 35), (54, 65, 41),
+ (56, 60, 37), (64, 50, 30), (77, 42, 22), (92, 41, 13),
+ (106, 46, 13), (119, 58, 15), (132, 70, 19), (145, 83, 25),
+ (154, 94, 33), (164, 104, 38), (175, 115, 44), (183, 123, 48)
+ ),
+
+// 547 Embers
+((180, 74, 13), (214, 89, 4), (209, 92, 3), (205, 95, 2),
+ (187, 87, 2), (169, 80, 2), (157, 73, 1), (145, 67, 1),
+ (112, 46, 0), (109, 41, 1), (106, 36, 2), (103, 36, 5),
+ (101, 37, 9), (100, 41, 16), (99, 46, 24), (101, 51, 32),
+ (103, 56, 40), (102, 84, 67), (105, 96, 79), (109, 108, 91),
+ (116, 116, 98), (124, 124, 105), (120, 122, 102), (116, 120, 99),
+ (94, 100, 73), (85, 88, 64), (76, 76, 56), (74, 62, 44),
+ (72, 48, 33), (78, 44, 29), (84, 40, 26), (94, 37, 22),
+ (101, 37, 17), (115, 32, 19), (110, 35, 19), (106, 38, 20),
+ (97, 39, 28), (88, 41, 37), (80, 40, 40), (73, 39, 44),
+ (60, 43, 57), (57, 41, 59), (55, 40, 62), (55, 41, 61),
+ (56, 42, 61), (60, 45, 62), (64, 48, 64), (67, 53, 67),
+ (70, 58, 71), (72, 68, 73), (69, 67, 70), (66, 67, 68),
+ (61, 62, 59), (57, 58, 50), (53, 56, 45), (50, 55, 41),
+ (39, 35, 28), (35, 31, 24), (32, 28, 20), (30, 24, 21),
+ (28, 20, 22), (27, 19, 22), (26, 18, 23), (24, 16, 23),
+ (22, 16, 22), (25, 15, 19), (28, 15, 18), (31, 15, 18),
+ (31, 16, 19), (32, 17, 20), (35, 20, 21), (40, 21, 23),
+ (38, 25, 36), (37, 26, 37), (36, 27, 39), (34, 27, 41),
+ (33, 27, 43), (31, 26, 41), (30, 25, 40), (27, 23, 35),
+ (26, 20, 29), (22, 16, 23), (22, 16, 19), (22, 17, 16),
+ (25, 17, 14), (28, 18, 12), (36, 20, 11), (41, 21, 9),
+ (53, 27, 5), (57, 27, 5), (62, 28, 5), (62, 27, 6),
+ (63, 27, 8), (64, 29, 10), (59, 33, 13), (60, 39, 18),
+ (61, 47, 24), (64, 59, 26), (62, 63, 26), (60, 68, 26),
+ (60, 68, 25), (61, 68, 25), (64, 64, 22), (72, 58, 17),
+ (87, 47, 8), (105, 44, 7), (124, 41, 7), (131, 42, 5),
+ (139, 44, 3), (151, 44, 2), (159, 46, 0), (166, 48, 0),
+ (169, 51, 0), (161, 49, 1), (157, 47, 1), (153, 46, 1),
+ (149, 40, 0), (145, 36, 3), (143, 33, 7), (137, 31, 12),
+ (109, 25, 29), (99, 26, 34), (90, 27, 40), (81, 27, 40),
+ (73, 27, 41), (54, 25, 45), (38, 23, 44), (33, 21, 41),
+ (30, 20, 34), (29, 16, 23), (32, 16, 21), (35, 17, 20),
+ (54, 24, 15), (67, 33, 15), (81, 48, 29), (89, 65, 46),
+ (123, 96, 61), (126, 109, 77), (130, 122, 93), (130, 126, 101),
+ (131, 131, 110), (135, 123, 97), (139, 108, 85), (140, 91, 65),
+ (138, 79, 58), (154, 55, 27), (158, 48, 18), (162, 42, 10),
+ (165, 35, 7), (165, 35, 1), (162, 33, 2), (158, 31, 0),
+ (135, 26, 4), (126, 24, 6), (117, 23, 8), (100, 22, 11),
+ (86, 21, 22), (74, 23, 27), (68, 23, 30), (69, 27, 31),
+ (77, 33, 38), (92, 56, 59), (97, 64, 62), (102, 72, 66),
+ (115, 87, 72), (126, 94, 79), (130, 106, 92), (129, 116, 103),
+ (118, 114, 102), (112, 108, 98), (106, 102, 95), (95, 86, 89),
+ (81, 73, 76), (67, 59, 65), (53, 46, 52), (43, 34, 44),
+ (36, 28, 32), (34, 26, 23), (34, 26, 16), (36, 24, 12),
+ (39, 23, 8), (41, 24, 6), (41, 25, 6), (38, 23, 8),
+ (33, 14, 9), (31, 13, 11), (29, 13, 13), (25, 14, 18),
+ (25, 15, 25), (28, 16, 30), (35, 18, 31), (42, 21, 29),
+ (54, 23, 29), (65, 29, 29), (77, 30, 25), (82, 31, 19),
+ (84, 28, 16), (79, 28, 12), (76, 26, 10), (67, 24, 8),
+ (56, 20, 12), (43, 17, 14), (34, 15, 16), (28, 14, 16),
+ (26, 14, 14), (25, 13, 12), (24, 15, 10), (23, 16, 11),
+ (22, 14, 9), (24, 13, 10), (23, 14, 9), (20, 15, 11),
+ (16, 13, 13), (16, 12, 17), (17, 12, 18), (22, 13, 18),
+ (33, 17, 16), (45, 23, 12), (59, 32, 14), (74, 43, 15),
+ (90, 57, 18), (104, 74, 27), (113, 88, 44), (117, 93, 47),
+ (117, 95, 40), (116, 93, 38), (110, 89, 46), (99, 82, 46),
+ (88, 78, 36), (84, 77, 27), (92, 81, 36), (95, 87, 48),
+ (98, 96, 61), (98, 107, 68), (112, 113, 80), (132, 112, 82),
+ (154, 109, 77), (168, 110, 68), (181, 105, 61), (194, 96, 48),
+ (204, 82, 31), (208, 81, 23), (213, 76, 19), (209, 72, 19),
+ (201, 62, 12), (185, 61, 12), (174, 58, 10), (158, 54, 13),
+ (138, 50, 15), (118, 46, 17), (107, 48, 19), (108, 46, 20),
+ (110, 44, 22), (115, 41, 21), (128, 50, 20), (153, 62, 16)
+ ),
+
+// 548 Etomchek-040328-005
+((166, 201, 227), (169, 199, 225), (169, 198, 224), (170, 197, 223),
+ (167, 197, 224), (165, 197, 225), (164, 197, 225), (164, 197, 226),
+ (148, 187, 222), (148, 185, 220), (148, 183, 218), (147, 181, 217),
+ (147, 179, 217), (143, 176, 213), (139, 174, 210), (134, 170, 205),
+ (130, 167, 201), (107, 142, 173), (100, 132, 158), (93, 122, 144),
+ (86, 111, 130), (80, 101, 117), (76, 95, 111), (73, 90, 106),
+ (56, 75, 92), (49, 69, 87), (43, 63, 83), (45, 63, 81),
+ (47, 64, 80), (50, 66, 82), (54, 68, 84), (61, 76, 92),
+ (70, 87, 102), (86, 111, 131), (92, 122, 147), (98, 133, 164),
+ (109, 148, 178), (120, 163, 193), (128, 171, 200), (136, 179, 208),
+ (167, 205, 228), (177, 213, 232), (188, 221, 237), (190, 224, 241),
+ (193, 227, 245), (193, 227, 244), (193, 228, 243), (193, 226, 240),
+ (191, 221, 235), (181, 208, 221), (173, 195, 206), (166, 182, 192),
+ (153, 167, 176), (141, 152, 161), (134, 144, 153), (127, 137, 145),
+ (96, 106, 113), (80, 91, 101), (64, 76, 89), (50, 64, 81),
+ (36, 53, 74), (31, 49, 71), (26, 45, 69), (20, 41, 68),
+ (18, 40, 69), (21, 46, 78), (22, 50, 85), (24, 55, 93),
+ (25, 57, 98), (27, 60, 103), (27, 61, 105), (27, 61, 105),
+ (28, 61, 103), (26, 58, 98), (25, 55, 94), (27, 58, 96),
+ (29, 61, 99), (31, 63, 101), (33, 65, 104), (39, 70, 107),
+ (46, 75, 111), (70, 93, 120), (82, 100, 123), (94, 108, 126),
+ (100, 115, 132), (107, 122, 138), (120, 136, 155), (129, 148, 168),
+ (139, 165, 194), (143, 171, 201), (147, 177, 209), (147, 177, 210),
+ (147, 177, 211), (146, 176, 211), (143, 174, 210), (138, 169, 205),
+ (128, 160, 195), (97, 127, 163), (80, 110, 145), (64, 93, 127),
+ (57, 85, 118), (51, 78, 110), (40, 65, 96), (33, 56, 86),
+ (24, 50, 82), (24, 50, 82), (25, 50, 82), (27, 51, 83),
+ (29, 53, 84), (33, 59, 90), (38, 66, 96), (45, 75, 101),
+ (52, 88, 113), (64, 114, 146), (66, 119, 153), (69, 125, 161),
+ (75, 135, 175), (80, 144, 189), (83, 148, 201), (86, 152, 206),
+ (88, 156, 205), (85, 154, 204), (83, 153, 203), (82, 152, 202),
+ (81, 151, 201), (79, 149, 202), (75, 145, 204), (70, 137, 202),
+ (68, 131, 199), (66, 124, 193), (66, 123, 191), (66, 122, 190),
+ (71, 124, 190), (77, 128, 192), (87, 137, 198), (96, 144, 204),
+ (111, 157, 213), (114, 158, 213), (118, 160, 214), (118, 160, 212),
+ (118, 160, 211), (118, 158, 209), (119, 159, 209), (120, 161, 212),
+ (123, 164, 216), (124, 170, 220), (123, 170, 219), (122, 170, 219),
+ (120, 170, 218), (118, 169, 217), (117, 170, 216), (117, 173, 217),
+ (128, 182, 225), (130, 184, 226), (132, 186, 228), (133, 186, 228),
+ (130, 184, 225), (127, 178, 220), (122, 172, 213), (116, 166, 205),
+ (115, 162, 200), (116, 156, 193), (115, 154, 190), (115, 152, 188),
+ (109, 145, 182), (101, 135, 175), (88, 121, 163), (71, 102, 145),
+ (42, 71, 113), (37, 66, 106), (33, 61, 99), (28, 53, 87),
+ (25, 46, 76), (24, 43, 71), (22, 40, 64), (19, 34, 54),
+ (15, 27, 44), (12, 24, 41), (11, 23, 42), (10, 22, 42),
+ (10, 22, 42), (9, 22, 41), (9, 22, 41), (9, 22, 41),
+ (8, 17, 32), (10, 19, 35), (12, 22, 39), (18, 30, 51),
+ (28, 46, 70), (37, 61, 89), (49, 76, 107), (63, 94, 124),
+ (78, 108, 134), (89, 116, 135), (103, 125, 140), (117, 134, 146),
+ (133, 149, 158), (148, 165, 173), (163, 180, 191), (178, 198, 209),
+ (192, 215, 226), (199, 226, 236), (205, 232, 244), (208, 236, 248),
+ (210, 237, 249), (206, 233, 248), (199, 227, 247), (191, 221, 247),
+ (182, 216, 244), (170, 208, 240), (157, 198, 238), (144, 190, 235),
+ (133, 183, 231), (121, 174, 227), (110, 165, 222), (100, 156, 218),
+ (92, 149, 213), (86, 143, 207), (79, 135, 201), (72, 128, 197),
+ (68, 125, 194), (65, 122, 194), (63, 123, 195), (62, 123, 197),
+ (63, 124, 199), (67, 127, 200), (70, 129, 199), (74, 130, 195),
+ (78, 130, 189), (80, 127, 184), (81, 129, 182), (82, 129, 183),
+ (81, 129, 184), (82, 130, 185), (83, 132, 187), (86, 135, 189),
+ (90, 137, 188), (93, 135, 183), (96, 134, 177), (99, 135, 174),
+ (100, 134, 173), (102, 134, 173), (102, 136, 177), (104, 141, 182),
+ (107, 148, 189), (112, 153, 195), (117, 157, 197), (121, 161, 200),
+ (126, 164, 201), (138, 172, 206), (147, 179, 210), (157, 187, 215),
+ (161, 194, 221), (165, 200, 226), (170, 204, 228), (172, 206, 230)
+ ),
+
+// 549 Etomchek-040328-006
+((181, 166, 227), (185, 169, 225), (185, 169, 224), (186, 170, 223),
+ (184, 167, 224), (182, 165, 225), (182, 164, 225), (182, 164, 226),
+ (169, 148, 222), (169, 148, 220), (170, 148, 218), (171, 147, 217),
+ (173, 147, 217), (167, 143, 213), (162, 139, 210), (156, 134, 205),
+ (151, 130, 201), (126, 107, 173), (116, 100, 158), (106, 93, 144),
+ (97, 86, 130), (89, 80, 117), (86, 76, 111), (83, 73, 106),
+ (66, 56, 92), (60, 49, 87), (55, 43, 83), (56, 45, 81),
+ (57, 47, 80), (60, 50, 82), (64, 54, 84), (71, 61, 92),
+ (79, 70, 102), (98, 86, 131), (107, 92, 147), (117, 98, 164),
+ (127, 109, 178), (137, 120, 193), (144, 128, 200), (152, 136, 208),
+ (179, 167, 228), (187, 177, 232), (196, 188, 237), (199, 190, 241),
+ (202, 193, 245), (200, 193, 244), (199, 193, 243), (199, 193, 240),
+ (197, 191, 235), (187, 181, 221), (179, 173, 206), (171, 166, 192),
+ (158, 153, 176), (146, 141, 161), (139, 134, 153), (132, 127, 145),
+ (100, 96, 113), (86, 80, 101), (72, 64, 89), (61, 50, 81),
+ (50, 36, 74), (45, 31, 71), (41, 26, 69), (38, 20, 68),
+ (37, 18, 69), (43, 21, 78), (46, 22, 85), (49, 24, 93),
+ (52, 25, 98), (56, 27, 103), (57, 27, 105), (57, 27, 105),
+ (56, 28, 103), (53, 26, 98), (51, 25, 94), (52, 27, 96),
+ (54, 29, 99), (56, 31, 101), (59, 33, 104), (64, 39, 107),
+ (70, 46, 111), (87, 70, 120), (96, 82, 123), (106, 94, 126),
+ (111, 100, 132), (117, 107, 138), (133, 120, 155), (142, 129, 168),
+ (158, 139, 194), (163, 143, 201), (168, 147, 209), (169, 147, 210),
+ (170, 147, 211), (169, 146, 211), (167, 143, 210), (162, 138, 205),
+ (150, 128, 195), (121, 97, 163), (103, 80, 145), (86, 64, 127),
+ (79, 57, 118), (72, 51, 110), (60, 40, 96), (53, 33, 86),
+ (45, 24, 82), (46, 24, 82), (47, 25, 82), (48, 27, 83),
+ (50, 29, 84), (54, 33, 90), (57, 38, 96), (61, 45, 101),
+ (66, 52, 113), (80, 64, 146), (83, 66, 153), (87, 69, 161),
+ (97, 75, 175), (105, 80, 189), (114, 83, 201), (118, 86, 206),
+ (115, 88, 205), (113, 85, 204), (111, 83, 203), (110, 82, 202),
+ (109, 81, 201), (110, 79, 202), (109, 75, 204), (112, 70, 202),
+ (112, 68, 199), (113, 66, 193), (112, 66, 191), (111, 66, 190),
+ (115, 71, 190), (119, 77, 192), (128, 87, 198), (136, 96, 204),
+ (148, 111, 213), (151, 114, 213), (155, 118, 214), (153, 118, 212),
+ (152, 118, 211), (153, 118, 209), (152, 119, 209), (154, 120, 212),
+ (159, 123, 216), (156, 124, 220), (154, 123, 219), (153, 122, 219),
+ (149, 120, 218), (148, 118, 217), (145, 117, 216), (142, 117, 217),
+ (154, 128, 225), (155, 130, 226), (156, 132, 228), (158, 133, 228),
+ (154, 130, 225), (152, 127, 220), (146, 122, 213), (138, 116, 205),
+ (138, 115, 200), (139, 116, 193), (138, 115, 190), (138, 115, 188),
+ (132, 109, 182), (127, 101, 175), (117, 88, 163), (100, 71, 145),
+ (70, 42, 113), (64, 37, 106), (59, 33, 99), (51, 28, 87),
+ (45, 25, 76), (43, 24, 71), (38, 22, 64), (32, 19, 54),
+ (26, 15, 44), (23, 12, 41), (24, 11, 42), (23, 10, 42),
+ (23, 10, 42), (22, 9, 41), (22, 9, 41), (22, 9, 41),
+ (18, 8, 32), (21, 10, 35), (24, 12, 39), (32, 18, 51),
+ (44, 28, 70), (55, 37, 89), (69, 49, 107), (82, 63, 124),
+ (94, 78, 134), (100, 89, 135), (111, 103, 140), (124, 117, 146),
+ (138, 133, 158), (151, 148, 173), (169, 163, 191), (183, 178, 209),
+ (197, 192, 226), (202, 199, 236), (210, 205, 244), (213, 208, 248),
+ (215, 210, 249), (213, 206, 248), (211, 199, 247), (207, 191, 247),
+ (199, 182, 244), (189, 170, 240), (183, 157, 238), (173, 144, 235),
+ (163, 133, 231), (155, 121, 227), (147, 110, 222), (141, 100, 218),
+ (134, 92, 213), (128, 86, 207), (122, 79, 201), (118, 72, 197),
+ (114, 68, 194), (112, 65, 194), (111, 63, 195), (111, 62, 197),
+ (113, 63, 199), (116, 67, 200), (117, 70, 199), (116, 74, 195),
+ (117, 78, 189), (118, 80, 184), (115, 81, 182), (117, 82, 183),
+ (117, 81, 184), (118, 82, 185), (119, 83, 187), (120, 86, 189),
+ (123, 90, 188), (124, 93, 183), (124, 96, 177), (124, 99, 174),
+ (126, 100, 173), (128, 102, 173), (130, 102, 177), (131, 104, 182),
+ (133, 107, 189), (138, 112, 195), (142, 117, 197), (146, 121, 200),
+ (150, 126, 201), (160, 138, 206), (167, 147, 210), (175, 157, 215),
+ (177, 161, 221), (180, 165, 226), (184, 170, 228), (186, 172, 230)
+ ),
+
+// 550 Etomchek-040328-007
+((219, 166, 227), (220, 169, 225), (219, 169, 224), (219, 170, 223),
+ (219, 167, 224), (219, 165, 225), (219, 164, 225), (220, 164, 226),
+ (215, 148, 222), (214, 148, 220), (214, 148, 218), (215, 147, 217),
+ (216, 147, 217), (211, 143, 213), (206, 139, 210), (200, 134, 205),
+ (195, 130, 201), (167, 107, 173), (152, 100, 158), (137, 93, 144),
+ (124, 86, 130), (112, 80, 117), (107, 76, 111), (103, 73, 106),
+ (88, 56, 92), (84, 49, 87), (80, 43, 83), (78, 45, 81),
+ (77, 47, 80), (80, 50, 82), (83, 54, 84), (90, 61, 92),
+ (99, 70, 102), (126, 86, 131), (142, 92, 147), (158, 98, 164),
+ (170, 109, 178), (182, 120, 193), (189, 128, 200), (196, 136, 208),
+ (217, 167, 228), (221, 177, 232), (226, 188, 237), (230, 190, 241),
+ (234, 193, 245), (232, 193, 244), (230, 193, 243), (228, 193, 240),
+ (224, 191, 235), (212, 181, 221), (199, 173, 206), (187, 166, 192),
+ (173, 153, 176), (159, 141, 161), (151, 134, 153), (143, 127, 145),
+ (110, 96, 113), (99, 80, 101), (88, 64, 89), (80, 50, 81),
+ (73, 36, 74), (70, 31, 71), (68, 26, 69), (68, 20, 68),
+ (69, 18, 69), (78, 21, 78), (85, 22, 85), (92, 24, 93),
+ (97, 25, 98), (103, 27, 103), (105, 27, 105), (105, 27, 105),
+ (103, 28, 103), (98, 26, 98), (94, 25, 94), (96, 27, 96),
+ (98, 29, 99), (100, 31, 101), (103, 33, 104), (106, 39, 107),
+ (110, 46, 111), (118, 70, 120), (122, 82, 123), (126, 94, 126),
+ (131, 100, 132), (136, 107, 138), (155, 120, 155), (166, 129, 168),
+ (192, 139, 194), (199, 143, 201), (206, 147, 209), (207, 147, 210),
+ (209, 147, 211), (209, 146, 211), (208, 143, 210), (203, 138, 205),
+ (192, 128, 195), (162, 97, 163), (143, 80, 145), (125, 64, 127),
+ (117, 57, 118), (109, 51, 110), (95, 40, 96), (86, 33, 86),
+ (81, 24, 82), (81, 24, 82), (82, 25, 82), (83, 27, 83),
+ (84, 29, 84), (89, 33, 90), (93, 38, 96), (95, 45, 101),
+ (104, 52, 113), (131, 64, 146), (137, 66, 153), (144, 69, 161),
+ (158, 75, 175), (173, 80, 189), (187, 83, 201), (192, 86, 206),
+ (188, 88, 205), (186, 85, 204), (185, 83, 203), (184, 82, 202),
+ (183, 81, 201), (186, 79, 202), (189, 75, 204), (193, 70, 202),
+ (193, 68, 199), (191, 66, 193), (189, 66, 191), (188, 66, 190),
+ (188, 71, 190), (190, 77, 192), (196, 87, 198), (202, 96, 204),
+ (212, 111, 213), (213, 114, 213), (214, 118, 214), (212, 118, 212),
+ (210, 118, 211), (209, 118, 209), (208, 119, 209), (211, 120, 212),
+ (216, 123, 216), (216, 124, 220), (214, 123, 219), (213, 122, 219),
+ (210, 120, 218), (209, 118, 217), (206, 117, 216), (204, 117, 217),
+ (214, 128, 225), (215, 130, 226), (216, 132, 228), (217, 133, 228),
+ (213, 130, 225), (209, 127, 220), (203, 122, 213), (193, 116, 205),
+ (190, 115, 200), (187, 116, 193), (185, 115, 190), (183, 115, 188),
+ (177, 109, 182), (173, 101, 175), (163, 88, 163), (145, 71, 144),
+ (113, 42, 112), (106, 37, 105), (99, 33, 98), (87, 28, 86),
+ (76, 25, 75), (71, 24, 69), (64, 22, 64), (54, 19, 54),
+ (44, 15, 43), (41, 12, 40), (42, 11, 40), (42, 10, 40),
+ (42, 10, 40), (41, 9, 40), (41, 9, 40), (41, 9, 40),
+ (32, 8, 30), (35, 10, 33), (39, 12, 37), (51, 18, 48),
+ (70, 28, 70), (87, 37, 89), (105, 49, 107), (120, 63, 124),
+ (128, 78, 134), (128, 89, 135), (134, 103, 140), (142, 117, 146),
+ (153, 133, 158), (167, 148, 173), (187, 163, 191), (203, 178, 209),
+ (218, 192, 226), (225, 199, 236), (234, 205, 244), (238, 208, 248),
+ (239, 210, 249), (239, 206, 248), (240, 199, 247), (242, 191, 247),
+ (237, 182, 244), (232, 170, 240), (233, 157, 238), (229, 144, 235),
+ (223, 133, 231), (220, 121, 227), (217, 110, 222), (214, 100, 218),
+ (209, 92, 213), (203, 86, 207), (197, 79, 201), (195, 72, 197),
+ (192, 68, 194), (192, 65, 194), (193, 63, 195), (195, 62, 197),
+ (197, 63, 199), (198, 67, 200), (197, 70, 199), (191, 74, 195),
+ (186, 78, 189), (182, 80, 184), (177, 81, 182), (180, 82, 183),
+ (181, 81, 184), (182, 82, 185), (184, 83, 187), (184, 86, 189),
+ (183, 90, 188), (180, 93, 183), (174, 96, 177), (170, 99, 174),
+ (171, 100, 173), (172, 102, 173), (176, 102, 177), (180, 104, 182),
+ (184, 107, 189), (190, 112, 195), (192, 117, 197), (195, 121, 200),
+ (196, 126, 201), (202, 138, 206), (206, 147, 210), (210, 157, 215),
+ (214, 161, 221), (218, 165, 226), (220, 170, 228), (222, 172, 230)
+ ),
+
+// 551 Etomchek-040328-008
+((227, 166, 191), (225, 169, 188), (224, 169, 188), (223, 170, 189),
+ (224, 167, 188), (225, 165, 187), (225, 164, 187), (226, 164, 187),
+ (222, 148, 175), (220, 148, 172), (218, 148, 170), (217, 147, 168),
+ (217, 147, 167), (213, 143, 164), (210, 139, 162), (205, 134, 158),
+ (201, 130, 155), (173, 107, 130), (158, 100, 121), (144, 93, 113),
+ (130, 86, 104), (117, 80, 95), (111, 76, 89), (106, 73, 84),
+ (92, 56, 70), (87, 49, 63), (83, 43, 56), (81, 45, 57),
+ (80, 47, 58), (82, 50, 60), (84, 54, 63), (92, 61, 71),
+ (102, 70, 82), (131, 86, 103), (147, 92, 112), (164, 98, 121),
+ (178, 109, 136), (193, 120, 151), (200, 128, 159), (208, 136, 167),
+ (228, 167, 195), (232, 177, 203), (237, 188, 211), (241, 190, 214),
+ (245, 193, 218), (244, 193, 219), (243, 193, 220), (240, 193, 217),
+ (235, 191, 214), (221, 181, 201), (206, 173, 189), (192, 166, 178),
+ (176, 153, 163), (161, 141, 148), (153, 134, 141), (145, 127, 134),
+ (113, 96, 104), (101, 80, 87), (89, 64, 71), (81, 50, 59),
+ (74, 36, 47), (71, 31, 42), (69, 26, 38), (68, 20, 32),
+ (69, 18, 31), (78, 21, 36), (85, 22, 39), (93, 24, 43),
+ (98, 25, 45), (103, 27, 47), (105, 27, 47), (105, 27, 47),
+ (103, 28, 48), (98, 26, 45), (94, 25, 43), (96, 27, 46),
+ (99, 29, 49), (101, 31, 51), (104, 33, 53), (107, 39, 58),
+ (111, 46, 64), (120, 70, 85), (123, 82, 93), (126, 94, 102),
+ (132, 100, 109), (138, 107, 117), (155, 120, 129), (168, 129, 141),
+ (194, 139, 156), (201, 143, 161), (209, 147, 167), (210, 147, 166),
+ (211, 147, 166), (211, 146, 166), (210, 143, 163), (205, 138, 158),
+ (195, 128, 149), (163, 97, 116), (145, 80, 99), (127, 64, 83),
+ (118, 57, 75), (110, 51, 67), (96, 40, 56), (86, 33, 47),
+ (82, 24, 40), (82, 24, 40), (82, 25, 40), (83, 27, 41),
+ (84, 29, 43), (90, 33, 49), (96, 38, 56), (101, 45, 65),
+ (113, 52, 77), (146, 64, 101), (153, 66, 105), (161, 69, 110),
+ (175, 75, 118), (189, 80, 125), (201, 83, 128), (206, 86, 132),
+ (205, 88, 137), (204, 85, 135), (203, 83, 133), (202, 82, 132),
+ (201, 81, 131), (202, 79, 128), (204, 75, 124), (202, 70, 114),
+ (199, 68, 109), (193, 66, 102), (191, 66, 101), (190, 66, 101),
+ (190, 71, 105), (192, 77, 110), (198, 87, 118), (204, 96, 127),
+ (213, 111, 140), (213, 114, 142), (214, 118, 144), (212, 118, 144),
+ (211, 118, 144), (209, 118, 142), (209, 119, 145), (212, 120, 146),
+ (216, 123, 148), (220, 124, 153), (219, 123, 153), (219, 122, 154),
+ (218, 120, 154), (217, 118, 153), (216, 117, 153), (217, 117, 157),
+ (225, 128, 165), (226, 130, 168), (228, 132, 171), (228, 133, 170),
+ (225, 130, 168), (220, 127, 163), (213, 122, 157), (205, 116, 152),
+ (200, 115, 148), (193, 116, 143), (190, 115, 141), (188, 115, 139),
+ (182, 109, 133), (175, 101, 123), (163, 88, 108), (145, 71, 89),
+ (113, 42, 59), (106, 37, 54), (99, 33, 49), (87, 28, 42),
+ (76, 25, 37), (71, 24, 33), (64, 22, 33), (54, 19, 28),
+ (44, 15, 21), (41, 12, 18), (42, 11, 17), (42, 10, 16),
+ (42, 10, 16), (41, 9, 16), (41, 9, 16), (41, 9, 16),
+ (32, 8, 12), (35, 10, 14), (39, 12, 17), (51, 18, 24),
+ (70, 28, 39), (89, 37, 52), (107, 49, 66), (124, 63, 83),
+ (134, 78, 98), (135, 89, 108), (140, 103, 119), (146, 117, 129),
+ (158, 133, 145), (173, 148, 161), (191, 163, 175), (209, 178, 193),
+ (226, 192, 209), (236, 199, 220), (244, 205, 225), (248, 208, 229),
+ (249, 210, 230), (248, 206, 227), (247, 199, 219), (247, 191, 210),
+ (244, 182, 206), (240, 170, 197), (238, 157, 184), (235, 144, 175),
+ (231, 133, 167), (227, 121, 156), (222, 110, 146), (218, 100, 135),
+ (213, 92, 128), (207, 86, 122), (201, 79, 116), (197, 72, 107),
+ (194, 68, 104), (194, 65, 101), (195, 63, 100), (197, 62, 100),
+ (199, 63, 101), (200, 67, 105), (199, 70, 106), (195, 74, 110),
+ (189, 78, 111), (184, 80, 109), (182, 81, 113), (183, 82, 112),
+ (184, 81, 112), (185, 82, 113), (187, 83, 114), (189, 86, 119),
+ (188, 90, 121), (183, 93, 120), (177, 96, 120), (174, 99, 123),
+ (173, 100, 122), (173, 102, 122), (177, 102, 123), (182, 104, 127),
+ (189, 107, 134), (195, 112, 140), (197, 117, 144), (200, 121, 147),
+ (201, 126, 151), (206, 138, 161), (210, 147, 168), (215, 157, 177),
+ (221, 161, 184), (226, 165, 190), (228, 170, 192), (230, 172, 194)
+ ),
+
+// 552 Etomchek-040328-009
+((227, 180, 166), (225, 186, 169), (224, 185, 169), (223, 185, 170),
+ (224, 183, 167), (225, 181, 165), (225, 181, 164), (226, 181, 164),
+ (222, 168, 148), (220, 169, 148), (218, 170, 148), (217, 171, 147),
+ (217, 172, 147), (213, 167, 143), (210, 162, 139), (205, 156, 134),
+ (201, 150, 130), (173, 126, 107), (158, 115, 100), (144, 105, 93),
+ (130, 96, 86), (117, 88, 80), (111, 85, 76), (106, 82, 73),
+ (92, 65, 56), (87, 60, 49), (83, 55, 43), (81, 55, 45),
+ (80, 56, 47), (82, 60, 50), (84, 64, 54), (92, 70, 61),
+ (102, 78, 70), (131, 97, 86), (147, 107, 92), (164, 117, 98),
+ (178, 126, 109), (193, 136, 120), (200, 143, 128), (208, 150, 136),
+ (228, 178, 167), (232, 187, 177), (237, 196, 188), (241, 198, 190),
+ (245, 201, 193), (244, 199, 193), (243, 198, 193), (240, 200, 193),
+ (235, 196, 191), (221, 187, 181), (206, 179, 173), (192, 171, 166),
+ (176, 158, 153), (161, 146, 141), (153, 139, 134), (145, 132, 127),
+ (113, 99, 96), (101, 85, 80), (89, 72, 64), (81, 60, 50),
+ (74, 48, 36), (71, 44, 31), (69, 41, 26), (68, 37, 20),
+ (69, 36, 18), (78, 42, 21), (85, 45, 22), (93, 48, 24),
+ (98, 51, 25), (103, 55, 27), (105, 55, 27), (105, 55, 27),
+ (103, 55, 28), (98, 52, 26), (94, 50, 25), (96, 51, 27),
+ (99, 53, 29), (101, 55, 31), (104, 58, 33), (107, 63, 39),
+ (111, 69, 46), (120, 87, 70), (123, 96, 82), (126, 106, 94),
+ (132, 111, 100), (138, 116, 107), (155, 133, 120), (168, 141, 129),
+ (194, 157, 139), (201, 162, 143), (209, 167, 147), (210, 167, 147),
+ (211, 168, 147), (211, 168, 146), (210, 165, 143), (205, 160, 138),
+ (195, 149, 128), (163, 120, 97), (145, 102, 80), (127, 85, 64),
+ (118, 78, 57), (110, 71, 51), (96, 59, 40), (86, 52, 33),
+ (82, 44, 24), (82, 45, 24), (82, 46, 25), (83, 47, 27),
+ (84, 49, 29), (90, 53, 33), (96, 56, 38), (101, 60, 45),
+ (113, 65, 52), (146, 79, 64), (153, 82, 66), (161, 86, 69),
+ (175, 95, 75), (189, 104, 80), (201, 112, 83), (206, 116, 86),
+ (205, 113, 88), (204, 111, 85), (203, 109, 83), (202, 108, 82),
+ (201, 107, 81), (202, 108, 79), (204, 107, 75), (202, 110, 70),
+ (199, 109, 68), (193, 110, 66), (191, 109, 66), (190, 109, 66),
+ (190, 113, 71), (192, 117, 77), (198, 126, 87), (204, 134, 96),
+ (213, 147, 111), (213, 150, 114), (214, 153, 118), (212, 152, 118),
+ (211, 151, 118), (209, 151, 118), (209, 151, 119), (212, 152, 120),
+ (216, 157, 123), (220, 156, 124), (219, 153, 123), (219, 151, 122),
+ (218, 148, 120), (217, 146, 118), (216, 143, 117), (217, 140, 117),
+ (225, 152, 128), (226, 153, 130), (228, 155, 132), (228, 157, 133),
+ (225, 152, 130), (220, 150, 127), (213, 145, 122), (205, 137, 116),
+ (200, 136, 115), (193, 138, 116), (190, 137, 115), (188, 137, 115),
+ (182, 131, 109), (175, 126, 101), (163, 115, 88), (145, 99, 71),
+ (113, 69, 42), (106, 63, 37), (99, 58, 33), (87, 50, 28),
+ (76, 44, 25), (71, 44, 24), (64, 37, 22), (54, 31, 19),
+ (44, 26, 15), (41, 23, 12), (42, 24, 11), (42, 23, 10),
+ (42, 23, 10), (41, 21, 9), (41, 21, 9), (41, 21, 9),
+ (32, 18, 8), (35, 20, 10), (39, 23, 12), (51, 32, 18),
+ (70, 43, 28), (89, 54, 37), (107, 68, 49), (124, 81, 63),
+ (134, 93, 78), (135, 99, 89), (140, 110, 103), (146, 124, 117),
+ (158, 137, 133), (173, 151, 148), (191, 169, 163), (209, 183, 178),
+ (226, 197, 192), (236, 202, 199), (244, 211, 205), (248, 213, 208),
+ (249, 216, 210), (248, 213, 206), (247, 210, 199), (247, 208, 191),
+ (244, 198, 182), (240, 188, 170), (238, 182, 157), (235, 171, 144),
+ (231, 161, 133), (227, 153, 121), (222, 146, 110), (218, 139, 100),
+ (213, 132, 92), (207, 126, 86), (201, 120, 79), (197, 116, 72),
+ (194, 112, 68), (194, 110, 65), (195, 109, 63), (197, 109, 62),
+ (199, 111, 63), (200, 113, 67), (199, 115, 70), (195, 114, 74),
+ (189, 115, 78), (184, 116, 80), (182, 113, 81), (183, 116, 82),
+ (184, 115, 81), (185, 116, 82), (187, 118, 83), (189, 119, 86),
+ (188, 121, 90), (183, 123, 93), (177, 123, 96), (174, 123, 99),
+ (173, 124, 100), (173, 127, 102), (177, 128, 102), (182, 130, 104),
+ (189, 132, 107), (195, 137, 112), (197, 141, 117), (200, 145, 121),
+ (201, 149, 126), (206, 159, 138), (210, 166, 147), (215, 174, 157),
+ (221, 176, 161), (226, 179, 165), (228, 185, 170), (230, 187, 172)
+ ),
+
+// 553 Etomchek-040328-010
+((205, 227, 166), (201, 225, 169), (201, 224, 169), (201, 223, 170),
+ (201, 224, 167), (201, 225, 165), (201, 225, 164), (201, 226, 164),
+ (193, 222, 148), (190, 220, 148), (187, 218, 148), (185, 217, 147),
+ (183, 217, 147), (180, 213, 143), (178, 210, 139), (175, 205, 134),
+ (172, 201, 130), (146, 173, 107), (135, 158, 100), (125, 144, 93),
+ (114, 130, 86), (103, 117, 80), (97, 111, 76), (92, 106, 73),
+ (78, 92, 56), (71, 87, 49), (65, 83, 43), (65, 81, 45),
+ (66, 80, 47), (68, 82, 50), (70, 84, 54), (78, 92, 61),
+ (89, 102, 70), (114, 131, 86), (125, 147, 92), (137, 164, 98),
+ (152, 178, 109), (168, 193, 120), (176, 200, 128), (184, 208, 136),
+ (209, 228, 167), (216, 232, 177), (223, 237, 188), (227, 241, 190),
+ (231, 245, 193), (231, 244, 193), (232, 243, 193), (228, 240, 193),
+ (224, 235, 191), (211, 221, 181), (197, 206, 173), (184, 192, 166),
+ (168, 176, 153), (153, 161, 141), (145, 153, 134), (138, 145, 127),
+ (108, 113, 96), (92, 101, 80), (77, 89, 64), (66, 81, 50),
+ (56, 74, 36), (52, 71, 31), (48, 69, 26), (44, 68, 20),
+ (43, 69, 18), (49, 78, 21), (54, 85, 22), (59, 93, 24),
+ (62, 98, 25), (65, 103, 27), (66, 105, 27), (66, 105, 27),
+ (65, 103, 28), (62, 98, 26), (59, 94, 25), (62, 96, 27),
+ (65, 99, 29), (67, 101, 31), (69, 104, 33), (74, 107, 39),
+ (79, 111, 46), (97, 120, 70), (103, 123, 82), (110, 126, 94),
+ (117, 132, 100), (125, 138, 107), (138, 155, 120), (151, 168, 129),
+ (168, 194, 139), (174, 201, 143), (181, 209, 147), (181, 210, 147),
+ (181, 211, 147), (181, 211, 146), (179, 210, 143), (174, 205, 138),
+ (165, 195, 128), (131, 163, 97), (114, 145, 80), (97, 127, 64),
+ (89, 118, 57), (81, 110, 51), (69, 96, 40), (59, 86, 33),
+ (54, 82, 24), (53, 82, 24), (53, 82, 25), (54, 83, 27),
+ (56, 84, 29), (62, 90, 33), (70, 96, 38), (78, 101, 45),
+ (92, 113, 52), (120, 146, 64), (126, 153, 66), (132, 161, 69),
+ (142, 175, 75), (151, 189, 80), (156, 201, 83), (160, 206, 86),
+ (164, 205, 88), (162, 204, 85), (161, 203, 83), (160, 202, 82),
+ (159, 201, 81), (157, 202, 79), (155, 204, 75), (145, 202, 70),
+ (140, 199, 68), (132, 193, 66), (131, 191, 66), (130, 190, 66),
+ (133, 190, 71), (136, 192, 77), (144, 198, 87), (152, 204, 96),
+ (164, 213, 111), (165, 213, 114), (166, 214, 118), (166, 212, 118),
+ (166, 211, 118), (164, 209, 118), (166, 209, 119), (168, 212, 120),
+ (170, 216, 123), (175, 220, 124), (176, 219, 123), (177, 219, 122),
+ (177, 218, 120), (176, 217, 118), (177, 216, 117), (181, 217, 117),
+ (188, 225, 128), (190, 226, 130), (193, 228, 132), (192, 228, 133),
+ (190, 225, 130), (185, 220, 127), (178, 213, 122), (173, 205, 116),
+ (168, 200, 115), (161, 193, 116), (158, 190, 115), (156, 188, 115),
+ (150, 182, 109), (141, 175, 101), (125, 163, 88), (107, 145, 71),
+ (76, 113, 42), (70, 106, 37), (65, 99, 33), (56, 87, 28),
+ (49, 76, 25), (44, 71, 24), (43, 64, 22), (36, 54, 19),
+ (28, 44, 15), (25, 41, 12), (24, 42, 11), (23, 42, 10),
+ (23, 42, 10), (24, 41, 9), (24, 41, 9), (24, 41, 9),
+ (18, 32, 8), (20, 35, 10), (23, 39, 12), (31, 51, 18),
+ (49, 70, 28), (64, 89, 37), (80, 107, 49), (97, 124, 63),
+ (112, 134, 78), (119, 135, 89), (128, 140, 103), (135, 146, 117),
+ (151, 158, 133), (166, 173, 148), (181, 191, 163), (200, 209, 178),
+ (217, 226, 192), (229, 236, 199), (234, 244, 205), (238, 248, 208),
+ (239, 249, 210), (237, 248, 206), (231, 247, 199), (223, 247, 191),
+ (221, 244, 182), (214, 240, 170), (203, 238, 157), (196, 235, 144),
+ (190, 231, 133), (181, 227, 121), (172, 222, 110), (163, 218, 100),
+ (157, 213, 92), (151, 207, 86), (144, 201, 79), (137, 197, 72),
+ (133, 194, 68), (132, 194, 65), (131, 195, 63), (132, 197, 62),
+ (133, 199, 63), (136, 200, 67), (137, 199, 70), (139, 195, 74),
+ (137, 189, 78), (134, 184, 80), (137, 182, 81), (136, 183, 82),
+ (136, 184, 81), (137, 185, 82), (139, 187, 83), (143, 189, 86),
+ (144, 188, 90), (141, 183, 93), (139, 177, 96), (140, 174, 99),
+ (139, 173, 100), (139, 173, 102), (141, 177, 102), (146, 182, 104),
+ (154, 189, 107), (159, 195, 112), (162, 197, 117), (166, 200, 121),
+ (169, 201, 126), (177, 206, 138), (183, 210, 147), (191, 215, 157),
+ (198, 221, 161), (204, 226, 165), (206, 228, 170), (208, 230, 172)
+ ),
+
+// 554 Etomchek-040328-011
+((166, 227, 182), (169, 225, 188), (169, 224, 187), (170, 223, 187),
+ (167, 224, 185), (165, 225, 183), (164, 225, 183), (164, 226, 183),
+ (148, 222, 170), (148, 220, 171), (148, 218, 173), (147, 217, 173),
+ (147, 217, 174), (143, 213, 169), (139, 210, 164), (134, 205, 158),
+ (130, 201, 153), (107, 173, 128), (100, 158, 117), (93, 144, 107),
+ (86, 130, 98), (80, 117, 90), (76, 111, 86), (73, 106, 83),
+ (56, 92, 66), (49, 87, 61), (43, 83, 56), (45, 81, 56),
+ (47, 80, 57), (50, 82, 61), (54, 84, 65), (61, 92, 71),
+ (70, 102, 79), (86, 131, 99), (92, 147, 109), (98, 164, 119),
+ (109, 178, 128), (120, 193, 138), (128, 200, 145), (136, 208, 153),
+ (167, 228, 180), (177, 232, 189), (188, 237, 198), (190, 241, 200),
+ (193, 245, 203), (193, 244, 201), (193, 243, 200), (193, 240, 201),
+ (191, 235, 198), (181, 221, 188), (173, 206, 179), (166, 192, 171),
+ (153, 176, 159), (141, 161, 147), (134, 153, 139), (127, 145, 132),
+ (96, 113, 100), (80, 101, 86), (64, 89, 73), (50, 81, 61),
+ (36, 74, 50), (31, 71, 46), (26, 69, 42), (20, 68, 39),
+ (18, 69, 38), (21, 78, 43), (22, 85, 46), (24, 93, 50),
+ (25, 98, 53), (27, 103, 57), (27, 105, 58), (27, 105, 58),
+ (28, 103, 58), (26, 98, 55), (25, 94, 52), (27, 96, 54),
+ (29, 99, 56), (31, 101, 58), (33, 104, 60), (39, 107, 65),
+ (46, 111, 71), (70, 120, 88), (82, 123, 97), (94, 126, 107),
+ (100, 132, 112), (107, 138, 117), (120, 155, 134), (129, 168, 143),
+ (139, 194, 159), (143, 201, 164), (147, 209, 169), (147, 210, 170),
+ (147, 211, 171), (146, 211, 170), (143, 210, 168), (138, 205, 163),
+ (128, 195, 152), (97, 163, 122), (80, 145, 104), (64, 127, 87),
+ (57, 118, 80), (51, 110, 73), (40, 96, 61), (33, 86, 54),
+ (24, 82, 46), (24, 82, 46), (25, 82, 47), (27, 83, 49),
+ (29, 84, 51), (33, 90, 55), (38, 96, 58), (45, 101, 62),
+ (52, 113, 67), (64, 146, 82), (66, 153, 85), (69, 161, 89),
+ (75, 175, 98), (80, 189, 107), (83, 201, 116), (86, 206, 120),
+ (88, 205, 117), (85, 204, 115), (83, 203, 113), (82, 202, 112),
+ (81, 201, 111), (79, 202, 112), (75, 204, 111), (70, 202, 114),
+ (68, 199, 114), (66, 193, 115), (66, 191, 114), (66, 190, 113),
+ (71, 190, 117), (77, 192, 121), (87, 198, 130), (96, 204, 137),
+ (111, 213, 150), (114, 213, 153), (118, 214, 157), (118, 212, 155),
+ (118, 211, 154), (118, 209, 155), (119, 209, 154), (120, 212, 155),
+ (123, 216, 160), (124, 220, 159), (123, 219, 156), (122, 219, 154),
+ (120, 218, 151), (118, 217, 149), (117, 216, 147), (117, 217, 144),
+ (128, 225, 156), (130, 226, 157), (132, 228, 158), (133, 228, 160),
+ (130, 225, 155), (127, 220, 153), (122, 213, 148), (116, 205, 140),
+ (115, 200, 139), (116, 193, 140), (115, 190, 139), (115, 188, 139),
+ (109, 182, 133), (101, 175, 128), (88, 163, 118), (71, 145, 102),
+ (42, 113, 71), (37, 106, 65), (33, 99, 60), (28, 87, 52),
+ (25, 76, 46), (24, 71, 46), (22, 64, 38), (19, 54, 33),
+ (15, 44, 27), (12, 41, 24), (11, 42, 25), (10, 42, 25),
+ (10, 42, 25), (9, 41, 22), (9, 41, 22), (9, 41, 22),
+ (8, 32, 19), (10, 35, 21), (12, 39, 24), (18, 51, 34),
+ (28, 70, 44), (37, 89, 56), (49, 107, 70), (63, 124, 83),
+ (78, 134, 95), (89, 135, 100), (103, 140, 112), (117, 146, 125),
+ (133, 158, 138), (148, 173, 152), (163, 191, 170), (178, 209, 184),
+ (192, 226, 198), (199, 236, 203), (205, 244, 212), (208, 248, 214),
+ (210, 249, 217), (206, 248, 214), (199, 247, 211), (191, 247, 210),
+ (182, 244, 200), (170, 240, 190), (157, 238, 184), (144, 235, 175),
+ (133, 231, 164), (121, 227, 156), (110, 222, 149), (100, 218, 143),
+ (92, 213, 136), (86, 207, 130), (79, 201, 124), (72, 197, 120),
+ (68, 194, 116), (65, 194, 114), (63, 195, 114), (62, 197, 114),
+ (63, 199, 115), (67, 200, 118), (70, 199, 119), (74, 195, 118),
+ (78, 189, 119), (80, 184, 120), (81, 182, 116), (82, 183, 119),
+ (81, 184, 119), (82, 185, 120), (83, 187, 121), (86, 189, 122),
+ (90, 188, 124), (93, 183, 126), (96, 177, 126), (99, 174, 125),
+ (100, 173, 127), (102, 173, 129), (102, 177, 131), (104, 182, 133),
+ (107, 189, 134), (112, 195, 140), (117, 197, 144), (121, 200, 147),
+ (126, 201, 151), (138, 206, 161), (147, 210, 168), (157, 215, 176),
+ (161, 221, 178), (165, 226, 181), (170, 228, 187), (172, 230, 189)
+ ),
+
+// 555 Evening_Sunshine
+((24, 79, 66), (49, 87, 56), (53, 88, 53), (57, 90, 51),
+ (64, 97, 56), (72, 104, 62), (80, 108, 62), (89, 112, 63),
+ (113, 122, 57), (110, 117, 54), (108, 112, 52), (99, 105, 48),
+ (90, 98, 45), (84, 91, 39), (79, 85, 33), (75, 80, 29),
+ (71, 76, 25), (55, 53, 17), (50, 53, 19), (46, 53, 21),
+ (48, 58, 25), (51, 63, 29), (51, 63, 30), (52, 63, 32),
+ (58, 78, 53), (54, 91, 66), (51, 104, 80), (41, 102, 88),
+ (32, 100, 97), (27, 96, 99), (23, 93, 102), (16, 88, 106),
+ (13, 91, 108), (18, 99, 110), (30, 100, 105), (42, 102, 100),
+ (62, 106, 89), (82, 110, 78), (93, 115, 72), (105, 120, 66),
+ (153, 137, 50), (172, 144, 41), (192, 152, 32), (202, 149, 21),
+ (213, 147, 11), (216, 145, 10), (219, 144, 9), (221, 142, 11),
+ (224, 136, 12), (209, 112, 5), (192, 95, 4), (175, 79, 4),
+ (165, 67, 5), (156, 56, 6), (153, 57, 6), (150, 59, 7),
+ (134, 73, 8), (140, 85, 6), (146, 97, 5), (158, 117, 5),
+ (170, 138, 5), (175, 146, 7), (180, 155, 9), (196, 172, 8),
+ (206, 178, 8), (200, 178, 15), (183, 168, 26), (166, 159, 37),
+ (155, 154, 43), (144, 149, 49), (123, 140, 62), (100, 133, 74),
+ (61, 117, 93), (47, 110, 97), (33, 104, 102), (29, 102, 104),
+ (25, 100, 106), (24, 100, 105), (23, 100, 105), (18, 98, 102),
+ (14, 93, 99), (15, 93, 99), (15, 94, 101), (16, 95, 103),
+ (14, 92, 102), (12, 90, 101), (9, 86, 101), (10, 85, 102),
+ (18, 89, 95), (28, 89, 88), (39, 89, 81), (48, 90, 77),
+ (57, 91, 74), (76, 92, 66), (98, 98, 56), (115, 102, 47),
+ (136, 107, 39), (166, 124, 30), (178, 129, 24), (190, 134, 18),
+ (192, 133, 15), (195, 133, 12), (196, 133, 13), (188, 136, 16),
+ (165, 142, 21), (150, 135, 23), (135, 129, 26), (126, 123, 29),
+ (117, 118, 32), (95, 108, 35), (78, 100, 39), (62, 90, 38),
+ (42, 77, 37), (13, 48, 32), (9, 44, 30), (5, 40, 28),
+ (3, 31, 23), (1, 24, 19), (0, 18, 18), (0, 15, 16),
+ (1, 19, 22), (1, 21, 26), (2, 24, 31), (2, 25, 31),
+ (2, 26, 32), (2, 26, 32), (1, 27, 31), (2, 28, 30),
+ (3, 27, 30), (3, 28, 32), (2, 28, 34), (2, 29, 36),
+ (2, 31, 39), (4, 36, 41), (4, 40, 44), (5, 44, 49),
+ (3, 47, 59), (4, 50, 62), (6, 54, 65), (6, 55, 67),
+ (6, 57, 69), (6, 60, 77), (4, 59, 84), (6, 60, 91),
+ (9, 66, 95), (12, 77, 107), (10, 79, 109), (9, 81, 111),
+ (9, 81, 112), (15, 81, 106), (23, 80, 99), (40, 78, 84),
+ (76, 72, 58), (83, 71, 51), (91, 71, 44), (102, 74, 41),
+ (109, 80, 40), (113, 85, 47), (113, 90, 56), (109, 93, 60),
+ (106, 98, 66), (96, 107, 71), (96, 107, 72), (97, 108, 74),
+ (99, 107, 74), (103, 108, 68), (106, 111, 58), (112, 111, 51),
+ (120, 111, 48), (117, 110, 48), (115, 110, 49), (103, 107, 55),
+ (88, 104, 64), (70, 100, 76), (56, 99, 91), (43, 99, 103),
+ (31, 97, 111), (25, 96, 116), (25, 94, 115), (37, 100, 107),
+ (56, 109, 99), (74, 123, 88), (96, 139, 78), (110, 149, 70),
+ (134, 157, 50), (135, 155, 50), (136, 154, 50), (136, 156, 52),
+ (130, 157, 62), (119, 154, 72), (106, 152, 80), (88, 140, 93),
+ (68, 129, 105), (50, 123, 117), (37, 120, 128), (30, 124, 135),
+ (29, 125, 139), (26, 122, 139), (25, 121, 140), (22, 121, 143),
+ (24, 126, 144), (27, 131, 145), (28, 132, 140), (38, 130, 131),
+ (51, 129, 123), (76, 129, 109), (102, 133, 98), (124, 136, 85),
+ (144, 135, 69), (163, 137, 57), (188, 139, 41), (212, 141, 30),
+ (227, 141, 20), (232, 134, 14), (221, 120, 13), (200, 110, 10),
+ (176, 96, 11), (149, 84, 10), (128, 71, 8), (105, 49, 7),
+ (79, 35, 5), (53, 20, 6), (31, 12, 6), (16, 7, 5),
+ (10, 2, 4), (12, 2, 3), (20, 5, 2), (32, 9, 2),
+ (51, 15, 3), (72, 23, 4), (91, 33, 6), (116, 48, 8),
+ (137, 61, 7), (162, 74, 8), (188, 82, 11), (202, 88, 11),
+ (213, 95, 13), (214, 94, 9), (200, 93, 6), (187, 82, 7),
+ (164, 69, 7), (139, 61, 12), (119, 53, 19), (94, 48, 27),
+ (71, 44, 36), (47, 37, 45), (25, 36, 53), (13, 41, 63),
+ (6, 47, 75), (4, 54, 82), (5, 61, 88), (8, 65, 88),
+ (8, 61, 80), (7, 60, 74), (8, 60, 67), (11, 65, 64)
+ ),
+
+// 556 Evensong
+((26, 31, 51), (23, 27, 42), (18, 23, 36), (14, 19, 31),
+ (14, 18, 29), (15, 17, 28), (14, 16, 26), (13, 15, 24),
+ (8, 10, 15), (6, 7, 12), (4, 5, 10), (5, 7, 12),
+ (6, 9, 15), (7, 11, 18), (9, 14, 22), (10, 16, 24),
+ (11, 18, 27), (14, 21, 31), (16, 22, 32), (18, 24, 34),
+ (24, 29, 34), (31, 34, 35), (34, 37, 38), (37, 41, 41),
+ (62, 62, 51), (70, 70, 61), (79, 79, 72), (81, 84, 73),
+ (84, 89, 75), (80, 86, 76), (76, 83, 77), (69, 75, 75),
+ (55, 62, 67), (34, 41, 49), (28, 33, 44), (22, 26, 40),
+ (20, 24, 37), (18, 22, 34), (17, 22, 33), (17, 22, 33),
+ (18, 24, 35), (19, 26, 37), (21, 28, 39), (22, 29, 42),
+ (24, 30, 46), (24, 31, 47), (24, 32, 48), (24, 33, 50),
+ (25, 33, 50), (21, 29, 45), (20, 28, 42), (20, 27, 40),
+ (18, 25, 38), (17, 24, 36), (16, 23, 35), (16, 23, 35),
+ (17, 22, 33), (17, 21, 33), (18, 21, 33), (18, 20, 32),
+ (18, 20, 32), (17, 20, 31), (16, 20, 31), (14, 19, 31),
+ (13, 19, 31), (6, 11, 22), (4, 8, 18), (3, 6, 14),
+ (1, 4, 11), (0, 2, 9), (0, 0, 7), (2, 2, 9),
+ (8, 10, 22), (13, 16, 29), (19, 23, 36), (22, 27, 43),
+ (26, 32, 51), (27, 34, 53), (29, 36, 55), (30, 38, 56),
+ (31, 37, 58), (31, 39, 57), (30, 37, 55), (29, 36, 54),
+ (28, 35, 53), (28, 35, 53), (27, 34, 53), (26, 33, 52),
+ (24, 29, 49), (21, 26, 45), (19, 23, 42), (16, 20, 38),
+ (14, 18, 34), (10, 12, 25), (10, 11, 20), (13, 16, 14),
+ (22, 22, 15), (55, 58, 50), (82, 84, 69), (110, 110, 89),
+ (127, 129, 109), (145, 149, 130), (182, 186, 166), (206, 207, 174),
+ (229, 233, 197), (220, 223, 186), (212, 214, 175), (202, 204, 165),
+ (193, 194, 156), (164, 163, 130), (144, 144, 121), (137, 137, 118),
+ (133, 132, 117), (139, 137, 112), (143, 142, 113), (148, 148, 115),
+ (154, 157, 116), (148, 148, 108), (133, 132, 101), (116, 120, 95),
+ (69, 70, 65), (55, 58, 59), (41, 46, 54), (37, 43, 53),
+ (34, 40, 52), (32, 37, 54), (35, 41, 56), (41, 46, 59),
+ (46, 49, 65), (58, 60, 64), (61, 63, 63), (64, 67, 63),
+ (65, 68, 61), (63, 68, 56), (61, 67, 51), (55, 59, 44),
+ (40, 44, 35), (33, 36, 31), (26, 29, 28), (23, 27, 28),
+ (21, 25, 29), (19, 24, 32), (19, 23, 33), (18, 24, 35),
+ (18, 25, 36), (24, 28, 39), (27, 31, 41), (30, 34, 43),
+ (35, 39, 45), (42, 45, 48), (49, 49, 54), (49, 55, 59),
+ (51, 56, 71), (49, 56, 72), (47, 56, 74), (45, 56, 78),
+ (43, 53, 80), (43, 53, 80), (43, 53, 80), (48, 60, 80),
+ (66, 74, 78), (94, 100, 85), (105, 110, 85), (116, 120, 86),
+ (126, 125, 83), (119, 120, 81), (107, 108, 76), (91, 92, 68),
+ (48, 51, 41), (40, 43, 38), (33, 36, 36), (26, 28, 28),
+ (18, 20, 20), (13, 16, 20), (11, 14, 21), (10, 13, 19),
+ (12, 15, 22), (15, 18, 27), (17, 21, 31), (20, 24, 35),
+ (22, 27, 38), (24, 28, 43), (25, 31, 44), (26, 33, 45),
+ (31, 37, 44), (32, 38, 43), (34, 40, 43), (37, 42, 42),
+ (40, 44, 43), (41, 44, 44), (38, 41, 45), (37, 40, 46),
+ (35, 39, 49), (32, 37, 51), (31, 37, 54), (33, 40, 60),
+ (36, 44, 66), (37, 46, 70), (38, 48, 72), (38, 47, 70),
+ (35, 44, 65), (31, 38, 57), (23, 29, 45), (17, 20, 33),
+ (12, 13, 22), (6, 7, 14), (3, 2, 8), (2, 1, 5),
+ (3, 3, 5), (6, 7, 10), (7, 10, 15), (9, 14, 17),
+ (11, 18, 22), (13, 19, 27), (14, 20, 27), (13, 20, 28),
+ (14, 20, 30), (16, 20, 33), (16, 22, 35), (17, 23, 37),
+ (19, 25, 39), (19, 25, 40), (19, 26, 40), (21, 27, 38),
+ (21, 27, 37), (20, 27, 37), (20, 27, 35), (20, 26, 34),
+ (19, 27, 35), (18, 26, 35), (18, 25, 35), (18, 25, 35),
+ (20, 26, 35), (22, 27, 34), (23, 26, 34), (21, 25, 31),
+ (20, 23, 28), (20, 22, 26), (18, 20, 26), (15, 19, 25),
+ (15, 19, 25), (16, 19, 27), (16, 18, 28), (16, 18, 29),
+ (16, 19, 29), (17, 19, 30), (17, 19, 31), (17, 20, 32),
+ (19, 22, 34), (21, 23, 36), (21, 26, 39), (24, 29, 44),
+ (28, 32, 50), (32, 36, 57), (38, 42, 63), (32, 38, 56)
+ ),
+
+// 557 Exceding_Expectations
+((111, 93, 84), (86, 52, 41), (85, 46, 35), (85, 41, 29),
+ (103, 54, 35), (121, 67, 41), (127, 73, 44), (134, 79, 47),
+ (166, 111, 85), (176, 131, 100), (186, 151, 115), (183, 158, 124),
+ (181, 166, 134), (170, 161, 135), (160, 156, 136), (153, 150, 130),
+ (147, 145, 125), (113, 109, 90), (98, 88, 72), (83, 68, 54),
+ (72, 53, 45), (61, 38, 36), (60, 33, 33), (60, 29, 30),
+ (69, 27, 31), (80, 39, 45), (91, 51, 60), (105, 66, 68),
+ (120, 82, 76), (124, 88, 79), (129, 95, 83), (141, 111, 92),
+ (155, 124, 101), (168, 129, 103), (167, 129, 105), (167, 130, 108),
+ (169, 130, 109), (171, 130, 111), (172, 130, 111), (174, 131, 111),
+ (171, 138, 115), (169, 139, 117), (167, 141, 120), (165, 145, 124),
+ (163, 150, 128), (161, 153, 134), (159, 157, 140), (159, 166, 157),
+ (163, 174, 167), (169, 186, 175), (174, 186, 177), (179, 187, 180),
+ (179, 179, 172), (179, 171, 164), (174, 166, 157), (170, 161, 151),
+ (156, 144, 143), (150, 136, 139), (144, 129, 136), (135, 128, 139),
+ (127, 127, 142), (124, 127, 143), (122, 128, 144), (123, 129, 149),
+ (123, 131, 150), (119, 132, 144), (120, 124, 132), (121, 116, 120),
+ (118, 111, 113), (116, 107, 106), (107, 94, 88), (97, 79, 77),
+ (87, 50, 49), (89, 48, 44), (91, 47, 39), (100, 52, 44),
+ (109, 57, 50), (111, 59, 50), (114, 61, 51), (114, 69, 54),
+ (123, 79, 63), (133, 103, 82), (131, 110, 93), (129, 117, 104),
+ (136, 125, 105), (143, 134, 106), (151, 146, 112), (154, 149, 116),
+ (144, 134, 114), (133, 123, 98), (123, 113, 83), (114, 103, 76),
+ (106, 94, 70), (93, 78, 61), (79, 64, 48), (71, 56, 36),
+ (66, 49, 28), (62, 46, 24), (60, 45, 24), (59, 45, 24),
+ (60, 45, 25), (62, 46, 26), (63, 49, 34), (66, 58, 47),
+ (87, 83, 77), (101, 99, 96), (115, 115, 116), (123, 125, 125),
+ (132, 135, 135), (147, 154, 147), (158, 166, 157), (160, 171, 165),
+ (163, 173, 166), (160, 172, 165), (155, 169, 166), (151, 166, 168),
+ (142, 159, 168), (136, 152, 164), (135, 151, 159), (134, 150, 159),
+ (130, 148, 151), (127, 142, 140), (124, 136, 130), (123, 134, 126),
+ (123, 133, 122), (122, 128, 119), (123, 124, 117), (121, 118, 113),
+ (121, 120, 113), (121, 128, 123), (119, 128, 122), (117, 128, 121),
+ (111, 126, 117), (104, 126, 112), (102, 122, 109), (101, 115, 101),
+ (109, 108, 86), (116, 104, 78), (123, 100, 71), (123, 96, 67),
+ (123, 92, 63), (118, 87, 57), (114, 85, 51), (108, 79, 48),
+ (96, 69, 46), (78, 74, 62), (79, 80, 68), (81, 87, 75),
+ (87, 97, 89), (89, 113, 104), (103, 131, 121), (122, 155, 138),
+ (142, 174, 157), (143, 173, 156), (144, 173, 155), (146, 177, 156),
+ (146, 175, 155), (137, 164, 150), (129, 144, 135), (116, 123, 116),
+ (102, 100, 101), (69, 66, 78), (64, 59, 70), (59, 52, 63),
+ (51, 34, 52), (42, 25, 49), (34, 22, 51), (32, 30, 56),
+ (34, 45, 60), (35, 47, 62), (37, 49, 65), (42, 57, 76),
+ (44, 63, 84), (43, 66, 82), (49, 62, 77), (58, 66, 81),
+ (65, 68, 93), (67, 79, 102), (77, 80, 106), (91, 93, 112),
+ (105, 103, 125), (121, 127, 143), (139, 145, 157), (154, 163, 166),
+ (172, 176, 164), (176, 179, 162), (180, 182, 161), (189, 188, 163),
+ (196, 191, 162), (203, 193, 160), (207, 198, 160), (209, 202, 162),
+ (213, 202, 167), (215, 199, 168), (213, 206, 172), (209, 216, 176),
+ (206, 221, 178), (202, 212, 177), (194, 205, 174), (185, 201, 174),
+ (173, 197, 177), (159, 180, 171), (145, 160, 159), (126, 133, 143),
+ (106, 111, 132), (85, 88, 115), (69, 69, 97), (57, 49, 79),
+ (48, 38, 64), (46, 33, 51), (48, 36, 43), (52, 36, 38),
+ (54, 38, 33), (58, 44, 28), (63, 49, 28), (68, 53, 31),
+ (71, 55, 29), (74, 59, 30), (87, 65, 35), (107, 73, 43),
+ (127, 82, 46), (143, 92, 48), (159, 100, 54), (177, 105, 62),
+ (191, 108, 66), (201, 113, 68), (199, 113, 72), (193, 117, 77),
+ (182, 119, 81), (180, 127, 88), (182, 131, 95), (181, 143, 107),
+ (179, 153, 119), (180, 163, 127), (188, 168, 130), (194, 170, 130),
+ (199, 167, 132), (198, 162, 131), (199, 157, 123), (199, 148, 110),
+ (199, 138, 98), (197, 129, 91), (194, 122, 81), (193, 117, 77),
+ (187, 113, 75), (179, 110, 78), (171, 110, 81), (167, 113, 88),
+ (162, 123, 101), (155, 127, 114), (152, 134, 126), (149, 138, 130),
+ (149, 147, 136), (134, 131, 123), (124, 114, 108), (108, 94, 87)
+ ),
+
+// 558 Explosion
+((129, 90, 16), (80, 46, 17), (66, 28, 16), (53, 10, 15),
+ (77, 20, 12), (102, 31, 10), (114, 36, 9), (126, 41, 9),
+ (166, 58, 6), (179, 59, 5), (192, 61, 4), (182, 59, 5),
+ (173, 57, 7), (155, 52, 11), (138, 47, 15), (128, 43, 19),
+ (118, 39, 23), (73, 22, 40), (55, 18, 44), (38, 15, 48),
+ (34, 14, 47), (30, 14, 47), (31, 15, 48), (33, 16, 50),
+ (41, 13, 45), (49, 9, 37), (57, 6, 29), (79, 9, 22),
+ (101, 13, 15), (111, 18, 14), (122, 24, 13), (140, 37, 11),
+ (155, 49, 9), (197, 82, 4), (213, 98, 5), (230, 115, 7),
+ (237, 132, 14), (244, 150, 21), (245, 158, 25), (246, 166, 29),
+ (247, 187, 45), (248, 194, 55), (250, 202, 66), (250, 207, 70),
+ (251, 213, 74), (250, 214, 73), (250, 215, 72), (250, 215, 70),
+ (251, 214, 64), (253, 207, 52), (253, 204, 47), (253, 202, 43),
+ (253, 204, 42), (253, 206, 42), (253, 207, 43), (254, 209, 45),
+ (244, 205, 59), (226, 190, 57), (208, 176, 55), (184, 155, 50),
+ (160, 134, 45), (152, 127, 46), (144, 121, 48), (127, 109, 54),
+ (109, 93, 55), (68, 55, 52), (59, 49, 57), (51, 43, 62),
+ (51, 45, 65), (52, 47, 68), (49, 48, 76), (46, 46, 78),
+ (35, 35, 68), (29, 29, 61), (23, 23, 54), (18, 19, 48),
+ (14, 15, 42), (12, 13, 39), (11, 11, 36), (9, 8, 31),
+ (8, 6, 26), (7, 3, 19), (6, 3, 17), (6, 3, 15),
+ (5, 2, 14), (5, 2, 14), (5, 2, 13), (5, 1, 13),
+ (5, 2, 15), (4, 2, 16), (4, 3, 18), (4, 3, 19),
+ (5, 4, 20), (5, 4, 20), (5, 4, 20), (6, 4, 20),
+ (6, 4, 20), (6, 3, 19), (6, 2, 17), (6, 2, 16),
+ (6, 2, 15), (6, 2, 15), (7, 2, 14), (9, 1, 14),
+ (18, 2, 17), (23, 7, 21), (29, 12, 25), (32, 16, 27),
+ (35, 21, 30), (47, 30, 34), (64, 47, 44), (90, 67, 48),
+ (113, 89, 58), (153, 132, 71), (162, 142, 75), (171, 153, 80),
+ (194, 173, 83), (216, 192, 91), (231, 210, 99), (243, 219, 102),
+ (252, 222, 93), (253, 222, 87), (254, 222, 81), (254, 220, 78),
+ (254, 218, 76), (254, 211, 68), (253, 203, 57), (253, 199, 46),
+ (253, 194, 39), (252, 189, 33), (251, 187, 35), (251, 186, 38),
+ (251, 192, 47), (251, 198, 60), (251, 204, 75), (252, 209, 84),
+ (246, 212, 98), (229, 203, 103), (212, 194, 108), (200, 185, 108),
+ (188, 176, 109), (162, 156, 103), (142, 136, 93), (117, 114, 79),
+ (92, 89, 66), (46, 42, 47), (42, 34, 43), (38, 26, 40),
+ (39, 16, 32), (49, 12, 23), (70, 11, 14), (90, 16, 10),
+ (113, 17, 9), (112, 15, 9), (112, 13, 9), (110, 12, 9),
+ (109, 15, 10), (107, 19, 10), (95, 19, 16), (74, 14, 21),
+ (51, 8, 26), (20, 4, 28), (16, 4, 28), (13, 5, 29),
+ (10, 7, 34), (12, 12, 41), (20, 20, 46), (37, 35, 55),
+ (83, 77, 76), (95, 89, 83), (108, 102, 91), (130, 123, 99),
+ (157, 145, 106), (181, 163, 110), (204, 178, 109), (225, 186, 106),
+ (233, 179, 95), (227, 163, 81), (210, 139, 68), (183, 115, 54),
+ (159, 94, 42), (139, 73, 30), (116, 49, 19), (93, 27, 14),
+ (53, 2, 13), (52, 1, 14), (51, 1, 15), (65, 7, 13),
+ (85, 19, 11), (108, 34, 9), (133, 52, 7), (153, 68, 12),
+ (178, 87, 17), (202, 112, 26), (223, 139, 41), (241, 165, 53),
+ (248, 185, 71), (252, 200, 86), (253, 214, 102), (253, 226, 120),
+ (254, 233, 131), (254, 236, 140), (248, 231, 143), (234, 218, 139),
+ (213, 193, 128), (201, 168, 111), (200, 148, 92), (205, 136, 75),
+ (208, 130, 61), (192, 116, 49), (167, 94, 43), (148, 72, 38),
+ (136, 57, 34), (129, 53, 30), (124, 54, 25), (104, 51, 24),
+ (84, 43, 29), (66, 33, 34), (52, 21, 37), (63, 18, 33),
+ (79, 25, 23), (102, 38, 17), (127, 55, 14), (143, 72, 17),
+ (170, 92, 27), (195, 117, 41), (219, 143, 56), (238, 169, 70),
+ (244, 188, 80), (243, 197, 91), (235, 201, 108), (221, 198, 122),
+ (203, 190, 134), (186, 180, 142), (166, 161, 137), (144, 139, 129),
+ (118, 114, 115), (91, 87, 98), (72, 68, 86), (58, 50, 74),
+ (48, 36, 61), (43, 23, 48), (41, 12, 34), (48, 7, 23),
+ (69, 9, 17), (93, 19, 12), (119, 34, 9), (142, 54, 9),
+ (162, 71, 9), (184, 86, 10), (206, 104, 10), (225, 121, 8),
+ (209, 120, 9), (186, 114, 12), (157, 104, 13), (129, 88, 16)
+ ),
+
+// 559 Faded_Denim
+((33, 54, 95), (31, 53, 96), (39, 58, 110), (47, 63, 124),
+ (57, 72, 140), (68, 82, 156), (72, 84, 156), (76, 86, 156),
+ (88, 97, 158), (88, 97, 159), (89, 98, 160), (88, 96, 156),
+ (88, 95, 152), (84, 90, 139), (80, 86, 126), (75, 81, 118),
+ (71, 76, 111), (45, 55, 89), (38, 49, 84), (32, 43, 80),
+ (32, 43, 80), (32, 43, 80), (33, 44, 82), (34, 45, 84),
+ (37, 50, 95), (41, 54, 99), (45, 59, 103), (50, 62, 107),
+ (55, 66, 111), (55, 67, 111), (56, 68, 112), (58, 69, 112),
+ (59, 68, 111), (58, 66, 108), (57, 67, 110), (56, 68, 112),
+ (61, 72, 120), (66, 76, 128), (68, 78, 133), (71, 81, 138),
+ (78, 88, 148), (71, 84, 142), (65, 80, 136), (58, 73, 125),
+ (52, 66, 115), (51, 63, 110), (50, 61, 106), (45, 56, 98),
+ (40, 50, 88), (23, 33, 69), (17, 26, 60), (11, 20, 51),
+ (8, 16, 46), (6, 13, 41), (5, 12, 42), (4, 12, 43),
+ (4, 11, 43), (3, 9, 41), (3, 7, 39), (3, 5, 36),
+ (3, 3, 33), (3, 3, 34), (3, 4, 36), (4, 8, 40),
+ (5, 13, 48), (19, 27, 69), (29, 36, 82), (40, 45, 95),
+ (47, 51, 100), (54, 58, 106), (60, 66, 111), (62, 72, 112),
+ (59, 76, 115), (60, 76, 116), (61, 76, 118), (64, 78, 119),
+ (68, 80, 120), (65, 78, 118), (63, 77, 116), (58, 76, 115),
+ (48, 68, 111), (43, 60, 112), (41, 56, 109), (39, 52, 107),
+ (37, 50, 105), (35, 49, 103), (32, 47, 99), (28, 48, 100),
+ (23, 51, 108), (23, 52, 112), (24, 53, 116), (24, 53, 115),
+ (24, 54, 115), (25, 56, 118), (29, 63, 124), (33, 68, 134),
+ (41, 75, 150), (57, 86, 173), (60, 90, 176), (63, 94, 179),
+ (64, 95, 179), (65, 97, 179), (65, 100, 182), (66, 102, 187),
+ (71, 108, 195), (70, 107, 194), (70, 107, 194), (68, 106, 191),
+ (66, 105, 189), (63, 103, 186), (62, 99, 181), (59, 96, 178),
+ (58, 92, 174), (58, 92, 169), (61, 92, 169), (64, 92, 170),
+ (73, 93, 171), (80, 98, 174), (94, 107, 181), (100, 115, 189),
+ (111, 125, 203), (113, 125, 206), (116, 125, 209), (120, 127, 210),
+ (124, 130, 211), (121, 128, 211), (115, 126, 209), (107, 120, 203),
+ (99, 113, 197), (85, 96, 181), (83, 93, 178), (81, 91, 175),
+ (76, 88, 170), (72, 85, 165), (69, 81, 159), (69, 79, 158),
+ (71, 79, 160), (75, 81, 163), (80, 84, 167), (82, 86, 168),
+ (84, 88, 169), (88, 93, 175), (93, 96, 179), (91, 98, 183),
+ (88, 100, 189), (80, 103, 190), (79, 103, 189), (78, 103, 189),
+ (79, 104, 189), (77, 103, 186), (75, 105, 189), (70, 106, 193),
+ (59, 107, 198), (58, 107, 200), (57, 108, 203), (59, 109, 205),
+ (66, 113, 209), (72, 120, 214), (81, 129, 222), (87, 135, 232),
+ (95, 144, 241), (119, 163, 254), (121, 165, 254), (124, 167, 255),
+ (131, 170, 254), (135, 168, 252), (127, 162, 246), (136, 162, 245),
+ (126, 151, 237), (121, 147, 234), (117, 144, 232), (103, 132, 225),
+ (85, 118, 217), (77, 112, 213), (76, 108, 211), (74, 110, 214),
+ (75, 114, 218), (75, 118, 221), (77, 119, 223), (75, 121, 223),
+ (73, 118, 222), (73, 118, 222), (74, 117, 218), (74, 114, 213),
+ (74, 112, 197), (71, 108, 191), (69, 104, 186), (62, 97, 178),
+ (57, 91, 169), (52, 82, 158), (47, 78, 150), (43, 74, 143),
+ (41, 72, 138), (39, 69, 134), (38, 66, 130), (37, 62, 126),
+ (37, 60, 120), (33, 56, 116), (31, 53, 114), (27, 51, 111),
+ (24, 48, 108), (27, 47, 110), (29, 49, 114), (33, 53, 120),
+ (35, 60, 131), (40, 67, 143), (48, 75, 154), (56, 81, 163),
+ (62, 89, 173), (65, 93, 178), (66, 98, 186), (63, 100, 190),
+ (62, 98, 189), (61, 96, 185), (60, 93, 177), (60, 89, 166),
+ (59, 85, 158), (51, 79, 150), (47, 75, 143), (41, 70, 138),
+ (38, 66, 132), (36, 64, 126), (37, 61, 122), (33, 57, 116),
+ (33, 53, 110), (30, 47, 102), (23, 42, 94), (16, 35, 83),
+ (9, 29, 72), (6, 25, 64), (5, 20, 55), (4, 16, 45),
+ (3, 12, 39), (3, 7, 31), (2, 3, 25), (2, 3, 24),
+ (2, 4, 26), (3, 10, 32), (4, 15, 41), (5, 24, 53),
+ (8, 30, 64), (12, 32, 72), (16, 34, 80), (17, 34, 79),
+ (17, 36, 79), (21, 40, 80), (25, 45, 83), (28, 48, 84),
+ (29, 50, 85), (29, 49, 81), (28, 47, 73), (24, 39, 60),
+ (26, 43, 64), (28, 45, 72), (29, 47, 77), (30, 50, 85)
+ ),
+
+// 560 Fading_Away
+((101, 104, 121), (111, 104, 130), (115, 107, 129), (120, 111, 128),
+ (121, 110, 125), (122, 110, 123), (121, 105, 124), (121, 101, 125),
+ (129, 93, 125), (132, 97, 124), (136, 102, 123), (142, 113, 128),
+ (148, 124, 133), (151, 137, 128), (155, 151, 124), (154, 154, 124),
+ (154, 158, 125), (145, 161, 129), (140, 154, 123), (135, 147, 118),
+ (133, 143, 114), (132, 140, 111), (133, 138, 110), (134, 136, 109),
+ (134, 135, 107), (128, 137, 108), (123, 139, 110), (113, 144, 114),
+ (103, 150, 118), (96, 152, 120), (89, 154, 122), (79, 154, 126),
+ (64, 147, 131), (51, 131, 130), (51, 122, 130), (51, 114, 131),
+ (57, 105, 128), (63, 96, 126), (70, 94, 125), (78, 93, 125),
+ (99, 110, 123), (108, 117, 123), (117, 124, 124), (125, 127, 123),
+ (133, 130, 122), (132, 131, 120), (131, 133, 119), (125, 133, 118),
+ (124, 130, 114), (124, 127, 101), (119, 125, 100), (115, 124, 99),
+ (113, 124, 100), (111, 124, 102), (110, 125, 102), (109, 126, 103),
+ (92, 128, 114), (85, 125, 119), (78, 122, 124), (80, 121, 120),
+ (83, 121, 117), (83, 120, 114), (84, 120, 111), (89, 120, 101),
+ (100, 115, 91), (126, 110, 74), (130, 111, 63), (135, 112, 52),
+ (138, 110, 47), (141, 109, 42), (152, 102, 42), (159, 104, 44),
+ (164, 111, 44), (166, 116, 46), (169, 121, 48), (165, 127, 53),
+ (161, 134, 58), (157, 137, 65), (154, 141, 72), (146, 152, 84),
+ (144, 155, 96), (146, 160, 125), (147, 169, 136), (149, 178, 147),
+ (154, 178, 146), (159, 178, 145), (165, 163, 146), (165, 152, 140),
+ (163, 136, 129), (163, 123, 122), (163, 110, 116), (164, 105, 110),
+ (166, 100, 104), (162, 99, 98), (156, 101, 94), (149, 109, 94),
+ (145, 114, 90), (138, 125, 85), (135, 125, 82), (132, 125, 80),
+ (132, 123, 79), (133, 122, 78), (140, 121, 81), (143, 124, 82),
+ (140, 118, 79), (136, 116, 85), (133, 114, 92), (131, 110, 96),
+ (130, 107, 100), (124, 100, 108), (122, 88, 115), (127, 81, 125),
+ (137, 76, 132), (141, 69, 132), (145, 68, 134), (149, 67, 137),
+ (158, 73, 143), (159, 83, 148), (148, 101, 150), (137, 112, 162),
+ (130, 135, 171), (127, 135, 172), (124, 136, 173), (120, 130, 175),
+ (116, 125, 177), (112, 112, 167), (111, 102, 155), (108, 92, 143),
+ (105, 83, 141), (105, 75, 124), (104, 78, 121), (103, 82, 119),
+ (104, 96, 121), (105, 107, 119), (111, 113, 113), (113, 115, 110),
+ (118, 112, 116), (122, 106, 117), (127, 100, 118), (127, 99, 116),
+ (127, 98, 115), (128, 94, 117), (128, 89, 127), (124, 80, 135),
+ (108, 76, 135), (77, 70, 137), (73, 67, 140), (69, 65, 143),
+ (61, 62, 143), (54, 63, 140), (51, 60, 140), (55, 56, 143),
+ (61, 51, 140), (62, 50, 138), (63, 50, 137), (72, 50, 137),
+ (74, 53, 139), (79, 59, 140), (76, 66, 138), (86, 77, 136),
+ (94, 85, 133), (93, 98, 132), (91, 96, 133), (89, 95, 134),
+ (82, 87, 136), (76, 76, 136), (68, 71, 135), (65, 64, 133),
+ (70, 60, 137), (73, 64, 138), (76, 68, 139), (84, 78, 143),
+ (95, 95, 155), (108, 108, 165), (117, 126, 177), (129, 135, 184),
+ (139, 143, 198), (154, 148, 201), (157, 162, 204), (164, 164, 194),
+ (164, 161, 183), (165, 154, 167), (156, 161, 155), (140, 166, 146),
+ (119, 159, 138), (120, 161, 140), (121, 163, 142), (121, 174, 154),
+ (126, 181, 168), (137, 183, 182), (150, 184, 191), (158, 188, 194),
+ (161, 192, 198), (164, 195, 201), (165, 195, 204), (158, 193, 203),
+ (146, 190, 200), (131, 187, 199), (128, 177, 204), (129, 169, 207),
+ (135, 162, 208), (140, 159, 203), (147, 149, 200), (153, 149, 186),
+ (158, 151, 168), (167, 157, 154), (179, 154, 150), (186, 154, 155),
+ (181, 156, 160), (178, 159, 167), (181, 162, 173), (190, 165, 186),
+ (191, 165, 193), (187, 167, 195), (179, 171, 185), (171, 180, 176),
+ (166, 184, 161), (160, 182, 152), (154, 175, 146), (143, 168, 145),
+ (137, 165, 144), (134, 155, 143), (136, 146, 147), (134, 137, 150),
+ (134, 137, 150), (133, 136, 144), (137, 137, 137), (140, 133, 128),
+ (147, 136, 116), (149, 136, 105), (152, 141, 94), (150, 139, 86),
+ (152, 142, 80), (154, 141, 73), (155, 146, 74), (144, 151, 79),
+ (132, 156, 90), (123, 166, 99), (120, 173, 108), (124, 181, 122),
+ (126, 179, 133), (126, 176, 141), (120, 169, 140), (124, 161, 140),
+ (133, 146, 140), (138, 129, 139), (130, 119, 133), (117, 105, 127),
+ (105, 93, 125), (96, 82, 125), (91, 83, 119), (88, 89, 113),
+ (83, 91, 112), (83, 84, 124), (83, 79, 127), (94, 89, 128)
+ ),
+
+// 561 Fiery_Sky
+((163, 95, 49), (175, 86, 48), (180, 83, 47), (186, 80, 47),
+ (171, 76, 42), (156, 73, 38), (150, 68, 35), (144, 64, 33),
+ (105, 55, 40), (87, 59, 46), (69, 64, 53), (53, 57, 63),
+ (37, 50, 73), (37, 51, 78), (37, 52, 84), (45, 53, 83),
+ (53, 55, 82), (89, 63, 71), (107, 70, 60), (126, 78, 49),
+ (143, 82, 38), (160, 87, 28), (167, 86, 25), (175, 86, 23),
+ (189, 61, 16), (200, 47, 18), (212, 33, 21), (214, 25, 23),
+ (217, 17, 26), (212, 16, 27), (207, 15, 28), (204, 13, 37),
+ (201, 6, 50), (173, 13, 52), (154, 12, 55), (136, 12, 58),
+ (119, 11, 62), (102, 11, 66), (91, 11, 63), (80, 11, 60),
+ (47, 14, 61), (47, 12, 56), (48, 10, 51), (58, 10, 43),
+ (69, 11, 36), (73, 14, 35), (77, 18, 35), (82, 22, 25),
+ (86, 28, 20), (83, 30, 15), (69, 31, 16), (55, 33, 18),
+ (48, 31, 25), (42, 30, 32), (43, 29, 32), (44, 28, 33),
+ (55, 24, 24), (64, 29, 30), (73, 35, 36), (83, 40, 37),
+ (94, 46, 39), (96, 46, 40), (98, 47, 42), (97, 47, 53),
+ (94, 43, 68), (89, 36, 81), (90, 28, 75), (91, 21, 69),
+ (94, 20, 64), (98, 19, 60), (105, 17, 51), (109, 21, 41),
+ (124, 24, 15), (122, 25, 17), (121, 27, 20), (119, 27, 17),
+ (118, 28, 15), (112, 27, 15), (107, 27, 16), (95, 23, 26),
+ (86, 18, 33), (64, 12, 22), (53, 12, 25), (42, 12, 29),
+ (37, 11, 32), (32, 10, 36), (18, 7, 40), (10, 9, 39),
+ (12, 22, 54), (15, 19, 66), (19, 16, 78), (22, 18, 82),
+ (26, 21, 86), (40, 25, 94), (56, 28, 97), (67, 21, 97),
+ (81, 18, 94), (105, 21, 93), (105, 20, 84), (106, 19, 75),
+ (112, 21, 71), (118, 24, 67), (134, 41, 66), (140, 54, 65),
+ (166, 73, 46), (178, 86, 39), (190, 99, 33), (190, 102, 32),
+ (191, 106, 32), (177, 103, 28), (156, 91, 23), (131, 78, 25),
+ (104, 70, 39), (63, 50, 56), (58, 44, 56), (54, 39, 56),
+ (53, 35, 57), (57, 40, 55), (72, 44, 52), (91, 49, 43),
+ (113, 55, 19), (115, 53, 23), (118, 51, 27), (112, 49, 33),
+ (107, 47, 39), (91, 38, 48), (69, 28, 59), (52, 20, 70),
+ (38, 19, 73), (15, 29, 58), (14, 34, 55), (13, 39, 53),
+ (28, 51, 44), (49, 58, 27), (73, 65, 13), (87, 71, 8),
+ (116, 73, 10), (122, 71, 9), (129, 69, 9), (122, 67, 9),
+ (116, 65, 9), (105, 66, 12), (102, 80, 13), (109, 93, 13),
+ (109, 97, 15), (128, 97, 22), (137, 102, 22), (146, 108, 23),
+ (158, 116, 26), (164, 117, 29), (168, 119, 26), (173, 125, 23),
+ (174, 135, 27), (172, 139, 25), (171, 143, 24), (176, 153, 21),
+ (186, 157, 19), (197, 156, 33), (190, 153, 37), (176, 159, 48),
+ (160, 158, 54), (151, 125, 62), (146, 122, 60), (142, 119, 59),
+ (123, 116, 55), (122, 101, 62), (130, 82, 57), (149, 69, 52),
+ (165, 73, 55), (166, 76, 57), (167, 80, 59), (178, 85, 63),
+ (182, 89, 60), (185, 96, 59), (178, 103, 52), (177, 114, 44),
+ (172, 113, 36), (170, 108, 29), (167, 99, 23), (171, 95, 15),
+ (172, 86, 12), (172, 73, 11), (176, 60, 17), (184, 60, 19),
+ (207, 72, 17), (212, 69, 17), (217, 66, 17), (218, 63, 17),
+ (220, 60, 19), (216, 63, 15), (212, 57, 12), (199, 50, 7),
+ (190, 42, 5), (176, 39, 5), (165, 34, 12), (150, 36, 17),
+ (146, 39, 22), (141, 43, 25), (139, 41, 31), (136, 40, 40),
+ (133, 40, 52), (129, 41, 60), (133, 49, 68), (142, 49, 72),
+ (152, 49, 81), (153, 41, 82), (162, 52, 86), (176, 63, 78),
+ (191, 77, 71), (190, 79, 54), (187, 88, 44), (189, 100, 33),
+ (196, 112, 25), (197, 124, 20), (187, 131, 19), (174, 132, 23),
+ (162, 118, 29), (152, 101, 46), (133, 87, 62), (112, 77, 76),
+ (86, 63, 85), (64, 47, 97), (43, 33, 100), (39, 24, 101),
+ (43, 21, 94), (51, 18, 86), (59, 15, 71), (76, 13, 62),
+ (95, 13, 57), (111, 12, 55), (123, 9, 48), (132, 9, 43),
+ (140, 12, 38), (149, 22, 39), (158, 32, 35), (168, 45, 33),
+ (177, 56, 20), (190, 68, 14), (198, 73, 11), (204, 77, 22),
+ (204, 73, 29), (200, 68, 36), (183, 54, 48), (166, 43, 65),
+ (145, 31, 78), (123, 22, 84), (96, 12, 92), (77, 8, 97),
+ (69, 10, 93), (64, 16, 85), (67, 22, 78), (67, 40, 76),
+ (79, 49, 65), (96, 59, 62), (130, 61, 54), (152, 84, 58)
+ ),
+
+// 562 Fiesta
+((84, 124, 123), (56, 94, 149), (36, 79, 163), (16, 64, 177),
+ (17, 63, 165), (18, 62, 153), (23, 64, 150), (29, 66, 148),
+ (54, 85, 153), (57, 97, 135), (60, 110, 118), (72, 116, 91),
+ (85, 122, 65), (96, 117, 51), (108, 113, 38), (110, 110, 34),
+ (113, 107, 30), (123, 85, 16), (127, 71, 9), (131, 57, 3),
+ (137, 50, 2), (144, 44, 1), (146, 46, 1), (148, 49, 1),
+ (141, 60, 15), (124, 61, 40), (107, 62, 65), (91, 65, 92),
+ (75, 68, 119), (69, 73, 129), (64, 79, 139), (54, 94, 161),
+ (40, 107, 188), (10, 105, 235), (6, 96, 242), (2, 88, 250),
+ (3, 92, 249), (4, 96, 248), (6, 99, 244), (9, 102, 241),
+ (20, 103, 212), (23, 108, 195), (27, 113, 179), (29, 123, 154),
+ (31, 134, 129), (33, 135, 115), (36, 137, 101), (44, 127, 71),
+ (56, 118, 51), (78, 94, 25), (91, 84, 17), (105, 75, 10),
+ (121, 76, 16), (138, 78, 22), (143, 83, 29), (148, 88, 37),
+ (149, 121, 49), (152, 132, 50), (156, 144, 51), (152, 163, 68),
+ (149, 182, 85), (143, 188, 89), (138, 194, 94), (130, 193, 84),
+ (117, 184, 71), (89, 158, 61), (80, 151, 60), (71, 144, 60),
+ (64, 143, 55), (58, 143, 51), (48, 134, 42), (37, 124, 37),
+ (46, 98, 35), (62, 101, 38), (78, 105, 41), (93, 116, 51),
+ (108, 127, 61), (114, 130, 67), (121, 133, 73), (123, 139, 81),
+ (126, 145, 86), (118, 161, 99), (112, 173, 114), (106, 186, 129),
+ (104, 187, 133), (102, 188, 137), (97, 191, 131), (102, 188, 119),
+ (136, 185, 112), (153, 167, 102), (171, 150, 93), (177, 140, 81),
+ (184, 131, 69), (198, 124, 54), (214, 113, 39), (222, 98, 33),
+ (225, 80, 23), (214, 56, 7), (210, 60, 6), (207, 64, 6),
+ (203, 66, 7), (200, 68, 8), (185, 79, 14), (169, 88, 24),
+ (126, 98, 66), (108, 105, 88), (91, 113, 111), (84, 123, 117),
+ (78, 133, 124), (66, 145, 132), (51, 152, 142), (46, 147, 147),
+ (38, 142, 144), (32, 134, 105), (31, 131, 93), (31, 128, 81),
+ (33, 116, 61), (33, 111, 43), (28, 108, 27), (20, 105, 15),
+ (4, 87, 2), (4, 78, 1), (5, 70, 0), (9, 69, 1),
+ (14, 69, 2), (29, 72, 2), (49, 69, 2), (67, 57, 1),
+ (86, 44, 1), (128, 24, 1), (140, 24, 1), (153, 25, 1),
+ (174, 29, 0), (188, 34, 2), (198, 33, 2), (204, 30, 2),
+ (206, 27, 3), (197, 26, 4), (188, 26, 5), (183, 22, 4),
+ (179, 19, 4), (175, 14, 5), (173, 10, 3), (169, 9, 6),
+ (165, 9, 6), (162, 10, 10), (161, 14, 13), (161, 19, 16),
+ (159, 30, 26), (147, 42, 39), (135, 57, 51), (122, 68, 60),
+ (108, 92, 71), (99, 96, 74), (91, 100, 77), (72, 105, 82),
+ (47, 102, 94), (34, 94, 103), (31, 84, 110), (28, 71, 114),
+ (26, 63, 107), (7, 42, 85), (5, 37, 81), (3, 32, 78),
+ (6, 23, 76), (20, 27, 72), (33, 40, 57), (40, 58, 46),
+ (30, 91, 58), (30, 100, 71), (31, 109, 85), (36, 124, 109),
+ (40, 145, 127), (39, 160, 135), (28, 163, 142), (19, 162, 146),
+ (19, 145, 142), (27, 127, 133), (41, 109, 113), (59, 89, 87),
+ (76, 77, 63), (90, 63, 41), (105, 45, 27), (116, 28, 15),
+ (129, 13, 5), (124, 17, 4), (120, 21, 4), (106, 30, 8),
+ (94, 36, 11), (87, 38, 14), (88, 34, 11), (90, 36, 7),
+ (92, 39, 7), (93, 45, 7), (107, 52, 11), (123, 54, 11),
+ (144, 57, 8), (163, 57, 7), (176, 56, 6), (193, 53, 9),
+ (205, 51, 10), (213, 47, 6), (216, 45, 6), (217, 46, 6),
+ (219, 45, 9), (223, 42, 10), (227, 34, 7), (232, 28, 6),
+ (236, 24, 4), (238, 27, 3), (239, 30, 4), (238, 31, 2),
+ (235, 33, 5), (235, 37, 14), (232, 54, 29), (228, 76, 47),
+ (217, 91, 76), (195, 101, 90), (167, 99, 115), (139, 97, 145),
+ (114, 103, 151), (95, 100, 169), (77, 99, 151), (62, 84, 135),
+ (54, 66, 130), (51, 58, 111), (56, 51, 103), (61, 59, 83),
+ (63, 72, 60), (65, 82, 52), (64, 93, 53), (65, 97, 62),
+ (62, 102, 73), (52, 110, 78), (45, 121, 86), (34, 133, 94),
+ (26, 139, 104), (20, 142, 115), (13, 139, 120), (12, 143, 130),
+ (13, 153, 143), (18, 161, 160), (20, 171, 181), (16, 177, 193),
+ (9, 178, 206), (5, 176, 220), (6, 172, 231), (7, 171, 239),
+ (15, 168, 234), (31, 168, 222), (53, 169, 208), (76, 165, 188),
+ (74, 165, 189), (68, 157, 179), (68, 149, 164), (66, 141, 150)
+ ),
+
+// 563 First_Love
+((218, 159, 144), (232, 175, 163), (230, 176, 159), (228, 177, 156),
+ (227, 177, 154), (227, 178, 152), (229, 178, 151), (231, 178, 151),
+ (233, 179, 149), (233, 183, 151), (234, 188, 154), (235, 191, 156),
+ (236, 194, 158), (235, 195, 163), (235, 196, 168), (235, 197, 170),
+ (235, 199, 172), (240, 204, 180), (239, 206, 185), (239, 208, 190),
+ (239, 208, 190), (240, 208, 191), (241, 205, 188), (243, 202, 186),
+ (245, 194, 175), (242, 188, 165), (240, 182, 156), (236, 169, 144),
+ (232, 156, 133), (228, 150, 127), (225, 144, 122), (219, 126, 110),
+ (213, 112, 105), (210, 99, 107), (208, 101, 109), (207, 104, 111),
+ (206, 105, 113), (205, 107, 116), (208, 109, 118), (211, 112, 120),
+ (226, 134, 128), (228, 143, 131), (230, 153, 134), (230, 158, 135),
+ (231, 163, 136), (230, 162, 135), (230, 161, 135), (228, 158, 134),
+ (226, 157, 133), (217, 157, 129), (204, 151, 123), (192, 145, 118),
+ (187, 139, 114), (183, 134, 110), (184, 134, 110), (186, 134, 111),
+ (186, 142, 124), (190, 150, 135), (194, 158, 147), (206, 170, 159),
+ (219, 182, 171), (223, 186, 175), (228, 190, 179), (233, 193, 182),
+ (238, 197, 186), (242, 200, 186), (240, 191, 175), (238, 182, 164),
+ (236, 176, 157), (234, 171, 150), (232, 160, 138), (228, 151, 124),
+ (212, 121, 100), (203, 105, 93), (194, 90, 87), (187, 80, 81),
+ (181, 70, 76), (177, 65, 76), (173, 61, 77), (167, 58, 76),
+ (164, 61, 83), (166, 81, 108), (167, 89, 114), (168, 98, 121),
+ (168, 98, 120), (168, 98, 119), (164, 98, 112), (156, 95, 110),
+ (135, 78, 100), (123, 62, 88), (112, 47, 76), (107, 41, 73),
+ (103, 36, 70), (99, 27, 67), (94, 24, 65), (92, 21, 61),
+ (91, 19, 61), (99, 22, 73), (103, 24, 78), (107, 26, 84),
+ (108, 26, 85), (109, 27, 86), (112, 27, 90), (117, 34, 95),
+ (132, 59, 109), (145, 72, 112), (158, 85, 115), (165, 90, 116),
+ (173, 96, 118), (187, 110, 121), (199, 119, 121), (210, 130, 122),
+ (218, 139, 120), (230, 138, 107), (230, 135, 102), (230, 133, 98),
+ (227, 123, 92), (217, 113, 85), (207, 103, 85), (198, 91, 81),
+ (188, 71, 75), (183, 63, 72), (179, 55, 69), (178, 54, 69),
+ (178, 53, 69), (180, 49, 73), (186, 51, 81), (191, 50, 85),
+ (193, 48, 87), (193, 62, 85), (192, 67, 85), (192, 72, 86),
+ (196, 81, 89), (195, 85, 95), (196, 86, 98), (194, 92, 104),
+ (185, 98, 100), (177, 94, 97), (170, 91, 94), (165, 86, 94),
+ (161, 81, 95), (148, 70, 88), (132, 58, 81), (113, 45, 74),
+ (96, 35, 68), (72, 20, 63), (70, 17, 61), (68, 15, 59),
+ (70, 12, 55), (72, 11, 52), (74, 11, 53), (77, 13, 57),
+ (78, 14, 64), (78, 12, 62), (78, 11, 60), (78, 11, 56),
+ (77, 11, 52), (74, 12, 54), (69, 14, 59), (66, 11, 62),
+ (61, 12, 60), (56, 10, 53), (55, 10, 52), (54, 10, 51),
+ (54, 7, 47), (53, 7, 44), (50, 4, 35), (54, 2, 33),
+ (67, 3, 30), (72, 4, 31), (78, 6, 33), (84, 11, 34),
+ (97, 16, 42), (112, 26, 55), (128, 41, 68), (143, 51, 84),
+ (153, 57, 90), (164, 65, 91), (172, 75, 97), (183, 94, 103),
+ (190, 112, 113), (199, 120, 119), (208, 124, 117), (215, 127, 116),
+ (226, 149, 122), (227, 153, 127), (229, 158, 133), (231, 162, 140),
+ (232, 165, 144), (233, 169, 148), (234, 172, 151), (232, 173, 153),
+ (230, 174, 156), (228, 175, 157), (228, 176, 158), (229, 175, 157),
+ (229, 171, 155), (225, 166, 153), (224, 160, 150), (222, 158, 146),
+ (223, 157, 143), (224, 156, 141), (223, 154, 142), (225, 151, 141),
+ (225, 152, 140), (227, 153, 139), (229, 158, 136), (229, 161, 135),
+ (229, 160, 132), (227, 157, 127), (223, 150, 121), (221, 145, 114),
+ (215, 135, 109), (208, 124, 103), (202, 114, 98), (194, 105, 91),
+ (194, 102, 88), (195, 103, 91), (195, 104, 94), (194, 106, 99),
+ (190, 108, 100), (188, 109, 101), (187, 110, 106), (185, 107, 107),
+ (178, 102, 109), (169, 94, 102), (161, 85, 95), (153, 76, 90),
+ (151, 66, 82), (155, 62, 79), (156, 58, 76), (157, 55, 74),
+ (155, 53, 77), (154, 50, 75), (157, 52, 71), (162, 53, 68),
+ (161, 51, 67), (154, 48, 72), (144, 42, 76), (132, 35, 77),
+ (122, 33, 74), (114, 28, 71), (105, 23, 68), (102, 23, 67),
+ (98, 20, 68), (95, 21, 71), (95, 20, 73), (95, 20, 74),
+ (109, 32, 74), (120, 37, 72), (137, 56, 81), (157, 74, 93),
+ (167, 84, 107), (188, 111, 120), (194, 121, 124), (205, 142, 132)
+ ),
+
+// 564 Flame
+((132, 76, 52), (110, 62, 38), (101, 57, 31), (93, 52, 25),
+ (108, 66, 34), (124, 80, 43), (136, 90, 50), (148, 100, 58),
+ (189, 135, 84), (200, 141, 88), (211, 148, 92), (213, 144, 91),
+ (215, 141, 90), (209, 126, 84), (204, 112, 79), (201, 105, 74),
+ (198, 98, 70), (178, 77, 47), (171, 70, 38), (164, 63, 29),
+ (163, 63, 27), (162, 63, 26), (160, 64, 25), (158, 66, 24),
+ (148, 73, 25), (145, 68, 25), (143, 64, 26), (139, 54, 23),
+ (135, 45, 20), (133, 42, 19), (132, 40, 19), (130, 40, 19),
+ (134, 41, 23), (151, 53, 27), (162, 67, 28), (174, 82, 30),
+ (187, 99, 39), (201, 116, 48), (207, 125, 55), (214, 135, 62),
+ (230, 169, 81), (234, 176, 90), (239, 183, 99), (238, 185, 106),
+ (237, 187, 113), (234, 186, 115), (231, 186, 117), (229, 184, 117),
+ (226, 178, 113), (230, 168, 96), (226, 161, 87), (223, 155, 79),
+ (218, 146, 68), (213, 138, 57), (211, 133, 51), (209, 128, 45),
+ (188, 113, 37), (176, 103, 31), (165, 94, 25), (151, 82, 21),
+ (137, 70, 18), (129, 66, 17), (121, 62, 17), (106, 53, 16),
+ (93, 46, 11), (82, 34, 9), (82, 33, 9), (82, 33, 10),
+ (84, 34, 9), (86, 36, 8), (94, 41, 10), (107, 49, 11),
+ (139, 70, 14), (151, 77, 19), (164, 85, 25), (171, 87, 30),
+ (178, 89, 36), (179, 88, 35), (181, 88, 35), (177, 84, 33),
+ (172, 74, 31), (155, 48, 31), (144, 38, 26), (134, 28, 22),
+ (130, 25, 20), (126, 22, 18), (118, 18, 17), (113, 19, 17),
+ (110, 26, 20), (114, 33, 24), (119, 40, 29), (122, 45, 32),
+ (126, 50, 36), (136, 61, 43), (145, 69, 46), (149, 71, 47),
+ (153, 70, 45), (154, 60, 40), (149, 56, 38), (145, 52, 36),
+ (141, 50, 34), (138, 48, 33), (128, 44, 30), (124, 41, 26),
+ (125, 44, 29), (131, 54, 34), (137, 65, 40), (141, 72, 42),
+ (146, 79, 45), (154, 88, 49), (161, 95, 52), (167, 99, 50),
+ (174, 98, 47), (176, 87, 41), (174, 83, 39), (172, 79, 38),
+ (162, 70, 31), (155, 63, 24), (147, 54, 21), (141, 42, 18),
+ (130, 22, 13), (128, 20, 11), (126, 19, 10), (126, 18, 10),
+ (127, 18, 11), (128, 14, 10), (135, 11, 8), (148, 13, 5),
+ (158, 16, 5), (170, 25, 11), (170, 26, 13), (170, 28, 15),
+ (172, 34, 15), (173, 37, 17), (171, 40, 20), (164, 42, 24),
+ (139, 39, 26), (125, 36, 23), (111, 33, 21), (105, 30, 20),
+ (100, 28, 19), (96, 26, 17), (94, 21, 15), (95, 17, 12),
+ (99, 17, 8), (114, 16, 4), (120, 16, 4), (126, 17, 4),
+ (135, 22, 4), (140, 31, 3), (144, 34, 3), (144, 35, 3),
+ (151, 31, 4), (146, 32, 5), (142, 33, 7), (132, 32, 8),
+ (116, 29, 10), (108, 25, 8), (106, 20, 9), (103, 20, 12),
+ (106, 26, 16), (119, 50, 31), (124, 57, 35), (129, 65, 40),
+ (141, 81, 48), (153, 96, 52), (166, 109, 58), (179, 120, 65),
+ (191, 133, 76), (192, 133, 75), (193, 133, 75), (194, 134, 68),
+ (197, 131, 62), (192, 126, 59), (190, 121, 58), (190, 119, 60),
+ (196, 124, 65), (208, 133, 70), (217, 144, 79), (223, 152, 88),
+ (227, 161, 96), (232, 172, 108), (239, 186, 120), (246, 200, 132),
+ (251, 217, 150), (251, 218, 151), (252, 220, 152), (251, 221, 154),
+ (252, 221, 153), (253, 223, 155), (253, 221, 154), (253, 218, 151),
+ (251, 207, 142), (245, 196, 128), (239, 184, 113), (231, 171, 97),
+ (225, 162, 87), (218, 149, 75), (211, 136, 63), (204, 124, 50),
+ (198, 114, 39), (194, 109, 34), (190, 104, 32), (185, 99, 36),
+ (183, 93, 37), (179, 86, 37), (177, 84, 36), (174, 83, 35),
+ (168, 80, 38), (163, 80, 40), (158, 78, 42), (155, 80, 42),
+ (154, 83, 41), (151, 84, 41), (149, 84, 39), (147, 85, 38),
+ (146, 87, 38), (148, 92, 37), (150, 94, 38), (150, 92, 37),
+ (149, 90, 37), (145, 87, 36), (143, 87, 35), (140, 88, 36),
+ (138, 87, 35), (135, 86, 37), (132, 84, 38), (130, 80, 35),
+ (128, 77, 35), (128, 74, 31), (127, 72, 31), (130, 72, 35),
+ (133, 75, 35), (140, 80, 40), (151, 88, 44), (159, 97, 50),
+ (168, 107, 59), (169, 114, 64), (171, 116, 68), (173, 117, 69),
+ (172, 112, 69), (172, 105, 67), (166, 95, 62), (160, 83, 57),
+ (155, 77, 52), (152, 72, 49), (154, 71, 47), (158, 69, 51),
+ (164, 69, 55), (173, 76, 60), (183, 89, 66), (191, 105, 69),
+ (180, 103, 67), (166, 95, 63), (148, 83, 58), (132, 70, 51)
+ ),
+
+// 565 Flying_a_Kite
+((90, 150, 101), (83, 161, 102), (69, 169, 104), (56, 177, 107),
+ (69, 175, 117), (83, 174, 127), (91, 170, 124), (99, 166, 122),
+ (116, 171, 78), (118, 164, 58), (121, 158, 38), (110, 155, 30),
+ (100, 152, 23), (101, 153, 26), (103, 154, 29), (105, 150, 36),
+ (108, 147, 43), (104, 173, 67), (113, 185, 77), (122, 197, 88),
+ (127, 203, 83), (132, 210, 78), (134, 214, 77), (136, 218, 77),
+ (135, 202, 68), (126, 200, 58), (118, 199, 49), (110, 203, 57),
+ (103, 208, 66), (111, 212, 76), (119, 216, 86), (116, 221, 104),
+ (109, 207, 108), (125, 172, 95), (127, 144, 93), (129, 117, 92),
+ (132, 96, 68), (136, 75, 45), (135, 72, 34), (135, 70, 24),
+ (147, 76, 27), (144, 93, 23), (142, 110, 20), (143, 108, 25),
+ (144, 107, 31), (140, 100, 31), (136, 93, 31), (112, 89, 36),
+ (103, 74, 49), (94, 58, 53), (76, 70, 65), (58, 82, 78),
+ (53, 98, 90), (48, 114, 102), (40, 122, 96), (33, 131, 90),
+ (28, 150, 85), (30, 144, 83), (32, 138, 81), (32, 134, 59),
+ (32, 131, 37), (28, 120, 34), (25, 110, 31), (28, 86, 37),
+ (25, 79, 31), (30, 81, 20), (40, 90, 37), (51, 99, 54),
+ (50, 104, 59), (50, 110, 65), (51, 121, 74), (59, 131, 86),
+ (82, 138, 115), (86, 117, 123), (90, 97, 132), (114, 84, 127),
+ (139, 71, 123), (148, 70, 115), (157, 69, 107), (181, 79, 95),
+ (199, 100, 79), (210, 121, 59), (208, 131, 56), (206, 141, 53),
+ (206, 146, 62), (206, 152, 71), (204, 164, 92), (203, 169, 101),
+ (181, 186, 132), (167, 195, 144), (153, 205, 156), (144, 200, 153),
+ (136, 195, 151), (125, 192, 131), (112, 178, 116), (108, 161, 93),
+ (102, 146, 75), (121, 158, 40), (135, 164, 36), (149, 170, 33),
+ (161, 181, 35), (173, 193, 38), (186, 216, 46), (202, 227, 57),
+ (221, 229, 84), (223, 221, 91), (226, 214, 98), (223, 209, 93),
+ (221, 205, 88), (224, 196, 78), (221, 177, 69), (213, 164, 65),
+ (200, 162, 53), (192, 158, 37), (191, 151, 35), (190, 144, 34),
+ (178, 138, 30), (163, 142, 34), (149, 150, 45), (143, 155, 57),
+ (130, 157, 84), (119, 171, 106), (108, 186, 129), (107, 191, 139),
+ (107, 196, 149), (101, 203, 165), (88, 206, 179), (67, 205, 185),
+ (53, 198, 182), (47, 180, 179), (47, 167, 182), (48, 155, 185),
+ (57, 124, 186), (60, 95, 179), (91, 82, 178), (115, 67, 188),
+ (133, 49, 181), (140, 62, 178), (148, 76, 175), (149, 81, 176),
+ (150, 87, 178), (122, 107, 168), (97, 121, 159), (77, 122, 163),
+ (66, 103, 182), (36, 108, 189), (33, 107, 189), (31, 107, 190),
+ (33, 86, 203), (40, 80, 222), (45, 100, 230), (53, 120, 233),
+ (56, 120, 227), (54, 127, 225), (53, 134, 223), (50, 155, 223),
+ (42, 171, 222), (46, 171, 212), (55, 164, 198), (75, 166, 197),
+ (88, 164, 191), (118, 114, 151), (123, 101, 146), (129, 88, 141),
+ (131, 70, 135), (129, 59, 128), (129, 57, 124), (123, 66, 136),
+ (135, 111, 176), (146, 124, 184), (157, 137, 193), (171, 168, 195),
+ (183, 189, 188), (196, 207, 174), (209, 207, 160), (224, 211, 128),
+ (224, 213, 96), (224, 220, 67), (223, 211, 48), (225, 193, 34),
+ (220, 174, 28), (210, 161, 36), (207, 151, 42), (205, 139, 53),
+ (178, 142, 103), (173, 147, 118), (168, 152, 133), (176, 161, 157),
+ (195, 177, 175), (199, 174, 182), (190, 167, 185), (183, 155, 174),
+ (190, 165, 163), (187, 155, 143), (170, 148, 126), (153, 151, 110),
+ (145, 177, 104), (140, 198, 106), (122, 211, 115), (107, 226, 135),
+ (95, 230, 147), (89, 226, 153), (79, 206, 149), (70, 182, 144),
+ (62, 151, 140), (56, 128, 140), (50, 107, 145), (40, 84, 144),
+ (48, 53, 152), (69, 40, 160), (87, 49, 182), (82, 72, 194),
+ (80, 94, 215), (97, 114, 227), (122, 138, 236), (132, 168, 235),
+ (134, 201, 237), (143, 221, 241), (159, 231, 243), (173, 238, 243),
+ (179, 241, 239), (183, 238, 230), (192, 235, 216), (203, 237, 201),
+ (194, 235, 175), (180, 221, 151), (165, 205, 123), (164, 195, 101),
+ (158, 193, 69), (154, 186, 50), (148, 177, 40), (149, 167, 47),
+ (151, 167, 50), (159, 176, 64), (162, 187, 80), (163, 198, 115),
+ (158, 204, 137), (155, 208, 166), (151, 211, 177), (146, 215, 192),
+ (135, 216, 200), (126, 208, 214), (115, 199, 216), (107, 190, 211),
+ (99, 189, 207), (101, 183, 215), (91, 178, 225), (78, 178, 230),
+ (72, 187, 227), (86, 187, 230), (97, 179, 226), (102, 167, 220),
+ (115, 161, 198), (134, 158, 169), (118, 154, 129), (101, 149, 106)
+ ),
+
+// 566 Foamy_Waves
+((40, 46, 134), (48, 54, 142), (51, 57, 146), (55, 61, 151),
+ (58, 68, 156), (62, 75, 162), (62, 77, 164), (63, 80, 166),
+ (63, 86, 169), (61, 89, 169), (60, 93, 169), (58, 94, 169),
+ (56, 95, 169), (54, 95, 167), (52, 96, 166), (50, 95, 165),
+ (49, 95, 165), (44, 93, 162), (40, 88, 159), (36, 84, 156),
+ (31, 79, 149), (26, 75, 143), (23, 73, 140), (21, 71, 137),
+ (13, 64, 126), (11, 62, 122), (10, 61, 119), (10, 64, 119),
+ (11, 67, 119), (12, 70, 121), (14, 74, 123), (21, 81, 127),
+ (29, 92, 131), (59, 106, 132), (72, 113, 133), (86, 120, 135),
+ (100, 130, 138), (115, 140, 141), (122, 141, 138), (130, 142, 136),
+ (166, 168, 147), (169, 172, 159), (173, 177, 171), (180, 182, 176),
+ (187, 187, 181), (189, 188, 182), (191, 190, 184), (191, 184, 185),
+ (191, 184, 188), (185, 173, 180), (182, 163, 167), (179, 153, 154),
+ (170, 145, 154), (162, 138, 154), (155, 130, 152), (149, 123, 150),
+ (108, 98, 131), (91, 84, 127), (75, 70, 123), (57, 55, 119),
+ (40, 41, 115), (33, 37, 113), (26, 33, 111), (18, 27, 100),
+ (13, 23, 92), (7, 19, 79), (8, 24, 76), (9, 29, 73),
+ (9, 30, 71), (10, 31, 70), (13, 36, 70), (15, 39, 70),
+ (15, 45, 71), (14, 45, 69), (14, 46, 67), (13, 45, 64),
+ (13, 45, 62), (13, 45, 61), (13, 45, 60), (13, 43, 56),
+ (13, 43, 55), (14, 46, 55), (14, 49, 58), (15, 53, 62),
+ (16, 54, 63), (17, 55, 64), (18, 55, 67), (18, 56, 69),
+ (18, 54, 73), (18, 52, 72), (18, 50, 71), (18, 48, 70),
+ (18, 47, 69), (18, 43, 66), (17, 40, 64), (17, 39, 64),
+ (15, 36, 66), (14, 35, 74), (15, 37, 79), (17, 39, 85),
+ (17, 39, 87), (18, 40, 90), (21, 45, 97), (22, 48, 101),
+ (25, 50, 105), (28, 56, 106), (32, 62, 108), (34, 65, 108),
+ (36, 68, 108), (39, 72, 108), (40, 73, 107), (41, 78, 108),
+ (41, 80, 109), (48, 92, 116), (49, 94, 117), (51, 96, 119),
+ (52, 100, 123), (54, 103, 126), (54, 104, 127), (52, 104, 127),
+ (47, 104, 123), (43, 101, 119), (40, 98, 116), (38, 97, 113),
+ (36, 96, 111), (32, 93, 105), (29, 88, 100), (26, 82, 94),
+ (24, 78, 90), (18, 64, 82), (17, 60, 80), (17, 56, 79),
+ (14, 53, 77), (13, 46, 73), (11, 38, 70), (6, 32, 67),
+ (0, 23, 63), (0, 21, 61), (0, 20, 59), (0, 20, 58),
+ (0, 20, 58), (0, 18, 56), (0, 18, 55), (0, 17, 54),
+ (0, 17, 54), (0, 11, 52), (0, 10, 51), (0, 10, 51),
+ (0, 7, 49), (0, 7, 49), (0, 6, 48), (0, 6, 48),
+ (0, 8, 49), (0, 8, 49), (0, 8, 49), (0, 10, 51),
+ (0, 11, 52), (0, 13, 54), (0, 14, 56), (0, 15, 58),
+ (0, 16, 59), (0, 19, 62), (0, 19, 62), (0, 19, 62),
+ (0, 21, 63), (0, 24, 64), (0, 26, 66), (0, 26, 67),
+ (0, 34, 73), (0, 34, 74), (0, 35, 75), (0, 36, 78),
+ (0, 36, 81), (0, 38, 85), (0, 41, 88), (0, 39, 90),
+ (0, 38, 93), (0, 36, 94), (0, 35, 97), (0, 32, 98),
+ (0, 31, 100), (0, 27, 103), (0, 24, 105), (0, 23, 108),
+ (0, 15, 113), (0, 14, 115), (0, 13, 117), (0, 12, 123),
+ (0, 10, 128), (0, 8, 134), (1, 5, 139), (3, 5, 146),
+ (9, 7, 151), (17, 10, 157), (20, 13, 162), (24, 14, 168),
+ (28, 15, 172), (30, 17, 175), (28, 15, 177), (28, 15, 179),
+ (25, 14, 180), (22, 14, 181), (19, 14, 183), (16, 14, 184),
+ (14, 14, 184), (15, 17, 184), (15, 23, 183), (15, 26, 180),
+ (15, 28, 177), (15, 30, 173), (13, 31, 168), (10, 32, 162),
+ (6, 31, 157), (3, 30, 151), (1, 30, 147), (0, 31, 146),
+ (0, 31, 145), (0, 31, 145), (0, 31, 145), (0, 29, 146),
+ (0, 27, 147), (0, 27, 149), (0, 27, 150), (0, 24, 149),
+ (0, 24, 147), (0, 24, 145), (0, 26, 142), (0, 20, 139),
+ (0, 23, 138), (0, 22, 137), (0, 16, 137), (0, 16, 137),
+ (0, 13, 137), (0, 9, 137), (1, 7, 137), (3, 9, 135),
+ (5, 11, 134), (6, 12, 130), (7, 14, 126), (9, 16, 120),
+ (10, 16, 113), (10, 16, 109), (10, 16, 105), (11, 17, 104),
+ (13, 17, 103), (14, 17, 103), (17, 20, 105), (18, 18, 108),
+ (24, 21, 112), (25, 22, 116), (28, 25, 120), (32, 28, 123),
+ (33, 30, 124), (33, 32, 127), (35, 35, 128), (37, 40, 131)
+ ),
+
+// 567 For_Lenora
+((169, 132, 163), (182, 138, 195), (176, 127, 195), (170, 117, 196),
+ (162, 104, 191), (154, 92, 187), (147, 81, 179), (141, 71, 171),
+ (111, 41, 143), (99, 39, 127), (88, 37, 112), (79, 39, 108),
+ (71, 42, 104), (69, 48, 107), (68, 54, 110), (69, 58, 117),
+ (70, 63, 125), (76, 91, 148), (88, 109, 163), (101, 128, 179),
+ (122, 143, 189), (144, 159, 199), (153, 167, 204), (163, 175, 210),
+ (171, 193, 224), (169, 190, 221), (167, 187, 219), (156, 179, 219),
+ (146, 171, 219), (134, 163, 214), (122, 155, 209), (105, 140, 189),
+ (93, 125, 166), (78, 117, 133), (64, 115, 108), (51, 113, 83),
+ (42, 116, 68), (33, 120, 53), (29, 119, 48), (26, 118, 44),
+ (33, 113, 45), (39, 101, 48), (46, 90, 52), (58, 78, 57),
+ (70, 67, 62), (75, 62, 63), (81, 58, 65), (80, 52, 71),
+ (76, 51, 78), (58, 38, 96), (59, 39, 102), (60, 40, 109),
+ (56, 34, 121), (53, 28, 134), (59, 23, 136), (65, 19, 139),
+ (91, 22, 134), (88, 19, 130), (86, 17, 127), (90, 15, 119),
+ (95, 14, 111), (91, 16, 109), (88, 18, 108), (84, 19, 109),
+ (85, 24, 107), (92, 23, 95), (86, 27, 93), (81, 31, 92),
+ (80, 33, 88), (80, 36, 85), (78, 34, 76), (68, 27, 65),
+ (44, 25, 53), (38, 20, 47), (32, 15, 41), (26, 18, 37),
+ (21, 22, 33), (20, 22, 39), (19, 23, 45), (20, 14, 51),
+ (20, 14, 53), (34, 19, 69), (49, 12, 83), (64, 5, 98),
+ (69, 9, 101), (75, 13, 104), (76, 27, 104), (72, 44, 97),
+ (73, 88, 91), (75, 107, 90), (77, 126, 90), (74, 126, 93),
+ (72, 126, 97), (72, 126, 97), (80, 110, 103), (94, 94, 114),
+ (107, 75, 131), (122, 51, 140), (125, 43, 140), (128, 36, 140),
+ (129, 37, 134), (131, 39, 129), (136, 45, 114), (140, 47, 102),
+ (131, 37, 94), (121, 29, 81), (112, 21, 69), (108, 22, 64),
+ (105, 23, 59), (94, 30, 60), (83, 31, 58), (71, 32, 55),
+ (66, 33, 50), (73, 40, 49), (75, 44, 52), (78, 48, 56),
+ (89, 56, 66), (113, 69, 79), (137, 77, 98), (159, 98, 115),
+ (187, 129, 139), (196, 142, 158), (206, 155, 177), (208, 160, 185),
+ (211, 165, 194), (215, 172, 196), (216, 169, 196), (209, 168, 195),
+ (192, 164, 194), (160, 146, 156), (153, 138, 144), (147, 130, 133),
+ (121, 114, 123), (97, 95, 107), (79, 79, 88), (73, 63, 73),
+ (69, 46, 73), (75, 46, 70), (82, 47, 68), (87, 51, 70),
+ (93, 55, 72), (102, 59, 86), (111, 68, 104), (118, 79, 123),
+ (130, 98, 139), (146, 119, 173), (144, 118, 181), (142, 117, 190),
+ (140, 114, 200), (137, 113, 199), (141, 106, 189), (136, 99, 169),
+ (114, 74, 130), (108, 71, 120), (103, 68, 111), (96, 71, 85),
+ (96, 79, 64), (89, 85, 47), (82, 91, 42), (77, 93, 44),
+ (81, 105, 61), (102, 139, 102), (103, 138, 110), (104, 138, 119),
+ (100, 128, 137), (93, 121, 147), (91, 126, 147), (91, 134, 143),
+ (106, 134, 137), (111, 135, 139), (117, 136, 141), (130, 149, 142),
+ (136, 155, 150), (149, 152, 146), (151, 132, 157), (148, 114, 159),
+ (131, 91, 162), (118, 71, 140), (98, 49, 121), (80, 37, 96),
+ (57, 31, 79), (46, 36, 58), (36, 44, 47), (30, 60, 36),
+ (21, 81, 19), (22, 82, 23), (23, 83, 28), (33, 84, 42),
+ (50, 88, 55), (71, 91, 57), (96, 90, 69), (121, 89, 84),
+ (142, 89, 104), (163, 102, 112), (186, 101, 120), (205, 99, 127),
+ (215, 95, 141), (218, 108, 150), (220, 116, 160), (216, 117, 169),
+ (210, 120, 182), (206, 130, 193), (205, 145, 202), (200, 154, 211),
+ (200, 165, 218), (204, 170, 220), (201, 169, 214), (191, 159, 205),
+ (183, 147, 196), (177, 135, 177), (160, 119, 157), (135, 105, 141),
+ (114, 92, 133), (106, 83, 124), (100, 75, 120), (100, 76, 125),
+ (108, 89, 138), (126, 107, 153), (140, 122, 170), (143, 133, 185),
+ (144, 142, 196), (148, 150, 201), (152, 147, 203), (149, 146, 197),
+ (143, 141, 195), (142, 140, 196), (146, 132, 199), (162, 134, 197),
+ (178, 142, 197), (194, 156, 206), (202, 167, 218), (215, 179, 226),
+ (225, 187, 227), (231, 193, 226), (226, 195, 227), (217, 193, 228),
+ (199, 189, 222), (182, 172, 205), (162, 154, 188), (145, 140, 167),
+ (123, 145, 143), (111, 146, 117), (106, 136, 99), (108, 120, 91),
+ (113, 114, 85), (118, 121, 88), (126, 121, 96), (127, 111, 108),
+ (133, 96, 118), (139, 85, 126), (144, 81, 130), (146, 80, 129),
+ (150, 90, 140), (159, 95, 144), (158, 106, 147), (164, 112, 142)
+ ),
+
+// 568 For_Stacy
+((169, 133, 132), (195, 138, 160), (195, 127, 157), (196, 117, 155),
+ (191, 104, 147), (187, 92, 140), (179, 81, 128), (171, 71, 116),
+ (143, 41, 88), (127, 39, 80), (112, 37, 72), (108, 39, 78),
+ (104, 42, 84), (107, 48, 94), (110, 54, 104), (116, 58, 114),
+ (123, 63, 125), (122, 76, 148), (131, 88, 163), (140, 101, 179),
+ (158, 122, 189), (176, 144, 199), (183, 153, 204), (191, 163, 210),
+ (194, 171, 224), (193, 169, 221), (192, 167, 219), (187, 156, 219),
+ (183, 146, 219), (173, 134, 214), (163, 122, 209), (141, 105, 189),
+ (123, 93, 166), (85, 78, 133), (68, 84, 123), (51, 90, 113),
+ (42, 101, 116), (33, 113, 120), (29, 113, 119), (26, 113, 118),
+ (33, 113, 113), (39, 101, 101), (46, 90, 89), (56, 80, 75),
+ (66, 70, 62), (73, 70, 60), (81, 70, 58), (80, 56, 52),
+ (78, 51, 57), (96, 38, 84), (102, 39, 92), (109, 40, 100),
+ (121, 34, 112), (134, 28, 125), (136, 23, 118), (139, 19, 111),
+ (134, 22, 82), (130, 19, 78), (127, 17, 74), (119, 15, 59),
+ (111, 14, 44), (109, 16, 47), (108, 18, 51), (109, 19, 58),
+ (107, 24, 58), (95, 23, 37), (93, 27, 44), (92, 31, 51),
+ (88, 33, 49), (85, 36, 48), (78, 34, 38), (68, 27, 30),
+ (53, 25, 38), (47, 20, 33), (41, 15, 28), (35, 18, 30),
+ (30, 21, 33), (33, 20, 39), (37, 19, 45), (51, 14, 50),
+ (53, 14, 53), (69, 19, 61), (83, 12, 57), (98, 5, 53),
+ (101, 9, 54), (104, 13, 55), (104, 27, 67), (97, 44, 76),
+ (73, 73, 91), (75, 96, 108), (77, 120, 126), (74, 114, 126),
+ (72, 109, 126), (72, 109, 126), (80, 91, 110), (111, 94, 114),
+ (131, 75, 108), (140, 51, 82), (140, 43, 72), (140, 36, 63),
+ (135, 37, 57), (131, 39, 51), (136, 54, 45), (140, 72, 47),
+ (131, 60, 37), (121, 55, 29), (112, 50, 21), (108, 53, 22),
+ (105, 57, 23), (94, 54, 30), (83, 48, 31), (71, 42, 32),
+ (66, 44, 33), (73, 59, 40), (75, 62, 44), (78, 65, 48),
+ (89, 74, 56), (113, 96, 69), (137, 107, 77), (159, 133, 98),
+ (187, 169, 129), (196, 172, 142), (206, 176, 155), (208, 175, 160),
+ (211, 175, 165), (215, 185, 172), (216, 183, 169), (209, 176, 168),
+ (194, 164, 171), (160, 148, 146), (153, 144, 138), (147, 141, 130),
+ (123, 114, 117), (107, 95, 107), (86, 79, 88), (73, 63, 64),
+ (73, 46, 54), (77, 50, 50), (82, 55, 47), (87, 62, 51),
+ (93, 70, 55), (102, 68, 59), (111, 68, 68), (123, 79, 91),
+ (139, 98, 113), (173, 119, 154), (181, 118, 165), (190, 117, 176),
+ (200, 114, 187), (199, 113, 188), (189, 106, 167), (169, 99, 142),
+ (130, 74, 98), (120, 71, 90), (111, 68, 82), (96, 78, 71),
+ (86, 96, 64), (57, 89, 47), (42, 91, 43), (44, 93, 53),
+ (61, 105, 78), (102, 139, 133), (103, 133, 135), (104, 128, 138),
+ (104, 100, 137), (111, 93, 147), (104, 91, 147), (92, 91, 143),
+ (106, 107, 137), (112, 112, 139), (119, 117, 141), (130, 140, 149),
+ (136, 144, 155), (146, 152, 148), (157, 132, 142), (159, 114, 132),
+ (162, 91, 132), (140, 71, 103), (121, 49, 82), (96, 37, 61),
+ (79, 31, 60), (58, 36, 51), (37, 36, 47), (30, 58, 60),
+ (19, 81, 69), (21, 82, 74), (23, 83, 79), (33, 82, 84),
+ (50, 88, 87), (57, 91, 72), (79, 96, 69), (121, 120, 84),
+ (142, 119, 89), (163, 144, 102), (186, 155, 101), (205, 161, 99),
+ (215, 151, 95), (218, 159, 108), (220, 161, 116), (216, 148, 117),
+ (210, 135, 120), (206, 131, 130), (205, 145, 151), (211, 154, 174),
+ (218, 165, 191), (220, 170, 194), (214, 169, 189), (205, 159, 180),
+ (196, 147, 168), (177, 135, 141), (160, 119, 122), (141, 105, 116),
+ (133, 92, 117), (124, 83, 107), (120, 75, 102), (125, 76, 109),
+ (138, 89, 127), (153, 107, 141), (170, 122, 159), (185, 133, 183),
+ (190, 142, 196), (192, 148, 201), (200, 147, 203), (193, 146, 197),
+ (189, 141, 195), (190, 140, 196), (199, 132, 195), (197, 134, 178),
+ (197, 142, 170), (206, 156, 175), (218, 167, 191), (226, 179, 197),
+ (227, 187, 195), (231, 193, 194), (227, 195, 201), (228, 193, 210),
+ (222, 189, 217), (205, 172, 200), (188, 154, 185), (167, 140, 166),
+ (123, 128, 145), (111, 145, 146), (99, 136, 124), (91, 120, 99),
+ (88, 114, 85), (90, 121, 88), (105, 126, 96), (127, 127, 108),
+ (133, 105, 96), (139, 89, 85), (144, 85, 81), (146, 86, 80),
+ (150, 91, 90), (159, 100, 95), (158, 109, 106), (164, 126, 112)
+ ),
+
+// 569 Forest
+((45, 71, 45), (42, 66, 42), (39, 61, 41), (36, 56, 41),
+ (32, 49, 35), (29, 42, 29), (32, 33, 27), (35, 25, 25),
+ (35, 25, 25), (35, 25, 25), (35, 25, 25), (35, 25, 25),
+ (35, 25, 25), (30, 30, 25), (25, 36, 25), (25, 36, 25),
+ (25, 37, 25), (33, 43, 28), (40, 48, 30), (47, 54, 32),
+ (54, 60, 33), (62, 67, 35), (65, 70, 35), (69, 74, 36),
+ (80, 84, 39), (84, 88, 41), (89, 93, 43), (92, 96, 44),
+ (96, 100, 45), (96, 100, 45), (97, 101, 45), (95, 101, 45),
+ (94, 100, 45), (88, 92, 41), (83, 87, 40), (78, 82, 39),
+ (72, 77, 37), (67, 72, 36), (63, 70, 36), (60, 68, 36),
+ (54, 64, 34), (51, 64, 34), (48, 64, 35), (50, 65, 36),
+ (52, 67, 38), (54, 68, 38), (56, 70, 39), (56, 73, 41),
+ (54, 75, 43), (57, 79, 44), (57, 79, 44), (58, 80, 44),
+ (57, 78, 43), (57, 77, 43), (55, 76, 43), (54, 75, 43),
+ (45, 67, 41), (40, 62, 38), (36, 58, 36), (33, 53, 35),
+ (31, 49, 35), (30, 47, 34), (29, 45, 34), (27, 41, 34),
+ (26, 38, 38), (35, 25, 25), (35, 25, 25), (35, 25, 25),
+ (35, 25, 25), (35, 25, 25), (35, 25, 25), (35, 25, 25),
+ (25, 37, 25), (26, 40, 29), (28, 43, 33), (31, 48, 36),
+ (35, 54, 39), (36, 57, 42), (38, 61, 45), (43, 70, 51),
+ (55, 82, 51), (88, 109, 62), (98, 118, 65), (109, 127, 69),
+ (113, 130, 70), (118, 133, 72), (119, 136, 71), (117, 136, 71),
+ (116, 133, 69), (117, 131, 67), (118, 130, 66), (116, 128, 64),
+ (115, 126, 62), (114, 121, 60), (111, 113, 56), (101, 105, 49),
+ (86, 91, 44), (65, 70, 34), (61, 64, 31), (57, 59, 28),
+ (56, 58, 27), (56, 58, 27), (58, 58, 28), (59, 61, 29),
+ (61, 61, 31), (58, 61, 31), (56, 61, 32), (56, 60, 31),
+ (56, 59, 31), (56, 59, 31), (58, 58, 30), (59, 59, 29),
+ (58, 58, 29), (55, 55, 28), (53, 53, 28), (51, 51, 28),
+ (47, 47, 27), (42, 42, 27), (38, 38, 26), (36, 26, 26),
+ (35, 25, 25), (35, 25, 25), (35, 25, 25), (35, 25, 25),
+ (35, 25, 25), (35, 25, 25), (35, 25, 25), (35, 25, 25),
+ (35, 25, 25), (35, 25, 25), (35, 25, 25), (35, 25, 25),
+ (35, 25, 25), (35, 25, 25), (25, 36, 25), (36, 36, 25),
+ (33, 38, 24), (33, 38, 24), (33, 38, 24), (35, 37, 24),
+ (37, 37, 24), (37, 37, 24), (37, 37, 25), (37, 37, 25),
+ (37, 37, 25), (30, 40, 25), (31, 40, 25), (33, 41, 25),
+ (31, 41, 26), (31, 41, 26), (27, 41, 27), (26, 41, 31),
+ (27, 42, 37), (27, 43, 35), (28, 44, 33), (29, 47, 34),
+ (31, 51, 39), (34, 56, 38), (37, 62, 37), (40, 67, 43),
+ (44, 71, 44), (54, 83, 50), (55, 87, 53), (56, 91, 56),
+ (67, 103, 63), (72, 116, 72), (81, 131, 85), (92, 147, 96),
+ (115, 178, 120), (120, 184, 122), (125, 191, 125), (129, 200, 143),
+ (132, 206, 146), (136, 209, 145), (134, 209, 151), (132, 209, 145),
+ (133, 208, 133), (139, 206, 130), (151, 205, 128), (156, 200, 123),
+ (155, 193, 117), (152, 184, 109), (137, 169, 101), (123, 153, 89),
+ (93, 119, 64), (88, 111, 59), (84, 104, 55), (79, 91, 46),
+ (74, 83, 40), (73, 77, 36), (66, 71, 34), (59, 66, 33),
+ (52, 62, 32), (49, 57, 31), (44, 54, 32), (42, 53, 32),
+ (41, 53, 33), (46, 56, 33), (50, 59, 34), (60, 63, 36),
+ (65, 68, 37), (72, 72, 38), (78, 78, 41), (80, 85, 46),
+ (89, 94, 50), (97, 107, 58), (108, 121, 66), (115, 134, 74),
+ (121, 143, 80), (129, 148, 82), (133, 151, 83), (134, 152, 83),
+ (131, 152, 82), (137, 154, 81), (142, 161, 82), (151, 172, 87),
+ (158, 184, 95), (163, 195, 103), (171, 205, 112), (184, 212, 114),
+ (188, 213, 114), (190, 210, 111), (184, 203, 105), (187, 198, 97),
+ (185, 196, 94), (184, 194, 92), (177, 194, 94), (179, 192, 95),
+ (174, 190, 98), (171, 186, 98), (157, 177, 95), (146, 164, 88),
+ (136, 148, 78), (120, 132, 67), (101, 115, 59), (88, 100, 51),
+ (73, 88, 47), (65, 79, 44), (58, 72, 41), (50, 66, 38),
+ (41, 60, 37), (35, 56, 39), (33, 52, 33), (32, 51, 32),
+ (33, 52, 33), (34, 55, 34), (41, 60, 37), (41, 66, 41),
+ (45, 72, 45), (45, 71, 45), (43, 70, 43), (42, 69, 46),
+ (42, 68, 45), (42, 67, 42), (44, 66, 40), (41, 66, 41)
+ ),
+
+// 570 Frivolous
+((36, 180, 78), (49, 157, 77), (71, 156, 68), (93, 155, 59),
+ (123, 140, 55), (154, 125, 51), (165, 118, 52), (176, 112, 54),
+ (210, 76, 47), (202, 78, 49), (195, 80, 52), (179, 86, 47),
+ (163, 93, 43), (157, 103, 43), (152, 113, 44), (145, 121, 41),
+ (139, 129, 38), (137, 135, 28), (151, 133, 34), (165, 132, 41),
+ (170, 130, 43), (176, 128, 46), (183, 127, 45), (190, 127, 44),
+ (212, 131, 44), (221, 129, 44), (230, 128, 45), (225, 126, 38),
+ (221, 124, 32), (216, 121, 32), (211, 118, 33), (199, 110, 41),
+ (182, 115, 48), (168, 124, 68), (176, 138, 91), (184, 153, 114),
+ (194, 167, 136), (205, 182, 159), (215, 189, 170), (226, 196, 181),
+ (249, 219, 196), (251, 215, 189), (253, 212, 182), (252, 199, 153),
+ (251, 187, 124), (251, 179, 112), (251, 172, 101), (253, 156, 78),
+ (249, 139, 58), (242, 122, 24), (236, 120, 25), (230, 119, 27),
+ (224, 115, 30), (219, 111, 34), (216, 113, 36), (214, 115, 38),
+ (187, 118, 54), (176, 125, 68), (166, 132, 83), (168, 139, 93),
+ (170, 147, 104), (172, 154, 110), (174, 162, 117), (176, 183, 135),
+ (168, 193, 148), (170, 196, 143), (157, 192, 133), (145, 188, 124),
+ (137, 178, 116), (129, 169, 109), (124, 146, 86), (131, 127, 79),
+ (156, 86, 55), (172, 78, 50), (188, 71, 46), (208, 72, 46),
+ (229, 73, 46), (233, 76, 45), (238, 79, 45), (237, 90, 44),
+ (238, 96, 43), (248, 100, 45), (239, 105, 50), (230, 110, 56),
+ (224, 112, 57), (219, 115, 59), (207, 122, 63), (188, 134, 72),
+ (146, 153, 82), (133, 154, 80), (120, 156, 79), (115, 155, 81),
+ (110, 154, 83), (109, 151, 85), (113, 142, 84), (122, 130, 77),
+ (137, 116, 75), (176, 95, 72), (193, 95, 75), (210, 95, 79),
+ (217, 98, 84), (225, 101, 89), (236, 105, 101), (242, 110, 104),
+ (249, 143, 133), (249, 154, 146), (250, 165, 159), (247, 164, 157),
+ (245, 164, 156), (239, 159, 149), (234, 162, 145), (233, 160, 136),
+ (225, 150, 125), (197, 121, 95), (194, 120, 91), (192, 119, 87),
+ (187, 116, 84), (178, 110, 83), (160, 101, 79), (147, 99, 76),
+ (126, 92, 63), (119, 87, 62), (112, 82, 62), (108, 79, 63),
+ (104, 76, 65), (104, 71, 60), (108, 66, 62), (125, 76, 69),
+ (147, 87, 89), (183, 101, 107), (190, 108, 105), (197, 115, 104),
+ (214, 129, 102), (230, 135, 100), (243, 134, 99), (247, 137, 91),
+ (243, 139, 79), (244, 139, 84), (246, 139, 89), (243, 139, 92),
+ (241, 140, 96), (239, 138, 98), (240, 136, 99), (241, 130, 103),
+ (238, 118, 105), (219, 82, 97), (212, 73, 93), (206, 65, 90),
+ (205, 58, 83), (199, 55, 81), (203, 61, 86), (201, 70, 88),
+ (214, 106, 88), (220, 117, 93), (226, 129, 99), (233, 149, 111),
+ (231, 165, 112), (220, 173, 104), (208, 172, 96), (193, 169, 99),
+ (176, 159, 98), (147, 120, 68), (142, 112, 61), (137, 104, 54),
+ (129, 92, 46), (128, 86, 47), (137, 75, 48), (145, 74, 44),
+ (148, 100, 55), (157, 108, 63), (166, 117, 71), (183, 133, 77),
+ (197, 154, 68), (205, 172, 61), (215, 180, 57), (219, 175, 61),
+ (226, 175, 52), (236, 172, 37), (242, 163, 25), (243, 150, 33),
+ (236, 141, 46), (234, 134, 52), (236, 123, 50), (234, 114, 51),
+ (216, 112, 55), (212, 112, 53), (208, 112, 51), (201, 110, 46),
+ (201, 108, 55), (203, 115, 67), (208, 125, 85), (214, 140, 99),
+ (220, 155, 111), (222, 179, 124), (218, 187, 126), (202, 186, 130),
+ (184, 169, 122), (162, 161, 120), (146, 143, 101), (121, 122, 88),
+ (102, 91, 77), (96, 68, 77), (111, 48, 76), (135, 41, 72),
+ (151, 38, 68), (171, 45, 64), (190, 56, 66), (212, 69, 68),
+ (218, 81, 73), (216, 87, 82), (212, 98, 92), (212, 110, 100),
+ (214, 118, 106), (211, 112, 110), (213, 99, 108), (219, 92, 104),
+ (231, 89, 99), (240, 82, 90), (237, 70, 79), (227, 61, 71),
+ (215, 66, 70), (214, 75, 74), (211, 94, 80), (204, 108, 89),
+ (196, 123, 101), (200, 131, 114), (211, 143, 124), (222, 148, 128),
+ (226, 148, 132), (230, 134, 136), (235, 117, 138), (241, 106, 131),
+ (246, 108, 124), (244, 108, 116), (234, 100, 109), (219, 94, 100),
+ (205, 99, 94), (187, 111, 89), (166, 118, 85), (140, 115, 80),
+ (117, 108, 76), (102, 105, 74), (91, 112, 72), (85, 116, 74),
+ (81, 114, 77), (81, 112, 80), (80, 119, 77), (75, 127, 76),
+ (73, 129, 76), (70, 131, 82), (69, 139, 80), (62, 149, 78),
+ (52, 152, 74), (43, 145, 77), (38, 148, 79), (38, 166, 78)
+ ),
+
+// 571 Fun_Stuff
+((41, 88, 87), (43, 107, 62), (54, 105, 64), (66, 103, 66),
+ (86, 105, 67), (107, 107, 69), (115, 112, 62), (124, 117, 56),
+ (139, 127, 28), (147, 127, 23), (156, 128, 18), (168, 129, 19),
+ (181, 130, 20), (183, 126, 18), (185, 123, 17), (182, 120, 19),
+ (179, 117, 22), (153, 112, 44), (148, 108, 54), (144, 104, 64),
+ (152, 91, 73), (160, 78, 83), (162, 74, 88), (165, 70, 93),
+ (161, 77, 108), (159, 81, 106), (157, 86, 105), (155, 87, 105),
+ (153, 89, 105), (149, 91, 104), (145, 94, 104), (133, 101, 98),
+ (119, 115, 88), (85, 134, 65), (72, 143, 64), (59, 152, 64),
+ (48, 151, 57), (38, 151, 51), (37, 150, 47), (37, 149, 43),
+ (35, 136, 37), (41, 137, 50), (47, 139, 63), (62, 134, 66),
+ (78, 129, 69), (81, 125, 69), (85, 122, 69), (97, 109, 69),
+ (106, 95, 79), (114, 77, 92), (125, 73, 86), (136, 69, 80),
+ (141, 62, 74), (147, 56, 69), (142, 53, 70), (137, 51, 71),
+ (115, 42, 76), (107, 39, 74), (99, 37, 73), (92, 40, 74),
+ (85, 43, 76), (81, 44, 78), (78, 45, 81), (72, 50, 88),
+ (72, 57, 93), (85, 75, 80), (96, 89, 67), (108, 104, 54),
+ (112, 110, 49), (116, 117, 45), (126, 125, 45), (135, 135, 39),
+ (155, 151, 27), (162, 154, 18), (170, 157, 10), (164, 151, 11),
+ (158, 146, 13), (151, 144, 13), (145, 143, 14), (133, 140, 15),
+ (125, 135, 15), (136, 112, 11), (136, 95, 14), (136, 78, 17),
+ (130, 74, 20), (125, 71, 23), (107, 70, 28), (98, 68, 33),
+ (94, 65, 39), (97, 57, 45), (101, 49, 51), (97, 47, 55),
+ (94, 46, 59), (88, 44, 66), (75, 47, 76), (59, 49, 82),
+ (53, 53, 86), (51, 57, 97), (54, 50, 100), (58, 43, 104),
+ (57, 38, 104), (56, 33, 105), (56, 27, 105), (56, 26, 107),
+ (58, 27, 102), (60, 24, 102), (62, 21, 102), (62, 18, 101),
+ (63, 15, 101), (65, 12, 102), (73, 16, 97), (82, 23, 89),
+ (97, 32, 81), (115, 45, 70), (113, 47, 70), (111, 50, 70),
+ (110, 55, 67), (107, 58, 63), (108, 61, 54), (108, 69, 41),
+ (103, 73, 26), (91, 72, 25), (79, 72, 24), (73, 69, 23),
+ (68, 67, 23), (53, 64, 18), (50, 57, 16), (50, 51, 12),
+ (48, 51, 11), (54, 45, 15), (54, 45, 18), (54, 46, 22),
+ (55, 42, 32), (59, 37, 42), (61, 35, 51), (63, 33, 59),
+ (78, 37, 76), (84, 43, 86), (90, 50, 97), (95, 53, 101),
+ (100, 57, 106), (110, 65, 112), (115, 71, 113), (127, 76, 115),
+ (135, 86, 114), (159, 111, 118), (165, 117, 116), (172, 124, 115),
+ (177, 139, 109), (185, 147, 104), (190, 150, 96), (193, 150, 97),
+ (201, 125, 101), (201, 125, 97), (201, 125, 94), (201, 128, 85),
+ (200, 130, 66), (193, 134, 51), (183, 130, 47), (172, 117, 43),
+ (156, 111, 36), (127, 122, 27), (117, 128, 22), (107, 134, 18),
+ (95, 147, 21), (83, 153, 26), (74, 151, 31), (75, 152, 39),
+ (67, 149, 51), (64, 149, 56), (62, 150, 62), (62, 150, 74),
+ (63, 145, 82), (79, 142, 82), (110, 131, 79), (129, 128, 70),
+ (141, 125, 61), (146, 121, 55), (140, 115, 52), (143, 108, 48),
+ (155, 93, 44), (162, 78, 44), (172, 70, 44), (182, 68, 42),
+ (181, 73, 37), (183, 73, 35), (185, 74, 34), (180, 66, 36),
+ (176, 52, 44), (180, 41, 49), (178, 38, 48), (173, 36, 43),
+ (171, 42, 34), (162, 46, 21), (145, 42, 17), (132, 31, 16),
+ (121, 23, 19), (114, 14, 21), (107, 10, 27), (101, 12, 27),
+ (90, 15, 29), (77, 13, 35), (66, 16, 45), (62, 17, 53),
+ (56, 17, 63), (58, 16, 71), (57, 16, 75), (56, 13, 76),
+ (56, 11, 79), (58, 10, 82), (57, 10, 82), (60, 8, 81),
+ (60, 6, 77), (59, 6, 73), (58, 13, 65), (60, 21, 62),
+ (64, 32, 53), (68, 41, 44), (73, 47, 37), (73, 46, 34),
+ (70, 47, 29), (62, 50, 32), (59, 54, 35), (55, 58, 37),
+ (56, 60, 38), (58, 54, 40), (60, 43, 42), (56, 33, 50),
+ (51, 26, 59), (46, 21, 68), (46, 17, 75), (47, 14, 82),
+ (51, 11, 88), (54, 8, 94), (61, 6, 100), (66, 10, 106),
+ (67, 16, 110), (66, 23, 113), (67, 27, 112), (63, 30, 114),
+ (66, 25, 114), (74, 23, 112), (78, 24, 113), (80, 25, 114),
+ (81, 26, 112), (73, 29, 114), (63, 27, 113), (60, 25, 110),
+ (57, 28, 105), (54, 36, 100), (53, 47, 91), (46, 49, 90),
+ (40, 49, 93), (37, 51, 97), (36, 57, 101), (38, 65, 99)
+ ),
+
+// 572 Getting_a_Tan
+((129, 65, 31), (131, 65, 32), (128, 61, 30), (125, 58, 28),
+ (113, 45, 20), (102, 33, 13), (99, 32, 13), (97, 31, 13),
+ (91, 27, 10), (88, 26, 10), (85, 26, 10), (81, 27, 10),
+ (77, 28, 10), (76, 27, 10), (76, 27, 11), (79, 28, 11),
+ (82, 29, 12), (106, 43, 23), (116, 53, 25), (127, 63, 28),
+ (136, 70, 29), (145, 78, 31), (149, 79, 31), (154, 81, 32),
+ (167, 89, 34), (169, 91, 33), (172, 93, 33), (169, 89, 30),
+ (166, 86, 27), (161, 81, 25), (157, 76, 24), (145, 65, 18),
+ (134, 57, 15), (113, 43, 10), (102, 37, 11), (92, 32, 12),
+ (78, 24, 9), (64, 17, 7), (56, 14, 5), (49, 11, 4),
+ (24, 2, 0), (16, 1, 0), (9, 1, 0), (5, 1, 0),
+ (2, 1, 0), (1, 1, 0), (1, 1, 0), (2, 1, 0),
+ (3, 2, 2), (16, 8, 3), (28, 16, 8), (41, 24, 13),
+ (60, 40, 25), (79, 57, 37), (90, 67, 44), (101, 77, 52),
+ (144, 116, 78), (160, 126, 80), (176, 137, 82), (186, 143, 85),
+ (196, 149, 89), (197, 150, 89), (199, 152, 90), (198, 151, 92),
+ (190, 144, 86), (156, 106, 56), (134, 86, 42), (113, 66, 28),
+ (103, 58, 24), (94, 50, 21), (76, 39, 16), (60, 28, 11),
+ (34, 11, 2), (25, 6, 1), (17, 2, 0), (12, 1, 0),
+ (7, 1, 0), (6, 1, 0), (5, 1, 1), (4, 0, 1),
+ (3, 0, 1), (4, 0, 1), (4, 0, 1), (4, 0, 1),
+ (4, 0, 1), (4, 0, 1), (7, 1, 1), (10, 2, 2),
+ (25, 5, 1), (34, 8, 1), (43, 12, 1), (48, 13, 1),
+ (54, 15, 1), (63, 20, 2), (72, 25, 2), (84, 31, 5),
+ (97, 39, 8), (123, 55, 13), (131, 62, 13), (139, 70, 13),
+ (143, 73, 13), (147, 76, 14), (154, 83, 18), (164, 91, 23),
+ (186, 114, 46), (196, 130, 61), (206, 146, 76), (209, 154, 85),
+ (213, 163, 95), (220, 175, 115), (226, 185, 130), (232, 196, 151),
+ (239, 211, 167), (249, 236, 195), (250, 241, 199), (251, 246, 203),
+ (253, 251, 203), (251, 245, 195), (248, 237, 181), (246, 225, 167),
+ (246, 206, 139), (247, 205, 131), (249, 204, 124), (249, 202, 117),
+ (249, 201, 111), (244, 189, 99), (242, 167, 90), (236, 147, 76),
+ (232, 131, 69), (237, 117, 61), (233, 113, 58), (230, 109, 55),
+ (222, 97, 51), (203, 85, 43), (181, 67, 33), (163, 47, 23),
+ (137, 28, 11), (124, 26, 9), (111, 24, 8), (101, 24, 8),
+ (91, 24, 8), (72, 20, 7), (61, 17, 5), (54, 15, 5),
+ (51, 13, 4), (56, 12, 3), (59, 13, 3), (62, 14, 3),
+ (70, 16, 2), (74, 18, 1), (77, 20, 0), (76, 21, 0),
+ (78, 23, 2), (80, 25, 3), (83, 27, 5), (88, 31, 9),
+ (95, 36, 11), (98, 40, 14), (102, 47, 16), (107, 54, 20),
+ (116, 63, 24), (143, 97, 50), (151, 105, 59), (160, 114, 69),
+ (177, 135, 85), (193, 154, 98), (208, 167, 105), (214, 176, 110),
+ (222, 179, 111), (220, 176, 111), (218, 173, 111), (209, 166, 109),
+ (198, 154, 104), (181, 139, 95), (165, 121, 79), (147, 100, 63),
+ (129, 78, 48), (108, 57, 33), (88, 38, 20), (67, 25, 14),
+ (52, 17, 9), (42, 11, 6), (36, 8, 5), (32, 8, 4),
+ (27, 6, 2), (26, 6, 2), (25, 6, 2), (24, 6, 2),
+ (22, 4, 3), (20, 4, 4), (19, 4, 5), (18, 4, 6),
+ (16, 5, 7), (14, 6, 7), (12, 6, 7), (12, 6, 7),
+ (15, 7, 8), (21, 12, 11), (32, 21, 18), (47, 36, 25),
+ (67, 52, 36), (89, 71, 51), (111, 92, 68), (133, 112, 87),
+ (152, 132, 110), (171, 155, 130), (191, 174, 150), (210, 193, 167),
+ (227, 211, 179), (240, 222, 182), (247, 223, 180), (248, 220, 173),
+ (248, 211, 162), (248, 197, 149), (248, 186, 138), (246, 177, 125),
+ (240, 166, 106), (232, 153, 86), (219, 140, 71), (205, 122, 54),
+ (190, 105, 47), (174, 93, 45), (157, 83, 40), (143, 73, 35),
+ (126, 68, 33), (111, 61, 27), (98, 54, 24), (90, 50, 24),
+ (85, 47, 23), (87, 45, 19), (93, 47, 17), (101, 51, 14),
+ (111, 54, 12), (121, 62, 14), (131, 73, 19), (147, 83, 21),
+ (163, 97, 27), (180, 114, 37), (195, 134, 49), (207, 150, 61),
+ (215, 166, 75), (220, 173, 82), (226, 175, 83), (230, 172, 85),
+ (233, 174, 87), (233, 173, 88), (230, 175, 91), (220, 169, 93),
+ (211, 160, 88), (204, 145, 80), (201, 139, 78), (198, 128, 71),
+ (187, 114, 58), (172, 100, 51), (155, 87, 44), (138, 68, 31)
+ ),
+
+// 573 gipper
+((190, 180, 144), (164, 160, 149), (146, 150, 148), (128, 141, 148),
+ (114, 129, 137), (101, 117, 126), (91, 110, 123), (82, 104, 121),
+ (66, 90, 114), (70, 91, 116), (75, 92, 118), (93, 97, 112),
+ (111, 103, 106), (122, 101, 102), (133, 100, 98), (141, 101, 94),
+ (149, 102, 91), (180, 104, 83), (185, 103, 77), (190, 103, 71),
+ (186, 97, 64), (183, 91, 57), (181, 89, 54), (179, 88, 51),
+ (175, 87, 48), (165, 85, 52), (156, 83, 57), (132, 77, 60),
+ (108, 71, 64), (99, 69, 65), (90, 67, 66), (72, 64, 67),
+ (65, 66, 70), (69, 70, 75), (58, 67, 78), (47, 64, 82),
+ (34, 55, 83), (21, 47, 85), (16, 45, 86), (12, 43, 88),
+ (29, 49, 88), (36, 53, 89), (43, 58, 90), (43, 58, 91),
+ (44, 59, 92), (44, 60, 93), (45, 61, 94), (28, 53, 93),
+ (33, 55, 94), (47, 58, 92), (47, 57, 91), (48, 57, 91),
+ (39, 53, 90), (30, 49, 90), (23, 46, 90), (16, 44, 90),
+ (14, 40, 85), (14, 40, 85), (14, 40, 86), (15, 41, 88),
+ (16, 43, 90), (16, 44, 91), (16, 45, 92), (16, 47, 94),
+ (16, 48, 95), (16, 50, 98), (16, 50, 98), (17, 50, 98),
+ (17, 49, 98), (17, 49, 98), (16, 48, 97), (15, 46, 95),
+ (14, 45, 93), (13, 45, 93), (13, 45, 93), (13, 45, 93),
+ (13, 45, 94), (13, 45, 94), (13, 45, 94), (14, 45, 95),
+ (13, 47, 97), (14, 51, 100), (15, 54, 103), (17, 57, 107),
+ (24, 58, 109), (31, 59, 111), (48, 63, 115), (65, 69, 116),
+ (100, 86, 123), (111, 97, 125), (122, 109, 127), (129, 110, 130),
+ (136, 112, 133), (152, 112, 142), (169, 110, 138), (186, 112, 134),
+ (201, 113, 132), (220, 131, 116), (217, 131, 117), (214, 132, 118),
+ (208, 127, 117), (203, 122, 116), (188, 112, 114), (170, 99, 115),
+ (142, 90, 107), (129, 92, 105), (117, 94, 104), (111, 92, 105),
+ (106, 90, 107), (90, 86, 112), (74, 80, 116), (60, 75, 120),
+ (46, 71, 123), (26, 70, 125), (25, 69, 124), (25, 69, 124),
+ (25, 68, 124), (24, 68, 123), (23, 67, 121), (23, 66, 121),
+ (21, 65, 120), (21, 64, 119), (21, 64, 119), (21, 64, 119),
+ (21, 64, 119), (22, 64, 118), (22, 63, 117), (21, 63, 115),
+ (21, 62, 114), (20, 60, 111), (20, 59, 111), (20, 59, 111),
+ (19, 58, 109), (18, 56, 106), (18, 54, 103), (17, 51, 98),
+ (15, 45, 87), (15, 41, 83), (15, 38, 79), (14, 36, 77),
+ (13, 35, 75), (11, 33, 74), (10, 31, 72), (8, 30, 71),
+ (7, 30, 71), (9, 30, 70), (9, 30, 70), (10, 31, 71),
+ (10, 32, 73), (11, 33, 76), (16, 32, 79), (29, 35, 81),
+ (67, 48, 82), (77, 52, 82), (88, 56, 82), (108, 68, 84),
+ (121, 82, 89), (133, 93, 96), (150, 103, 100), (167, 111, 102),
+ (184, 120, 101), (215, 134, 89), (211, 135, 90), (208, 137, 92),
+ (194, 139, 95), (178, 138, 100), (159, 132, 104), (140, 123, 105),
+ (118, 110, 93), (108, 104, 91), (98, 98, 89), (80, 88, 88),
+ (64, 82, 91), (58, 76, 95), (56, 69, 102), (57, 65, 110),
+ (58, 65, 111), (57, 66, 111), (57, 66, 111), (46, 66, 114),
+ (46, 68, 115), (48, 68, 116), (60, 71, 120), (61, 72, 123),
+ (60, 73, 124), (54, 72, 124), (48, 71, 125), (35, 68, 122),
+ (24, 64, 118), (32, 62, 110), (47, 63, 104), (63, 64, 96),
+ (77, 66, 87), (92, 67, 81), (101, 67, 77), (93, 67, 82),
+ (88, 65, 82), (89, 65, 83), (89, 63, 83), (89, 63, 79),
+ (93, 61, 75), (100, 60, 68), (88, 56, 70), (72, 53, 72),
+ (55, 50, 77), (40, 47, 85), (26, 47, 92), (18, 49, 97),
+ (19, 51, 101), (32, 50, 104), (47, 53, 110), (64, 60, 116),
+ (82, 72, 119), (101, 85, 119), (116, 97, 119), (119, 112, 119),
+ (136, 122, 115), (154, 132, 116), (171, 141, 120), (187, 154, 125),
+ (206, 165, 120), (223, 169, 113), (221, 176, 107), (217, 176, 97),
+ (202, 170, 93), (186, 160, 90), (168, 151, 96), (151, 145, 99),
+ (140, 134, 99), (125, 124, 99), (118, 114, 96), (100, 101, 97),
+ (83, 88, 96), (67, 78, 100), (50, 72, 105), (35, 65, 109),
+ (22, 60, 110), (21, 59, 109), (20, 58, 108), (20, 58, 108),
+ (20, 58, 109), (21, 60, 110), (28, 64, 109), (42, 72, 108),
+ (58, 82, 108), (74, 96, 109), (93, 109, 112), (112, 123, 118),
+ (126, 134, 129), (139, 146, 140), (156, 158, 146), (173, 167, 150),
+ (184, 179, 151), (197, 185, 144), (208, 189, 136), (202, 185, 137)
+ ),
+
+// 574 Glade
+((71, 113, 64), (30, 66, 27), (16, 53, 21), (3, 40, 16),
+ (1, 39, 17), (0, 39, 19), (0, 39, 19), (0, 39, 20),
+ (0, 38, 22), (0, 37, 22), (0, 37, 23), (0, 38, 24),
+ (0, 39, 26), (0, 38, 25), (0, 38, 25), (0, 38, 25),
+ (1, 38, 26), (5, 43, 30), (9, 51, 32), (14, 60, 35),
+ (30, 83, 50), (46, 107, 66), (56, 119, 76), (66, 131, 86),
+ (102, 169, 102), (130, 185, 109), (158, 201, 116), (160, 195, 109),
+ (163, 190, 103), (161, 183, 91), (160, 176, 80), (150, 153, 59),
+ (129, 138, 47), (79, 99, 28), (58, 91, 27), (38, 84, 27),
+ (32, 85, 31), (26, 86, 35), (33, 91, 37), (40, 96, 40),
+ (77, 133, 53), (102, 146, 58), (127, 160, 64), (143, 166, 62),
+ (160, 172, 60), (163, 171, 61), (166, 170, 63), (171, 167, 70),
+ (171, 162, 67), (157, 144, 64), (147, 140, 64), (137, 136, 64),
+ (136, 135, 63), (136, 135, 63), (140, 133, 59), (144, 131, 56),
+ (138, 123, 35), (129, 120, 34), (121, 117, 33), (110, 109, 30),
+ (100, 102, 28), (92, 101, 27), (84, 101, 27), (77, 107, 27),
+ (73, 114, 34), (52, 116, 41), (64, 129, 43), (76, 142, 46),
+ (83, 148, 48), (90, 154, 50), (88, 168, 72), (82, 179, 96),
+ (109, 203, 121), (110, 201, 122), (112, 200, 124), (96, 185, 117),
+ (80, 170, 110), (75, 157, 98), (71, 144, 86), (58, 119, 67),
+ (42, 94, 43), (9, 59, 27), (6, 49, 24), (3, 39, 22),
+ (2, 37, 21), (2, 36, 20), (1, 35, 18), (0, 34, 16),
+ (0, 34, 16), (0, 34, 15), (0, 34, 14), (0, 34, 14),
+ (1, 35, 14), (2, 37, 14), (3, 38, 11), (3, 40, 9),
+ (4, 44, 9), (15, 67, 22), (31, 89, 37), (47, 112, 52),
+ (56, 125, 64), (65, 138, 77), (75, 156, 104), (90, 177, 112),
+ (136, 199, 116), (146, 191, 109), (157, 184, 103), (162, 178, 94),
+ (167, 173, 86), (179, 169, 68), (190, 163, 48), (198, 163, 47),
+ (201, 157, 48), (180, 156, 47), (171, 154, 48), (162, 153, 49),
+ (144, 139, 48), (120, 121, 42), (91, 104, 37), (65, 88, 34),
+ (35, 67, 30), (26, 63, 31), (17, 60, 32), (15, 58, 32),
+ (14, 57, 32), (11, 56, 32), (11, 57, 31), (9, 55, 32),
+ (7, 51, 30), (5, 42, 27), (5, 40, 27), (5, 39, 28),
+ (5, 38, 27), (4, 38, 26), (6, 39, 26), (7, 39, 26),
+ (8, 41, 23), (8, 40, 21), (9, 40, 19), (11, 40, 18),
+ (14, 41, 18), (28, 51, 17), (49, 64, 18), (67, 76, 18),
+ (81, 79, 19), (109, 94, 16), (110, 96, 14), (111, 99, 13),
+ (104, 91, 14), (89, 84, 13), (77, 73, 10), (59, 65, 4),
+ (26, 46, 1), (22, 43, 1), (19, 41, 2), (19, 40, 1),
+ (22, 41, 0), (27, 38, 0), (25, 36, 1), (25, 35, 2),
+ (25, 37, 4), (25, 33, 3), (22, 31, 3), (19, 30, 3),
+ (14, 31, 5), (10, 31, 7), (7, 32, 9), (6, 34, 11),
+ (16, 49, 21), (24, 55, 24), (33, 61, 28), (49, 75, 34),
+ (61, 92, 42), (71, 111, 47), (87, 120, 50), (95, 125, 50),
+ (95, 126, 52), (83, 124, 53), (69, 111, 48), (58, 98, 40),
+ (46, 83, 31), (36, 72, 28), (29, 62, 23), (30, 61, 21),
+ (40, 67, 13), (46, 71, 12), (52, 76, 12), (67, 88, 16),
+ (82, 101, 20), (90, 107, 23), (103, 117, 25), (121, 130, 34),
+ (144, 151, 43), (161, 166, 55), (176, 182, 66), (187, 192, 77),
+ (193, 203, 81), (192, 202, 78), (187, 198, 79), (177, 188, 79),
+ (157, 175, 72), (131, 156, 58), (105, 142, 50), (93, 138, 56),
+ (89, 149, 76), (85, 160, 95), (77, 174, 113), (80, 183, 119),
+ (93, 194, 124), (103, 197, 121), (102, 195, 116), (99, 180, 105),
+ (94, 154, 81), (84, 126, 54), (69, 104, 30), (55, 86, 22),
+ (42, 68, 20), (28, 51, 18), (16, 42, 17), (9, 35, 17),
+ (6, 33, 19), (4, 32, 20), (3, 33, 19), (3, 32, 20),
+ (2, 32, 21), (1, 32, 22), (0, 34, 21), (1, 36, 20),
+ (2, 37, 19), (2, 36, 16), (2, 36, 13), (3, 36, 12),
+ (3, 37, 13), (3, 36, 14), (4, 36, 13), (5, 35, 14),
+ (8, 36, 16), (11, 38, 18), (17, 44, 22), (28, 52, 26),
+ (39, 61, 28), (48, 65, 23), (50, 74, 23), (51, 80, 24),
+ (50, 87, 30), (57, 89, 27), (62, 94, 28), (68, 96, 25),
+ (71, 99, 33), (80, 105, 37), (94, 116, 50), (109, 137, 67),
+ (122, 149, 78), (110, 138, 69), (96, 115, 53), (74, 108, 57)
+ ),
+
+// 575 Glory
+((143, 87, 62), (67, 69, 110), (68, 69, 103), (70, 69, 97),
+ (93, 82, 82), (116, 95, 67), (130, 101, 60), (145, 107, 54),
+ (160, 132, 42), (162, 138, 46), (165, 144, 50), (158, 149, 69),
+ (151, 155, 89), (166, 167, 106), (181, 180, 124), (187, 188, 124),
+ (194, 196, 125), (204, 187, 105), (211, 180, 92), (219, 174, 80),
+ (217, 154, 71), (215, 135, 63), (212, 133, 68), (210, 131, 74),
+ (208, 152, 95), (201, 170, 84), (194, 189, 74), (195, 187, 64),
+ (197, 186, 55), (195, 179, 53), (194, 173, 51), (197, 164, 43),
+ (198, 162, 46), (203, 170, 67), (206, 181, 60), (209, 193, 54),
+ (215, 189, 44), (222, 185, 35), (223, 183, 29), (225, 182, 24),
+ (222, 178, 8), (218, 181, 9), (214, 184, 10), (212, 174, 15),
+ (211, 165, 21), (210, 161, 20), (209, 157, 20), (204, 137, 20),
+ (207, 131, 32), (200, 117, 30), (190, 114, 35), (180, 111, 41),
+ (170, 97, 48), (160, 84, 55), (152, 78, 58), (145, 72, 61),
+ (135, 42, 55), (139, 45, 52), (144, 48, 50), (153, 62, 39),
+ (163, 77, 29), (169, 83, 29), (175, 90, 29), (180, 108, 26),
+ (184, 122, 22), (176, 143, 9), (177, 149, 11), (179, 155, 13),
+ (173, 155, 12), (168, 156, 12), (165, 142, 18), (170, 128, 37),
+ (151, 85, 72), (147, 80, 105), (144, 76, 138), (153, 74, 145),
+ (163, 73, 152), (165, 77, 150), (167, 81, 149), (187, 108, 129),
+ (189, 122, 98), (184, 146, 54), (183, 154, 51), (182, 162, 49),
+ (182, 157, 50), (183, 153, 51), (174, 142, 60), (162, 112, 63),
+ (123, 70, 73), (115, 48, 70), (107, 27, 68), (107, 28, 62),
+ (108, 29, 57), (118, 23, 55), (126, 14, 41), (135, 18, 27),
+ (134, 24, 29), (111, 21, 45), (96, 25, 57), (81, 30, 69),
+ (72, 34, 72), (64, 38, 75), (55, 42, 83), (49, 55, 91),
+ (40, 67, 107), (43, 63, 115), (46, 60, 123), (47, 56, 125),
+ (48, 52, 128), (60, 38, 124), (74, 25, 120), (75, 21, 109),
+ (89, 23, 97), (117, 51, 87), (123, 57, 82), (129, 63, 78),
+ (147, 80, 81), (139, 97, 81), (130, 105, 83), (115, 101, 91),
+ (73, 86, 114), (56, 69, 127), (39, 52, 140), (35, 51, 141),
+ (31, 50, 143), (25, 40, 138), (31, 33, 129), (36, 48, 117),
+ (29, 37, 107), (50, 34, 94), (53, 29, 91), (57, 25, 88),
+ (69, 16, 85), (74, 18, 66), (73, 25, 53), (79, 31, 49),
+ (61, 63, 47), (49, 67, 64), (38, 71, 81), (33, 77, 91),
+ (29, 83, 102), (15, 77, 116), (18, 66, 126), (34, 56, 152),
+ (50, 41, 165), (80, 18, 158), (91, 17, 157), (103, 16, 157),
+ (123, 15, 145), (128, 26, 134), (143, 49, 111), (167, 60, 96),
+ (178, 93, 69), (184, 97, 62), (190, 101, 55), (192, 90, 47),
+ (189, 81, 47), (180, 75, 60), (175, 62, 58), (171, 40, 57),
+ (153, 30, 78), (107, 19, 99), (100, 20, 103), (94, 22, 108),
+ (75, 30, 126), (72, 30, 131), (91, 39, 124), (105, 54, 114),
+ (159, 69, 89), (167, 76, 82), (175, 84, 76), (177, 99, 74),
+ (185, 115, 77), (198, 130, 75), (205, 142, 87), (207, 148, 85),
+ (218, 150, 65), (231, 152, 57), (226, 140, 46), (216, 134, 26),
+ (211, 126, 11), (195, 110, 11), (173, 95, 17), (156, 75, 19),
+ (111, 52, 40), (104, 45, 42), (97, 39, 44), (90, 33, 46),
+ (87, 34, 50), (91, 46, 43), (109, 55, 37), (132, 58, 33),
+ (140, 74, 21), (144, 92, 17), (136, 88, 16), (110, 76, 10),
+ (90, 67, 18), (62, 58, 32), (31, 44, 40), (18, 40, 46),
+ (18, 44, 56), (30, 50, 50), (46, 51, 35), (69, 45, 32),
+ (84, 40, 19), (96, 29, 13), (108, 15, 26), (107, 11, 35),
+ (97, 13, 52), (86, 17, 72), (82, 22, 84), (85, 28, 90),
+ (95, 42, 89), (106, 58, 77), (118, 53, 65), (130, 52, 50),
+ (142, 58, 29), (147, 50, 20), (146, 50, 21), (152, 56, 21),
+ (161, 60, 25), (173, 71, 36), (182, 84, 46), (183, 98, 57),
+ (181, 110, 79), (178, 124, 109), (168, 132, 111), (151, 124, 107),
+ (148, 117, 133), (131, 105, 137), (114, 83, 133), (119, 58, 146),
+ (106, 40, 153), (98, 31, 151), (103, 18, 149), (94, 13, 143),
+ (89, 11, 132), (88, 10, 122), (88, 17, 119), (90, 35, 122),
+ (95, 55, 117), (100, 62, 117), (98, 79, 116), (92, 97, 106),
+ (79, 94, 102), (72, 89, 103), (65, 77, 97), (60, 65, 91),
+ (66, 53, 88), (82, 34, 83), (103, 30, 71), (122, 39, 57),
+ (155, 55, 44), (178, 70, 32), (164, 71, 43), (152, 84, 61)
+ ),
+
+// 576 Gold_and_Blue
+((161, 125, 84), (199, 134, 61), (210, 140, 61), (222, 146, 62),
+ (221, 143, 62), (221, 140, 63), (217, 137, 60), (214, 135, 58),
+ (201, 117, 55), (192, 106, 45), (183, 96, 36), (165, 82, 26),
+ (147, 69, 17), (134, 56, 14), (121, 43, 12), (118, 41, 10),
+ (115, 39, 9), (92, 48, 15), (87, 52, 20), (82, 56, 26),
+ (83, 53, 26), (85, 50, 26), (82, 50, 25), (80, 50, 25),
+ (68, 63, 37), (63, 63, 41), (59, 63, 45), (52, 65, 51),
+ (46, 68, 57), (44, 72, 64), (42, 76, 71), (34, 82, 82),
+ (31, 90, 97), (33, 110, 120), (41, 121, 129), (50, 132, 139),
+ (54, 140, 146), (59, 148, 153), (58, 148, 153), (58, 149, 154),
+ (64, 136, 141), (59, 130, 134), (55, 124, 127), (49, 114, 119),
+ (44, 105, 111), (43, 98, 105), (43, 91, 99), (43, 77, 87),
+ (40, 63, 76), (28, 42, 57), (25, 36, 49), (23, 31, 42),
+ (24, 28, 37), (26, 26, 32), (28, 26, 32), (30, 27, 32),
+ (50, 41, 32), (70, 53, 35), (90, 65, 38), (111, 79, 46),
+ (133, 94, 55), (141, 98, 57), (149, 102, 60), (165, 108, 59),
+ (176, 111, 54), (181, 109, 49), (173, 100, 45), (165, 92, 42),
+ (159, 88, 38), (154, 84, 35), (136, 71, 26), (117, 59, 19),
+ (81, 34, 11), (68, 29, 9), (55, 24, 8), (42, 18, 7),
+ (30, 13, 6), (24, 10, 6), (18, 8, 7), (12, 10, 12),
+ (7, 14, 18), (12, 30, 34), (21, 39, 46), (30, 49, 58),
+ (34, 54, 64), (39, 59, 71), (42, 65, 77), (45, 69, 82),
+ (45, 64, 78), (45, 60, 74), (46, 57, 70), (44, 54, 66),
+ (42, 52, 63), (40, 46, 53), (44, 40, 44), (51, 37, 34),
+ (63, 35, 25), (73, 35, 14), (81, 37, 13), (90, 39, 12),
+ (93, 38, 10), (96, 37, 9), (97, 31, 7), (85, 25, 3),
+ (57, 19, 5), (47, 15, 9), (37, 11, 13), (32, 9, 14),
+ (27, 8, 16), (18, 13, 18), (11, 18, 25), (3, 28, 35),
+ (2, 38, 48), (1, 56, 70), (2, 59, 74), (3, 63, 78),
+ (4, 70, 84), (6, 77, 91), (6, 78, 95), (4, 77, 97),
+ (4, 68, 86), (5, 61, 79), (6, 54, 72), (5, 49, 67),
+ (4, 45, 63), (2, 37, 52), (0, 31, 40), (0, 24, 32),
+ (0, 19, 26), (0, 9, 19), (0, 8, 16), (0, 8, 14),
+ (0, 9, 8), (0, 10, 4), (0, 12, 3), (2, 13, 4),
+ (14, 24, 15), (21, 32, 23), (28, 41, 32), (31, 43, 35),
+ (34, 46, 38), (41, 54, 39), (51, 61, 43), (64, 67, 49),
+ (85, 83, 62), (133, 127, 84), (142, 133, 87), (152, 140, 90),
+ (160, 142, 87), (166, 137, 85), (173, 134, 89), (177, 145, 97),
+ (169, 155, 116), (162, 150, 112), (155, 145, 109), (132, 123, 101),
+ (108, 111, 97), (95, 106, 102), (79, 110, 117), (77, 121, 125),
+ (75, 127, 133), (92, 138, 147), (97, 145, 155), (103, 153, 163),
+ (119, 167, 178), (130, 176, 188), (143, 183, 194), (152, 180, 192),
+ (153, 177, 178), (151, 171, 170), (149, 165, 162), (147, 152, 145),
+ (148, 136, 122), (147, 124, 103), (140, 115, 82), (134, 104, 62),
+ (133, 91, 43), (136, 83, 26), (151, 82, 20), (163, 86, 17),
+ (170, 91, 16), (173, 91, 18), (166, 85, 18), (163, 81, 21),
+ (166, 82, 26), (169, 85, 30), (173, 88, 34), (177, 91, 40),
+ (175, 92, 45), (171, 91, 43), (172, 95, 37), (182, 100, 40),
+ (201, 112, 48), (208, 124, 62), (206, 132, 79), (193, 136, 87),
+ (176, 135, 95), (165, 132, 99), (150, 123, 98), (127, 114, 103),
+ (104, 103, 104), (78, 93, 106), (59, 88, 101), (49, 82, 91),
+ (38, 74, 81), (31, 69, 72), (25, 66, 72), (20, 70, 74),
+ (23, 76, 79), (27, 80, 83), (33, 83, 86), (39, 81, 90),
+ (44, 80, 88), (52, 77, 83), (60, 73, 78), (70, 69, 72),
+ (76, 68, 75), (84, 72, 76), (102, 81, 81), (129, 97, 83),
+ (156, 119, 87), (174, 138, 101), (180, 156, 121), (182, 170, 142),
+ (189, 178, 156), (192, 185, 159), (191, 189, 155), (178, 189, 157),
+ (158, 182, 158), (136, 169, 161), (109, 150, 155), (83, 134, 142),
+ (58, 127, 137), (41, 123, 127), (35, 127, 129), (29, 123, 129),
+ (35, 115, 121), (43, 111, 119), (53, 107, 105), (70, 108, 97),
+ (83, 108, 92), (100, 104, 82), (116, 98, 74), (130, 92, 65),
+ (146, 95, 59), (150, 98, 62), (153, 109, 75), (149, 120, 88),
+ (141, 126, 101), (140, 135, 111), (134, 135, 113), (134, 133, 113),
+ (139, 137, 109), (142, 134, 104), (145, 133, 100), (152, 130, 94)
+ ),
+
+// 577 Golden
+((148, 110, 66), (145, 114, 70), (137, 107, 64), (129, 101, 58),
+ (112, 85, 49), (96, 70, 41), (89, 65, 37), (82, 61, 34),
+ (61, 50, 34), (62, 51, 39), (63, 52, 44), (66, 56, 48),
+ (70, 61, 52), (71, 66, 61), (73, 72, 70), (77, 76, 75),
+ (81, 80, 81), (103, 101, 99), (112, 108, 101), (122, 115, 103),
+ (130, 118, 100), (139, 121, 97), (142, 122, 95), (145, 124, 94),
+ (149, 118, 80), (147, 113, 70), (146, 109, 60), (137, 102, 58),
+ (128, 96, 57), (122, 92, 56), (117, 89, 56), (107, 83, 55),
+ (101, 79, 52), (84, 72, 56), (78, 69, 59), (73, 67, 63),
+ (72, 68, 65), (72, 70, 68), (72, 70, 69), (73, 71, 71),
+ (74, 73, 74), (79, 75, 70), (85, 78, 66), (90, 80, 63),
+ (96, 83, 60), (95, 82, 58), (95, 81, 56), (92, 77, 47),
+ (90, 74, 35), (93, 71, 23), (97, 74, 24), (102, 77, 26),
+ (110, 85, 30), (119, 93, 35), (125, 97, 39), (132, 102, 44),
+ (165, 128, 64), (180, 145, 79), (196, 163, 95), (208, 177, 110),
+ (220, 191, 125), (224, 195, 127), (229, 199, 129), (230, 204, 131),
+ (232, 205, 128), (228, 201, 127), (221, 195, 124), (214, 189, 122),
+ (207, 182, 117), (201, 176, 113), (187, 161, 102), (172, 146, 94),
+ (146, 124, 91), (131, 113, 89), (116, 102, 87), (102, 91, 82),
+ (89, 81, 77), (85, 78, 74), (81, 75, 72), (74, 69, 69),
+ (69, 64, 64), (58, 55, 57), (54, 52, 53), (51, 49, 50),
+ (50, 48, 49), (49, 48, 48), (49, 48, 48), (48, 48, 49),
+ (47, 46, 47), (47, 46, 46), (48, 46, 46), (48, 46, 46),
+ (48, 47, 47), (49, 47, 47), (49, 46, 46), (51, 46, 41),
+ (52, 46, 36), (57, 49, 32), (57, 49, 34), (58, 49, 36),
+ (58, 49, 36), (59, 50, 37), (62, 54, 36), (67, 57, 41),
+ (70, 62, 54), (70, 63, 57), (71, 64, 60), (72, 65, 61),
+ (73, 66, 62), (76, 69, 65), (78, 72, 68), (83, 75, 71),
+ (85, 77, 72), (96, 80, 65), (98, 80, 63), (100, 81, 62),
+ (104, 83, 59), (105, 84, 60), (107, 83, 60), (107, 81, 57),
+ (96, 73, 47), (88, 68, 45), (81, 64, 44), (77, 61, 44),
+ (73, 59, 44), (65, 53, 43), (56, 48, 39), (52, 46, 35),
+ (50, 46, 35), (57, 51, 43), (60, 53, 44), (63, 56, 46),
+ (73, 63, 49), (83, 72, 58), (97, 85, 67), (114, 99, 80),
+ (154, 130, 92), (169, 143, 96), (185, 156, 100), (192, 162, 103),
+ (200, 168, 107), (212, 179, 113), (222, 187, 116), (224, 188, 113),
+ (216, 184, 113), (193, 162, 102), (187, 156, 100), (182, 151, 99),
+ (170, 139, 89), (156, 125, 83), (138, 111, 75), (119, 93, 62),
+ (92, 70, 47), (89, 67, 44), (86, 65, 42), (82, 63, 44),
+ (80, 64, 47), (78, 66, 54), (76, 69, 63), (77, 73, 70),
+ (80, 78, 77), (96, 89, 82), (100, 91, 81), (104, 93, 81),
+ (111, 95, 79), (116, 99, 82), (120, 101, 83), (126, 107, 87),
+ (136, 114, 87), (138, 116, 89), (140, 118, 92), (143, 121, 95),
+ (146, 127, 103), (153, 133, 108), (160, 140, 114), (167, 148, 122),
+ (173, 154, 129), (180, 164, 135), (191, 171, 135), (203, 179, 130),
+ (211, 185, 128), (214, 185, 123), (214, 185, 121), (213, 182, 120),
+ (201, 170, 106), (196, 163, 99), (192, 157, 92), (181, 143, 79),
+ (172, 131, 67), (163, 123, 62), (155, 115, 60), (150, 111, 57),
+ (148, 108, 55), (149, 108, 50), (155, 113, 49), (163, 120, 53),
+ (172, 129, 56), (183, 139, 62), (188, 145, 64), (193, 149, 65),
+ (195, 152, 67), (194, 151, 66), (191, 150, 70), (183, 147, 73),
+ (173, 141, 76), (163, 135, 78), (153, 127, 77), (144, 121, 80),
+ (137, 118, 84), (137, 117, 87), (141, 120, 90), (148, 126, 91),
+ (159, 134, 92), (166, 140, 100), (173, 147, 104), (179, 152, 108),
+ (181, 155, 110), (182, 155, 107), (179, 154, 111), (172, 150, 113),
+ (162, 143, 116), (149, 137, 119), (136, 128, 117), (128, 121, 112),
+ (122, 114, 105), (115, 105, 97), (107, 99, 91), (100, 92, 83),
+ (94, 86, 74), (91, 82, 67), (87, 76, 61), (82, 73, 58),
+ (76, 66, 54), (72, 62, 48), (68, 58, 45), (66, 57, 43),
+ (64, 57, 47), (63, 57, 51), (65, 58, 50), (67, 57, 47),
+ (70, 57, 43), (72, 58, 39), (73, 59, 36), (79, 61, 33),
+ (84, 64, 30), (89, 66, 28), (92, 66, 27), (93, 67, 26),
+ (98, 68, 26), (103, 72, 28), (112, 82, 40), (116, 86, 48),
+ (132, 101, 58), (144, 110, 64), (149, 110, 59), (160, 120, 67)
+ ),
+
+// 578 Golden_Green
+((40, 49, 3), (42, 50, 3), (40, 47, 2), (38, 44, 2),
+ (31, 36, 1), (24, 29, 1), (20, 24, 0), (16, 19, 0),
+ (4, 6, 0), (2, 3, 0), (0, 1, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
+ (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 2, 0),
+ (0, 2, 0), (0, 3, 0), (0, 3, 0), (1, 4, 0),
+ (1, 4, 0), (2, 5, 0), (3, 6, 0), (4, 8, 0),
+ (12, 17, 0), (18, 23, 0), (24, 29, 0), (28, 34, 0),
+ (33, 39, 0), (34, 41, 0), (35, 43, 0), (38, 46, 0),
+ (40, 49, 1), (45, 55, 1), (47, 57, 1), (49, 60, 1),
+ (48, 59, 1), (47, 59, 1), (45, 58, 1), (44, 57, 1),
+ (39, 53, 1), (38, 52, 1), (38, 51, 2), (38, 51, 1),
+ (39, 52, 1), (40, 53, 1), (41, 54, 1), (43, 57, 1),
+ (46, 59, 1), (54, 67, 3), (56, 69, 4), (59, 72, 5),
+ (60, 73, 5), (62, 74, 5), (65, 77, 5), (67, 78, 4),
+ (73, 84, 3), (74, 86, 4), (76, 89, 5), (77, 90, 5),
+ (79, 91, 5), (79, 91, 5), (80, 92, 5), (82, 93, 3),
+ (84, 94, 2), (90, 98, 0), (95, 102, 1), (100, 107, 3),
+ (105, 111, 5), (110, 116, 7), (122, 126, 12), (133, 134, 16),
+ (143, 141, 15), (140, 140, 13), (138, 139, 11), (138, 139, 11),
+ (138, 140, 11), (141, 142, 11), (147, 148, 15), (156, 155, 17),
+ (163, 160, 21), (165, 161, 21), (159, 156, 17), (153, 151, 13),
+ (149, 149, 11), (146, 147, 10), (147, 147, 9), (154, 150, 10),
+ (172, 165, 24), (181, 173, 29), (191, 181, 35), (190, 181, 36),
+ (189, 181, 37), (181, 175, 32), (172, 168, 26), (166, 163, 23),
+ (160, 159, 23), (158, 157, 24), (158, 158, 26), (158, 159, 28),
+ (151, 154, 26), (141, 145, 22), (130, 134, 17), (116, 121, 11),
+ (87, 92, 2), (77, 83, 1), (68, 74, 1), (64, 70, 1),
+ (60, 66, 1), (53, 60, 0), (47, 55, 1), (42, 49, 1),
+ (36, 43, 1), (25, 33, 1), (23, 30, 0), (21, 28, 0),
+ (19, 27, 0), (18, 28, 0), (20, 31, 0), (24, 36, 0),
+ (35, 47, 0), (39, 52, 0), (44, 57, 1), (47, 59, 1),
+ (50, 62, 1), (56, 68, 2), (62, 74, 2), (70, 82, 4),
+ (82, 92, 10), (105, 113, 18), (108, 116, 19), (112, 119, 20),
+ (115, 121, 22), (112, 120, 21), (106, 112, 17), (101, 105, 18),
+ (93, 97, 22), (91, 95, 22), (90, 93, 22), (87, 89, 23),
+ (80, 84, 20), (69, 75, 14), (55, 63, 9), (43, 51, 8),
+ (33, 41, 7), (21, 29, 6), (20, 28, 5), (20, 28, 4),
+ (20, 28, 3), (22, 30, 3), (24, 33, 2), (28, 36, 2),
+ (35, 43, 2), (36, 44, 2), (38, 46, 3), (41, 48, 2),
+ (43, 49, 1), (44, 52, 1), (46, 54, 0), (48, 57, 0),
+ (50, 61, 0), (52, 64, 1), (53, 65, 1), (54, 66, 1),
+ (54, 67, 1), (53, 66, 2), (54, 66, 4), (55, 68, 5),
+ (61, 73, 8), (63, 74, 8), (65, 75, 8), (67, 77, 7),
+ (69, 80, 5), (71, 81, 7), (70, 81, 6), (72, 82, 7),
+ (73, 83, 8), (73, 82, 8), (73, 81, 7), (73, 81, 4),
+ (72, 81, 4), (70, 80, 2), (69, 80, 1), (69, 81, 2),
+ (70, 82, 2), (71, 82, 1), (74, 84, 1), (78, 88, 2),
+ (82, 92, 2), (85, 95, 2), (86, 98, 2), (86, 99, 2),
+ (84, 97, 2), (82, 94, 2), (79, 89, 2), (76, 86, 2),
+ (74, 83, 2), (70, 79, 2), (67, 77, 1), (64, 76, 1),
+ (61, 73, 2), (58, 69, 2), (56, 66, 2), (55, 63, 2),
+ (55, 60, 2), (54, 58, 2), (54, 57, 1), (54, 57, 1),
+ (54, 58, 3), (55, 58, 5), (55, 59, 5), (54, 58, 6),
+ (53, 56, 6), (50, 52, 6), (46, 47, 5), (42, 43, 4),
+ (38, 38, 5), (33, 34, 5), (29, 32, 6), (25, 29, 5),
+ (23, 27, 6), (20, 24, 5), (17, 21, 2), (14, 17, 2),
+ (11, 13, 1), (8, 10, 1), (5, 7, 0), (3, 6, 0),
+ (2, 5, 1), (3, 6, 0), (5, 10, 1), (10, 16, 1),
+ (18, 24, 2), (25, 32, 2), (33, 42, 2), (39, 48, 2),
+ (42, 51, 2), (44, 52, 2), (41, 51, 2), (43, 52, 3)
+ ),
+
+
+// 579 Goldenrod
+((237, 184, 18), (252, 174, 18), (232, 168, 38), (212, 163, 59),
+ (196, 147, 89), (180, 131, 120), (166, 128, 136), (153, 126, 153),
+ (114, 116, 162), (93, 107, 136), (72, 99, 110), (52, 87, 82),
+ (33, 76, 55), (26, 57, 42), (20, 39, 29), (21, 36, 28),
+ (22, 34, 28), (27, 28, 25), (25, 29, 26), (24, 30, 28),
+ (17, 41, 34), (11, 52, 40), (10, 57, 45), (10, 62, 50),
+ (3, 100, 78), (5, 104, 81), (7, 108, 85), (7, 100, 78),
+ (8, 92, 71), (13, 84, 65), (19, 76, 59), (34, 72, 49),
+ (75, 75, 34), (152, 87, 24), (187, 101, 18), (223, 116, 13),
+ (201, 112, 15), (179, 109, 18), (158, 100, 22), (138, 91, 27),
+ (63, 84, 48), (48, 86, 64), (33, 88, 81), (53, 107, 106),
+ (74, 127, 132), (87, 133, 145), (101, 139, 159), (130, 144, 178),
+ (147, 141, 197), (143, 114, 209), (140, 95, 214), (138, 76, 220),
+ (129, 61, 214), (121, 46, 208), (115, 41, 199), (109, 37, 191),
+ (73, 34, 119), (51, 33, 97), (29, 33, 75), (16, 45, 62),
+ (3, 58, 49), (2, 65, 55), (1, 73, 61), (4, 86, 66),
+ (2, 93, 64), (5, 102, 62), (4, 87, 54), (3, 72, 47),
+ (5, 68, 43), (7, 65, 39), (10, 53, 31), (11, 35, 24),
+ (20, 23, 21), (23, 22, 21), (26, 22, 22), (83, 58, 18),
+ (140, 95, 14), (136, 93, 16), (132, 91, 19), (182, 119, 13),
+ (235, 140, 9), (159, 89, 16), (135, 69, 18), (111, 49, 20),
+ (90, 39, 21), (70, 30, 23), (51, 24, 30), (69, 30, 50),
+ (77, 50, 95), (86, 54, 127), (96, 58, 159), (92, 53, 167),
+ (88, 49, 175), (90, 33, 174), (84, 33, 181), (61, 41, 163),
+ (43, 58, 137), (32, 67, 129), (47, 72, 136), (63, 77, 144),
+ (78, 74, 156), (93, 72, 168), (118, 82, 190), (138, 99, 185),
+ (191, 143, 116), (203, 152, 87), (216, 162, 58), (225, 163, 42),
+ (235, 165, 26), (235, 155, 23), (217, 140, 19), (169, 119, 18),
+ (124, 86, 19), (59, 49, 16), (43, 37, 17), (28, 25, 19),
+ (24, 19, 20), (24, 16, 19), (23, 17, 20), (21, 17, 21),
+ (19, 24, 26), (27, 28, 39), (36, 32, 53), (42, 33, 68),
+ (49, 34, 83), (54, 38, 92), (46, 62, 105), (40, 90, 124),
+ (39, 109, 128), (2, 124, 94), (6, 122, 87), (11, 121, 81),
+ (26, 93, 58), (67, 81, 39), (119, 81, 30), (147, 81, 14),
+ (232, 126, 10), (242, 141, 11), (253, 156, 13), (252, 159, 14),
+ (251, 163, 15), (251, 168, 13), (254, 170, 18), (254, 167, 19),
+ (252, 163, 16), (220, 149, 38), (207, 147, 55), (195, 145, 72),
+ (190, 125, 106), (176, 114, 141), (153, 112, 184), (155, 98, 222),
+ (155, 70, 236), (151, 63, 235), (148, 57, 234), (133, 50, 221),
+ (119, 42, 209), (110, 33, 196), (98, 29, 176), (76, 25, 153),
+ (60, 21, 121), (44, 20, 81), (40, 18, 69), (37, 17, 57),
+ (48, 30, 39), (87, 48, 35), (126, 59, 34), (133, 81, 55),
+ (165, 85, 112), (163, 84, 126), (162, 83, 140), (128, 82, 174),
+ (119, 62, 188), (120, 39, 187), (96, 42, 168), (70, 55, 140),
+ (55, 53, 124), (39, 59, 113), (15, 82, 95), (2, 99, 90),
+ (6, 106, 94), (9, 112, 95), (25, 125, 100), (54, 126, 115),
+ (67, 88, 100), (73, 87, 98), (80, 87, 97), (82, 63, 83),
+ (57, 44, 67), (33, 48, 56), (24, 47, 42), (15, 46, 38),
+ (6, 46, 39), (3, 42, 37), (2, 38, 31), (1, 35, 27),
+ (2, 33, 24), (2, 32, 20), (1, 34, 23), (1, 42, 27),
+ (0, 49, 30), (0, 55, 37), (0, 59, 38), (1, 58, 36),
+ (5, 56, 34), (8, 50, 30), (9, 41, 22), (14, 34, 18),
+ (18, 28, 18), (19, 24, 17), (20, 22, 17), (21, 21, 16),
+ (21, 19, 16), (21, 19, 17), (21, 20, 16), (20, 20, 17),
+ (20, 19, 18), (20, 19, 20), (20, 20, 23), (17, 22, 25),
+ (13, 29, 28), (12, 35, 39), (8, 41, 47), (4, 53, 50),
+ (3, 61, 60), (4, 64, 67), (5, 64, 65), (7, 61, 61),
+ (7, 59, 56), (6, 52, 50), (11, 42, 39), (15, 38, 33),
+ (18, 42, 35), (31, 57, 46), (58, 73, 71), (81, 87, 93),
+ (76, 121, 107), (70, 149, 140), (69, 155, 149), (69, 152, 113),
+ (81, 149, 98), (102, 155, 81), (139, 148, 42), (185, 140, 24),
+ (224, 146, 15), (246, 156, 12), (251, 163, 16), (253, 166, 17),
+ (245, 169, 33), (228, 171, 78), (222, 178, 114), (208, 180, 124),
+ (194, 174, 124), (208, 183, 119), (217, 184, 110), (219, 178, 62)
+ ),
+
+
+// 580 Grape
+((83, 67, 90), (93, 75, 108), (98, 77, 115), (104, 79, 123),
+ (106, 80, 126), (109, 81, 130), (109, 81, 130), (109, 82, 131),
+ (110, 83, 129), (109, 81, 125), (108, 80, 122), (101, 82, 121),
+ (95, 84, 120), (90, 89, 124), (85, 94, 128), (83, 97, 133),
+ (82, 100, 138), (77, 116, 159), (74, 125, 168), (72, 135, 177),
+ (69, 138, 185), (66, 142, 193), (66, 141, 192), (66, 141, 192),
+ (70, 134, 171), (68, 125, 157), (67, 117, 143), (63, 103, 124),
+ (59, 90, 106), (56, 84, 96), (54, 79, 87), (51, 69, 67),
+ (47, 63, 54), (41, 54, 42), (39, 54, 41), (38, 54, 40),
+ (41, 66, 55), (45, 79, 70), (52, 87, 82), (59, 95, 94),
+ (110, 138, 138), (124, 155, 159), (139, 172, 180), (139, 181, 198),
+ (139, 190, 217), (139, 191, 221), (140, 193, 225), (150, 196, 224),
+ (143, 191, 224), (100, 163, 204), (87, 151, 192), (74, 140, 180),
+ (69, 135, 179), (64, 130, 179), (62, 128, 179), (60, 127, 179),
+ (60, 126, 171), (66, 125, 168), (72, 125, 166), (76, 123, 163),
+ (81, 122, 160), (81, 118, 158), (82, 114, 156), (83, 111, 146),
+ (88, 102, 134), (98, 88, 112), (97, 79, 109), (96, 70, 106),
+ (95, 67, 104), (94, 65, 103), (99, 63, 109), (103, 65, 112),
+ (103, 62, 119), (96, 59, 111), (89, 57, 104), (86, 56, 98),
+ (84, 55, 92), (81, 54, 90), (79, 53, 88), (67, 48, 74),
+ (57, 43, 64), (52, 39, 55), (56, 39, 59), (60, 40, 63),
+ (63, 41, 67), (67, 42, 72), (74, 46, 80), (80, 50, 89),
+ (94, 55, 104), (96, 56, 106), (98, 58, 109), (96, 59, 106),
+ (94, 60, 104), (87, 61, 97), (80, 59, 90), (73, 56, 82),
+ (64, 52, 73), (52, 53, 59), (51, 54, 57), (51, 55, 55),
+ (52, 56, 56), (54, 57, 57), (59, 58, 61), (68, 64, 70),
+ (87, 76, 94), (90, 89, 111), (93, 102, 128), (93, 108, 136),
+ (94, 115, 145), (95, 125, 162), (98, 131, 173), (96, 140, 185),
+ (92, 148, 197), (82, 165, 216), (82, 166, 218), (83, 167, 220),
+ (86, 170, 221), (90, 171, 222), (97, 175, 222), (115, 182, 223),
+ (143, 192, 200), (142, 179, 192), (141, 167, 185), (144, 161, 187),
+ (147, 155, 189), (154, 143, 172), (158, 138, 154), (156, 121, 140),
+ (140, 100, 128), (118, 66, 132), (117, 63, 131), (117, 61, 130),
+ (118, 59, 128), (119, 57, 128), (121, 53, 131), (116, 52, 131),
+ (105, 51, 124), (99, 49, 115), (94, 47, 106), (89, 45, 101),
+ (84, 43, 96), (71, 40, 82), (57, 36, 71), (46, 36, 58),
+ (39, 35, 45), (31, 32, 33), (30, 31, 32), (29, 30, 32),
+ (31, 27, 32), (36, 28, 34), (42, 27, 39), (48, 28, 45),
+ (66, 36, 67), (70, 39, 73), (75, 43, 80), (79, 57, 97),
+ (82, 72, 117), (85, 87, 138), (94, 94, 150), (110, 97, 157),
+ (115, 101, 162), (106, 110, 172), (102, 108, 168), (99, 107, 164),
+ (102, 102, 151), (105, 92, 135), (106, 85, 121), (99, 80, 113),
+ (83, 77, 95), (81, 77, 92), (80, 78, 89), (83, 82, 88),
+ (83, 86, 90), (84, 92, 94), (82, 95, 99), (82, 97, 105),
+ (86, 98, 110), (88, 100, 116), (91, 100, 119), (88, 96, 119),
+ (84, 92, 119), (83, 81, 117), (81, 70, 114), (79, 62, 113),
+ (67, 46, 96), (63, 41, 90), (60, 37, 84), (51, 25, 70),
+ (40, 19, 64), (36, 17, 58), (31, 21, 53), (34, 28, 51),
+ (38, 31, 48), (45, 33, 52), (54, 37, 62), (63, 44, 75),
+ (77, 52, 90), (90, 62, 103), (104, 67, 115), (117, 71, 127),
+ (124, 79, 138), (123, 89, 153), (117, 100, 165), (110, 109, 174),
+ (103, 114, 181), (101, 116, 180), (96, 123, 179), (92, 124, 177),
+ (91, 125, 175), (91, 122, 175), (96, 116, 175), (104, 118, 175),
+ (112, 125, 176), (118, 131, 177), (119, 131, 178), (114, 127, 173),
+ (110, 120, 168), (107, 121, 163), (105, 123, 155), (95, 123, 152),
+ (83, 120, 140), (72, 109, 123), (67, 96, 104), (66, 85, 85),
+ (63, 75, 72), (59, 66, 62), (52, 61, 53), (46, 56, 46),
+ (39, 51, 39), (33, 44, 31), (28, 36, 26), (23, 29, 21),
+ (22, 24, 22), (24, 22, 24), (26, 21, 27), (31, 20, 32),
+ (34, 19, 37), (42, 18, 44), (52, 22, 52), (59, 26, 62),
+ (66, 30, 69), (67, 31, 74), (69, 32, 74), (70, 34, 73),
+ (70, 38, 72), (72, 41, 73), (70, 42, 75), (69, 40, 74),
+ (67, 41, 70), (66, 43, 65), (67, 48, 63), (68, 52, 65),
+ (72, 54, 71), (74, 56, 76), (76, 58, 80), (80, 62, 86)
+ ),
+
+// 581 Lemon_Grass
+((60, 101, 67), (33, 82, 77), (26, 80, 78), (19, 78, 80),
+ (13, 72, 75), (7, 66, 71), (8, 64, 67), (9, 62, 63),
+ (13, 51, 40), (21, 48, 34), (30, 45, 28), (38, 45, 21),
+ (47, 45, 14), (57, 47, 12), (68, 49, 10), (71, 48, 10),
+ (74, 48, 11), (81, 50, 11), (81, 45, 13), (81, 41, 16),
+ (82, 42, 22), (83, 44, 28), (84, 46, 32), (85, 48, 36),
+ (84, 63, 53), (83, 70, 55), (83, 78, 57), (83, 85, 56),
+ (84, 93, 56), (84, 95, 51), (84, 98, 47), (87, 103, 36),
+ (97, 107, 27), (126, 124, 15), (139, 134, 13), (152, 144, 12),
+ (163, 149, 19), (175, 155, 26), (178, 158, 28), (181, 162, 31),
+ (177, 163, 45), (173, 159, 50), (169, 156, 55), (161, 152, 52),
+ (154, 149, 50), (148, 145, 50), (143, 141, 51), (134, 129, 52),
+ (123, 117, 49), (94, 86, 45), (82, 72, 45), (70, 58, 46),
+ (55, 44, 41), (41, 30, 36), (36, 27, 34), (31, 24, 32),
+ (20, 24, 23), (15, 26, 18), (11, 29, 13), (18, 37, 11),
+ (26, 46, 9), (30, 51, 9), (35, 57, 10), (41, 67, 10),
+ (49, 74, 10), (65, 86, 18), (63, 88, 23), (61, 90, 28),
+ (58, 90, 32), (56, 91, 37), (53, 93, 51), (46, 90, 61),
+ (33, 80, 76), (33, 74, 82), (34, 69, 89), (36, 62, 89),
+ (39, 56, 89), (38, 51, 86), (37, 46, 84), (37, 36, 81),
+ (39, 35, 73), (36, 44, 64), (31, 46, 54), (27, 49, 45),
+ (30, 54, 40), (33, 60, 36), (47, 74, 29), (65, 93, 23),
+ (100, 115, 11), (122, 128, 10), (144, 141, 10), (151, 144, 11),
+ (159, 148, 12), (165, 149, 15), (164, 147, 19), (164, 148, 21),
+ (159, 147, 23), (144, 137, 33), (136, 135, 36), (129, 133, 39),
+ (124, 132, 39), (120, 131, 39), (109, 125, 42), (99, 119, 44),
+ (77, 105, 44), (69, 97, 44), (62, 90, 44), (62, 87, 44),
+ (62, 85, 45), (63, 81, 45), (66, 77, 46), (69, 74, 46),
+ (74, 74, 46), (81, 81, 44), (79, 82, 42), (78, 83, 40),
+ (72, 85, 35), (69, 88, 34), (70, 95, 36), (75, 104, 37),
+ (85, 117, 43), (96, 123, 52), (107, 130, 61), (112, 133, 64),
+ (118, 136, 68), (126, 139, 74), (127, 136, 77), (122, 128, 77),
+ (113, 118, 75), (97, 94, 64), (93, 87, 59), (89, 80, 55),
+ (84, 71, 46), (86, 70, 39), (94, 71, 32), (108, 76, 26),
+ (144, 103, 20), (159, 116, 17), (175, 130, 15), (179, 135, 13),
+ (184, 141, 12), (186, 147, 11), (181, 147, 9), (172, 144, 8),
+ (157, 137, 6), (117, 115, 7), (108, 110, 9), (100, 105, 12),
+ (85, 95, 18), (76, 87, 26), (68, 81, 34), (67, 80, 45),
+ (73, 82, 69), (75, 82, 73), (78, 82, 77), (83, 82, 81),
+ (86, 82, 82), (88, 81, 81), (89, 78, 76), (88, 73, 68),
+ (85, 65, 57), (74, 55, 36), (72, 54, 32), (70, 54, 29),
+ (66, 52, 23), (62, 51, 19), (59, 53, 19), (60, 59, 22),
+ (75, 80, 33), (81, 87, 37), (87, 94, 41), (103, 109, 51),
+ (120, 123, 59), (136, 136, 66), (147, 146, 70), (158, 153, 73),
+ (164, 157, 72), (165, 156, 68), (159, 148, 61), (150, 140, 54),
+ (142, 132, 45), (136, 125, 38), (131, 117, 34), (129, 113, 31),
+ (139, 121, 25), (143, 124, 25), (147, 127, 26), (156, 129, 32),
+ (166, 137, 38), (176, 145, 43), (180, 155, 47), (177, 155, 53),
+ (167, 150, 59), (155, 141, 66), (138, 135, 67), (121, 126, 65),
+ (101, 116, 64), (82, 101, 64), (64, 88, 63), (50, 75, 58),
+ (40, 67, 52), (34, 58, 48), (29, 52, 46), (26, 48, 44),
+ (25, 48, 39), (25, 48, 35), (26, 49, 33), (28, 51, 36),
+ (33, 56, 38), (39, 61, 41), (44, 61, 42), (48, 57, 42),
+ (52, 52, 43), (58, 49, 42), (65, 47, 39), (73, 43, 32),
+ (81, 40, 25), (90, 41, 20), (102, 49, 17), (112, 57, 14),
+ (124, 65, 10), (135, 74, 8), (147, 87, 8), (154, 97, 9),
+ (158, 102, 8), (160, 103, 6), (163, 107, 5), (164, 110, 6),
+ (159, 107, 7), (149, 98, 8), (139, 90, 9), (129, 88, 11),
+ (116, 86, 13), (97, 79, 14), (79, 72, 14), (68, 72, 15),
+ (61, 78, 14), (57, 85, 13), (58, 91, 11), (67, 99, 9),
+ (81, 109, 9), (96, 119, 10), (110, 125, 11), (124, 129, 12),
+ (136, 133, 12), (145, 137, 15), (152, 140, 18), (156, 144, 19),
+ (157, 147, 19), (155, 150, 20), (148, 149, 24), (140, 148, 28),
+ (127, 141, 33), (115, 136, 39), (99, 124, 49), (84, 116, 57)
+ ),
+
+// 582 Magenta_and_Teal
+((171, 65, 180), (173, 49, 158), (176, 50, 150), (179, 51, 142),
+ (183, 53, 146), (187, 56, 150), (194, 57, 156), (201, 58, 163),
+ (212, 54, 173), (211, 59, 175), (210, 64, 177), (207, 76, 185),
+ (205, 89, 193), (199, 102, 202), (193, 115, 211), (188, 119, 214),
+ (183, 123, 217), (162, 141, 218), (150, 151, 223), (138, 162, 228),
+ (127, 179, 228), (117, 196, 229), (112, 202, 230), (108, 209, 232),
+ (109, 229, 218), (116, 228, 209), (124, 228, 201), (127, 219, 188),
+ (131, 210, 175), (130, 201, 171), (130, 192, 168), (122, 173, 162),
+ (128, 156, 154), (156, 129, 155), (169, 124, 156), (183, 119, 157),
+ (185, 111, 157), (188, 104, 158), (185, 99, 156), (182, 94, 155),
+ (177, 73, 149), (181, 78, 153), (186, 83, 157), (197, 97, 165),
+ (209, 111, 173), (211, 121, 178), (214, 131, 183), (223, 144, 185),
+ (226, 159, 179), (230, 175, 174), (229, 182, 179), (228, 189, 184),
+ (222, 200, 198), (217, 212, 212), (212, 217, 217), (208, 222, 223),
+ (178, 231, 238), (162, 231, 238), (147, 232, 239), (141, 231, 237),
+ (135, 231, 235), (134, 230, 234), (134, 230, 234), (134, 230, 234),
+ (131, 228, 233), (120, 227, 233), (117, 229, 232), (114, 231, 231),
+ (118, 232, 230), (122, 234, 230), (132, 237, 230), (147, 239, 232),
+ (178, 242, 231), (183, 244, 233), (188, 246, 235), (182, 246, 238),
+ (177, 247, 241), (170, 247, 243), (163, 248, 245), (152, 246, 248),
+ (143, 245, 250), (128, 236, 246), (125, 224, 239), (122, 213, 233),
+ (114, 208, 228), (107, 204, 223), (92, 192, 214), (85, 178, 204),
+ (70, 147, 180), (69, 126, 164), (69, 106, 148), (66, 96, 139),
+ (63, 87, 131), (59, 76, 119), (62, 73, 110), (74, 73, 114),
+ (93, 82, 113), (128, 104, 115), (137, 111, 104), (146, 119, 94),
+ (144, 122, 88), (143, 126, 82), (140, 127, 84), (141, 131, 86),
+ (136, 134, 100), (134, 132, 106), (133, 131, 112), (130, 130, 111),
+ (127, 129, 110), (121, 120, 110), (108, 119, 115), (100, 117, 120),
+ (93, 117, 130), (92, 120, 162), (95, 126, 169), (98, 133, 177),
+ (114, 141, 191), (126, 153, 208), (139, 164, 217), (153, 174, 228),
+ (182, 171, 237), (199, 163, 238), (216, 156, 240), (223, 149, 238),
+ (231, 142, 237), (239, 132, 224), (243, 123, 213), (242, 109, 209),
+ (244, 91, 208), (242, 53, 215), (242, 44, 218), (242, 35, 222),
+ (243, 26, 220), (243, 25, 213), (241, 24, 209), (238, 25, 204),
+ (222, 23, 203), (207, 18, 203), (193, 13, 203), (184, 13, 199),
+ (175, 14, 195), (161, 15, 188), (149, 18, 187), (145, 29, 185),
+ (140, 44, 183), (143, 74, 181), (143, 81, 178), (144, 89, 176),
+ (146, 109, 169), (147, 121, 171), (156, 137, 174), (165, 154, 177),
+ (193, 183, 200), (201, 186, 204), (210, 189, 208), (221, 196, 210),
+ (229, 198, 209), (237, 197, 206), (242, 196, 198), (240, 195, 196),
+ (237, 188, 191), (234, 160, 201), (232, 154, 204), (231, 148, 207),
+ (230, 138, 213), (231, 130, 213), (232, 126, 215), (233, 118, 209),
+ (235, 100, 210), (233, 93, 210), (231, 87, 211), (225, 77, 211),
+ (216, 68, 207), (207, 64, 202), (200, 61, 193), (192, 61, 190),
+ (186, 62, 191), (179, 65, 196), (168, 67, 198), (153, 73, 197),
+ (138, 79, 196), (126, 90, 193), (112, 102, 193), (108, 115, 198),
+ (113, 150, 221), (113, 156, 226), (114, 162, 231), (121, 168, 241),
+ (127, 172, 244), (133, 172, 246), (142, 172, 245), (152, 177, 246),
+ (164, 181, 246), (168, 186, 242), (173, 190, 241), (174, 192, 238),
+ (169, 191, 234), (164, 191, 230), (151, 193, 228), (140, 196, 230),
+ (129, 200, 229), (118, 206, 230), (109, 214, 232), (102, 224, 233),
+ (101, 230, 231), (102, 236, 229), (107, 240, 228), (115, 243, 225),
+ (127, 242, 221), (136, 236, 217), (150, 231, 210), (164, 225, 202),
+ (175, 221, 197), (180, 219, 197), (184, 221, 198), (187, 226, 201),
+ (184, 228, 205), (180, 228, 205), (171, 226, 202), (156, 220, 197),
+ (140, 211, 195), (124, 207, 196), (115, 209, 200), (113, 211, 209),
+ (117, 217, 220), (123, 225, 227), (124, 229, 231), (124, 227, 231),
+ (118, 226, 231), (111, 225, 228), (107, 220, 227), (111, 220, 228),
+ (123, 225, 229), (137, 232, 232), (153, 236, 235), (164, 241, 238),
+ (171, 246, 237), (171, 245, 236), (169, 243, 235), (171, 240, 227),
+ (173, 232, 221), (173, 219, 211), (173, 209, 205), (177, 205, 200),
+ (184, 198, 198), (185, 193, 202), (184, 186, 203), (182, 177, 205),
+ (177, 156, 198), (172, 136, 192), (151, 116, 176), (144, 99, 164),
+ (135, 88, 159), (137, 79, 163), (144, 78, 172), (150, 71, 173)
+ ),
+
+// 583 Mahogany
+((49, 9, 15), (40, 6, 12), (30, 3, 9), (21, 0, 7),
+ (21, 0, 7), (21, 0, 8), (21, 0, 8), (21, 1, 8),
+ (22, 1, 9), (22, 1, 9), (22, 2, 10), (22, 2, 10),
+ (22, 2, 10), (22, 2, 10), (23, 2, 10), (23, 1, 10),
+ (24, 1, 11), (25, 2, 11), (28, 3, 12), (32, 5, 13),
+ (37, 6, 14), (43, 8, 16), (45, 8, 16), (47, 9, 17),
+ (52, 11, 17), (53, 11, 18), (55, 12, 19), (57, 12, 19),
+ (60, 12, 20), (61, 12, 19), (62, 12, 18), (65, 13, 19),
+ (70, 14, 19), (85, 19, 21), (97, 24, 23), (110, 29, 25),
+ (119, 35, 28), (128, 42, 31), (133, 46, 33), (138, 51, 36),
+ (164, 74, 49), (166, 76, 49), (168, 79, 49), (165, 76, 48),
+ (162, 74, 47), (162, 74, 48), (163, 75, 49), (162, 76, 50),
+ (158, 71, 47), (145, 57, 40), (141, 54, 39), (137, 52, 39),
+ (133, 48, 38), (129, 44, 37), (127, 42, 36), (126, 41, 35),
+ (116, 36, 32), (109, 32, 31), (103, 28, 30), (96, 24, 29),
+ (90, 21, 28), (86, 19, 27), (82, 18, 27), (74, 14, 23),
+ (68, 12, 21), (58, 9, 18), (53, 7, 16), (48, 6, 15),
+ (46, 5, 14), (44, 5, 14), (41, 3, 12), (40, 3, 12),
+ (40, 2, 10), (39, 2, 10), (38, 2, 10), (37, 2, 9),
+ (36, 2, 9), (35, 2, 9), (35, 2, 9), (33, 2, 9),
+ (31, 1, 8), (26, 1, 8), (25, 0, 7), (24, 0, 7),
+ (24, 0, 7), (25, 0, 7), (27, 0, 6), (30, 1, 8),
+ (39, 2, 8), (44, 3, 9), (49, 4, 10), (50, 4, 10),
+ (52, 5, 11), (53, 5, 11), (54, 6, 12), (56, 6, 13),
+ (57, 6, 12), (58, 8, 18), (57, 8, 19), (57, 9, 20),
+ (57, 9, 19), (58, 9, 18), (59, 10, 19), (61, 12, 21),
+ (70, 15, 24), (76, 16, 24), (82, 18, 25), (84, 19, 25),
+ (87, 20, 25), (92, 21, 23), (98, 23, 25), (103, 24, 26),
+ (106, 25, 29), (103, 23, 27), (100, 22, 26), (98, 22, 25),
+ (91, 20, 23), (82, 18, 23), (71, 16, 23), (60, 12, 18),
+ (41, 7, 14), (34, 5, 11), (28, 3, 9), (26, 2, 8),
+ (25, 2, 8), (23, 2, 9), (22, 1, 7), (21, 0, 6),
+ (21, 0, 6), (21, 0, 7), (21, 0, 7), (21, 0, 7),
+ (21, 0, 7), (22, 0, 7), (23, 0, 8), (24, 0, 8),
+ (26, 0, 10), (27, 0, 9), (29, 1, 9), (29, 0, 8),
+ (30, 0, 8), (31, 1, 10), (31, 1, 10), (31, 1, 10),
+ (31, 0, 8), (30, 1, 10), (29, 1, 9), (29, 1, 9),
+ (28, 1, 10), (28, 0, 8), (29, 0, 9), (31, 0, 7),
+ (40, 4, 10), (43, 5, 10), (47, 6, 11), (55, 9, 14),
+ (64, 11, 15), (71, 12, 14), (77, 14, 14), (81, 17, 16),
+ (83, 17, 17), (81, 16, 18), (79, 15, 17), (77, 15, 17),
+ (71, 13, 14), (63, 10, 11), (55, 9, 12), (48, 7, 13),
+ (38, 4, 10), (37, 3, 9), (37, 3, 9), (37, 3, 9),
+ (40, 4, 11), (44, 5, 12), (47, 7, 15), (49, 9, 18),
+ (49, 10, 19), (49, 10, 19), (49, 10, 20), (48, 9, 19),
+ (46, 9, 18), (42, 8, 17), (36, 7, 16), (31, 5, 14),
+ (26, 1, 10), (25, 0, 9), (25, 0, 9), (24, 0, 8),
+ (23, 0, 8), (23, 0, 8), (23, 0, 8), (23, 0, 8),
+ (24, 0, 8), (23, 0, 8), (23, 0, 6), (24, 1, 9),
+ (26, 1, 8), (29, 2, 9), (33, 4, 12), (40, 6, 15),
+ (46, 9, 18), (52, 12, 22), (58, 14, 24), (65, 15, 24),
+ (74, 17, 25), (83, 20, 29), (88, 22, 29), (91, 24, 33),
+ (91, 25, 32), (91, 25, 32), (92, 26, 36), (93, 25, 34),
+ (92, 25, 34), (89, 24, 31), (86, 23, 31), (83, 23, 33),
+ (80, 21, 31), (79, 19, 29), (78, 18, 28), (79, 16, 24),
+ (80, 16, 24), (81, 16, 23), (83, 16, 23), (85, 17, 23),
+ (88, 17, 24), (90, 17, 23), (92, 17, 23), (92, 18, 25),
+ (91, 17, 22), (91, 17, 22), (88, 15, 18), (83, 13, 17),
+ (77, 12, 18), (71, 10, 17), (68, 9, 16), (67, 9, 16),
+ (67, 9, 16), (67, 10, 17), (67, 10, 18), (68, 11, 19),
+ (69, 12, 20), (71, 13, 22), (71, 13, 22), (69, 13, 22),
+ (65, 12, 21), (59, 10, 18), (55, 9, 17), (51, 9, 17),
+ (48, 8, 17), (48, 9, 17), (50, 10, 19), (55, 12, 19),
+ (52, 11, 18), (48, 9, 15), (44, 8, 14), (41, 7, 14)
+ ),
+
+// 584 Marina
+((19, 87, 122), (22, 88, 114), (18, 90, 112), (14, 92, 110),
+ (15, 103, 113), (17, 115, 116), (17, 119, 115), (18, 123, 115),
+ (13, 138, 116), (14, 139, 117), (16, 141, 118), (20, 135, 122),
+ (25, 130, 127), (30, 129, 135), (35, 128, 143), (36, 127, 148),
+ (38, 127, 153), (44, 119, 171), (47, 119, 175), (50, 119, 179),
+ (51, 120, 175), (52, 122, 172), (56, 123, 167), (61, 124, 163),
+ (103, 136, 137), (117, 146, 136), (132, 156, 135), (136, 160, 142),
+ (141, 164, 150), (141, 163, 148), (141, 163, 147), (149, 163, 145),
+ (139, 161, 147), (101, 149, 168), (84, 139, 166), (67, 129, 164),
+ (64, 125, 153), (62, 121, 142), (64, 121, 140), (67, 121, 138),
+ (65, 119, 128), (59, 112, 125), (53, 105, 122), (51, 102, 120),
+ (50, 100, 119), (46, 97, 117), (43, 94, 115), (29, 82, 114),
+ (14, 68, 111), (2, 55, 106), (1, 57, 105), (1, 59, 105),
+ (3, 65, 105), (6, 71, 106), (6, 77, 105), (6, 83, 105),
+ (5, 106, 109), (6, 114, 109), (7, 123, 110), (7, 130, 105),
+ (7, 138, 100), (6, 140, 99), (6, 142, 99), (5, 141, 97),
+ (6, 132, 93), (5, 114, 94), (8, 115, 102), (11, 117, 110),
+ (15, 119, 113), (20, 121, 116), (32, 129, 127), (47, 133, 132),
+ (67, 139, 146), (72, 146, 157), (77, 154, 168), (85, 157, 174),
+ (94, 160, 180), (97, 159, 181), (101, 159, 182), (101, 153, 184),
+ (97, 149, 192), (91, 144, 204), (95, 147, 206), (100, 151, 208),
+ (104, 155, 210), (109, 160, 212), (117, 164, 212), (132, 161, 194),
+ (150, 138, 142), (140, 129, 138), (130, 121, 134), (125, 114, 132),
+ (121, 108, 130), (114, 111, 118), (107, 93, 95), (98, 89, 89),
+ (71, 89, 96), (27, 94, 125), (20, 94, 128), (14, 95, 132),
+ (11, 96, 134), (9, 98, 137), (6, 102, 137), (4, 102, 138),
+ (4, 87, 136), (4, 84, 138), (5, 82, 140), (6, 83, 142),
+ (7, 84, 145), (10, 86, 148), (15, 89, 152), (20, 94, 156),
+ (26, 99, 159), (34, 103, 152), (36, 100, 144), (39, 97, 137),
+ (42, 91, 123), (42, 86, 111), (42, 81, 105), (35, 78, 97),
+ (27, 52, 57), (22, 41, 45), (18, 31, 33), (14, 31, 36),
+ (11, 32, 40), (6, 35, 53), (3, 36, 61), (0, 36, 64),
+ (1, 41, 72), (0, 60, 105), (0, 65, 114), (1, 71, 123),
+ (2, 79, 134), (3, 83, 142), (3, 87, 149), (3, 89, 156),
+ (5, 91, 162), (6, 90, 162), (7, 90, 163), (6, 90, 164),
+ (6, 90, 166), (7, 94, 173), (18, 102, 178), (35, 118, 188),
+ (57, 137, 199), (91, 169, 212), (94, 170, 211), (98, 172, 211),
+ (99, 182, 209), (94, 188, 208), (98, 193, 203), (99, 199, 202),
+ (97, 187, 190), (90, 182, 188), (83, 178, 187), (75, 170, 186),
+ (71, 169, 191), (76, 166, 196), (91, 167, 200), (102, 168, 206),
+ (112, 165, 210), (111, 160, 218), (108, 158, 216), (105, 156, 214),
+ (95, 149, 210), (86, 139, 205), (78, 133, 200), (72, 129, 197),
+ (63, 125, 190), (61, 122, 189), (59, 120, 189), (59, 122, 188),
+ (63, 124, 189), (71, 128, 188), (79, 133, 185), (86, 134, 180),
+ (88, 132, 176), (82, 128, 170), (78, 124, 163), (75, 123, 151),
+ (78, 129, 132), (86, 131, 118), (81, 132, 113), (71, 125, 115),
+ (45, 116, 123), (45, 117, 120), (46, 119, 118), (46, 122, 121),
+ (42, 119, 129), (35, 114, 144), (26, 107, 157), (23, 102, 163),
+ (25, 102, 167), (28, 104, 169), (34, 110, 171), (44, 117, 169),
+ (52, 121, 166), (57, 122, 165), (56, 118, 165), (51, 112, 158),
+ (50, 107, 146), (53, 102, 128), (60, 93, 111), (68, 78, 95),
+ (72, 60, 80), (80, 43, 64), (89, 33, 46), (97, 27, 32),
+ (111, 20, 19), (118, 15, 11), (121, 14, 9), (121, 20, 10),
+ (110, 32, 20), (107, 42, 34), (103, 54, 44), (98, 64, 54),
+ (96, 77, 59), (83, 92, 69), (73, 100, 80), (63, 110, 87),
+ (57, 111, 91), (56, 109, 90), (50, 104, 90), (42, 90, 84),
+ (26, 80, 73), (17, 71, 59), (10, 64, 53), (6, 57, 54),
+ (6, 49, 60), (2, 42, 65), (4, 38, 63), (5, 41, 64),
+ (5, 46, 73), (5, 52, 87), (2, 57, 104), (0, 61, 117),
+ (0, 65, 123), (0, 67, 128), (0, 68, 126), (1, 67, 125),
+ (1, 65, 122), (2, 63, 118), (2, 63, 117), (1, 62, 114),
+ (1, 62, 112), (1, 61, 112), (2, 62, 113), (3, 66, 119),
+ (4, 73, 126), (7, 80, 134), (10, 87, 138), (16, 95, 139),
+ (15, 87, 129), (13, 83, 121), (12, 77, 117), (10, 74, 114)
+ ),
+
+// 585 Meadow
+((153, 129, 176), (154, 126, 170), (168, 135, 178), (183, 144, 187),
+ (195, 152, 198), (208, 160, 209), (212, 162, 213), (217, 165, 218),
+ (235, 179, 234), (228, 176, 228), (222, 173, 223), (203, 163, 206),
+ (185, 153, 190), (164, 147, 168), (143, 142, 146), (127, 140, 128),
+ (111, 138, 110), (105, 127, 91), (105, 124, 90), (105, 122, 89),
+ (108, 117, 88), (111, 112, 88), (111, 102, 93), (112, 92, 99),
+ (111, 76, 119), (103, 70, 111), (95, 64, 103), (84, 58, 94),
+ (74, 52, 85), (69, 50, 80), (65, 49, 75), (53, 45, 64),
+ (45, 41, 59), (38, 38, 50), (36, 38, 49), (35, 39, 48),
+ (34, 39, 45), (34, 39, 42), (34, 37, 41), (34, 36, 40),
+ (33, 35, 41), (34, 35, 43), (36, 36, 46), (44, 41, 52),
+ (52, 46, 59), (57, 48, 64), (62, 50, 70), (74, 57, 81),
+ (87, 64, 94), (110, 81, 117), (115, 86, 121), (120, 91, 126),
+ (114, 92, 121), (109, 93, 117), (103, 91, 111), (97, 89, 106),
+ (68, 93, 66), (55, 93, 51), (42, 93, 37), (36, 94, 30),
+ (31, 96, 24), (32, 96, 25), (34, 97, 27), (38, 97, 36),
+ (48, 101, 47), (72, 116, 101), (76, 130, 116), (81, 145, 132),
+ (79, 143, 123), (77, 141, 114), (68, 135, 90), (55, 142, 69),
+ (33, 138, 34), (39, 135, 23), (45, 133, 13), (43, 131, 7),
+ (42, 130, 2), (41, 131, 1), (40, 133, 1), (40, 133, 1),
+ (29, 126, 0), (37, 133, 2), (34, 128, 5), (31, 123, 9),
+ (34, 118, 15), (37, 113, 22), (45, 109, 35), (49, 99, 46),
+ (67, 83, 71), (71, 76, 78), (76, 70, 86), (80, 67, 90),
+ (84, 65, 94), (89, 62, 98), (94, 65, 102), (101, 70, 107),
+ (109, 78, 117), (130, 95, 135), (134, 98, 140), (139, 102, 145),
+ (139, 102, 145), (140, 102, 145), (134, 98, 139), (123, 92, 129),
+ (102, 78, 107), (95, 75, 100), (88, 72, 94), (85, 70, 91),
+ (82, 69, 89), (75, 67, 85), (77, 66, 88), (78, 67, 88),
+ (77, 66, 87), (64, 60, 80), (62, 58, 76), (60, 56, 73),
+ (57, 52, 68), (54, 52, 68), (57, 56, 72), (62, 58, 75),
+ (92, 70, 101), (106, 79, 114), (120, 89, 128), (128, 94, 136),
+ (137, 99, 144), (149, 106, 156), (161, 116, 166), (165, 121, 171),
+ (172, 126, 175), (175, 128, 178), (173, 127, 178), (172, 127, 178),
+ (172, 126, 177), (169, 126, 174), (162, 125, 167), (152, 124, 160),
+ (130, 140, 158), (118, 149, 158), (107, 159, 159), (99, 155, 145),
+ (92, 151, 132), (74, 144, 101), (52, 147, 74), (41, 137, 65),
+ (32, 134, 44), (34, 137, 14), (33, 128, 15), (32, 119, 17),
+ (33, 102, 23), (37, 88, 32), (44, 85, 36), (48, 72, 47),
+ (70, 61, 78), (79, 65, 86), (88, 70, 94), (101, 77, 108),
+ (99, 75, 106), (102, 79, 110), (101, 82, 109), (95, 83, 106),
+ (80, 76, 94), (56, 75, 69), (47, 73, 57), (39, 71, 45),
+ (27, 73, 26), (20, 69, 20), (26, 70, 18), (31, 70, 20),
+ (39, 69, 32), (45, 70, 37), (51, 72, 43), (57, 72, 54),
+ (69, 72, 70), (73, 76, 87), (80, 83, 98), (87, 95, 105),
+ (89, 97, 104), (87, 94, 100), (82, 84, 97), (77, 79, 92),
+ (71, 77, 85), (66, 71, 76), (62, 62, 71), (70, 61, 75),
+ (73, 72, 89), (79, 82, 95), (85, 93, 102), (95, 108, 115),
+ (99, 124, 127), (107, 125, 131), (105, 131, 132), (98, 129, 127),
+ (87, 124, 120), (85, 111, 111), (84, 93, 100), (79, 76, 91),
+ (82, 73, 92), (91, 75, 100), (104, 81, 112), (123, 90, 129),
+ (144, 103, 148), (165, 117, 166), (180, 128, 181), (189, 135, 189),
+ (192, 140, 192), (195, 142, 195), (196, 142, 196), (188, 138, 191),
+ (179, 132, 184), (174, 126, 179), (171, 123, 175), (162, 120, 168),
+ (151, 117, 159), (138, 108, 149), (124, 97, 135), (107, 87, 118),
+ (89, 79, 99), (72, 72, 82), (57, 66, 63), (40, 55, 41),
+ (29, 47, 29), (20, 42, 21), (17, 41, 15), (15, 39, 13),
+ (16, 38, 12), (12, 30, 12), (15, 25, 18), (21, 27, 29),
+ (24, 30, 31), (25, 28, 30), (25, 25, 34), (34, 32, 45),
+ (48, 47, 61), (64, 61, 75), (81, 71, 90), (106, 85, 114),
+ (129, 103, 135), (151, 124, 157), (173, 138, 177), (191, 148, 194),
+ (205, 154, 206), (208, 158, 212), (213, 160, 215), (208, 162, 211),
+ (203, 170, 199), (193, 176, 197), (199, 183, 205), (202, 186, 214),
+ (217, 197, 217), (210, 203, 216), (210, 204, 223), (202, 191, 230),
+ (199, 177, 222), (193, 164, 214), (180, 153, 202), (169, 140, 191)
+ ),
+
+// 586 Mermaid
+((70, 122, 117), (80, 108, 100), (81, 102, 97), (82, 97, 94),
+ (76, 94, 104), (71, 92, 114), (67, 91, 120), (64, 90, 127),
+ (54, 86, 151), (60, 88, 156), (66, 91, 161), (76, 97, 166),
+ (87, 103, 172), (95, 110, 177), (103, 117, 183), (104, 121, 185),
+ (106, 125, 188), (101, 135, 205), (93, 139, 207), (86, 144, 210),
+ (84, 146, 210), (82, 148, 211), (81, 148, 211), (81, 149, 211),
+ (74, 129, 204), (73, 121, 202), (73, 114, 200), (66, 102, 198),
+ (59, 91, 196), (57, 89, 196), (56, 88, 196), (56, 91, 197),
+ (56, 93, 199), (51, 91, 203), (49, 92, 207), (48, 94, 211),
+ (41, 87, 213), (34, 80, 216), (31, 78, 217), (28, 76, 218),
+ (17, 71, 218), (15, 72, 216), (14, 73, 215), (15, 78, 212),
+ (17, 83, 210), (18, 88, 209), (20, 93, 209), (24, 102, 207),
+ (26, 108, 203), (34, 121, 193), (38, 126, 186), (43, 131, 179),
+ (44, 131, 166), (46, 131, 154), (46, 132, 149), (46, 134, 145),
+ (49, 138, 138), (44, 135, 139), (39, 132, 141), (36, 128, 148),
+ (34, 124, 156), (31, 119, 160), (29, 115, 165), (23, 103, 172),
+ (19, 91, 175), (16, 71, 178), (16, 66, 175), (16, 61, 173),
+ (19, 64, 172), (23, 68, 171), (32, 81, 168), (39, 89, 154),
+ (55, 116, 126), (63, 132, 118), (71, 148, 110), (78, 155, 113),
+ (85, 162, 116), (84, 161, 121), (84, 161, 127), (75, 151, 134),
+ (72, 139, 146), (70, 124, 179), (63, 114, 178), (57, 105, 178),
+ (56, 103, 174), (56, 101, 171), (57, 103, 161), (56, 106, 145),
+ (47, 113, 114), (43, 116, 104), (40, 119, 95), (36, 119, 91),
+ (32, 120, 88), (25, 120, 88), (23, 120, 90), (22, 119, 89),
+ (20, 118, 86), (28, 107, 77), (37, 101, 69), (47, 95, 61),
+ (51, 90, 56), (55, 86, 51), (66, 78, 44), (78, 77, 40),
+ (104, 89, 45), (104, 93, 42), (105, 98, 39), (102, 100, 37),
+ (99, 103, 35), (91, 106, 34), (82, 110, 37), (73, 114, 42),
+ (66, 118, 52), (59, 120, 79), (60, 119, 85), (61, 118, 92),
+ (67, 117, 102), (78, 118, 109), (88, 117, 110), (98, 114, 104),
+ (114, 108, 76), (119, 107, 63), (125, 107, 50), (126, 107, 46),
+ (128, 108, 43), (127, 107, 36), (124, 106, 30), (116, 106, 29),
+ (104, 102, 29), (73, 90, 25), (67, 88, 26), (61, 87, 27),
+ (53, 85, 33), (46, 83, 40), (39, 75, 42), (39, 67, 44),
+ (58, 60, 48), (70, 57, 45), (83, 54, 42), (90, 57, 39),
+ (98, 61, 37), (116, 80, 36), (124, 95, 30), (124, 105, 24),
+ (119, 117, 21), (103, 146, 26), (96, 148, 29), (90, 150, 33),
+ (78, 152, 47), (69, 157, 64), (61, 156, 83), (55, 152, 104),
+ (54, 161, 151), (56, 164, 159), (59, 168, 167), (60, 168, 175),
+ (54, 167, 175), (46, 164, 163), (42, 159, 141), (40, 150, 117),
+ (41, 143, 97), (54, 135, 61), (55, 131, 52), (57, 127, 44),
+ (55, 118, 35), (59, 117, 40), (71, 127, 58), (78, 140, 81),
+ (72, 142, 118), (71, 143, 127), (70, 144, 137), (74, 154, 162),
+ (77, 160, 182), (77, 158, 194), (72, 153, 202), (67, 152, 210),
+ (62, 148, 213), (53, 140, 213), (42, 133, 213), (34, 129, 209),
+ (29, 125, 199), (24, 118, 186), (22, 111, 170), (24, 106, 152),
+ (28, 100, 114), (30, 99, 109), (32, 98, 105), (36, 97, 99),
+ (37, 99, 100), (32, 97, 101), (30, 93, 107), (28, 87, 114),
+ (26, 84, 120), (22, 79, 119), (21, 71, 113), (24, 60, 101),
+ (27, 49, 84), (31, 41, 68), (35, 35, 54), (39, 34, 48),
+ (40, 35, 44), (39, 40, 46), (36, 48, 52), (31, 59, 61),
+ (26, 70, 68), (21, 79, 69), (17, 84, 66), (17, 88, 61),
+ (20, 93, 55), (24, 96, 51), (29, 96, 50), (35, 97, 54),
+ (40, 102, 64), (40, 106, 77), (39, 112, 94), (37, 116, 110),
+ (37, 122, 125), (33, 127, 138), (30, 132, 150), (29, 136, 158),
+ (33, 140, 163), (41, 143, 167), (54, 149, 171), (67, 153, 173),
+ (77, 152, 172), (86, 150, 165), (97, 150, 154), (105, 149, 140),
+ (106, 145, 123), (104, 145, 104), (103, 145, 85), (100, 145, 67),
+ (92, 143, 51), (84, 142, 37), (78, 141, 27), (73, 137, 21),
+ (71, 134, 20), (70, 130, 24), (71, 125, 31), (73, 120, 39),
+ (78, 116, 49), (86, 109, 59), (91, 104, 65), (94, 100, 68),
+ (96, 96, 71), (95, 92, 71), (86, 87, 65), (74, 87, 59),
+ (66, 92, 63), (63, 105, 80), (53, 113, 96), (44, 120, 106),
+ (40, 123, 113), (46, 130, 127), (51, 132, 135), (60, 130, 132)
+ ),
+
+// 587 Mesmerize
+((20, 29, 51), (12, 59, 51), (12, 83, 57), (12, 107, 63),
+ (25, 120, 72), (39, 133, 82), (46, 145, 85), (53, 158, 89),
+ (77, 150, 120), (84, 151, 127), (91, 153, 135), (95, 148, 139),
+ (100, 143, 144), (112, 135, 146), (124, 128, 149), (132, 130, 154),
+ (140, 132, 159), (159, 138, 154), (171, 139, 156), (184, 141, 158),
+ (190, 145, 154), (197, 149, 151), (201, 146, 153), (206, 144, 156),
+ (224, 140, 154), (225, 118, 156), (226, 97, 159), (211, 85, 158),
+ (197, 74, 158), (188, 65, 155), (179, 56, 153), (140, 59, 152),
+ (100, 64, 147), (50, 65, 111), (40, 73, 101), (30, 81, 92),
+ (57, 81, 96), (85, 81, 101), (99, 86, 105), (113, 91, 109),
+ (179, 56, 135), (189, 47, 144), (199, 38, 154), (208, 29, 154),
+ (218, 21, 154), (216, 30, 155), (214, 39, 157), (228, 48, 159),
+ (196, 51, 149), (184, 88, 135), (172, 92, 124), (161, 96, 114),
+ (177, 99, 109), (193, 102, 104), (189, 105, 103), (186, 108, 102),
+ (161, 112, 115), (159, 124, 120), (157, 136, 125), (171, 133, 134),
+ (186, 130, 143), (200, 131, 144), (214, 133, 146), (233, 128, 147),
+ (240, 127, 143), (243, 133, 124), (245, 132, 122), (247, 132, 120),
+ (241, 134, 121), (236, 136, 122), (227, 127, 127), (218, 123, 133),
+ (182, 126, 149), (161, 120, 139), (141, 114, 130), (134, 114, 129),
+ (128, 114, 128), (123, 108, 128), (118, 103, 128), (110, 103, 130),
+ (122, 101, 137), (127, 85, 150), (129, 92, 150), (131, 100, 150),
+ (129, 108, 148), (127, 116, 147), (122, 123, 141), (118, 134, 139),
+ (140, 146, 134), (152, 129, 135), (165, 113, 136), (169, 108, 138),
+ (174, 104, 141), (177, 99, 154), (170, 92, 165), (161, 89, 166),
+ (164, 95, 170), (179, 118, 162), (192, 107, 143), (205, 97, 124),
+ (209, 95, 117), (214, 94, 111), (232, 76, 104), (236, 56, 101),
+ (245, 44, 107), (244, 45, 115), (244, 46, 124), (239, 48, 128),
+ (234, 51, 132), (225, 62, 135), (215, 72, 144), (202, 75, 157),
+ (191, 77, 158), (164, 70, 161), (153, 63, 164), (142, 56, 168),
+ (128, 41, 170), (116, 34, 167), (91, 44, 166), (81, 41, 163),
+ (105, 49, 153), (109, 58, 150), (113, 67, 148), (116, 71, 151),
+ (119, 76, 155), (131, 91, 160), (142, 110, 158), (148, 124, 157),
+ (167, 134, 150), (197, 133, 135), (198, 128, 131), (200, 123, 128),
+ (197, 108, 116), (194, 100, 110), (181, 101, 109), (163, 107, 115),
+ (132, 137, 128), (115, 142, 141), (99, 148, 155), (94, 147, 156),
+ (89, 146, 158), (111, 129, 163), (132, 125, 160), (148, 128, 146),
+ (179, 128, 135), (231, 139, 123), (235, 136, 118), (240, 134, 114),
+ (244, 130, 119), (249, 125, 126), (249, 117, 135), (250, 118, 144),
+ (246, 142, 154), (246, 144, 157), (246, 146, 160), (248, 149, 161),
+ (243, 139, 160), (247, 117, 160), (249, 96, 160), (247, 75, 160),
+ (251, 52, 161), (245, 39, 156), (242, 35, 153), (239, 31, 150),
+ (235, 38, 141), (224, 51, 134), (210, 52, 134), (202, 54, 132),
+ (181, 52, 132), (179, 51, 138), (178, 51, 144), (184, 37, 144),
+ (183, 35, 140), (187, 48, 144), (194, 54, 149), (210, 62, 147),
+ (223, 84, 138), (222, 109, 134), (229, 126, 133), (241, 134, 131),
+ (238, 142, 132), (237, 148, 136), (237, 143, 144), (221, 147, 152),
+ (195, 143, 160), (179, 143, 158), (164, 144, 156), (138, 143, 144),
+ (106, 120, 124), (73, 92, 103), (60, 71, 92), (71, 48, 96),
+ (87, 29, 97), (103, 14, 98), (154, 18, 120), (195, 29, 133),
+ (211, 33, 128), (234, 44, 124), (242, 61, 124), (241, 73, 125),
+ (246, 75, 120), (246, 82, 117), (244, 93, 110), (237, 107, 104),
+ (224, 117, 102), (217, 125, 89), (217, 142, 87), (218, 140, 89),
+ (220, 132, 85), (228, 128, 100), (241, 111, 113), (246, 91, 121),
+ (241, 74, 134), (234, 65, 149), (225, 54, 161), (208, 43, 167),
+ (191, 41, 164), (181, 42, 165), (172, 41, 173), (172, 41, 168),
+ (182, 54, 167), (198, 62, 175), (206, 61, 169), (210, 77, 166),
+ (216, 88, 168), (205, 83, 167), (192, 83, 164), (185, 84, 158),
+ (181, 78, 155), (181, 72, 153), (183, 74, 147), (192, 78, 148),
+ (204, 85, 150), (210, 95, 149), (213, 97, 153), (212, 101, 154),
+ (196, 104, 150), (178, 95, 147), (153, 96, 146), (109, 97, 136),
+ (85, 87, 118), (89, 92, 119), (79, 91, 124), (84, 77, 118),
+ (119, 75, 113), (151, 69, 119), (174, 56, 129), (193, 51, 119),
+ (205, 50, 104), (205, 48, 103), (168, 44, 96), (126, 42, 80),
+ (115, 31, 68), (72, 25, 61), (29, 33, 55), (26, 28, 49)
+ ),
+
+// 588 Midnight_Wave
+((15, 35, 151), (16, 39, 153), (17, 39, 157), (18, 40, 161),
+ (19, 39, 165), (20, 39, 170), (20, 40, 171), (21, 42, 172),
+ (23, 47, 173), (22, 44, 171), (21, 41, 170), (20, 35, 167),
+ (20, 29, 164), (18, 27, 158), (17, 26, 153), (17, 26, 148),
+ (17, 26, 144), (12, 22, 126), (10, 18, 116), (9, 14, 106),
+ (7, 11, 94), (5, 8, 83), (4, 7, 77), (3, 6, 72),
+ (1, 3, 53), (0, 2, 45), (0, 2, 37), (0, 1, 32),
+ (0, 0, 27), (0, 0, 25), (0, 0, 24), (0, 0, 23),
+ (0, 0, 23), (0, 1, 25), (0, 1, 28), (0, 1, 31),
+ (0, 1, 34), (1, 2, 37), (2, 3, 38), (3, 5, 39),
+ (5, 8, 42), (5, 7, 42), (5, 7, 43), (4, 6, 41),
+ (4, 6, 39), (4, 6, 38), (5, 7, 37), (6, 9, 36),
+ (5, 8, 35), (3, 6, 34), (2, 4, 35), (1, 2, 36),
+ (1, 3, 40), (1, 4, 45), (1, 4, 49), (2, 5, 54),
+ (6, 16, 79), (13, 30, 94), (20, 44, 109), (41, 66, 126),
+ (62, 89, 143), (74, 99, 152), (87, 110, 162), (106, 129, 179),
+ (121, 148, 193), (139, 180, 217), (143, 186, 220), (148, 192, 224),
+ (148, 190, 224), (148, 188, 224), (144, 177, 221), (128, 158, 213),
+ (92, 124, 188), (72, 103, 173), (53, 82, 159), (36, 62, 143),
+ (20, 42, 127), (17, 36, 121), (15, 30, 116), (10, 21, 102),
+ (7, 15, 88), (3, 7, 66), (2, 5, 58), (1, 3, 50),
+ (0, 2, 47), (0, 2, 44), (0, 2, 39), (0, 2, 36),
+ (0, 2, 30), (0, 1, 29), (0, 1, 28), (0, 1, 28),
+ (0, 2, 28), (1, 2, 28), (1, 2, 28), (1, 2, 28),
+ (1, 2, 27), (1, 1, 27), (1, 1, 29), (1, 2, 32),
+ (1, 2, 34), (1, 3, 36), (2, 3, 42), (2, 4, 48),
+ (2, 5, 61), (3, 7, 71), (5, 10, 82), (6, 12, 87),
+ (8, 15, 92), (8, 15, 92), (8, 15, 94), (8, 15, 97),
+ (10, 16, 101), (16, 25, 129), (17, 27, 131), (19, 30, 134),
+ (21, 33, 137), (20, 34, 139), (20, 31, 137), (16, 25, 136),
+ (16, 25, 150), (16, 26, 150), (17, 27, 150), (16, 27, 148),
+ (16, 27, 147), (16, 24, 144), (14, 22, 143), (14, 25, 142),
+ (16, 34, 142), (26, 59, 148), (29, 65, 150), (32, 72, 152),
+ (38, 82, 160), (44, 95, 169), (49, 108, 178), (54, 114, 185),
+ (53, 113, 177), (49, 104, 166), (45, 95, 156), (43, 92, 151),
+ (42, 90, 146), (41, 83, 144), (37, 72, 142), (33, 65, 140),
+ (28, 59, 137), (22, 54, 130), (22, 55, 131), (23, 56, 132),
+ (22, 52, 134), (21, 49, 137), (20, 48, 137), (19, 47, 135),
+ (18, 49, 120), (17, 46, 114), (16, 44, 109), (13, 33, 97),
+ (9, 23, 84), (5, 12, 71), (3, 6, 58), (2, 4, 48),
+ (1, 3, 41), (0, 2, 34), (0, 2, 34), (0, 2, 34),
+ (0, 2, 35), (0, 1, 37), (0, 2, 40), (0, 2, 43),
+ (1, 3, 53), (1, 3, 56), (2, 4, 59), (2, 5, 66),
+ (3, 6, 77), (3, 6, 86), (4, 7, 92), (4, 7, 97),
+ (4, 7, 100), (4, 7, 100), (4, 8, 102), (4, 9, 105),
+ (4, 10, 105), (4, 10, 103), (4, 10, 102), (4, 10, 98),
+ (4, 10, 99), (4, 11, 101), (5, 12, 104), (7, 15, 110),
+ (9, 19, 118), (12, 22, 125), (15, 25, 132), (17, 27, 141),
+ (18, 28, 151), (19, 28, 160), (20, 28, 167), (20, 28, 169),
+ (20, 28, 165), (20, 27, 157), (18, 24, 147), (16, 21, 138),
+ (14, 17, 128), (11, 13, 117), (8, 10, 105), (6, 7, 91),
+ (4, 5, 78), (2, 5, 67), (2, 3, 58), (1, 3, 52),
+ (1, 3, 49), (1, 3, 48), (2, 3, 50), (2, 4, 54),
+ (3, 5, 56), (3, 5, 58), (3, 6, 60), (3, 6, 59),
+ (4, 5, 59), (4, 5, 60), (5, 6, 61), (4, 7, 63),
+ (5, 9, 68), (6, 11, 73), (7, 15, 82), (10, 20, 91),
+ (15, 29, 102), (18, 40, 112), (23, 50, 122), (28, 57, 135),
+ (30, 62, 148), (31, 67, 161), (34, 69, 172), (34, 72, 179),
+ (35, 74, 182), (36, 72, 181), (35, 67, 181), (31, 61, 178),
+ (27, 50, 172), (23, 43, 166), (19, 35, 160), (17, 29, 153),
+ (16, 25, 152), (16, 23, 152), (16, 24, 152), (18, 28, 154),
+ (18, 31, 156), (18, 33, 155), (18, 37, 157), (18, 38, 158),
+ (18, 38, 157), (19, 38, 157), (18, 38, 156), (17, 37, 155),
+ (16, 37, 156), (15, 36, 157), (14, 35, 155), (15, 34, 154)
+ ),
+
+// 589 Mint
+((109, 152, 117), (117, 169, 136), (119, 172, 143), (121, 175, 150),
+ (121, 173, 147), (122, 172, 145), (121, 171, 144), (120, 171, 143),
+ (117, 160, 128), (110, 152, 123), (104, 144, 119), (94, 131, 116),
+ (84, 119, 113), (76, 108, 112), (69, 98, 111), (67, 93, 107),
+ (65, 89, 104), (69, 86, 104), (73, 91, 105), (78, 96, 107),
+ (86, 104, 115), (94, 113, 124), (97, 119, 127), (100, 125, 131),
+ (116, 140, 141), (120, 145, 143), (124, 151, 145), (129, 155, 149),
+ (135, 159, 154), (137, 162, 154), (139, 165, 155), (146, 175, 164),
+ (156, 180, 165), (157, 174, 155), (155, 170, 152), (153, 167, 150),
+ (145, 161, 150), (137, 155, 150), (136, 154, 150), (135, 154, 150),
+ (130, 148, 149), (123, 147, 140), (117, 146, 132), (111, 146, 126),
+ (105, 146, 120), (104, 147, 117), (103, 148, 115), (102, 149, 115),
+ (105, 155, 121), (123, 161, 133), (129, 165, 137), (136, 169, 142),
+ (139, 169, 142), (142, 169, 142), (142, 168, 141), (143, 167, 141),
+ (135, 165, 134), (130, 160, 131), (125, 155, 128), (117, 150, 124),
+ (110, 146, 121), (106, 142, 119), (102, 139, 118), (98, 134, 117),
+ (93, 131, 112), (93, 137, 110), (99, 140, 108), (105, 144, 106),
+ (110, 147, 106), (116, 150, 106), (125, 156, 110), (123, 156, 116),
+ (118, 148, 114), (108, 144, 111), (98, 140, 109), (90, 135, 99),
+ (82, 131, 90), (79, 129, 87), (77, 127, 85), (71, 123, 80),
+ (72, 123, 79), (70, 113, 83), (68, 109, 85), (67, 106, 88),
+ (66, 101, 88), (66, 96, 88), (60, 86, 83), (54, 79, 82),
+ (55, 68, 83), (56, 70, 86), (57, 72, 89), (58, 74, 90),
+ (59, 76, 91), (62, 84, 95), (69, 95, 99), (73, 104, 102),
+ (77, 110, 107), (84, 121, 108), (84, 116, 107), (84, 112, 107),
+ (84, 110, 106), (84, 109, 106), (88, 108, 105), (93, 113, 105),
+ (110, 129, 107), (111, 134, 108), (113, 140, 110), (112, 140, 109),
+ (111, 140, 108), (103, 127, 107), (96, 116, 102), (87, 111, 99),
+ (73, 97, 92), (57, 74, 74), (51, 71, 72), (45, 69, 70),
+ (34, 60, 59), (24, 45, 48), (20, 42, 44), (21, 44, 44),
+ (18, 43, 50), (29, 53, 59), (41, 63, 69), (44, 69, 73),
+ (47, 75, 78), (56, 85, 85), (70, 97, 95), (78, 105, 103),
+ (85, 110, 108), (97, 126, 121), (99, 129, 123), (102, 133, 125),
+ (109, 135, 130), (110, 139, 128), (110, 146, 127), (110, 148, 130),
+ (108, 148, 129), (105, 147, 130), (103, 146, 131), (103, 144, 133),
+ (103, 143, 136), (107, 145, 141), (113, 147, 140), (118, 150, 142),
+ (123, 156, 148), (128, 163, 138), (127, 163, 135), (126, 163, 133),
+ (123, 161, 123), (121, 158, 115), (119, 155, 108), (114, 150, 102),
+ (105, 148, 96), (101, 146, 95), (98, 144, 95), (89, 135, 90),
+ (80, 124, 87), (72, 109, 83), (62, 96, 75), (53, 84, 72),
+ (53, 76, 73), (56, 88, 85), (62, 95, 92), (68, 102, 100),
+ (78, 119, 108), (84, 130, 116), (91, 138, 124), (91, 143, 122),
+ (80, 132, 104), (74, 126, 99), (69, 121, 94), (59, 107, 80),
+ (50, 98, 67), (48, 92, 69), (48, 85, 71), (49, 86, 67),
+ (59, 93, 76), (65, 99, 88), (67, 102, 94), (71, 104, 93),
+ (70, 105, 92), (66, 103, 95), (63, 95, 94), (58, 90, 89),
+ (57, 95, 87), (59, 97, 86), (61, 99, 85), (70, 108, 88),
+ (81, 124, 89), (93, 135, 91), (107, 142, 98), (117, 151, 104),
+ (124, 160, 109), (130, 161, 117), (130, 159, 121), (126, 156, 122),
+ (124, 149, 127), (115, 141, 127), (104, 133, 124), (100, 126, 121),
+ (92, 119, 116), (83, 117, 109), (85, 121, 103), (89, 124, 99),
+ (94, 132, 98), (101, 141, 104), (112, 147, 111), (123, 151, 120),
+ (129, 152, 133), (130, 151, 143), (131, 148, 147), (132, 144, 149),
+ (127, 141, 148), (124, 137, 141), (119, 129, 137), (111, 124, 134),
+ (109, 123, 129), (105, 117, 128), (102, 118, 130), (105, 126, 131),
+ (106, 130, 133), (110, 137, 135), (115, 146, 136), (114, 150, 140),
+ (111, 155, 142), (114, 162, 139), (117, 165, 139), (114, 166, 141),
+ (111, 168, 140), (116, 167, 138), (115, 165, 135), (111, 160, 133),
+ (110, 150, 131), (105, 144, 128), (104, 136, 125), (102, 125, 121),
+ (95, 115, 118), (88, 105, 116), (86, 102, 117), (87, 101, 116),
+ (86, 98, 115), (85, 100, 116), (91, 107, 115), (94, 110, 116),
+ (93, 113, 119), (93, 116, 119), (91, 116, 120), (90, 116, 120),
+ (88, 112, 117), (84, 108, 115), (82, 104, 110), (81, 104, 104),
+ (83, 108, 98), (88, 111, 93), (93, 122, 98), (102, 142, 108)
+ ),
+
+// 590 Mistic
+((29, 24, 66), (23, 20, 65), (19, 18, 64), (15, 17, 64),
+ (12, 14, 59), (10, 11, 54), (7, 9, 50), (5, 8, 46),
+ (7, 12, 36), (12, 19, 35), (18, 26, 34), (24, 32, 41),
+ (31, 39, 49), (38, 44, 56), (45, 49, 63), (48, 50, 66),
+ (52, 52, 69), (48, 47, 84), (43, 40, 85), (38, 34, 87),
+ (36, 33, 92), (35, 32, 98), (34, 32, 101), (34, 33, 105),
+ (43, 38, 108), (52, 47, 113), (61, 56, 119), (69, 64, 120),
+ (78, 72, 122), (79, 75, 121), (81, 78, 120), (83, 82, 115),
+ (82, 85, 111), (79, 85, 106), (77, 81, 101), (75, 77, 97),
+ (76, 76, 97), (77, 76, 97), (77, 75, 95), (78, 74, 94),
+ (90, 77, 93), (95, 80, 98), (101, 84, 104), (104, 86, 106),
+ (108, 88, 109), (109, 91, 113), (110, 94, 117), (115, 98, 127),
+ (119, 98, 136), (111, 98, 147), (100, 89, 143), (90, 81, 139),
+ (77, 70, 130), (65, 59, 122), (59, 53, 117), (53, 48, 112),
+ (38, 37, 87), (42, 40, 82), (46, 43, 78), (54, 50, 81),
+ (63, 57, 85), (66, 62, 88), (70, 68, 92), (78, 75, 101),
+ (83, 81, 114), (90, 92, 132), (92, 94, 134), (94, 97, 136),
+ (97, 99, 136), (100, 101, 137), (108, 105, 144), (117, 111, 149),
+ (132, 118, 155), (142, 125, 163), (153, 133, 172), (163, 143, 181),
+ (174, 154, 191), (177, 154, 188), (180, 155, 185), (176, 149, 181),
+ (175, 152, 186), (167, 142, 168), (148, 127, 151), (129, 112, 135),
+ (123, 107, 130), (117, 103, 126), (107, 93, 117), (99, 92, 112),
+ (91, 89, 110), (91, 89, 115), (91, 89, 121), (90, 88, 124),
+ (90, 87, 128), (87, 85, 130), (85, 83, 129), (80, 81, 124),
+ (77, 74, 120), (76, 67, 117), (82, 70, 119), (88, 74, 121),
+ (91, 77, 122), (95, 80, 123), (100, 84, 122), (100, 89, 126),
+ (92, 84, 120), (87, 82, 113), (83, 81, 106), (83, 79, 103),
+ (83, 77, 101), (86, 77, 102), (95, 80, 106), (100, 84, 110),
+ (103, 88, 111), (110, 94, 116), (109, 92, 117), (108, 91, 118),
+ (100, 85, 119), (90, 80, 120), (89, 79, 123), (91, 81, 125),
+ (97, 92, 139), (110, 103, 146), (124, 114, 153), (132, 119, 154),
+ (140, 125, 155), (153, 135, 157), (162, 142, 157), (167, 143, 156),
+ (168, 140, 156), (164, 139, 150), (159, 136, 146), (154, 134, 143),
+ (142, 123, 141), (129, 115, 139), (119, 109, 136), (108, 104, 129),
+ (90, 85, 122), (84, 79, 118), (78, 74, 114), (76, 73, 113),
+ (75, 73, 113), (75, 75, 115), (75, 76, 114), (76, 77, 113),
+ (79, 80, 111), (88, 90, 118), (87, 90, 118), (87, 91, 118),
+ (87, 91, 111), (85, 87, 104), (84, 89, 101), (84, 91, 103),
+ (88, 91, 104), (89, 92, 103), (90, 93, 103), (93, 98, 106),
+ (97, 104, 114), (99, 105, 119), (99, 104, 116), (97, 99, 110),
+ (94, 90, 102), (84, 76, 90), (80, 74, 89), (77, 72, 88),
+ (73, 63, 86), (72, 53, 84), (68, 49, 81), (62, 49, 84),
+ (49, 40, 81), (46, 36, 77), (43, 33, 74), (36, 26, 70),
+ (29, 22, 66), (24, 19, 59), (19, 17, 52), (16, 14, 45),
+ (14, 16, 46), (21, 26, 49), (32, 36, 54), (44, 47, 58),
+ (55, 57, 68), (72, 71, 85), (90, 86, 104), (108, 100, 118),
+ (145, 121, 141), (155, 125, 145), (165, 129, 149), (177, 134, 150),
+ (182, 138, 149), (182, 137, 148), (178, 135, 148), (171, 128, 146),
+ (155, 116, 144), (134, 104, 141), (112, 92, 139), (96, 82, 135),
+ (83, 71, 134), (68, 60, 127), (56, 51, 125), (47, 45, 117),
+ (43, 41, 112), (38, 36, 106), (35, 34, 104), (31, 34, 101),
+ (31, 39, 95), (33, 44, 90), (43, 54, 88), (54, 67, 95),
+ (72, 80, 106), (88, 94, 116), (104, 106, 125), (117, 122, 136),
+ (131, 132, 149), (145, 141, 161), (153, 144, 168), (160, 151, 170),
+ (168, 156, 170), (179, 158, 169), (189, 161, 166), (198, 160, 164),
+ (203, 160, 161), (208, 155, 160), (207, 152, 154), (200, 145, 149),
+ (189, 142, 144), (184, 137, 139), (175, 130, 132), (150, 112, 126),
+ (122, 95, 116), (107, 79, 103), (101, 70, 89), (83, 60, 82),
+ (62, 53, 77), (47, 42, 70), (42, 31, 65), (36, 29, 65),
+ (30, 31, 69), (27, 33, 72), (27, 26, 72), (27, 22, 69),
+ (24, 17, 67), (18, 13, 61), (16, 8, 51), (15, 6, 38),
+ (15, 7, 34), (9, 6, 31), (9, 4, 31), (6, 2, 27),
+ (7, 3, 30), (5, 5, 37), (9, 9, 47), (14, 11, 53),
+ (20, 12, 55), (21, 13, 56), (24, 19, 59), (25, 23, 65)
+ ),
+
+// 591 Mixed_Berry
+((110, 35, 80), (140, 36, 80), (142, 30, 78), (144, 24, 76),
+ (149, 18, 80), (155, 13, 84), (149, 13, 82), (144, 14, 81),
+ (103, 12, 83), (80, 9, 80), (57, 7, 78), (48, 13, 71),
+ (40, 19, 64), (51, 25, 52), (63, 31, 40), (67, 29, 34),
+ (71, 27, 29), (97, 24, 22), (107, 24, 21), (118, 25, 21),
+ (125, 21, 22), (132, 18, 23), (137, 19, 25), (143, 20, 28),
+ (172, 25, 23), (176, 29, 22), (180, 33, 21), (172, 39, 31),
+ (165, 46, 42), (157, 52, 47), (149, 58, 53), (128, 64, 61),
+ (99, 58, 70), (59, 59, 89), (57, 51, 82), (56, 44, 75),
+ (65, 32, 67), (74, 21, 60), (77, 20, 54), (81, 20, 48),
+ (84, 21, 29), (77, 21, 31), (70, 21, 34), (61, 24, 44),
+ (53, 28, 54), (51, 26, 58), (49, 25, 62), (51, 20, 70),
+ (69, 16, 84), (118, 25, 93), (140, 25, 85), (162, 25, 78),
+ (181, 24, 71), (201, 23, 64), (203, 22, 58), (205, 22, 53),
+ (195, 18, 47), (185, 14, 49), (176, 11, 51), (162, 13, 58),
+ (149, 15, 66), (145, 14, 66), (141, 13, 67), (130, 10, 67),
+ (119, 11, 71), (103, 15, 78), (92, 12, 72), (81, 9, 67),
+ (76, 8, 70), (71, 8, 74), (61, 14, 78), (54, 21, 83),
+ (41, 42, 92), (43, 52, 96), (45, 63, 100), (44, 77, 95),
+ (44, 91, 90), (51, 95, 84), (58, 100, 78), (73, 100, 69),
+ (78, 92, 62), (94, 74, 47), (111, 64, 50), (129, 55, 53),
+ (133, 50, 53), (137, 45, 53), (137, 32, 59), (137, 28, 66),
+ (127, 38, 74), (113, 35, 75), (100, 33, 77), (93, 33, 75),
+ (87, 33, 73), (75, 40, 74), (63, 51, 80), (58, 50, 85),
+ (59, 53, 87), (60, 72, 90), (57, 68, 93), (54, 65, 96),
+ (52, 60, 98), (51, 56, 101), (48, 52, 106), (40, 40, 103),
+ (24, 19, 80), (19, 17, 74), (15, 16, 68), (12, 19, 61),
+ (10, 23, 54), (16, 30, 36), (30, 38, 27), (40, 44, 27),
+ (44, 49, 29), (72, 52, 25), (77, 53, 29), (83, 55, 34),
+ (82, 56, 46), (72, 59, 50), (67, 59, 45), (58, 67, 39),
+ (36, 91, 37), (46, 91, 30), (57, 92, 23), (65, 87, 19),
+ (73, 83, 16), (81, 85, 10), (99, 78, 17), (118, 65, 24),
+ (128, 50, 34), (124, 42, 44), (121, 39, 47), (118, 36, 50),
+ (115, 32, 59), (115, 29, 62), (119, 29, 62), (122, 28, 55),
+ (145, 17, 44), (155, 14, 39), (165, 12, 35), (168, 11, 35),
+ (171, 10, 36), (177, 13, 37), (184, 14, 36), (186, 18, 34),
+ (181, 19, 39), (158, 23, 51), (151, 22, 50), (145, 22, 49),
+ (123, 21, 53), (104, 14, 62), (81, 17, 74), (63, 17, 79),
+ (34, 27, 91), (31, 35, 93), (29, 44, 96), (26, 62, 93),
+ (22, 76, 91), (16, 95, 89), (15, 116, 85), (13, 133, 72),
+ (15, 136, 68), (28, 133, 63), (36, 127, 57), (44, 121, 52),
+ (67, 106, 48), (88, 87, 43), (116, 70, 45), (145, 51, 43),
+ (192, 30, 43), (200, 27, 49), (209, 24, 55), (218, 22, 69),
+ (222, 16, 72), (221, 18, 69), (225, 21, 67), (223, 28, 71),
+ (219, 23, 63), (212, 16, 49), (211, 12, 38), (213, 16, 36),
+ (215, 16, 34), (213, 11, 30), (208, 7, 30), (205, 7, 40),
+ (200, 8, 61), (194, 9, 62), (188, 11, 63), (167, 14, 69),
+ (150, 15, 82), (130, 22, 91), (110, 37, 90), (87, 56, 82),
+ (68, 68, 78), (52, 83, 73), (38, 101, 62), (29, 114, 47),
+ (22, 107, 40), (25, 97, 33), (29, 90, 30), (38, 84, 29),
+ (44, 69, 37), (56, 54, 43), (72, 49, 49), (86, 51, 56),
+ (90, 58, 69), (90, 69, 78), (94, 82, 87), (94, 94, 83),
+ (82, 105, 84), (69, 111, 87), (69, 111, 99), (81, 104, 97),
+ (92, 98, 88), (103, 87, 78), (125, 74, 75), (155, 57, 73),
+ (179, 48, 62), (198, 43, 48), (212, 41, 33), (219, 35, 28),
+ (218, 33, 20), (208, 33, 16), (194, 31, 10), (179, 29, 8),
+ (170, 27, 7), (166, 26, 9), (162, 20, 10), (157, 18, 10),
+ (163, 23, 10), (174, 31, 10), (181, 34, 11), (179, 32, 10),
+ (179, 30, 14), (179, 32, 20), (178, 29, 32), (166, 28, 43),
+ (156, 20, 57), (143, 20, 67), (129, 16, 81), (109, 21, 93),
+ (95, 21, 106), (92, 22, 111), (84, 19, 114), (74, 24, 112),
+ (60, 36, 111), (65, 50, 111), (70, 59, 112), (77, 65, 113),
+ (74, 67, 111), (78, 70, 107), (89, 68, 102), (98, 68, 99),
+ (99, 68, 98), (105, 58, 95), (108, 46, 82), (113, 34, 78)
+ ),
+
+// 592 More_Blue
+((81, 103, 125), (61, 83, 110), (52, 73, 102), (43, 63, 94),
+ (41, 62, 91), (40, 62, 88), (39, 62, 88), (38, 62, 88),
+ (36, 63, 90), (35, 63, 95), (34, 63, 100), (30, 61, 103),
+ (26, 59, 106), (22, 59, 103), (19, 59, 100), (18, 58, 98),
+ (17, 57, 96), (15, 49, 84), (16, 49, 79), (17, 49, 74),
+ (19, 49, 75), (22, 50, 77), (22, 50, 76), (22, 51, 76),
+ (19, 45, 72), (18, 42, 71), (17, 39, 70), (17, 39, 68),
+ (18, 40, 66), (18, 40, 65), (19, 40, 65), (23, 45, 63),
+ (30, 50, 68), (46, 67, 82), (53, 76, 90), (60, 86, 98),
+ (65, 94, 109), (71, 103, 121), (73, 108, 128), (75, 113, 135),
+ (79, 124, 159), (79, 127, 160), (80, 130, 162), (85, 134, 165),
+ (91, 139, 168), (92, 140, 171), (94, 142, 174), (92, 142, 175),
+ (86, 140, 169), (83, 131, 153), (77, 122, 147), (71, 114, 141),
+ (58, 100, 130), (45, 86, 119), (40, 79, 112), (35, 72, 105),
+ (25, 50, 84), (19, 39, 74), (14, 28, 64), (11, 22, 52),
+ (8, 17, 41), (7, 16, 36), (7, 16, 32), (7, 17, 27),
+ (9, 17, 26), (17, 28, 36), (28, 40, 48), (39, 53, 60),
+ (47, 62, 68), (56, 72, 76), (73, 90, 94), (88, 110, 117),
+ (121, 147, 161), (140, 165, 174), (159, 184, 187), (157, 185, 191),
+ (155, 187, 196), (149, 183, 196), (144, 180, 196), (133, 174, 197),
+ (127, 164, 187), (100, 131, 153), (78, 110, 135), (56, 89, 118),
+ (48, 80, 111), (41, 72, 105), (30, 60, 92), (25, 50, 78),
+ (21, 39, 52), (19, 38, 48), (18, 38, 44), (18, 39, 45),
+ (18, 40, 47), (20, 44, 51), (26, 53, 58), (35, 60, 67),
+ (42, 68, 72), (44, 69, 83), (42, 67, 85), (41, 65, 88),
+ (41, 63, 86), (41, 62, 84), (39, 56, 79), (34, 49, 70),
+ (19, 29, 53), (15, 24, 45), (11, 20, 37), (10, 20, 34),
+ (10, 20, 31), (8, 19, 28), (9, 19, 27), (10, 21, 30),
+ (12, 23, 32), (17, 29, 35), (18, 30, 36), (20, 31, 37),
+ (21, 31, 40), (22, 31, 43), (21, 31, 45), (19, 29, 45),
+ (14, 23, 43), (11, 21, 42), (9, 19, 42), (8, 18, 43),
+ (7, 18, 44), (5, 16, 47), (4, 15, 51), (3, 17, 55),
+ (2, 18, 59), (2, 21, 63), (2, 20, 63), (3, 19, 63),
+ (3, 19, 61), (3, 18, 57), (1, 17, 51), (1, 16, 44),
+ (2, 13, 33), (1, 14, 32), (1, 15, 32), (1, 16, 34),
+ (1, 18, 36), (1, 23, 43), (3, 29, 53), (2, 35, 64),
+ (2, 37, 77), (1, 38, 94), (1, 38, 95), (2, 38, 97),
+ (2, 37, 97), (3, 36, 96), (4, 34, 97), (5, 33, 93),
+ (11, 36, 85), (13, 38, 83), (16, 40, 81), (18, 43, 78),
+ (19, 43, 76), (19, 43, 73), (18, 43, 74), (19, 43, 75),
+ (18, 42, 73), (15, 31, 64), (13, 28, 61), (12, 26, 59),
+ (10, 24, 57), (7, 27, 60), (8, 28, 64), (11, 32, 70),
+ (22, 46, 86), (23, 48, 86), (25, 51, 87), (27, 52, 89),
+ (28, 51, 85), (33, 54, 87), (34, 54, 91), (36, 53, 85),
+ (35, 50, 79), (32, 46, 69), (30, 45, 62), (25, 47, 65),
+ (20, 49, 71), (17, 54, 80), (19, 56, 88), (16, 56, 93),
+ (9, 50, 109), (6, 52, 117), (4, 55, 126), (9, 59, 142),
+ (15, 65, 149), (19, 71, 150), (26, 68, 146), (29, 72, 143),
+ (30, 75, 149), (36, 80, 151), (37, 86, 152), (37, 85, 151),
+ (38, 85, 144), (32, 77, 138), (28, 69, 130), (23, 61, 124),
+ (14, 49, 120), (9, 43, 117), (4, 38, 115), (1, 37, 112),
+ (2, 39, 108), (1, 38, 108), (1, 39, 109), (5, 44, 116),
+ (8, 53, 124), (16, 65, 132), (25, 77, 142), (30, 85, 148),
+ (37, 91, 156), (39, 99, 162), (40, 105, 168), (47, 111, 173),
+ (46, 109, 172), (44, 102, 167), (38, 93, 160), (28, 84, 151),
+ (23, 74, 141), (17, 64, 131), (12, 52, 118), (7, 39, 107),
+ (2, 29, 98), (1, 22, 95), (1, 21, 99), (2, 26, 105),
+ (2, 29, 113), (4, 38, 118), (8, 43, 121), (13, 45, 124),
+ (18, 53, 127), (22, 57, 127), (24, 62, 123), (27, 63, 113),
+ (30, 60, 99), (31, 56, 88), (32, 53, 78), (31, 51, 73),
+ (29, 50, 70), (29, 50, 70), (30, 49, 71), (29, 50, 73),
+ (31, 55, 77), (35, 60, 81), (42, 66, 88), (50, 74, 95),
+ (58, 80, 102), (69, 93, 110), (83, 105, 117), (91, 112, 127),
+ (92, 112, 132), (88, 108, 134), (83, 105, 133), (83, 104, 128)
+ ),
+
+// 593 Morning_Glories_at_Night
+((43, 62, 147), (47, 68, 152), (44, 68, 146), (41, 68, 140),
+ (37, 69, 130), (34, 70, 120), (34, 72, 114), (34, 75, 109),
+ (33, 83, 88), (30, 83, 76), (27, 83, 65), (23, 78, 57),
+ (19, 74, 49), (15, 71, 45), (12, 68, 41), (11, 68, 39),
+ (10, 69, 37), (11, 67, 34), (11, 63, 36), (11, 60, 38),
+ (11, 57, 39), (11, 54, 40), (10, 53, 38), (10, 53, 37),
+ (7, 56, 28), (6, 60, 26), (6, 65, 25), (13, 71, 31),
+ (20, 77, 38), (22, 78, 45), (25, 80, 53), (28, 82, 64),
+ (31, 83, 72), (27, 84, 71), (29, 86, 71), (31, 89, 72),
+ (34, 88, 78), (38, 88, 85), (40, 86, 89), (42, 84, 94),
+ (42, 73, 103), (39, 70, 99), (37, 68, 96), (37, 67, 89),
+ (37, 67, 82), (37, 66, 80), (38, 65, 79), (38, 62, 80),
+ (40, 58, 82), (39, 50, 86), (39, 47, 87), (39, 44, 88),
+ (38, 40, 87), (38, 37, 86), (37, 36, 84), (36, 36, 83),
+ (31, 31, 79), (31, 28, 78), (32, 25, 77), (32, 22, 77),
+ (33, 19, 78), (33, 19, 78), (33, 19, 78), (32, 19, 78),
+ (30, 21, 77), (31, 24, 75), (30, 25, 73), (29, 26, 72),
+ (28, 26, 71), (28, 27, 71), (26, 25, 68), (22, 25, 65),
+ (16, 28, 57), (14, 31, 51), (12, 35, 45), (10, 39, 40),
+ (8, 44, 35), (7, 45, 32), (6, 46, 30), (6, 47, 30),
+ (8, 50, 32), (21, 62, 46), (31, 75, 60), (42, 88, 74),
+ (45, 93, 81), (49, 99, 88), (55, 104, 101), (58, 105, 114),
+ (60, 98, 138), (64, 98, 147), (68, 98, 156), (70, 99, 159),
+ (73, 100, 162), (74, 100, 163), (73, 98, 161), (70, 94, 155),
+ (64, 84, 150), (53, 66, 138), (51, 64, 136), (49, 62, 135),
+ (50, 64, 134), (52, 66, 134), (56, 71, 132), (62, 76, 130),
+ (73, 90, 131), (76, 94, 136), (79, 98, 142), (79, 99, 146),
+ (80, 100, 151), (79, 102, 160), (78, 102, 167), (78, 104, 171),
+ (79, 105, 171), (81, 106, 172), (80, 104, 173), (79, 103, 174),
+ (75, 99, 177), (70, 93, 177), (65, 86, 173), (61, 77, 168),
+ (55, 64, 152), (51, 59, 144), (48, 54, 136), (46, 52, 132),
+ (44, 51, 129), (39, 46, 119), (35, 41, 111), (30, 35, 101),
+ (30, 31, 93), (29, 27, 86), (29, 27, 87), (30, 28, 88),
+ (32, 31, 88), (33, 34, 88), (31, 35, 88), (31, 35, 87),
+ (30, 38, 85), (33, 40, 85), (36, 43, 85), (37, 44, 84),
+ (39, 46, 83), (40, 47, 81), (39, 47, 80), (36, 48, 79),
+ (33, 46, 78), (29, 43, 87), (29, 43, 89), (30, 44, 92),
+ (35, 47, 99), (40, 51, 106), (47, 59, 111), (52, 66, 117),
+ (61, 74, 125), (59, 74, 123), (58, 75, 121), (56, 74, 116),
+ (53, 73, 109), (51, 74, 99), (49, 75, 89), (47, 73, 83),
+ (48, 71, 79), (36, 61, 74), (32, 58, 73), (29, 55, 72),
+ (22, 51, 67), (17, 46, 60), (12, 41, 55), (12, 36, 54),
+ (13, 29, 59), (13, 28, 63), (13, 27, 67), (15, 28, 77),
+ (18, 27, 83), (21, 28, 87), (24, 29, 90), (24, 29, 90),
+ (24, 29, 91), (22, 29, 93), (21, 31, 99), (20, 31, 107),
+ (21, 31, 115), (23, 32, 125), (24, 33, 131), (24, 36, 138),
+ (25, 40, 144), (26, 43, 144), (27, 46, 145), (32, 53, 145),
+ (39, 62, 146), (47, 72, 145), (55, 83, 146), (61, 93, 144),
+ (64, 99, 147), (66, 102, 150), (67, 102, 152), (68, 102, 155),
+ (68, 103, 156), (69, 103, 157), (71, 103, 155), (69, 103, 155),
+ (64, 100, 157), (59, 92, 159), (52, 84, 162), (44, 75, 164),
+ (37, 67, 164), (32, 59, 160), (30, 56, 152), (30, 54, 145),
+ (30, 51, 138), (30, 50, 135), (31, 48, 134), (29, 47, 131),
+ (25, 44, 127), (23, 43, 121), (24, 42, 114), (25, 42, 106),
+ (28, 41, 102), (33, 44, 102), (41, 51, 103), (46, 56, 107),
+ (50, 65, 110), (55, 76, 112), (58, 85, 113), (61, 91, 115),
+ (65, 97, 123), (71, 105, 131), (77, 108, 141), (79, 110, 150),
+ (81, 114, 157), (80, 117, 159), (77, 114, 158), (73, 111, 156),
+ (71, 106, 154), (70, 101, 153), (69, 95, 152), (68, 92, 150),
+ (67, 89, 146), (64, 85, 140), (61, 81, 130), (58, 78, 120),
+ (57, 75, 112), (57, 73, 105), (58, 74, 99), (57, 75, 95),
+ (55, 74, 93), (55, 74, 93), (53, 74, 92), (49, 72, 96),
+ (47, 68, 101), (45, 64, 107), (41, 62, 113), (38, 58, 117),
+ (36, 55, 123), (36, 55, 128), (36, 56, 135), (39, 58, 141)
+ ),
+
+// 594 Moss
+((139, 139, 109), (75, 80, 59), (56, 60, 45), (37, 40, 31),
+ (28, 31, 22), (19, 22, 14), (21, 22, 14), (23, 22, 15),
+ (52, 37, 25), (70, 52, 32), (88, 68, 39), (101, 82, 51),
+ (115, 97, 63), (117, 101, 63), (119, 106, 63), (115, 107, 65),
+ (112, 108, 67), (78, 85, 63), (60, 70, 53), (43, 55, 44),
+ (31, 40, 35), (19, 25, 26), (15, 20, 21), (12, 16, 16),
+ (12, 4, 4), (14, 2, 2), (17, 1, 0), (22, 2, 1),
+ (28, 3, 2), (29, 3, 2), (31, 4, 2), (30, 6, 0),
+ (29, 9, 2), (40, 23, 17), (46, 33, 24), (53, 44, 31),
+ (62, 57, 44), (71, 71, 57), (77, 76, 62), (84, 82, 68),
+ (103, 92, 79), (103, 96, 85), (104, 101, 91), (101, 96, 87),
+ (98, 92, 84), (90, 91, 79), (83, 90, 75), (64, 83, 67),
+ (49, 74, 56), (27, 53, 33), (18, 46, 27), (10, 39, 22),
+ (16, 37, 21), (22, 35, 20), (24, 36, 20), (27, 38, 20),
+ (30, 37, 27), (28, 35, 22), (26, 33, 18), (21, 25, 13),
+ (17, 18, 9), (15, 14, 7), (14, 11, 6), (15, 8, 3),
+ (25, 10, 3), (51, 29, 22), (68, 44, 31), (85, 60, 41),
+ (97, 68, 47), (109, 76, 54), (126, 93, 72), (136, 108, 91),
+ (149, 133, 105), (145, 132, 101), (142, 132, 98), (131, 121, 94),
+ (120, 111, 90), (111, 104, 82), (103, 97, 75), (87, 81, 58),
+ (72, 64, 48), (54, 43, 37), (53, 35, 33), (52, 28, 29),
+ (53, 30, 30), (54, 33, 32), (56, 43, 39), (66, 55, 47),
+ (82, 65, 60), (82, 69, 62), (82, 73, 65), (81, 71, 63),
+ (81, 70, 62), (79, 68, 54), (71, 60, 47), (65, 55, 39),
+ (60, 46, 34), (58, 43, 22), (62, 48, 29), (67, 54, 37),
+ (72, 58, 42), (78, 63, 47), (87, 72, 55), (96, 84, 67),
+ (127, 124, 109), (137, 140, 126), (147, 157, 144), (142, 163, 151),
+ (137, 170, 159), (135, 187, 170), (130, 192, 169), (136, 194, 174),
+ (132, 185, 170), (116, 166, 146), (114, 159, 139), (112, 152, 133),
+ (115, 139, 122), (114, 127, 116), (105, 113, 107), (84, 99, 97),
+ (50, 80, 75), (36, 66, 67), (22, 52, 60), (16, 45, 53),
+ (10, 39, 46), (2, 30, 30), (1, 19, 21), (2, 12, 16),
+ (4, 9, 13), (17, 21, 14), (22, 26, 18), (28, 31, 22),
+ (39, 42, 33), (46, 54, 43), (54, 64, 51), (57, 73, 59),
+ (56, 85, 65), (52, 97, 72), (49, 110, 79), (51, 109, 81),
+ (53, 109, 84), (55, 110, 86), (64, 112, 87), (68, 123, 94),
+ (81, 124, 99), (113, 120, 103), (118, 123, 105), (124, 126, 107),
+ (135, 135, 105), (141, 144, 108), (145, 157, 109), (150, 170, 124),
+ (165, 194, 146), (165, 197, 143), (165, 201, 140), (163, 198, 137),
+ (156, 199, 135), (153, 190, 140), (138, 185, 135), (124, 175, 132),
+ (118, 171, 124), (108, 147, 115), (98, 143, 116), (88, 140, 117),
+ (79, 142, 114), (90, 133, 112), (92, 120, 97), (85, 107, 86),
+ (62, 83, 61), (57, 74, 56), (52, 66, 51), (47, 56, 47),
+ (45, 48, 45), (46, 48, 42), (47, 51, 40), (56, 57, 42),
+ (65, 63, 45), (78, 62, 45), (86, 62, 43), (94, 58, 37),
+ (93, 57, 30), (92, 51, 22), (92, 43, 18), (94, 36, 18),
+ (84, 50, 29), (83, 55, 34), (82, 61, 39), (84, 69, 51),
+ (83, 79, 61), (81, 90, 71), (75, 97, 74), (67, 97, 72),
+ (57, 100, 64), (48, 100, 55), (42, 93, 50), (42, 84, 46),
+ (42, 80, 44), (40, 76, 40), (41, 71, 42), (48, 68, 45),
+ (57, 67, 48), (58, 62, 47), (56, 55, 43), (52, 50, 38),
+ (48, 44, 29), (41, 34, 20), (36, 26, 13), (28, 19, 8),
+ (23, 15, 7), (20, 12, 7), (25, 13, 9), (32, 20, 11),
+ (41, 32, 19), (53, 43, 28), (67, 51, 39), (79, 62, 44),
+ (88, 77, 53), (99, 88, 59), (108, 95, 65), (112, 100, 69),
+ (113, 104, 71), (112, 104, 71), (113, 105, 67), (109, 105, 66),
+ (104, 103, 64), (95, 95, 54), (82, 85, 40), (69, 71, 30),
+ (53, 60, 28), (40, 49, 20), (27, 38, 9), (17, 27, 0),
+ (8, 21, 0), (5, 23, 5), (9, 28, 13), (17, 37, 24),
+ (28, 46, 34), (39, 60, 46), (53, 74, 61), (74, 94, 71),
+ (100, 111, 82), (121, 124, 90), (137, 137, 105), (153, 154, 108),
+ (172, 172, 112), (185, 181, 113), (196, 193, 135), (205, 202, 152),
+ (219, 216, 166), (224, 222, 172), (232, 233, 186), (231, 228, 191),
+ (225, 220, 180), (208, 203, 171), (192, 192, 159), (170, 169, 146)
+ ),
+
+// 595 Moss2
+((82, 100, 57), (88, 105, 60), (85, 102, 60), (82, 100, 61),
+ (79, 95, 59), (76, 91, 58), (76, 90, 55), (76, 90, 52),
+ (74, 86, 45), (71, 82, 44), (69, 79, 44), (67, 76, 44),
+ (65, 73, 45), (63, 69, 41), (61, 66, 37), (58, 63, 34),
+ (56, 61, 32), (48, 49, 24), (43, 44, 22), (38, 39, 21),
+ (32, 33, 19), (27, 27, 18), (24, 24, 16), (22, 21, 15),
+ (14, 12, 8), (11, 10, 6), (9, 9, 4), (8, 10, 6),
+ (7, 11, 8), (7, 11, 8), (7, 12, 9), (8, 16, 9),
+ (11, 19, 9), (17, 30, 11), (20, 33, 11), (23, 37, 12),
+ (25, 36, 11), (27, 36, 11), (28, 37, 11), (30, 38, 12),
+ (38, 42, 15), (40, 44, 15), (43, 46, 15), (42, 43, 14),
+ (41, 41, 14), (40, 40, 14), (40, 39, 15), (40, 38, 17),
+ (43, 38, 18), (43, 40, 19), (40, 37, 18), (37, 34, 17),
+ (33, 30, 17), (29, 27, 17), (29, 26, 17), (29, 25, 18),
+ (30, 26, 24), (31, 29, 26), (33, 32, 28), (38, 38, 32),
+ (44, 44, 36), (47, 47, 38), (51, 51, 40), (61, 59, 46),
+ (70, 67, 49), (86, 87, 43), (95, 97, 41), (104, 108, 39),
+ (109, 113, 39), (114, 118, 40), (120, 122, 47), (125, 128, 53),
+ (126, 131, 55), (124, 132, 54), (123, 133, 53), (119, 129, 60),
+ (116, 126, 67), (114, 123, 71), (112, 121, 76), (106, 115, 85),
+ (100, 110, 93), (98, 109, 92), (96, 107, 90), (94, 106, 89),
+ (93, 104, 88), (92, 102, 88), (90, 98, 88), (89, 96, 85),
+ (88, 91, 74), (87, 89, 68), (87, 87, 63), (86, 86, 61),
+ (86, 86, 60), (87, 85, 58), (87, 85, 56), (85, 82, 53),
+ (83, 81, 52), (79, 81, 54), (82, 87, 58), (85, 94, 62),
+ (86, 97, 65), (87, 101, 68), (89, 105, 74), (87, 104, 77),
+ (79, 95, 77), (74, 90, 73), (70, 86, 69), (68, 84, 67),
+ (67, 82, 65), (62, 76, 60), (54, 68, 55), (47, 60, 48),
+ (41, 52, 40), (34, 39, 27), (33, 37, 24), (33, 36, 22),
+ (32, 34, 18), (31, 33, 16), (31, 34, 17), (32, 37, 18),
+ (39, 42, 25), (43, 44, 26), (47, 47, 28), (47, 49, 28),
+ (48, 51, 29), (52, 56, 29), (56, 60, 29), (60, 66, 30),
+ (67, 72, 33), (75, 85, 40), (77, 87, 41), (80, 90, 43),
+ (83, 94, 40), (87, 100, 40), (92, 105, 41), (99, 112, 46),
+ (109, 121, 65), (111, 124, 70), (114, 128, 76), (115, 128, 77),
+ (116, 129, 78), (117, 130, 77), (116, 130, 79), (116, 128, 83),
+ (112, 125, 83), (104, 111, 79), (102, 107, 76), (100, 103, 73),
+ (94, 95, 65), (87, 87, 58), (79, 78, 50), (71, 68, 42),
+ (55, 49, 30), (52, 45, 26), (50, 41, 23), (43, 36, 21),
+ (38, 33, 20), (35, 32, 21), (34, 35, 23), (33, 38, 26),
+ (34, 41, 27), (34, 49, 34), (33, 49, 35), (33, 50, 37),
+ (34, 52, 37), (32, 51, 38), (31, 48, 35), (31, 47, 36),
+ (28, 45, 40), (29, 46, 41), (31, 48, 43), (34, 52, 45),
+ (37, 55, 46), (42, 60, 49), (46, 66, 58), (52, 71, 65),
+ (61, 81, 73), (72, 92, 80), (80, 102, 82), (86, 109, 83),
+ (90, 117, 86), (89, 117, 85), (86, 114, 82), (84, 110, 77),
+ (72, 92, 56), (68, 87, 52), (65, 83, 48), (58, 75, 42),
+ (49, 66, 36), (42, 62, 30), (37, 57, 25), (32, 52, 21),
+ (31, 47, 18), (32, 43, 18), (32, 38, 20), (32, 38, 21),
+ (34, 40, 24), (37, 46, 28), (45, 54, 32), (55, 64, 35),
+ (67, 75, 38), (78, 84, 43), (89, 93, 51), (98, 104, 59),
+ (109, 113, 69), (116, 120, 76), (127, 132, 81), (136, 142, 84),
+ (144, 147, 89), (147, 151, 92), (148, 151, 97), (142, 145, 98),
+ (137, 139, 98), (131, 135, 93), (124, 127, 87), (115, 120, 80),
+ (107, 113, 75), (96, 103, 70), (82, 91, 69), (72, 83, 67),
+ (65, 75, 65), (58, 69, 62), (54, 65, 59), (50, 61, 58),
+ (43, 55, 59), (36, 50, 61), (34, 45, 61), (30, 39, 57),
+ (30, 36, 49), (31, 35, 45), (32, 34, 41), (29, 33, 38),
+ (27, 31, 36), (24, 29, 33), (25, 29, 29), (27, 30, 27),
+ (30, 33, 27), (34, 38, 30), (37, 43, 35), (39, 48, 40),
+ (43, 53, 46), (48, 60, 51), (53, 69, 54), (57, 74, 58),
+ (61, 78, 58), (62, 79, 59), (62, 79, 59), (61, 80, 59),
+ (64, 85, 58), (67, 90, 60), (73, 93, 58), (76, 96, 58),
+ (77, 95, 59), (76, 94, 58), (76, 93, 56), (77, 95, 56)
+ ),
+
+// 596 Motel_Decor
+((236, 95, 36), (229, 55, 19), (232, 39, 48), (236, 24, 77),
+ (231, 34, 94), (227, 44, 111), (235, 47, 113), (244, 50, 116),
+ (210, 70, 82), (199, 65, 74), (189, 60, 66), (183, 43, 70),
+ (177, 27, 75), (168, 18, 83), (160, 10, 92), (156, 11, 89),
+ (152, 12, 86), (116, 28, 82), (100, 33, 75), (85, 39, 69),
+ (78, 55, 70), (71, 71, 71), (67, 81, 71), (64, 92, 71),
+ (69, 122, 79), (70, 130, 72), (71, 138, 66), (82, 122, 58),
+ (94, 107, 51), (95, 100, 43), (97, 94, 36), (95, 77, 25),
+ (84, 72, 17), (74, 48, 23), (61, 44, 29), (48, 41, 35),
+ (59, 37, 45), (70, 33, 56), (80, 39, 61), (90, 45, 67),
+ (160, 97, 116), (193, 146, 101), (227, 195, 87), (205, 218, 88),
+ (184, 241, 90), (178, 248, 69), (173, 255, 49), (153, 230, 48),
+ (128, 215, 40), (126, 165, 36), (128, 147, 33), (131, 129, 30),
+ (114, 104, 37), (97, 80, 45), (89, 73, 45), (81, 66, 45),
+ (54, 58, 48), (47, 82, 46), (41, 107, 44), (38, 108, 43),
+ (35, 110, 43), (34, 116, 44), (33, 123, 45), (20, 97, 46),
+ (14, 69, 38), (19, 44, 35), (21, 36, 27), (23, 29, 19),
+ (27, 25, 20), (32, 22, 22), (36, 24, 33), (35, 24, 32),
+ (60, 36, 55), (70, 50, 60), (81, 65, 66), (93, 70, 73),
+ (105, 76, 81), (100, 73, 80), (96, 71, 79), (95, 64, 82),
+ (91, 58, 80), (72, 66, 69), (76, 70, 61), (81, 74, 53),
+ (75, 77, 51), (70, 81, 50), (58, 77, 46), (54, 72, 44),
+ (40, 58, 45), (51, 46, 51), (63, 35, 58), (75, 37, 62),
+ (87, 39, 67), (113, 41, 79), (147, 46, 90), (168, 67, 98),
+ (175, 94, 103), (175, 111, 102), (156, 108, 93), (138, 105, 84),
+ (124, 93, 75), (111, 82, 67), (89, 70, 58), (72, 59, 41),
+ (66, 30, 24), (86, 26, 18), (106, 23, 13), (111, 20, 15),
+ (117, 17, 17), (127, 13, 20), (136, 13, 23), (129, 14, 32),
+ (132, 17, 49), (151, 29, 92), (164, 36, 104), (178, 43, 116),
+ (205, 59, 121), (226, 102, 105), (251, 154, 95), (255, 187, 92),
+ (255, 246, 36), (243, 221, 52), (232, 196, 69), (227, 185, 63),
+ (222, 174, 58), (199, 137, 67), (168, 102, 77), (151, 90, 80),
+ (144, 76, 82), (139, 58, 94), (130, 54, 95), (121, 51, 96),
+ (117, 45, 89), (107, 38, 86), (81, 43, 79), (64, 50, 70),
+ (46, 41, 71), (45, 35, 63), (44, 30, 55), (46, 22, 57),
+ (49, 14, 59), (50, 9, 54), (55, 10, 43), (63, 13, 43),
+ (74, 19, 40), (85, 40, 36), (91, 42, 40), (98, 44, 45),
+ (108, 40, 48), (116, 58, 43), (121, 67, 54), (125, 76, 70),
+ (106, 113, 56), (98, 119, 55), (90, 125, 54), (72, 122, 48),
+ (56, 112, 41), (39, 95, 34), (27, 75, 33), (27, 53, 32),
+ (25, 35, 34), (23, 35, 39), (23, 40, 36), (23, 46, 33),
+ (19, 58, 38), (19, 70, 36), (28, 77, 39), (36, 86, 44),
+ (76, 89, 63), (85, 89, 68), (95, 90, 74), (103, 98, 84),
+ (123, 100, 89), (147, 98, 92), (110, 74, 85), (90, 59, 67),
+ (138, 70, 67), (133, 49, 48), (132, 44, 30), (175, 74, 36),
+ (200, 89, 27), (213, 90, 18), (214, 92, 19), (205, 87, 13),
+ (177, 53, 10), (170, 51, 14), (164, 50, 18), (159, 58, 30),
+ (148, 72, 43), (146, 86, 44), (144, 116, 55), (143, 144, 65),
+ (149, 158, 50), (151, 183, 44), (160, 200, 50), (169, 201, 50),
+ (172, 219, 46), (200, 216, 33), (205, 178, 27), (182, 154, 30),
+ (182, 126, 24), (167, 80, 13), (136, 44, 13), (113, 22, 18),
+ (91, 4, 18), (79, 0, 20), (71, 0, 19), (60, 2, 18),
+ (49, 0, 24), (43, 1, 30), (40, 7, 35), (30, 7, 39),
+ (24, 4, 39), (25, 7, 39), (18, 3, 35), (15, 1, 35),
+ (24, 0, 36), (22, 0, 33), (15, 0, 34), (19, 0, 43),
+ (18, 4, 44), (8, 18, 39), (3, 32, 39), (8, 34, 40),
+ (12, 39, 35), (19, 44, 29), (33, 35, 28), (41, 23, 30),
+ (53, 14, 22), (66, 10, 19), (72, 3, 24), (74, 0, 23),
+ (71, 3, 28), (74, 9, 32), (79, 10, 33), (80, 15, 29),
+ (86, 22, 12), (105, 24, 9), (111, 43, 14), (100, 55, 5),
+ (101, 53, 9), (90, 64, 22), (71, 75, 34), (64, 70, 45),
+ (55, 60, 49), (55, 66, 53), (55, 69, 54), (51, 69, 51),
+ (61, 90, 33), (92, 103, 20), (111, 101, 23), (127, 125, 13),
+ (175, 139, 13), (213, 125, 33), (230, 118, 34), (236, 116, 29)
+ ),
+
+// 597 Muddy
+((80, 63, 50), (89, 69, 51), (90, 69, 51), (92, 70, 52),
+ (92, 68, 50), (92, 67, 48), (89, 67, 48), (86, 67, 49),
+ (84, 69, 53), (86, 71, 54), (89, 74, 56), (90, 76, 59),
+ (91, 79, 62), (91, 80, 64), (91, 81, 66), (91, 81, 67),
+ (91, 82, 68), (87, 82, 69), (86, 81, 68), (86, 81, 67),
+ (86, 80, 65), (86, 80, 63), (86, 80, 63), (86, 80, 64),
+ (86, 81, 65), (85, 81, 65), (85, 81, 66), (83, 79, 64),
+ (81, 77, 63), (80, 76, 61), (80, 76, 59), (77, 72, 55),
+ (75, 68, 51), (69, 63, 45), (65, 61, 45), (62, 59, 45),
+ (59, 58, 47), (56, 58, 50), (55, 59, 51), (55, 60, 53),
+ (58, 65, 59), (62, 68, 60), (67, 71, 62), (72, 74, 63),
+ (78, 78, 64), (82, 80, 65), (86, 82, 67), (94, 86, 70),
+ (102, 91, 72), (111, 100, 79), (113, 102, 80), (115, 104, 82),
+ (114, 102, 80), (114, 101, 78), (112, 100, 77), (111, 99, 76),
+ (108, 95, 72), (106, 91, 68), (104, 88, 65), (99, 83, 63),
+ (95, 79, 61), (91, 76, 58), (88, 73, 56), (78, 66, 51),
+ (67, 58, 44), (46, 45, 34), (39, 39, 29), (32, 33, 24),
+ (29, 30, 22), (27, 28, 20), (23, 24, 16), (20, 20, 13),
+ (17, 14, 9), (16, 14, 9), (16, 15, 9), (19, 20, 14),
+ (22, 26, 20), (26, 30, 24), (30, 35, 28), (42, 46, 38),
+ (55, 58, 51), (82, 83, 77), (94, 93, 87), (106, 104, 97),
+ (110, 107, 100), (114, 111, 104), (118, 117, 109), (121, 120, 114),
+ (124, 125, 116), (125, 127, 118), (126, 129, 120), (126, 129, 118),
+ (127, 129, 117), (129, 129, 115), (129, 126, 111), (126, 121, 105),
+ (120, 113, 99), (101, 90, 75), (88, 78, 63), (75, 66, 52),
+ (69, 61, 47), (63, 56, 42), (53, 48, 33), (46, 40, 26),
+ (40, 31, 17), (40, 29, 15), (41, 27, 13), (41, 26, 12),
+ (41, 26, 11), (43, 26, 11), (44, 28, 13), (45, 32, 16),
+ (46, 36, 20), (53, 43, 26), (55, 43, 27), (57, 44, 28),
+ (62, 47, 30), (63, 48, 31), (66, 49, 31), (68, 49, 30),
+ (67, 52, 31), (66, 54, 32), (66, 57, 33), (66, 57, 33),
+ (67, 58, 34), (68, 59, 36), (67, 59, 38), (66, 59, 38),
+ (64, 56, 37), (57, 51, 34), (54, 49, 32), (51, 48, 31),
+ (46, 48, 30), (42, 47, 28), (42, 48, 28), (42, 49, 30),
+ (45, 53, 36), (48, 55, 39), (51, 58, 43), (52, 59, 44),
+ (53, 60, 46), (55, 61, 47), (55, 62, 48), (56, 64, 47),
+ (57, 64, 47), (60, 66, 48), (61, 66, 48), (62, 66, 49),
+ (66, 66, 50), (70, 66, 50), (74, 65, 51), (77, 63, 50),
+ (79, 63, 46), (79, 62, 45), (79, 62, 45), (78, 63, 44),
+ (77, 63, 45), (77, 62, 45), (78, 63, 45), (81, 63, 46),
+ (84, 65, 48), (89, 68, 53), (90, 69, 54), (91, 70, 55),
+ (92, 74, 58), (91, 77, 61), (90, 80, 65), (88, 82, 68),
+ (86, 85, 72), (84, 84, 72), (83, 84, 73), (81, 83, 74),
+ (78, 81, 73), (76, 79, 72), (74, 77, 69), (73, 74, 66),
+ (72, 71, 63), (69, 68, 59), (67, 65, 56), (64, 61, 51),
+ (60, 55, 46), (55, 50, 43), (50, 47, 40), (45, 43, 37),
+ (42, 39, 32), (43, 38, 31), (44, 38, 30), (46, 40, 30),
+ (50, 42, 31), (53, 45, 32), (58, 49, 36), (64, 55, 41),
+ (70, 64, 52), (78, 74, 62), (89, 86, 75), (102, 97, 88),
+ (113, 109, 100), (124, 120, 111), (133, 129, 120), (139, 136, 126),
+ (143, 140, 129), (149, 146, 134), (155, 151, 140), (162, 159, 146),
+ (169, 166, 153), (175, 172, 158), (179, 176, 161), (182, 177, 162),
+ (181, 175, 159), (174, 167, 151), (164, 157, 141), (153, 146, 129),
+ (144, 136, 118), (137, 128, 109), (132, 123, 102), (129, 120, 96),
+ (131, 119, 93), (136, 122, 92), (140, 124, 93), (141, 125, 94),
+ (138, 122, 93), (135, 120, 90), (131, 116, 88), (125, 112, 85),
+ (119, 108, 82), (112, 103, 80), (110, 100, 75), (108, 98, 74),
+ (109, 98, 73), (107, 94, 73), (104, 92, 72), (100, 89, 72),
+ (94, 86, 71), (87, 81, 68), (77, 75, 65), (67, 67, 57),
+ (57, 59, 49), (51, 52, 41), (46, 45, 35), (40, 40, 30),
+ (36, 35, 27), (32, 32, 25), (29, 30, 24), (28, 29, 26),
+ (29, 32, 27), (32, 34, 29), (38, 37, 29), (44, 40, 29),
+ (44, 41, 30), (45, 41, 31), (46, 41, 32), (49, 42, 33),
+ (52, 43, 36), (56, 47, 40), (58, 52, 45), (67, 56, 48)
+ ),
+
+// 598 Muddy_2
+((99, 79, 67), (82, 66, 53), (91, 76, 64), (100, 86, 75),
+ (109, 95, 84), (118, 104, 94), (119, 104, 95), (121, 105, 97),
+ (119, 108, 102), (112, 104, 99), (106, 100, 97), (96, 90, 87),
+ (87, 81, 78), (79, 73, 70), (72, 65, 62), (68, 60, 56),
+ (65, 56, 50), (61, 50, 42), (60, 48, 42), (60, 47, 42),
+ (62, 50, 45), (64, 53, 49), (64, 54, 50), (64, 55, 52),
+ (71, 55, 50), (75, 53, 44), (79, 51, 39), (77, 48, 36),
+ (76, 46, 33), (76, 45, 32), (76, 45, 32), (69, 45, 35),
+ (63, 45, 38), (56, 46, 43), (54, 45, 43), (52, 45, 43),
+ (52, 45, 41), (53, 45, 40), (53, 44, 39), (53, 43, 38),
+ (57, 40, 28), (58, 36, 25), (60, 32, 22), (59, 29, 19),
+ (58, 26, 16), (56, 25, 15), (54, 24, 15), (51, 23, 15),
+ (46, 21, 13), (37, 23, 15), (34, 22, 15), (32, 21, 16),
+ (32, 23, 17), (32, 25, 19), (33, 25, 19), (35, 25, 19),
+ (42, 32, 26), (46, 34, 29), (51, 37, 32), (51, 38, 34),
+ (52, 40, 37), (50, 39, 36), (49, 38, 35), (44, 35, 31),
+ (41, 31, 27), (30, 22, 18), (33, 23, 19), (36, 24, 20),
+ (39, 27, 22), (42, 30, 24), (53, 38, 32), (70, 46, 39),
+ (95, 62, 47), (111, 70, 50), (128, 78, 54), (140, 86, 55),
+ (152, 94, 57), (157, 97, 59), (162, 101, 61), (162, 101, 59),
+ (160, 103, 63), (134, 93, 68), (116, 85, 66), (99, 78, 65),
+ (93, 75, 64), (88, 72, 63), (79, 66, 58), (75, 60, 52),
+ (79, 57, 47), (85, 60, 49), (91, 64, 52), (91, 65, 53),
+ (92, 66, 54), (93, 67, 55), (91, 71, 58), (87, 69, 55),
+ (80, 61, 48), (70, 48, 34), (69, 43, 29), (69, 39, 24),
+ (69, 40, 25), (69, 41, 26), (73, 45, 35), (80, 53, 41),
+ (90, 74, 64), (95, 80, 71), (101, 86, 79), (100, 85, 80),
+ (99, 85, 81), (96, 82, 78), (90, 77, 73), (83, 68, 67),
+ (77, 62, 59), (69, 52, 45), (69, 51, 43), (70, 50, 41),
+ (73, 49, 34), (78, 46, 27), (84, 42, 22), (90, 40, 20),
+ (93, 43, 22), (94, 47, 31), (96, 52, 40), (96, 57, 45),
+ (97, 62, 50), (105, 73, 56), (114, 84, 72), (119, 96, 87),
+ (130, 111, 97), (132, 117, 108), (132, 118, 107), (132, 120, 107),
+ (126, 114, 100), (115, 98, 90), (104, 87, 79), (90, 77, 70),
+ (69, 60, 58), (57, 52, 51), (46, 45, 45), (43, 42, 41),
+ (40, 39, 37), (33, 34, 31), (27, 28, 25), (24, 23, 21),
+ (23, 21, 17), (18, 16, 11), (18, 15, 10), (19, 14, 10),
+ (25, 13, 7), (30, 14, 6), (34, 17, 8), (47, 22, 8),
+ (70, 35, 10), (74, 37, 14), (79, 40, 18), (89, 45, 23),
+ (100, 52, 23), (108, 53, 20), (110, 55, 26), (114, 57, 31),
+ (125, 55, 30), (124, 69, 40), (121, 64, 43), (119, 59, 47),
+ (116, 63, 46), (104, 67, 47), (94, 62, 49), (87, 58, 48),
+ (83, 61, 51), (82, 61, 51), (82, 61, 51), (82, 60, 50),
+ (85, 59, 49), (90, 60, 51), (93, 64, 52), (101, 69, 55),
+ (117, 73, 61), (122, 75, 66), (119, 80, 67), (118, 80, 67),
+ (112, 72, 62), (98, 65, 55), (83, 57, 47), (70, 48, 34),
+ (57, 36, 24), (56, 36, 22), (55, 36, 21), (56, 37, 25),
+ (60, 43, 34), (66, 51, 40), (73, 56, 46), (79, 60, 51),
+ (83, 63, 52), (84, 61, 52), (83, 60, 52), (80, 56, 49),
+ (73, 54, 46), (67, 50, 48), (64, 48, 49), (63, 50, 47),
+ (64, 51, 49), (69, 54, 52), (78, 62, 57), (86, 67, 61),
+ (93, 74, 64), (100, 77, 68), (99, 76, 70), (94, 76, 68),
+ (89, 73, 65), (78, 64, 59), (62, 54, 52), (53, 47, 44),
+ (47, 40, 37), (40, 34, 31), (37, 29, 24), (40, 26, 21),
+ (44, 26, 23), (48, 28, 24), (54, 30, 26), (56, 32, 29),
+ (58, 36, 31), (61, 38, 32), (63, 40, 33), (60, 40, 31),
+ (56, 38, 29), (52, 38, 27), (50, 36, 27), (48, 34, 27),
+ (47, 35, 27), (51, 38, 31), (56, 40, 36), (61, 45, 40),
+ (67, 50, 44), (69, 51, 46), (70, 52, 46), (71, 52, 45),
+ (71, 49, 40), (73, 44, 34), (72, 38, 30), (72, 35, 24),
+ (68, 30, 16), (61, 23, 12), (54, 19, 9), (43, 17, 7),
+ (35, 14, 7), (27, 11, 6), (26, 11, 8), (30, 14, 10),
+ (32, 18, 13), (41, 25, 19), (55, 35, 27), (66, 47, 38),
+ (85, 64, 55), (98, 75, 66), (87, 64, 55), (91, 68, 56)
+ ),
+
+// 599 Muted_Rainbow
+((192, 123, 83), (209, 149, 116), (184, 129, 102), (160, 110, 88),
+ (137, 98, 81), (114, 86, 74), (103, 80, 67), (93, 74, 60),
+ (83, 79, 44), (80, 75, 36), (78, 72, 28), (75, 70, 32),
+ (73, 69, 36), (65, 61, 42), (58, 53, 48), (55, 54, 51),
+ (53, 55, 54), (53, 65, 53), (69, 78, 55), (85, 92, 57),
+ (94, 93, 48), (104, 95, 40), (105, 94, 39), (106, 93, 39),
+ (104, 74, 39), (104, 70, 45), (105, 66, 52), (105, 70, 55),
+ (105, 75, 59), (104, 78, 59), (104, 82, 59), (91, 77, 53),
+ (70, 74, 46), (46, 75, 50), (38, 76, 51), (31, 78, 52),
+ (29, 79, 53), (27, 81, 55), (26, 84, 55), (25, 87, 56),
+ (33, 93, 53), (41, 98, 53), (50, 103, 54), (68, 107, 51),
+ (87, 111, 49), (95, 105, 50), (104, 100, 51), (121, 97, 52),
+ (140, 97, 56), (165, 100, 48), (178, 115, 51), (191, 130, 55),
+ (207, 154, 70), (223, 178, 85), (227, 187, 101), (232, 197, 117),
+ (248, 226, 113), (232, 202, 110), (217, 179, 107), (185, 145, 85),
+ (154, 111, 64), (140, 89, 60), (127, 68, 56), (102, 43, 44),
+ (83, 30, 38), (76, 20, 35), (89, 32, 38), (102, 44, 41),
+ (108, 51, 40), (114, 58, 40), (129, 74, 43), (156, 101, 47),
+ (199, 157, 43), (212, 167, 47), (225, 177, 51), (209, 178, 54),
+ (194, 179, 57), (189, 172, 52), (184, 165, 48), (175, 152, 46),
+ (153, 136, 38), (150, 109, 21), (139, 93, 22), (129, 78, 23),
+ (119, 68, 23), (109, 59, 24), (87, 52, 23), (70, 46, 27),
+ (44, 31, 23), (41, 37, 25), (39, 44, 28), (37, 44, 29),
+ (35, 44, 30), (43, 47, 36), (53, 50, 46), (59, 53, 56),
+ (73, 47, 58), (94, 44, 59), (98, 42, 53), (102, 41, 48),
+ (102, 40, 44), (103, 39, 41), (110, 44, 37), (120, 55, 35),
+ (154, 69, 30), (167, 85, 27), (181, 102, 24), (189, 109, 25),
+ (198, 116, 27), (209, 120, 35), (218, 127, 39), (230, 131, 46),
+ (234, 123, 49), (247, 114, 48), (242, 112, 45), (238, 111, 42),
+ (233, 123, 32), (222, 122, 23), (199, 115, 21), (178, 114, 32),
+ (125, 85, 41), (96, 75, 48), (67, 66, 55), (57, 60, 52),
+ (47, 55, 50), (39, 51, 47), (40, 54, 41), (54, 61, 32),
+ (87, 60, 29), (149, 66, 28), (161, 62, 30), (173, 59, 32),
+ (188, 56, 35), (186, 55, 42), (182, 51, 47), (179, 60, 54),
+ (172, 82, 48), (181, 101, 45), (191, 120, 42), (194, 122, 41),
+ (198, 125, 40), (201, 136, 37), (197, 145, 30), (182, 140, 33),
+ (166, 129, 27), (112, 101, 27), (100, 89, 26), (89, 78, 25),
+ (76, 61, 19), (72, 44, 24), (78, 30, 29), (95, 27, 25),
+ (144, 46, 35), (161, 51, 36), (178, 57, 37), (207, 85, 39),
+ (219, 119, 47), (233, 132, 69), (245, 148, 95), (240, 167, 113),
+ (236, 162, 125), (227, 151, 119), (226, 150, 111), (226, 149, 103),
+ (214, 142, 75), (203, 135, 56), (198, 132, 40), (190, 126, 33),
+ (190, 105, 29), (194, 99, 28), (198, 94, 27), (214, 79, 42),
+ (218, 69, 44), (203, 69, 49), (181, 60, 75), (164, 55, 89),
+ (127, 65, 92), (84, 65, 93), (76, 60, 90), (68, 65, 80),
+ (57, 65, 64), (66, 57, 53), (82, 57, 47), (94, 63, 49),
+ (121, 61, 56), (128, 64, 57), (135, 67, 58), (141, 74, 69),
+ (143, 79, 72), (147, 84, 76), (164, 99, 85), (177, 113, 98),
+ (177, 111, 109), (180, 115, 121), (186, 118, 134), (187, 97, 150),
+ (163, 78, 153), (153, 82, 136), (166, 83, 143), (163, 85, 134),
+ (170, 100, 113), (177, 118, 113), (164, 130, 103), (158, 135, 87),
+ (143, 136, 78), (113, 138, 70), (103, 137, 54), (113, 134, 42),
+ (120, 133, 40), (128, 139, 44), (141, 146, 51), (148, 155, 50),
+ (139, 146, 56), (123, 131, 63), (101, 137, 56), (74, 125, 56),
+ (55, 103, 53), (41, 100, 44), (33, 100, 45), (28, 109, 47),
+ (35, 122, 56), (48, 124, 70), (57, 130, 85), (70, 142, 98),
+ (86, 148, 93), (82, 145, 81), (69, 139, 77), (64, 130, 69),
+ (58, 119, 55), (52, 107, 51), (51, 100, 57), (69, 95, 64),
+ (102, 99, 69), (118, 117, 69), (138, 125, 71), (164, 128, 77),
+ (170, 127, 80), (169, 118, 83), (173, 112, 84), (180, 95, 82),
+ (179, 87, 86), (182, 95, 85), (193, 87, 72), (204, 86, 62),
+ (217, 90, 55), (217, 81, 50), (206, 80, 47), (199, 76, 35),
+ (174, 62, 31), (143, 59, 40), (129, 64, 44), (119, 60, 39),
+ (120, 62, 40), (128, 64, 48), (158, 91, 81), (193, 131, 100)
+ ),
+
+// 600 Mystery
+((80, 11, 0), (64, 6, 0), (58, 4, 0), (52, 3, 0),
+ (48, 2, 0), (44, 1, 0), (42, 0, 0), (41, 0, 0),
+ (36, 0, 0), (32, 0, 0), (29, 0, 0), (25, 0, 0),
+ (22, 0, 0), (20, 0, 0), (18, 0, 0), (18, 0, 0),
+ (18, 1, 1), (11, 3, 8), (13, 5, 12), (16, 8, 16),
+ (25, 9, 15), (34, 10, 14), (39, 11, 14), (45, 13, 15),
+ (74, 24, 19), (92, 29, 18), (111, 34, 17), (125, 42, 23),
+ (140, 51, 29), (143, 58, 37), (146, 66, 45), (150, 78, 61),
+ (136, 85, 77), (107, 110, 130), (102, 120, 145), (98, 130, 161),
+ (87, 122, 153), (77, 114, 145), (73, 109, 141), (70, 105, 137),
+ (80, 87, 108), (88, 73, 83), (97, 60, 58), (102, 46, 37),
+ (107, 32, 16), (110, 28, 10), (113, 24, 4), (116, 24, 4),
+ (118, 24, 3), (124, 24, 2), (126, 24, 1), (129, 24, 0),
+ (128, 24, 0), (128, 24, 0), (126, 24, 0), (125, 24, 0),
+ (109, 21, 1), (98, 18, 1), (88, 15, 1), (78, 12, 1),
+ (68, 10, 1), (62, 9, 1), (57, 8, 1), (46, 6, 1),
+ (37, 3, 1), (29, 2, 1), (34, 3, 0), (39, 5, 0),
+ (44, 6, 0), (50, 8, 1), (65, 14, 3), (87, 21, 4),
+ (115, 40, 20), (117, 49, 31), (120, 59, 42), (119, 59, 42),
+ (118, 59, 42), (111, 59, 45), (104, 60, 49), (87, 61, 57),
+ (67, 61, 65), (44, 48, 56), (40, 36, 45), (36, 25, 34),
+ (36, 22, 30), (36, 19, 27), (37, 18, 25), (44, 15, 20),
+ (60, 10, 7), (66, 8, 3), (72, 7, 0), (74, 7, 0),
+ (77, 8, 0), (83, 10, 0), (91, 13, 0), (101, 16, 0),
+ (113, 20, 0), (134, 28, 0), (144, 30, 0), (155, 33, 0),
+ (160, 34, 0), (165, 36, 0), (176, 41, 0), (186, 45, 0),
+ (200, 55, 7), (201, 60, 14), (203, 66, 21), (206, 67, 21),
+ (209, 69, 21), (216, 70, 19), (220, 69, 17), (213, 70, 21),
+ (203, 68, 23), (182, 56, 17), (177, 52, 13), (173, 48, 10),
+ (160, 40, 6), (143, 32, 3), (124, 25, 2), (108, 18, 0),
+ (82, 10, 1), (73, 7, 1), (64, 5, 1), (60, 4, 1),
+ (57, 3, 1), (50, 4, 3), (41, 6, 9), (34, 10, 17),
+ (28, 14, 27), (19, 34, 57), (17, 40, 67), (15, 47, 78),
+ (9, 53, 85), (5, 52, 88), (3, 48, 82), (3, 47, 79),
+ (15, 50, 78), (21, 42, 64), (28, 35, 50), (28, 31, 43),
+ (29, 28, 37), (27, 28, 38), (28, 32, 45), (40, 42, 52),
+ (55, 50, 59), (92, 66, 65), (95, 67, 65), (98, 68, 66),
+ (115, 75, 66), (127, 74, 62), (150, 78, 57), (168, 75, 45),
+ (182, 62, 22), (180, 58, 18), (178, 54, 14), (170, 53, 15),
+ (150, 49, 17), (130, 46, 19), (110, 41, 20), (90, 34, 19),
+ (75, 30, 19), (37, 23, 21), (29, 20, 20), (22, 17, 19),
+ (9, 10, 15), (5, 6, 9), (5, 2, 3), (8, 1, 2),
+ (24, 3, 2), (30, 4, 2), (36, 5, 2), (52, 10, 2),
+ (72, 14, 1), (95, 20, 0), (120, 27, 1), (145, 34, 2),
+ (169, 41, 2), (188, 48, 3), (206, 54, 2), (222, 59, 1),
+ (235, 63, 2), (246, 67, 3), (250, 69, 4), (250, 71, 5),
+ (246, 73, 7), (244, 73, 8), (242, 74, 10), (238, 71, 10),
+ (230, 69, 10), (224, 65, 8), (219, 63, 7), (215, 63, 9),
+ (215, 63, 9), (215, 62, 7), (217, 61, 5), (218, 58, 1),
+ (218, 58, 0), (220, 58, 0), (218, 58, 1), (215, 57, 1),
+ (209, 53, 1), (200, 50, 0), (191, 46, 0), (180, 43, 0),
+ (171, 39, 0), (163, 36, 0), (157, 33, 0), (153, 30, 0),
+ (150, 30, 0), (148, 31, 0), (146, 31, 0), (144, 31, 0),
+ (141, 30, 0), (134, 28, 0), (124, 25, 0), (112, 22, 0),
+ (102, 19, 0), (93, 16, 0), (85, 14, 1), (79, 12, 1),
+ (76, 11, 0), (77, 10, 1), (83, 12, 2), (92, 15, 3),
+ (102, 20, 4), (113, 23, 4), (122, 26, 3), (131, 28, 3),
+ (136, 30, 3), (137, 29, 4), (134, 27, 4), (127, 25, 2),
+ (119, 21, 1), (111, 18, 0), (101, 15, 0), (92, 11, 0),
+ (85, 9, 0), (80, 8, 0), (78, 9, 0), (78, 10, 0),
+ (79, 10, 0), (80, 8, 0), (83, 8, 0), (86, 8, 0),
+ (89, 8, 1), (92, 11, 1), (95, 12, 1), (99, 13, 1),
+ (102, 13, 0), (105, 13, 1), (105, 15, 1), (104, 16, 1),
+ (102, 17, 1), (99, 17, 0), (94, 15, 0), (87, 14, 0)
+ ),
+
+// 601 Neon
+((21, 52, 121), (20, 40, 136), (19, 35, 145), (19, 31, 155),
+ (20, 28, 163), (21, 26, 172), (23, 25, 175), (25, 24, 178),
+ (37, 20, 187), (44, 18, 190), (52, 17, 193), (61, 15, 192),
+ (70, 14, 192), (80, 12, 189), (90, 11, 187), (95, 10, 185),
+ (101, 10, 183), (122, 7, 173), (131, 8, 166), (140, 9, 160),
+ (147, 11, 153), (155, 14, 147), (158, 15, 144), (162, 16, 142),
+ (176, 20, 134), (182, 21, 132), (188, 22, 131), (193, 22, 133),
+ (198, 23, 135), (200, 23, 137), (202, 23, 139), (205, 22, 145),
+ (208, 21, 151), (209, 18, 164), (208, 17, 170), (208, 16, 176),
+ (206, 16, 179), (204, 16, 183), (202, 16, 183), (201, 17, 184),
+ (193, 20, 178), (189, 22, 170), (186, 24, 163), (183, 27, 153),
+ (180, 30, 144), (179, 31, 139), (178, 33, 135), (176, 36, 129),
+ (173, 38, 123), (167, 44, 110), (164, 49, 103), (161, 55, 96),
+ (156, 63, 91), (152, 71, 86), (149, 74, 84), (146, 78, 83),
+ (136, 94, 78), (132, 100, 72), (128, 106, 67), (126, 112, 60),
+ (124, 118, 53), (123, 119, 50), (123, 121, 47), (123, 121, 42),
+ (123, 120, 37), (124, 107, 27), (128, 98, 26), (132, 90, 25),
+ (134, 85, 26), (136, 81, 28), (142, 71, 33), (147, 62, 39),
+ (153, 46, 56), (154, 41, 67), (155, 37, 79), (152, 36, 93),
+ (149, 36, 107), (146, 38, 114), (143, 40, 121), (136, 47, 134),
+ (128, 56, 146), (114, 81, 165), (108, 94, 169), (102, 108, 173),
+ (99, 114, 173), (97, 120, 173), (94, 132, 170), (95, 140, 164),
+ (106, 146, 148), (116, 143, 141), (127, 140, 134), (132, 136, 131),
+ (137, 133, 128), (146, 123, 123), (158, 114, 120), (170, 100, 117),
+ (181, 85, 116), (197, 55, 121), (196, 41, 128), (195, 27, 135),
+ (191, 22, 139), (188, 18, 143), (178, 11, 152), (166, 8, 160),
+ (135, 15, 174), (119, 25, 179), (103, 36, 185), (95, 42, 187),
+ (87, 49, 190), (73, 63, 194), (58, 78, 197), (45, 94, 199),
+ (34, 111, 201), (20, 145, 202), (19, 153, 201), (19, 161, 201),
+ (23, 175, 198), (32, 187, 191), (46, 195, 185), (63, 202, 176),
+ (97, 205, 158), (115, 200, 147), (134, 196, 137), (142, 193, 129),
+ (150, 190, 122), (168, 183, 109), (184, 179, 96), (198, 174, 85),
+ (209, 171, 75), (220, 166, 62), (218, 164, 60), (217, 163, 58),
+ (209, 158, 56), (197, 156, 56), (182, 154, 60), (165, 154, 66),
+ (129, 153, 83), (112, 148, 91), (96, 144, 100), (88, 140, 104),
+ (80, 137, 108), (64, 127, 116), (50, 118, 124), (37, 108, 132),
+ (26, 97, 139), (19, 75, 150), (20, 69, 151), (21, 64, 153),
+ (26, 54, 154), (33, 45, 155), (42, 37, 156), (50, 30, 157),
+ (66, 17, 161), (70, 14, 162), (75, 12, 164), (83, 8, 167),
+ (90, 5, 170), (95, 4, 175), (98, 4, 179), (97, 4, 185),
+ (94, 5, 191), (81, 10, 203), (77, 12, 206), (73, 14, 209),
+ (65, 20, 215), (56, 28, 221), (47, 36, 227), (38, 45, 231),
+ (20, 59, 238), (16, 61, 238), (13, 64, 239), (7, 69, 239),
+ (4, 74, 238), (1, 77, 234), (0, 79, 230), (0, 79, 224),
+ (1, 76, 216), (3, 71, 208), (5, 64, 199), (8, 58, 189),
+ (10, 52, 180), (14, 46, 170), (18, 41, 160), (24, 36, 150),
+ (38, 26, 131), (41, 25, 126), (45, 24, 122), (53, 22, 112),
+ (60, 22, 102), (67, 24, 92), (74, 26, 83), (81, 28, 74),
+ (89, 30, 66), (96, 33, 58), (103, 36, 52), (109, 38, 45),
+ (115, 42, 38), (120, 46, 31), (125, 50, 25), (130, 54, 19),
+ (136, 58, 15), (141, 61, 12), (147, 63, 10), (153, 66, 9),
+ (158, 70, 8), (162, 72, 10), (165, 73, 14), (167, 73, 20),
+ (169, 73, 29), (170, 72, 38), (169, 72, 49), (164, 72, 60),
+ (157, 75, 71), (148, 80, 82), (139, 84, 92), (129, 90, 105),
+ (119, 95, 115), (113, 100, 124), (105, 105, 131), (98, 110, 136),
+ (91, 116, 138), (85, 118, 140), (82, 118, 141), (82, 117, 141),
+ (85, 114, 140), (91, 108, 138), (97, 101, 136), (102, 95, 133),
+ (104, 87, 131), (107, 76, 130), (109, 66, 131), (109, 57, 134),
+ (107, 48, 136), (103, 41, 139), (99, 39, 140), (91, 40, 141),
+ (82, 43, 142), (73, 48, 143), (64, 55, 144), (54, 62, 144),
+ (45, 69, 144), (37, 77, 142), (30, 84, 139), (25, 91, 134),
+ (21, 96, 130), (19, 101, 126), (18, 104, 122), (18, 105, 118),
+ (19, 104, 113), (20, 100, 109), (21, 94, 106), (22, 87, 104),
+ (22, 80, 104), (22, 72, 106), (22, 65, 110), (22, 58, 114)
+ ),
+
+// 602 Neon_Purple
+((192, 57, 254), (205, 58, 253), (198, 59, 246), (192, 60, 240),
+ (183, 62, 231), (175, 64, 223), (172, 65, 218), (170, 66, 214),
+ (164, 76, 196), (161, 87, 191), (158, 99, 187), (159, 114, 185),
+ (160, 130, 183), (160, 139, 184), (161, 149, 186), (161, 150, 184),
+ (162, 152, 183), (155, 143, 197), (143, 139, 202), (132, 135, 208),
+ (128, 134, 213), (124, 133, 218), (120, 129, 216), (117, 125, 214),
+ (106, 98, 213), (94, 85, 211), (83, 72, 209), (76, 62, 211),
+ (69, 53, 214), (68, 50, 212), (67, 48, 210), (65, 47, 207),
+ (75, 50, 201), (89, 58, 182), (86, 54, 173), (83, 51, 164),
+ (77, 45, 155), (71, 39, 147), (68, 36, 144), (65, 33, 141),
+ (47, 25, 126), (36, 21, 118), (25, 18, 110), (19, 18, 105),
+ (14, 19, 101), (14, 21, 103), (14, 23, 105), (12, 25, 116),
+ (13, 32, 128), (10, 38, 165), (12, 36, 177), (15, 35, 190),
+ (18, 29, 202), (21, 24, 214), (25, 24, 218), (30, 24, 223),
+ (51, 30, 241), (64, 32, 245), (77, 34, 250), (93, 36, 251),
+ (110, 39, 253), (118, 40, 253), (126, 41, 253), (138, 43, 253),
+ (142, 44, 253), (142, 44, 253), (136, 42, 248), (131, 40, 243),
+ (127, 39, 238), (123, 39, 234), (117, 37, 222), (111, 37, 209),
+ (99, 40, 188), (93, 41, 182), (88, 43, 177), (82, 41, 176),
+ (77, 39, 175), (75, 38, 174), (74, 38, 174), (72, 36, 173),
+ (73, 37, 174), (75, 42, 185), (78, 41, 195), (82, 41, 206),
+ (82, 40, 212), (82, 40, 219), (85, 37, 230), (89, 35, 239),
+ (104, 36, 251), (115, 38, 252), (126, 41, 253), (130, 42, 253),
+ (134, 43, 253), (142, 45, 253), (150, 46, 253), (153, 46, 253),
+ (153, 46, 252), (146, 45, 246), (137, 44, 240), (129, 43, 235),
+ (123, 42, 234), (118, 41, 233), (108, 42, 232), (101, 40, 232),
+ (86, 36, 235), (81, 35, 233), (77, 34, 232), (73, 32, 231),
+ (70, 30, 231), (65, 32, 231), (62, 32, 234), (62, 32, 236),
+ (63, 32, 242), (81, 35, 250), (84, 34, 251), (88, 34, 252),
+ (88, 34, 252), (90, 35, 254), (89, 35, 253), (89, 35, 252),
+ (90, 38, 245), (91, 40, 238), (93, 43, 232), (95, 46, 230),
+ (97, 49, 228), (103, 55, 224), (106, 60, 222), (110, 65, 225),
+ (114, 66, 226), (117, 64, 224), (115, 64, 223), (114, 64, 223),
+ (114, 64, 222), (111, 61, 218), (105, 63, 219), (100, 60, 220),
+ (96, 50, 223), (91, 45, 224), (87, 41, 225), (84, 38, 223),
+ (82, 35, 222), (68, 31, 219), (55, 27, 213), (43, 25, 207),
+ (33, 22, 200), (19, 19, 191), (20, 19, 188), (21, 19, 186),
+ (20, 20, 180), (21, 21, 173), (25, 29, 165), (28, 34, 157),
+ (32, 41, 146), (33, 42, 145), (34, 43, 144), (33, 36, 139),
+ (35, 32, 135), (42, 36, 132), (51, 41, 131), (63, 48, 130),
+ (76, 58, 132), (93, 71, 146), (97, 72, 150), (101, 73, 154),
+ (106, 76, 163), (110, 79, 172), (114, 81, 179), (122, 83, 189),
+ (142, 87, 209), (149, 87, 212), (156, 88, 215), (167, 89, 223),
+ (177, 90, 231), (180, 95, 232), (178, 97, 232), (176, 97, 232),
+ (171, 95, 228), (164, 93, 222), (161, 91, 214), (163, 88, 209),
+ (161, 89, 203), (155, 92, 197), (149, 96, 193), (141, 94, 185),
+ (114, 87, 177), (105, 83, 177), (96, 80, 177), (82, 71, 180),
+ (68, 62, 185), (57, 59, 195), (50, 55, 200), (45, 55, 206),
+ (38, 46, 212), (32, 47, 216), (26, 45, 221), (21, 48, 225),
+ (16, 48, 233), (8, 50, 240), (9, 52, 244), (19, 56, 245),
+ (32, 63, 243), (42, 69, 243), (51, 73, 240), (59, 71, 237),
+ (66, 74, 237), (74, 71, 238), (87, 82, 240), (107, 89, 241),
+ (124, 100, 243), (142, 110, 245), (161, 116, 244), (174, 117, 244),
+ (185, 113, 244), (191, 110, 245), (196, 103, 245), (196, 96, 246),
+ (192, 94, 249), (189, 89, 250), (184, 81, 252), (178, 73, 253),
+ (173, 67, 253), (166, 60, 253), (162, 52, 252), (157, 48, 252),
+ (149, 46, 252), (145, 45, 252), (141, 44, 252), (137, 42, 253),
+ (133, 41, 253), (124, 39, 252), (117, 37, 247), (114, 35, 240),
+ (108, 33, 230), (107, 33, 217), (101, 32, 204), (98, 31, 192),
+ (94, 29, 186), (87, 29, 181), (82, 28, 177), (69, 26, 169),
+ (55, 25, 166), (42, 22, 160), (32, 21, 156), (23, 19, 156),
+ (25, 21, 164), (35, 23, 176), (47, 26, 184), (60, 30, 197),
+ (73, 32, 208), (83, 35, 217), (88, 35, 222), (99, 38, 230),
+ (114, 41, 240), (132, 46, 245), (153, 51, 249), (173, 54, 252)
+ ),
+
+// 603 Night_Flower
+((39, 60, 72), (63, 72, 122), (43, 81, 93), (23, 90, 64),
+ (15, 77, 51), (8, 64, 39), (6, 58, 31), (4, 53, 24),
+ (4, 49, 21), (9, 48, 24), (14, 47, 28), (29, 39, 54),
+ (44, 31, 81), (61, 28, 106), (78, 26, 132), (88, 21, 149),
+ (99, 16, 166), (117, 18, 196), (113, 16, 191), (110, 14, 187),
+ (99, 11, 178), (89, 8, 169), (85, 6, 161), (81, 4, 154),
+ (76, 2, 148), (78, 1, 147), (80, 0, 146), (81, 1, 149),
+ (83, 3, 153), (84, 2, 155), (85, 2, 157), (90, 1, 162),
+ (96, 4, 166), (115, 10, 185), (120, 16, 188), (126, 22, 191),
+ (121, 23, 192), (116, 25, 194), (112, 23, 186), (108, 22, 179),
+ (73, 12, 140), (59, 12, 108), (45, 12, 76), (39, 16, 51),
+ (33, 21, 26), (29, 23, 21), (26, 25, 16), (21, 28, 14),
+ (19, 40, 21), (21, 67, 49), (27, 73, 67), (33, 79, 85),
+ (49, 67, 107), (66, 56, 130), (72, 48, 138), (79, 41, 147),
+ (93, 6, 164), (86, 7, 145), (79, 8, 126), (61, 10, 99),
+ (44, 12, 72), (36, 14, 57), (28, 17, 43), (19, 27, 21),
+ (11, 31, 15), (3, 38, 12), (3, 36, 11), (3, 35, 10),
+ (3, 33, 9), (3, 32, 9), (3, 26, 8), (4, 22, 8),
+ (4, 15, 5), (6, 14, 11), (9, 13, 17), (20, 9, 41),
+ (31, 5, 65), (40, 9, 78), (50, 13, 92), (70, 18, 128),
+ (93, 16, 164), (129, 34, 207), (132, 33, 211), (136, 32, 215),
+ (133, 29, 213), (130, 27, 211), (115, 21, 192), (100, 17, 172),
+ (71, 11, 136), (58, 18, 106), (45, 26, 76), (39, 25, 68),
+ (34, 24, 61), (26, 31, 45), (19, 42, 25), (14, 42, 22),
+ (17, 39, 30), (3, 48, 25), (3, 48, 25), (3, 49, 25),
+ (2, 48, 21), (1, 47, 18), (1, 49, 11), (1, 48, 8),
+ (0, 43, 1), (0, 38, 1), (0, 34, 2), (0, 32, 2),
+ (0, 30, 2), (0, 27, 4), (0, 23, 6), (2, 21, 7),
+ (3, 24, 10), (6, 37, 19), (10, 40, 23), (14, 44, 27),
+ (25, 54, 34), (34, 62, 45), (35, 73, 57), (34, 82, 66),
+ (32, 89, 72), (25, 85, 66), (18, 82, 60), (16, 79, 52),
+ (15, 76, 44), (10, 67, 32), (12, 60, 22), (10, 54, 11),
+ (6, 49, 4), (3, 45, 4), (3, 44, 4), (3, 43, 5),
+ (2, 41, 6), (1, 38, 7), (1, 37, 10), (1, 38, 13),
+ (1, 40, 13), (1, 44, 10), (2, 48, 8), (1, 49, 8),
+ (1, 51, 8), (2, 52, 9), (4, 53, 15), (6, 61, 22),
+ (8, 69, 34), (21, 84, 61), (20, 86, 61), (19, 88, 61),
+ (24, 80, 61), (33, 69, 58), (28, 58, 44), (28, 45, 34),
+ (36, 20, 44), (38, 16, 55), (41, 12, 67), (56, 15, 84),
+ (71, 8, 110), (79, 0, 137), (83, 2, 146), (85, 14, 135),
+ (79, 27, 116), (48, 45, 68), (39, 49, 54), (30, 54, 40),
+ (23, 55, 28), (15, 53, 18), (8, 47, 13), (7, 40, 14),
+ (16, 28, 16), (18, 26, 16), (20, 25, 17), (27, 24, 19),
+ (36, 26, 22), (43, 31, 29), (46, 28, 50), (50, 20, 69),
+ (54, 23, 71), (54, 26, 73), (53, 23, 71), (47, 17, 64),
+ (42, 23, 49), (44, 26, 51), (47, 16, 69), (51, 12, 82),
+ (79, 3, 144), (87, 4, 153), (95, 6, 162), (105, 11, 178),
+ (116, 19, 192), (127, 27, 205), (132, 35, 214), (132, 41, 216),
+ (130, 42, 214), (122, 35, 203), (110, 26, 185), (95, 23, 170),
+ (80, 12, 151), (68, 3, 133), (58, 3, 128), (54, 2, 127),
+ (59, 1, 123), (54, 3, 122), (42, 8, 106), (46, 13, 82),
+ (46, 13, 71), (32, 18, 52), (32, 28, 32), (44, 34, 31),
+ (52, 41, 42), (60, 59, 55), (61, 75, 66), (55, 85, 73),
+ (54, 90, 76), (41, 89, 70), (25, 85, 57), (16, 72, 44),
+ (10, 56, 31), (8, 44, 21), (9, 36, 16), (13, 30, 16),
+ (16, 25, 17), (19, 22, 17), (25, 22, 18), (28, 22, 20),
+ (25, 23, 18), (26, 21, 16), (25, 18, 15), (19, 18, 12),
+ (15, 18, 10), (13, 16, 10), (9, 18, 10), (7, 20, 10),
+ (6, 20, 10), (6, 21, 10), (7, 21, 10), (6, 23, 9),
+ (7, 25, 10), (7, 25, 9), (6, 27, 9), (6, 31, 11),
+ (7, 32, 13), (6, 35, 13), (5, 39, 13), (5, 44, 10),
+ (8, 53, 7), (11, 56, 8), (18, 52, 12), (31, 56, 19),
+ (39, 58, 26), (48, 52, 41), (54, 49, 57), (49, 42, 58),
+ (41, 37, 51), (33, 41, 46), (49, 32, 85), (62, 31, 103)
+ ),
+
+// 604 Night_Reeds
+((69, 72, 71), (44, 58, 44), (26, 43, 27), (9, 28, 10),
+ (15, 32, 10), (21, 37, 11), (27, 39, 13), (34, 42, 15),
+ (63, 59, 17), (77, 72, 16), (91, 85, 15), (106, 97, 25),
+ (122, 109, 35), (129, 111, 48), (137, 114, 61), (135, 114, 63),
+ (133, 114, 65), (113, 105, 62), (97, 92, 61), (82, 79, 60),
+ (68, 61, 53), (54, 44, 46), (47, 38, 40), (41, 32, 35),
+ (19, 20, 12), (14, 16, 8), (10, 12, 4), (8, 11, 3),
+ (7, 10, 3), (6, 10, 3), (6, 11, 4), (5, 13, 5),
+ (5, 14, 5), (5, 17, 4), (5, 21, 4), (5, 25, 4),
+ (7, 28, 4), (10, 32, 5), (12, 33, 5), (14, 35, 5),
+ (16, 42, 7), (18, 47, 8), (21, 52, 9), (24, 54, 10),
+ (28, 57, 12), (29, 57, 13), (30, 57, 14), (29, 55, 13),
+ (28, 54, 13), (26, 52, 14), (24, 51, 12), (22, 51, 11),
+ (20, 50, 10), (18, 50, 9), (18, 50, 9), (19, 50, 9),
+ (22, 56, 10), (25, 60, 10), (29, 65, 11), (33, 69, 13),
+ (37, 74, 16), (41, 76, 17), (45, 79, 18), (55, 84, 21),
+ (68, 87, 26), (81, 87, 49), (81, 86, 57), (82, 86, 65),
+ (81, 84, 62), (81, 82, 60), (77, 78, 57), (69, 72, 56),
+ (54, 63, 59), (43, 60, 47), (32, 57, 36), (27, 56, 25),
+ (22, 55, 15), (22, 55, 14), (22, 55, 14), (23, 55, 14),
+ (24, 55, 15), (26, 55, 15), (29, 57, 16), (33, 60, 18),
+ (35, 62, 20), (38, 65, 22), (48, 74, 25), (65, 85, 39),
+ (97, 110, 69), (101, 112, 72), (106, 115, 75), (107, 116, 74),
+ (109, 117, 74), (108, 121, 76), (107, 122, 78), (105, 117, 79),
+ (92, 104, 69), (59, 82, 37), (47, 75, 26), (36, 68, 15),
+ (33, 63, 14), (31, 59, 13), (26, 53, 11), (21, 47, 10),
+ (14, 35, 8), (12, 30, 8), (11, 26, 8), (10, 25, 8),
+ (9, 25, 9), (9, 26, 10), (11, 28, 10), (15, 33, 9),
+ (19, 35, 9), (26, 39, 8), (29, 38, 7), (33, 38, 7),
+ (41, 43, 6), (46, 46, 3), (45, 49, 4), (40, 46, 4),
+ (36, 30, 5), (32, 28, 4), (29, 26, 4), (24, 24, 3),
+ (20, 23, 3), (13, 17, 2), (7, 11, 2), (4, 6, 3),
+ (2, 3, 3), (0, 1, 2), (0, 1, 2), (0, 2, 3),
+ (0, 3, 4), (0, 4, 5), (0, 6, 6), (2, 6, 7),
+ (10, 12, 14), (16, 16, 21), (23, 21, 28), (26, 23, 31),
+ (29, 26, 34), (36, 33, 35), (40, 40, 35), (42, 46, 38),
+ (46, 51, 38), (52, 58, 41), (51, 59, 39), (50, 60, 37),
+ (45, 60, 33), (40, 59, 28), (34, 56, 25), (31, 51, 22),
+ (23, 38, 20), (21, 35, 20), (19, 32, 20), (14, 27, 19),
+ (11, 22, 18), (7, 18, 17), (5, 14, 16), (4, 12, 15),
+ (4, 11, 15), (7, 14, 13), (8, 15, 14), (9, 17, 15),
+ (14, 20, 17), (22, 24, 19), (27, 24, 20), (32, 24, 19),
+ (31, 23, 18), (31, 23, 18), (32, 24, 19), (30, 19, 19),
+ (29, 16, 19), (25, 13, 17), (18, 9, 14), (12, 7, 12),
+ (6, 5, 9), (3, 3, 8), (1, 3, 7), (1, 3, 5),
+ (0, 4, 4), (0, 5, 3), (0, 7, 2), (0, 9, 1),
+ (2, 15, 1), (3, 18, 1), (5, 21, 2), (6, 28, 2),
+ (8, 33, 3), (9, 38, 5), (12, 40, 6), (14, 42, 8),
+ (15, 45, 9), (16, 45, 9), (15, 44, 10), (13, 41, 10),
+ (12, 36, 11), (10, 31, 10), (9, 26, 8), (8, 21, 7),
+ (7, 16, 6), (8, 13, 6), (9, 11, 5), (10, 10, 5),
+ (11, 11, 5), (12, 11, 6), (15, 14, 8), (21, 18, 10),
+ (30, 20, 15), (36, 21, 18), (35, 22, 23), (34, 24, 24),
+ (34, 31, 25), (39, 38, 28), (48, 45, 29), (53, 51, 33),
+ (58, 59, 33), (60, 68, 31), (58, 76, 30), (60, 81, 27),
+ (58, 81, 25), (58, 79, 20), (60, 74, 16), (59, 71, 15),
+ (60, 70, 13), (64, 69, 13), (69, 67, 10), (78, 61, 7),
+ (85, 55, 6), (87, 53, 5), (91, 55, 12), (91, 60, 16),
+ (91, 65, 19), (90, 63, 19), (84, 64, 16), (78, 62, 19),
+ (66, 60, 22), (53, 62, 25), (41, 61, 24), (33, 64, 20),
+ (30, 63, 17), (28, 61, 15), (27, 58, 15), (25, 54, 14),
+ (23, 49, 14), (20, 44, 15), (19, 40, 17), (25, 41, 25),
+ (36, 43, 38), (48, 47, 52), (61, 56, 68), (73, 70, 78),
+ (68, 65, 71), (65, 63, 69), (61, 60, 64), (56, 54, 62)
+ ),
+
+// 605 No_Clue
+((115, 83, 92), (119, 81, 103), (122, 82, 107), (125, 83, 112),
+ (125, 83, 111), (125, 83, 110), (127, 84, 108), (129, 86, 107),
+ (148, 97, 87), (158, 103, 77), (168, 110, 67), (173, 116, 62),
+ (179, 123, 57), (181, 132, 51), (183, 141, 45), (183, 144, 42),
+ (184, 148, 39), (179, 166, 30), (178, 168, 29), (177, 171, 28),
+ (173, 164, 35), (169, 157, 42), (166, 151, 46), (164, 146, 51),
+ (152, 122, 73), (144, 113, 81), (137, 105, 89), (132, 97, 97),
+ (127, 90, 105), (125, 85, 108), (123, 81, 112), (122, 72, 121),
+ (124, 60, 123), (124, 35, 130), (122, 32, 133), (120, 29, 136),
+ (117, 34, 134), (115, 40, 132), (115, 44, 130), (116, 49, 129),
+ (131, 66, 108), (140, 71, 95), (149, 77, 83), (153, 87, 76),
+ (158, 97, 70), (157, 102, 69), (157, 108, 68), (155, 120, 67),
+ (154, 131, 66), (156, 142, 66), (163, 141, 63), (170, 141, 61),
+ (176, 142, 57), (182, 143, 53), (183, 145, 52), (184, 147, 51),
+ (182, 153, 48), (179, 151, 50), (176, 150, 52), (173, 148, 53),
+ (170, 147, 54), (169, 146, 54), (169, 145, 54), (169, 144, 55),
+ (168, 143, 55), (167, 140, 57), (162, 131, 65), (157, 123, 73),
+ (153, 118, 77), (149, 114, 82), (142, 101, 91), (134, 91, 103),
+ (118, 77, 127), (110, 69, 136), (102, 61, 145), (96, 50, 155),
+ (90, 39, 166), (88, 34, 170), (86, 29, 175), (84, 19, 182),
+ (82, 14, 187), (82, 8, 190), (84, 9, 188), (86, 11, 187),
+ (87, 11, 187), (88, 11, 187), (91, 9, 188), (92, 8, 189),
+ (95, 5, 193), (97, 4, 192), (99, 4, 192), (101, 4, 190),
+ (103, 5, 189), (103, 5, 188), (103, 8, 185), (100, 10, 180),
+ (95, 13, 172), (83, 16, 156), (78, 21, 149), (74, 27, 142),
+ (75, 30, 139), (76, 33, 137), (80, 41, 132), (87, 48, 127),
+ (102, 53, 113), (109, 50, 95), (117, 48, 77), (118, 47, 72),
+ (120, 47, 68), (126, 45, 63), (131, 43, 63), (135, 44, 67),
+ (142, 45, 75), (151, 41, 97), (153, 37, 98), (156, 34, 99),
+ (157, 26, 105), (156, 19, 109), (154, 17, 111), (151, 21, 109),
+ (148, 40, 106), (147, 52, 103), (147, 64, 100), (148, 70, 97),
+ (150, 76, 95), (153, 85, 89), (153, 93, 86), (153, 102, 83),
+ (152, 111, 82), (154, 123, 72), (154, 125, 70), (155, 127, 69),
+ (158, 130, 68), (160, 126, 68), (161, 119, 70), (162, 111, 72),
+ (165, 88, 69), (163, 79, 67), (161, 70, 65), (157, 66, 65),
+ (154, 62, 65), (145, 57, 66), (133, 51, 67), (122, 46, 71),
+ (114, 41, 69), (106, 28, 68), (105, 28, 68), (105, 29, 69),
+ (103, 30, 70), (100, 35, 72), (93, 37, 80), (80, 42, 91),
+ (63, 50, 101), (63, 50, 103), (63, 50, 105), (68, 53, 112),
+ (75, 58, 115), (85, 62, 119), (92, 67, 124), (99, 76, 128),
+ (103, 83, 129), (123, 98, 116), (127, 102, 109), (131, 106, 102),
+ (139, 116, 94), (147, 125, 85), (154, 130, 78), (160, 135, 74),
+ (164, 140, 70), (165, 140, 68), (166, 141, 67), (167, 141, 65),
+ (167, 142, 64), (164, 141, 66), (158, 139, 68), (149, 136, 75),
+ (142, 128, 82), (136, 119, 90), (131, 108, 97), (126, 96, 111),
+ (119, 87, 123), (113, 79, 131), (106, 72, 137), (93, 64, 146),
+ (71, 47, 165), (67, 44, 168), (64, 42, 172), (60, 32, 178),
+ (55, 24, 178), (55, 19, 175), (56, 14, 169), (53, 14, 161),
+ (49, 13, 153), (47, 14, 144), (45, 18, 136), (45, 19, 131),
+ (45, 21, 123), (42, 21, 116), (45, 22, 114), (44, 26, 112),
+ (40, 31, 108), (39, 35, 104), (39, 45, 99), (40, 54, 99),
+ (41, 68, 97), (39, 79, 92), (42, 84, 95), (47, 86, 101),
+ (52, 86, 106), (58, 83, 110), (65, 81, 112), (69, 79, 112),
+ (72, 84, 108), (71, 89, 99), (71, 94, 83), (68, 91, 71),
+ (74, 86, 63), (75, 81, 62), (84, 64, 69), (88, 53, 80),
+ (93, 41, 89), (95, 34, 97), (92, 31, 103), (84, 31, 108),
+ (78, 32, 109), (68, 36, 111), (66, 36, 116), (64, 35, 118),
+ (64, 33, 119), (65, 32, 121), (65, 35, 124), (69, 36, 129),
+ (76, 36, 131), (78, 35, 130), (80, 37, 132), (85, 38, 130),
+ (90, 41, 125), (97, 44, 116), (106, 51, 104), (115, 59, 90),
+ (128, 62, 73), (137, 65, 62), (142, 69, 57), (145, 68, 59),
+ (146, 68, 62), (146, 68, 64), (144, 71, 64), (146, 86, 61),
+ (147, 94, 56), (146, 102, 55), (143, 108, 56), (137, 110, 60),
+ (131, 106, 65), (125, 98, 70), (114, 87, 79), (114, 85, 88)
+ ),
+
+// 606 Nonsense
+((141, 166, 81), (171, 172, 77), (179, 186, 75), (188, 200, 74),
+ (195, 206, 75), (202, 213, 77), (198, 208, 80), (195, 203, 83),
+ (160, 167, 95), (145, 149, 113), (131, 131, 132), (115, 111, 146),
+ (100, 92, 160), (81, 75, 165), (63, 59, 170), (56, 52, 168),
+ (50, 46, 166), (41, 37, 151), (46, 32, 142), (51, 28, 133),
+ (61, 32, 130), (71, 37, 128), (78, 42, 131), (86, 48, 135),
+ (118, 78, 160), (134, 95, 173), (150, 113, 187), (163, 137, 191),
+ (176, 161, 196), (181, 171, 192), (186, 181, 188), (198, 191, 178),
+ (197, 191, 160), (174, 170, 122), (164, 159, 102), (155, 148, 83),
+ (141, 127, 73), (127, 107, 64), (114, 94, 62), (101, 82, 61),
+ (59, 45, 85), (49, 43, 103), (39, 41, 122), (37, 46, 134),
+ (36, 52, 147), (39, 54, 150), (43, 56, 154), (48, 54, 155),
+ (56, 55, 152), (66, 60, 145), (74, 56, 142), (83, 52, 140),
+ (79, 46, 135), (76, 41, 130), (72, 38, 131), (68, 36, 133),
+ (51, 34, 152), (44, 46, 160), (38, 59, 169), (46, 75, 164),
+ (54, 92, 160), (58, 98, 156), (63, 104, 153), (68, 117, 145),
+ (64, 119, 137), (74, 110, 130), (87, 104, 122), (101, 99, 115),
+ (105, 90, 111), (109, 81, 108), (104, 64, 98), (102, 49, 90),
+ (109, 34, 65), (107, 25, 58), (106, 16, 52), (96, 22, 55),
+ (86, 28, 59), (83, 33, 62), (80, 38, 66), (68, 44, 69),
+ (55, 40, 75), (23, 36, 81), (19, 42, 83), (15, 49, 85),
+ (14, 48, 82), (14, 48, 79), (14, 49, 65), (10, 38, 49),
+ (14, 29, 27), (17, 30, 23), (20, 31, 20), (19, 29, 20),
+ (18, 27, 20), (20, 24, 27), (19, 28, 29), (26, 31, 27),
+ (32, 32, 26), (38, 27, 38), (41, 27, 43), (44, 28, 48),
+ (49, 26, 48), (54, 25, 48), (64, 25, 50), (72, 25, 63),
+ (72, 34, 97), (71, 33, 105), (70, 33, 113), (67, 31, 120),
+ (65, 30, 128), (59, 33, 147), (45, 35, 172), (37, 46, 191),
+ (34, 59, 194), (37, 77, 203), (39, 80, 209), (42, 83, 216),
+ (54, 92, 234), (72, 112, 235), (80, 128, 233), (91, 143, 227),
+ (111, 171, 228), (124, 178, 223), (137, 186, 218), (137, 183, 214),
+ (137, 180, 210), (129, 170, 203), (109, 164, 207), (101, 164, 206),
+ (97, 162, 202), (103, 154, 185), (102, 151, 183), (102, 149, 181),
+ (95, 149, 167), (92, 146, 152), (84, 129, 136), (87, 121, 113),
+ (91, 110, 77), (82, 107, 61), (74, 105, 45), (69, 99, 39),
+ (64, 93, 33), (63, 81, 26), (65, 70, 24), (71, 66, 25),
+ (72, 68, 34), (73, 73, 62), (76, 71, 70), (79, 69, 79),
+ (81, 64, 84), (86, 57, 82), (84, 51, 80), (87, 53, 76),
+ (92, 54, 71), (97, 55, 65), (103, 56, 59), (111, 60, 45),
+ (120, 65, 35), (131, 67, 28), (133, 67, 31), (136, 58, 31),
+ (139, 51, 28), (137, 43, 36), (135, 42, 43), (133, 42, 50),
+ (126, 41, 62), (121, 42, 68), (116, 45, 72), (117, 56, 72),
+ (117, 76, 78), (112, 80, 78), (107, 85, 78), (94, 88, 74),
+ (88, 93, 65), (86, 95, 66), (100, 105, 64), (107, 118, 64),
+ (111, 128, 67), (115, 140, 65), (113, 148, 69), (127, 162, 82),
+ (142, 183, 96), (159, 198, 113), (173, 214, 133), (175, 224, 145),
+ (171, 222, 169), (170, 214, 166), (170, 206, 164), (173, 185, 158),
+ (183, 176, 154), (192, 172, 146), (197, 179, 142), (206, 181, 127),
+ (204, 173, 103), (210, 169, 83), (215, 176, 62), (216, 193, 52),
+ (224, 211, 46), (216, 220, 45), (205, 209, 49), (188, 198, 57),
+ (160, 186, 70), (146, 172, 85), (134, 169, 98), (127, 158, 110),
+ (129, 153, 119), (122, 154, 134), (129, 152, 158), (135, 156, 170),
+ (142, 154, 174), (152, 144, 166), (154, 143, 153), (155, 137, 151),
+ (149, 136, 145), (138, 132, 142), (120, 119, 130), (102, 115, 120),
+ (90, 114, 120), (82, 127, 120), (84, 146, 127), (89, 161, 130),
+ (100, 181, 142), (116, 197, 157), (128, 211, 167), (143, 221, 175),
+ (156, 224, 174), (174, 223, 174), (193, 217, 174), (206, 208, 164),
+ (215, 202, 150), (212, 195, 129), (215, 189, 107), (223, 183, 96),
+ (234, 171, 84), (245, 163, 73), (237, 155, 65), (228, 146, 54),
+ (211, 136, 46), (193, 123, 47), (182, 110, 50), (163, 101, 60),
+ (148, 99, 77), (128, 94, 86), (107, 90, 90), (89, 87, 90),
+ (72, 81, 85), (63, 88, 85), (59, 100, 91), (58, 111, 93),
+ (58, 122, 94), (56, 123, 85), (59, 118, 70), (67, 116, 61),
+ (76, 116, 57), (91, 122, 66), (104, 140, 73), (122, 156, 79)
+ ),
+
+// 607 Oak_Tree
+((90, 69, 31), (105, 83, 43), (108, 86, 46), (112, 90, 50),
+ (111, 94, 55), (110, 98, 61), (109, 100, 62), (109, 102, 63),
+ (120, 108, 62), (126, 113, 64), (132, 118, 67), (141, 125, 77),
+ (151, 132, 87), (150, 133, 95), (150, 134, 103), (149, 134, 103),
+ (149, 134, 104), (133, 114, 104), (129, 115, 96), (126, 117, 88),
+ (126, 115, 82), (126, 114, 76), (127, 116, 70), (129, 119, 64),
+ (143, 100, 34), (143, 100, 22), (143, 101, 11), (141, 94, 13),
+ (139, 88, 16), (133, 88, 16), (127, 89, 16), (110, 83, 21),
+ (95, 66, 24), (60, 39, 19), (57, 33, 13), (54, 28, 8),
+ (67, 32, 5), (80, 36, 3), (87, 42, 9), (95, 49, 15),
+ (120, 70, 40), (116, 77, 56), (113, 84, 72), (116, 95, 79),
+ (119, 106, 86), (124, 111, 90), (129, 116, 95), (150, 135, 103),
+ (163, 151, 118), (202, 185, 153), (209, 194, 150), (216, 204, 147),
+ (222, 199, 129), (228, 194, 112), (224, 193, 102), (220, 192, 93),
+ (212, 178, 109), (207, 181, 118), (202, 185, 128), (195, 180, 127),
+ (188, 175, 126), (178, 165, 120), (168, 155, 114), (143, 131, 95),
+ (120, 110, 77), (81, 73, 59), (65, 60, 47), (50, 47, 36),
+ (45, 42, 32), (40, 38, 29), (32, 29, 22), (32, 28, 14),
+ (49, 41, 14), (60, 47, 15), (71, 53, 16), (84, 62, 23),
+ (97, 72, 30), (100, 73, 33), (104, 74, 36), (90, 67, 36),
+ (86, 71, 32), (83, 59, 31), (84, 57, 29), (86, 56, 27),
+ (90, 55, 29), (95, 55, 31), (104, 55, 31), (111, 61, 24),
+ (105, 65, 34), (99, 69, 34), (93, 73, 35), (89, 73, 39),
+ (85, 73, 43), (84, 73, 52), (87, 76, 58), (87, 76, 59),
+ (88, 73, 60), (88, 68, 59), (77, 59, 52), (66, 51, 46),
+ (60, 46, 41), (55, 42, 36), (42, 32, 30), (34, 25, 25),
+ (42, 28, 24), (54, 36, 27), (66, 44, 31), (72, 47, 31),
+ (78, 51, 31), (88, 59, 31), (89, 66, 33), (89, 71, 31),
+ (90, 73, 30), (79, 70, 35), (77, 69, 36), (75, 69, 38),
+ (69, 63, 39), (67, 58, 42), (67, 59, 43), (67, 60, 41),
+ (88, 66, 36), (102, 80, 39), (117, 94, 42), (128, 100, 41),
+ (140, 107, 41), (153, 118, 42), (157, 115, 46), (157, 120, 46),
+ (151, 118, 48), (116, 94, 66), (112, 95, 72), (109, 97, 78),
+ (108, 103, 96), (116, 117, 119), (132, 133, 134), (146, 139, 137),
+ (169, 159, 137), (172, 154, 121), (176, 149, 106), (175, 147, 102),
+ (174, 146, 98), (175, 142, 99), (181, 154, 99), (179, 156, 99),
+ (176, 151, 98), (160, 141, 75), (151, 131, 67), (142, 121, 59),
+ (128, 101, 39), (104, 79, 29), (85, 63, 26), (74, 55, 24),
+ (67, 49, 29), (70, 52, 33), (74, 55, 37), (88, 61, 46),
+ (106, 67, 50), (124, 78, 53), (136, 83, 57), (145, 89, 56),
+ (148, 98, 54), (139, 86, 56), (136, 83, 55), (134, 80, 54),
+ (128, 73, 55), (120, 62, 52), (112, 55, 50), (101, 53, 51),
+ (81, 60, 53), (76, 60, 53), (71, 61, 54), (67, 62, 54),
+ (66, 63, 55), (63, 63, 49), (60, 58, 41), (59, 52, 36),
+ (52, 46, 32), (47, 39, 26), (51, 38, 21), (56, 41, 27),
+ (61, 45, 34), (73, 57, 43), (96, 73, 57), (120, 92, 71),
+ (143, 120, 91), (148, 123, 91), (153, 127, 92), (149, 132, 90),
+ (141, 124, 89), (129, 115, 82), (117, 102, 73), (105, 88, 65),
+ (95, 79, 58), (91, 70, 51), (87, 62, 45), (91, 59, 38),
+ (105, 61, 27), (113, 65, 23), (118, 72, 25), (124, 75, 20),
+ (119, 77, 23), (107, 78, 31), (96, 75, 37), (91, 73, 48),
+ (91, 71, 56), (95, 74, 56), (103, 86, 57), (110, 91, 60),
+ (114, 91, 56), (114, 97, 54), (111, 99, 55), (106, 92, 53),
+ (101, 85, 53), (96, 84, 57), (90, 81, 58), (88, 76, 58),
+ (85, 77, 59), (83, 78, 59), (87, 80, 62), (94, 85, 66),
+ (96, 88, 69), (95, 92, 74), (95, 95, 75), (88, 91, 71),
+ (83, 86, 64), (80, 81, 56), (74, 71, 45), (74, 61, 36),
+ (79, 54, 35), (81, 51, 36), (85, 53, 36), (96, 57, 37),
+ (106, 66, 39), (115, 80, 44), (128, 93, 48), (145, 104, 54),
+ (154, 117, 65), (156, 124, 72), (157, 123, 76), (155, 122, 81),
+ (147, 118, 77), (134, 106, 72), (119, 95, 67), (104, 81, 56),
+ (87, 66, 46), (74, 57, 36), (66, 50, 26), (62, 48, 21),
+ (62, 47, 18), (66, 44, 13), (73, 48, 16), (77, 45, 22),
+ (77, 44, 20), (81, 49, 19), (83, 52, 26), (84, 58, 31)
+ ),
+
+// 608 Ocean_Mist
+((117, 195, 196), (113, 177, 175), (105, 167, 161), (98, 157, 148),
+ (88, 144, 130), (79, 131, 113), (75, 124, 104), (72, 117, 96),
+ (54, 94, 67), (45, 88, 56), (37, 82, 45), (36, 73, 41),
+ (35, 65, 38), (30, 56, 36), (26, 47, 35), (22, 45, 32),
+ (18, 43, 29), (17, 32, 32), (17, 28, 37), (18, 24, 43),
+ (16, 21, 43), (15, 18, 44), (15, 17, 45), (16, 16, 46),
+ (19, 21, 59), (22, 27, 65), (26, 33, 71), (34, 44, 75),
+ (42, 56, 80), (47, 64, 80), (52, 72, 81), (59, 84, 84),
+ (64, 94, 88), (72, 112, 99), (79, 125, 104), (87, 138, 110),
+ (91, 148, 118), (96, 158, 126), (96, 159, 129), (97, 160, 132),
+ (93, 156, 135), (90, 160, 137), (88, 164, 140), (87, 160, 136),
+ (86, 157, 133), (83, 151, 127), (80, 146, 121), (71, 130, 114),
+ (62, 116, 103), (48, 94, 87), (46, 89, 83), (44, 85, 80),
+ (42, 81, 75), (41, 77, 71), (39, 75, 67), (38, 74, 64),
+ (42, 80, 61), (47, 86, 61), (53, 92, 62), (53, 93, 60),
+ (53, 94, 59), (52, 93, 60), (52, 93, 62), (54, 90, 66),
+ (56, 85, 73), (49, 70, 76), (45, 61, 76), (42, 52, 77),
+ (41, 47, 79), (40, 43, 81), (37, 37, 84), (37, 30, 83),
+ (34, 21, 73), (32, 24, 70), (30, 28, 68), (31, 38, 67),
+ (33, 48, 67), (35, 53, 67), (38, 59, 68), (45, 69, 68),
+ (51, 82, 70), (60, 107, 73), (64, 109, 74), (69, 112, 76),
+ (71, 110, 78), (73, 108, 81), (74, 104, 86), (68, 98, 86),
+ (50, 75, 77), (45, 62, 76), (40, 49, 75), (37, 43, 74),
+ (35, 38, 73), (29, 32, 71), (22, 26, 64), (19, 23, 57),
+ (18, 22, 53), (22, 33, 55), (24, 42, 59), (27, 51, 63),
+ (29, 54, 64), (31, 57, 66), (39, 61, 69), (48, 62, 73),
+ (57, 61, 88), (57, 58, 92), (57, 55, 96), (61, 53, 97),
+ (65, 52, 98), (71, 54, 110), (82, 63, 123), (90, 74, 134),
+ (98, 92, 148), (117, 120, 161), (120, 127, 159), (124, 134, 158),
+ (122, 141, 156), (119, 144, 151), (114, 144, 145), (109, 134, 140),
+ (91, 113, 108), (75, 101, 97), (59, 89, 87), (55, 86, 87),
+ (51, 84, 88), (54, 88, 86), (63, 92, 84), (71, 100, 85),
+ (76, 106, 86), (80, 120, 88), (79, 120, 85), (79, 120, 83),
+ (77, 119, 77), (74, 116, 73), (71, 110, 69), (69, 105, 65),
+ (52, 80, 57), (46, 72, 56), (40, 64, 55), (41, 65, 55),
+ (43, 66, 56), (53, 74, 60), (58, 82, 65), (65, 93, 75),
+ (71, 106, 91), (88, 140, 123), (90, 148, 129), (92, 157, 136),
+ (98, 170, 145), (101, 179, 155), (98, 182, 157), (96, 181, 159),
+ (90, 173, 145), (90, 171, 142), (90, 169, 140), (83, 161, 128),
+ (75, 152, 117), (68, 143, 106), (63, 134, 96), (63, 127, 90),
+ (62, 124, 86), (62, 116, 83), (62, 115, 84), (63, 115, 86),
+ (65, 113, 92), (71, 119, 99), (78, 128, 106), (91, 137, 116),
+ (115, 156, 146), (119, 160, 154), (123, 165, 162), (127, 172, 170),
+ (130, 177, 175), (126, 177, 175), (123, 169, 174), (118, 163, 171),
+ (112, 149, 162), (107, 140, 150), (93, 130, 135), (81, 119, 119),
+ (69, 115, 103), (62, 106, 90), (64, 104, 80), (64, 103, 75),
+ (59, 112, 73), (58, 113, 72), (57, 115, 71), (61, 120, 71),
+ (66, 122, 73), (73, 123, 76), (75, 126, 82), (75, 125, 89),
+ (77, 127, 95), (81, 127, 102), (88, 132, 112), (99, 137, 121),
+ (109, 141, 133), (121, 145, 145), (127, 144, 152), (127, 149, 156),
+ (125, 154, 153), (127, 158, 149), (137, 164, 146), (142, 163, 148),
+ (145, 163, 151), (138, 162, 150), (134, 164, 150), (138, 169, 149),
+ (144, 174, 156), (153, 186, 175), (161, 191, 189), (170, 198, 207),
+ (177, 203, 218), (181, 204, 219), (175, 210, 217), (166, 207, 203),
+ (155, 199, 187), (142, 188, 172), (130, 172, 159), (114, 160, 147),
+ (97, 148, 134), (82, 132, 122), (68, 116, 110), (56, 98, 104),
+ (49, 82, 99), (45, 71, 96), (44, 63, 98), (46, 58, 103),
+ (47, 53, 109), (49, 53, 112), (52, 52, 110), (56, 53, 105),
+ (61, 58, 104), (58, 58, 103), (56, 60, 104), (53, 59, 106),
+ (52, 55, 102), (55, 55, 100), (52, 52, 97), (48, 51, 97),
+ (45, 54, 101), (49, 61, 110), (63, 73, 122), (81, 92, 135),
+ (98, 110, 152), (112, 128, 165), (120, 149, 179), (126, 170, 191),
+ (132, 189, 200), (136, 202, 209), (142, 208, 213), (142, 212, 213),
+ (138, 214, 213), (133, 216, 213), (123, 214, 209), (120, 205, 206)
+ ),
+
+// 609 Paige
+((91, 86, 67), (89, 83, 64), (92, 86, 64), (95, 90, 65),
+ (103, 95, 64), (111, 100, 64), (116, 102, 63), (121, 105, 63),
+ (133, 110, 61), (133, 111, 62), (133, 113, 63), (133, 118, 69),
+ (134, 123, 76), (141, 132, 83), (148, 141, 90), (154, 146, 94),
+ (160, 152, 99), (186, 178, 115), (196, 189, 121), (206, 201, 127),
+ (209, 207, 131), (213, 213, 136), (211, 213, 136), (210, 213, 137),
+ (196, 198, 133), (185, 187, 128), (174, 176, 123), (162, 165, 117),
+ (150, 155, 111), (145, 150, 108), (140, 146, 105), (132, 140, 102),
+ (128, 135, 100), (123, 129, 99), (120, 128, 100), (118, 127, 101),
+ (116, 128, 103), (115, 129, 105), (115, 130, 105), (115, 131, 106),
+ (116, 131, 105), (116, 128, 104), (116, 126, 103), (112, 122, 100),
+ (109, 118, 98), (107, 116, 96), (105, 114, 95), (101, 108, 90),
+ (96, 101, 83), (86, 85, 67), (80, 76, 62), (75, 68, 58),
+ (69, 62, 55), (63, 57, 53), (62, 55, 52), (61, 53, 52),
+ (62, 55, 53), (66, 56, 51), (70, 57, 49), (72, 60, 50),
+ (75, 63, 51), (75, 63, 51), (75, 64, 52), (73, 63, 50),
+ (70, 59, 49), (61, 52, 46), (54, 45, 41), (48, 39, 36),
+ (45, 36, 35), (43, 34, 34), (37, 30, 33), (31, 27, 32),
+ (21, 21, 31), (18, 18, 31), (16, 16, 32), (13, 14, 31),
+ (11, 12, 31), (10, 11, 32), (10, 11, 33), (10, 10, 33),
+ (10, 9, 32), (13, 12, 32), (16, 13, 32), (20, 15, 32),
+ (22, 17, 32), (24, 19, 32), (28, 24, 33), (35, 30, 34),
+ (51, 43, 36), (61, 51, 39), (72, 60, 43), (75, 61, 42),
+ (79, 63, 42), (84, 66, 41), (85, 69, 41), (86, 70, 42),
+ (85, 71, 43), (82, 72, 46), (83, 75, 50), (85, 78, 55),
+ (85, 78, 56), (86, 79, 57), (84, 79, 59), (81, 78, 59),
+ (71, 71, 56), (66, 67, 55), (61, 64, 54), (59, 63, 54),
+ (58, 62, 55), (56, 62, 57), (56, 62, 61), (56, 62, 63),
+ (58, 65, 66), (59, 69, 71), (60, 69, 72), (61, 70, 73),
+ (63, 72, 73), (63, 74, 73), (64, 74, 74), (66, 73, 75),
+ (68, 73, 73), (71, 76, 73), (75, 80, 73), (79, 83, 74),
+ (84, 86, 75), (93, 96, 76), (102, 105, 76), (111, 114, 75),
+ (119, 121, 76), (134, 130, 72), (137, 132, 71), (140, 135, 70),
+ (147, 139, 69), (155, 145, 72), (164, 153, 78), (172, 162, 84),
+ (186, 182, 105), (191, 189, 111), (196, 196, 118), (198, 198, 120),
+ (201, 201, 122), (204, 203, 124), (205, 205, 127), (206, 205, 128),
+ (206, 203, 128), (204, 201, 132), (203, 201, 132), (202, 201, 133),
+ (203, 202, 133), (204, 202, 130), (206, 202, 126), (206, 201, 121),
+ (208, 200, 115), (207, 199, 115), (207, 199, 115), (203, 196, 115),
+ (200, 196, 117), (199, 195, 118), (199, 195, 118), (198, 194, 115),
+ (198, 194, 112), (201, 194, 109), (200, 192, 108), (199, 191, 107),
+ (193, 183, 106), (183, 176, 105), (171, 165, 104), (157, 151, 98),
+ (128, 121, 85), (121, 115, 81), (115, 110, 78), (106, 100, 71),
+ (94, 86, 64), (82, 75, 60), (70, 64, 57), (57, 53, 53),
+ (45, 42, 53), (34, 33, 51), (25, 28, 51), (20, 27, 53),
+ (19, 28, 56), (22, 32, 58), (26, 37, 60), (31, 44, 62),
+ (48, 60, 70), (53, 65, 72), (58, 70, 74), (68, 81, 79),
+ (80, 91, 83), (91, 102, 87), (103, 111, 90), (110, 118, 91),
+ (115, 122, 93), (118, 123, 92), (120, 122, 91), (119, 120, 90),
+ (117, 115, 86), (112, 111, 83), (108, 105, 79), (104, 98, 76),
+ (97, 92, 73), (90, 85, 69), (86, 80, 67), (82, 77, 67),
+ (81, 75, 65), (81, 75, 65), (81, 77, 63), (85, 76, 60),
+ (85, 75, 57), (84, 73, 54), (85, 73, 51), (86, 73, 51),
+ (89, 73, 50), (93, 75, 50), (95, 80, 51), (98, 84, 53),
+ (97, 84, 53), (95, 81, 52), (90, 77, 49), (81, 71, 48),
+ (72, 62, 44), (64, 52, 41), (57, 47, 40), (52, 44, 40),
+ (48, 42, 41), (47, 40, 40), (46, 39, 39), (44, 40, 38),
+ (42, 40, 37), (41, 38, 34), (42, 37, 32), (43, 36, 32),
+ (43, 37, 34), (47, 41, 36), (53, 45, 40), (62, 52, 43),
+ (72, 62, 47), (81, 71, 49), (89, 79, 50), (96, 85, 54),
+ (95, 87, 59), (93, 89, 63), (90, 88, 69), (85, 86, 72),
+ (83, 85, 76), (81, 84, 77), (78, 84, 75), (80, 85, 74),
+ (80, 85, 74), (79, 84, 72), (84, 90, 75), (86, 92, 75),
+ (87, 92, 75), (89, 92, 73), (90, 90, 73), (91, 88, 68)
+ ),
+
+// 610 Paris
+((176, 76, 65), (183, 75, 67), (187, 73, 69), (191, 72, 71),
+ (194, 71, 70), (198, 71, 69), (198, 71, 70), (199, 72, 72),
+ (196, 82, 72), (197, 94, 76), (199, 107, 81), (206, 118, 87),
+ (214, 129, 93), (219, 140, 96), (224, 151, 100), (224, 157, 102),
+ (225, 164, 105), (227, 181, 125), (223, 176, 131), (219, 171, 137),
+ (206, 169, 140), (194, 168, 144), (187, 170, 145), (181, 172, 147),
+ (158, 165, 152), (146, 155, 148), (134, 146, 144), (129, 139, 138),
+ (124, 133, 132), (124, 129, 130), (124, 126, 128), (126, 123, 123),
+ (131, 114, 118), (136, 100, 106), (125, 95, 100), (114, 90, 95),
+ (100, 88, 93), (87, 87, 92), (82, 88, 93), (77, 90, 95),
+ (57, 97, 99), (54, 91, 95), (52, 86, 91), (64, 81, 91),
+ (76, 77, 91), (80, 77, 91), (84, 77, 92), (93, 70, 84),
+ (103, 59, 72), (119, 26, 56), (114, 27, 53), (109, 28, 51),
+ (108, 31, 49), (108, 35, 47), (113, 33, 49), (119, 31, 52),
+ (127, 50, 68), (137, 62, 72), (147, 75, 76), (163, 78, 81),
+ (179, 82, 87), (180, 84, 90), (182, 86, 94), (179, 96, 102),
+ (175, 104, 104), (163, 121, 108), (159, 128, 118), (156, 136, 128),
+ (158, 143, 133), (161, 150, 138), (165, 167, 142), (167, 184, 147),
+ (177, 204, 162), (186, 212, 167), (196, 220, 173), (196, 220, 172),
+ (196, 221, 171), (194, 217, 170), (192, 213, 170), (191, 203, 165),
+ (195, 198, 161), (200, 189, 156), (199, 183, 153), (199, 178, 150),
+ (200, 178, 147), (201, 178, 145), (205, 179, 139), (209, 176, 134),
+ (206, 162, 130), (201, 156, 124), (196, 150, 119), (192, 146, 115),
+ (188, 143, 112), (182, 133, 105), (176, 123, 97), (173, 115, 95),
+ (166, 115, 90), (142, 115, 89), (131, 110, 86), (120, 105, 83),
+ (116, 103, 82), (113, 102, 81), (110, 99, 79), (105, 92, 79),
+ (103, 87, 72), (111, 87, 70), (120, 88, 68), (125, 86, 69),
+ (131, 84, 70), (142, 87, 71), (153, 91, 71), (165, 96, 71),
+ (176, 103, 73), (196, 113, 91), (199, 114, 93), (203, 116, 96),
+ (210, 116, 96), (214, 112, 95), (216, 107, 93), (218, 107, 97),
+ (224, 108, 99), (224, 106, 95), (224, 104, 92), (224, 103, 89),
+ (224, 102, 87), (222, 102, 84), (224, 104, 83), (226, 108, 85),
+ (227, 113, 86), (231, 120, 81), (231, 120, 80), (232, 121, 79),
+ (233, 126, 80), (233, 131, 84), (235, 134, 85), (238, 136, 86),
+ (238, 134, 87), (234, 136, 86), (230, 138, 86), (229, 137, 86),
+ (228, 137, 87), (225, 134, 90), (222, 131, 96), (220, 129, 98),
+ (214, 128, 98), (203, 125, 97), (199, 124, 99), (195, 123, 102),
+ (189, 120, 105), (183, 115, 104), (177, 106, 100), (175, 101, 93),
+ (174, 98, 88), (174, 98, 86), (174, 98, 85), (176, 95, 84),
+ (180, 95, 83), (185, 101, 85), (195, 111, 90), (206, 124, 93),
+ (214, 135, 99), (222, 159, 112), (222, 166, 116), (222, 173, 120),
+ (226, 184, 127), (230, 189, 132), (230, 192, 139), (228, 192, 142),
+ (206, 186, 144), (202, 183, 143), (199, 181, 142), (197, 173, 138),
+ (198, 163, 133), (194, 153, 125), (188, 142, 118), (177, 134, 113),
+ (171, 125, 106), (166, 119, 99), (159, 114, 95), (152, 109, 93),
+ (142, 106, 90), (136, 99, 89), (133, 93, 88), (132, 86, 90),
+ (128, 76, 91), (131, 71, 88), (134, 67, 86), (139, 64, 79),
+ (146, 57, 73), (149, 54, 69), (146, 52, 67), (145, 47, 60),
+ (142, 52, 54), (141, 60, 47), (139, 70, 45), (140, 79, 48),
+ (140, 87, 50), (139, 94, 55), (143, 102, 56), (147, 111, 62),
+ (156, 120, 71), (165, 133, 84), (170, 149, 97), (178, 159, 110),
+ (186, 164, 115), (194, 164, 115), (204, 164, 119), (210, 168, 118),
+ (212, 172, 121), (213, 170, 120), (211, 162, 114), (207, 147, 107),
+ (202, 134, 100), (193, 123, 97), (185, 114, 95), (175, 115, 98),
+ (170, 116, 103), (172, 118, 109), (175, 120, 112), (182, 120, 113),
+ (186, 126, 109), (191, 134, 108), (201, 141, 109), (210, 146, 108),
+ (219, 143, 105), (223, 141, 99), (223, 141, 97), (223, 141, 101),
+ (225, 146, 105), (228, 150, 110), (231, 157, 113), (232, 167, 122),
+ (231, 175, 133), (232, 185, 140), (232, 195, 144), (230, 204, 143),
+ (229, 210, 139), (219, 211, 136), (212, 205, 130), (208, 196, 123),
+ (200, 187, 116), (196, 182, 107), (189, 179, 106), (182, 176, 103),
+ (177, 167, 106), (173, 158, 111), (165, 149, 111), (158, 140, 111),
+ (153, 139, 108), (147, 129, 104), (146, 119, 103), (143, 106, 99),
+ (137, 91, 95), (143, 85, 88), (152, 78, 77), (163, 76, 72)
+ ),
+
+// 611 Parrot
+((156, 101, 8), (97, 91, 9), (73, 88, 14), (50, 85, 20),
+ (40, 82, 23), (31, 79, 26), (27, 77, 24), (24, 76, 22),
+ (35, 58, 23), (44, 57, 16), (54, 56, 10), (53, 66, 11),
+ (52, 76, 12), (44, 89, 16), (36, 103, 20), (33, 109, 21),
+ (31, 115, 23), (43, 131, 28), (67, 137, 31), (92, 144, 35),
+ (106, 142, 52), (120, 141, 70), (112, 133, 75), (104, 125, 81),
+ (64, 111, 102), (48, 98, 92), (32, 86, 82), (53, 95, 66),
+ (75, 104, 50), (86, 106, 45), (97, 108, 41), (126, 122, 52),
+ (158, 129, 57), (176, 125, 78), (174, 103, 78), (172, 82, 79),
+ (154, 69, 70), (136, 56, 62), (135, 42, 60), (134, 29, 58),
+ (98, 14, 39), (81, 9, 36), (65, 5, 34), (59, 5, 26),
+ (54, 5, 18), (62, 7, 22), (70, 9, 27), (88, 18, 26),
+ (107, 34, 24), (146, 63, 18), (155, 87, 21), (165, 112, 25),
+ (179, 120, 29), (193, 129, 34), (198, 132, 39), (203, 136, 44),
+ (219, 104, 40), (226, 85, 33), (234, 66, 27), (233, 56, 22),
+ (232, 47, 18), (236, 52, 23), (240, 57, 29), (234, 74, 30),
+ (239, 98, 34), (242, 123, 33), (225, 127, 22), (209, 132, 12),
+ (192, 131, 11), (175, 131, 10), (140, 131, 16), (117, 122, 25),
+ (51, 130, 49), (51, 113, 60), (51, 96, 71), (52, 92, 67),
+ (54, 89, 64), (67, 88, 59), (81, 87, 54), (95, 86, 42),
+ (101, 94, 26), (108, 91, 10), (85, 79, 23), (63, 67, 36),
+ (56, 55, 38), (49, 43, 40), (39, 28, 57), (34, 22, 73),
+ (55, 5, 68), (81, 10, 62), (107, 16, 57), (115, 16, 55),
+ (123, 17, 53), (136, 16, 54), (157, 17, 59), (176, 18, 63),
+ (191, 13, 55), (206, 20, 55), (204, 21, 50), (202, 23, 45),
+ (189, 23, 49), (177, 23, 54), (152, 19, 67), (121, 15, 80),
+ (81, 12, 91), (66, 19, 78), (52, 26, 65), (54, 25, 58),
+ (57, 25, 52), (58, 29, 32), (48, 30, 13), (42, 22, 6),
+ (47, 19, 6), (60, 9, 11), (69, 9, 10), (78, 9, 9),
+ (103, 8, 6), (124, 4, 14), (145, 7, 20), (162, 11, 17),
+ (165, 18, 59), (160, 19, 69), (156, 20, 79), (145, 24, 79),
+ (134, 29, 79), (118, 34, 71), (103, 32, 64), (87, 35, 57),
+ (70, 34, 61), (68, 36, 81), (72, 34, 92), (76, 33, 103),
+ (81, 37, 123), (81, 62, 141), (84, 88, 149), (93, 108, 143),
+ (75, 142, 149), (76, 132, 131), (77, 123, 114), (77, 116, 106),
+ (78, 109, 98), (82, 96, 83), (103, 62, 71), (136, 47, 51),
+ (157, 48, 32), (177, 52, 22), (180, 60, 15), (184, 69, 9),
+ (178, 83, 15), (184, 99, 18), (193, 105, 12), (203, 95, 16),
+ (227, 69, 45), (224, 57, 50), (222, 45, 55), (216, 27, 73),
+ (204, 37, 91), (180, 30, 102), (146, 19, 105), (119, 39, 106),
+ (91, 44, 112), (63, 39, 110), (64, 38, 108), (66, 38, 106),
+ (64, 34, 98), (72, 44, 87), (88, 50, 79), (89, 47, 75),
+ (101, 62, 73), (100, 57, 74), (99, 53, 76), (94, 43, 79),
+ (98, 33, 74), (102, 24, 59), (102, 21, 51), (102, 20, 46),
+ (105, 19, 35), (111, 23, 23), (121, 37, 20), (124, 54, 20),
+ (125, 70, 15), (143, 82, 12), (164, 103, 12), (176, 119, 22),
+ (217, 120, 27), (224, 119, 34), (231, 118, 42), (229, 100, 52),
+ (229, 86, 51), (237, 75, 54), (227, 52, 66), (209, 38, 72),
+ (202, 39, 65), (194, 43, 64), (177, 52, 66), (161, 73, 72),
+ (148, 82, 78), (136, 77, 69), (134, 74, 71), (124, 71, 85),
+ (119, 57, 74), (117, 51, 58), (111, 57, 47), (111, 58, 29),
+ (103, 58, 24), (106, 56, 22), (114, 53, 23), (112, 62, 38),
+ (127, 70, 49), (150, 80, 51), (146, 98, 53), (143, 106, 56),
+ (146, 98, 42), (126, 84, 27), (103, 69, 25), (79, 46, 23),
+ (50, 27, 20), (38, 18, 24), (35, 13, 37), (33, 12, 50),
+ (41, 11, 52), (57, 17, 55), (82, 24, 60), (106, 31, 59),
+ (130, 43, 54), (153, 55, 53), (170, 62, 61), (192, 60, 70),
+ (197, 61, 81), (190, 69, 92), (192, 75, 92), (187, 75, 110),
+ (186, 75, 140), (177, 95, 141), (159, 100, 142), (154, 99, 165),
+ (138, 104, 164), (105, 85, 146), (79, 77, 134), (73, 82, 112),
+ (69, 69, 86), (57, 50, 63), (57, 52, 50), (59, 55, 52),
+ (52, 42, 54), (39, 32, 62), (30, 28, 79), (31, 23, 86),
+ (35, 16, 86), (44, 13, 79), (66, 23, 65), (87, 31, 57),
+ (117, 43, 42), (155, 65, 28), (151, 77, 26), (142, 89, 19)
+ ),
+
+// 612 Pastel_Lime
+((29, 138, 35), (49, 165, 65), (56, 176, 79), (64, 188, 94),
+ (71, 197, 110), (78, 206, 126), (83, 210, 134), (88, 214, 143),
+ (113, 230, 174), (116, 228, 178), (120, 226, 182), (122, 218, 188),
+ (125, 210, 195), (131, 208, 197), (138, 206, 199), (141, 206, 197),
+ (144, 207, 196), (143, 203, 180), (141, 200, 180), (139, 197, 181),
+ (142, 202, 182), (145, 208, 183), (146, 211, 183), (148, 215, 184),
+ (136, 234, 181), (122, 236, 183), (109, 238, 185), (101, 234, 182),
+ (93, 231, 180), (89, 228, 177), (86, 225, 175), (82, 221, 173),
+ (77, 216, 175), (74, 216, 180), (86, 212, 179), (98, 209, 179),
+ (115, 204, 178), (133, 200, 178), (140, 196, 177), (148, 193, 177),
+ (181, 194, 176), (191, 195, 177), (202, 197, 178), (202, 199, 177),
+ (203, 202, 176), (202, 202, 175), (201, 203, 174), (202, 206, 169),
+ (201, 209, 162), (196, 207, 168), (188, 209, 177), (181, 212, 186),
+ (180, 217, 187), (180, 223, 189), (180, 225, 190), (181, 228, 191),
+ (190, 216, 199), (186, 205, 210), (182, 195, 221), (174, 191, 221),
+ (166, 188, 222), (160, 189, 219), (154, 190, 217), (154, 193, 214),
+ (149, 192, 218), (138, 191, 234), (129, 191, 234), (121, 192, 235),
+ (119, 195, 231), (117, 199, 228), (115, 204, 220), (110, 205, 211),
+ (99, 206, 203), (96, 200, 202), (93, 195, 202), (105, 187, 198),
+ (118, 180, 195), (124, 171, 192), (131, 162, 189), (141, 148, 183),
+ (152, 138, 178), (167, 109, 157), (182, 101, 146), (197, 94, 136),
+ (204, 92, 130), (211, 91, 125), (217, 94, 114), (216, 96, 105),
+ (195, 91, 89), (181, 90, 88), (168, 90, 88), (169, 97, 90),
+ (170, 105, 93), (164, 116, 94), (159, 133, 100), (161, 149, 110),
+ (161, 157, 119), (167, 173, 140), (174, 179, 141), (181, 186, 143),
+ (188, 193, 144), (195, 201, 145), (208, 213, 147), (205, 209, 146),
+ (209, 201, 140), (202, 192, 129), (196, 183, 118), (193, 181, 112),
+ (190, 180, 107), (180, 176, 97), (172, 166, 89), (161, 158, 79),
+ (144, 146, 67), (119, 131, 42), (114, 128, 37), (109, 126, 32),
+ (98, 124, 26), (93, 122, 24), (93, 114, 23), (97, 112, 25),
+ (120, 81, 23), (129, 77, 23), (139, 73, 23), (141, 72, 22),
+ (144, 71, 22), (148, 80, 27), (153, 83, 36), (158, 75, 42),
+ (161, 73, 55), (154, 76, 74), (146, 79, 77), (138, 82, 81),
+ (119, 94, 90), (104, 88, 92), (82, 86, 96), (72, 87, 95),
+ (62, 101, 91), (64, 110, 89), (66, 120, 88), (68, 124, 88),
+ (70, 128, 88), (70, 136, 86), (71, 150, 81), (73, 164, 77),
+ (76, 175, 72), (91, 186, 77), (94, 187, 80), (98, 189, 83),
+ (103, 194, 90), (107, 201, 98), (107, 204, 105), (102, 206, 114),
+ (97, 207, 125), (99, 206, 126), (101, 205, 128), (103, 202, 132),
+ (103, 199, 133), (102, 195, 140), (95, 192, 151), (79, 186, 161),
+ (69, 177, 157), (53, 156, 144), (52, 151, 140), (51, 146, 136),
+ (50, 144, 129), (43, 144, 142), (37, 150, 149), (35, 160, 159),
+ (42, 174, 170), (47, 179, 169), (53, 184, 168), (64, 194, 175),
+ (72, 202, 183), (75, 209, 194), (79, 215, 203), (81, 220, 216),
+ (87, 219, 225), (98, 216, 230), (112, 213, 230), (121, 206, 229),
+ (125, 203, 224), (128, 202, 220), (128, 200, 216), (132, 197, 213),
+ (156, 192, 202), (161, 189, 199), (166, 186, 197), (172, 185, 189),
+ (172, 186, 178), (168, 185, 162), (166, 188, 152), (164, 188, 144),
+ (159, 188, 146), (149, 193, 152), (138, 196, 162), (119, 194, 158),
+ (101, 196, 156), (87, 195, 142), (78, 194, 133), (73, 200, 125),
+ (73, 206, 126), (72, 202, 119), (75, 198, 115), (82, 195, 99),
+ (91, 184, 91), (106, 176, 86), (126, 175, 87), (144, 167, 92),
+ (158, 158, 103), (170, 157, 105), (174, 156, 111), (172, 158, 122),
+ (165, 168, 135), (164, 174, 153), (155, 178, 175), (144, 184, 193),
+ (132, 189, 201), (116, 199, 205), (94, 211, 204), (83, 221, 204),
+ (76, 229, 206), (72, 236, 208), (71, 238, 212), (72, 238, 213),
+ (71, 237, 211), (76, 234, 209), (88, 228, 208), (106, 221, 210),
+ (127, 208, 206), (143, 188, 196), (151, 175, 183), (153, 162, 172),
+ (154, 147, 161), (148, 142, 155), (149, 139, 148), (149, 127, 132),
+ (140, 126, 114), (123, 126, 96), (108, 122, 82), (85, 125, 73),
+ (71, 135, 75), (63, 136, 76), (56, 136, 69), (52, 139, 62),
+ (50, 135, 58), (43, 128, 54), (39, 124, 56), (40, 121, 58),
+ (35, 114, 56), (37, 112, 52), (39, 108, 45), (40, 104, 36),
+ (38, 104, 30), (38, 108, 24), (32, 114, 22), (27, 124, 26)
+ ),
+
+// 613 Peace
+((59, 68, 101), (52, 53, 77), (38, 44, 65), (25, 35, 53),
+ (24, 35, 53), (24, 36, 54), (24, 36, 54), (24, 36, 55),
+ (26, 38, 58), (26, 39, 61), (26, 41, 65), (26, 42, 68),
+ (26, 43, 71), (27, 44, 73), (28, 46, 75), (28, 47, 76),
+ (29, 48, 78), (36, 54, 87), (45, 59, 92), (54, 64, 98),
+ (72, 71, 105), (91, 78, 113), (103, 84, 118), (116, 91, 124),
+ (143, 110, 147), (143, 112, 152), (144, 114, 158), (150, 118, 160),
+ (156, 123, 163), (160, 125, 164), (164, 127, 165), (171, 129, 167),
+ (170, 127, 166), (156, 118, 152), (151, 111, 145), (146, 104, 138),
+ (145, 99, 129), (144, 95, 121), (136, 90, 115), (128, 86, 109),
+ (82, 64, 88), (64, 56, 80), (47, 48, 72), (38, 44, 66),
+ (30, 40, 61), (28, 39, 60), (26, 39, 59), (25, 39, 59),
+ (24, 39, 60), (22, 39, 63), (22, 39, 63), (22, 40, 64),
+ (23, 39, 63), (24, 39, 62), (24, 39, 61), (24, 39, 61),
+ (24, 39, 61), (25, 39, 62), (26, 40, 63), (27, 42, 64),
+ (29, 44, 66), (30, 45, 68), (31, 46, 70), (33, 49, 75),
+ (37, 51, 81), (47, 58, 90), (54, 61, 95), (61, 65, 101),
+ (66, 67, 104), (72, 70, 107), (80, 74, 112), (86, 76, 116),
+ (85, 78, 120), (86, 80, 121), (87, 83, 123), (83, 84, 125),
+ (80, 86, 127), (76, 84, 127), (72, 82, 127), (65, 81, 123),
+ (61, 78, 120), (57, 78, 120), (61, 79, 121), (65, 80, 122),
+ (69, 80, 122), (74, 80, 122), (81, 80, 121), (87, 80, 121),
+ (94, 83, 123), (106, 85, 124), (119, 88, 125), (128, 90, 128),
+ (138, 93, 131), (156, 107, 141), (168, 117, 152), (180, 128, 160),
+ (190, 137, 167), (223, 155, 181), (234, 163, 190), (245, 172, 199),
+ (244, 173, 202), (244, 174, 205), (234, 176, 210), (219, 170, 207),
+ (186, 147, 190), (169, 137, 183), (153, 128, 176), (142, 124, 173),
+ (132, 121, 171), (111, 112, 163), (88, 101, 152), (75, 88, 137),
+ (63, 79, 125), (48, 69, 108), (44, 66, 105), (41, 64, 102),
+ (36, 60, 96), (33, 56, 91), (32, 53, 85), (31, 51, 80),
+ (29, 47, 74), (28, 46, 72), (28, 45, 71), (29, 45, 70),
+ (30, 45, 70), (31, 46, 70), (31, 46, 69), (30, 45, 68),
+ (29, 44, 68), (30, 46, 70), (30, 46, 71), (31, 47, 73),
+ (31, 48, 74), (32, 49, 77), (32, 50, 79), (32, 52, 82),
+ (35, 54, 86), (36, 56, 89), (38, 58, 92), (39, 59, 94),
+ (40, 61, 96), (43, 65, 103), (46, 69, 109), (48, 74, 116),
+ (50, 79, 122), (57, 92, 138), (59, 96, 144), (62, 101, 150),
+ (72, 115, 163), (88, 123, 174), (111, 131, 179), (130, 134, 180),
+ (138, 130, 172), (136, 127, 169), (134, 124, 166), (134, 119, 158),
+ (137, 112, 147), (129, 96, 128), (115, 83, 109), (91, 69, 92),
+ (69, 57, 77), (38, 41, 55), (34, 38, 50), (31, 35, 46),
+ (25, 30, 39), (22, 27, 36), (23, 27, 35), (22, 27, 35),
+ (22, 28, 37), (21, 28, 39), (21, 29, 41), (22, 31, 46),
+ (23, 34, 50), (25, 38, 56), (29, 42, 62), (33, 47, 69),
+ (41, 54, 81), (54, 62, 91), (76, 73, 105), (103, 92, 122),
+ (128, 116, 140), (151, 141, 163), (155, 155, 178), (157, 158, 186),
+ (153, 155, 184), (154, 156, 182), (155, 157, 181), (136, 151, 175),
+ (111, 137, 163), (84, 114, 146), (56, 90, 126), (44, 73, 109),
+ (37, 61, 95), (34, 54, 86), (32, 51, 80), (31, 49, 77),
+ (33, 50, 77), (37, 52, 77), (40, 53, 76), (42, 54, 76),
+ (42, 54, 76), (41, 53, 77), (42, 54, 78), (40, 54, 79),
+ (40, 54, 79), (39, 54, 80), (36, 53, 82), (35, 54, 85),
+ (35, 55, 88), (34, 55, 89), (34, 55, 90), (34, 55, 89),
+ (36, 55, 87), (37, 55, 84), (36, 53, 80), (35, 50, 75),
+ (34, 47, 70), (34, 46, 68), (34, 45, 66), (34, 45, 67),
+ (35, 47, 71), (35, 51, 76), (37, 56, 85), (40, 62, 94),
+ (43, 67, 103), (44, 71, 109), (46, 74, 113), (47, 75, 116),
+ (49, 76, 116), (50, 75, 114), (49, 72, 108), (46, 67, 98),
+ (42, 59, 89), (39, 54, 81), (37, 49, 74), (34, 45, 68),
+ (32, 42, 62), (29, 39, 57), (27, 37, 55), (25, 37, 56),
+ (24, 37, 57), (24, 38, 59), (25, 39, 61), (26, 41, 63),
+ (27, 43, 67), (28, 46, 72), (30, 50, 78), (33, 55, 86),
+ (36, 61, 96), (40, 67, 104), (57, 75, 114), (67, 80, 121),
+ (65, 77, 115), (63, 74, 112), (47, 69, 105), (52, 65, 99)
+ ),
+
+// 614 Persia
+((236, 146, 111), (235, 132, 107), (225, 129, 101), (215, 127, 95),
+ (200, 122, 89), (185, 117, 84), (179, 113, 84), (174, 109, 84),
+ (157, 108, 88), (146, 110, 89), (135, 113, 91), (123, 109, 91),
+ (112, 105, 91), (107, 101, 87), (102, 97, 84), (102, 95, 81),
+ (103, 94, 78), (100, 82, 59), (104, 71, 49), (109, 60, 39),
+ (116, 51, 30), (124, 43, 22), (124, 41, 20), (125, 39, 19),
+ (140, 40, 29), (157, 42, 36), (174, 45, 44), (172, 46, 48),
+ (170, 48, 53), (162, 49, 55), (155, 51, 57), (146, 59, 63),
+ (141, 67, 70), (130, 66, 65), (111, 65, 57), (93, 65, 49),
+ (74, 65, 44), (56, 66, 39), (48, 62, 36), (41, 58, 33),
+ (34, 50, 22), (40, 46, 19), (47, 43, 17), (56, 35, 15),
+ (66, 28, 13), (71, 25, 13), (77, 23, 13), (85, 22, 18),
+ (95, 20, 21), (106, 19, 24), (102, 20, 24), (98, 21, 25),
+ (87, 25, 27), (76, 29, 29), (73, 34, 32), (70, 39, 35),
+ (79, 80, 63), (91, 96, 78), (103, 112, 93), (122, 126, 101),
+ (141, 140, 110), (151, 149, 115), (161, 159, 121), (180, 171, 134),
+ (197, 179, 143), (210, 173, 140), (203, 165, 134), (196, 157, 129),
+ (189, 148, 124), (183, 140, 120), (173, 117, 108), (159, 103, 96),
+ (131, 84, 72), (116, 72, 62), (102, 60, 53), (96, 55, 51),
+ (90, 50, 49), (91, 54, 51), (93, 58, 53), (96, 69, 58),
+ (96, 79, 64), (99, 96, 90), (107, 102, 99), (115, 109, 109),
+ (118, 111, 110), (122, 114, 112), (130, 121, 112), (139, 126, 113),
+ (159, 137, 116), (165, 142, 119), (171, 148, 122), (172, 150, 123),
+ (173, 153, 124), (172, 153, 122), (169, 150, 121), (163, 145, 119),
+ (152, 138, 118), (127, 123, 111), (117, 112, 103), (107, 101, 96),
+ (104, 97, 93), (101, 93, 91), (101, 91, 92), (103, 95, 97),
+ (116, 112, 114), (129, 120, 117), (143, 128, 120), (151, 131, 122),
+ (160, 135, 124), (175, 144, 126), (188, 149, 130), (193, 156, 128),
+ (192, 158, 123), (167, 143, 105), (158, 136, 100), (150, 130, 96),
+ (134, 117, 85), (122, 106, 78), (105, 96, 68), (85, 84, 64),
+ (53, 58, 52), (54, 50, 47), (55, 43, 43), (58, 42, 43),
+ (61, 42, 43), (67, 46, 48), (77, 54, 54), (89, 67, 61),
+ (107, 78, 66), (136, 85, 71), (141, 84, 69), (146, 84, 67),
+ (151, 86, 65), (158, 90, 59), (161, 80, 54), (154, 75, 51),
+ (118, 52, 37), (98, 46, 33), (79, 40, 29), (70, 39, 30),
+ (62, 38, 32), (49, 36, 37), (32, 37, 42), (21, 41, 45),
+ (14, 41, 48), (13, 44, 47), (15, 43, 46), (18, 42, 45),
+ (27, 45, 41), (37, 46, 38), (46, 48, 39), (52, 51, 40),
+ (62, 55, 46), (63, 55, 45), (65, 56, 44), (67, 54, 43),
+ (65, 53, 44), (56, 50, 46), (47, 48, 51), (38, 45, 50),
+ (28, 37, 42), (20, 20, 25), (22, 19, 24), (24, 19, 23),
+ (35, 23, 29), (47, 31, 37), (61, 42, 46), (74, 54, 53),
+ (103, 95, 80), (110, 105, 89), (118, 115, 98), (134, 135, 119),
+ (146, 145, 130), (151, 157, 141), (154, 164, 146), (156, 167, 146),
+ (156, 167, 145), (156, 155, 132), (155, 140, 114), (153, 125, 95),
+ (153, 107, 79), (153, 90, 63), (150, 75, 49), (137, 59, 33),
+ (104, 36, 12), (98, 31, 11), (92, 26, 10), (84, 19, 13),
+ (71, 14, 17), (51, 10, 20), (34, 10, 24), (17, 11, 27),
+ (10, 13, 28), (9, 19, 29), (10, 22, 28), (18, 27, 25),
+ (32, 31, 23), (51, 38, 23), (73, 50, 24), (93, 61, 30),
+ (105, 73, 34), (116, 81, 40), (121, 86, 47), (125, 89, 53),
+ (132, 99, 64), (131, 112, 76), (133, 120, 89), (134, 129, 103),
+ (134, 131, 112), (141, 134, 116), (147, 137, 119), (158, 132, 117),
+ (171, 125, 112), (181, 113, 105), (191, 100, 95), (192, 90, 88),
+ (183, 75, 77), (167, 60, 66), (143, 40, 51), (120, 26, 36),
+ (100, 17, 29), (79, 13, 26), (62, 17, 27), (42, 17, 27),
+ (27, 15, 23), (18, 13, 20), (21, 10, 18), (31, 14, 17),
+ (45, 15, 16), (63, 21, 15), (84, 26, 20), (107, 32, 27),
+ (130, 42, 36), (149, 50, 40), (161, 60, 38), (173, 67, 38),
+ (179, 67, 39), (186, 66, 43), (185, 64, 46), (175, 64, 46),
+ (165, 69, 40), (151, 71, 39), (147, 71, 44), (150, 75, 51),
+ (157, 80, 63), (166, 92, 71), (175, 107, 80), (183, 122, 91),
+ (192, 136, 103), (205, 146, 114), (219, 151, 119), (232, 154, 120),
+ (241, 156, 120), (243, 155, 120), (242, 156, 118), (238, 154, 115)
+ ),
+
+// 615 Persia_2
+((236, 205, 111), (235, 193, 107), (225, 188, 101), (215, 183, 95),
+ (200, 174, 89), (185, 165, 84), (179, 158, 84), (174, 152, 84),
+ (157, 140, 88), (146, 137, 89), (135, 134, 91), (122, 123, 91),
+ (109, 112, 91), (104, 107, 87), (99, 102, 84), (99, 102, 81),
+ (100, 103, 78), (99, 100, 59), (104, 96, 49), (109, 93, 39),
+ (116, 91, 30), (124, 90, 22), (124, 89, 20), (125, 88, 19),
+ (140, 92, 29), (157, 98, 36), (174, 105, 44), (172, 103, 46),
+ (170, 101, 48), (162, 97, 49), (155, 94, 51), (146, 95, 59),
+ (141, 99, 67), (130, 96, 65), (111, 91, 57), (93, 86, 49),
+ (68, 76, 44), (43, 66, 39), (38, 62, 37), (33, 58, 36),
+ (22, 50, 23), (29, 48, 20), (37, 47, 17), (51, 49, 15),
+ (66, 52, 13), (71, 52, 13), (77, 52, 13), (85, 53, 18),
+ (95, 53, 20), (106, 55, 19), (102, 54, 20), (98, 53, 21),
+ (87, 52, 25), (76, 51, 29), (73, 53, 32), (70, 55, 35),
+ (71, 80, 63), (82, 96, 78), (94, 112, 93), (111, 126, 101),
+ (128, 141, 110), (136, 151, 115), (144, 161, 121), (168, 180, 134),
+ (190, 197, 143), (210, 206, 140), (203, 197, 134), (196, 188, 129),
+ (189, 179, 124), (183, 170, 120), (173, 147, 108), (159, 133, 96),
+ (131, 111, 72), (116, 97, 62), (102, 83, 53), (96, 76, 51),
+ (90, 69, 49), (91, 72, 51), (93, 76, 53), (96, 86, 58),
+ (96, 94, 64), (98, 99, 90), (106, 105, 99), (115, 112, 109),
+ (118, 115, 110), (122, 119, 112), (130, 129, 112), (139, 138, 113),
+ (159, 157, 116), (165, 164, 119), (171, 171, 122), (170, 172, 123),
+ (170, 173, 124), (168, 172, 122), (166, 169, 121), (161, 163, 119),
+ (150, 152, 118), (124, 127, 111), (115, 116, 103), (107, 106, 96),
+ (104, 102, 93), (101, 98, 91), (101, 95, 91), (103, 97, 95),
+ (116, 112, 112), (129, 125, 116), (143, 139, 120), (151, 145, 122),
+ (160, 152, 124), (175, 167, 126), (188, 177, 130), (193, 187, 128),
+ (192, 190, 123), (162, 167, 105), (153, 158, 100), (145, 150, 96),
+ (128, 134, 85), (118, 122, 78), (97, 105, 68), (76, 85, 64),
+ (52, 58, 54), (53, 53, 48), (55, 48, 43), (58, 49, 42),
+ (61, 50, 42), (67, 53, 46), (77, 64, 54), (89, 80, 61),
+ (107, 97, 66), (136, 115, 71), (141, 118, 69), (146, 121, 67),
+ (151, 127, 65), (158, 137, 59), (161, 131, 54), (154, 123, 51),
+ (118, 90, 37), (98, 76, 33), (79, 63, 29), (70, 57, 30),
+ (62, 52, 32), (49, 41, 36), (32, 32, 42), (21, 29, 45),
+ (14, 25, 48), (13, 28, 47), (15, 28, 46), (18, 29, 45),
+ (27, 40, 45), (37, 46, 42), (42, 48, 39), (47, 52, 40),
+ (61, 62, 46), (62, 63, 45), (64, 65, 44), (67, 65, 43),
+ (65, 63, 44), (56, 54, 46), (48, 47, 51), (38, 39, 50),
+ (28, 30, 42), (22, 20, 25), (23, 19, 22), (24, 19, 20),
+ (35, 23, 23), (47, 32, 31), (61, 46, 42), (74, 64, 53),
+ (100, 103, 80), (106, 110, 89), (112, 118, 98), (126, 135, 119),
+ (140, 146, 130), (143, 157, 141), (146, 164, 146), (146, 167, 146),
+ (146, 167, 145), (146, 156, 132), (151, 155, 114), (153, 152, 95),
+ (153, 142, 79), (153, 132, 63), (150, 121, 49), (137, 107, 33),
+ (104, 79, 12), (98, 71, 11), (92, 64, 10), (84, 52, 13),
+ (71, 37, 14), (51, 18, 10), (34, 10, 12), (24, 11, 27),
+ (15, 10, 28), (9, 9, 29), (10, 13, 28), (18, 24, 27),
+ (28, 32, 23), (51, 51, 23), (73, 73, 24), (93, 91, 30),
+ (104, 105, 34), (116, 116, 40), (121, 121, 47), (125, 123, 53),
+ (132, 131, 64), (125, 131, 76), (126, 133, 89), (125, 134, 103),
+ (127, 134, 112), (136, 141, 116), (144, 147, 119), (158, 151, 117),
+ (171, 152, 112), (181, 148, 105), (191, 145, 95), (192, 138, 88),
+ (183, 124, 75), (167, 104, 60), (143, 78, 40), (120, 60, 26),
+ (100, 43, 17), (79, 30, 13), (62, 28, 17), (42, 18, 17),
+ (27, 15, 17), (20, 13, 18), (21, 10, 12), (31, 18, 14),
+ (45, 28, 15), (63, 43, 15), (84, 56, 20), (107, 69, 27),
+ (130, 86, 36), (149, 102, 40), (161, 118, 38), (173, 130, 38),
+ (179, 132, 39), (186, 134, 43), (185, 129, 46), (175, 123, 46),
+ (165, 127, 40), (151, 123, 39), (147, 120, 44), (150, 122, 51),
+ (157, 124, 63), (166, 136, 71), (175, 151, 80), (183, 165, 91),
+ (192, 177, 103), (205, 189, 114), (219, 198, 119), (232, 206, 120),
+ (241, 213, 120), (243, 213, 120), (242, 213, 118), (238, 212, 115)
+ ),
+
+// 616 Persia_3
+((175, 149, 236), (165, 145, 235), (159, 137, 225), (154, 129, 215),
+ (146, 121, 200), (138, 114, 185), (134, 113, 179), (130, 112, 174),
+ (126, 113, 157), (125, 113, 146), (124, 113, 135), (117, 111, 123),
+ (111, 109, 112), (106, 104, 107), (101, 100, 102), (100, 97, 102),
+ (100, 94, 103), (89, 75, 100), (81, 65, 104), (73, 56, 109),
+ (66, 49, 116), (59, 42, 124), (57, 40, 124), (56, 39, 125),
+ (62, 51, 140), (67, 61, 157), (73, 72, 174), (74, 74, 172),
+ (75, 77, 170), (75, 77, 162), (76, 78, 155), (82, 84, 146),
+ (89, 90, 141), (87, 86, 130), (81, 75, 111), (75, 64, 93),
+ (70, 56, 76), (66, 49, 59), (62, 45, 52), (58, 42, 46),
+ (50, 30, 38), (47, 27, 42), (44, 24, 47), (40, 23, 56),
+ (36, 23, 66), (34, 24, 71), (33, 25, 77), (35, 31, 85),
+ (35, 35, 95), (36, 37, 106), (36, 37, 102), (36, 38, 98),
+ (38, 39, 87), (41, 41, 76), (45, 43, 73), (49, 46, 70),
+ (80, 76, 79), (96, 93, 95), (112, 111, 111), (126, 122, 126),
+ (141, 133, 141), (151, 140, 151), (161, 147, 161), (177, 163, 180),
+ (190, 175, 197), (192, 174, 210), (184, 167, 203), (176, 160, 196),
+ (168, 154, 189), (161, 149, 183), (141, 136, 173), (126, 121, 159),
+ (101, 93, 131), (87, 81, 116), (74, 69, 102), (69, 66, 96),
+ (64, 63, 90), (67, 65, 91), (71, 68, 93), (80, 73, 96),
+ (87, 79, 96), (99, 99, 99), (107, 107, 107), (115, 115, 115),
+ (118, 118, 118), (122, 122, 122), (130, 130, 130), (137, 135, 139),
+ (151, 141, 159), (156, 145, 165), (161, 149, 171), (163, 150, 172),
+ (165, 152, 173), (164, 150, 172), (161, 148, 169), (156, 145, 163),
+ (148, 142, 152), (127, 127, 127), (117, 117, 117), (107, 107, 107),
+ (104, 104, 104), (101, 101, 101), (101, 101, 101), (103, 103, 103),
+ (116, 116, 116), (129, 129, 129), (143, 143, 143), (148, 146, 151),
+ (153, 150, 160), (162, 154, 175), (170, 160, 188), (174, 159, 193),
+ (174, 154, 192), (154, 132, 167), (146, 126, 158), (139, 120, 150),
+ (125, 106, 134), (114, 97, 122), (100, 85, 105), (84, 77, 85),
+ (58, 58, 58), (55, 55, 56), (52, 52, 55), (51, 51, 58),
+ (51, 51, 61), (56, 57, 67), (66, 66, 77), (78, 75, 89),
+ (91, 83, 107), (103, 93, 136), (103, 91, 141), (103, 90, 146),
+ (106, 89, 151), (109, 84, 158), (101, 80, 161), (95, 75, 154),
+ (68, 56, 118), (59, 48, 98), (50, 41, 79), (48, 41, 70),
+ (46, 42, 62), (44, 44, 49), (40, 42, 38), (41, 45, 28),
+ (41, 48, 21), (44, 47, 20), (43, 46, 22), (42, 45, 25),
+ (45, 42, 34), (46, 44, 44), (48, 46, 47), (51, 48, 52),
+ (59, 56, 62), (59, 55, 63), (60, 54, 65), (60, 53, 67),
+ (59, 54, 65), (55, 55, 56), (51, 51, 51), (48, 50, 46),
+ (39, 42, 34), (24, 25, 24), (23, 24, 24), (22, 23, 24),
+ (28, 31, 35), (38, 41, 47), (51, 53, 61), (65, 65, 74),
+ (101, 96, 103), (109, 106, 110), (118, 117, 118), (135, 135, 135),
+ (146, 146, 146), (157, 157, 157), (164, 164, 164), (167, 167, 167),
+ (167, 167, 167), (156, 156, 156), (150, 139, 155), (137, 119, 153),
+ (124, 103, 153), (108, 87, 153), (93, 73, 150), (76, 55, 137),
+ (50, 28, 104), (44, 26, 98), (38, 24, 92), (32, 26, 84),
+ (25, 26, 71), (18, 25, 51), (15, 25, 34), (15, 27, 19),
+ (16, 28, 14), (20, 29, 13), (22, 28, 14), (27, 26, 22),
+ (31, 28, 32), (41, 31, 51), (56, 35, 73), (69, 45, 93),
+ (81, 50, 105), (90, 58, 116), (97, 66, 121), (100, 73, 125),
+ (110, 85, 132), (120, 97, 131), (127, 110, 133), (132, 124, 134),
+ (134, 133, 134), (140, 139, 141), (146, 143, 147), (148, 142, 158),
+ (147, 139, 171), (140, 134, 181), (130, 126, 191), (121, 119, 192),
+ (104, 104, 183), (87, 89, 167), (63, 69, 143), (45, 50, 120),
+ (33, 42, 100), (25, 35, 79), (27, 34, 62), (23, 30, 42),
+ (19, 23, 27), (16, 20, 18), (13, 18, 21), (19, 20, 31),
+ (22, 22, 45), (29, 25, 63), (39, 33, 84), (49, 44, 107),
+ (63, 57, 130), (73, 64, 149), (83, 64, 161), (90, 65, 173),
+ (91, 67, 179), (93, 73, 186), (92, 75, 185), (89, 74, 175),
+ (91, 66, 165), (89, 63, 151), (90, 67, 147), (95, 75, 150),
+ (102, 88, 157), (113, 97, 166), (128, 108, 175), (142, 120, 183),
+ (156, 134, 192), (168, 147, 205), (176, 154, 219), (181, 157, 232),
+ (185, 159, 241), (184, 159, 243), (184, 157, 242), (182, 153, 238)
+ ),
+
+// 617 Pink
+((182, 60, 110), (175, 52, 105), (171, 49, 103), (167, 47, 101),
+ (165, 46, 99), (163, 46, 98), (162, 46, 97), (162, 46, 96),
+ (155, 43, 92), (151, 40, 91), (148, 37, 91), (145, 36, 92),
+ (143, 35, 94), (145, 36, 96), (147, 38, 98), (150, 39, 100),
+ (154, 41, 102), (170, 47, 106), (176, 49, 106), (182, 51, 107),
+ (185, 52, 106), (188, 54, 106), (188, 54, 105), (188, 55, 104),
+ (181, 47, 97), (174, 43, 94), (167, 39, 92), (160, 36, 92),
+ (154, 33, 92), (151, 32, 92), (149, 31, 93), (145, 30, 94),
+ (142, 30, 94), (141, 29, 94), (142, 30, 94), (144, 31, 95),
+ (145, 31, 94), (146, 31, 93), (147, 30, 91), (148, 30, 90),
+ (151, 30, 85), (152, 31, 83), (154, 33, 81), (159, 35, 81),
+ (164, 38, 82), (168, 40, 84), (173, 43, 86), (182, 51, 90),
+ (190, 60, 97), (209, 81, 109), (220, 91, 118), (231, 102, 128),
+ (237, 112, 140), (243, 122, 152), (245, 126, 157), (247, 130, 163),
+ (239, 130, 170), (230, 121, 166), (222, 113, 162), (213, 105, 157),
+ (204, 98, 153), (199, 93, 150), (194, 89, 148), (184, 77, 140),
+ (173, 65, 129), (159, 55, 117), (157, 53, 117), (156, 52, 117),
+ (157, 52, 118), (158, 52, 120), (160, 52, 122), (162, 54, 124),
+ (173, 61, 125), (180, 65, 127), (188, 70, 129), (193, 73, 134),
+ (198, 76, 139), (201, 78, 141), (204, 81, 143), (208, 89, 150),
+ (214, 94, 153), (215, 96, 162), (217, 97, 162), (219, 99, 163),
+ (221, 102, 163), (224, 105, 164), (229, 113, 163), (231, 124, 168),
+ (239, 153, 180), (244, 165, 184), (249, 177, 189), (250, 178, 189),
+ (251, 180, 189), (254, 180, 190), (252, 176, 188), (247, 171, 189),
+ (241, 162, 180), (227, 128, 151), (221, 109, 136), (215, 90, 121),
+ (211, 83, 115), (208, 77, 110), (199, 69, 102), (191, 62, 95),
+ (185, 59, 91), (184, 57, 94), (183, 56, 98), (179, 54, 99),
+ (176, 52, 100), (171, 49, 102), (165, 49, 104), (163, 50, 105),
+ (161, 51, 108), (159, 49, 114), (159, 49, 115), (159, 49, 116),
+ (163, 51, 114), (166, 54, 112), (169, 56, 108), (171, 56, 106),
+ (173, 54, 107), (170, 52, 105), (168, 50, 103), (165, 48, 100),
+ (162, 46, 98), (155, 40, 95), (148, 36, 95), (141, 31, 97),
+ (138, 29, 96), (138, 27, 92), (140, 27, 91), (142, 28, 91),
+ (148, 31, 92), (157, 36, 92), (167, 45, 92), (176, 54, 93),
+ (190, 61, 94), (190, 59, 92), (191, 58, 91), (189, 58, 90),
+ (187, 58, 89), (182, 55, 88), (173, 53, 86), (162, 47, 86),
+ (155, 41, 85), (141, 33, 83), (138, 32, 82), (135, 31, 81),
+ (131, 29, 83), (129, 30, 86), (128, 32, 88), (126, 31, 90),
+ (116, 22, 83), (115, 20, 83), (114, 19, 83), (115, 16, 82),
+ (119, 18, 85), (114, 17, 80), (115, 15, 76), (119, 15, 74),
+ (128, 15, 74), (145, 21, 82), (147, 23, 82), (149, 25, 83),
+ (153, 26, 84), (156, 28, 85), (159, 31, 88), (161, 32, 91),
+ (166, 38, 95), (167, 38, 95), (169, 39, 95), (172, 44, 95),
+ (174, 47, 98), (174, 52, 100), (176, 56, 102), (177, 58, 100),
+ (176, 62, 101), (178, 63, 103), (175, 65, 108), (172, 64, 112),
+ (171, 62, 111), (168, 63, 110), (171, 63, 111), (177, 65, 113),
+ (191, 67, 120), (195, 68, 120), (199, 70, 121), (204, 72, 123),
+ (205, 74, 123), (205, 74, 126), (200, 72, 126), (197, 69, 125),
+ (193, 64, 124), (185, 60, 119), (177, 54, 116), (166, 49, 111),
+ (160, 42, 106), (158, 37, 102), (158, 34, 96), (158, 32, 90),
+ (159, 33, 84), (161, 34, 81), (163, 35, 80), (168, 37, 81),
+ (170, 38, 82), (171, 38, 81), (170, 41, 82), (167, 43, 83),
+ (167, 46, 87), (167, 47, 92), (167, 47, 95), (165, 50, 98),
+ (159, 51, 100), (154, 50, 102), (148, 47, 103), (144, 41, 101),
+ (140, 37, 98), (134, 35, 95), (129, 31, 94), (124, 27, 93),
+ (121, 22, 89), (123, 18, 85), (125, 17, 81), (128, 17, 78),
+ (132, 18, 80), (138, 21, 81), (146, 23, 81), (153, 27, 81),
+ (160, 30, 82), (165, 33, 85), (168, 37, 88), (171, 40, 92),
+ (173, 44, 98), (175, 49, 105), (177, 54, 113), (181, 60, 120),
+ (185, 65, 126), (187, 69, 133), (189, 74, 140), (188, 77, 142),
+ (190, 80, 142), (191, 78, 139), (192, 74, 135), (191, 71, 132),
+ (188, 67, 127), (187, 66, 122), (188, 65, 115), (190, 63, 110),
+ (194, 64, 108), (196, 64, 107), (198, 65, 109), (200, 67, 109),
+ (198, 65, 109), (194, 63, 109), (190, 63, 109), (185, 60, 110)
+ ),
+
+// 618 Pollen
+((115, 114, 55), (143, 139, 47), (166, 158, 48), (189, 177, 49),
+ (198, 189, 46), (207, 202, 44), (209, 203, 42), (211, 204, 40),
+ (216, 200, 47), (205, 191, 43), (194, 182, 39), (173, 160, 38),
+ (153, 138, 37), (126, 112, 37), (99, 87, 37), (87, 77, 32),
+ (75, 67, 28), (40, 33, 9), (35, 30, 6), (30, 28, 4),
+ (37, 35, 10), (45, 43, 17), (52, 49, 22), (59, 55, 27),
+ (98, 92, 51), (118, 111, 67), (139, 130, 83), (156, 148, 104),
+ (174, 167, 125), (183, 176, 136), (193, 185, 148), (211, 201, 165),
+ (219, 210, 171), (217, 210, 159), (215, 204, 148), (214, 199, 137),
+ (198, 184, 118), (183, 169, 99), (170, 157, 86), (157, 146, 74),
+ (129, 105, 29), (129, 85, 17), (130, 65, 6), (122, 54, 8),
+ (115, 44, 10), (107, 41, 9), (100, 38, 9), (101, 32, 10),
+ (104, 26, 7), (102, 27, 11), (92, 34, 14), (82, 42, 18),
+ (78, 50, 20), (75, 58, 23), (77, 63, 25), (79, 68, 28),
+ (96, 91, 42), (111, 96, 48), (126, 101, 55), (142, 103, 57),
+ (159, 106, 59), (161, 108, 56), (163, 111, 53), (154, 115, 50),
+ (141, 108, 41), (140, 91, 33), (135, 96, 28), (130, 101, 23),
+ (121, 102, 22), (113, 104, 21), (104, 97, 19), (96, 89, 20),
+ (86, 79, 17), (78, 71, 17), (70, 63, 18), (60, 51, 17),
+ (51, 40, 16), (47, 36, 13), (43, 33, 11), (33, 28, 10),
+ (30, 27, 12), (38, 40, 22), (49, 51, 29), (61, 63, 37),
+ (68, 69, 41), (76, 76, 46), (90, 93, 56), (103, 107, 64),
+ (119, 121, 64), (125, 117, 57), (131, 113, 51), (137, 108, 50),
+ (144, 104, 50), (147, 97, 47), (142, 93, 41), (130, 90, 33),
+ (119, 84, 25), (119, 68, 28), (109, 65, 28), (100, 63, 29),
+ (91, 64, 29), (83, 65, 29), (70, 68, 29), (65, 70, 36),
+ (65, 66, 39), (66, 66, 43), (67, 66, 47), (67, 68, 51),
+ (68, 71, 55), (73, 79, 61), (81, 86, 67), (93, 94, 75),
+ (101, 101, 80), (111, 113, 84), (112, 115, 83), (113, 117, 83),
+ (118, 121, 81), (124, 128, 83), (131, 135, 89), (139, 142, 93),
+ (148, 151, 98), (153, 153, 101), (158, 155, 104), (161, 155, 107),
+ (165, 156, 111), (170, 159, 118), (176, 164, 124), (178, 171, 132),
+ (181, 174, 135), (176, 166, 136), (173, 163, 134), (171, 160, 132),
+ (164, 159, 130), (158, 160, 129), (150, 154, 124), (145, 151, 119),
+ (142, 147, 105), (145, 150, 104), (149, 154, 103), (152, 158, 102),
+ (155, 162, 101), (163, 170, 104), (179, 184, 105), (194, 197, 104),
+ (206, 202, 107), (209, 205, 113), (209, 206, 114), (209, 207, 116),
+ (208, 209, 111), (205, 203, 103), (197, 194, 100), (185, 180, 96),
+ (156, 149, 89), (150, 141, 82), (145, 134, 76), (131, 119, 64),
+ (118, 104, 53), (101, 88, 45), (84, 69, 35), (69, 50, 25),
+ (56, 36, 17), (32, 19, 4), (26, 16, 3), (20, 13, 2),
+ (11, 6, 1), (6, 3, 2), (5, 3, 4), (11, 9, 9),
+ (27, 28, 24), (30, 33, 27), (34, 38, 31), (42, 48, 35),
+ (53, 60, 40), (68, 72, 44), (83, 84, 54), (90, 93, 63),
+ (97, 98, 70), (98, 102, 73), (102, 106, 71), (108, 109, 69),
+ (107, 112, 70), (111, 112, 72), (114, 113, 78), (121, 120, 87),
+ (145, 147, 105), (151, 153, 110), (157, 160, 115), (171, 173, 128),
+ (186, 184, 140), (197, 196, 148), (208, 206, 157), (209, 208, 159),
+ (208, 209, 165), (204, 205, 166), (196, 199, 157), (187, 190, 149),
+ (177, 176, 133), (163, 163, 125), (149, 147, 120), (134, 132, 107),
+ (118, 120, 96), (108, 110, 77), (97, 100, 64), (87, 88, 55),
+ (77, 77, 46), (67, 68, 37), (60, 64, 27), (55, 62, 22),
+ (53, 60, 23), (48, 56, 26), (47, 51, 27), (44, 46, 28),
+ (42, 45, 27), (42, 45, 27), (39, 44, 30), (40, 46, 32),
+ (43, 43, 33), (45, 43, 31), (48, 45, 30), (49, 46, 30),
+ (48, 50, 31), (50, 49, 31), (51, 47, 30), (49, 46, 29),
+ (46, 42, 28), (38, 42, 25), (34, 41, 22), (35, 41, 19),
+ (37, 43, 18), (44, 45, 21), (51, 53, 24), (58, 62, 29),
+ (69, 73, 31), (80, 86, 37), (93, 96, 42), (103, 105, 45),
+ (107, 109, 45), (106, 107, 41), (100, 100, 39), (89, 90, 37),
+ (76, 78, 33), (64, 67, 27), (56, 57, 21), (51, 48, 20),
+ (48, 42, 21), (46, 38, 25), (44, 38, 29), (48, 41, 32),
+ (55, 49, 35), (63, 56, 37), (70, 64, 40), (75, 69, 40),
+ (90, 82, 46), (102, 95, 54), (113, 105, 59), (119, 116, 64)
+ ),
+
+// 619 Poppies
+((174, 44, 42), (206, 26, 41), (178, 23, 48), (151, 21, 55),
+ (143, 18, 42), (136, 16, 30), (139, 24, 32), (143, 33, 35),
+ (107, 54, 29), (75, 57, 25), (44, 61, 21), (40, 53, 14),
+ (36, 45, 8), (60, 47, 5), (84, 49, 3), (100, 50, 8),
+ (116, 51, 13), (116, 97, 51), (95, 123, 86), (75, 149, 121),
+ (85, 151, 145), (96, 154, 169), (100, 162, 167), (104, 171, 165),
+ (175, 112, 143), (190, 83, 116), (205, 55, 90), (205, 48, 69),
+ (206, 42, 48), (194, 38, 44), (182, 35, 41), (164, 49, 43),
+ (151, 56, 41), (157, 57, 62), (166, 57, 63), (175, 58, 65),
+ (168, 74, 51), (161, 91, 38), (162, 105, 38), (163, 120, 39),
+ (146, 152, 79), (148, 157, 110), (151, 163, 141), (153, 164, 151),
+ (156, 166, 162), (157, 158, 154), (159, 151, 147), (150, 149, 139),
+ (138, 131, 124), (94, 119, 94), (67, 108, 74), (40, 97, 54),
+ (45, 95, 44), (51, 94, 34), (67, 103, 33), (83, 113, 32),
+ (182, 140, 40), (211, 125, 57), (241, 111, 75), (242, 100, 69),
+ (244, 89, 63), (241, 103, 57), (239, 118, 52), (219, 122, 23),
+ (194, 169, 17), (169, 151, 31), (179, 127, 40), (190, 104, 49),
+ (193, 109, 58), (196, 114, 67), (182, 129, 81), (178, 161, 123),
+ (145, 175, 125), (121, 170, 98), (97, 165, 72), (71, 160, 53),
+ (45, 156, 35), (37, 143, 32), (30, 130, 29), (27, 120, 19),
+ (25, 98, 22), (45, 86, 4), (64, 86, 11), (84, 86, 19),
+ (96, 81, 16), (109, 77, 14), (147, 65, 25), (175, 44, 21),
+ (224, 17, 10), (235, 23, 13), (246, 29, 17), (242, 31, 17),
+ (238, 34, 17), (225, 69, 37), (212, 73, 23), (190, 80, 22),
+ (172, 83, 8), (124, 92, 25), (95, 98, 42), (67, 105, 59),
+ (47, 109, 58), (28, 114, 57), (28, 129, 48), (12, 143, 41),
+ (14, 156, 25), (43, 148, 47), (73, 141, 70), (105, 135, 82),
+ (138, 130, 94), (179, 104, 120), (213, 105, 127), (225, 112, 137),
+ (224, 151, 152), (194, 174, 173), (195, 152, 175), (197, 130, 177),
+ (184, 136, 170), (185, 99, 161), (208, 89, 146), (194, 62, 127),
+ (192, 47, 84), (184, 46, 79), (177, 46, 74), (174, 52, 70),
+ (171, 59, 66), (148, 62, 77), (128, 53, 81), (116, 67, 89),
+ (120, 67, 108), (155, 56, 134), (171, 52, 131), (188, 49, 129),
+ (202, 37, 140), (222, 36, 154), (232, 41, 165), (243, 43, 167),
+ (245, 66, 138), (247, 70, 140), (250, 74, 143), (242, 75, 146),
+ (235, 77, 150), (238, 81, 173), (224, 64, 178), (216, 77, 168),
+ (217, 65, 161), (195, 42, 130), (188, 36, 124), (181, 31, 118),
+ (174, 34, 111), (170, 52, 118), (176, 71, 99), (181, 71, 112),
+ (220, 56, 105), (227, 44, 99), (235, 33, 94), (244, 26, 84),
+ (235, 9, 59), (221, 34, 42), (209, 41, 48), (188, 87, 42),
+ (176, 92, 71), (114, 103, 105), (101, 107, 116), (88, 112, 127),
+ (47, 127, 122), (45, 155, 105), (24, 162, 83), (28, 174, 47),
+ (43, 166, 23), (51, 168, 26), (59, 171, 29), (88, 161, 15),
+ (97, 168, 45), (127, 163, 28), (137, 163, 70), (169, 167, 68),
+ (181, 171, 85), (190, 169, 90), (201, 171, 102), (191, 164, 111),
+ (191, 156, 130), (185, 143, 123), (200, 140, 142), (201, 122, 131),
+ (234, 117, 142), (235, 114, 145), (236, 111, 149), (247, 98, 130),
+ (248, 90, 138), (247, 74, 116), (242, 63, 122), (236, 63, 115),
+ (239, 49, 124), (226, 34, 126), (219, 23, 125), (223, 17, 107),
+ (214, 26, 87), (225, 42, 75), (214, 66, 72), (189, 102, 85),
+ (149, 117, 91), (104, 134, 113), (83, 153, 103), (54, 158, 98),
+ (68, 173, 79), (63, 182, 61), (67, 169, 67), (54, 165, 69),
+ (30, 143, 76), (27, 153, 98), (22, 152, 100), (43, 158, 122),
+ (84, 160, 134), (100, 151, 138), (146, 136, 140), (146, 142, 136),
+ (167, 140, 132), (167, 145, 123), (188, 159, 118), (211, 152, 120),
+ (225, 151, 117), (248, 138, 121), (247, 107, 97), (252, 88, 82),
+ (246, 70, 58), (241, 52, 41), (235, 48, 45), (231, 38, 53),
+ (232, 24, 84), (236, 32, 105), (231, 38, 134), (237, 54, 137),
+ (226, 58, 142), (233, 52, 140), (212, 40, 159), (217, 18, 168),
+ (208, 12, 169), (213, 15, 162), (226, 25, 150), (232, 47, 135),
+ (233, 62, 130), (193, 77, 117), (154, 73, 90), (90, 71, 66),
+ (46, 61, 57), (22, 49, 44), (10, 59, 58), (27, 71, 60),
+ (50, 92, 67), (75, 107, 81), (107, 100, 94), (118, 90, 93),
+ (117, 49, 95), (122, 47, 78), (108, 35, 67), (78, 44, 58)
+ ),
+
+// 620 Produce_Department
+((153, 25, 65), (184, 50, 53), (193, 61, 57), (202, 73, 62),
+ (201, 89, 83), (201, 106, 105), (199, 114, 105), (198, 123, 105),
+ (192, 136, 85), (183, 142, 98), (175, 149, 111), (154, 148, 112),
+ (133, 148, 114), (113, 135, 99), (93, 123, 85), (86, 118, 84),
+ (80, 114, 83), (41, 95, 78), (26, 80, 76), (12, 65, 75),
+ (14, 51, 63), (17, 38, 52), (21, 32, 45), (26, 27, 38),
+ (48, 13, 18), (64, 10, 17), (81, 8, 16), (92, 7, 15),
+ (103, 7, 14), (106, 8, 12), (110, 10, 11), (116, 12, 11),
+ (123, 14, 14), (118, 13, 25), (110, 13, 29), (103, 13, 34),
+ (103, 15, 31), (103, 17, 28), (103, 17, 27), (104, 18, 26),
+ (111, 16, 30), (118, 16, 27), (126, 17, 24), (130, 26, 20),
+ (134, 35, 17), (133, 39, 19), (133, 43, 21), (128, 52, 31),
+ (123, 58, 43), (104, 63, 56), (94, 66, 61), (84, 70, 67),
+ (81, 72, 76), (78, 74, 85), (77, 74, 88), (76, 75, 91),
+ (66, 71, 98), (63, 70, 109), (60, 70, 120), (63, 72, 124),
+ (66, 75, 129), (65, 79, 127), (65, 83, 125), (66, 84, 118),
+ (70, 87, 112), (86, 89, 98), (85, 96, 92), (84, 103, 86),
+ (84, 107, 82), (84, 111, 79), (84, 123, 68), (86, 123, 59),
+ (60, 126, 63), (45, 128, 62), (31, 131, 62), (28, 126, 54),
+ (25, 121, 47), (26, 118, 46), (28, 115, 45), (26, 115, 41),
+ (26, 119, 41), (24, 125, 43), (29, 129, 55), (34, 133, 67),
+ (37, 133, 77), (40, 134, 88), (46, 141, 112), (52, 145, 121),
+ (52, 154, 118), (51, 138, 121), (51, 123, 125), (56, 115, 125),
+ (62, 107, 126), (68, 104, 122), (74, 103, 106), (75, 103, 89),
+ (78, 95, 90), (92, 106, 127), (94, 109, 138), (97, 112, 150),
+ (96, 109, 152), (95, 106, 155), (85, 105, 167), (78, 112, 182),
+ (75, 107, 192), (73, 86, 175), (71, 66, 158), (71, 59, 146),
+ (71, 52, 135), (80, 42, 119), (93, 45, 99), (110, 52, 78),
+ (125, 57, 64), (137, 68, 46), (138, 75, 48), (139, 83, 50),
+ (143, 104, 50), (145, 126, 66), (157, 142, 86), (158, 156, 110),
+ (145, 179, 147), (134, 187, 159), (124, 196, 171), (124, 193, 179),
+ (124, 190, 188), (116, 181, 199), (113, 168, 201), (99, 154, 194),
+ (86, 141, 180), (74, 99, 164), (72, 89, 157), (71, 79, 150),
+ (68, 62, 136), (62, 53, 113), (69, 52, 94), (71, 52, 74),
+ (77, 55, 42), (81, 54, 31), (86, 54, 21), (91, 54, 17),
+ (97, 54, 13), (112, 55, 11), (125, 55, 9), (134, 51, 11),
+ (146, 40, 13), (162, 16, 14), (161, 14, 15), (161, 13, 16),
+ (155, 15, 19), (150, 19, 25), (144, 21, 26), (140, 16, 32),
+ (121, 16, 44), (115, 18, 47), (110, 21, 51), (98, 31, 55),
+ (90, 41, 61), (85, 57, 68), (83, 73, 65), (82, 84, 60),
+ (82, 87, 58), (88, 85, 61), (91, 87, 58), (95, 89, 56),
+ (97, 94, 43), (99, 92, 37), (99, 83, 33), (100, 67, 40),
+ (101, 44, 45), (99, 45, 45), (98, 47, 46), (91, 52, 49),
+ (86, 51, 56), (90, 44, 61), (93, 36, 63), (100, 35, 59),
+ (109, 45, 58), (116, 50, 58), (123, 45, 57), (129, 38, 57),
+ (129, 29, 55), (126, 33, 55), (127, 40, 58), (121, 42, 63),
+ (114, 35, 78), (110, 36, 82), (106, 37, 87), (105, 37, 97),
+ (100, 38, 103), (100, 39, 106), (97, 34, 108), (89, 37, 106),
+ (87, 35, 106), (80, 33, 101), (73, 33, 92), (67, 26, 82),
+ (52, 22, 72), (44, 19, 66), (35, 18, 62), (31, 26, 59),
+ (34, 37, 59), (34, 46, 61), (31, 52, 68), (28, 56, 76),
+ (26, 64, 81), (29, 78, 85), (36, 94, 87), (37, 101, 89),
+ (35, 102, 86), (35, 92, 78), (35, 82, 65), (40, 78, 52),
+ (43, 75, 42), (42, 76, 33), (42, 69, 25), (43, 55, 20),
+ (40, 41, 16), (36, 34, 18), (32, 36, 28), (29, 43, 35),
+ (30, 48, 45), (29, 50, 56), (24, 51, 63), (22, 48, 79),
+ (23, 48, 89), (33, 49, 96), (46, 56, 103), (44, 59, 92),
+ (39, 54, 83), (31, 47, 74), (26, 38, 63), (36, 39, 60),
+ (38, 38, 46), (34, 36, 34), (26, 35, 25), (13, 31, 19),
+ (9, 35, 20), (11, 42, 16), (14, 46, 17), (15, 52, 19),
+ (13, 59, 29), (10, 67, 39), (9, 75, 39), (9, 79, 38),
+ (11, 81, 33), (9, 84, 37), (7, 85, 47), (14, 82, 55),
+ (20, 79, 63), (32, 68, 65), (45, 58, 64), (57, 50, 67),
+ (78, 42, 65), (98, 37, 65), (121, 26, 66), (141, 21, 61)
+ ),
+
+// 621 Purple
+((65, 56, 83), (69, 65, 87), (70, 68, 86), (71, 71, 86),
+ (73, 76, 86), (76, 82, 87), (72, 77, 84), (69, 73, 81),
+ (64, 71, 76), (67, 73, 79), (70, 75, 83), (80, 80, 86),
+ (90, 86, 90), (97, 87, 96), (104, 88, 103), (106, 87, 106),
+ (109, 87, 109), (113, 82, 119), (112, 79, 119), (112, 76, 119),
+ (110, 68, 118), (109, 60, 118), (107, 54, 118), (106, 48, 118),
+ (101, 32, 116), (97, 29, 117), (93, 27, 119), (86, 22, 118),
+ (80, 18, 118), (75, 17, 119), (71, 16, 120), (65, 14, 122),
+ (64, 10, 126), (66, 12, 134), (72, 12, 137), (78, 12, 140),
+ (82, 16, 142), (87, 21, 145), (90, 23, 145), (94, 26, 146),
+ (106, 48, 145), (116, 57, 149), (127, 66, 154), (131, 65, 155),
+ (136, 64, 156), (138, 60, 155), (140, 57, 154), (135, 51, 148),
+ (135, 47, 139), (123, 48, 129), (114, 44, 126), (105, 41, 123),
+ (95, 30, 116), (86, 19, 110), (78, 12, 101), (71, 6, 93),
+ (52, 0, 71), (46, 0, 65), (40, 0, 60), (39, 0, 59),
+ (38, 0, 59), (37, 0, 55), (36, 0, 52), (36, 0, 50),
+ (35, 0, 51), (37, 0, 57), (38, 0, 63), (40, 0, 69),
+ (41, 0, 70), (42, 0, 72), (42, 0, 75), (41, 3, 79),
+ (44, 6, 88), (50, 6, 95), (57, 6, 102), (63, 11, 108),
+ (70, 16, 114), (71, 20, 115), (72, 24, 117), (74, 26, 119),
+ (73, 31, 120), (78, 36, 120), (85, 37, 120), (92, 38, 120),
+ (95, 39, 119), (98, 41, 119), (103, 42, 116), (102, 46, 114),
+ (96, 43, 105), (94, 35, 100), (92, 28, 95), (91, 25, 91),
+ (90, 22, 88), (91, 17, 83), (91, 16, 76), (90, 17, 70),
+ (87, 19, 65), (83, 26, 58), (82, 31, 54), (81, 36, 51),
+ (80, 37, 49), (80, 39, 48), (78, 43, 44), (73, 49, 43),
+ (70, 56, 37), (70, 58, 36), (71, 60, 36), (71, 61, 38),
+ (72, 63, 40), (71, 64, 46), (62, 66, 52), (56, 62, 62),
+ (50, 53, 64), (46, 35, 65), (47, 32, 66), (49, 30, 68),
+ (56, 27, 72), (62, 25, 81), (70, 26, 100), (80, 22, 113),
+ (100, 17, 135), (109, 17, 140), (118, 18, 146), (121, 17, 146),
+ (125, 16, 147), (137, 19, 152), (145, 20, 158), (154, 16, 164),
+ (166, 16, 173), (170, 10, 181), (167, 8, 178), (164, 6, 175),
+ (159, 5, 164), (148, 4, 152), (138, 0, 140), (130, 0, 130),
+ (119, 0, 119), (115, 0, 116), (112, 0, 114), (110, 0, 111),
+ (108, 0, 108), (103, 0, 101), (100, 0, 96), (100, 0, 93),
+ (98, 3, 92), (101, 19, 91), (103, 23, 92), (106, 28, 93),
+ (109, 38, 95), (114, 47, 102), (117, 53, 104), (118, 58, 108),
+ (115, 64, 109), (115, 65, 108), (115, 66, 107), (114, 72, 107),
+ (118, 73, 107), (123, 71, 109), (126, 68, 112), (125, 62, 116),
+ (120, 54, 116), (109, 35, 112), (106, 31, 110), (103, 28, 109),
+ (101, 20, 109), (101, 14, 108), (101, 8, 110), (100, 8, 109),
+ (94, 12, 105), (90, 14, 104), (87, 17, 103), (80, 21, 101),
+ (76, 27, 97), (74, 31, 100), (75, 36, 100), (74, 42, 101),
+ (72, 49, 104), (73, 54, 105), (71, 57, 104), (69, 58, 102),
+ (69, 58, 101), (70, 54, 100), (71, 49, 97), (69, 44, 96),
+ (66, 32, 94), (64, 28, 92), (63, 25, 91), (60, 20, 86),
+ (59, 17, 81), (59, 14, 78), (62, 10, 74), (66, 9, 71),
+ (70, 9, 70), (71, 9, 69), (71, 14, 66), (72, 19, 65),
+ (71, 27, 68), (70, 35, 69), (71, 42, 68), (74, 49, 70),
+ (75, 51, 76), (76, 57, 80), (78, 64, 85), (81, 70, 91),
+ (82, 78, 96), (83, 86, 100), (87, 96, 103), (91, 103, 114),
+ (92, 107, 118), (94, 118, 122), (98, 125, 125), (107, 126, 135),
+ (117, 137, 144), (127, 141, 147), (137, 146, 157), (142, 139, 163),
+ (145, 137, 166), (144, 132, 161), (142, 118, 161), (141, 110, 156),
+ (139, 100, 149), (139, 91, 147), (132, 79, 145), (128, 66, 141),
+ (117, 58, 134), (104, 44, 123), (94, 35, 109), (84, 31, 96),
+ (78, 28, 85), (69, 27, 73), (64, 25, 60), (58, 26, 50),
+ (51, 27, 41), (47, 31, 38), (43, 34, 35), (43, 38, 32),
+ (41, 43, 30), (43, 44, 29), (44, 46, 29), (48, 46, 30),
+ (49, 43, 31), (48, 40, 36), (50, 37, 38), (50, 36, 46),
+ (51, 34, 52), (51, 35, 58), (53, 38, 62), (56, 43, 65),
+ (58, 48, 68), (58, 47, 70), (69, 59, 80), (76, 64, 88),
+ (80, 65, 91), (79, 66, 92), (79, 66, 93), (79, 69, 93)
+ ),
+
+// 622 Queen_Anne
+((128, 126, 186), (127, 126, 170), (127, 121, 154), (128, 117, 139),
+ (119, 109, 117), (111, 102, 96), (105, 97, 86), (100, 92, 77),
+ (74, 73, 39), (62, 66, 24), (51, 59, 9), (44, 54, 7),
+ (37, 50, 5), (32, 47, 6), (28, 44, 8), (27, 42, 8),
+ (27, 40, 8), (24, 34, 10), (22, 30, 13), (20, 27, 17),
+ (22, 27, 22), (25, 27, 28), (29, 29, 28), (33, 32, 29),
+ (36, 37, 40), (43, 40, 54), (50, 44, 68), (55, 50, 78),
+ (61, 57, 89), (61, 57, 91), (61, 58, 94), (62, 59, 99),
+ (59, 57, 97), (54, 57, 81), (54, 57, 69), (54, 58, 58),
+ (60, 59, 55), (66, 61, 53), (71, 65, 59), (76, 69, 66),
+ (95, 93, 94), (99, 95, 101), (104, 97, 108), (96, 96, 101),
+ (89, 95, 95), (85, 94, 91), (81, 93, 87), (70, 84, 74),
+ (57, 69, 56), (40, 53, 32), (36, 49, 29), (33, 46, 27),
+ (31, 42, 28), (29, 39, 29), (31, 40, 30), (34, 41, 32),
+ (38, 41, 47), (42, 45, 50), (47, 50, 54), (51, 55, 64),
+ (56, 60, 74), (61, 64, 78), (67, 68, 82), (77, 78, 86),
+ (79, 86, 88), (83, 92, 89), (83, 92, 85), (83, 93, 81),
+ (81, 93, 74), (79, 93, 67), (79, 93, 65), (79, 91, 68),
+ (80, 86, 84), (89, 91, 97), (98, 96, 111), (105, 101, 131),
+ (113, 106, 151), (117, 107, 159), (122, 109, 167), (132, 117, 177),
+ (135, 124, 185), (148, 136, 204), (157, 144, 207), (167, 153, 210),
+ (166, 155, 212), (166, 157, 214), (169, 158, 221), (172, 156, 220),
+ (171, 155, 215), (169, 154, 212), (167, 154, 209), (164, 153, 201),
+ (162, 153, 194), (166, 151, 178), (171, 154, 167), (175, 156, 172),
+ (167, 157, 173), (152, 139, 156), (144, 133, 156), (136, 127, 156),
+ (132, 122, 158), (129, 118, 161), (124, 111, 156), (123, 109, 147),
+ (133, 128, 140), (134, 125, 130), (135, 123, 120), (129, 120, 113),
+ (123, 118, 107), (107, 114, 100), (98, 105, 87), (82, 88, 68),
+ (65, 71, 46), (35, 47, 27), (32, 45, 25), (30, 43, 24),
+ (28, 40, 21), (25, 37, 18), (23, 34, 16), (22, 31, 17),
+ (20, 31, 12), (26, 34, 17), (33, 38, 23), (39, 39, 27),
+ (46, 41, 32), (51, 46, 39), (45, 47, 28), (50, 54, 37),
+ (60, 58, 46), (58, 59, 58), (56, 60, 63), (55, 61, 68),
+ (60, 65, 80), (62, 68, 85), (63, 67, 86), (65, 68, 86),
+ (69, 71, 80), (62, 66, 65), (56, 61, 50), (52, 58, 42),
+ (48, 55, 35), (40, 50, 23), (34, 44, 17), (28, 40, 15),
+ (25, 37, 14), (21, 35, 12), (21, 36, 11), (21, 37, 11),
+ (22, 38, 11), (22, 38, 12), (22, 38, 11), (24, 39, 13),
+ (27, 42, 15), (26, 42, 15), (26, 43, 15), (25, 41, 16),
+ (26, 40, 17), (25, 37, 17), (23, 37, 17), (19, 34, 16),
+ (17, 32, 13), (18, 31, 8), (18, 32, 7), (18, 34, 6),
+ (20, 36, 6), (23, 40, 7), (27, 44, 11), (31, 51, 12),
+ (37, 52, 18), (36, 51, 19), (35, 51, 21), (33, 50, 21),
+ (31, 48, 21), (29, 42, 19), (24, 37, 16), (19, 33, 13),
+ (15, 29, 10), (12, 22, 9), (11, 18, 8), (12, 19, 11),
+ (17, 23, 13), (24, 26, 18), (31, 29, 23), (38, 39, 33),
+ (59, 64, 53), (62, 66, 55), (66, 68, 58), (67, 74, 56),
+ (67, 78, 56), (66, 81, 56), (64, 77, 56), (57, 72, 48),
+ (53, 67, 40), (49, 64, 34), (49, 61, 32), (49, 60, 33),
+ (52, 61, 37), (60, 65, 48), (70, 75, 64), (85, 89, 85),
+ (102, 106, 107), (123, 125, 136), (137, 136, 164), (143, 142, 186),
+ (144, 143, 198), (150, 149, 206), (148, 145, 202), (134, 132, 185),
+ (111, 113, 157), (94, 98, 126), (81, 89, 95), (74, 87, 71),
+ (71, 87, 51), (81, 93, 37), (96, 102, 29), (108, 108, 32),
+ (106, 110, 43), (106, 108, 57), (111, 111, 68), (115, 105, 81),
+ (101, 94, 92), (83, 79, 94), (64, 69, 88), (54, 60, 82),
+ (44, 51, 78), (43, 49, 70), (40, 47, 58), (39, 47, 46),
+ (35, 45, 42), (38, 48, 46), (44, 51, 58), (51, 58, 73),
+ (58, 62, 88), (65, 70, 101), (76, 75, 118), (87, 89, 140),
+ (101, 99, 158), (109, 106, 166), (115, 108, 167), (114, 112, 164),
+ (115, 114, 161), (111, 110, 153), (108, 101, 145), (100, 95, 132),
+ (95, 94, 129), (91, 92, 129), (93, 92, 137), (97, 91, 144),
+ (108, 98, 159), (117, 105, 176), (124, 116, 191), (124, 119, 200),
+ (126, 119, 206), (128, 118, 206), (132, 122, 201), (132, 126, 193)
+ ),
+
+// 623 Quiet
+((89, 51, 90), (95, 51, 100), (96, 52, 108), (98, 54, 116),
+ (86, 49, 116), (75, 44, 116), (67, 43, 116), (60, 43, 117),
+ (44, 49, 121), (41, 48, 121), (39, 48, 121), (40, 48, 124),
+ (42, 49, 127), (45, 45, 124), (49, 41, 122), (51, 38, 121),
+ (53, 36, 120), (53, 32, 118), (51, 30, 109), (49, 28, 101),
+ (43, 24, 86), (37, 21, 71), (32, 18, 63), (28, 16, 56),
+ (18, 10, 29), (11, 6, 18), (5, 3, 7), (5, 3, 7),
+ (6, 3, 7), (10, 4, 11), (14, 6, 16), (22, 12, 29),
+ (25, 15, 41), (48, 29, 76), (53, 45, 92), (58, 61, 108),
+ (58, 64, 111), (59, 68, 115), (62, 67, 116), (66, 66, 117),
+ (75, 78, 118), (86, 70, 112), (98, 62, 106), (108, 58, 102),
+ (119, 54, 99), (122, 54, 99), (125, 55, 99), (128, 55, 96),
+ (129, 51, 94), (118, 47, 82), (112, 43, 79), (106, 40, 76),
+ (102, 38, 77), (98, 37, 78), (94, 35, 78), (91, 34, 79),
+ (77, 32, 86), (71, 32, 91), (66, 32, 96), (63, 32, 98),
+ (61, 32, 100), (61, 32, 100), (61, 32, 101), (62, 32, 100),
+ (64, 32, 97), (69, 32, 90), (66, 31, 88), (63, 30, 86),
+ (60, 29, 86), (58, 29, 87), (54, 28, 89), (53, 28, 88),
+ (51, 28, 88), (53, 28, 86), (56, 29, 85), (63, 29, 78),
+ (71, 30, 71), (73, 30, 69), (76, 31, 67), (81, 31, 64),
+ (84, 31, 63), (84, 33, 71), (79, 33, 79), (74, 33, 87),
+ (71, 32, 90), (69, 32, 94), (62, 31, 100), (54, 29, 102),
+ (46, 26, 91), (44, 24, 81), (43, 22, 72), (40, 21, 65),
+ (38, 21, 58), (30, 16, 43), (22, 13, 30), (21, 9, 24),
+ (17, 9, 17), (11, 7, 19), (16, 8, 25), (22, 10, 32),
+ (26, 12, 38), (30, 15, 45), (39, 19, 57), (50, 24, 69),
+ (63, 29, 83), (65, 30, 86), (68, 31, 89), (68, 31, 89),
+ (68, 32, 89), (69, 32, 90), (68, 32, 90), (68, 32, 90),
+ (69, 33, 90), (72, 33, 95), (72, 33, 98), (73, 33, 101),
+ (71, 35, 107), (68, 35, 111), (67, 33, 118), (67, 32, 123),
+ (60, 34, 125), (63, 33, 121), (67, 33, 117), (70, 33, 114),
+ (73, 34, 111), (81, 37, 106), (91, 39, 99), (102, 45, 94),
+ (107, 47, 89), (104, 49, 80), (102, 49, 79), (100, 49, 78),
+ (93, 43, 75), (80, 42, 73), (69, 37, 68), (59, 32, 65),
+ (50, 23, 62), (50, 23, 62), (50, 23, 63), (50, 23, 64),
+ (51, 23, 65), (53, 24, 67), (52, 24, 66), (52, 24, 64),
+ (50, 23, 63), (47, 21, 58), (43, 20, 53), (40, 20, 49),
+ (31, 16, 37), (23, 12, 27), (19, 9, 23), (16, 8, 17),
+ (18, 9, 15), (22, 10, 17), (26, 11, 20), (36, 13, 25),
+ (52, 19, 34), (66, 24, 48), (79, 29, 60), (86, 31, 68),
+ (91, 34, 75), (83, 44, 93), (79, 47, 96), (75, 51, 100),
+ (67, 56, 105), (58, 56, 105), (53, 55, 107), (51, 57, 106),
+ (53, 54, 101), (54, 49, 99), (56, 45, 97), (61, 38, 89),
+ (68, 33, 83), (73, 31, 78), (77, 33, 74), (78, 35, 71),
+ (79, 36, 72), (79, 34, 76), (81, 36, 78), (82, 38, 79),
+ (80, 40, 83), (76, 37, 89), (73, 35, 94), (73, 33, 93),
+ (68, 31, 88), (66, 30, 85), (64, 29, 83), (59, 27, 77),
+ (55, 25, 71), (51, 23, 65), (46, 21, 60), (43, 20, 55),
+ (41, 19, 52), (41, 18, 52), (43, 20, 55), (46, 22, 61),
+ (48, 24, 69), (48, 24, 76), (49, 25, 83), (50, 25, 85),
+ (52, 27, 86), (51, 27, 85), (49, 26, 83), (48, 25, 79),
+ (50, 26, 76), (54, 26, 74), (58, 27, 74), (58, 28, 75),
+ (61, 29, 79), (65, 31, 85), (69, 32, 90), (70, 33, 93),
+ (71, 33, 97), (69, 34, 102), (67, 33, 107), (62, 32, 109),
+ (62, 32, 112), (59, 32, 114), (60, 34, 115), (59, 33, 114),
+ (60, 33, 110), (61, 32, 107), (65, 34, 104), (69, 34, 100),
+ (72, 35, 96), (73, 34, 95), (73, 33, 95), (74, 33, 95),
+ (77, 34, 95), (85, 39, 97), (98, 46, 98), (112, 55, 99),
+ (129, 58, 95), (149, 68, 95), (165, 73, 95), (172, 83, 102),
+ (173, 81, 98), (179, 85, 95), (177, 80, 89), (166, 75, 94),
+ (144, 64, 96), (127, 58, 97), (114, 52, 92), (106, 46, 91),
+ (94, 39, 90), (85, 33, 87), (78, 30, 82), (73, 28, 77),
+ (65, 26, 73), (60, 25, 66), (58, 23, 60), (56, 21, 56),
+ (56, 24, 56), (52, 25, 56), (63, 34, 69), (71, 41, 78)
+ ),
+
+// 624 Rainbow_Sprinkles
+((30, 20, 51), (12, 37, 59), (12, 65, 83), (12, 93, 107),
+ (25, 110, 120), (39, 127, 133), (46, 142, 144), (53, 158, 155),
+ (77, 135, 150), (84, 133, 151), (91, 132, 153), (95, 124, 148),
+ (100, 116, 144), (117, 120, 146), (135, 124, 149), (146, 128, 154),
+ (157, 132, 159), (159, 138, 141), (171, 144, 141), (184, 150, 141),
+ (190, 163, 145), (197, 176, 149), (201, 173, 146), (206, 170, 144),
+ (224, 178, 140), (225, 146, 118), (226, 114, 97), (211, 94, 89),
+ (197, 74, 82), (188, 65, 79), (179, 56, 76), (152, 59, 107),
+ (147, 64, 143), (72, 50, 111), (51, 46, 101), (30, 42, 92),
+ (63, 61, 96), (97, 81, 101), (105, 86, 98), (113, 91, 95),
+ (179, 56, 60), (189, 47, 57), (199, 38, 54), (208, 29, 44),
+ (218, 21, 34), (216, 30, 40), (214, 39, 47), (228, 48, 48),
+ (196, 51, 60), (184, 101, 88), (172, 109, 92), (161, 118, 96),
+ (177, 137, 99), (193, 157, 102), (189, 158, 102), (186, 160, 102),
+ (161, 139, 112), (159, 147, 118), (157, 156, 125), (171, 154, 127),
+ (186, 152, 130), (200, 161, 131), (214, 170, 133), (233, 174, 128),
+ (240, 182, 127), (243, 208, 124), (245, 209, 122), (247, 211, 120),
+ (241, 208, 121), (236, 206, 122), (227, 189, 127), (218, 172, 123),
+ (182, 137, 126), (161, 125, 120), (141, 114, 114), (134, 114, 116),
+ (128, 114, 119), (128, 108, 121), (128, 103, 123), (127, 103, 130),
+ (137, 101, 130), (150, 85, 133), (150, 92, 135), (150, 100, 138),
+ (148, 108, 142), (146, 116, 147), (133, 122, 141), (118, 121, 139),
+ (134, 146, 135), (149, 134, 124), (165, 122, 113), (169, 116, 108),
+ (174, 110, 104), (177, 99, 105), (170, 92, 117), (166, 89, 124),
+ (170, 95, 130), (179, 118, 124), (192, 127, 110), (205, 137, 97),
+ (209, 143, 95), (214, 150, 94), (232, 144, 76), (236, 122, 56),
+ (245, 104, 44), (244, 96, 45), (244, 89, 46), (239, 85, 48),
+ (234, 81, 51), (225, 89, 62), (215, 89, 72), (202, 75, 79),
+ (191, 77, 88), (164, 70, 103), (166, 63, 114), (168, 56, 125),
+ (170, 41, 133), (167, 34, 136), (166, 44, 166), (157, 41, 163),
+ (153, 49, 137), (150, 58, 135), (148, 67, 133), (151, 71, 137),
+ (155, 76, 142), (160, 91, 146), (158, 110, 144), (157, 124, 146),
+ (167, 138, 134), (197, 171, 133), (198, 168, 128), (200, 165, 123),
+ (197, 156, 108), (194, 149, 100), (181, 142, 101), (163, 133, 107),
+ (128, 137, 130), (113, 125, 142), (99, 114, 155), (94, 109, 156),
+ (89, 104, 158), (125, 111, 163), (154, 125, 160), (148, 128, 134),
+ (179, 153, 128), (231, 206, 123), (235, 209, 118), (240, 213, 114),
+ (244, 207, 119), (249, 202, 125), (249, 181, 117), (250, 173, 118),
+ (246, 194, 142), (246, 194, 144), (246, 195, 146), (248, 199, 149),
+ (243, 183, 139), (247, 154, 117), (249, 127, 96), (247, 95, 75),
+ (251, 65, 52), (245, 49, 39), (242, 45, 35), (239, 41, 31),
+ (235, 57, 38), (224, 74, 51), (210, 68, 52), (202, 66, 54),
+ (181, 52, 52), (179, 51, 59), (178, 51, 66), (184, 37, 54),
+ (183, 35, 49), (187, 48, 57), (194, 54, 63), (210, 69, 62),
+ (223, 116, 84), (222, 154, 109), (229, 183, 126), (241, 203, 131),
+ (238, 208, 132), (237, 210, 136), (237, 200, 143), (221, 188, 147),
+ (195, 158, 143), (179, 151, 143), (164, 144, 144), (138, 139, 144),
+ (106, 109, 124), (73, 73, 103), (68, 60, 92), (96, 48, 91),
+ (97, 29, 65), (103, 14, 43), (154, 18, 36), (195, 29, 31),
+ (211, 48, 33), (234, 82, 44), (242, 109, 61), (241, 123, 73),
+ (246, 135, 75), (246, 148, 82), (244, 169, 93), (237, 188, 104),
+ (224, 192, 102), (217, 205, 89), (213, 217, 87), (216, 218, 89),
+ (220, 216, 85), (228, 207, 100), (241, 189, 111), (246, 156, 91),
+ (241, 116, 74), (234, 85, 65), (225, 54, 57), (208, 43, 65),
+ (191, 41, 71), (181, 42, 79), (173, 41, 91), (172, 41, 87),
+ (182, 54, 88), (198, 62, 91), (206, 61, 80), (210, 77, 83),
+ (216, 88, 88), (205, 83, 91), (192, 83, 97), (185, 84, 96),
+ (181, 78, 92), (181, 72, 86), (183, 74, 79), (192, 78, 78),
+ (204, 93, 85), (210, 112, 95), (213, 112, 97), (212, 116, 101),
+ (196, 115, 104), (178, 95, 96), (153, 96, 111), (133, 97, 136),
+ (103, 85, 118), (104, 89, 119), (95, 79, 124), (109, 77, 118),
+ (119, 75, 86), (151, 69, 69), (174, 56, 56), (193, 70, 51),
+ (205, 91, 50), (205, 90, 48), (168, 69, 44), (126, 56, 42),
+ (115, 46, 31), (72, 25, 32), (41, 29, 55), (38, 26, 49)
+ ),
+
+// 625 Rainforest
+((112, 86, 55), (141, 98, 52), (151, 104, 50), (162, 110, 49),
+ (158, 108, 59), (154, 106, 69), (148, 109, 73), (142, 112, 77),
+ (86, 125, 100), (67, 110, 109), (49, 95, 118), (37, 90, 107),
+ (25, 85, 97), (23, 85, 81), (21, 85, 66), (22, 82, 63),
+ (23, 80, 60), (26, 75, 33), (26, 71, 21), (27, 67, 9),
+ (30, 65, 8), (33, 63, 7), (33, 62, 7), (34, 62, 7),
+ (42, 61, 12), (57, 68, 11), (72, 75, 10), (88, 78, 9),
+ (104, 82, 8), (110, 84, 7), (117, 86, 7), (125, 85, 15),
+ (133, 86, 27), (121, 84, 50), (120, 77, 49), (120, 70, 49),
+ (125, 65, 55), (130, 61, 61), (125, 62, 65), (121, 63, 69),
+ (127, 76, 63), (128, 79, 73), (129, 82, 83), (112, 94, 94),
+ (96, 106, 105), (91, 114, 103), (86, 123, 102), (75, 112, 110),
+ (55, 110, 119), (12, 97, 121), (6, 93, 111), (1, 89, 102),
+ (0, 84, 96), (0, 80, 91), (1, 76, 88), (3, 73, 85),
+ (34, 56, 67), (54, 54, 61), (75, 52, 55), (89, 47, 51),
+ (104, 43, 48), (111, 39, 42), (119, 36, 36), (134, 20, 25),
+ (144, 15, 12), (135, 12, 1), (128, 12, 0), (121, 13, 0),
+ (115, 15, 0), (110, 17, 0), (93, 26, 0), (78, 32, 1),
+ (53, 46, 17), (45, 49, 20), (37, 53, 24), (28, 53, 23),
+ (19, 54, 23), (16, 52, 24), (13, 51, 26), (12, 48, 27),
+ (12, 44, 27), (14, 39, 15), (17, 35, 10), (21, 31, 6),
+ (25, 29, 4), (30, 27, 3), (41, 26, 1), (42, 25, 1),
+ (38, 21, 8), (39, 21, 7), (41, 21, 7), (43, 20, 6),
+ (45, 19, 6), (48, 19, 10), (51, 16, 20), (40, 26, 27),
+ (33, 40, 38), (22, 70, 63), (23, 79, 81), (24, 89, 99),
+ (21, 98, 107), (18, 107, 116), (10, 121, 132), (1, 136, 142),
+ (5, 135, 154), (8, 130, 151), (11, 125, 149), (10, 123, 146),
+ (10, 122, 144), (6, 117, 141), (7, 108, 135), (9, 98, 129),
+ (11, 91, 123), (5, 92, 118), (3, 93, 118), (1, 94, 118),
+ (1, 94, 118), (12, 87, 109), (25, 81, 96), (35, 79, 85),
+ (44, 75, 66), (53, 68, 52), (63, 61, 39), (66, 57, 33),
+ (70, 54, 27), (79, 41, 15), (76, 40, 11), (68, 43, 8),
+ (62, 39, 11), (45, 41, 29), (41, 43, 35), (37, 45, 41),
+ (32, 52, 46), (40, 54, 44), (47, 52, 44), (67, 51, 40),
+ (107, 47, 43), (132, 48, 37), (157, 50, 31), (167, 49, 26),
+ (177, 49, 22), (195, 43, 12), (199, 30, 10), (198, 31, 9),
+ (187, 30, 11), (146, 38, 16), (134, 38, 16), (122, 39, 17),
+ (97, 41, 18), (74, 41, 25), (53, 41, 36), (37, 42, 46),
+ (19, 60, 61), (18, 63, 64), (18, 66, 67), (26, 67, 67),
+ (34, 64, 68), (48, 63, 64), (58, 69, 57), (58, 79, 51),
+ (66, 83, 38), (81, 79, 17), (84, 77, 12), (88, 76, 7),
+ (82, 81, 4), (80, 82, 1), (78, 85, 0), (81, 80, 0),
+ (99, 71, 0), (103, 68, 0), (108, 65, 0), (113, 65, 4),
+ (117, 57, 11), (108, 58, 25), (100, 63, 39), (90, 64, 49),
+ (76, 70, 62), (69, 64, 69), (49, 61, 80), (29, 61, 86),
+ (14, 62, 87), (1, 63, 87), (0, 57, 82), (0, 52, 80),
+ (0, 55, 69), (0, 57, 66), (0, 60, 63), (0, 56, 58),
+ (0, 52, 57), (0, 48, 57), (0, 50, 58), (2, 56, 53),
+ (6, 51, 47), (11, 46, 40), (12, 35, 37), (10, 32, 38),
+ (9, 37, 32), (10, 39, 28), (19, 51, 17), (24, 54, 16),
+ (27, 65, 26), (25, 81, 35), (22, 90, 41), (22, 103, 45),
+ (21, 106, 49), (22, 108, 61), (20, 116, 79), (19, 119, 89),
+ (15, 120, 100), (9, 115, 108), (5, 110, 114), (0, 108, 124),
+ (0, 108, 125), (0, 109, 123), (2, 103, 119), (13, 95, 110),
+ (26, 87, 102), (38, 83, 91), (40, 85, 78), (41, 89, 67),
+ (52, 84, 50), (68, 75, 38), (95, 66, 27), (108, 64, 19),
+ (119, 75, 14), (133, 76, 8), (147, 76, 8), (167, 72, 11),
+ (181, 75, 15), (196, 82, 18), (207, 79, 19), (218, 73, 22),
+ (215, 66, 27), (205, 71, 31), (198, 73, 32), (186, 69, 27),
+ (181, 62, 22), (172, 48, 18), (154, 48, 16), (139, 46, 14),
+ (121, 43, 12), (109, 43, 8), (103, 39, 5), (95, 37, 7),
+ (90, 33, 12), (82, 28, 14), (76, 27, 18), (72, 31, 19),
+ (65, 38, 26), (59, 45, 41), (53, 50, 49), (51, 53, 61),
+ (61, 48, 59), (71, 51, 54), (86, 58, 54), (101, 71, 48)
+ ),
+
+// 626 Rainy_Day_in_Spring
+((74, 101, 72), (82, 108, 82), (78, 97, 75), (75, 87, 68),
+ (75, 83, 66), (75, 80, 64), (75, 75, 63), (75, 71, 62),
+ (65, 46, 45), (60, 37, 36), (55, 28, 28), (50, 24, 24),
+ (46, 21, 20), (41, 22, 18), (36, 24, 17), (35, 27, 17),
+ (34, 30, 18), (29, 36, 18), (25, 39, 18), (22, 42, 19),
+ (20, 47, 21), (18, 52, 24), (18, 54, 25), (19, 57, 26),
+ (24, 63, 30), (24, 64, 31), (24, 65, 33), (26, 64, 33),
+ (28, 64, 34), (30, 63, 34), (32, 63, 34), (37, 61, 36),
+ (41, 61, 39), (49, 68, 46), (58, 76, 54), (67, 84, 63),
+ (76, 84, 68), (85, 84, 74), (85, 82, 74), (86, 81, 74),
+ (86, 83, 75), (91, 80, 76), (96, 78, 77), (96, 69, 74),
+ (96, 61, 71), (96, 59, 70), (96, 57, 70), (101, 55, 71),
+ (105, 55, 73), (102, 58, 76), (98, 61, 76), (95, 64, 77),
+ (85, 67, 71), (76, 70, 66), (69, 71, 63), (63, 72, 61),
+ (48, 77, 55), (42, 84, 53), (37, 91, 52), (33, 97, 51),
+ (30, 104, 51), (31, 103, 51), (33, 102, 52), (35, 101, 53),
+ (40, 99, 54), (42, 98, 55), (44, 89, 53), (47, 81, 51),
+ (50, 77, 50), (54, 73, 50), (61, 67, 53), (68, 66, 57),
+ (86, 68, 71), (94, 75, 80), (102, 82, 89), (109, 96, 98),
+ (117, 111, 108), (119, 116, 112), (121, 122, 116), (121, 134, 122),
+ (119, 141, 124), (106, 141, 115), (98, 129, 104), (91, 118, 94),
+ (85, 110, 88), (80, 103, 82), (66, 85, 67), (55, 67, 53),
+ (39, 38, 28), (39, 30, 26), (39, 23, 24), (43, 23, 27),
+ (48, 23, 31), (59, 36, 41), (76, 52, 57), (96, 70, 77),
+ (116, 91, 100), (158, 125, 140), (177, 138, 158), (196, 152, 177),
+ (202, 157, 183), (208, 162, 189), (214, 167, 197), (218, 167, 196),
+ (214, 156, 188), (208, 147, 181), (202, 139, 175), (200, 134, 170),
+ (199, 130, 165), (191, 130, 160), (188, 129, 157), (190, 127, 157),
+ (187, 125, 156), (181, 114, 145), (178, 112, 143), (175, 111, 141),
+ (172, 108, 138), (170, 106, 137), (167, 99, 132), (159, 92, 124),
+ (138, 77, 103), (129, 71, 94), (120, 65, 86), (115, 62, 82),
+ (111, 60, 79), (103, 58, 72), (97, 56, 67), (91, 51, 60),
+ (85, 46, 56), (72, 39, 46), (69, 40, 44), (67, 41, 43),
+ (62, 43, 39), (60, 44, 39), (60, 44, 39), (59, 44, 40),
+ (62, 46, 41), (65, 48, 44), (69, 50, 47), (72, 50, 49),
+ (76, 51, 51), (86, 52, 59), (96, 54, 66), (103, 57, 72),
+ (112, 61, 79), (134, 73, 97), (140, 77, 102), (146, 81, 107),
+ (155, 90, 121), (164, 100, 130), (173, 112, 142), (178, 124, 152),
+ (180, 142, 163), (178, 145, 163), (176, 148, 163), (173, 147, 162),
+ (175, 149, 165), (174, 153, 166), (173, 155, 167), (169, 167, 166),
+ (159, 167, 159), (161, 161, 157), (162, 155, 155), (164, 149, 154),
+ (165, 148, 153), (157, 143, 145), (144, 135, 132), (135, 128, 124),
+ (119, 93, 102), (117, 86, 98), (115, 80, 94), (110, 74, 87),
+ (109, 75, 86), (112, 79, 91), (119, 87, 99), (130, 99, 113),
+ (144, 114, 130), (160, 132, 146), (173, 151, 160), (181, 166, 172),
+ (184, 179, 179), (186, 189, 185), (183, 193, 186), (176, 197, 181),
+ (152, 190, 160), (147, 187, 156), (142, 184, 152), (134, 174, 144),
+ (123, 166, 134), (110, 156, 121), (96, 143, 105), (84, 131, 95),
+ (80, 119, 88), (77, 113, 85), (76, 107, 81), (75, 97, 74),
+ (75, 90, 71), (80, 83, 71), (87, 80, 75), (97, 80, 81),
+ (109, 77, 85), (118, 74, 88), (124, 70, 90), (125, 67, 90),
+ (122, 66, 88), (116, 62, 81), (107, 58, 73), (94, 54, 63),
+ (79, 51, 54), (67, 49, 46), (56, 49, 40), (51, 50, 37),
+ (51, 52, 37), (54, 56, 42), (65, 61, 51), (78, 68, 61),
+ (97, 77, 77), (117, 86, 94), (135, 99, 112), (156, 111, 131),
+ (172, 121, 145), (188, 133, 161), (204, 144, 177), (213, 157, 190),
+ (223, 166, 201), (229, 174, 208), (233, 180, 215), (239, 189, 223),
+ (238, 199, 227), (238, 206, 229), (234, 211, 226), (231, 213, 223),
+ (231, 216, 225), (223, 222, 222), (213, 223, 216), (196, 220, 201),
+ (173, 210, 181), (156, 191, 162), (138, 172, 142), (124, 151, 124),
+ (109, 129, 106), (89, 109, 88), (72, 87, 70), (59, 66, 54),
+ (51, 50, 41), (49, 38, 34), (47, 33, 30), (44, 33, 30),
+ (46, 35, 33), (47, 40, 35), (55, 51, 43), (59, 58, 46),
+ (59, 64, 49), (59, 73, 52), (58, 75, 51), (66, 90, 62)
+ ),
+
+// 627 Rainy_Forset
+((118, 126, 87), (157, 130, 79), (169, 125, 69), (182, 121, 59),
+ (188, 119, 51), (194, 117, 43), (201, 115, 41), (209, 113, 40),
+ (215, 77, 32), (191, 67, 26), (168, 57, 21), (155, 56, 21),
+ (143, 55, 22), (133, 54, 23), (124, 53, 25), (115, 53, 25),
+ (106, 53, 25), (77, 52, 25), (71, 51, 25), (66, 50, 25),
+ (60, 46, 25), (55, 42, 25), (52, 39, 24), (50, 36, 23),
+ (49, 33, 19), (47, 34, 19), (46, 35, 19), (50, 40, 24),
+ (55, 45, 30), (58, 48, 35), (62, 52, 40), (69, 59, 57),
+ (74, 74, 76), (94, 94, 103), (99, 97, 106), (104, 101, 109),
+ (113, 111, 115), (123, 121, 121), (130, 124, 123), (137, 127, 126),
+ (137, 121, 118), (132, 117, 107), (128, 113, 97), (127, 103, 90),
+ (126, 94, 83), (122, 90, 81), (118, 86, 80), (109, 76, 76),
+ (94, 67, 69), (74, 43, 42), (70, 38, 33), (67, 33, 25),
+ (66, 30, 22), (65, 28, 19), (65, 27, 18), (66, 26, 18),
+ (72, 30, 18), (76, 35, 19), (80, 40, 21), (86, 45, 22),
+ (93, 50, 23), (96, 53, 23), (99, 56, 23), (103, 57, 25),
+ (103, 60, 26), (106, 62, 28), (105, 59, 26), (104, 56, 25),
+ (101, 54, 25), (99, 53, 25), (94, 55, 23), (90, 55, 23),
+ (82, 57, 23), (79, 59, 24), (76, 62, 26), (72, 64, 27),
+ (69, 66, 28), (68, 66, 28), (67, 67, 28), (65, 66, 28),
+ (63, 62, 28), (63, 52, 26), (61, 49, 27), (60, 47, 29),
+ (58, 48, 32), (57, 50, 36), (56, 56, 49), (62, 69, 70),
+ (82, 111, 133), (100, 132, 157), (118, 154, 181), (127, 158, 185),
+ (137, 162, 189), (137, 158, 175), (140, 158, 172), (128, 161, 189),
+ (138, 155, 174), (144, 114, 111), (125, 88, 82), (106, 63, 53),
+ (98, 56, 47), (90, 50, 42), (84, 43, 32), (84, 39, 26),
+ (77, 36, 19), (71, 37, 18), (65, 38, 18), (61, 38, 18),
+ (57, 38, 18), (52, 38, 18), (46, 33, 18), (42, 35, 19),
+ (36, 35, 19), (32, 35, 21), (31, 33, 21), (30, 32, 22),
+ (35, 32, 22), (39, 32, 23), (46, 35, 23), (52, 36, 22),
+ (66, 36, 22), (75, 39, 22), (84, 42, 22), (89, 45, 22),
+ (94, 49, 22), (104, 57, 26), (117, 59, 26), (127, 62, 26),
+ (134, 63, 25), (137, 70, 30), (137, 72, 31), (138, 74, 33),
+ (143, 79, 39), (147, 82, 43), (148, 83, 46), (144, 82, 53),
+ (124, 89, 65), (115, 93, 67), (107, 97, 69), (105, 96, 69),
+ (104, 96, 69), (96, 90, 63), (83, 83, 59), (67, 73, 55),
+ (52, 65, 47), (40, 55, 38), (41, 55, 38), (43, 56, 38),
+ (49, 63, 39), (59, 74, 40), (63, 92, 50), (74, 106, 62),
+ (109, 121, 76), (124, 126, 70), (140, 131, 65), (164, 150, 62),
+ (191, 170, 60), (216, 175, 70), (238, 175, 87), (255, 168, 90),
+ (255, 165, 94), (245, 164, 94), (240, 163, 100), (235, 162, 107),
+ (215, 147, 114), (195, 134, 118), (168, 121, 111), (130, 100, 101),
+ (83, 66, 76), (80, 59, 69), (77, 53, 63), (79, 45, 47),
+ (80, 40, 38), (84, 39, 29), (93, 42, 25), (106, 49, 26),
+ (121, 57, 32), (133, 72, 36), (144, 90, 39), (162, 103, 35),
+ (171, 114, 33), (181, 114, 33), (188, 111, 38), (192, 117, 40),
+ (235, 124, 36), (235, 124, 39), (235, 124, 42), (231, 114, 50),
+ (209, 109, 62), (207, 94, 62), (208, 92, 63), (194, 94, 72),
+ (177, 97, 80), (150, 106, 97), (121, 101, 101), (101, 92, 96),
+ (84, 80, 90), (74, 69, 77), (73, 66, 73), (69, 66, 69),
+ (65, 62, 63), (59, 56, 57), (55, 49, 47), (57, 46, 40),
+ (62, 50, 35), (66, 56, 33), (72, 62, 35), (74, 69, 38),
+ (79, 76, 40), (80, 83, 45), (80, 90, 45), (82, 92, 45),
+ (86, 92, 42), (89, 90, 42), (93, 87, 42), (90, 89, 42),
+ (86, 89, 42), (87, 92, 39), (86, 94, 39), (89, 96, 40),
+ (86, 97, 42), (80, 97, 45), (80, 99, 45), (77, 97, 45),
+ (79, 94, 43), (77, 89, 45), (73, 83, 47), (70, 79, 49),
+ (67, 74, 56), (70, 69, 56), (72, 62, 59), (73, 56, 60),
+ (70, 57, 60), (69, 57, 65), (67, 59, 66), (69, 57, 65),
+ (70, 53, 63), (72, 50, 60), (72, 52, 60), (70, 56, 60),
+ (70, 63, 60), (73, 69, 62), (77, 73, 60), (82, 74, 60),
+ (83, 76, 59), (82, 83, 59), (86, 92, 62), (90, 100, 63),
+ (96, 107, 69), (92, 101, 72), (89, 94, 74), (90, 93, 79),
+ (90, 94, 83), (101, 106, 86), (103, 111, 90), (107, 118, 89)
+ ),
+
+// 628 Red_Light
+((46, 21, 37), (45, 26, 32), (42, 24, 31), (39, 22, 31),
+ (32, 17, 33), (26, 12, 35), (23, 11, 38), (21, 11, 41),
+ (18, 13, 56), (15, 11, 61), (13, 9, 67), (9, 7, 67),
+ (6, 5, 68), (3, 3, 66), (0, 2, 64), (0, 4, 62),
+ (1, 6, 60), (6, 16, 54), (7, 17, 49), (8, 18, 45),
+ (7, 16, 38), (6, 14, 32), (6, 14, 28), (6, 14, 25),
+ (6, 16, 16), (7, 17, 14), (8, 18, 12), (7, 15, 12),
+ (6, 12, 13), (5, 9, 13), (5, 7, 13), (2, 2, 12),
+ (0, 0, 11), (0, 0, 7), (0, 0, 6), (1, 0, 6),
+ (4, 2, 6), (7, 4, 7), (11, 6, 7), (15, 8, 8),
+ (40, 15, 8), (54, 16, 9), (69, 17, 11), (78, 22, 17),
+ (88, 28, 23), (90, 30, 28), (93, 33, 33), (93, 39, 42),
+ (92, 43, 49), (92, 36, 57), (88, 32, 58), (84, 29, 59),
+ (75, 27, 63), (67, 26, 68), (59, 27, 70), (51, 28, 73),
+ (24, 18, 72), (13, 11, 67), (3, 4, 62), (1, 2, 54),
+ (0, 0, 47), (0, 0, 44), (0, 0, 41), (0, 0, 35),
+ (0, 0, 30), (3, 2, 22), (6, 5, 20), (9, 9, 19),
+ (11, 11, 19), (13, 13, 20), (17, 16, 22), (19, 19, 25),
+ (25, 24, 27), (27, 26, 28), (29, 29, 29), (29, 29, 32),
+ (29, 30, 35), (28, 29, 37), (28, 29, 40), (25, 27, 43),
+ (23, 24, 45), (22, 20, 40), (24, 17, 35), (27, 15, 31),
+ (31, 13, 29), (36, 11, 28), (46, 7, 24), (59, 4, 22),
+ (93, 1, 19), (109, 7, 16), (126, 14, 13), (133, 15, 12),
+ (140, 16, 12), (154, 17, 16), (164, 17, 18), (173, 17, 22),
+ (181, 13, 21), (185, 15, 21), (178, 16, 19), (171, 17, 17),
+ (162, 16, 17), (154, 16, 18), (136, 16, 24), (116, 12, 26),
+ (83, 2, 30), (73, 4, 27), (64, 6, 25), (62, 8, 24),
+ (60, 10, 23), (58, 17, 23), (55, 24, 22), (53, 29, 22),
+ (49, 31, 24), (48, 33, 30), (49, 33, 32), (51, 34, 35),
+ (66, 36, 34), (84, 38, 33), (103, 40, 30), (120, 40, 26),
+ (149, 31, 24), (156, 25, 24), (164, 20, 25), (171, 18, 25),
+ (178, 17, 25), (192, 17, 24), (206, 18, 18), (218, 16, 18),
+ (228, 13, 16), (222, 9, 13), (217, 8, 12), (212, 7, 11),
+ (197, 9, 12), (182, 15, 11), (169, 22, 14), (159, 28, 17),
+ (139, 48, 21), (123, 46, 19), (108, 44, 17), (100, 42, 17),
+ (92, 41, 17), (80, 41, 16), (73, 34, 16), (79, 38, 20),
+ (87, 42, 20), (101, 41, 14), (105, 38, 14), (109, 35, 15),
+ (111, 29, 15), (105, 19, 16), (103, 12, 21), (102, 10, 26),
+ (98, 15, 33), (98, 17, 35), (98, 19, 38), (100, 20, 44),
+ (102, 25, 52), (101, 32, 55), (100, 37, 54), (100, 38, 53),
+ (100, 38, 49), (105, 34, 39), (110, 32, 38), (116, 30, 37),
+ (129, 29, 36), (140, 29, 30), (150, 28, 24), (160, 23, 18),
+ (159, 18, 8), (157, 17, 8), (155, 17, 8), (151, 18, 12),
+ (143, 20, 13), (133, 23, 15), (123, 23, 16), (112, 20, 14),
+ (95, 16, 15), (79, 16, 17), (66, 19, 22), (55, 23, 25),
+ (46, 29, 27), (39, 35, 31), (38, 38, 32), (35, 38, 31),
+ (30, 33, 35), (30, 33, 37), (30, 33, 39), (34, 35, 43),
+ (40, 39, 49), (51, 44, 54), (63, 48, 59), (71, 53, 63),
+ (70, 50, 67), (66, 46, 69), (61, 39, 69), (52, 33, 68),
+ (47, 29, 65), (47, 23, 63), (50, 23, 57), (52, 20, 54),
+ (53, 16, 49), (51, 11, 43), (43, 6, 37), (34, 4, 31),
+ (27, 0, 26), (24, 0, 19), (23, 0, 14), (23, 0, 10),
+ (25, 0, 7), (25, 0, 5), (26, 0, 4), (25, 0, 5),
+ (21, 0, 5), (16, 0, 6), (11, 0, 6), (7, 0, 6),
+ (3, 0, 5), (1, 0, 5), (0, 0, 5), (1, 0, 4),
+ (2, 0, 5), (4, 0, 5), (5, 0, 5), (5, 0, 6),
+ (6, 1, 6), (5, 1, 5), (5, 1, 4), (7, 0, 4),
+ (11, 0, 4), (18, 1, 3), (25, 0, 4), (33, 0, 4),
+ (41, 1, 5), (47, 1, 4), (53, 1, 4), (56, 0, 3),
+ (62, 1, 2), (67, 1, 3), (70, 2, 5), (74, 5, 8),
+ (78, 8, 11), (81, 11, 14), (79, 14, 17), (78, 16, 21),
+ (79, 15, 26), (72, 14, 32), (66, 14, 36), (61, 15, 41),
+ (59, 21, 44), (58, 26, 46), (56, 28, 46), (58, 27, 45),
+ (56, 25, 43), (53, 22, 41), (48, 17, 40), (47, 17, 38)
+ ),
+
+// 629 Riddle
+((50, 16, 8), (51, 15, 11), (47, 14, 12), (44, 14, 14),
+ (39, 16, 17), (34, 19, 20), (31, 18, 22), (29, 17, 25),
+ (23, 15, 29), (26, 19, 26), (30, 23, 24), (42, 27, 26),
+ (55, 31, 29), (72, 40, 38), (89, 49, 48), (99, 56, 50),
+ (109, 63, 53), (146, 92, 62), (164, 110, 80), (182, 129, 98),
+ (184, 139, 108), (186, 149, 119), (182, 147, 118), (179, 145, 117),
+ (163, 132, 109), (148, 119, 107), (133, 106, 106), (126, 92, 110),
+ (120, 78, 115), (122, 72, 119), (125, 66, 123), (122, 52, 124),
+ (123, 41, 131), (122, 29, 138), (118, 28, 134), (115, 28, 130),
+ (109, 26, 119), (103, 25, 108), (94, 25, 99), (86, 25, 90),
+ (56, 25, 46), (49, 25, 37), (42, 26, 29), (51, 25, 41),
+ (60, 24, 53), (69, 25, 64), (78, 27, 75), (90, 35, 97),
+ (99, 43, 116), (103, 54, 136), (100, 56, 137), (97, 59, 139),
+ (86, 67, 132), (75, 75, 125), (70, 80, 120), (65, 85, 115),
+ (53, 111, 102), (56, 116, 100), (59, 122, 99), (66, 133, 104),
+ (74, 145, 110), (74, 152, 116), (75, 160, 122), (81, 169, 125),
+ (86, 171, 120), (81, 153, 89), (66, 145, 76), (52, 138, 63),
+ (49, 133, 55), (47, 128, 48), (47, 114, 34), (53, 99, 22),
+ (55, 68, 13), (62, 59, 14), (70, 50, 15), (82, 52, 19),
+ (95, 54, 24), (101, 57, 31), (107, 60, 38), (118, 63, 57),
+ (131, 64, 79), (152, 82, 116), (158, 103, 130), (165, 124, 144),
+ (166, 129, 148), (168, 135, 152), (168, 138, 161), (157, 139, 150),
+ (128, 139, 115), (113, 133, 97), (99, 127, 79), (91, 121, 70),
+ (83, 116, 62), (72, 102, 47), (62, 93, 36), (55, 84, 35),
+ (60, 77, 36), (75, 74, 44), (84, 83, 52), (94, 92, 61),
+ (101, 97, 67), (108, 102, 74), (116, 114, 85), (123, 127, 97),
+ (143, 146, 122), (146, 152, 132), (150, 158, 142), (147, 161, 142),
+ (145, 165, 143), (139, 166, 139), (136, 166, 132), (132, 164, 121),
+ (131, 158, 114), (136, 150, 102), (139, 148, 100), (142, 146, 99),
+ (141, 150, 97), (138, 153, 98), (143, 156, 103), (151, 161, 115),
+ (170, 159, 145), (165, 158, 148), (160, 158, 152), (155, 158, 146),
+ (150, 158, 141), (136, 151, 128), (124, 141, 113), (109, 129, 100),
+ (96, 115, 86), (66, 93, 51), (58, 91, 45), (50, 90, 40),
+ (33, 83, 38), (21, 77, 43), (17, 62, 44), (17, 49, 43),
+ (20, 40, 48), (21, 38, 55), (23, 37, 62), (25, 35, 60),
+ (27, 34, 59), (31, 35, 54), (37, 43, 53), (47, 57, 66),
+ (61, 70, 85), (86, 94, 120), (92, 100, 123), (98, 107, 127),
+ (107, 120, 132), (122, 131, 139), (134, 139, 145), (141, 139, 149),
+ (137, 132, 131), (134, 131, 123), (132, 131, 116), (129, 135, 100),
+ (124, 139, 89), (118, 146, 85), (111, 149, 82), (106, 148, 80),
+ (106, 151, 80), (103, 153, 79), (101, 153, 81), (100, 153, 83),
+ (91, 141, 83), (83, 123, 85), (81, 104, 88), (74, 90, 90),
+ (67, 86, 95), (65, 84, 96), (63, 82, 97), (64, 73, 94),
+ (62, 65, 93), (61, 66, 88), (62, 74, 81), (64, 84, 77),
+ (70, 92, 72), (73, 96, 81), (75, 101, 89), (82, 100, 103),
+ (91, 101, 119), (104, 97, 129), (116, 94, 146), (126, 97, 162),
+ (159, 98, 196), (166, 98, 203), (173, 98, 211), (183, 96, 217),
+ (179, 92, 220), (173, 90, 215), (166, 90, 197), (146, 82, 175),
+ (128, 80, 150), (105, 69, 133), (82, 60, 118), (71, 60, 102),
+ (50, 47, 74), (34, 38, 45), (19, 25, 25), (8, 17, 11),
+ (13, 18, 9), (22, 20, 8), (30, 26, 7), (34, 25, 12),
+ (39, 35, 19), (45, 39, 31), (56, 39, 43), (63, 40, 48),
+ (61, 33, 50), (57, 32, 47), (49, 32, 46), (47, 30, 52),
+ (43, 28, 55), (36, 22, 56), (26, 15, 52), (20, 14, 40),
+ (16, 13, 33), (15, 15, 29), (16, 16, 26), (15, 13, 27),
+ (19, 13, 26), (27, 9, 23), (38, 11, 20), (52, 17, 16),
+ (63, 19, 27), (71, 31, 38), (78, 46, 49), (83, 60, 58),
+ (88, 78, 52), (96, 90, 57), (98, 103, 66), (101, 127, 78),
+ (103, 144, 89), (101, 163, 89), (104, 173, 86), (104, 172, 90),
+ (110, 176, 98), (118, 181, 107), (125, 186, 115), (134, 187, 116),
+ (135, 183, 118), (137, 175, 123), (135, 163, 129), (133, 149, 130),
+ (126, 130, 118), (111, 114, 97), (100, 100, 79), (85, 86, 66),
+ (77, 68, 62), (67, 49, 54), (56, 34, 39), (50, 26, 25),
+ (41, 25, 11), (42, 23, 7), (43, 21, 6), (46, 17, 7)
+ ),
+
+// 630 Riverside
+((82, 104, 100), (90, 97, 108), (93, 92, 113), (96, 88, 118),
+ (92, 82, 119), (88, 77, 121), (84, 75, 121), (81, 74, 121),
+ (67, 70, 115), (66, 68, 111), (65, 67, 107), (66, 66, 103),
+ (68, 66, 100), (70, 65, 94), (72, 65, 89), (71, 64, 84),
+ (70, 64, 79), (68, 60, 62), (69, 56, 62), (70, 52, 62),
+ (73, 50, 67), (76, 48, 73), (77, 47, 77), (79, 47, 81),
+ (82, 48, 84), (82, 51, 82), (82, 54, 80), (79, 58, 80),
+ (77, 63, 80), (75, 63, 81), (73, 64, 83), (72, 66, 87),
+ (72, 63, 92), (78, 65, 101), (86, 69, 102), (94, 74, 104),
+ (97, 77, 105), (101, 81, 106), (103, 79, 105), (106, 78, 105),
+ (115, 78, 107), (122, 78, 108), (130, 79, 109), (131, 78, 107),
+ (132, 78, 106), (130, 76, 103), (128, 75, 100), (123, 74, 94),
+ (118, 75, 93), (115, 87, 101), (111, 96, 106), (108, 106, 111),
+ (102, 112, 118), (97, 118, 125), (96, 121, 130), (95, 124, 136),
+ (97, 135, 164), (101, 143, 180), (105, 151, 197), (109, 158, 204),
+ (113, 166, 211), (114, 166, 212), (116, 166, 214), (120, 162, 216),
+ (129, 156, 213), (143, 139, 213), (142, 133, 205), (142, 128, 198),
+ (140, 124, 191), (139, 120, 185), (132, 109, 175), (133, 101, 164),
+ (133, 82, 138), (131, 79, 127), (130, 76, 117), (125, 73, 105),
+ (120, 71, 93), (118, 71, 90), (116, 72, 87), (113, 75, 82),
+ (118, 78, 80), (128, 92, 83), (135, 100, 85), (142, 109, 87),
+ (147, 114, 86), (152, 119, 85), (159, 128, 85), (171, 137, 88),
+ (189, 145, 98), (190, 148, 113), (192, 152, 128), (191, 152, 134),
+ (191, 152, 141), (187, 150, 153), (182, 147, 165), (180, 141, 163),
+ (174, 130, 160), (159, 115, 158), (147, 107, 156), (135, 99, 154),
+ (128, 95, 153), (121, 91, 153), (113, 85, 144), (106, 76, 127),
+ (99, 68, 96), (98, 65, 83), (97, 62, 70), (97, 61, 66),
+ (98, 60, 62), (101, 59, 57), (105, 61, 58), (109, 67, 60),
+ (115, 73, 59), (131, 83, 65), (133, 85, 68), (136, 88, 71),
+ (142, 91, 74), (145, 90, 80), (144, 91, 86), (140, 91, 85),
+ (138, 91, 80), (132, 91, 79), (126, 91, 79), (124, 88, 80),
+ (122, 86, 81), (114, 79, 85), (103, 73, 86), (98, 66, 84),
+ (93, 59, 78), (86, 56, 68), (85, 56, 67), (85, 56, 67),
+ (86, 57, 70), (87, 58, 74), (95, 59, 82), (102, 59, 84),
+ (111, 63, 76), (110, 63, 72), (110, 63, 68), (107, 61, 65),
+ (104, 60, 63), (101, 58, 66), (101, 56, 69), (102, 59, 74),
+ (104, 60, 79), (115, 69, 91), (116, 72, 92), (118, 75, 94),
+ (117, 76, 101), (116, 75, 109), (114, 77, 117), (112, 83, 129),
+ (120, 97, 154), (124, 103, 160), (128, 110, 167), (134, 123, 176),
+ (139, 130, 180), (142, 139, 176), (142, 150, 173), (142, 158, 170),
+ (142, 166, 166), (142, 184, 162), (141, 183, 160), (141, 182, 159),
+ (137, 180, 154), (135, 177, 147), (135, 175, 138), (134, 171, 129),
+ (131, 165, 122), (129, 160, 121), (127, 156, 121), (117, 148, 122),
+ (107, 138, 126), (101, 134, 130), (96, 130, 134), (91, 127, 139),
+ (89, 125, 143), (89, 121, 143), (88, 118, 143), (86, 114, 145),
+ (84, 113, 149), (86, 117, 155), (86, 125, 157), (89, 132, 157),
+ (85, 133, 152), (84, 130, 149), (84, 128, 146), (79, 122, 137),
+ (77, 114, 134), (75, 109, 136), (79, 109, 139), (81, 110, 143),
+ (83, 111, 150), (88, 110, 156), (88, 109, 156), (88, 107, 155),
+ (84, 102, 156), (82, 96, 153), (80, 90, 148), (78, 85, 146),
+ (80, 78, 150), (81, 74, 149), (82, 71, 143), (84, 71, 139),
+ (84, 70, 132), (82, 70, 121), (78, 71, 113), (76, 73, 110),
+ (75, 81, 108), (74, 91, 106), (77, 103, 111), (84, 113, 122),
+ (92, 125, 131), (98, 132, 142), (102, 138, 157), (105, 144, 168),
+ (107, 152, 179), (106, 161, 186), (106, 165, 194), (106, 170, 195),
+ (106, 165, 196), (104, 156, 196), (101, 141, 191), (96, 126, 182),
+ (90, 116, 170), (83, 105, 158), (79, 98, 144), (76, 90, 129),
+ (74, 84, 115), (73, 76, 104), (72, 67, 88), (71, 61, 74),
+ (68, 57, 63), (69, 54, 53), (71, 53, 45), (75, 54, 41),
+ (80, 56, 41), (87, 56, 41), (93, 60, 42), (95, 65, 44),
+ (98, 73, 48), (102, 84, 51), (104, 93, 56), (104, 99, 59),
+ (103, 100, 62), (100, 105, 67), (94, 107, 71), (92, 113, 76),
+ (93, 121, 81), (96, 132, 86), (100, 138, 86), (103, 138, 84),
+ (103, 134, 86), (97, 125, 87), (91, 117, 88), (85, 106, 93)
+ ),
+
+// 631 Rose_Bush
+((162, 149, 111), (153, 149, 103), (150, 125, 97), (148, 101, 92),
+ (145, 86, 90), (142, 72, 89), (139, 65, 87), (137, 58, 85),
+ (127, 31, 69), (120, 33, 65), (114, 35, 62), (113, 36, 62),
+ (113, 38, 63), (113, 39, 64), (113, 40, 65), (113, 40, 66),
+ (113, 40, 68), (118, 33, 73), (113, 33, 70), (109, 33, 67),
+ (109, 31, 64), (109, 30, 61), (109, 29, 60), (109, 29, 59),
+ (113, 34, 59), (118, 34, 62), (124, 35, 65), (122, 40, 63),
+ (121, 45, 61), (121, 45, 60), (121, 46, 59), (122, 46, 60),
+ (122, 46, 61), (133, 43, 72), (144, 36, 79), (155, 30, 86),
+ (159, 28, 89), (163, 27, 92), (161, 29, 91), (159, 32, 91),
+ (145, 46, 89), (138, 54, 93), (131, 62, 98), (132, 68, 107),
+ (134, 74, 117), (137, 76, 124), (141, 78, 132), (154, 79, 142),
+ (166, 86, 152), (185, 101, 162), (187, 111, 168), (190, 121, 175),
+ (191, 128, 181), (192, 136, 187), (184, 136, 191), (177, 137, 196),
+ (195, 128, 206), (203, 123, 204), (211, 118, 202), (215, 111, 199),
+ (219, 105, 197), (219, 103, 194), (219, 102, 192), (220, 96, 184),
+ (220, 84, 173), (215, 60, 154), (212, 48, 143), (209, 36, 133),
+ (207, 30, 129), (206, 25, 125), (200, 21, 118), (192, 23, 111),
+ (182, 33, 100), (179, 39, 98), (177, 46, 97), (175, 54, 97),
+ (174, 62, 97), (176, 61, 96), (179, 60, 96), (178, 60, 98),
+ (177, 61, 99), (174, 62, 104), (175, 66, 108), (176, 70, 113),
+ (176, 72, 117), (177, 74, 122), (178, 83, 132), (186, 84, 138),
+ (198, 78, 153), (201, 69, 154), (205, 60, 155), (205, 54, 153),
+ (206, 49, 151), (207, 38, 145), (207, 28, 139), (207, 24, 131),
+ (206, 21, 125), (188, 28, 114), (180, 31, 110), (173, 34, 106),
+ (171, 35, 104), (169, 37, 102), (166, 42, 107), (165, 47, 112),
+ (174, 60, 122), (175, 68, 128), (176, 76, 135), (176, 79, 136),
+ (177, 82, 137), (177, 85, 138), (177, 89, 138), (175, 94, 146),
+ (173, 103, 158), (185, 124, 185), (190, 130, 190), (196, 136, 196),
+ (208, 144, 204), (217, 153, 201), (225, 158, 184), (228, 159, 174),
+ (219, 148, 148), (208, 148, 137), (197, 148, 127), (191, 151, 121),
+ (186, 155, 116), (176, 163, 109), (161, 168, 101), (146, 167, 90),
+ (135, 164, 82), (119, 148, 69), (114, 141, 65), (110, 135, 61),
+ (96, 123, 51), (84, 109, 44), (71, 96, 38), (60, 84, 30),
+ (45, 67, 19), (48, 61, 22), (51, 55, 25), (56, 48, 27),
+ (61, 42, 30), (69, 33, 37), (79, 30, 48), (89, 27, 55),
+ (99, 27, 64), (120, 23, 80), (122, 25, 83), (125, 27, 87),
+ (135, 24, 94), (142, 22, 100), (150, 19, 104), (155, 20, 106),
+ (161, 27, 109), (163, 29, 110), (165, 31, 112), (173, 31, 118),
+ (175, 36, 119), (172, 42, 118), (164, 46, 114), (159, 43, 110),
+ (151, 44, 102), (128, 45, 82), (119, 47, 75), (111, 49, 69),
+ (101, 50, 58), (96, 50, 54), (90, 59, 50), (83, 71, 49),
+ (77, 66, 47), (76, 64, 46), (75, 62, 45), (70, 60, 41),
+ (54, 63, 34), (40, 58, 26), (36, 52, 23), (29, 48, 23),
+ (27, 46, 22), (26, 44, 22), (26, 44, 22), (29, 45, 22),
+ (45, 39, 23), (53, 32, 22), (62, 24, 20), (68, 20, 18),
+ (69, 21, 17), (69, 20, 17), (69, 20, 17), (68, 21, 16),
+ (62, 30, 18), (62, 30, 17), (63, 31, 16), (65, 31, 16),
+ (70, 26, 15), (71, 26, 16), (72, 25, 15), (71, 23, 18),
+ (71, 24, 20), (70, 25, 24), (71, 28, 31), (73, 32, 39),
+ (77, 36, 47), (85, 38, 58), (93, 44, 72), (103, 50, 84),
+ (112, 57, 96), (117, 68, 105), (123, 73, 103), (128, 76, 103),
+ (130, 79, 107), (132, 78, 110), (136, 76, 109), (143, 73, 115),
+ (152, 70, 119), (161, 68, 125), (166, 70, 132), (171, 71, 132),
+ (174, 69, 126), (175, 66, 118), (173, 58, 110), (167, 51, 100),
+ (163, 40, 91), (160, 26, 84), (156, 14, 80), (150, 8, 79),
+ (147, 4, 80), (146, 2, 80), (146, 1, 76), (144, 0, 71),
+ (136, 1, 67), (128, 4, 63), (126, 1, 54), (127, 0, 52),
+ (127, 0, 53), (127, 0, 56), (127, 0, 62), (128, 6, 68),
+ (130, 12, 74), (132, 25, 83), (132, 42, 96), (135, 55, 105),
+ (144, 68, 109), (156, 75, 117), (169, 83, 125), (182, 92, 139),
+ (195, 99, 152), (208, 104, 160), (219, 113, 175), (225, 126, 192),
+ (229, 139, 209), (228, 140, 207), (220, 143, 204), (211, 143, 199),
+ (202, 145, 189), (193, 143, 155), (183, 161, 132), (175, 156, 122)
+ ),
+
+// 632 Rusted
+((129, 170, 176), (126, 158, 170), (135, 161, 178), (144, 164, 187),
+ (152, 172, 198), (160, 180, 209), (162, 182, 213), (165, 185, 218),
+ (179, 199, 235), (176, 196, 229), (173, 193, 223), (163, 182, 206),
+ (153, 172, 190), (147, 159, 167), (142, 146, 145), (140, 136, 127),
+ (138, 127, 110), (127, 100, 91), (124, 97, 90), (122, 94, 89),
+ (117, 91, 92), (112, 88, 96), (105, 90, 104), (98, 92, 112),
+ (76, 100, 119), (70, 93, 111), (64, 86, 103), (58, 80, 94),
+ (52, 75, 85), (50, 71, 80), (49, 68, 75), (45, 63, 64),
+ (41, 59, 57), (38, 50, 46), (36, 49, 42), (35, 48, 39),
+ (34, 45, 36), (34, 42, 34), (34, 41, 34), (34, 40, 35),
+ (33, 41, 36), (34, 43, 39), (36, 46, 42), (41, 51, 50),
+ (46, 57, 59), (48, 61, 64), (50, 65, 70), (57, 73, 81),
+ (64, 82, 94), (81, 101, 117), (86, 105, 121), (91, 110, 126),
+ (92, 110, 121), (93, 110, 117), (91, 107, 111), (89, 104, 106),
+ (93, 81, 66), (93, 74, 51), (93, 67, 37), (94, 64, 30),
+ (96, 62, 24), (96, 63, 25), (97, 64, 27), (97, 73, 36),
+ (101, 79, 47), (103, 116, 72), (110, 130, 76), (117, 145, 81),
+ (122, 143, 79), (127, 141, 77), (135, 133, 68), (142, 124, 55),
+ (138, 101, 33), (135, 79, 23), (133, 58, 13), (131, 50, 7),
+ (130, 42, 2), (131, 43, 1), (133, 45, 1), (133, 46, 1),
+ (126, 50, 0), (133, 49, 2), (128, 54, 5), (123, 59, 9),
+ (118, 61, 15), (113, 64, 22), (109, 72, 35), (99, 76, 46),
+ (83, 81, 67), (76, 83, 76), (70, 86, 86), (67, 86, 90),
+ (65, 86, 94), (62, 84, 98), (65, 86, 102), (70, 90, 107),
+ (78, 100, 117), (95, 115, 135), (98, 119, 140), (102, 124, 145),
+ (102, 123, 145), (102, 123, 145), (98, 118, 139), (92, 111, 129),
+ (78, 94, 107), (75, 90, 100), (72, 86, 94), (70, 84, 91),
+ (69, 83, 89), (67, 83, 85), (66, 85, 88), (67, 85, 88),
+ (66, 84, 87), (60, 80, 77), (58, 76, 74), (56, 73, 71),
+ (52, 68, 67), (52, 68, 64), (56, 72, 67), (58, 75, 73),
+ (70, 90, 101), (79, 101, 114), (89, 112, 128), (94, 117, 136),
+ (99, 122, 144), (106, 131, 156), (116, 139, 166), (121, 145, 171),
+ (126, 147, 175), (128, 150, 178), (127, 151, 178), (127, 152, 178),
+ (126, 150, 177), (126, 148, 174), (125, 145, 167), (124, 145, 160),
+ (130, 158, 138), (128, 158, 122), (126, 159, 107), (129, 155, 99),
+ (132, 151, 92), (143, 144, 74), (147, 134, 52), (137, 126, 41),
+ (134, 108, 32), (137, 71, 14), (128, 68, 15), (119, 66, 17),
+ (102, 63, 23), (88, 62, 32), (85, 59, 36), (72, 62, 47),
+ (61, 75, 78), (65, 80, 86), (70, 85, 94), (77, 95, 108),
+ (75, 93, 106), (79, 98, 110), (82, 100, 109), (83, 102, 106),
+ (76, 94, 92), (69, 75, 56), (70, 70, 47), (71, 65, 39),
+ (73, 54, 26), (69, 51, 20), (70, 42, 18), (70, 40, 20),
+ (69, 48, 32), (70, 50, 37), (72, 53, 43), (72, 62, 54),
+ (72, 72, 69), (73, 87, 79), (80, 98, 88), (87, 105, 90),
+ (89, 104, 90), (87, 100, 88), (82, 97, 89), (77, 92, 84),
+ (71, 85, 74), (66, 76, 67), (62, 71, 68), (61, 71, 75),
+ (72, 89, 84), (78, 95, 86), (85, 102, 88), (95, 115, 95),
+ (106, 127, 99), (110, 131, 107), (114, 132, 105), (111, 129, 98),
+ (105, 124, 87), (94, 111, 85), (84, 100, 85), (76, 91, 89),
+ (73, 90, 92), (75, 93, 100), (81, 100, 112), (90, 110, 129),
+ (103, 123, 148), (117, 137, 166), (128, 148, 181), (135, 155, 189),
+ (140, 159, 192), (142, 161, 195), (142, 162, 196), (138, 161, 191),
+ (132, 156, 184), (126, 151, 179), (123, 146, 175), (120, 144, 168),
+ (117, 141, 159), (108, 134, 149), (97, 122, 135), (87, 109, 118),
+ (79, 96, 99), (72, 82, 78), (63, 66, 57), (55, 51, 40),
+ (47, 41, 29), (42, 35, 20), (41, 29, 15), (39, 27, 13),
+ (38, 24, 12), (30, 24, 12), (25, 25, 15), (22, 29, 21),
+ (26, 31, 24), (25, 30, 25), (25, 34, 30), (32, 45, 43),
+ (47, 61, 57), (61, 75, 73), (71, 87, 90), (85, 104, 114),
+ (103, 121, 135), (124, 142, 157), (138, 156, 177), (148, 168, 194),
+ (154, 174, 206), (158, 182, 212), (160, 183, 215), (162, 183, 211),
+ (170, 178, 203), (176, 188, 197), (183, 197, 205), (186, 209, 214),
+ (197, 204, 217), (203, 214, 216), (204, 223, 222), (191, 230, 227),
+ (177, 217, 222), (164, 204, 214), (153, 193, 202), (140, 181, 191)
+ ),
+
+// 633 Sachet
+((73, 104, 39), (49, 73, 24), (32, 55, 17), (15, 37, 10),
+ (13, 36, 14), (12, 36, 18), (14, 36, 19), (16, 36, 21),
+ (29, 65, 32), (44, 83, 38), (59, 102, 45), (73, 117, 49),
+ (88, 133, 53), (94, 138, 54), (101, 143, 55), (97, 142, 51),
+ (94, 141, 48), (85, 132, 39), (73, 122, 37), (62, 112, 35),
+ (61, 110, 36), (60, 109, 37), (57, 106, 36), (54, 104, 36),
+ (70, 115, 40), (78, 118, 46), (86, 121, 52), (91, 123, 57),
+ (97, 125, 63), (100, 124, 62), (103, 123, 61), (97, 114, 60),
+ (85, 113, 57), (76, 105, 59), (66, 99, 63), (57, 93, 67),
+ (49, 85, 63), (41, 78, 60), (40, 77, 58), (39, 77, 57),
+ (37, 78, 50), (41, 83, 49), (46, 89, 49), (50, 88, 50),
+ (54, 87, 51), (51, 84, 49), (49, 81, 47), (48, 78, 42),
+ (46, 71, 44), (37, 62, 49), (47, 58, 71), (58, 54, 93),
+ (65, 58, 110), (73, 62, 128), (81, 61, 143), (90, 60, 159),
+ (110, 98, 158), (123, 115, 153), (136, 132, 148), (142, 142, 137),
+ (148, 153, 127), (150, 153, 137), (153, 153, 147), (160, 150, 157),
+ (155, 134, 162), (135, 117, 163), (130, 122, 143), (126, 127, 123),
+ (127, 129, 111), (128, 132, 99), (135, 143, 82), (139, 155, 74),
+ (132, 148, 56), (112, 132, 54), (93, 117, 52), (70, 94, 42),
+ (47, 71, 33), (37, 59, 30), (27, 48, 27), (13, 28, 19),
+ (7, 21, 15), (3, 20, 14), (8, 30, 17), (14, 40, 21),
+ (18, 48, 21), (22, 56, 22), (36, 75, 26), (58, 93, 26),
+ (85, 114, 32), (95, 113, 48), (106, 113, 64), (106, 107, 77),
+ (106, 102, 91), (101, 85, 104), (96, 78, 114), (91, 79, 125),
+ (83, 79, 118), (77, 86, 91), (74, 95, 87), (71, 104, 83),
+ (74, 106, 85), (78, 108, 87), (80, 108, 94), (79, 101, 96),
+ (89, 109, 97), (95, 114, 90), (102, 120, 84), (111, 127, 82),
+ (120, 134, 80), (133, 144, 83), (144, 156, 78), (150, 160, 73),
+ (148, 156, 77), (116, 135, 54), (105, 125, 51), (94, 116, 49),
+ (69, 98, 38), (50, 80, 27), (34, 62, 23), (24, 51, 22),
+ (40, 60, 31), (54, 73, 43), (69, 87, 55), (74, 94, 55),
+ (80, 102, 56), (82, 112, 59), (82, 113, 66), (85, 112, 71),
+ (86, 105, 75), (116, 114, 125), (127, 123, 137), (139, 132, 149),
+ (149, 143, 159), (165, 160, 159), (174, 174, 158), (169, 181, 140),
+ (143, 162, 99), (139, 156, 90), (135, 151, 81), (135, 152, 79),
+ (135, 153, 77), (133, 151, 74), (144, 159, 72), (156, 170, 69),
+ (162, 173, 68), (168, 182, 72), (168, 182, 73), (169, 182, 75),
+ (165, 176, 79), (163, 173, 79), (157, 167, 77), (145, 158, 76),
+ (125, 134, 69), (116, 129, 64), (108, 124, 60), (89, 111, 55),
+ (73, 99, 49), (58, 86, 37), (43, 72, 29), (30, 61, 21),
+ (20, 48, 12), (7, 28, 4), (6, 25, 2), (6, 22, 1),
+ (3, 16, 0), (0, 12, 0), (1, 14, 0), (3, 17, 1),
+ (4, 27, 1), (5, 31, 2), (7, 36, 4), (12, 44, 7),
+ (17, 50, 10), (23, 58, 13), (31, 66, 16), (36, 71, 21),
+ (39, 74, 26), (49, 80, 27), (58, 85, 26), (67, 89, 29),
+ (85, 106, 35), (104, 123, 40), (122, 135, 44), (139, 152, 51),
+ (154, 173, 67), (155, 172, 67), (156, 172, 67), (156, 169, 68),
+ (157, 173, 71), (157, 176, 73), (159, 173, 71), (167, 177, 74),
+ (172, 184, 78), (174, 186, 76), (176, 187, 75), (174, 184, 74),
+ (165, 178, 68), (153, 169, 66), (139, 158, 63), (116, 139, 57),
+ (100, 126, 62), (96, 127, 66), (100, 129, 77), (122, 150, 109),
+ (148, 172, 132), (167, 182, 140), (180, 197, 148), (185, 186, 162),
+ (178, 160, 166), (157, 143, 148), (143, 123, 140), (139, 113, 137),
+ (136, 124, 124), (145, 138, 114), (153, 155, 99), (157, 172, 88),
+ (166, 182, 86), (173, 186, 90), (178, 190, 92), (186, 200, 101),
+ (183, 202, 116), (178, 193, 109), (177, 194, 102), (159, 185, 105),
+ (132, 159, 86), (107, 131, 61), (82, 105, 49), (55, 80, 36),
+ (35, 54, 22), (25, 36, 18), (12, 29, 16), (9, 28, 17),
+ (18, 34, 19), (26, 49, 23), (35, 67, 33), (55, 85, 40),
+ (75, 101, 40), (89, 113, 43), (103, 120, 50), (112, 121, 48),
+ (122, 121, 50), (121, 121, 63), (113, 124, 71), (117, 125, 79),
+ (119, 124, 100), (110, 115, 129), (110, 106, 147), (119, 106, 154),
+ (116, 94, 165), (108, 87, 162), (111, 98, 144), (112, 108, 128),
+ (109, 122, 106), (115, 135, 82), (122, 142, 71), (95, 125, 58)
+ ),
+
+// 634 Sage
+((63, 51, 34), (64, 46, 25), (66, 53, 29), (69, 60, 33),
+ (76, 73, 44), (83, 86, 55), (87, 93, 60), (91, 100, 66),
+ (111, 135, 90), (122, 151, 105), (134, 168, 121), (138, 178, 129),
+ (143, 189, 138), (141, 192, 139), (139, 196, 141), (139, 198, 140),
+ (139, 201, 140), (137, 198, 134), (130, 192, 124), (124, 186, 114),
+ (120, 181, 107), (117, 176, 100), (120, 176, 99), (123, 176, 98),
+ (135, 166, 88), (131, 150, 77), (127, 134, 66), (118, 121, 61),
+ (109, 109, 57), (105, 102, 53), (101, 96, 50), (94, 80, 36),
+ (84, 60, 24), (58, 30, 8), (49, 25, 6), (41, 21, 5),
+ (38, 20, 5), (36, 19, 5), (36, 19, 5), (36, 19, 5),
+ (41, 22, 6), (40, 22, 6), (40, 23, 6), (37, 24, 7),
+ (35, 25, 8), (36, 26, 9), (37, 28, 11), (40, 31, 13),
+ (44, 35, 19), (43, 61, 33), (48, 72, 40), (53, 84, 48),
+ (58, 87, 52), (63, 90, 57), (63, 92, 56), (64, 95, 56),
+ (62, 94, 47), (66, 86, 42), (71, 78, 38), (81, 75, 32),
+ (91, 73, 27), (94, 70, 23), (97, 68, 20), (98, 67, 20),
+ (96, 66, 21), (103, 81, 37), (107, 92, 46), (111, 104, 55),
+ (108, 109, 58), (105, 114, 62), (96, 123, 71), (91, 129, 76),
+ (93, 135, 86), (92, 134, 85), (91, 134, 84), (90, 124, 74),
+ (90, 114, 65), (88, 106, 60), (87, 98, 55), (81, 81, 45),
+ (72, 65, 37), (53, 41, 18), (46, 32, 12), (39, 24, 7),
+ (36, 21, 6), (34, 19, 5), (31, 16, 4), (27, 14, 3),
+ (28, 15, 3), (31, 19, 4), (35, 23, 5), (37, 25, 6),
+ (40, 28, 7), (44, 33, 12), (50, 41, 19), (58, 48, 28),
+ (67, 61, 37), (95, 95, 70), (104, 109, 84), (113, 123, 99),
+ (113, 126, 101), (114, 129, 103), (118, 130, 107), (116, 130, 106),
+ (107, 120, 97), (94, 108, 82), (82, 96, 67), (75, 87, 59),
+ (68, 79, 52), (57, 67, 42), (51, 59, 32), (48, 54, 24),
+ (50, 53, 19), (51, 56, 17), (53, 58, 18), (55, 61, 20),
+ (58, 65, 22), (62, 66, 23), (63, 63, 22), (61, 62, 23),
+ (60, 60, 24), (62, 57, 22), (64, 55, 20), (63, 52, 18),
+ (63, 50, 17), (65, 44, 13), (64, 40, 11), (65, 37, 9),
+ (66, 35, 6), (59, 28, 1), (56, 25, 0), (53, 22, 0),
+ (46, 17, 1), (39, 14, 0), (31, 13, 1), (27, 12, 2),
+ (22, 14, 4), (22, 17, 5), (23, 20, 6), (25, 21, 7),
+ (27, 22, 8), (31, 24, 10), (35, 27, 12), (38, 31, 15),
+ (40, 32, 16), (41, 33, 17), (40, 32, 16), (39, 31, 16),
+ (36, 30, 15), (34, 29, 14), (30, 27, 13), (26, 24, 10),
+ (20, 21, 5), (20, 22, 4), (21, 23, 4), (23, 24, 5),
+ (27, 27, 9), (34, 35, 15), (42, 44, 22), (51, 60, 28),
+ (60, 77, 35), (82, 109, 58), (87, 116, 66), (93, 124, 74),
+ (104, 143, 88), (113, 161, 99), (120, 169, 107), (125, 175, 110),
+ (128, 176, 114), (128, 176, 113), (129, 176, 113), (129, 170, 113),
+ (125, 159, 107), (119, 142, 96), (111, 125, 83), (103, 112, 70),
+ (96, 99, 63), (88, 87, 56), (78, 75, 51), (72, 64, 47),
+ (66, 55, 39), (58, 48, 33), (53, 43, 27), (48, 39, 23),
+ (51, 41, 25), (52, 43, 25), (53, 46, 26), (55, 50, 25),
+ (59, 53, 23), (64, 54, 24), (67, 55, 26), (72, 58, 30),
+ (73, 63, 31), (77, 70, 31), (81, 77, 36), (85, 86, 43),
+ (87, 96, 54), (87, 108, 65), (88, 119, 69), (88, 129, 75),
+ (91, 138, 82), (95, 143, 89), (98, 147, 98), (100, 148, 99),
+ (101, 146, 96), (110, 142, 90), (119, 133, 79), (127, 122, 70),
+ (129, 108, 59), (123, 95, 47), (120, 84, 37), (118, 75, 27),
+ (117, 68, 20), (113, 60, 14), (99, 53, 8), (84, 45, 4),
+ (69, 39, 2), (58, 35, 2), (52, 34, 1), (47, 34, 2),
+ (46, 35, 4), (46, 39, 7), (47, 41, 9), (49, 43, 9),
+ (51, 44, 8), (52, 43, 8), (56, 44, 10), (63, 45, 13),
+ (69, 46, 15), (77, 51, 17), (89, 60, 23), (97, 75, 35),
+ (109, 92, 53), (121, 110, 73), (130, 127, 91), (148, 144, 108),
+ (166, 166, 129), (182, 185, 150), (195, 206, 172), (204, 221, 193),
+ (210, 228, 205), (216, 234, 211), (216, 230, 209), (209, 227, 202),
+ (205, 223, 197), (198, 215, 187), (185, 205, 175), (170, 186, 160),
+ (148, 167, 141), (130, 150, 122), (117, 131, 103), (104, 111, 86),
+ (93, 92, 68), (81, 75, 54), (71, 64, 45), (66, 57, 38)
+ ),
+
+// 635 Saturday_Morning
+((126, 171, 215), (115, 175, 207), (106, 179, 205), (98, 183, 204),
+ (101, 182, 200), (104, 182, 197), (110, 179, 194), (117, 177, 191),
+ (141, 156, 199), (151, 150, 199), (162, 145, 199), (163, 144, 204),
+ (165, 144, 210), (168, 143, 211), (171, 143, 212), (174, 140, 211),
+ (177, 138, 211), (181, 125, 189), (188, 125, 172), (196, 126, 155),
+ (199, 117, 139), (203, 108, 124), (206, 110, 112), (209, 112, 100),
+ (224, 117, 67), (220, 107, 66), (217, 98, 65), (217, 99, 71),
+ (217, 101, 77), (215, 100, 83), (213, 99, 90), (210, 103, 113),
+ (201, 105, 140), (200, 123, 175), (199, 128, 188), (198, 133, 201),
+ (198, 123, 199), (199, 114, 197), (202, 108, 191), (205, 103, 185),
+ (210, 91, 157), (210, 93, 146), (210, 96, 136), (212, 110, 138),
+ (215, 124, 140), (211, 131, 140), (208, 139, 140), (198, 159, 151),
+ (185, 171, 167), (175, 183, 190), (168, 182, 192), (161, 181, 195),
+ (149, 179, 199), (138, 178, 203), (131, 180, 203), (125, 182, 203),
+ (113, 175, 209), (109, 171, 211), (106, 167, 214), (118, 157, 208),
+ (130, 147, 203), (142, 141, 198), (155, 135, 194), (180, 128, 185),
+ (197, 123, 177), (228, 107, 158), (239, 103, 152), (251, 99, 147),
+ (252, 95, 145), (254, 91, 144), (253, 85, 135), (252, 76, 132),
+ (250, 54, 148), (244, 52, 157), (238, 50, 167), (235, 51, 176),
+ (233, 53, 186), (231, 59, 192), (229, 65, 199), (222, 80, 211),
+ (215, 93, 208), (224, 105, 167), (227, 106, 152), (231, 107, 138),
+ (232, 103, 134), (233, 100, 130), (238, 91, 112), (245, 86, 98),
+ (242, 78, 106), (241, 77, 114), (241, 76, 123), (240, 78, 130),
+ (239, 80, 138), (231, 93, 155), (220, 107, 166), (213, 123, 167),
+ (205, 140, 170), (191, 188, 165), (194, 203, 147), (197, 218, 130),
+ (196, 220, 123), (196, 222, 116), (192, 220, 117), (199, 218, 114),
+ (210, 197, 115), (207, 185, 130), (204, 173, 145), (205, 167, 145),
+ (207, 161, 146), (212, 150, 138), (217, 133, 132), (225, 121, 129),
+ (231, 108, 125), (244, 82, 99), (246, 78, 95), (249, 74, 92),
+ (249, 70, 89), (245, 67, 81), (245, 68, 75), (247, 70, 78),
+ (246, 70, 84), (245, 71, 90), (244, 72, 96), (243, 74, 104),
+ (242, 77, 112), (236, 79, 130), (224, 87, 145), (218, 94, 156),
+ (211, 103, 163), (179, 124, 180), (173, 128, 186), (168, 132, 192),
+ (160, 129, 198), (156, 125, 205), (147, 124, 201), (150, 124, 202),
+ (175, 104, 195), (189, 99, 188), (203, 94, 181), (209, 95, 177),
+ (215, 97, 174), (224, 98, 169), (227, 105, 170), (221, 116, 175),
+ (217, 128, 178), (195, 155, 191), (187, 163, 194), (180, 172, 198),
+ (172, 180, 200), (166, 184, 202), (162, 180, 204), (157, 181, 210),
+ (143, 181, 219), (138, 179, 220), (133, 177, 221), (127, 179, 220),
+ (129, 181, 218), (133, 185, 217), (133, 181, 215), (134, 176, 206),
+ (142, 166, 197), (163, 150, 166), (171, 145, 159), (180, 141, 153),
+ (198, 125, 148), (207, 114, 150), (209, 108, 151), (216, 113, 154),
+ (228, 117, 174), (224, 118, 182), (221, 119, 191), (209, 127, 209),
+ (192, 138, 218), (179, 149, 222), (171, 160, 223), (163, 164, 223),
+ (153, 169, 217), (142, 173, 210), (136, 183, 200), (138, 183, 194),
+ (139, 177, 193), (137, 169, 195), (131, 169, 199), (129, 171, 202),
+ (122, 163, 212), (122, 159, 218), (122, 156, 224), (121, 155, 236),
+ (108, 154, 235), (99, 153, 228), (106, 146, 229), (124, 137, 239),
+ (131, 128, 246), (130, 122, 240), (136, 121, 234), (152, 120, 233),
+ (171, 123, 234), (180, 125, 233), (179, 130, 227), (176, 132, 224),
+ (175, 134, 220), (181, 139, 219), (182, 141, 218), (185, 138, 214),
+ (187, 129, 202), (190, 118, 186), (188, 117, 178), (178, 113, 174),
+ (173, 110, 171), (165, 102, 166), (157, 107, 173), (142, 105, 186),
+ (138, 96, 201), (136, 91, 207), (141, 98, 215), (148, 108, 216),
+ (164, 104, 222), (171, 105, 220), (178, 110, 215), (180, 125, 201),
+ (184, 138, 196), (181, 148, 197), (182, 154, 202), (179, 156, 203),
+ (172, 156, 206), (163, 152, 211), (161, 148, 219), (161, 145, 224),
+ (156, 144, 224), (148, 143, 224), (141, 144, 227), (141, 146, 230),
+ (140, 149, 229), (141, 154, 229), (139, 160, 228), (139, 164, 228),
+ (137, 162, 227), (141, 160, 227), (148, 161, 224), (155, 161, 220),
+ (163, 157, 211), (170, 149, 201), (180, 144, 186), (182, 142, 174),
+ (184, 145, 171), (175, 144, 172), (168, 138, 175), (152, 124, 177),
+ (140, 116, 191), (124, 114, 204), (120, 123, 219), (124, 131, 224),
+ (126, 131, 231), (130, 121, 231), (129, 123, 232), (134, 143, 220)
+ ),
+
+// 636 Scattered_Petals
+((68, 120, 123), (57, 97, 96), (51, 86, 84), (45, 75, 73),
+ (40, 63, 61), (36, 52, 50), (35, 48, 45), (34, 45, 40),
+ (33, 35, 27), (32, 32, 26), (31, 30, 25), (33, 31, 24),
+ (35, 33, 24), (37, 39, 23), (39, 45, 23), (39, 48, 24),
+ (40, 51, 26), (42, 55, 32), (43, 58, 35), (45, 62, 38),
+ (53, 72, 43), (61, 82, 48), (63, 86, 54), (66, 91, 60),
+ (74, 107, 81), (78, 111, 82), (82, 115, 83), (82, 112, 83),
+ (82, 110, 83), (80, 107, 83), (78, 104, 83), (69, 92, 77),
+ (63, 82, 68), (54, 60, 53), (56, 58, 52), (58, 56, 51),
+ (70, 62, 63), (83, 69, 75), (94, 71, 83), (106, 74, 91),
+ (150, 82, 117), (151, 86, 117), (153, 90, 117), (148, 85, 114),
+ (144, 80, 112), (141, 73, 108), (139, 67, 105), (123, 58, 89),
+ (95, 47, 69), (42, 34, 33), (30, 29, 26), (19, 25, 19),
+ (14, 22, 16), (10, 20, 13), (11, 21, 13), (12, 23, 14),
+ (21, 36, 19), (26, 46, 27), (31, 57, 35), (39, 65, 43),
+ (48, 73, 52), (55, 75, 58), (62, 78, 64), (88, 80, 83),
+ (114, 88, 103), (157, 104, 146), (166, 116, 157), (176, 129, 168),
+ (178, 133, 170), (180, 138, 172), (178, 144, 176), (169, 141, 174),
+ (142, 136, 153), (117, 131, 133), (92, 126, 113), (76, 108, 93),
+ (60, 91, 73), (57, 83, 67), (55, 76, 61), (51, 64, 51),
+ (46, 55, 46), (37, 41, 36), (37, 40, 33), (38, 40, 31),
+ (37, 39, 31), (36, 39, 32), (33, 39, 34), (30, 35, 36),
+ (30, 36, 35), (29, 41, 38), (29, 47, 42), (30, 50, 45),
+ (31, 53, 48), (33, 59, 50), (38, 63, 49), (42, 65, 48),
+ (42, 72, 53), (49, 88, 63), (53, 93, 63), (58, 99, 63),
+ (58, 103, 65), (58, 107, 68), (62, 117, 77), (69, 131, 91),
+ (78, 151, 111), (77, 154, 116), (77, 158, 121), (78, 158, 121),
+ (79, 158, 122), (79, 155, 114), (78, 146, 106), (74, 139, 93),
+ (69, 129, 81), (64, 109, 57), (61, 104, 52), (59, 99, 48),
+ (57, 94, 39), (57, 93, 36), (63, 97, 40), (73, 105, 47),
+ (79, 124, 74), (80, 132, 85), (81, 140, 96), (84, 141, 97),
+ (87, 142, 99), (87, 142, 101), (89, 142, 102), (87, 146, 100),
+ (84, 149, 97), (76, 135, 81), (74, 128, 76), (72, 122, 72),
+ (73, 113, 64), (74, 110, 59), (76, 111, 55), (74, 110, 52),
+ (67, 95, 46), (62, 85, 45), (58, 75, 44), (56, 72, 43),
+ (54, 69, 42), (49, 60, 38), (46, 55, 33), (41, 47, 30),
+ (38, 40, 29), (43, 32, 33), (50, 32, 36), (58, 33, 40),
+ (80, 34, 51), (102, 35, 59), (107, 37, 58), (105, 42, 56),
+ (112, 69, 61), (122, 77, 68), (132, 85, 75), (143, 94, 78),
+ (142, 102, 85), (139, 108, 94), (140, 116, 107), (153, 130, 133),
+ (175, 137, 152), (204, 137, 186), (212, 131, 190), (220, 126, 195),
+ (232, 119, 205), (237, 109, 201), (223, 102, 188), (201, 94, 170),
+ (155, 72, 121), (147, 65, 109), (139, 59, 98), (112, 50, 75),
+ (86, 43, 56), (59, 37, 37), (37, 33, 25), (39, 44, 24),
+ (42, 53, 23), (43, 57, 23), (49, 68, 26), (42, 60, 24),
+ (49, 71, 30), (57, 85, 38), (61, 94, 41), (66, 104, 45),
+ (52, 84, 41), (48, 79, 40), (45, 75, 40), (39, 65, 38),
+ (34, 59, 34), (31, 52, 32), (26, 48, 30), (24, 43, 28),
+ (23, 41, 31), (25, 43, 37), (30, 50, 47), (35, 62, 59),
+ (41, 76, 70), (51, 96, 84), (62, 115, 103), (72, 135, 124),
+ (81, 153, 142), (103, 156, 157), (127, 159, 169), (151, 157, 182),
+ (173, 155, 196), (179, 158, 203), (197, 149, 209), (217, 139, 209),
+ (235, 125, 210), (250, 115, 214), (247, 115, 213), (232, 118, 203),
+ (221, 123, 187), (209, 128, 169), (196, 128, 151), (184, 128, 140),
+ (160, 125, 122), (138, 121, 105), (120, 121, 88), (105, 119, 72),
+ (96, 114, 63), (86, 106, 53), (73, 93, 47), (62, 82, 44),
+ (52, 73, 44), (44, 65, 43), (39, 60, 39), (35, 55, 32),
+ (31, 50, 26), (27, 48, 23), (24, 44, 22), (22, 40, 22),
+ (23, 40, 19), (25, 40, 19), (29, 47, 18), (32, 54, 20),
+ (34, 58, 25), (36, 60, 27), (36, 59, 31), (36, 61, 32),
+ (39, 64, 34), (42, 67, 35), (46, 69, 37), (50, 68, 40),
+ (60, 67, 45), (78, 73, 61), (104, 80, 80), (124, 89, 98),
+ (125, 102, 112), (121, 107, 117), (118, 113, 126), (123, 119, 138),
+ (136, 121, 151), (130, 130, 158), (112, 132, 153), (89, 126, 138)
+ ),
+
+// 637 Sea_Mist
+((66, 148, 132), (70, 145, 134), (64, 137, 127), (58, 129, 120),
+ (49, 112, 102), (41, 96, 85), (37, 89, 79), (34, 82, 74),
+ (34, 61, 57), (39, 62, 57), (44, 63, 57), (48, 66, 61),
+ (52, 70, 66), (61, 71, 69), (70, 73, 73), (75, 77, 76),
+ (81, 81, 80), (99, 103, 102), (101, 112, 111), (103, 122, 120),
+ (100, 130, 126), (97, 139, 132), (95, 142, 134), (94, 145, 137),
+ (80, 149, 136), (70, 147, 134), (60, 146, 132), (58, 137, 123),
+ (57, 128, 115), (56, 122, 110), (56, 117, 105), (55, 107, 96),
+ (52, 101, 92), (56, 84, 79), (59, 78, 74), (63, 73, 69),
+ (65, 72, 70), (68, 72, 71), (69, 72, 71), (71, 73, 71),
+ (74, 74, 73), (70, 79, 78), (66, 85, 83), (63, 90, 87),
+ (60, 96, 92), (58, 95, 91), (56, 95, 91), (47, 92, 89),
+ (35, 90, 89), (23, 93, 89), (24, 97, 93), (26, 102, 97),
+ (30, 110, 106), (35, 119, 115), (39, 125, 120), (44, 132, 126),
+ (64, 165, 155), (79, 180, 172), (95, 196, 190), (110, 208, 203),
+ (125, 220, 217), (127, 224, 221), (129, 229, 226), (131, 230, 230),
+ (128, 232, 232), (127, 228, 228), (124, 221, 221), (122, 214, 214),
+ (117, 207, 207), (113, 201, 200), (102, 187, 184), (94, 172, 167),
+ (91, 146, 139), (89, 131, 124), (87, 116, 110), (82, 102, 97),
+ (77, 89, 84), (74, 85, 80), (72, 81, 77), (69, 74, 70),
+ (64, 69, 65), (56, 58, 55), (52, 54, 52), (49, 51, 49),
+ (48, 50, 48), (48, 49, 48), (48, 49, 48), (49, 48, 48),
+ (46, 47, 46), (46, 47, 46), (46, 48, 46), (46, 48, 46),
+ (47, 48, 47), (47, 49, 47), (46, 49, 46), (41, 51, 48),
+ (36, 52, 50), (32, 57, 55), (34, 57, 54), (36, 58, 54),
+ (36, 58, 54), (37, 59, 55), (36, 62, 61), (41, 67, 64),
+ (54, 70, 66), (57, 70, 66), (60, 71, 67), (61, 72, 68),
+ (62, 73, 69), (65, 76, 72), (68, 78, 74), (71, 83, 78),
+ (72, 85, 80), (65, 96, 88), (63, 98, 89), (62, 100, 91),
+ (59, 104, 95), (60, 105, 96), (60, 107, 95), (57, 107, 94),
+ (47, 96, 86), (45, 88, 79), (44, 81, 73), (44, 77, 69),
+ (44, 73, 66), (43, 65, 58), (39, 56, 52), (35, 52, 50),
+ (35, 50, 50), (43, 57, 54), (44, 60, 57), (46, 63, 60),
+ (49, 73, 69), (58, 83, 79), (67, 97, 93), (80, 114, 108),
+ (92, 154, 147), (96, 169, 163), (100, 185, 180), (103, 192, 186),
+ (107, 200, 193), (113, 212, 206), (116, 222, 215), (113, 224, 219),
+ (113, 216, 211), (102, 193, 187), (100, 187, 180), (99, 182, 174),
+ (89, 170, 161), (83, 156, 145), (75, 138, 127), (62, 119, 108),
+ (47, 92, 82), (44, 89, 79), (42, 86, 76), (44, 82, 73),
+ (47, 80, 73), (54, 78, 72), (63, 76, 72), (70, 77, 75),
+ (77, 80, 79), (82, 96, 93), (81, 100, 96), (81, 104, 99),
+ (79, 111, 103), (82, 116, 108), (83, 120, 111), (87, 126, 118),
+ (87, 136, 127), (89, 138, 128), (92, 140, 130), (95, 143, 133),
+ (103, 146, 138), (108, 153, 145), (114, 160, 152), (122, 167, 160),
+ (129, 173, 166), (135, 180, 176), (135, 191, 187), (130, 203, 198),
+ (128, 211, 207), (123, 214, 210), (121, 214, 210), (120, 213, 207),
+ (106, 201, 195), (99, 196, 189), (92, 192, 184), (79, 181, 171),
+ (67, 172, 160), (62, 163, 150), (60, 155, 141), (57, 150, 136),
+ (55, 148, 133), (50, 149, 134), (49, 155, 141), (53, 163, 150),
+ (56, 172, 161), (62, 183, 171), (64, 188, 178), (65, 193, 183),
+ (67, 195, 187), (66, 194, 186), (70, 191, 183), (73, 183, 176),
+ (76, 173, 167), (78, 163, 157), (77, 153, 147), (80, 144, 138),
+ (84, 137, 132), (87, 137, 130), (90, 141, 133), (91, 148, 141),
+ (92, 159, 152), (100, 166, 157), (104, 173, 165), (108, 179, 171),
+ (110, 181, 174), (107, 182, 175), (111, 179, 172), (113, 172, 166),
+ (116, 162, 155), (119, 149, 145), (117, 136, 133), (112, 128, 125),
+ (105, 122, 119), (97, 115, 110), (91, 107, 103), (83, 100, 96),
+ (74, 94, 91), (67, 91, 88), (61, 87, 83), (58, 82, 79),
+ (54, 76, 72), (48, 72, 68), (45, 68, 64), (43, 66, 63),
+ (47, 64, 61), (51, 63, 60), (50, 65, 62), (47, 67, 62),
+ (43, 70, 64), (39, 72, 67), (36, 73, 68), (33, 79, 73),
+ (30, 84, 78), (28, 89, 82), (27, 92, 83), (26, 93, 85),
+ (26, 98, 87), (28, 103, 92), (40, 112, 101), (48, 116, 105),
+ (58, 132, 121), (64, 144, 132), (59, 149, 134), (67, 160, 145)
+ ),
+
+// 638 Secret
+((82, 53, 109), (40, 21, 51), (40, 23, 53), (41, 26, 55),
+ (39, 23, 55), (38, 21, 55), (37, 22, 53), (36, 23, 51),
+ (31, 29, 53), (33, 25, 49), (35, 21, 46), (29, 19, 40),
+ (24, 17, 35), (22, 15, 32), (20, 13, 29), (19, 11, 28),
+ (19, 10, 27), (24, 10, 35), (25, 12, 33), (26, 15, 32),
+ (24, 16, 36), (23, 18, 41), (25, 20, 44), (28, 22, 48),
+ (33, 32, 66), (41, 36, 74), (49, 41, 82), (57, 38, 83),
+ (65, 36, 84), (63, 35, 79), (62, 34, 75), (55, 26, 80),
+ (53, 32, 75), (56, 36, 73), (56, 41, 75), (56, 47, 78),
+ (65, 53, 97), (74, 59, 116), (68, 60, 117), (63, 62, 119),
+ (43, 42, 84), (38, 35, 69), (34, 28, 54), (31, 26, 51),
+ (29, 25, 48), (28, 24, 44), (27, 24, 41), (23, 18, 38),
+ (20, 17, 34), (14, 14, 26), (12, 12, 25), (11, 10, 24),
+ (14, 10, 25), (18, 11, 27), (17, 10, 25), (16, 10, 24),
+ (8, 5, 12), (14, 7, 19), (20, 9, 26), (22, 10, 31),
+ (25, 11, 36), (25, 12, 35), (25, 13, 35), (24, 15, 36),
+ (21, 18, 35), (22, 19, 36), (22, 21, 39), (22, 23, 43),
+ (22, 23, 43), (23, 24, 44), (23, 21, 45), (25, 22, 49),
+ (29, 22, 55), (35, 29, 64), (41, 37, 74), (49, 41, 80),
+ (58, 46, 86), (70, 49, 98), (83, 52, 111), (99, 56, 135),
+ (147, 81, 179), (171, 69, 179), (135, 55, 148), (99, 41, 117),
+ (89, 46, 111), (79, 52, 105), (51, 44, 86), (43, 39, 72),
+ (26, 25, 56), (21, 21, 47), (17, 18, 38), (16, 17, 36),
+ (16, 17, 35), (17, 16, 32), (20, 13, 29), (21, 14, 32),
+ (26, 15, 32), (35, 17, 43), (47, 20, 54), (60, 23, 66),
+ (63, 27, 70), (67, 31, 75), (68, 30, 77), (73, 37, 85),
+ (83, 32, 101), (80, 35, 97), (77, 38, 93), (73, 38, 90),
+ (70, 38, 88), (57, 32, 72), (53, 28, 58), (44, 25, 55),
+ (41, 24, 56), (46, 22, 56), (49, 23, 61), (53, 25, 66),
+ (56, 23, 68), (53, 28, 67), (48, 30, 68), (44, 28, 65),
+ (43, 29, 64), (41, 33, 70), (40, 38, 77), (41, 35, 73),
+ (42, 32, 69), (33, 28, 60), (29, 26, 55), (26, 22, 47),
+ (25, 21, 38), (22, 18, 32), (21, 18, 31), (20, 18, 31),
+ (20, 20, 30), (20, 18, 31), (19, 17, 31), (18, 17, 31),
+ (15, 14, 28), (15, 13, 28), (16, 12, 29), (17, 13, 29),
+ (18, 14, 29), (19, 15, 32), (20, 17, 36), (19, 18, 36),
+ (17, 16, 34), (16, 15, 33), (17, 16, 33), (19, 18, 34),
+ (20, 17, 36), (20, 19, 37), (21, 19, 41), (18, 17, 48),
+ (31, 24, 66), (33, 27, 68), (36, 31, 71), (34, 31, 84),
+ (37, 29, 70), (32, 25, 66), (26, 18, 57), (19, 19, 45),
+ (17, 18, 36), (14, 14, 26), (12, 12, 24), (10, 10, 22),
+ (8, 6, 20), (12, 0, 21), (15, 3, 23), (24, 5, 35),
+ (29, 17, 41), (30, 19, 43), (32, 22, 46), (34, 22, 46),
+ (34, 22, 44), (29, 20, 39), (29, 17, 39), (31, 21, 45),
+ (29, 20, 49), (30, 25, 55), (33, 26, 60), (37, 26, 68),
+ (39, 28, 70), (41, 33, 72), (42, 35, 76), (48, 28, 77),
+ (36, 22, 58), (34, 20, 53), (32, 19, 49), (29, 16, 42),
+ (28, 14, 37), (27, 15, 35), (28, 16, 40), (32, 16, 43),
+ (31, 19, 43), (29, 21, 42), (23, 19, 42), (25, 21, 44),
+ (32, 19, 47), (34, 19, 52), (43, 19, 53), (48, 0, 68),
+ (55, 23, 62), (49, 25, 61), (43, 30, 58), (34, 30, 53),
+ (32, 28, 53), (31, 21, 45), (26, 17, 34), (23, 14, 31),
+ (22, 9, 27), (19, 13, 25), (17, 14, 25), (18, 14, 28),
+ (21, 17, 32), (26, 17, 38), (27, 25, 49), (36, 33, 62),
+ (44, 37, 78), (58, 43, 86), (80, 46, 106), (97, 56, 122),
+ (100, 66, 142), (92, 65, 132), (78, 65, 121), (88, 54, 114),
+ (83, 51, 116), (76, 41, 97), (68, 32, 76), (50, 30, 65),
+ (42, 27, 56), (31, 22, 49), (23, 21, 42), (20, 19, 37),
+ (20, 17, 36), (21, 18, 37), (22, 17, 40), (28, 22, 50),
+ (38, 28, 65), (44, 35, 82), (50, 42, 89), (64, 46, 106),
+ (74, 48, 113), (74, 57, 128), (82, 70, 136), (83, 75, 126),
+ (87, 78, 135), (98, 89, 134), (103, 82, 175), (129, 76, 182),
+ (173, 105, 188), (197, 126, 230), (220, 146, 255), (167, 108, 200),
+ (138, 88, 177), (105, 85, 156), (112, 74, 133), (97, 51, 124)
+ ),
+
+// 639 Serenity
+((144, 133, 137), (142, 126, 129), (142, 125, 127), (142, 125, 126),
+ (139, 119, 119), (137, 113, 113), (133, 108, 108), (129, 103, 104),
+ (107, 80, 85), (97, 70, 77), (87, 60, 69), (81, 54, 63),
+ (76, 49, 57), (75, 50, 57), (74, 51, 57), (76, 53, 59),
+ (78, 56, 61), (88, 72, 77), (92, 78, 85), (96, 85, 93),
+ (100, 90, 97), (104, 96, 101), (105, 96, 102), (106, 97, 104),
+ (104, 95, 101), (103, 91, 98), (102, 87, 96), (100, 85, 94),
+ (99, 84, 92), (99, 84, 92), (100, 84, 92), (103, 87, 95),
+ (104, 92, 99), (113, 102, 107), (114, 104, 108), (116, 106, 110),
+ (117, 106, 111), (118, 106, 112), (117, 105, 112), (116, 105, 112),
+ (114, 102, 109), (114, 101, 108), (114, 100, 108), (117, 100, 108),
+ (121, 101, 108), (122, 101, 108), (124, 102, 109), (128, 103, 109),
+ (127, 103, 109), (119, 102, 107), (114, 99, 104), (109, 96, 102),
+ (102, 90, 97), (96, 85, 92), (94, 82, 89), (92, 79, 86),
+ (84, 65, 73), (83, 58, 66), (83, 52, 60), (83, 53, 61),
+ (84, 55, 62), (85, 57, 64), (87, 60, 67), (94, 70, 74),
+ (98, 78, 81), (107, 89, 91), (105, 87, 90), (103, 86, 90),
+ (101, 85, 89), (99, 84, 89), (94, 82, 86), (86, 75, 81),
+ (76, 63, 69), (74, 59, 66), (73, 56, 64), (76, 59, 66),
+ (79, 63, 69), (85, 68, 75), (91, 73, 81), (105, 86, 92),
+ (119, 103, 107), (150, 134, 138), (157, 144, 147), (165, 154, 157),
+ (166, 154, 157), (167, 155, 157), (168, 151, 152), (158, 141, 145),
+ (145, 125, 127), (138, 117, 120), (131, 109, 114), (129, 108, 113),
+ (127, 107, 112), (126, 107, 113), (124, 107, 113), (122, 107, 112),
+ (125, 110, 116), (133, 120, 125), (140, 124, 128), (148, 128, 132),
+ (151, 131, 134), (155, 134, 136), (163, 138, 141), (169, 145, 146),
+ (182, 163, 164), (186, 169, 170), (190, 176, 177), (188, 176, 177),
+ (186, 176, 178), (179, 170, 173), (174, 165, 169), (166, 157, 161),
+ (157, 147, 151), (148, 132, 137), (145, 128, 133), (143, 125, 130),
+ (137, 117, 122), (135, 109, 114), (129, 103, 108), (122, 99, 103),
+ (105, 80, 86), (93, 72, 78), (81, 64, 70), (77, 58, 65),
+ (73, 53, 60), (66, 44, 52), (60, 39, 48), (59, 37, 46),
+ (61, 38, 47), (76, 52, 60), (80, 56, 63), (84, 61, 67),
+ (95, 68, 75), (99, 76, 80), (100, 74, 78), (99, 69, 74),
+ (76, 55, 59), (67, 46, 52), (58, 38, 45), (53, 36, 43),
+ (48, 35, 41), (43, 30, 39), (42, 26, 36), (39, 25, 34),
+ (38, 25, 35), (44, 26, 36), (46, 28, 38), (48, 30, 40),
+ (51, 35, 44), (59, 40, 49), (68, 49, 57), (73, 57, 64),
+ (87, 72, 78), (89, 75, 81), (92, 79, 85), (97, 83, 89),
+ (102, 86, 93), (105, 89, 95), (109, 90, 96), (114, 92, 99),
+ (117, 96, 102), (122, 104, 112), (125, 108, 115), (128, 113, 119),
+ (133, 121, 126), (139, 128, 134), (146, 136, 142), (153, 144, 149),
+ (168, 159, 163), (171, 162, 166), (174, 165, 169), (178, 168, 172),
+ (182, 169, 171), (182, 168, 170), (177, 161, 164), (172, 152, 154),
+ (164, 144, 145), (154, 135, 134), (146, 123, 124), (136, 113, 115),
+ (129, 107, 108), (124, 101, 103), (119, 96, 101), (117, 97, 103),
+ (124, 109, 115), (127, 113, 119), (130, 117, 124), (138, 126, 132),
+ (149, 134, 139), (157, 142, 146), (159, 146, 151), (162, 148, 153),
+ (164, 150, 154), (160, 149, 154), (157, 148, 153), (157, 146, 150),
+ (155, 144, 148), (153, 143, 148), (155, 145, 149), (156, 146, 150),
+ (158, 149, 153), (164, 153, 157), (171, 155, 158), (173, 156, 159),
+ (173, 156, 158), (174, 153, 154), (170, 148, 150), (160, 142, 145),
+ (151, 135, 139), (145, 129, 131), (136, 123, 126), (128, 116, 122),
+ (125, 113, 118), (124, 113, 118), (126, 114, 118), (127, 115, 120),
+ (131, 120, 125), (136, 123, 128), (135, 124, 129), (134, 124, 129),
+ (134, 124, 129), (131, 121, 126), (129, 119, 125), (130, 119, 124),
+ (132, 122, 127), (138, 128, 133), (147, 137, 142), (159, 149, 153),
+ (171, 162, 165), (185, 173, 176), (200, 184, 184), (201, 188, 189),
+ (198, 185, 188), (195, 178, 179), (183, 169, 171), (170, 158, 162),
+ (160, 146, 151), (154, 138, 143), (151, 132, 136), (150, 127, 133),
+ (151, 124, 130), (150, 122, 127), (148, 120, 126), (145, 117, 123),
+ (141, 115, 120), (137, 114, 117), (132, 109, 113), (128, 105, 110),
+ (125, 103, 108), (123, 101, 107), (123, 104, 110), (125, 108, 115),
+ (132, 118, 124), (136, 125, 130), (134, 123, 128), (140, 128, 132)
+ ),
+
+// 640 Serpent
+((36, 70, 44), (26, 82, 55), (26, 80, 55), (27, 79, 56),
+ (21, 70, 51), (16, 62, 46), (17, 56, 41), (18, 50, 37),
+ (11, 34, 23), (10, 35, 18), (10, 37, 14), (10, 45, 19),
+ (10, 54, 24), (10, 62, 31), (10, 70, 38), (9, 68, 38),
+ (9, 66, 39), (17, 51, 31), (19, 44, 22), (22, 37, 14),
+ (39, 43, 12), (57, 49, 10), (66, 57, 8), (76, 65, 7),
+ (107, 73, 5), (101, 69, 2), (96, 66, 0), (77, 49, 1),
+ (59, 32, 3), (49, 25, 1), (40, 18, 0), (31, 15, 2),
+ (31, 13, 3), (66, 26, 2), (79, 41, 7), (93, 56, 12),
+ (95, 66, 25), (98, 77, 38), (88, 81, 45), (78, 85, 52),
+ (48, 87, 73), (45, 81, 73), (42, 76, 74), (56, 77, 65),
+ (70, 79, 56), (79, 77, 53), (89, 75, 50), (97, 77, 45),
+ (92, 80, 45), (75, 91, 58), (55, 83, 57), (35, 76, 57),
+ (31, 66, 47), (27, 57, 37), (25, 52, 31), (24, 48, 25),
+ (25, 31, 7), (33, 35, 11), (41, 39, 15), (57, 59, 31),
+ (73, 80, 47), (86, 94, 54), (99, 108, 62), (125, 117, 62),
+ (140, 132, 71), (174, 149, 76), (174, 141, 68), (175, 134, 60),
+ (176, 133, 56), (177, 132, 53), (180, 127, 43), (185, 129, 35),
+ (196, 131, 20), (192, 131, 20), (189, 132, 20), (178, 125, 20),
+ (168, 118, 21), (159, 110, 20), (151, 103, 20), (132, 85, 24),
+ (110, 71, 16), (69, 42, 10), (63, 41, 6), (57, 41, 2),
+ (63, 43, 3), (70, 45, 4), (89, 53, 7), (104, 68, 11),
+ (153, 91, 12), (150, 96, 16), (147, 102, 21), (141, 98, 21),
+ (135, 94, 22), (111, 86, 26), (86, 74, 34), (62, 60, 40),
+ (41, 47, 41), (13, 32, 31), (9, 23, 26), (5, 15, 21),
+ (4, 15, 15), (4, 16, 10), (4, 15, 8), (5, 14, 9),
+ (7, 16, 8), (7, 15, 7), (7, 15, 6), (7, 14, 5),
+ (7, 13, 4), (5, 9, 2), (3, 6, 1), (3, 4, 2),
+ (3, 5, 3), (6, 12, 8), (8, 18, 11), (11, 25, 14),
+ (17, 39, 23), (20, 48, 30), (28, 58, 35), (39, 65, 37),
+ (49, 65, 34), (56, 61, 29), (64, 57, 25), (69, 55, 26),
+ (74, 53, 28), (85, 56, 30), (93, 65, 26), (107, 70, 26),
+ (118, 71, 25), (117, 77, 11), (109, 74, 12), (102, 71, 14),
+ (90, 61, 10), (70, 50, 7), (49, 43, 13), (36, 37, 13),
+ (19, 29, 11), (16, 27, 11), (13, 26, 11), (13, 25, 11),
+ (14, 24, 11), (18, 23, 10), (20, 20, 7), (25, 20, 4),
+ (38, 25, 3), (84, 44, 2), (92, 52, 3), (101, 60, 5),
+ (128, 76, 6), (152, 96, 12), (163, 114, 25), (172, 132, 35),
+ (201, 181, 68), (205, 184, 75), (210, 187, 82), (198, 183, 82),
+ (206, 194, 83), (209, 182, 78), (190, 154, 62), (183, 142, 49),
+ (178, 125, 44), (165, 102, 25), (160, 94, 30), (155, 87, 35),
+ (142, 70, 36), (118, 64, 27), (96, 59, 35), (81, 52, 44),
+ (43, 63, 46), (40, 66, 49), (38, 69, 53), (41, 73, 50),
+ (53, 78, 45), (71, 91, 47), (91, 100, 50), (115, 107, 52),
+ (139, 123, 56), (160, 142, 71), (179, 161, 97), (179, 171, 107),
+ (178, 173, 98), (192, 174, 99), (174, 165, 96), (156, 151, 70),
+ (152, 115, 35), (146, 107, 28), (141, 100, 22), (139, 89, 16),
+ (140, 82, 13), (131, 70, 10), (112, 58, 10), (98, 48, 9),
+ (87, 42, 10), (73, 40, 11), (68, 42, 13), (82, 55, 15),
+ (105, 75, 17), (121, 86, 25), (146, 105, 27), (168, 122, 28),
+ (150, 114, 36), (131, 106, 40), (114, 100, 45), (83, 92, 50),
+ (53, 78, 49), (40, 66, 51), (40, 62, 49), (37, 58, 43),
+ (37, 51, 35), (40, 43, 27), (39, 38, 24), (33, 33, 20),
+ (30, 27, 14), (23, 23, 11), (17, 18, 8), (14, 14, 5),
+ (8, 14, 4), (5, 14, 2), (5, 14, 0), (4, 17, 1),
+ (5, 17, 2), (7, 17, 4), (9, 20, 6), (9, 21, 7),
+ (9, 21, 8), (9, 20, 9), (10, 18, 7), (10, 14, 4),
+ (13, 10, 4), (16, 11, 5), (21, 18, 8), (25, 27, 15),
+ (27, 40, 26), (29, 54, 34), (30, 64, 40), (27, 68, 43),
+ (27, 62, 42), (30, 55, 35), (32, 51, 26), (36, 45, 25),
+ (38, 44, 24), (39, 45, 21), (37, 49, 25), (35, 49, 24),
+ (37, 42, 22), (40, 44, 24), (44, 43, 21), (48, 38, 20),
+ (53, 41, 18), (56, 43, 16), (52, 45, 18), (49, 49, 18),
+ (48, 49, 18), (44, 51, 22), (38, 59, 30), (36, 67, 36)
+ ),
+
+// 641 Sharp
+((42, 214, 25), (29, 205, 17), (28, 201, 20), (27, 197, 23),
+ (27, 194, 34), (28, 192, 45), (26, 186, 52), (25, 181, 59),
+ (19, 151, 71), (14, 130, 67), (9, 109, 63), (6, 94, 57),
+ (3, 80, 52), (2, 66, 59), (2, 52, 66), (3, 47, 68),
+ (5, 42, 71), (19, 32, 71), (30, 45, 73), (42, 58, 75),
+ (48, 68, 84), (54, 79, 94), (53, 80, 101), (52, 81, 109),
+ (55, 92, 133), (61, 108, 142), (68, 125, 151), (71, 143, 155),
+ (74, 162, 160), (69, 166, 159), (65, 170, 158), (54, 166, 152),
+ (41, 162, 142), (26, 152, 107), (23, 159, 89), (21, 166, 71),
+ (17, 168, 57), (14, 171, 43), (15, 172, 40), (17, 174, 37),
+ (43, 179, 30), (62, 184, 29), (81, 190, 28), (99, 194, 31),
+ (117, 199, 35), (127, 203, 38), (138, 207, 41), (146, 211, 47),
+ (167, 212, 49), (196, 194, 44), (194, 178, 39), (193, 163, 34),
+ (179, 148, 32), (165, 133, 30), (156, 126, 30), (147, 119, 31),
+ (118, 83, 19), (100, 67, 12), (82, 51, 6), (61, 42, 5),
+ (41, 34, 5), (31, 31, 5), (22, 28, 5), (9, 25, 3),
+ (2, 22, 3), (0, 15, 1), (0, 26, 2), (0, 37, 3),
+ (0, 43, 3), (0, 50, 4), (0, 62, 5), (0, 73, 6),
+ (0, 82, 6), (0, 86, 6), (0, 90, 7), (0, 102, 9),
+ (0, 114, 12), (0, 118, 19), (0, 122, 26), (0, 128, 45),
+ (2, 131, 64), (3, 113, 95), (4, 105, 93), (5, 98, 92),
+ (5, 93, 90), (5, 89, 88), (4, 78, 87), (6, 67, 87),
+ (10, 42, 99), (14, 37, 95), (19, 32, 91), (19, 33, 82),
+ (20, 35, 74), (18, 42, 55), (17, 51, 36), (14, 57, 22),
+ (11, 64, 14), (15, 81, 17), (19, 85, 20), (24, 89, 23),
+ (24, 89, 23), (24, 89, 23), (22, 87, 22), (16, 84, 18),
+ (7, 78, 15), (9, 72, 16), (12, 66, 17), (12, 64, 17),
+ (13, 63, 17), (13, 60, 17), (13, 54, 16), (12, 44, 13),
+ (6, 38, 8), (1, 26, 4), (1, 25, 3), (1, 24, 2),
+ (1, 26, 2), (1, 30, 2), (1, 32, 3), (2, 34, 4),
+ (8, 30, 13), (14, 29, 18), (20, 29, 24), (21, 33, 25),
+ (23, 38, 27), (22, 50, 28), (21, 62, 27), (19, 74, 24),
+ (18, 85, 24), (21, 104, 27), (23, 109, 28), (25, 115, 30),
+ (25, 125, 30), (23, 132, 28), (21, 136, 22), (24, 138, 17),
+ (46, 122, 8), (65, 116, 8), (85, 110, 8), (94, 110, 7),
+ (104, 110, 7), (117, 110, 7), (134, 110, 8), (149, 101, 11),
+ (168, 90, 10), (184, 77, 20), (185, 76, 21), (187, 75, 23),
+ (182, 77, 25), (173, 83, 26), (158, 84, 30), (146, 76, 27),
+ (115, 59, 28), (105, 57, 29), (96, 55, 31), (76, 60, 32),
+ (58, 69, 32), (41, 80, 34), (27, 87, 30), (21, 90, 26),
+ (15, 90, 20), (7, 100, 15), (6, 104, 14), (5, 108, 13),
+ (4, 119, 12), (3, 130, 11), (3, 140, 10), (1, 140, 7),
+ (0, 122, 5), (1, 115, 4), (2, 109, 4), (7, 98, 3),
+ (15, 90, 3), (28, 84, 2), (46, 82, 1), (66, 85, 1),
+ (84, 87, 1), (102, 88, 2), (120, 87, 2), (136, 91, 3),
+ (152, 94, 2), (164, 93, 3), (174, 98, 7), (177, 110, 12),
+ (171, 130, 17), (164, 136, 18), (157, 142, 19), (145, 153, 19),
+ (130, 155, 16), (114, 151, 15), (92, 148, 17), (77, 147, 20),
+ (57, 143, 21), (37, 139, 21), (21, 135, 21), (12, 128, 16),
+ (7, 117, 11), (1, 104, 7), (0, 91, 6), (0, 80, 5),
+ (0, 72, 5), (0, 62, 4), (0, 50, 3), (0, 39, 2),
+ (0, 28, 1), (1, 21, 1), (1, 22, 0), (1, 29, 1),
+ (1, 41, 2), (1, 54, 3), (2, 67, 7), (3, 80, 12),
+ (10, 94, 18), (17, 109, 24), (21, 128, 39), (28, 148, 60),
+ (35, 165, 77), (35, 175, 93), (29, 182, 110), (32, 186, 123),
+ (36, 182, 130), (33, 175, 139), (31, 168, 156), (39, 157, 162),
+ (37, 143, 159), (27, 125, 158), (23, 110, 150), (20, 94, 135),
+ (13, 76, 114), (5, 61, 104), (7, 47, 92), (11, 36, 76),
+ (19, 31, 62), (32, 26, 47), (51, 28, 31), (72, 36, 14),
+ (90, 46, 7), (97, 52, 10), (100, 66, 18), (105, 83, 34),
+ (111, 97, 55), (123, 112, 76), (141, 132, 96), (166, 151, 100),
+ (170, 158, 98), (166, 172, 97), (152, 183, 93), (130, 186, 93),
+ (105, 186, 95), (88, 192, 110), (90, 196, 113), (86, 196, 106),
+ (87, 201, 97), (83, 210, 77), (74, 213, 57), (58, 213, 36)
+ ),
+
+// 642 Shy_Violets
+((98, 90, 82), (65, 71, 48), (60, 64, 47), (55, 57, 47),
+ (60, 46, 53), (65, 36, 59), (69, 33, 64), (74, 30, 70),
+ (84, 26, 80), (80, 38, 75), (76, 51, 70), (74, 61, 63),
+ (73, 72, 56), (72, 75, 56), (72, 78, 57), (72, 80, 62),
+ (73, 82, 68), (87, 83, 105), (96, 76, 116), (105, 70, 128),
+ (103, 69, 131), (101, 69, 135), (97, 72, 135), (94, 75, 136),
+ (77, 97, 98), (60, 105, 80), (43, 113, 63), (37, 125, 50),
+ (32, 138, 38), (28, 147, 32), (24, 156, 26), (17, 161, 27),
+ (18, 170, 28), (44, 160, 19), (50, 150, 27), (57, 140, 36),
+ (72, 120, 46), (87, 100, 56), (92, 89, 61), (97, 78, 66),
+ (99, 51, 96), (96, 45, 111), (93, 39, 126), (86, 40, 126),
+ (79, 41, 126), (75, 42, 124), (72, 43, 123), (73, 41, 123),
+ (78, 44, 116), (72, 41, 96), (75, 37, 90), (79, 34, 85),
+ (76, 30, 81), (73, 27, 77), (67, 26, 77), (61, 26, 77),
+ (45, 27, 71), (37, 36, 63), (30, 45, 55), (23, 60, 49),
+ (16, 76, 43), (16, 86, 39), (16, 97, 35), (11, 108, 35),
+ (13, 109, 35), (15, 89, 52), (14, 74, 63), (14, 60, 75),
+ (16, 51, 80), (19, 42, 86), (28, 28, 93), (31, 20, 94),
+ (46, 22, 93), (52, 29, 89), (58, 37, 85), (58, 47, 72),
+ (58, 57, 60), (55, 64, 58), (53, 71, 56), (46, 83, 52),
+ (46, 90, 41), (44, 95, 35), (53, 92, 45), (63, 89, 55),
+ (73, 82, 60), (83, 76, 66), (102, 62, 80), (115, 49, 90),
+ (129, 32, 101), (129, 24, 102), (129, 17, 104), (123, 16, 105),
+ (117, 16, 106), (99, 12, 97), (76, 11, 90), (63, 23, 76),
+ (56, 44, 64), (51, 73, 46), (50, 80, 44), (49, 87, 42),
+ (56, 90, 43), (64, 93, 44), (69, 85, 54), (74, 75, 71),
+ (86, 63, 123), (105, 67, 140), (124, 72, 157), (128, 75, 158),
+ (132, 79, 159), (139, 86, 170), (143, 99, 155), (140, 111, 139),
+ (128, 120, 112), (100, 107, 77), (88, 103, 69), (77, 99, 61),
+ (60, 93, 49), (55, 80, 49), (58, 64, 53), (64, 49, 61),
+ (88, 19, 74), (100, 12, 76), (113, 5, 78), (116, 6, 78),
+ (119, 7, 78), (117, 12, 73), (123, 30, 68), (119, 53, 55),
+ (114, 71, 46), (99, 79, 43), (95, 81, 43), (91, 84, 44),
+ (84, 89, 45), (77, 82, 51), (66, 63, 66), (54, 42, 81),
+ (37, 18, 94), (26, 14, 94), (15, 10, 94), (11, 9, 92),
+ (7, 8, 91), (7, 5, 92), (14, 4, 92), (28, 6, 92),
+ (42, 10, 91), (69, 8, 102), (79, 8, 107), (90, 9, 113),
+ (109, 12, 123), (124, 13, 131), (127, 16, 138), (128, 20, 140),
+ (123, 27, 131), (122, 27, 126), (121, 28, 122), (119, 31, 109),
+ (109, 31, 94), (106, 27, 84), (107, 22, 81), (112, 21, 80),
+ (108, 18, 85), (102, 7, 104), (100, 7, 106), (99, 8, 108),
+ (91, 11, 112), (86, 11, 113), (84, 9, 113), (84, 10, 108),
+ (76, 8, 98), (77, 7, 96), (78, 6, 95), (82, 9, 94),
+ (84, 11, 97), (85, 13, 102), (90, 14, 107), (99, 20, 116),
+ (113, 32, 134), (129, 43, 153), (142, 57, 170), (156, 69, 181),
+ (171, 90, 195), (185, 108, 207), (198, 123, 217), (202, 130, 221),
+ (199, 141, 217), (199, 139, 215), (199, 137, 214), (195, 125, 214),
+ (189, 112, 213), (176, 101, 208), (164, 89, 198), (148, 75, 187),
+ (138, 60, 181), (129, 50, 171), (123, 43, 165), (115, 35, 157),
+ (113, 30, 155), (119, 28, 152), (127, 27, 158), (135, 28, 163),
+ (144, 30, 167), (156, 41, 173), (168, 50, 181), (177, 55, 180),
+ (183, 52, 171), (185, 48, 162), (188, 52, 160), (179, 51, 151),
+ (170, 47, 138), (159, 35, 121), (157, 36, 114), (154, 43, 115),
+ (148, 46, 119), (138, 45, 122), (124, 45, 123), (122, 52, 130),
+ (117, 51, 134), (109, 47, 137), (89, 39, 130), (76, 39, 122),
+ (63, 36, 110), (53, 36, 100), (46, 30, 89), (49, 37, 83),
+ (42, 38, 90), (32, 35, 96), (21, 25, 98), (26, 27, 94),
+ (22, 28, 104), (25, 22, 113), (25, 17, 115), (31, 27, 102),
+ (27, 46, 89), (27, 63, 75), (30, 79, 66), (38, 95, 58),
+ (47, 103, 56), (61, 106, 56), (80, 105, 70), (101, 110, 85),
+ (126, 105, 106), (153, 94, 125), (174, 85, 154), (191, 94, 175),
+ (200, 108, 196), (204, 116, 204), (200, 121, 209), (202, 127, 209),
+ (206, 136, 213), (207, 138, 211), (201, 138, 206), (198, 127, 194),
+ (187, 116, 178), (167, 106, 156), (139, 108, 131), (117, 101, 106)
+ ),
+
+// 643 Singe
+((210, 164, 86), (236, 200, 106), (227, 187, 98), (219, 175, 91),
+ (190, 140, 75), (161, 106, 59), (148, 90, 50), (136, 74, 42),
+ (76, 21, 20), (66, 13, 11), (57, 6, 3), (54, 3, 1),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (67, 13, 13), (88, 33, 19), (110, 53, 26),
+ (145, 79, 44), (180, 106, 63), (191, 125, 72), (203, 144, 82),
+ (245, 180, 106), (249, 194, 122), (253, 209, 138), (254, 215, 140),
+ (255, 222, 142), (254, 221, 140), (254, 220, 139), (254, 222, 132),
+ (253, 217, 127), (227, 182, 104), (217, 170, 86), (208, 158, 69),
+ (199, 146, 63), (191, 134, 58), (193, 136, 56), (195, 139, 55),
+ (219, 168, 74), (216, 168, 78), (213, 169, 83), (208, 162, 78),
+ (204, 156, 74), (191, 142, 68), (178, 129, 62), (150, 98, 45),
+ (127, 68, 33), (84, 26, 7), (72, 13, 3), (60, 0, 0),
+ (56, 0, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 0, 0), (52, 0, 0), (54, 0, 0), (57, 0, 0),
+ (66, 1, 1), (69, 3, 1), (72, 6, 1), (72, 5, 1),
+ (72, 4, 1), (69, 5, 1), (67, 6, 1), (62, 3, 0),
+ (59, 0, 1), (52, 0, 0), (52, 0, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (51, 1, 0), (51, 1, 0), (49, 1, 0),
+ (48, 1, 0), (45, 0, 0), (44, 1, 0), (39, 2, 0),
+ (35, 1, 0), (35, 2, 0), (38, 1, 0), (41, 0, 0),
+ (42, 0, 0), (44, 0, 0), (47, 0, 0), (50, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (54, 1, 0), (56, 1, 0), (59, 6, 0),
+ (62, 11, 0), (75, 20, 0), (93, 29, 0), (112, 52, 8),
+ (149, 71, 20), (202, 111, 41), (215, 118, 47), (228, 125, 54),
+ (242, 139, 65), (234, 147, 75), (232, 152, 76), (216, 144, 69),
+ (176, 119, 57), (149, 86, 41), (123, 53, 26), (112, 46, 21),
+ (102, 40, 16), (77, 18, 8), (63, 1, 3), (57, 0, 1),
+ (53, 0, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (51, 1, 0), (49, 1, 2), (48, 1, 4),
+ (46, 1, 3), (42, 2, 3), (40, 0, 4), (42, 1, 2),
+ (44, 0, 0), (46, 0, 0), (48, 0, 0), (51, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (51, 0, 0), (51, 0, 0), (51, 0, 0),
+ (51, 0, 0), (51, 0, 0), (51, 0, 0), (51, 0, 0),
+ (51, 0, 0), (52, 1, 0), (52, 1, 0), (52, 3, 0),
+ (57, 5, 0), (63, 13, 1), (71, 23, 4), (92, 37, 12),
+ (111, 53, 18), (120, 66, 14), (137, 78, 14), (142, 77, 23),
+ (129, 66, 15), (118, 53, 2), (105, 41, 5), (84, 20, 5),
+ (71, 8, 1), (67, 5, 3), (63, 0, 2), (58, 1, 1),
+ (57, 1, 3), (57, 0, 2), (55, 0, 0), (52, 0, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 1, 0),
+ (52, 1, 0), (52, 1, 0), (52, 1, 0), (52, 0, 0),
+ (53, 0, 0), (55, 2, 0), (62, 7, 0), (74, 19, 2),
+ (95, 37, 12), (121, 65, 27), (151, 99, 43), (185, 131, 63)
+ ),
+
+// 644 Slate
+((72, 72, 92), (81, 81, 100), (83, 83, 103), (85, 85, 106),
+ (83, 83, 103), (82, 81, 100), (80, 79, 97), (78, 78, 95),
+ (74, 71, 88), (72, 69, 86), (71, 67, 84), (70, 67, 83),
+ (70, 67, 82), (69, 67, 83), (68, 67, 84), (67, 67, 84),
+ (67, 68, 84), (70, 70, 85), (70, 72, 87), (71, 74, 89),
+ (71, 76, 93), (72, 78, 97), (73, 78, 98), (74, 79, 99),
+ (74, 82, 103), (74, 82, 103), (74, 82, 103), (73, 81, 103),
+ (72, 81, 103), (71, 79, 102), (71, 78, 101), (70, 77, 101),
+ (68, 75, 100), (61, 70, 100), (58, 67, 98), (56, 64, 96),
+ (52, 61, 92), (49, 59, 88), (47, 57, 87), (46, 56, 86),
+ (45, 53, 84), (44, 53, 84), (44, 53, 85), (44, 54, 85),
+ (44, 55, 86), (44, 55, 87), (44, 55, 89), (44, 56, 90),
+ (44, 56, 90), (41, 55, 92), (39, 53, 92), (38, 52, 92),
+ (37, 51, 91), (37, 50, 90), (37, 49, 89), (37, 49, 89),
+ (37, 48, 88), (37, 47, 86), (38, 46, 84), (38, 46, 82),
+ (39, 46, 81), (40, 45, 80), (41, 45, 79), (41, 45, 79),
+ (41, 45, 78), (41, 45, 77), (40, 44, 76), (39, 44, 75),
+ (38, 43, 75), (37, 42, 75), (35, 41, 74), (34, 39, 72),
+ (35, 38, 68), (35, 38, 67), (35, 38, 66), (36, 38, 64),
+ (38, 38, 63), (38, 38, 61), (39, 38, 60), (41, 37, 57),
+ (41, 37, 56), (44, 37, 53), (44, 36, 52), (45, 35, 52),
+ (45, 35, 52), (46, 35, 52), (48, 35, 52), (50, 37, 52),
+ (55, 41, 55), (58, 45, 59), (61, 49, 63), (64, 52, 65),
+ (67, 55, 67), (72, 60, 72), (79, 67, 77), (84, 71, 81),
+ (88, 75, 84), (96, 82, 84), (98, 84, 83), (100, 86, 82),
+ (100, 86, 81), (101, 86, 81), (103, 86, 81), (104, 86, 79),
+ (103, 84, 79), (102, 82, 78), (101, 81, 78), (100, 80, 78),
+ (100, 79, 78), (97, 78, 79), (97, 77, 81), (96, 75, 82),
+ (96, 77, 85), (99, 79, 92), (101, 82, 94), (103, 85, 96),
+ (106, 89, 101), (110, 93, 104), (117, 100, 108), (124, 108, 112),
+ (136, 119, 121), (137, 121, 123), (139, 124, 125), (139, 123, 125),
+ (139, 122, 126), (136, 121, 124), (133, 118, 121), (129, 114, 115),
+ (125, 108, 111), (115, 99, 101), (113, 97, 100), (111, 95, 99),
+ (106, 89, 96), (103, 86, 95), (99, 84, 95), (96, 79, 93),
+ (93, 79, 93), (94, 80, 93), (96, 82, 93), (96, 83, 93),
+ (97, 84, 93), (99, 85, 93), (100, 86, 95), (101, 86, 95),
+ (101, 86, 93), (100, 86, 93), (99, 85, 92), (99, 85, 92),
+ (99, 84, 90), (96, 82, 89), (93, 79, 88), (89, 77, 84),
+ (77, 66, 77), (73, 62, 74), (70, 59, 71), (61, 52, 67),
+ (56, 46, 61), (52, 42, 57), (48, 39, 55), (45, 38, 53),
+ (45, 37, 53), (42, 35, 55), (41, 34, 55), (41, 34, 55),
+ (39, 34, 56), (38, 32, 57), (38, 32, 57), (38, 32, 57),
+ (38, 32, 59), (38, 33, 59), (38, 34, 59), (38, 34, 60),
+ (38, 34, 60), (38, 34, 61), (39, 35, 61), (39, 35, 63),
+ (38, 35, 63), (38, 37, 64), (38, 37, 64), (39, 38, 64),
+ (39, 38, 66), (41, 39, 64), (42, 39, 66), (42, 39, 66),
+ (42, 38, 64), (41, 38, 63), (41, 38, 63), (42, 37, 61),
+ (42, 37, 60), (44, 37, 60), (44, 35, 59), (44, 35, 57),
+ (44, 35, 57), (44, 35, 56), (44, 34, 56), (44, 34, 55),
+ (44, 34, 55), (44, 32, 55), (44, 32, 53), (44, 32, 52),
+ (45, 32, 52), (44, 31, 50), (44, 31, 50), (44, 30, 50),
+ (42, 30, 49), (42, 28, 49), (44, 30, 48), (45, 30, 48),
+ (46, 31, 48), (48, 31, 48), (49, 32, 49), (49, 34, 50),
+ (49, 35, 52), (49, 35, 53), (48, 37, 55), (48, 37, 57),
+ (46, 38, 59), (46, 39, 60), (48, 41, 61), (48, 42, 63),
+ (48, 42, 64), (48, 44, 66), (49, 45, 67), (49, 45, 70),
+ (49, 48, 72), (50, 49, 74), (53, 52, 78), (57, 56, 82),
+ (60, 61, 88), (64, 66, 93), (66, 68, 97), (67, 71, 99),
+ (67, 72, 100), (68, 72, 101), (67, 72, 101), (67, 72, 103),
+ (68, 72, 103), (68, 74, 103), (67, 72, 103), (67, 72, 103),
+ (64, 71, 101), (63, 71, 100), (61, 68, 99), (60, 67, 96),
+ (57, 63, 93), (55, 61, 90), (55, 60, 89), (55, 60, 89),
+ (55, 60, 89), (56, 60, 89), (56, 61, 90), (57, 61, 90),
+ (59, 63, 89), (60, 63, 90), (64, 66, 89), (68, 68, 90)
+ ),
+
+// 645 Slightly_Messy
+((81, 121, 23), (87, 118, 22), (89, 115, 22), (92, 113, 23),
+ (93, 110, 23), (95, 107, 23), (96, 105, 23), (97, 104, 24),
+ (102, 98, 25), (107, 96, 25), (113, 95, 25), (119, 95, 24),
+ (126, 96, 24), (133, 96, 22), (140, 97, 21), (142, 97, 20),
+ (145, 97, 19), (153, 100, 17), (154, 100, 14), (156, 101, 12),
+ (157, 100, 9), (158, 100, 7), (157, 99, 6), (157, 99, 5),
+ (152, 99, 3), (148, 100, 4), (145, 102, 5), (144, 103, 10),
+ (143, 104, 16), (142, 104, 19), (142, 104, 22), (141, 106, 29),
+ (139, 108, 38), (122, 118, 62), (112, 118, 74), (102, 119, 87),
+ (92, 115, 94), (83, 112, 101), (77, 111, 103), (71, 110, 106),
+ (43, 102, 111), (34, 94, 108), (25, 86, 106), (19, 78, 101),
+ (13, 70, 97), (11, 66, 95), (9, 62, 93), (6, 54, 90),
+ (3, 47, 88), (2, 36, 86), (6, 33, 88), (10, 31, 90),
+ (16, 32, 94), (23, 34, 98), (27, 35, 100), (32, 36, 102),
+ (59, 43, 110), (73, 51, 111), (88, 59, 113), (102, 72, 111),
+ (116, 85, 110), (122, 92, 109), (129, 100, 108), (142, 112, 107),
+ (154, 122, 101), (170, 141, 90), (173, 153, 87), (177, 165, 84),
+ (176, 169, 83), (176, 173, 82), (174, 174, 80), (170, 172, 78),
+ (160, 163, 74), (151, 158, 73), (143, 153, 72), (130, 144, 72),
+ (118, 136, 72), (111, 128, 73), (105, 121, 74), (93, 106, 75),
+ (81, 90, 77), (58, 63, 76), (47, 51, 75), (36, 40, 75),
+ (32, 35, 74), (28, 30, 73), (24, 21, 68), (21, 15, 62),
+ (19, 7, 53), (19, 6, 51), (19, 6, 50), (18, 6, 49),
+ (18, 7, 49), (19, 8, 49), (20, 11, 50), (22, 15, 52),
+ (25, 22, 53), (37, 39, 55), (47, 46, 56), (57, 54, 58),
+ (62, 58, 58), (67, 62, 59), (79, 72, 57), (92, 81, 53),
+ (117, 94, 45), (125, 95, 42), (133, 96, 40), (135, 95, 38),
+ (138, 94, 37), (141, 91, 35), (143, 86, 34), (142, 80, 36),
+ (139, 74, 42), (124, 60, 60), (118, 55, 65), (112, 51, 70),
+ (98, 44, 80), (85, 40, 90), (73, 38, 101), (62, 39, 111),
+ (43, 43, 128), (37, 47, 132), (32, 52, 137), (31, 56, 137),
+ (31, 60, 138), (32, 67, 136), (35, 75, 131), (38, 81, 124),
+ (41, 85, 115), (54, 89, 95), (56, 89, 90), (59, 90, 85),
+ (63, 89, 73), (64, 87, 60), (65, 85, 48), (66, 80, 39),
+ (68, 69, 29), (66, 63, 25), (65, 57, 21), (63, 54, 19),
+ (62, 52, 18), (58, 48, 17), (56, 45, 16), (55, 41, 16),
+ (55, 37, 17), (55, 29, 22), (54, 27, 23), (54, 26, 25),
+ (53, 25, 28), (52, 24, 30), (51, 21, 32), (49, 19, 34),
+ (46, 13, 40), (45, 12, 41), (44, 11, 42), (41, 9, 44),
+ (40, 9, 45), (39, 8, 46), (37, 7, 48), (36, 6, 50),
+ (34, 6, 54), (33, 11, 64), (34, 13, 66), (35, 16, 68),
+ (37, 23, 73), (39, 33, 77), (40, 43, 80), (40, 54, 85),
+ (41, 74, 97), (41, 79, 99), (42, 84, 102), (43, 94, 102),
+ (43, 101, 101), (43, 106, 97), (41, 106, 92), (38, 103, 88),
+ (35, 99, 84), (33, 94, 78), (31, 89, 71), (31, 83, 64),
+ (31, 76, 57), (34, 68, 50), (36, 60, 46), (40, 54, 43),
+ (44, 57, 43), (46, 59, 43), (48, 61, 44), (52, 67, 46),
+ (58, 71, 47), (64, 79, 48), (67, 87, 50), (68, 96, 52),
+ (66, 103, 53), (65, 107, 53), (64, 110, 53), (65, 110, 53),
+ (66, 108, 51), (68, 104, 49), (70, 97, 46), (70, 89, 42),
+ (69, 80, 37), (69, 72, 32), (70, 65, 28), (73, 56, 24),
+ (75, 46, 20), (77, 36, 16), (78, 27, 13), (79, 21, 10),
+ (82, 17, 7), (84, 16, 7), (87, 16, 7), (90, 18, 9),
+ (91, 20, 11), (93, 22, 15), (94, 23, 21), (94, 24, 29),
+ (94, 26, 38), (93, 30, 48), (91, 33, 57), (87, 36, 67),
+ (82, 38, 76), (76, 40, 84), (70, 43, 90), (64, 47, 93),
+ (59, 52, 95), (54, 57, 95), (48, 64, 91), (45, 71, 85),
+ (43, 77, 75), (43, 82, 65), (46, 86, 55), (48, 90, 45),
+ (52, 94, 36), (58, 99, 27), (65, 104, 19), (72, 107, 12),
+ (78, 109, 8), (81, 110, 7), (83, 109, 9), (83, 109, 11),
+ (82, 109, 14), (81, 109, 16), (80, 110, 18), (79, 110, 21),
+ (76, 109, 23), (72, 109, 25), (67, 110, 27), (61, 110, 27),
+ (58, 112, 28), (57, 113, 27), (59, 115, 27), (63, 116, 27),
+ (67, 117, 26), (70, 119, 26), (74, 120, 25), (77, 121, 24)
+ ),
+
+// 646 Smog
+((47, 52, 45), (48, 51, 45), (48, 50, 45), (48, 50, 45),
+ (48, 49, 45), (48, 49, 45), (48, 48, 45), (48, 48, 46),
+ (48, 47, 45), (46, 46, 44), (45, 45, 44), (43, 43, 42),
+ (42, 42, 41), (40, 41, 39), (38, 40, 38), (37, 39, 37),
+ (36, 38, 37), (33, 36, 34), (33, 36, 34), (33, 37, 34),
+ (36, 39, 36), (39, 42, 39), (42, 45, 42), (46, 49, 45),
+ (65, 67, 60), (74, 75, 68), (83, 84, 77), (94, 93, 86),
+ (106, 102, 95), (113, 107, 100), (120, 113, 106), (132, 123, 116),
+ (140, 129, 123), (141, 127, 123), (139, 123, 121), (137, 119, 119),
+ (133, 115, 116), (130, 112, 113), (125, 108, 109), (121, 105, 105),
+ (95, 84, 84), (85, 77, 76), (76, 70, 69), (70, 66, 64),
+ (64, 62, 59), (61, 60, 56), (58, 58, 54), (53, 54, 50),
+ (49, 51, 47), (46, 48, 45), (46, 48, 45), (46, 48, 45),
+ (46, 47, 45), (46, 46, 45), (46, 45, 44), (46, 45, 44),
+ (44, 45, 43), (43, 44, 42), (42, 44, 41), (41, 43, 40),
+ (40, 42, 40), (40, 42, 39), (40, 42, 39), (40, 43, 40),
+ (41, 45, 41), (47, 52, 45), (52, 56, 50), (57, 61, 55),
+ (59, 64, 57), (62, 67, 60), (68, 73, 65), (72, 78, 69),
+ (80, 89, 78), (83, 92, 81), (86, 96, 84), (84, 95, 83),
+ (83, 94, 82), (81, 92, 80), (79, 91, 79), (75, 87, 75),
+ (71, 83, 72), (68, 78, 68), (67, 75, 66), (66, 73, 64),
+ (65, 72, 63), (65, 71, 63), (66, 70, 63), (68, 72, 64),
+ (74, 76, 68), (75, 76, 69), (76, 77, 70), (75, 76, 69),
+ (75, 75, 69), (72, 74, 68), (70, 73, 66), (67, 71, 64),
+ (65, 70, 63), (58, 64, 59), (55, 62, 57), (52, 61, 55),
+ (51, 61, 54), (51, 61, 54), (51, 61, 54), (52, 61, 54),
+ (54, 64, 56), (55, 65, 57), (57, 67, 58), (58, 67, 58),
+ (59, 67, 59), (60, 68, 60), (62, 67, 60), (62, 67, 60),
+ (62, 67, 60), (61, 65, 58), (60, 64, 57), (59, 63, 56),
+ (57, 60, 54), (55, 57, 52), (54, 56, 50), (52, 55, 49),
+ (49, 53, 47), (48, 52, 46), (47, 51, 45), (47, 51, 44),
+ (47, 51, 44), (47, 51, 44), (47, 52, 44), (47, 52, 45),
+ (47, 52, 45), (48, 51, 45), (48, 51, 45), (48, 51, 45),
+ (48, 50, 45), (48, 49, 45), (48, 49, 45), (48, 48, 46),
+ (48, 47, 45), (46, 46, 44), (45, 45, 44), (44, 44, 43),
+ (43, 44, 42), (42, 42, 41), (40, 41, 40), (38, 40, 38),
+ (36, 38, 37), (33, 36, 34), (33, 36, 34), (33, 36, 34),
+ (33, 37, 34), (35, 38, 36), (39, 42, 39), (46, 49, 45),
+ (65, 67, 60), (69, 71, 64), (74, 76, 69), (83, 84, 77),
+ (93, 92, 85), (106, 102, 95), (120, 113, 106), (132, 123, 116),
+ (140, 129, 123), (141, 127, 123), (139, 125, 122), (138, 123, 121),
+ (137, 119, 119), (135, 116, 117), (130, 112, 113), (121, 105, 105),
+ (95, 84, 84), (89, 80, 79), (84, 76, 75), (76, 70, 69),
+ (70, 66, 64), (64, 62, 59), (58, 58, 54), (53, 54, 50),
+ (49, 51, 47), (47, 49, 45), (46, 48, 45), (47, 48, 45),
+ (46, 48, 45), (46, 47, 45), (46, 46, 45), (46, 45, 44),
+ (44, 45, 43), (43, 45, 42), (43, 45, 42), (42, 44, 41),
+ (41, 44, 40), (40, 42, 40), (40, 42, 39), (40, 43, 40),
+ (41, 45, 41), (43, 48, 43), (47, 52, 45), (51, 56, 50),
+ (57, 61, 55), (62, 67, 60), (68, 73, 65), (72, 78, 69),
+ (76, 84, 74), (80, 89, 78), (83, 93, 82), (86, 96, 84),
+ (85, 96, 85), (83, 94, 82), (79, 91, 79), (75, 87, 75),
+ (71, 83, 72), (69, 81, 70), (68, 78, 68), (67, 76, 66),
+ (66, 73, 64), (65, 71, 63), (66, 70, 63), (68, 72, 64),
+ (71, 74, 65), (74, 76, 68), (76, 77, 69), (76, 77, 70),
+ (75, 75, 69), (72, 74, 68), (70, 73, 66), (67, 71, 64),
+ (65, 70, 63), (62, 67, 61), (58, 64, 59), (55, 62, 57),
+ (52, 61, 55), (51, 61, 54), (51, 61, 54), (52, 61, 54),
+ (52, 62, 55), (54, 64, 56), (55, 65, 57), (57, 67, 58),
+ (59, 67, 59), (60, 68, 60), (62, 67, 60), (62, 67, 60),
+ (62, 67, 60), (62, 67, 59), (61, 65, 58), (59, 63, 56),
+ (57, 60, 54), (55, 57, 52), (54, 56, 50), (52, 55, 49),
+ (50, 54, 47), (49, 53, 47), (48, 52, 46), (47, 51, 45),
+ (47, 51, 44), (47, 51, 44), (47, 52, 44), (47, 52, 45)
+ ),
+
+// 647 Sno_and_Shadows
+((8, 19, 22), (11, 20, 32), (8, 16, 34), (6, 12, 36),
+ (5, 9, 38), (4, 7, 40), (2, 5, 40), (1, 4, 41),
+ (0, 4, 47), (6, 11, 59), (12, 18, 71), (23, 37, 90),
+ (34, 57, 109), (59, 78, 129), (85, 100, 149), (93, 111, 155),
+ (102, 122, 162), (133, 147, 172), (122, 135, 153), (112, 123, 135),
+ (95, 106, 120), (79, 89, 105), (71, 81, 100), (63, 74, 96),
+ (38, 51, 96), (37, 52, 98), (37, 54, 101), (29, 49, 98),
+ (22, 45, 96), (22, 43, 93), (22, 41, 91), (21, 39, 94),
+ (24, 43, 99), (36, 56, 109), (63, 81, 127), (90, 107, 146),
+ (118, 134, 169), (146, 161, 193), (165, 177, 202), (184, 194, 212),
+ (228, 234, 243), (238, 243, 248), (249, 252, 253), (251, 252, 253),
+ (254, 252, 253), (254, 252, 253), (254, 253, 253), (252, 253, 255),
+ (245, 247, 251), (225, 230, 238), (210, 214, 226), (195, 199, 214),
+ (185, 191, 213), (175, 184, 213), (178, 184, 211), (182, 185, 210),
+ (204, 209, 230), (218, 222, 234), (232, 235, 238), (227, 234, 239),
+ (223, 234, 241), (216, 227, 235), (209, 221, 230), (186, 202, 216),
+ (157, 176, 210), (129, 153, 191), (119, 144, 181), (110, 135, 172),
+ (108, 132, 166), (107, 130, 160), (92, 114, 147), (74, 91, 123),
+ (41, 53, 83), (31, 45, 69), (22, 38, 56), (21, 37, 53),
+ (21, 36, 50), (22, 37, 52), (23, 39, 55), (26, 43, 68),
+ (37, 54, 86), (59, 77, 137), (85, 104, 158), (111, 132, 179),
+ (122, 144, 191), (134, 157, 204), (163, 182, 215), (185, 198, 223),
+ (202, 214, 231), (197, 205, 221), (192, 196, 211), (188, 193, 205),
+ (185, 191, 199), (177, 182, 192), (172, 179, 191), (178, 187, 193),
+ (188, 194, 198), (216, 222, 225), (226, 231, 235), (236, 240, 245),
+ (237, 241, 246), (239, 243, 248), (233, 239, 247), (221, 227, 239),
+ (186, 192, 216), (171, 177, 209), (156, 163, 202), (152, 161, 202),
+ (148, 159, 203), (142, 155, 208), (151, 162, 213), (169, 179, 226),
+ (187, 198, 234), (223, 228, 244), (227, 234, 247), (232, 241, 251),
+ (232, 243, 250), (222, 233, 238), (202, 216, 228), (179, 195, 217),
+ (141, 154, 171), (128, 141, 164), (116, 128, 158), (115, 125, 154),
+ (115, 123, 151), (113, 120, 146), (95, 109, 154), (78, 94, 149),
+ (69, 82, 132), (27, 45, 97), (21, 36, 84), (15, 28, 71),
+ (9, 18, 54), (8, 15, 42), (8, 13, 34), (7, 12, 32),
+ (17, 22, 45), (21, 30, 58), (26, 38, 72), (35, 50, 83),
+ (44, 62, 94), (66, 86, 117), (87, 104, 139), (113, 131, 159),
+ (140, 154, 176), (189, 198, 201), (190, 199, 201), (192, 201, 202),
+ (201, 201, 198), (199, 202, 196), (180, 191, 185), (169, 174, 169),
+ (148, 153, 160), (145, 152, 160), (142, 151, 161), (146, 156, 157),
+ (147, 159, 160), (143, 156, 165), (137, 147, 151), (118, 127, 130),
+ (88, 104, 115), (52, 58, 81), (39, 47, 73), (27, 37, 66),
+ (20, 27, 54), (14, 20, 44), (10, 15, 37), (11, 13, 32),
+ (11, 18, 39), (14, 21, 46), (17, 25, 53), (23, 33, 70),
+ (29, 42, 86), (34, 49, 97), (39, 56, 113), (38, 57, 124),
+ (34, 54, 124), (37, 53, 129), (34, 47, 126), (29, 44, 119),
+ (34, 49, 126), (51, 59, 130), (74, 82, 137), (99, 111, 162),
+ (172, 179, 208), (186, 193, 218), (200, 208, 228), (213, 225, 231),
+ (216, 227, 226), (208, 219, 219), (183, 200, 198), (154, 168, 172),
+ (120, 134, 149), (89, 103, 134), (70, 82, 118), (50, 64, 103),
+ (36, 50, 97), (30, 45, 93), (25, 39, 87), (23, 34, 85),
+ (17, 34, 79), (13, 29, 65), (15, 26, 57), (16, 30, 53),
+ (15, 32, 44), (15, 31, 35), (16, 27, 30), (12, 22, 28),
+ (8, 21, 26), (6, 14, 20), (4, 10, 18), (4, 13, 19),
+ (5, 13, 18), (6, 12, 17), (5, 13, 18), (5, 13, 17),
+ (5, 11, 15), (5, 8, 15), (5, 8, 13), (4, 8, 12),
+ (4, 8, 14), (5, 9, 18), (4, 10, 24), (3, 12, 37),
+ (4, 16, 53), (6, 22, 69), (10, 30, 86), (15, 35, 98),
+ (18, 39, 104), (23, 43, 99), (25, 43, 93), (22, 41, 89),
+ (19, 35, 79), (16, 32, 66), (11, 30, 60), (11, 27, 56),
+ (13, 25, 48), (14, 26, 40), (13, 24, 32), (12, 25, 30),
+ (13, 28, 32), (15, 28, 30), (13, 26, 29), (10, 23, 30),
+ (11, 23, 28), (11, 17, 25), (7, 10, 21), (4, 6, 17),
+ (3, 5, 14), (1, 5, 12), (0, 6, 12), (1, 6, 12),
+ (3, 9, 13), (6, 18, 19), (8, 21, 22), (7, 16, 18)
+ ),
+
+// 648 Snowy_Field
+((124, 176, 180), (121, 174, 176), (128, 178, 181), (135, 182, 186),
+ (133, 176, 179), (131, 170, 173), (131, 166, 169), (131, 162, 166),
+ (128, 153, 159), (127, 153, 160), (126, 153, 161), (124, 155, 163),
+ (122, 157, 166), (123, 154, 165), (124, 151, 165), (123, 149, 161),
+ (122, 147, 158), (122, 125, 135), (124, 113, 123), (127, 102, 111),
+ (124, 94, 103), (122, 86, 95), (121, 85, 94), (120, 85, 93),
+ (123, 95, 105), (124, 104, 113), (126, 114, 122), (130, 129, 136),
+ (134, 144, 151), (138, 150, 156), (142, 156, 161), (146, 169, 172),
+ (152, 179, 181), (161, 196, 198), (164, 197, 199), (167, 198, 201),
+ (165, 193, 196), (164, 188, 192), (163, 181, 186), (163, 175, 180),
+ (143, 145, 152), (129, 127, 134), (115, 109, 116), (101, 94, 102),
+ (88, 79, 88), (83, 71, 79), (78, 64, 71), (72, 53, 60),
+ (68, 47, 56), (76, 46, 60), (82, 54, 67), (88, 62, 74),
+ (95, 75, 86), (103, 88, 99), (107, 96, 106), (111, 104, 114),
+ (123, 139, 147), (128, 153, 159), (134, 168, 172), (139, 179, 182),
+ (145, 190, 193), (147, 193, 196), (149, 197, 200), (151, 200, 202),
+ (153, 203, 203), (151, 198, 199), (145, 187, 189), (139, 177, 180),
+ (133, 168, 171), (128, 160, 163), (114, 140, 144), (98, 118, 125),
+ (79, 86, 99), (77, 76, 89), (75, 67, 79), (83, 72, 87),
+ (91, 78, 95), (98, 85, 101), (105, 93, 108), (119, 107, 121),
+ (130, 125, 135), (141, 156, 162), (143, 161, 167), (145, 167, 172),
+ (144, 166, 171), (144, 165, 170), (136, 159, 161), (135, 149, 151),
+ (133, 118, 127), (129, 105, 113), (125, 92, 100), (121, 86, 94),
+ (117, 80, 88), (114, 70, 82), (111, 66, 79), (108, 66, 78),
+ (103, 66, 77), (95, 66, 82), (95, 72, 87), (95, 78, 92),
+ (95, 80, 93), (96, 83, 95), (97, 86, 97), (97, 91, 99),
+ (101, 94, 98), (100, 91, 95), (99, 88, 93), (96, 88, 92),
+ (94, 88, 91), (92, 84, 91), (88, 77, 85), (87, 65, 79),
+ (83, 62, 75), (92, 68, 81), (94, 68, 82), (96, 69, 83),
+ (99, 73, 85), (104, 82, 97), (116, 95, 109), (123, 107, 121),
+ (140, 134, 145), (156, 147, 157), (173, 160, 169), (180, 167, 173),
+ (187, 174, 178), (199, 185, 185), (213, 195, 191), (228, 204, 197),
+ (239, 208, 203), (240, 219, 206), (240, 221, 207), (240, 224, 208),
+ (240, 225, 212), (232, 223, 212), (219, 220, 210), (207, 220, 208),
+ (188, 210, 204), (184, 203, 197), (181, 197, 191), (181, 195, 190),
+ (181, 193, 190), (185, 192, 187), (195, 192, 186), (204, 195, 186),
+ (207, 199, 190), (192, 200, 194), (187, 197, 193), (182, 194, 193),
+ (170, 187, 189), (152, 177, 180), (133, 169, 173), (123, 157, 166),
+ (128, 145, 160), (129, 146, 159), (131, 148, 159), (141, 155, 165),
+ (156, 164, 170), (172, 173, 175), (179, 180, 179), (183, 182, 184),
+ (185, 185, 183), (181, 175, 165), (180, 170, 162), (180, 166, 159),
+ (177, 162, 159), (175, 155, 157), (168, 150, 151), (166, 147, 146),
+ (159, 142, 146), (155, 138, 142), (152, 135, 139), (143, 126, 129),
+ (135, 118, 123), (125, 109, 118), (119, 104, 114), (116, 102, 110),
+ (114, 102, 111), (113, 102, 114), (112, 108, 121), (112, 114, 126),
+ (109, 121, 130), (109, 123, 132), (110, 126, 132), (111, 125, 130),
+ (100, 113, 123), (98, 110, 119), (97, 107, 116), (97, 101, 110),
+ (97, 96, 105), (94, 90, 100), (91, 87, 98), (90, 88, 98),
+ (94, 91, 99), (96, 94, 100), (99, 97, 104), (101, 104, 110),
+ (108, 107, 117), (116, 111, 122), (123, 116, 129), (127, 125, 134),
+ (133, 133, 141), (147, 144, 150), (161, 158, 162), (174, 175, 173),
+ (185, 190, 184), (200, 205, 194), (214, 219, 206), (228, 232, 216),
+ (238, 239, 223), (245, 244, 226), (249, 245, 227), (250, 246, 225),
+ (249, 245, 222), (246, 245, 219), (242, 241, 216), (240, 236, 210),
+ (237, 230, 204), (232, 227, 202), (223, 224, 205), (211, 222, 206),
+ (200, 217, 205), (195, 215, 205), (186, 212, 209), (176, 211, 210),
+ (164, 209, 210), (159, 207, 207), (155, 203, 206), (154, 199, 201),
+ (152, 197, 198), (152, 189, 190), (150, 180, 183), (149, 169, 174),
+ (146, 162, 167), (146, 151, 156), (149, 139, 145), (154, 130, 138),
+ (163, 125, 134), (170, 122, 133), (171, 118, 131), (167, 120, 132),
+ (169, 119, 128), (174, 119, 126), (178, 114, 123), (167, 114, 124),
+ (155, 115, 122), (144, 116, 118), (144, 114, 116), (144, 114, 117),
+ (144, 118, 122), (135, 123, 129), (129, 131, 137), (124, 137, 143),
+ (120, 142, 147), (115, 138, 146), (119, 150, 155), (124, 160, 167)
+ ),
+
+// 649 Snuggle
+((120, 26, 61), (118, 24, 56), (116, 24, 52), (114, 24, 49),
+ (121, 20, 46), (129, 17, 43), (134, 15, 41), (140, 14, 40),
+ (140, 16, 33), (133, 20, 29), (126, 25, 25), (119, 29, 30),
+ (112, 33, 35), (113, 39, 48), (114, 45, 62), (113, 44, 68),
+ (112, 44, 74), (107, 46, 92), (101, 43, 95), (95, 40, 98),
+ (92, 43, 106), (89, 46, 115), (87, 46, 121), (85, 47, 128),
+ (77, 51, 152), (76, 51, 153), (76, 51, 154), (83, 51, 146),
+ (90, 51, 138), (98, 53, 133), (107, 56, 128), (120, 62, 123),
+ (128, 70, 121), (136, 98, 125), (137, 110, 123), (138, 122, 122),
+ (142, 129, 116), (146, 137, 110), (150, 137, 108), (155, 137, 107),
+ (160, 145, 118), (161, 150, 128), (163, 156, 138), (155, 160, 145),
+ (147, 164, 153), (142, 160, 153), (137, 156, 153), (121, 147, 153),
+ (104, 139, 154), (81, 122, 138), (83, 113, 132), (85, 104, 126),
+ (91, 91, 115), (98, 79, 104), (100, 73, 100), (103, 67, 97),
+ (101, 51, 78), (99, 46, 79), (98, 41, 81), (102, 36, 88),
+ (107, 32, 96), (112, 29, 104), (118, 26, 112), (132, 25, 122),
+ (145, 24, 129), (158, 27, 132), (161, 30, 131), (164, 33, 130),
+ (165, 32, 131), (166, 31, 133), (168, 33, 132), (172, 33, 127),
+ (184, 38, 100), (192, 46, 84), (200, 54, 69), (203, 56, 58),
+ (207, 59, 48), (207, 58, 45), (207, 58, 42), (206, 57, 38),
+ (202, 55, 34), (195, 52, 37), (186, 50, 37), (178, 49, 38),
+ (172, 47, 38), (166, 46, 38), (154, 40, 36), (141, 35, 34),
+ (133, 18, 39), (129, 16, 39), (126, 14, 39), (123, 14, 40),
+ (121, 15, 41), (112, 15, 41), (101, 17, 40), (94, 19, 42),
+ (92, 19, 44), (95, 24, 47), (96, 33, 50), (97, 43, 54),
+ (94, 49, 53), (91, 56, 53), (81, 69, 55), (73, 80, 66),
+ (66, 86, 79), (71, 87, 87), (77, 89, 95), (81, 92, 96),
+ (85, 95, 98), (92, 100, 92), (99, 104, 95), (106, 104, 92),
+ (112, 101, 88), (119, 76, 90), (121, 71, 94), (123, 66, 98),
+ (125, 58, 94), (125, 49, 98), (124, 44, 98), (118, 39, 95),
+ (93, 29, 81), (82, 27, 78), (72, 25, 75), (69, 26, 79),
+ (66, 27, 83), (69, 38, 97), (76, 48, 112), (82, 66, 124),
+ (90, 76, 133), (100, 92, 140), (100, 90, 140), (101, 89, 140),
+ (103, 88, 148), (110, 88, 158), (114, 93, 167), (121, 95, 172),
+ (133, 99, 174), (133, 94, 172), (134, 89, 171), (136, 87, 171),
+ (138, 85, 172), (140, 81, 168), (144, 79, 160), (148, 74, 148),
+ (154, 66, 133), (165, 66, 123), (166, 71, 129), (167, 76, 136),
+ (165, 89, 150), (160, 108, 163), (151, 127, 171), (138, 137, 172),
+ (115, 143, 170), (111, 140, 172), (107, 137, 175), (99, 132, 183),
+ (87, 135, 199), (78, 141, 213), (68, 148, 220), (55, 150, 220),
+ (46, 150, 222), (45, 132, 213), (44, 124, 211), (44, 117, 209),
+ (44, 97, 208), (45, 85, 208), (40, 72, 207), (35, 63, 206),
+ (37, 55, 200), (40, 52, 194), (44, 49, 189), (53, 41, 176),
+ (65, 36, 164), (75, 33, 155), (86, 26, 146), (99, 21, 137),
+ (108, 20, 130), (121, 20, 127), (137, 27, 123), (150, 36, 116),
+ (160, 37, 101), (165, 36, 93), (168, 33, 91), (162, 34, 93),
+ (152, 38, 110), (151, 47, 120), (150, 56, 131), (156, 67, 138),
+ (159, 78, 149), (164, 91, 157), (162, 106, 160), (155, 114, 161),
+ (150, 110, 161), (140, 114, 166), (140, 117, 163), (143, 116, 159),
+ (152, 118, 153), (165, 117, 140), (174, 121, 125), (186, 114, 112),
+ (184, 103, 100), (175, 92, 88), (162, 75, 79), (148, 60, 79),
+ (138, 48, 82), (127, 46, 84), (127, 43, 90), (128, 41, 98),
+ (126, 35, 108), (120, 30, 113), (113, 24, 117), (103, 25, 121),
+ (95, 29, 120), (90, 30, 118), (87, 32, 112), (82, 33, 111),
+ (76, 41, 104), (82, 41, 93), (85, 41, 84), (92, 42, 72),
+ (101, 44, 65), (111, 44, 60), (118, 42, 64), (114, 49, 72),
+ (111, 50, 81), (105, 51, 87), (100, 50, 90), (102, 49, 92),
+ (107, 45, 92), (113, 35, 96), (113, 34, 102), (109, 29, 111),
+ (103, 26, 116), (94, 25, 114), (84, 24, 111), (73, 21, 104),
+ (63, 18, 94), (57, 23, 89), (53, 29, 92), (51, 31, 97),
+ (44, 35, 98), (36, 41, 97), (29, 44, 97), (24, 46, 91),
+ (20, 47, 86), (19, 52, 86), (26, 50, 87), (35, 49, 89),
+ (44, 51, 87), (53, 51, 86), (62, 51, 81), (71, 47, 73),
+ (78, 45, 66), (90, 40, 60), (102, 35, 61), (115, 31, 62)
+ ),
+
+// 650 Soap_Bubble
+((112, 150, 197), (89, 188, 214), (87, 207, 218), (85, 226, 222),
+ (103, 230, 220), (122, 234, 219), (131, 230, 217), (141, 226, 216),
+ (169, 195, 209), (174, 174, 198), (180, 154, 187), (169, 135, 168),
+ (159, 116, 150), (145, 104, 134), (131, 92, 118), (126, 93, 115),
+ (121, 95, 112), (97, 114, 125), (86, 129, 130), (76, 144, 135),
+ (66, 165, 143), (57, 186, 152), (57, 194, 162), (58, 203, 173),
+ (68, 218, 187), (60, 213, 175), (52, 208, 163), (48, 195, 157),
+ (44, 182, 152), (42, 176, 156), (40, 171, 160), (37, 158, 159),
+ (38, 154, 157), (71, 135, 142), (77, 115, 148), (84, 95, 154),
+ (91, 92, 152), (99, 90, 150), (112, 91, 143), (126, 93, 136),
+ (152, 105, 135), (150, 106, 146), (149, 107, 158), (169, 107, 157),
+ (190, 108, 156), (197, 108, 152), (204, 108, 149), (210, 118, 135),
+ (205, 115, 132), (218, 116, 125), (224, 115, 111), (231, 115, 97),
+ (228, 110, 85), (226, 105, 74), (223, 103, 77), (220, 101, 81),
+ (209, 97, 119), (202, 91, 134), (196, 85, 149), (195, 81, 161),
+ (195, 77, 173), (198, 78, 175), (201, 79, 178), (197, 97, 181),
+ (189, 116, 177), (172, 156, 159), (168, 171, 151), (165, 186, 143),
+ (156, 194, 142), (147, 202, 141), (123, 204, 139), (99, 213, 138),
+ (75, 223, 140), (61, 220, 149), (48, 218, 158), (51, 206, 165),
+ (55, 195, 173), (66, 187, 170), (77, 179, 167), (101, 174, 171),
+ (124, 161, 174), (159, 126, 191), (180, 104, 197), (201, 83, 203),
+ (207, 77, 207), (213, 72, 211), (223, 69, 226), (216, 71, 237),
+ (207, 60, 241), (203, 60, 236), (200, 61, 232), (197, 65, 227),
+ (194, 70, 223), (193, 79, 206), (188, 91, 189), (175, 106, 168),
+ (156, 127, 149), (120, 158, 115), (108, 159, 93), (97, 161, 72),
+ (88, 161, 64), (79, 161, 56), (71, 170, 53), (76, 166, 62),
+ (107, 136, 74), (118, 115, 84), (129, 95, 94), (132, 92, 105),
+ (135, 89, 116), (138, 87, 129), (136, 87, 132), (125, 85, 122),
+ (123, 89, 118), (127, 127, 120), (128, 136, 119), (129, 146, 119),
+ (128, 159, 110), (138, 167, 110), (152, 179, 120), (170, 194, 129),
+ (198, 220, 147), (202, 221, 159), (207, 222, 171), (207, 220, 177),
+ (208, 218, 183), (212, 207, 198), (214, 199, 204), (206, 189, 201),
+ (202, 178, 206), (189, 175, 220), (191, 168, 223), (193, 161, 226),
+ (192, 143, 217), (194, 114, 205), (185, 93, 186), (178, 87, 172),
+ (184, 80, 149), (195, 64, 127), (206, 49, 106), (209, 43, 97),
+ (212, 38, 88), (220, 31, 87), (224, 32, 96), (223, 37, 101),
+ (217, 36, 112), (177, 35, 117), (169, 35, 123), (161, 36, 129),
+ (146, 41, 139), (129, 41, 154), (104, 40, 172), (73, 44, 178),
+ (42, 59, 186), (40, 63, 187), (39, 67, 188), (42, 71, 195),
+ (43, 73, 198), (48, 69, 194), (69, 66, 179), (97, 63, 155),
+ (123, 66, 130), (161, 75, 99), (168, 81, 96), (176, 88, 93),
+ (199, 103, 82), (219, 126, 72), (231, 146, 68), (237, 158, 73),
+ (233, 181, 113), (233, 185, 124), (233, 189, 136), (236, 190, 148),
+ (236, 178, 154), (239, 159, 160), (237, 138, 168), (228, 119, 184),
+ (217, 96, 192), (207, 80, 199), (192, 64, 203), (175, 51, 205),
+ (152, 42, 215), (124, 30, 222), (104, 32, 232), (83, 42, 237),
+ (59, 84, 244), (56, 89, 242), (54, 95, 241), (56, 108, 237),
+ (55, 123, 232), (46, 143, 225), (41, 173, 224), (42, 189, 222),
+ (61, 201, 220), (79, 200, 220), (92, 200, 211), (103, 209, 199),
+ (108, 216, 187), (121, 226, 174), (135, 229, 172), (146, 230, 163),
+ (147, 232, 145), (140, 235, 129), (127, 236, 110), (116, 235, 107),
+ (111, 229, 108), (96, 229, 105), (84, 229, 101), (71, 228, 102),
+ (67, 231, 109), (80, 227, 120), (98, 226, 130), (123, 228, 137),
+ (141, 230, 148), (159, 235, 163), (170, 234, 173), (174, 235, 185),
+ (177, 233, 195), (178, 228, 204), (169, 219, 217), (153, 197, 222),
+ (131, 177, 230), (102, 153, 234), (87, 131, 238), (67, 113, 242),
+ (50, 91, 241), (46, 72, 241), (44, 54, 239), (55, 43, 242),
+ (70, 35, 244), (81, 33, 244), (91, 42, 236), (98, 49, 223),
+ (102, 61, 204), (105, 61, 189), (112, 57, 176), (132, 64, 159),
+ (144, 71, 143), (155, 97, 122), (160, 117, 108), (160, 130, 101),
+ (175, 134, 102), (189, 135, 106), (202, 141, 114), (214, 146, 128),
+ (214, 154, 143), (214, 145, 161), (216, 129, 173), (214, 112, 178),
+ (214, 90, 180), (208, 80, 182), (195, 76, 189), (190, 65, 194),
+ (166, 77, 194), (149, 90, 194), (134, 108, 187), (109, 140, 192)
+ ),
+
+// 651 Sophia
+((170, 128, 57), (151, 105, 51), (145, 99, 50), (139, 93, 49),
+ (129, 82, 45), (120, 71, 42), (117, 67, 40), (115, 63, 39),
+ (113, 55, 43), (116, 60, 46), (120, 66, 49), (126, 73, 48),
+ (133, 80, 48), (141, 85, 48), (149, 91, 49), (154, 95, 52),
+ (159, 100, 55), (175, 116, 67), (179, 118, 68), (184, 121, 69),
+ (181, 122, 72), (178, 124, 76), (175, 124, 78), (172, 125, 80),
+ (167, 123, 83), (164, 124, 85), (162, 125, 88), (158, 130, 86),
+ (155, 135, 85), (155, 136, 84), (155, 137, 84), (161, 136, 83),
+ (163, 131, 83), (160, 121, 75), (152, 110, 67), (145, 100, 59),
+ (135, 86, 55), (125, 73, 52), (118, 67, 52), (111, 61, 53),
+ (98, 53, 49), (94, 50, 45), (91, 47, 42), (85, 44, 44),
+ (80, 42, 47), (79, 42, 45), (78, 42, 43), (78, 43, 38),
+ (79, 41, 27), (73, 27, 17), (66, 21, 12), (59, 15, 8),
+ (56, 12, 5), (54, 10, 3), (56, 9, 3), (58, 8, 4),
+ (67, 6, 6), (72, 10, 6), (78, 14, 6), (77, 17, 8),
+ (77, 20, 10), (76, 20, 11), (75, 20, 13), (75, 21, 16),
+ (77, 24, 15), (65, 30, 11), (58, 28, 11), (52, 27, 11),
+ (52, 26, 12), (53, 25, 13), (61, 31, 16), (71, 41, 21),
+ (103, 76, 38), (119, 89, 48), (135, 102, 59), (144, 112, 72),
+ (154, 122, 86), (159, 130, 96), (165, 138, 106), (176, 156, 126),
+ (186, 174, 148), (197, 187, 157), (198, 186, 158), (199, 186, 159),
+ (200, 190, 162), (201, 194, 165), (209, 206, 163), (217, 220, 155),
+ (228, 217, 133), (224, 204, 122), (220, 191, 111), (216, 187, 105),
+ (213, 184, 100), (201, 167, 91), (190, 154, 82), (178, 130, 75),
+ (159, 107, 69), (133, 77, 68), (126, 76, 75), (120, 76, 83),
+ (120, 79, 91), (120, 82, 99), (124, 93, 116), (133, 106, 135),
+ (153, 133, 159), (166, 146, 161), (179, 159, 163), (184, 165, 160),
+ (190, 171, 157), (197, 171, 155), (198, 168, 143), (199, 158, 125),
+ (198, 145, 107), (186, 119, 76), (179, 110, 72), (173, 102, 69),
+ (157, 86, 64), (145, 73, 61), (137, 62, 60), (128, 56, 63),
+ (111, 50, 75), (107, 55, 81), (103, 61, 87), (102, 64, 89),
+ (102, 68, 92), (104, 76, 98), (105, 83, 103), (110, 88, 105),
+ (119, 97, 112), (133, 109, 131), (134, 111, 134), (136, 113, 137),
+ (138, 110, 135), (141, 109, 130), (138, 109, 126), (139, 102, 127),
+ (137, 93, 121), (133, 92, 113), (129, 92, 105), (127, 91, 103),
+ (126, 90, 101), (127, 91, 98), (133, 93, 96), (143, 98, 92),
+ (152, 110, 90), (164, 128, 92), (166, 130, 92), (168, 132, 93),
+ (169, 131, 89), (167, 129, 79), (160, 121, 71), (154, 110, 62),
+ (138, 88, 62), (133, 85, 61), (129, 82, 61), (116, 76, 60),
+ (105, 69, 55), (96, 59, 50), (89, 48, 47), (79, 39, 43),
+ (68, 34, 38), (42, 29, 25), (39, 26, 23), (36, 24, 21),
+ (30, 17, 17), (27, 10, 13), (25, 10, 8), (28, 14, 5),
+ (49, 31, 12), (55, 35, 13), (62, 39, 15), (73, 47, 17),
+ (86, 53, 18), (102, 62, 24), (114, 69, 29), (122, 77, 35),
+ (124, 82, 40), (125, 82, 46), (127, 82, 53), (129, 82, 60),
+ (130, 83, 63), (131, 83, 61), (130, 81, 62), (133, 78, 61),
+ (147, 75, 62), (149, 74, 58), (151, 73, 54), (153, 72, 50),
+ (154, 71, 43), (160, 72, 45), (166, 78, 50), (170, 82, 52),
+ (167, 88, 56), (162, 90, 53), (157, 92, 54), (152, 93, 55),
+ (145, 90, 53), (135, 85, 54), (124, 75, 48), (113, 66, 39),
+ (99, 54, 32), (83, 42, 21), (65, 31, 17), (52, 19, 13),
+ (50, 14, 10), (54, 11, 10), (61, 13, 9), (66, 17, 11),
+ (69, 20, 15), (78, 26, 21), (90, 31, 32), (103, 35, 43),
+ (114, 40, 50), (122, 43, 51), (130, 48, 51), (140, 52, 56),
+ (147, 59, 66), (146, 67, 78), (144, 78, 87), (147, 91, 89),
+ (157, 107, 89), (174, 124, 92), (186, 138, 98), (192, 152, 108),
+ (192, 162, 116), (189, 173, 122), (187, 182, 128), (187, 188, 133),
+ (192, 192, 147), (196, 196, 157), (196, 196, 172), (192, 199, 186),
+ (190, 204, 194), (192, 208, 199), (200, 220, 196), (207, 222, 192),
+ (209, 217, 188), (207, 212, 187), (201, 198, 181), (195, 191, 176),
+ (183, 182, 163), (176, 166, 150), (165, 151, 147), (158, 134, 143),
+ (156, 122, 146), (151, 121, 146), (157, 124, 140), (164, 129, 134),
+ (171, 133, 124), (180, 135, 112), (184, 136, 104), (184, 138, 92),
+ (189, 147, 88), (192, 154, 86), (190, 156, 78), (186, 149, 70)
+ ),
+
+// 652 Strawberries
+((108, 0, 9), (116, 2, 9), (117, 3, 9), (119, 4, 10),
+ (118, 4, 10), (117, 5, 11), (116, 4, 11), (115, 4, 12),
+ (103, 5, 11), (97, 5, 12), (92, 6, 13), (89, 5, 13),
+ (87, 4, 14), (85, 3, 13), (84, 2, 12), (83, 1, 12),
+ (83, 1, 12), (83, 0, 12), (83, 0, 12), (83, 0, 12),
+ (81, 2, 14), (80, 5, 16), (78, 7, 18), (77, 10, 21),
+ (68, 20, 26), (61, 20, 25), (55, 21, 25), (51, 21, 25),
+ (48, 21, 25), (47, 21, 25), (47, 22, 26), (48, 23, 25),
+ (49, 23, 27), (50, 17, 17), (55, 11, 13), (61, 6, 9),
+ (67, 3, 7), (74, 1, 5), (76, 0, 5), (79, 0, 5),
+ (85, 0, 6), (90, 0, 7), (95, 0, 8), (98, 0, 8),
+ (101, 0, 9), (102, 0, 10), (103, 0, 11), (104, 1, 14),
+ (106, 3, 18), (106, 24, 35), (111, 41, 49), (116, 59, 63),
+ (129, 79, 84), (142, 99, 105), (148, 107, 112), (155, 115, 119),
+ (153, 143, 147), (146, 150, 150), (140, 158, 154), (142, 158, 152),
+ (145, 159, 151), (142, 155, 148), (140, 151, 145), (133, 139, 136),
+ (118, 123, 120), (83, 87, 79), (77, 72, 62), (71, 57, 45),
+ (71, 51, 40), (71, 46, 36), (70, 35, 31), (72, 27, 27),
+ (83, 18, 21), (92, 13, 19), (102, 8, 17), (112, 4, 16),
+ (122, 1, 15), (126, 0, 15), (130, 0, 15), (134, 1, 17),
+ (136, 2, 19), (134, 6, 20), (129, 5, 18), (125, 5, 17),
+ (121, 5, 16), (117, 6, 16), (107, 8, 16), (94, 12, 18),
+ (73, 16, 16), (68, 14, 14), (63, 13, 12), (61, 11, 11),
+ (60, 9, 10), (58, 10, 11), (55, 11, 10), (54, 11, 9),
+ (55, 10, 7), (57, 4, 5), (56, 3, 5), (55, 3, 6),
+ (54, 4, 6), (53, 6, 6), (54, 8, 8), (59, 10, 10),
+ (70, 9, 13), (76, 8, 13), (82, 8, 13), (84, 8, 13),
+ (86, 9, 14), (92, 10, 17), (101, 12, 19), (109, 11, 23),
+ (118, 9, 24), (130, 8, 21), (131, 8, 20), (133, 8, 19),
+ (137, 8, 19), (141, 9, 22), (143, 11, 27), (146, 22, 34),
+ (161, 54, 55), (170, 71, 64), (179, 88, 73), (185, 94, 80),
+ (191, 100, 87), (190, 115, 96), (192, 126, 107), (183, 133, 112),
+ (171, 134, 109), (149, 130, 101), (141, 127, 98), (134, 124, 95),
+ (127, 116, 87), (118, 101, 80), (110, 82, 67), (102, 59, 49),
+ (103, 27, 25), (112, 20, 21), (121, 13, 17), (126, 11, 16),
+ (132, 9, 16), (146, 6, 14), (160, 3, 13), (171, 1, 12),
+ (179, 0, 12), (182, 0, 12), (179, 0, 12), (176, 0, 12),
+ (168, 1, 12), (159, 1, 12), (149, 1, 12), (140, 1, 12),
+ (120, 0, 11), (115, 0, 11), (111, 0, 11), (102, 0, 10),
+ (93, 0, 10), (87, 0, 9), (82, 0, 10), (78, 0, 10),
+ (77, 0, 9), (77, 0, 7), (77, 0, 6), (77, 0, 5),
+ (78, 0, 5), (77, 0, 5), (76, 0, 5), (77, 0, 6),
+ (83, 1, 5), (86, 1, 5), (90, 1, 5), (97, 1, 7),
+ (103, 3, 8), (109, 4, 11), (110, 7, 16), (111, 16, 19),
+ (112, 28, 27), (123, 26, 29), (133, 26, 28), (146, 24, 27),
+ (154, 19, 26), (159, 16, 24), (156, 28, 29), (161, 27, 30),
+ (174, 22, 29), (178, 18, 28), (182, 15, 27), (188, 3, 23),
+ (186, 4, 23), (185, 3, 24), (181, 3, 23), (179, 3, 23),
+ (177, 4, 24), (174, 3, 25), (170, 3, 25), (168, 3, 25),
+ (166, 2, 23), (166, 2, 20), (167, 3, 20), (169, 4, 20),
+ (171, 5, 21), (170, 8, 23), (165, 15, 27), (166, 31, 36),
+ (168, 47, 47), (169, 65, 61), (170, 80, 73), (170, 89, 78),
+ (156, 89, 77), (145, 92, 79), (134, 93, 76), (127, 94, 78),
+ (122, 94, 79), (124, 90, 77), (119, 79, 68), (114, 64, 59),
+ (108, 47, 44), (105, 32, 34), (104, 19, 28), (105, 11, 23),
+ (108, 10, 22), (111, 21, 32), (114, 33, 43), (115, 44, 53),
+ (115, 48, 60), (117, 49, 61), (124, 40, 55), (129, 41, 54),
+ (137, 44, 59), (145, 49, 64), (147, 51, 67), (147, 49, 66),
+ (151, 37, 56), (152, 23, 42), (154, 12, 32), (158, 7, 27),
+ (157, 5, 25), (150, 4, 26), (141, 7, 26), (129, 10, 25),
+ (116, 13, 25), (102, 14, 25), (90, 14, 23), (81, 12, 23),
+ (73, 12, 23), (66, 13, 23), (62, 14, 24), (58, 15, 24),
+ (56, 15, 21), (58, 11, 19), (61, 7, 17), (68, 4, 16),
+ (75, 2, 13), (83, 2, 12), (92, 2, 12), (100, 1, 11)
+ ),
+
+// 653 Summer
+((125, 67, 47), (88, 47, 13), (76, 44, 14), (64, 41, 15),
+ (51, 36, 16), (39, 31, 18), (39, 29, 14), (39, 27, 10),
+ (47, 22, 6), (63, 32, 4), (80, 43, 3), (96, 50, 9),
+ (113, 57, 15), (133, 70, 24), (153, 84, 33), (161, 88, 43),
+ (169, 92, 53), (190, 138, 79), (198, 152, 96), (207, 167, 114),
+ (204, 164, 115), (202, 161, 116), (185, 155, 118), (168, 150, 120),
+ (136, 109, 95), (122, 105, 85), (109, 102, 75), (116, 101, 64),
+ (123, 100, 53), (130, 103, 52), (137, 107, 52), (147, 119, 49),
+ (154, 134, 56), (188, 165, 84), (199, 186, 107), (210, 207, 131),
+ (216, 209, 151), (223, 212, 171), (226, 218, 172), (230, 224, 174),
+ (226, 213, 177), (213, 202, 163), (201, 191, 149), (186, 172, 126),
+ (171, 153, 104), (165, 145, 97), (159, 137, 91), (148, 118, 75),
+ (149, 113, 54), (171, 122, 35), (177, 130, 37), (184, 138, 40),
+ (182, 144, 55), (181, 150, 71), (173, 145, 76), (166, 141, 81),
+ (141, 118, 93), (130, 100, 81), (119, 82, 70), (116, 75, 55),
+ (114, 69, 40), (114, 68, 32), (115, 67, 25), (105, 64, 19),
+ (91, 66, 18), (59, 60, 18), (48, 56, 25), (37, 53, 32),
+ (35, 52, 32), (34, 51, 32), (41, 51, 36), (58, 56, 43),
+ (91, 73, 57), (99, 81, 66), (107, 90, 75), (100, 86, 74),
+ (93, 82, 73), (85, 76, 70), (77, 71, 67), (64, 63, 49),
+ (50, 44, 33), (25, 23, 15), (23, 24, 15), (21, 25, 15),
+ (22, 29, 17), (24, 34, 20), (38, 51, 30), (54, 62, 45),
+ (77, 75, 52), (87, 68, 51), (98, 62, 50), (97, 61, 53),
+ (97, 61, 56), (92, 66, 55), (87, 67, 58), (83, 78, 74),
+ (88, 95, 96), (103, 126, 112), (105, 130, 117), (108, 135, 123),
+ (109, 134, 120), (110, 134, 117), (102, 129, 109), (92, 122, 97),
+ (99, 121, 95), (118, 131, 105), (138, 142, 115), (145, 149, 120),
+ (152, 157, 126), (165, 176, 131), (174, 174, 136), (166, 166, 125),
+ (154, 166, 110), (126, 150, 103), (120, 146, 102), (114, 143, 101),
+ (105, 142, 99), (97, 144, 105), (87, 137, 102), (77, 118, 87),
+ (57, 83, 55), (61, 64, 41), (66, 46, 27), (69, 47, 24),
+ (73, 49, 22), (91, 50, 19), (107, 54, 27), (112, 67, 29),
+ (114, 79, 35), (106, 89, 50), (107, 96, 60), (108, 104, 71),
+ (114, 117, 89), (122, 131, 93), (142, 150, 104), (177, 165, 112),
+ (210, 199, 103), (224, 196, 98), (238, 194, 93), (232, 192, 92),
+ (227, 191, 91), (220, 181, 89), (215, 158, 85), (208, 146, 82),
+ (198, 141, 79), (187, 146, 80), (183, 147, 84), (179, 148, 89),
+ (180, 156, 100), (181, 174, 116), (177, 185, 135), (187, 195, 163),
+ (205, 227, 200), (204, 229, 205), (204, 231, 210), (215, 233, 210),
+ (213, 221, 199), (200, 193, 181), (185, 173, 156), (172, 155, 133),
+ (167, 127, 114), (159, 109, 66), (156, 105, 61), (153, 101, 57),
+ (151, 97, 49), (149, 93, 46), (132, 85, 49), (115, 79, 54),
+ (82, 66, 58), (76, 70, 61), (71, 74, 64), (69, 87, 77),
+ (73, 103, 91), (83, 124, 106), (86, 150, 132), (107, 175, 151),
+ (133, 182, 154), (136, 186, 165), (148, 189, 169), (161, 177, 156),
+ (163, 160, 134), (163, 141, 111), (158, 128, 99), (150, 115, 80),
+ (136, 96, 64), (134, 98, 66), (133, 100, 69), (140, 106, 67),
+ (149, 116, 61), (153, 123, 60), (158, 116, 47), (158, 118, 29),
+ (149, 117, 24), (133, 94, 23), (117, 70, 22), (99, 59, 23),
+ (85, 49, 28), (77, 41, 34), (71, 38, 37), (75, 43, 42),
+ (82, 55, 45), (86, 61, 46), (94, 66, 43), (95, 67, 42),
+ (86, 59, 43), (73, 51, 33), (64, 43, 29), (52, 36, 35),
+ (47, 37, 36), (51, 41, 38), (57, 46, 49), (66, 58, 55),
+ (72, 70, 57), (72, 82, 63), (78, 86, 68), (92, 96, 67),
+ (102, 114, 64), (113, 124, 73), (139, 138, 84), (163, 156, 93),
+ (182, 176, 110), (197, 190, 127), (202, 194, 139), (206, 197, 155),
+ (210, 198, 163), (203, 195, 159), (201, 187, 159), (208, 189, 155),
+ (213, 197, 141), (225, 198, 134), (233, 200, 132), (236, 204, 124),
+ (239, 204, 116), (231, 195, 117), (221, 183, 119), (210, 177, 116),
+ (202, 162, 119), (204, 153, 134), (209, 159, 149), (207, 161, 165),
+ (209, 175, 180), (215, 192, 196), (204, 201, 204), (193, 209, 202),
+ (181, 213, 201), (160, 202, 191), (156, 184, 177), (155, 175, 162),
+ (134, 162, 145), (127, 141, 124), (140, 126, 105), (141, 115, 92),
+ (133, 99, 84), (132, 91, 78), (134, 78, 53), (133, 64, 43)
+ ),
+
+// 654 Summer_Fire
+((254, 222, 57), (253, 233, 58), (246, 226, 59), (240, 220, 60),
+ (231, 209, 62), (223, 198, 64), (218, 195, 65), (214, 192, 66),
+ (196, 181, 76), (191, 176, 87), (187, 171, 99), (185, 169, 114),
+ (183, 168, 130), (184, 167, 139), (186, 166, 149), (184, 166, 150),
+ (183, 167, 152), (197, 163, 143), (202, 152, 137), (208, 141, 132),
+ (213, 134, 128), (218, 128, 124), (216, 125, 120), (214, 123, 117),
+ (213, 122, 98), (211, 113, 85), (209, 105, 72), (211, 99, 62),
+ (214, 93, 53), (212, 91, 50), (210, 90, 48), (207, 90, 47),
+ (201, 97, 50), (182, 108, 58), (173, 104, 54), (164, 100, 51),
+ (155, 93, 45), (147, 87, 39), (144, 84, 36), (141, 81, 33),
+ (126, 62, 25), (118, 50, 21), (110, 39, 18), (105, 30, 16),
+ (101, 21, 14), (103, 20, 14), (105, 19, 14), (116, 14, 12),
+ (128, 13, 14), (165, 10, 15), (177, 15, 15), (190, 20, 15),
+ (202, 33, 18), (214, 47, 21), (218, 54, 22), (223, 61, 24),
+ (241, 82, 30), (245, 96, 32), (250, 110, 34), (251, 125, 36),
+ (253, 141, 39), (253, 148, 40), (253, 156, 41), (253, 169, 43),
+ (253, 173, 44), (253, 172, 44), (248, 166, 42), (243, 161, 40),
+ (238, 157, 39), (234, 153, 39), (222, 144, 37), (209, 136, 37),
+ (188, 122, 40), (182, 115, 41), (177, 108, 43), (176, 103, 41),
+ (175, 98, 39), (174, 96, 38), (174, 94, 38), (173, 93, 36),
+ (174, 94, 37), (185, 98, 42), (195, 102, 41), (206, 106, 41),
+ (212, 108, 40), (219, 110, 40), (230, 115, 37), (239, 121, 35),
+ (251, 137, 36), (252, 147, 38), (253, 157, 41), (253, 162, 42),
+ (253, 167, 43), (253, 175, 45), (253, 181, 46), (253, 184, 46),
+ (252, 183, 46), (246, 177, 45), (240, 168, 44), (235, 159, 43),
+ (234, 153, 42), (233, 148, 41), (232, 138, 42), (232, 129, 40),
+ (235, 114, 36), (233, 110, 35), (232, 106, 34), (231, 102, 32),
+ (231, 99, 30), (231, 94, 32), (234, 93, 32), (236, 92, 32),
+ (242, 96, 32), (250, 114, 35), (251, 117, 34), (252, 120, 34),
+ (252, 122, 34), (254, 123, 35), (253, 123, 35), (252, 121, 35),
+ (245, 122, 38), (238, 122, 40), (232, 122, 43), (230, 123, 46),
+ (228, 124, 49), (224, 128, 55), (222, 131, 60), (225, 133, 65),
+ (226, 138, 66), (224, 142, 64), (223, 140, 64), (223, 139, 64),
+ (222, 138, 64), (218, 134, 61), (219, 129, 63), (220, 125, 60),
+ (223, 122, 50), (224, 119, 45), (225, 116, 41), (223, 113, 38),
+ (222, 111, 35), (219, 98, 31), (213, 84, 27), (207, 71, 25),
+ (200, 61, 22), (191, 46, 19), (188, 46, 19), (186, 47, 19),
+ (180, 45, 20), (173, 44, 21), (165, 42, 25), (157, 41, 28),
+ (146, 40, 32), (145, 41, 33), (144, 42, 34), (139, 45, 33),
+ (135, 51, 32), (132, 57, 36), (131, 65, 41), (130, 75, 48),
+ (132, 88, 58), (146, 105, 71), (150, 109, 72), (154, 114, 73),
+ (163, 119, 76), (172, 124, 79), (179, 129, 81), (189, 137, 83),
+ (209, 160, 87), (212, 167, 87), (215, 175, 88), (223, 188, 89),
+ (231, 199, 90), (232, 201, 95), (232, 199, 97), (232, 195, 97),
+ (228, 190, 95), (222, 184, 93), (214, 180, 91), (209, 181, 88),
+ (203, 178, 89), (197, 171, 92), (193, 164, 96), (185, 155, 94),
+ (177, 128, 87), (177, 119, 83), (177, 111, 80), (180, 99, 71),
+ (185, 86, 62), (195, 76, 57), (200, 67, 50), (206, 58, 45),
+ (212, 56, 38), (216, 45, 32), (221, 35, 26), (225, 25, 21),
+ (233, 16, 17), (240, 8, 15), (244, 9, 16), (245, 19, 24),
+ (243, 32, 32), (243, 44, 42), (240, 58, 51), (237, 73, 59),
+ (237, 83, 66), (238, 98, 71), (240, 112, 82), (241, 129, 89),
+ (243, 145, 100), (245, 162, 110), (244, 181, 116), (244, 194, 117),
+ (244, 205, 113), (245, 212, 110), (245, 217, 103), (246, 219, 96),
+ (249, 216, 94), (250, 213, 89), (252, 208, 81), (253, 204, 73),
+ (253, 200, 67), (253, 196, 60), (252, 192, 52), (252, 186, 48),
+ (252, 181, 46), (252, 176, 45), (252, 172, 44), (253, 168, 42),
+ (253, 163, 41), (252, 157, 39), (247, 150, 37), (240, 145, 35),
+ (230, 138, 33), (217, 133, 33), (204, 128, 32), (192, 122, 31),
+ (186, 117, 29), (181, 111, 29), (177, 105, 28), (169, 91, 26),
+ (166, 77, 25), (160, 64, 22), (156, 52, 21), (156, 44, 19),
+ (164, 47, 21), (176, 59, 23), (184, 71, 26), (197, 85, 30),
+ (208, 100, 32), (217, 112, 35), (222, 117, 35), (230, 129, 38),
+ (240, 144, 41), (245, 163, 46), (249, 182, 51), (252, 202, 54)
+ ),
+
+// 655 Summer_Skies
+((122, 101, 184), (121, 121, 183), (125, 131, 185), (130, 141, 188),
+ (132, 148, 193), (135, 156, 199), (136, 158, 200), (137, 160, 202),
+ (137, 153, 192), (127, 145, 183), (118, 137, 174), (108, 131, 166),
+ (99, 126, 159), (93, 120, 158), (87, 114, 158), (82, 110, 158),
+ (78, 106, 158), (61, 90, 164), (53, 85, 163), (46, 81, 163),
+ (43, 77, 163), (41, 74, 164), (42, 74, 163), (44, 75, 162),
+ (65, 84, 167), (78, 89, 173), (91, 94, 179), (101, 100, 187),
+ (112, 106, 196), (115, 110, 199), (118, 114, 202), (128, 123, 204),
+ (137, 132, 206), (156, 153, 209), (163, 165, 210), (171, 178, 211),
+ (174, 192, 216), (178, 206, 221), (177, 210, 223), (177, 215, 226),
+ (165, 224, 231), (156, 222, 227), (148, 221, 223), (142, 213, 220),
+ (136, 206, 218), (133, 203, 215), (131, 200, 212), (122, 189, 205),
+ (116, 182, 200), (94, 168, 190), (80, 157, 182), (67, 146, 174),
+ (56, 135, 163), (46, 124, 153), (42, 119, 148), (38, 115, 143),
+ (34, 92, 123), (34, 81, 115), (34, 70, 107), (32, 60, 102),
+ (30, 51, 97), (29, 48, 94), (28, 45, 92), (26, 42, 90),
+ (23, 41, 92), (13, 56, 97), (12, 66, 102), (12, 76, 108),
+ (13, 81, 113), (15, 87, 118), (18, 97, 129), (23, 107, 140),
+ (40, 125, 161), (48, 133, 173), (57, 141, 186), (60, 153, 196),
+ (63, 166, 206), (63, 172, 209), (64, 178, 213), (64, 190, 221),
+ (61, 206, 228), (53, 223, 238), (52, 226, 239), (52, 229, 241),
+ (53, 228, 241), (55, 227, 242), (58, 224, 242), (59, 225, 240),
+ (64, 218, 232), (66, 217, 221), (69, 217, 210), (67, 218, 204),
+ (65, 219, 199), (62, 222, 190), (60, 222, 187), (64, 221, 187),
+ (72, 220, 186), (90, 222, 189), (97, 216, 193), (105, 210, 198),
+ (111, 206, 194), (117, 203, 190), (120, 195, 185), (119, 185, 179),
+ (114, 165, 167), (111, 154, 161), (108, 144, 156), (106, 142, 153),
+ (105, 140, 151), (104, 130, 151), (105, 119, 158), (109, 108, 161),
+ (110, 100, 163), (108, 95, 161), (106, 93, 161), (105, 92, 161),
+ (95, 87, 159), (88, 86, 156), (79, 89, 153), (73, 94, 151),
+ (77, 105, 156), (79, 115, 159), (81, 125, 163), (82, 131, 164),
+ (84, 138, 165), (89, 148, 171), (90, 157, 181), (91, 169, 190),
+ (86, 180, 199), (72, 204, 211), (70, 209, 213), (68, 214, 216),
+ (64, 217, 222), (61, 222, 227), (61, 229, 229), (65, 230, 228),
+ (83, 235, 237), (90, 236, 239), (97, 238, 242), (98, 238, 242),
+ (99, 238, 242), (99, 239, 243), (95, 239, 243), (90, 237, 244),
+ (84, 238, 243), (77, 241, 241), (79, 241, 241), (82, 242, 242),
+ (90, 241, 243), (101, 241, 243), (115, 240, 244), (131, 242, 245),
+ (151, 245, 249), (153, 244, 249), (156, 243, 249), (153, 240, 247),
+ (147, 233, 244), (141, 226, 241), (138, 223, 238), (136, 219, 235),
+ (137, 214, 231), (148, 212, 228), (150, 212, 227), (153, 213, 227),
+ (157, 217, 228), (158, 219, 228), (159, 220, 229), (156, 219, 230),
+ (155, 220, 231), (155, 218, 230), (155, 217, 229), (155, 215, 228),
+ (155, 213, 229), (153, 210, 227), (151, 205, 226), (145, 199, 222),
+ (137, 191, 218), (126, 186, 215), (114, 181, 212), (106, 178, 209),
+ (102, 173, 206), (102, 175, 203), (105, 174, 204), (112, 177, 204),
+ (134, 174, 204), (136, 171, 202), (139, 169, 200), (141, 159, 195),
+ (133, 153, 191), (123, 149, 186), (112, 142, 182), (102, 141, 177),
+ (90, 144, 175), (80, 153, 173), (74, 162, 175), (74, 174, 177),
+ (75, 180, 177), (81, 183, 176), (88, 181, 173), (93, 181, 174),
+ (99, 174, 178), (108, 166, 180), (111, 159, 181), (109, 155, 179),
+ (105, 149, 178), (103, 139, 175), (96, 132, 170), (91, 129, 166),
+ (88, 122, 156), (89, 121, 146), (91, 109, 137), (102, 100, 137),
+ (117, 95, 140), (133, 95, 144), (144, 100, 152), (161, 104, 160),
+ (172, 107, 167), (180, 112, 176), (182, 118, 181), (185, 133, 183),
+ (183, 140, 178), (184, 146, 178), (189, 154, 180), (195, 161, 185),
+ (201, 174, 193), (207, 185, 203), (212, 192, 213), (220, 195, 221),
+ (221, 198, 231), (218, 208, 239), (210, 218, 242), (198, 223, 242),
+ (185, 223, 240), (172, 219, 235), (160, 210, 226), (148, 198, 219),
+ (135, 186, 213), (126, 172, 207), (122, 158, 207), (121, 145, 205),
+ (115, 132, 200), (105, 120, 193), (93, 107, 187), (80, 100, 181),
+ (68, 94, 173), (59, 96, 171), (47, 96, 166), (44, 97, 163),
+ (47, 93, 163), (61, 89, 167), (72, 83, 170), (83, 79, 172),
+ (93, 75, 176), (105, 80, 180), (113, 80, 179), (124, 93, 185)
+ ),
+
+// 656 Summer_Tulips
+((179, 133, 66), (205, 125, 44), (204, 117, 30), (203, 110, 16),
+ (197, 106, 11), (192, 102, 7), (188, 99, 6), (185, 97, 5),
+ (178, 97, 5), (176, 98, 7), (175, 100, 9), (176, 105, 18),
+ (177, 110, 27), (176, 116, 37), (175, 123, 48), (177, 125, 50),
+ (180, 127, 53), (186, 126, 44), (186, 122, 35), (186, 118, 26),
+ (172, 114, 30), (159, 111, 35), (157, 112, 38), (155, 113, 42),
+ (113, 112, 70), (112, 115, 77), (111, 119, 84), (109, 120, 87),
+ (107, 122, 90), (110, 123, 91), (113, 125, 92), (121, 124, 87),
+ (133, 120, 72), (153, 108, 43), (162, 101, 27), (172, 94, 12),
+ (171, 86, 9), (170, 79, 6), (169, 74, 6), (168, 69, 7),
+ (169, 58, 7), (171, 56, 6), (173, 55, 6), (175, 65, 6),
+ (178, 75, 7), (179, 77, 7), (180, 80, 7), (186, 94, 17),
+ (187, 114, 29), (198, 136, 56), (207, 145, 64), (216, 154, 73),
+ (216, 154, 73), (217, 154, 74), (214, 153, 74), (212, 153, 75),
+ (185, 142, 76), (168, 140, 82), (152, 139, 89), (142, 137, 92),
+ (133, 136, 96), (130, 136, 97), (127, 137, 99), (133, 138, 97),
+ (144, 143, 102), (180, 146, 104), (200, 155, 108), (220, 164, 112),
+ (226, 164, 112), (233, 164, 112), (240, 163, 110), (239, 172, 97),
+ (222, 159, 68), (208, 149, 55), (195, 140, 43), (188, 135, 36),
+ (182, 130, 29), (181, 126, 31), (181, 122, 34), (182, 124, 33),
+ (185, 129, 34), (183, 129, 48), (174, 129, 55), (166, 129, 63),
+ (162, 128, 65), (159, 127, 67), (158, 121, 60), (161, 111, 46),
+ (168, 90, 24), (172, 79, 15), (176, 68, 6), (176, 70, 5),
+ (176, 72, 5), (178, 74, 6), (178, 70, 5), (175, 73, 5),
+ (175, 74, 7), (171, 57, 7), (167, 50, 8), (163, 44, 9),
+ (161, 41, 10), (160, 39, 11), (158, 37, 9), (157, 37, 9),
+ (146, 47, 9), (149, 55, 8), (152, 64, 7), (150, 66, 7),
+ (148, 68, 8), (152, 66, 8), (155, 65, 8), (154, 66, 10),
+ (159, 64, 8), (157, 71, 11), (157, 76, 11), (157, 81, 11),
+ (151, 93, 20), (148, 101, 37), (145, 112, 49), (137, 121, 63),
+ (142, 135, 92), (145, 139, 94), (149, 143, 97), (152, 142, 94),
+ (155, 141, 92), (159, 138, 83), (164, 132, 72), (167, 125, 57),
+ (175, 121, 40), (187, 122, 27), (186, 123, 29), (186, 124, 32),
+ (189, 132, 39), (188, 137, 52), (181, 141, 68), (176, 145, 80),
+ (173, 150, 91), (176, 152, 92), (179, 154, 94), (182, 154, 92),
+ (185, 155, 90), (186, 152, 84), (191, 145, 72), (199, 140, 54),
+ (196, 129, 40), (190, 108, 17), (182, 107, 19), (174, 107, 21),
+ (161, 102, 32), (150, 107, 47), (132, 115, 63), (121, 119, 77),
+ (118, 130, 96), (120, 132, 97), (123, 134, 99), (133, 138, 103),
+ (149, 145, 109), (176, 156, 119), (201, 166, 124), (216, 172, 125),
+ (224, 172, 132), (217, 171, 124), (207, 166, 122), (197, 162, 120),
+ (174, 153, 109), (166, 147, 104), (160, 144, 98), (154, 139, 90),
+ (157, 136, 84), (156, 135, 83), (156, 134, 82), (152, 132, 81),
+ (148, 135, 86), (144, 138, 93), (141, 139, 96), (137, 141, 101),
+ (134, 144, 107), (135, 145, 108), (133, 145, 107), (130, 144, 108),
+ (129, 143, 106), (126, 142, 105), (122, 139, 103), (118, 134, 99),
+ (112, 127, 94), (110, 125, 93), (108, 123, 92), (107, 122, 90),
+ (107, 121, 89), (108, 122, 89), (117, 124, 89), (129, 127, 84),
+ (141, 126, 75), (159, 125, 61), (175, 124, 46), (187, 121, 34),
+ (197, 119, 21), (200, 119, 16), (196, 119, 24), (190, 121, 32),
+ (177, 124, 45), (168, 128, 62), (168, 132, 70), (165, 135, 75),
+ (166, 138, 77), (177, 141, 71), (185, 143, 61), (191, 145, 55),
+ (201, 146, 49), (205, 142, 41), (203, 139, 39), (209, 140, 35),
+ (213, 134, 30), (208, 129, 30), (206, 131, 28), (211, 134, 28),
+ (213, 138, 33), (213, 144, 40), (224, 151, 52), (228, 157, 64),
+ (229, 160, 73), (230, 163, 79), (226, 164, 79), (221, 161, 77),
+ (214, 159, 74), (208, 158, 67), (208, 155, 64), (210, 150, 72),
+ (209, 142, 78), (210, 139, 81), (216, 141, 90), (214, 143, 95),
+ (214, 144, 94), (219, 150, 99), (222, 160, 97), (229, 162, 91),
+ (230, 164, 88), (225, 163, 81), (224, 158, 75), (215, 157, 71),
+ (205, 153, 66), (202, 147, 60), (202, 146, 55), (204, 148, 52),
+ (207, 148, 50), (215, 150, 49), (223, 155, 49), (225, 155, 58),
+ (223, 151, 71), (219, 154, 79), (215, 158, 84), (206, 150, 89),
+ (187, 145, 90), (177, 149, 90), (186, 144, 93), (182, 135, 81)
+ ),
+
+// 657 Sunbathing
+((217, 135, 3), (250, 167, 1), (251, 164, 1), (252, 161, 2),
+ (251, 163, 2), (251, 166, 3), (250, 164, 3), (249, 163, 3),
+ (221, 132, 3), (193, 108, 2), (165, 84, 2), (141, 69, 5),
+ (117, 54, 9), (88, 40, 13), (59, 26, 18), (53, 25, 18),
+ (48, 25, 18), (84, 51, 20), (91, 63, 24), (99, 76, 29),
+ (98, 83, 42), (98, 90, 56), (99, 100, 71), (101, 110, 87),
+ (65, 126, 147), (69, 135, 167), (73, 145, 187), (105, 163, 176),
+ (137, 181, 165), (141, 180, 158), (145, 180, 152), (181, 193, 130),
+ (214, 190, 94), (226, 176, 50), (191, 172, 76), (157, 168, 102),
+ (139, 143, 100), (121, 119, 99), (115, 114, 98), (109, 109, 98),
+ (120, 123, 105), (140, 120, 76), (160, 118, 47), (192, 131, 27),
+ (225, 145, 7), (234, 150, 4), (243, 155, 2), (246, 162, 4),
+ (247, 163, 7), (251, 154, 11), (240, 134, 12), (230, 114, 13),
+ (199, 95, 18), (169, 76, 24), (158, 68, 23), (147, 61, 23),
+ (78, 21, 27), (51, 18, 32), (24, 15, 38), (14, 18, 33),
+ (5, 22, 28), (4, 21, 29), (3, 20, 30), (6, 20, 34),
+ (11, 24, 27), (36, 27, 25), (64, 41, 26), (93, 55, 28),
+ (110, 64, 29), (128, 73, 30), (154, 86, 34), (180, 104, 32),
+ (233, 144, 22), (242, 151, 21), (252, 159, 21), (251, 159, 15),
+ (250, 160, 10), (249, 160, 8), (249, 161, 6), (248, 161, 7),
+ (243, 162, 10), (195, 144, 17), (160, 130, 40), (126, 117, 63),
+ (116, 117, 77), (106, 117, 91), (76, 107, 111), (48, 86, 123),
+ (53, 87, 123), (74, 92, 110), (96, 98, 97), (99, 91, 84),
+ (102, 85, 71), (112, 74, 43), (118, 71, 16), (126, 78, 6),
+ (134, 81, 3), (156, 83, 10), (169, 92, 16), (183, 101, 22),
+ (195, 106, 21), (208, 112, 20), (211, 107, 21), (191, 95, 20),
+ (139, 63, 25), (104, 44, 25), (69, 25, 26), (52, 18, 25),
+ (35, 12, 25), (18, 6, 23), (8, 3, 26), (2, 1, 24),
+ (0, 2, 20), (0, 3, 11), (0, 3, 10), (0, 3, 9),
+ (0, 3, 9), (1, 4, 10), (5, 4, 9), (10, 4, 9),
+ (30, 6, 17), (58, 26, 14), (86, 47, 11), (99, 57, 10),
+ (113, 68, 9), (140, 79, 15), (172, 95, 16), (196, 111, 20),
+ (206, 119, 21), (172, 102, 31), (157, 97, 43), (142, 92, 55),
+ (120, 87, 86), (88, 91, 116), (56, 100, 139), (23, 107, 167),
+ (4, 120, 200), (2, 113, 182), (1, 106, 165), (1, 100, 147),
+ (1, 95, 130), (0, 80, 104), (0, 56, 70), (0, 32, 41),
+ (0, 21, 14), (8, 19, 2), (14, 19, 3), (20, 19, 5),
+ (45, 33, 4), (74, 57, 3), (109, 83, 2), (138, 100, 5),
+ (201, 142, 5), (214, 153, 4), (228, 165, 4), (245, 176, 6),
+ (252, 180, 12), (251, 177, 19), (243, 173, 31), (205, 171, 61),
+ (171, 167, 99), (124, 147, 136), (103, 139, 142), (83, 132, 148),
+ (53, 116, 151), (25, 104, 154), (21, 89, 132), (13, 69, 113),
+ (17, 31, 65), (16, 29, 58), (15, 27, 51), (10, 21, 52),
+ (8, 17, 55), (6, 19, 66), (4, 32, 86), (5, 48, 110),
+ (7, 67, 132), (5, 87, 151), (1, 112, 171), (2, 123, 188),
+ (6, 121, 189), (6, 108, 179), (4, 98, 155), (7, 84, 131),
+ (29, 43, 71), (40, 41, 56), (52, 39, 41), (83, 49, 22),
+ (116, 67, 9), (142, 81, 4), (167, 100, 1), (196, 120, 1),
+ (223, 136, 3), (227, 138, 3), (212, 124, 1), (184, 106, 0),
+ (159, 86, 1), (133, 74, 2), (103, 55, 3), (68, 36, 6),
+ (40, 18, 10), (21, 13, 14), (11, 11, 18), (6, 16, 27),
+ (3, 20, 43), (2, 29, 65), (0, 42, 95), (2, 65, 124),
+ (3, 90, 152), (3, 112, 176), (1, 129, 201), (1, 141, 216),
+ (5, 140, 215), (13, 132, 189), (33, 126, 157), (65, 131, 126),
+ (99, 127, 100), (128, 121, 68), (156, 119, 40), (189, 142, 25),
+ (221, 165, 17), (242, 182, 13), (251, 185, 9), (253, 189, 16),
+ (253, 193, 15), (253, 192, 13), (255, 180, 5), (250, 158, 6),
+ (234, 131, 7), (209, 106, 6), (187, 86, 4), (174, 65, 1),
+ (163, 49, 3), (155, 42, 3), (152, 46, 3), (157, 53, 0),
+ (160, 62, 0), (160, 66, 0), (155, 68, 0), (146, 62, 0),
+ (124, 58, 0), (97, 45, 0), (65, 28, 0), (40, 10, 0),
+ (20, 3, 2), (10, 1, 5), (3, 2, 6), (2, 2, 6),
+ (7, 2, 7), (16, 2, 8), (34, 8, 10), (59, 28, 10),
+ (98, 61, 7), (128, 80, 4), (157, 87, 4), (180, 98, 3)
+ ),
+
+// 658 Sunny_Field
+((117, 176, 112), (110, 170, 116), (110, 170, 127), (111, 171, 138),
+ (110, 175, 144), (110, 179, 150), (110, 183, 151), (111, 187, 152),
+ (127, 195, 155), (135, 202, 153), (143, 209, 152), (148, 208, 154),
+ (153, 208, 157), (155, 209, 158), (157, 210, 159), (154, 210, 157),
+ (151, 210, 156), (153, 197, 144), (149, 193, 136), (145, 189, 128),
+ (141, 177, 113), (137, 166, 99), (130, 156, 91), (124, 147, 84),
+ (87, 107, 58), (69, 87, 46), (51, 68, 34), (42, 64, 32),
+ (34, 61, 31), (36, 64, 33), (39, 68, 36), (50, 77, 37),
+ (58, 87, 48), (74, 113, 77), (72, 114, 75), (71, 116, 73),
+ (59, 113, 72), (48, 110, 71), (44, 106, 66), (40, 102, 62),
+ (21, 81, 41), (16, 75, 32), (11, 69, 24), (11, 58, 19),
+ (12, 48, 15), (10, 45, 13), (8, 43, 12), (11, 40, 7),
+ (19, 44, 9), (41, 57, 16), (55, 68, 17), (70, 80, 18),
+ (83, 90, 28), (97, 101, 38), (103, 107, 42), (109, 113, 47),
+ (112, 128, 69), (107, 128, 78), (103, 129, 88), (91, 127, 89),
+ (79, 125, 91), (76, 121, 90), (74, 118, 90), (64, 110, 88),
+ (58, 109, 79), (44, 118, 65), (45, 117, 58), (46, 117, 51),
+ (46, 116, 48), (46, 115, 46), (42, 112, 41), (39, 107, 37),
+ (43, 92, 28), (41, 86, 28), (39, 81, 29), (44, 89, 35),
+ (49, 97, 41), (53, 101, 45), (58, 106, 50), (66, 111, 57),
+ (77, 119, 63), (86, 130, 86), (83, 132, 90), (81, 135, 94),
+ (79, 135, 90), (78, 136, 87), (75, 135, 81), (66, 132, 79),
+ (64, 140, 75), (75, 145, 71), (86, 150, 68), (89, 155, 72),
+ (93, 160, 77), (99, 167, 89), (109, 175, 95), (105, 180, 99),
+ (96, 182, 105), (76, 182, 103), (60, 176, 100), (45, 171, 97),
+ (38, 170, 97), (31, 169, 97), (27, 167, 98), (29, 169, 97),
+ (44, 162, 94), (50, 158, 91), (57, 155, 89), (58, 154, 89),
+ (60, 154, 90), (60, 153, 86), (61, 148, 82), (56, 148, 81),
+ (53, 148, 83), (41, 156, 94), (41, 156, 99), (42, 156, 104),
+ (50, 153, 111), (58, 155, 112), (65, 154, 111), (68, 148, 107),
+ (71, 132, 91), (69, 131, 79), (68, 130, 67), (64, 127, 60),
+ (61, 124, 53), (55, 121, 44), (47, 117, 41), (39, 111, 40),
+ (31, 103, 39), (25, 90, 35), (24, 87, 32), (24, 84, 30),
+ (26, 74, 30), (34, 74, 33), (41, 75, 39), (56, 87, 44),
+ (120, 109, 61), (144, 131, 75), (168, 153, 90), (179, 160, 101),
+ (190, 168, 113), (211, 172, 124), (220, 182, 133), (216, 192, 139),
+ (203, 200, 148), (166, 189, 160), (154, 185, 161), (142, 182, 163),
+ (115, 180, 158), (98, 175, 153), (83, 163, 142), (72, 151, 132),
+ (49, 134, 100), (46, 128, 90), (44, 122, 80), (42, 110, 66),
+ (39, 105, 49), (37, 104, 40), (39, 106, 32), (45, 105, 31),
+ (52, 110, 29), (86, 125, 41), (95, 130, 48), (104, 136, 56),
+ (122, 142, 72), (147, 157, 92), (178, 166, 102), (200, 182, 112),
+ (214, 201, 135), (214, 203, 139), (215, 206, 143), (208, 210, 145),
+ (197, 217, 142), (169, 219, 145), (142, 220, 149), (119, 216, 152),
+ (110, 214, 148), (101, 214, 148), (95, 213, 145), (91, 210, 143),
+ (93, 205, 131), (95, 200, 122), (94, 192, 111), (90, 180, 103),
+ (67, 152, 79), (60, 148, 73), (54, 144, 68), (48, 134, 63),
+ (42, 132, 60), (36, 129, 61), (28, 136, 63), (29, 137, 65),
+ (27, 129, 64), (26, 128, 65), (25, 134, 74), (34, 147, 90),
+ (36, 143, 98), (42, 139, 102), (48, 137, 107), (56, 146, 118),
+ (56, 162, 128), (53, 171, 129), (55, 170, 122), (57, 159, 110),
+ (60, 156, 103), (64, 159, 99), (69, 160, 96), (73, 155, 92),
+ (77, 155, 93), (87, 160, 98), (95, 168, 107), (100, 174, 119),
+ (104, 182, 127), (111, 191, 137), (117, 197, 140), (124, 202, 145),
+ (130, 210, 145), (139, 215, 145), (144, 217, 141), (147, 217, 134),
+ (147, 212, 125), (144, 201, 114), (147, 189, 103), (146, 178, 95),
+ (145, 164, 91), (137, 152, 87), (142, 147, 86), (143, 150, 87),
+ (144, 156, 96), (139, 166, 104), (145, 175, 110), (155, 185, 114),
+ (158, 194, 123), (162, 205, 135), (163, 208, 140), (173, 202, 143),
+ (181, 195, 145), (195, 199, 148), (205, 205, 146), (213, 208, 145),
+ (222, 204, 145), (227, 204, 147), (229, 208, 145), (223, 217, 143),
+ (220, 223, 144), (214, 229, 152), (205, 228, 156), (193, 228, 163),
+ (180, 230, 165), (171, 232, 169), (163, 227, 162), (157, 220, 154),
+ (145, 212, 141), (133, 204, 133), (124, 193, 121), (120, 184, 118)
+ ),
+
+// 659 Sunset
+((189, 106, 106), (165, 81, 91), (155, 71, 87), (146, 62, 83),
+ (137, 51, 81), (129, 41, 80), (123, 36, 79), (117, 31, 78),
+ (89, 23, 63), (76, 19, 54), (63, 16, 45), (54, 14, 39),
+ (45, 13, 34), (44, 12, 33), (43, 12, 33), (43, 12, 32),
+ (44, 12, 32), (49, 12, 34), (53, 11, 34), (57, 10, 35),
+ (64, 9, 31), (72, 9, 27), (79, 9, 26), (87, 9, 26),
+ (115, 16, 22), (132, 24, 24), (149, 32, 26), (162, 41, 32),
+ (175, 50, 39), (181, 53, 40), (187, 57, 42), (200, 61, 44),
+ (213, 62, 41), (218, 72, 33), (220, 78, 31), (223, 84, 30),
+ (217, 87, 31), (212, 91, 32), (208, 89, 32), (204, 88, 33),
+ (184, 74, 31), (167, 66, 29), (151, 59, 27), (136, 53, 24),
+ (121, 47, 21), (112, 45, 19), (104, 44, 18), (90, 37, 15),
+ (81, 28, 13), (68, 19, 13), (67, 27, 22), (67, 35, 31),
+ (75, 50, 42), (83, 65, 54), (86, 72, 59), (90, 79, 65),
+ (112, 94, 82), (124, 100, 84), (136, 107, 87), (151, 116, 90),
+ (167, 125, 93), (177, 131, 94), (188, 137, 96), (203, 149, 99),
+ (213, 156, 102), (223, 142, 95), (218, 128, 84), (214, 114, 74),
+ (210, 106, 68), (207, 99, 63), (206, 88, 50), (205, 86, 39),
+ (205, 91, 33), (207, 93, 34), (209, 96, 35), (208, 100, 39),
+ (208, 105, 44), (208, 105, 43), (208, 105, 43), (207, 108, 42),
+ (205, 112, 45), (204, 124, 53), (206, 133, 58), (209, 142, 63),
+ (210, 146, 66), (212, 151, 70), (215, 157, 73), (218, 162, 74),
+ (213, 161, 75), (205, 152, 71), (198, 144, 68), (193, 138, 66),
+ (188, 132, 64), (175, 120, 60), (159, 109, 56), (146, 101, 51),
+ (132, 92, 46), (107, 79, 36), (95, 71, 32), (84, 63, 29),
+ (78, 58, 27), (73, 54, 25), (59, 43, 19), (46, 32, 15),
+ (31, 14, 7), (31, 11, 4), (31, 8, 2), (34, 7, 2),
+ (37, 7, 3), (51, 9, 4), (65, 10, 6), (77, 9, 6),
+ (88, 8, 7), (107, 7, 9), (110, 7, 8), (114, 8, 8),
+ (117, 6, 7), (121, 7, 7), (120, 8, 8), (117, 8, 7),
+ (108, 6, 7), (100, 4, 7), (92, 3, 7), (86, 2, 6),
+ (80, 2, 5), (69, 0, 3), (55, 0, 3), (45, 0, 4),
+ (39, 1, 5), (38, 8, 6), (41, 11, 7), (44, 14, 8),
+ (52, 21, 10), (65, 31, 12), (75, 41, 14), (89, 51, 19),
+ (117, 69, 35), (132, 76, 43), (147, 84, 52), (154, 84, 54),
+ (161, 85, 57), (175, 86, 59), (186, 85, 59), (196, 85, 59),
+ (204, 86, 62), (211, 84, 76), (213, 84, 79), (215, 84, 82),
+ (220, 86, 88), (223, 89, 93), (226, 92, 99), (228, 93, 102),
+ (232, 98, 109), (232, 102, 110), (233, 106, 112), (233, 113, 115),
+ (236, 127, 119), (238, 141, 125), (241, 158, 133), (243, 175, 142),
+ (242, 186, 154), (248, 208, 164), (246, 208, 164), (245, 209, 164),
+ (241, 206, 160), (238, 197, 153), (232, 186, 143), (228, 178, 135),
+ (210, 150, 123), (207, 143, 119), (205, 136, 116), (197, 122, 108),
+ (187, 108, 98), (180, 95, 85), (172, 81, 71), (167, 69, 63),
+ (161, 59, 53), (156, 50, 50), (153, 49, 49), (150, 49, 49),
+ (149, 54, 49), (153, 61, 49), (156, 70, 48), (159, 76, 54),
+ (168, 89, 56), (169, 92, 55), (171, 96, 55), (169, 99, 56),
+ (165, 100, 55), (161, 100, 56), (150, 98, 53), (140, 94, 53),
+ (132, 88, 48), (130, 80, 43), (130, 72, 37), (129, 64, 30),
+ (126, 53, 24), (127, 45, 20), (124, 34, 18), (119, 28, 21),
+ (116, 22, 26), (117, 18, 31), (122, 15, 32), (131, 14, 33),
+ (143, 12, 32), (156, 14, 32), (171, 13, 28), (181, 18, 29),
+ (186, 23, 32), (190, 31, 39), (193, 41, 42), (192, 49, 46),
+ (194, 54, 48), (192, 60, 48), (187, 61, 43), (181, 65, 36),
+ (174, 64, 31), (167, 65, 31), (161, 67, 29), (151, 69, 29),
+ (144, 68, 29), (141, 66, 27), (135, 61, 26), (126, 58, 24),
+ (117, 51, 21), (104, 44, 19), (93, 37, 16), (80, 32, 13),
+ (70, 26, 11), (65, 18, 8), (65, 11, 6), (66, 8, 6),
+ (70, 5, 4), (70, 4, 3), (71, 4, 3), (72, 6, 3),
+ (73, 9, 7), (74, 15, 11), (82, 24, 17), (94, 39, 27),
+ (111, 55, 38), (128, 69, 47), (145, 83, 57), (162, 96, 63),
+ (178, 107, 72), (185, 115, 80), (194, 120, 85), (202, 132, 92),
+ (211, 144, 99), (217, 148, 105), (221, 148, 113), (222, 149, 117),
+ (225, 148, 119), (219, 140, 121), (211, 125, 116), (199, 113, 112)
+ ),
+
+// 660 Surfer
+((21, 75, 192), (8, 98, 234), (5, 102, 240), (2, 106, 247),
+ (3, 108, 246), (4, 111, 246), (4, 112, 246), (5, 113, 247),
+ (3, 119, 252), (5, 119, 249), (8, 119, 246), (12, 112, 234),
+ (17, 105, 222), (20, 92, 204), (24, 80, 186), (26, 75, 178),
+ (29, 70, 171), (27, 58, 163), (25, 57, 165), (23, 57, 168),
+ (21, 63, 174), (20, 70, 180), (17, 75, 187), (14, 80, 195),
+ (2, 105, 233), (2, 113, 242), (2, 121, 252), (2, 121, 252),
+ (2, 122, 253), (2, 121, 253), (3, 121, 254), (5, 120, 254),
+ (8, 120, 253), (21, 99, 224), (31, 84, 197), (41, 69, 170),
+ (53, 62, 149), (65, 55, 128), (69, 49, 116), (74, 43, 105),
+ (93, 13, 50), (96, 7, 37), (99, 2, 25), (93, 4, 35),
+ (88, 7, 45), (84, 11, 55), (80, 16, 65), (67, 31, 94),
+ (60, 44, 116), (35, 64, 162), (24, 77, 187), (14, 90, 212),
+ (10, 102, 228), (7, 115, 244), (5, 118, 248), (4, 122, 252),
+ (0, 125, 254), (0, 128, 254), (0, 131, 254), (0, 132, 254),
+ (1, 134, 255), (1, 134, 254), (1, 134, 254), (2, 134, 254),
+ (2, 130, 254), (5, 116, 244), (9, 104, 226), (13, 93, 209),
+ (18, 86, 197), (23, 80, 185), (38, 66, 159), (53, 52, 135),
+ (83, 27, 85), (99, 18, 61), (116, 10, 37), (130, 6, 22),
+ (144, 2, 8), (147, 1, 5), (151, 1, 3), (155, 1, 1),
+ (159, 1, 1), (165, 1, 1), (168, 1, 1), (172, 1, 1),
+ (174, 2, 0), (177, 3, 0), (184, 4, 0), (188, 4, 0),
+ (191, 2, 1), (191, 3, 1), (191, 4, 1), (189, 4, 0),
+ (188, 4, 0), (177, 4, 1), (165, 2, 2), (153, 1, 4),
+ (143, 1, 6), (132, 1, 7), (125, 0, 8), (119, 0, 9),
+ (117, 0, 9), (115, 0, 9), (118, 0, 8), (124, 0, 7),
+ (137, 0, 6), (137, 1, 6), (137, 2, 7), (135, 2, 9),
+ (133, 3, 11), (126, 5, 22), (117, 9, 38), (105, 16, 59),
+ (90, 25, 82), (59, 37, 122), (52, 37, 126), (46, 38, 130),
+ (39, 37, 134), (39, 37, 133), (45, 37, 127), (58, 35, 117),
+ (90, 23, 79), (106, 15, 56), (123, 8, 34), (130, 5, 26),
+ (138, 3, 18), (151, 1, 8), (165, 1, 4), (176, 1, 2),
+ (184, 1, 2), (190, 0, 1), (189, 0, 1), (189, 1, 2),
+ (189, 1, 2), (193, 1, 2), (202, 7, 1), (211, 13, 0),
+ (218, 60, 1), (220, 84, 2), (223, 109, 4), (228, 111, 5),
+ (233, 114, 6), (244, 119, 10), (231, 119, 26), (207, 135, 52),
+ (178, 146, 83), (137, 143, 131), (125, 130, 140), (113, 117, 149),
+ (88, 102, 170), (60, 87, 189), (35, 83, 197), (34, 79, 187),
+ (50, 57, 141), (54, 51, 131), (59, 45, 122), (68, 31, 97),
+ (79, 19, 70), (89, 10, 46), (99, 4, 25), (106, 2, 16),
+ (111, 1, 13), (112, 0, 10), (110, 0, 11), (109, 0, 13),
+ (101, 2, 23), (93, 4, 34), (83, 9, 50), (74, 14, 64),
+ (59, 19, 84), (57, 18, 83), (56, 18, 83), (55, 17, 86),
+ (56, 18, 84), (61, 18, 82), (71, 17, 75), (84, 14, 59),
+ (98, 8, 43), (112, 4, 26), (117, 1, 17), (122, 0, 12),
+ (130, 0, 7), (135, 0, 4), (142, 0, 2), (142, 0, 1),
+ (139, 0, 3), (139, 0, 3), (139, 0, 3), (146, 0, 2),
+ (153, 0, 0), (158, 0, 0), (165, 0, 0), (172, 0, 0),
+ (185, 6, 0), (197, 12, 0), (207, 18, 0), (219, 25, 0),
+ (225, 25, 1), (235, 31, 3), (244, 37, 6), (250, 43, 7),
+ (254, 49, 6), (254, 50, 6), (254, 48, 5), (249, 43, 7),
+ (239, 37, 8), (229, 30, 7), (218, 26, 6), (214, 24, 3),
+ (208, 18, 2), (198, 12, 2), (188, 6, 1), (178, 0, 2),
+ (178, 0, 1), (182, 0, 1), (192, 6, 1), (202, 12, 1),
+ (208, 17, 1), (213, 17, 1), (214, 10, 2), (217, 11, 1),
+ (216, 12, 3), (210, 18, 7), (192, 20, 17), (165, 19, 35),
+ (137, 22, 59), (113, 25, 85), (94, 36, 109), (73, 44, 130),
+ (52, 53, 151), (30, 60, 170), (17, 63, 184), (15, 63, 186),
+ (17, 61, 182), (25, 58, 175), (23, 56, 166), (21, 52, 159),
+ (24, 43, 140), (29, 33, 122), (42, 23, 105), (50, 18, 90),
+ (56, 18, 86), (66, 17, 77), (77, 15, 65), (91, 11, 52),
+ (103, 7, 37), (114, 5, 29), (122, 4, 22), (125, 3, 19),
+ (125, 3, 19), (114, 5, 29), (102, 14, 49), (90, 26, 76),
+ (73, 39, 106), (61, 50, 128), (44, 57, 150), (30, 65, 171)
+ ),
+
+// 661 Tequila
+((197, 113, 40), (197, 107, 47), (196, 104, 48), (195, 102, 49),
+ (195, 100, 47), (196, 98, 46), (198, 97, 46), (200, 97, 46),
+ (205, 96, 43), (205, 92, 43), (205, 88, 44), (203, 83, 42),
+ (201, 79, 41), (197, 72, 38), (194, 65, 36), (193, 62, 34),
+ (193, 59, 33), (192, 59, 37), (191, 62, 47), (190, 66, 57),
+ (192, 76, 69), (194, 86, 81), (194, 91, 86), (194, 96, 92),
+ (191, 107, 111), (191, 115, 119), (191, 124, 128), (191, 131, 135),
+ (191, 139, 142), (192, 142, 144), (193, 146, 147), (195, 152, 152),
+ (197, 158, 154), (201, 162, 158), (202, 158, 158), (204, 155, 158),
+ (205, 151, 153), (207, 147, 149), (207, 144, 144), (207, 142, 140),
+ (206, 130, 117), (207, 123, 103), (209, 117, 90), (206, 107, 81),
+ (204, 98, 72), (201, 93, 70), (199, 89, 69), (195, 82, 68),
+ (193, 78, 66), (190, 69, 61), (190, 69, 57), (190, 69, 53),
+ (188, 72, 54), (186, 76, 56), (184, 79, 59), (183, 82, 63),
+ (175, 93, 87), (174, 95, 99), (173, 97, 111), (176, 100, 115),
+ (180, 104, 120), (183, 105, 122), (187, 107, 124), (192, 112, 127),
+ (197, 117, 128), (203, 128, 132), (203, 126, 134), (203, 125, 136),
+ (202, 122, 133), (201, 120, 131), (196, 113, 125), (192, 103, 116),
+ (185, 84, 95), (180, 78, 82), (175, 73, 69), (174, 68, 60),
+ (174, 63, 51), (174, 62, 47), (175, 61, 43), (175, 60, 40),
+ (174, 59, 42), (176, 58, 58), (175, 60, 66), (175, 63, 75),
+ (176, 63, 80), (177, 63, 85), (181, 62, 95), (186, 62, 97),
+ (192, 62, 95), (193, 62, 94), (195, 63, 94), (195, 63, 94),
+ (195, 64, 95), (195, 66, 94), (197, 66, 92), (199, 64, 97),
+ (203, 61, 94), (203, 51, 79), (201, 46, 67), (200, 41, 56),
+ (197, 39, 51), (195, 38, 46), (190, 36, 36), (188, 35, 25),
+ (194, 39, 16), (199, 43, 15), (204, 48, 14), (206, 50, 13),
+ (209, 53, 13), (212, 58, 13), (214, 62, 14), (213, 63, 14),
+ (214, 63, 14), (213, 67, 14), (213, 70, 15), (214, 73, 17),
+ (214, 82, 23), (214, 92, 31), (214, 102, 42), (214, 112, 54),
+ (216, 125, 76), (217, 127, 85), (218, 129, 94), (219, 129, 98),
+ (221, 130, 103), (223, 131, 111), (225, 134, 120), (224, 138, 132),
+ (221, 143, 145), (214, 154, 172), (213, 153, 178), (212, 153, 184),
+ (210, 147, 192), (211, 138, 199), (212, 133, 202), (214, 131, 202),
+ (213, 131, 206), (208, 134, 205), (204, 137, 205), (202, 139, 202),
+ (200, 141, 200), (198, 139, 190), (196, 129, 181), (193, 121, 170),
+ (190, 113, 157), (182, 99, 134), (181, 94, 129), (180, 90, 125),
+ (176, 88, 117), (172, 89, 107), (172, 92, 96), (173, 89, 86),
+ (179, 76, 63), (180, 72, 56), (182, 68, 50), (184, 60, 39),
+ (186, 51, 30), (187, 44, 25), (186, 39, 22), (186, 38, 19),
+ (189, 38, 20), (196, 45, 26), (198, 48, 29), (201, 52, 33),
+ (208, 58, 42), (213, 66, 52), (218, 74, 64), (220, 82, 76),
+ (222, 94, 97), (222, 96, 100), (223, 98, 104), (221, 104, 109),
+ (219, 113, 117), (217, 119, 124), (219, 127, 130), (220, 135, 140),
+ (220, 144, 151), (219, 151, 164), (218, 156, 177), (218, 161, 187),
+ (218, 162, 193), (218, 164, 198), (216, 164, 201), (217, 164, 200),
+ (220, 166, 197), (221, 167, 197), (222, 168, 197), (223, 168, 197),
+ (223, 171, 201), (224, 172, 203), (225, 171, 207), (225, 170, 211),
+ (226, 168, 211), (227, 164, 208), (229, 159, 203), (228, 154, 195),
+ (227, 145, 183), (223, 136, 171), (217, 128, 159), (211, 121, 148),
+ (205, 113, 138), (202, 109, 128), (201, 107, 118), (199, 103, 110),
+ (194, 100, 102), (186, 97, 91), (176, 91, 81), (166, 82, 71),
+ (155, 74, 61), (143, 65, 51), (132, 57, 45), (124, 54, 37),
+ (121, 53, 35), (118, 50, 34), (116, 54, 33), (116, 56, 37),
+ (118, 62, 43), (121, 68, 52), (123, 73, 60), (123, 75, 71),
+ (124, 77, 81), (129, 81, 92), (139, 83, 103), (147, 89, 108),
+ (155, 91, 114), (162, 95, 116), (170, 97, 117), (175, 99, 115),
+ (178, 98, 116), (179, 98, 116), (181, 98, 115), (186, 98, 114),
+ (190, 99, 110), (192, 95, 105), (193, 92, 101), (198, 88, 93),
+ (200, 85, 81), (201, 82, 70), (199, 79, 60), (196, 77, 51),
+ (192, 75, 42), (191, 76, 33), (191, 75, 26), (191, 76, 24),
+ (195, 77, 23), (197, 76, 21), (198, 75, 19), (197, 75, 19),
+ (198, 76, 22), (197, 79, 25), (197, 88, 27), (196, 94, 28),
+ (195, 100, 30), (197, 107, 32), (199, 111, 37), (200, 114, 39)
+ ),
+
+// 662 Thistle
+((153, 156, 146), (160, 169, 153), (167, 172, 161), (174, 176, 170),
+ (167, 173, 162), (161, 170, 154), (160, 168, 154), (159, 166, 155),
+ (175, 163, 168), (183, 153, 181), (191, 144, 194), (192, 142, 188),
+ (194, 140, 182), (183, 138, 161), (173, 136, 140), (158, 132, 132),
+ (144, 129, 124), (109, 117, 75), (101, 107, 72), (94, 98, 70),
+ (100, 87, 88), (107, 76, 107), (119, 75, 120), (131, 75, 134),
+ (167, 100, 177), (179, 119, 188), (192, 139, 200), (192, 153, 198),
+ (193, 168, 197), (186, 172, 186), (179, 176, 175), (158, 173, 150),
+ (135, 155, 133), (94, 117, 87), (78, 103, 69), (62, 90, 51),
+ (60, 88, 46), (58, 87, 41), (61, 90, 39), (64, 93, 37),
+ (75, 111, 25), (76, 115, 26), (77, 120, 27), (75, 117, 23),
+ (73, 114, 20), (67, 111, 19), (61, 108, 19), (53, 101, 20),
+ (49, 96, 21), (49, 92, 29), (53, 93, 36), (57, 95, 43),
+ (66, 101, 50), (76, 108, 58), (78, 109, 62), (81, 110, 67),
+ (85, 108, 75), (85, 108, 74), (85, 109, 74), (82, 102, 72),
+ (79, 95, 71), (76, 91, 68), (73, 88, 65), (65, 82, 60),
+ (57, 77, 60), (51, 56, 58), (42, 51, 52), (34, 47, 46),
+ (30, 46, 45), (27, 46, 44), (26, 44, 44), (31, 47, 41),
+ (40, 58, 50), (46, 59, 57), (53, 61, 65), (63, 58, 74),
+ (73, 56, 84), (73, 56, 88), (74, 56, 93), (71, 58, 92),
+ (69, 55, 88), (65, 48, 83), (70, 55, 89), (76, 63, 96),
+ (79, 71, 99), (83, 79, 103), (92, 96, 102), (101, 101, 112),
+ (127, 117, 143), (137, 114, 151), (148, 111, 159), (151, 101, 164),
+ (154, 92, 170), (161, 82, 181), (167, 84, 188), (176, 80, 197),
+ (179, 63, 203), (171, 52, 195), (165, 65, 186), (159, 78, 177),
+ (153, 80, 172), (148, 82, 167), (143, 88, 155), (142, 104, 142),
+ (155, 143, 153), (160, 159, 152), (165, 176, 151), (166, 180, 149),
+ (168, 184, 148), (166, 182, 146), (160, 181, 137), (152, 176, 123),
+ (142, 174, 103), (120, 157, 66), (114, 150, 60), (109, 144, 54),
+ (98, 140, 46), (85, 128, 39), (79, 121, 40), (76, 109, 44),
+ (77, 97, 62), (79, 98, 71), (82, 100, 80), (83, 100, 81),
+ (84, 101, 82), (92, 105, 83), (97, 105, 86), (98, 112, 84),
+ (94, 119, 76), (94, 121, 61), (96, 122, 60), (98, 123, 59),
+ (106, 135, 60), (117, 151, 67), (132, 166, 78), (147, 176, 102),
+ (179, 198, 149), (189, 208, 160), (199, 218, 172), (201, 218, 171),
+ (204, 218, 171), (204, 212, 172), (207, 212, 178), (204, 213, 188),
+ (201, 210, 183), (187, 175, 163), (183, 165, 167), (179, 155, 172),
+ (173, 138, 183), (169, 119, 183), (156, 98, 173), (138, 76, 151),
+ (104, 48, 112), (98, 45, 106), (92, 42, 101), (77, 40, 79),
+ (56, 33, 56), (38, 33, 35), (28, 33, 24), (25, 37, 17),
+ (20, 35, 12), (18, 34, 11), (20, 37, 11), (22, 40, 12),
+ (27, 47, 11), (26, 48, 11), (27, 43, 14), (24, 38, 15),
+ (22, 43, 16), (22, 44, 22), (23, 45, 28), (26, 44, 47),
+ (35, 46, 65), (48, 48, 81), (64, 54, 95), (77, 64, 110),
+ (84, 72, 116), (88, 76, 117), (91, 80, 110), (96, 83, 104),
+ (90, 85, 90), (80, 81, 75), (67, 75, 61), (62, 67, 60),
+ (61, 56, 62), (61, 52, 64), (61, 48, 67), (64, 39, 78),
+ (70, 35, 88), (79, 38, 96), (89, 37, 106), (97, 37, 120),
+ (109, 29, 137), (115, 30, 142), (115, 26, 140), (107, 30, 135),
+ (102, 26, 133), (96, 27, 121), (83, 22, 102), (65, 24, 82),
+ (46, 25, 66), (32, 24, 51), (26, 25, 37), (26, 29, 31),
+ (29, 40, 33), (35, 45, 41), (55, 55, 56), (77, 74, 70),
+ (102, 97, 91), (118, 123, 109), (140, 139, 131), (155, 161, 143),
+ (166, 174, 151), (163, 185, 148), (159, 185, 146), (150, 181, 141),
+ (142, 173, 132), (129, 160, 119), (118, 145, 111), (106, 126, 109),
+ (98, 111, 114), (96, 96, 120), (99, 87, 127), (100, 78, 130),
+ (102, 70, 134), (105, 61, 137), (113, 62, 135), (120, 71, 126),
+ (122, 83, 118), (122, 91, 115), (120, 97, 115), (119, 105, 118),
+ (113, 105, 120), (112, 99, 128), (114, 91, 136), (117, 91, 147),
+ (115, 93, 152), (121, 93, 158), (130, 92, 157), (138, 100, 155),
+ (145, 121, 155), (161, 147, 162), (177, 164, 173), (189, 181, 180),
+ (199, 195, 188), (215, 211, 200), (227, 219, 216), (233, 228, 229),
+ (234, 229, 234), (229, 228, 230), (212, 217, 215), (191, 203, 192),
+ (166, 182, 162), (160, 174, 159), (159, 172, 163), (163, 167, 169)
+ ),
+
+// 663 Tribal
+((106, 84, 41), (99, 83, 51), (98, 85, 56), (98, 88, 61),
+ (97, 87, 65), (96, 87, 69), (97, 88, 69), (98, 90, 70),
+ (120, 100, 69), (125, 103, 66), (131, 106, 63), (132, 105, 57),
+ (134, 105, 52), (119, 93, 46), (105, 81, 40), (98, 75, 36),
+ (91, 70, 33), (81, 54, 22), (89, 57, 18), (98, 60, 15),
+ (113, 71, 13), (128, 83, 11), (129, 84, 11), (130, 86, 11),
+ (123, 85, 12), (122, 84, 10), (121, 84, 9), (125, 87, 10),
+ (130, 90, 12), (136, 94, 12), (143, 99, 13), (156, 108, 15),
+ (168, 117, 20), (172, 128, 34), (172, 132, 41), (172, 136, 49),
+ (170, 138, 58), (168, 141, 67), (165, 140, 71), (163, 140, 75),
+ (151, 140, 99), (146, 141, 113), (142, 143, 128), (140, 146, 144),
+ (138, 150, 161), (139, 151, 164), (141, 152, 168), (133, 148, 176),
+ (128, 146, 180), (98, 126, 183), (86, 119, 182), (75, 112, 181),
+ (69, 108, 179), (64, 105, 178), (62, 100, 174), (60, 96, 171),
+ (52, 80, 147), (42, 68, 132), (33, 57, 117), (21, 48, 109),
+ (10, 40, 101), (7, 38, 99), (4, 37, 98), (1, 34, 97),
+ (1, 34, 97), (1, 36, 100), (2, 37, 103), (3, 39, 106),
+ (3, 37, 101), (3, 36, 97), (3, 35, 92), (3, 33, 89),
+ (3, 32, 87), (7, 33, 85), (12, 34, 83), (23, 42, 84),
+ (35, 50, 85), (42, 54, 81), (49, 58, 77), (63, 65, 68),
+ (78, 72, 57), (98, 80, 28), (111, 87, 23), (124, 95, 18),
+ (130, 99, 19), (137, 104, 20), (152, 116, 22), (167, 129, 28),
+ (201, 162, 41), (210, 174, 50), (219, 186, 60), (221, 190, 65),
+ (224, 195, 70), (227, 200, 77), (221, 195, 80), (204, 186, 87),
+ (189, 176, 92), (159, 152, 91), (144, 141, 91), (129, 131, 92),
+ (126, 128, 91), (123, 125, 91), (116, 115, 85), (99, 101, 80),
+ (63, 70, 66), (45, 52, 54), (27, 34, 42), (18, 26, 38),
+ (9, 18, 34), (1, 9, 26), (1, 5, 17), (1, 2, 11),
+ (1, 1, 7), (1, 1, 5), (1, 1, 5), (1, 1, 5),
+ (1, 1, 5), (1, 1, 5), (2, 1, 5), (2, 1, 5),
+ (11, 5, 5), (21, 11, 4), (31, 18, 4), (36, 22, 4),
+ (42, 26, 4), (53, 33, 4), (64, 40, 4), (73, 45, 4),
+ (66, 41, 4), (63, 38, 4), (63, 38, 3), (63, 38, 3),
+ (63, 38, 3), (63, 38, 2), (65, 39, 2), (73, 45, 2),
+ (55, 35, 2), (44, 27, 2), (33, 20, 3), (27, 16, 2),
+ (22, 13, 2), (11, 6, 2), (3, 0, 3), (3, 0, 3),
+ (3, 0, 3), (3, 0, 4), (3, 0, 4), (4, 0, 5),
+ (3, 0, 5), (3, 0, 5), (3, 0, 6), (3, 0, 6),
+ (3, 0, 5), (3, 0, 5), (3, 0, 5), (3, 0, 5),
+ (3, 0, 6), (3, 1, 7), (9, 6, 7), (18, 13, 8),
+ (29, 20, 8), (51, 35, 11), (54, 38, 12), (58, 41, 14),
+ (67, 48, 16), (70, 50, 19), (77, 57, 22), (87, 64, 27),
+ (111, 82, 31), (118, 86, 31), (126, 91, 31), (139, 100, 32),
+ (153, 110, 35), (162, 118, 37), (170, 127, 39), (176, 134, 44),
+ (179, 138, 45), (182, 144, 47), (187, 148, 50), (191, 150, 50),
+ (194, 152, 51), (197, 154, 50), (201, 158, 49), (204, 163, 50),
+ (204, 164, 53), (202, 163, 54), (200, 162, 56), (188, 153, 57),
+ (171, 142, 60), (153, 129, 62), (137, 117, 63), (122, 107, 65),
+ (110, 99, 67), (98, 90, 67), (89, 83, 66), (78, 73, 63),
+ (63, 62, 60), (49, 50, 58), (36, 40, 54), (24, 29, 50),
+ (14, 22, 46), (6, 16, 43), (2, 13, 40), (10, 15, 36),
+ (20, 19, 31), (28, 20, 25), (28, 18, 20), (28, 17, 15),
+ (29, 17, 11), (38, 22, 8), (42, 26, 7), (55, 34, 6),
+ (72, 48, 7), (95, 65, 7), (112, 81, 9), (127, 92, 8),
+ (134, 100, 12), (144, 110, 13), (147, 115, 14), (149, 116, 13),
+ (152, 118, 14), (160, 122, 13), (170, 129, 13), (170, 129, 11),
+ (162, 123, 12), (151, 116, 13), (138, 108, 12), (124, 97, 12),
+ (109, 86, 12), (93, 72, 11), (86, 65, 12), (71, 54, 15),
+ (64, 48, 17), (60, 44, 17), (60, 43, 17), (60, 43, 17),
+ (64, 46, 17), (70, 51, 15), (83, 62, 14), (91, 68, 16),
+ (101, 77, 18), (111, 84, 18), (122, 92, 18), (132, 98, 18),
+ (140, 102, 17), (143, 101, 13), (143, 100, 9), (138, 94, 6),
+ (129, 89, 6), (118, 82, 7), (109, 77, 10), (104, 76, 14),
+ (106, 78, 18), (105, 77, 23), (105, 78, 28), (105, 82, 34)
+ ),
+
+// 664 Trippy
+((0, 86, 253), (0, 120, 253), (0, 129, 253), (0, 138, 253),
+ (0, 144, 251), (0, 151, 249), (0, 155, 242), (0, 160, 235),
+ (3, 174, 171), (22, 175, 146), (41, 177, 122), (71, 174, 112),
+ (101, 172, 102), (115, 157, 74), (129, 143, 47), (128, 133, 33),
+ (127, 124, 19), (126, 115, 57), (118, 99, 77), (110, 83, 97),
+ (82, 75, 84), (54, 67, 71), (39, 66, 72), (25, 66, 73),
+ (4, 53, 110), (14, 45, 125), (24, 38, 141), (26, 31, 140),
+ (28, 25, 140), (25, 21, 137), (22, 18, 134), (25, 11, 130),
+ (26, 7, 127), (29, 2, 114), (19, 2, 90), (9, 2, 67),
+ (6, 4, 44), (3, 6, 22), (6, 5, 15), (10, 5, 9),
+ (17, 4, 12), (13, 6, 23), (10, 9, 34), (11, 13, 37),
+ (13, 18, 40), (15, 18, 41), (17, 18, 42), (14, 27, 71),
+ (7, 34, 104), (0, 46, 142), (0, 42, 134), (0, 39, 127),
+ (0, 44, 144), (0, 50, 161), (0, 52, 169), (0, 55, 177),
+ (0, 65, 126), (0, 72, 104), (0, 80, 82), (3, 82, 73),
+ (7, 84, 65), (13, 90, 57), (19, 97, 49), (33, 114, 30),
+ (55, 125, 13), (95, 96, 8), (116, 87, 26), (137, 78, 44),
+ (139, 77, 49), (142, 76, 55), (147, 70, 54), (134, 52, 45),
+ (124, 27, 52), (101, 19, 53), (79, 11, 54), (54, 6, 36),
+ (29, 1, 18), (24, 1, 12), (20, 1, 7), (12, 1, 0),
+ (7, 0, 0), (1, 1, 0), (0, 1, 0), (0, 1, 0),
+ (0, 1, 0), (0, 1, 1), (0, 1, 3), (0, 1, 11),
+ (0, 8, 42), (0, 19, 66), (0, 30, 90), (0, 37, 100),
+ (0, 44, 111), (0, 54, 133), (0, 64, 139), (1, 71, 130),
+ (4, 85, 125), (22, 115, 108), (28, 123, 87), (34, 131, 66),
+ (32, 134, 52), (30, 137, 39), (27, 142, 27), (29, 142, 40),
+ (33, 142, 103), (24, 141, 117), (15, 141, 132), (11, 133, 135),
+ (7, 126, 138), (0, 107, 144), (0, 86, 147), (0, 70, 139),
+ (0, 61, 126), (0, 34, 75), (0, 27, 61), (0, 20, 48),
+ (0, 8, 33), (5, 3, 34), (11, 2, 48), (16, 3, 66),
+ (12, 4, 110), (12, 4, 135), (12, 5, 161), (15, 5, 173),
+ (19, 6, 185), (27, 8, 206), (32, 9, 224), (37, 8, 222),
+ (33, 7, 212), (25, 5, 162), (23, 5, 153), (22, 5, 144),
+ (32, 5, 122), (31, 4, 97), (24, 2, 68), (15, 1, 38),
+ (0, 1, 6), (0, 2, 3), (0, 3, 1), (0, 3, 1),
+ (0, 3, 1), (0, 5, 5), (0, 8, 11), (0, 11, 27),
+ (0, 17, 46), (0, 35, 97), (0, 43, 107), (0, 51, 118),
+ (0, 69, 145), (0, 90, 170), (0, 103, 191), (0, 120, 217),
+ (0, 162, 241), (0, 172, 242), (0, 183, 243), (0, 194, 237),
+ (0, 187, 229), (0, 181, 216), (4, 177, 186), (11, 177, 156),
+ (22, 182, 128), (28, 148, 90), (27, 134, 76), (27, 120, 62),
+ (23, 97, 37), (25, 87, 16), (33, 76, 1), (28, 66, 1),
+ (12, 32, 1), (7, 25, 1), (3, 19, 2), (4, 16, 2),
+ (11, 24, 2), (23, 37, 1), (40, 52, 1), (58, 67, 1),
+ (73, 81, 1), (90, 97, 1), (97, 115, 0), (102, 133, 0),
+ (107, 152, 0), (111, 164, 0), (120, 174, 0), (121, 187, 8),
+ (90, 203, 43), (79, 202, 57), (69, 202, 71), (55, 187, 85),
+ (47, 172, 96), (52, 160, 93), (41, 143, 96), (29, 126, 103),
+ (14, 100, 104), (0, 69, 98), (0, 47, 78), (0, 28, 57),
+ (0, 16, 40), (0, 10, 35), (0, 5, 38), (0, 2, 45),
+ (0, 2, 53), (0, 2, 59), (0, 6, 58), (4, 10, 55),
+ (12, 17, 55), (23, 24, 54), (35, 23, 50), (47, 23, 43),
+ (60, 20, 27), (77, 27, 14), (98, 31, 5), (116, 31, 0),
+ (129, 27, 0), (134, 13, 2), (134, 11, 3), (133, 10, 3),
+ (130, 10, 3), (124, 10, 2), (117, 3, 2), (100, 4, 3),
+ (80, 6, 3), (61, 6, 3), (46, 6, 2), (42, 4, 1),
+ (42, 4, 7), (42, 6, 15), (45, 6, 25), (50, 5, 31),
+ (65, 3, 26), (88, 3, 23), (110, 9, 22), (131, 21, 25),
+ (145, 39, 31), (163, 56, 25), (181, 81, 18), (197, 105, 8),
+ (210, 129, 2), (199, 144, 2), (185, 140, 1), (169, 132, 9),
+ (152, 121, 19), (137, 121, 32), (116, 115, 45), (89, 102, 61),
+ (65, 77, 89), (44, 48, 118), (26, 32, 148), (16, 21, 170),
+ (6, 23, 186), (0, 26, 208), (0, 34, 228), (0, 41, 245),
+ (0, 48, 253), (0, 56, 253), (0, 60, 253), (0, 71, 254)
+ ),
+
+// 665 Tropic
+((111, 42, 86), (103, 43, 110), (97, 43, 117), (91, 43, 125),
+ (85, 42, 130), (79, 42, 135), (76, 41, 135), (74, 41, 135),
+ (71, 38, 133), (71, 37, 131), (71, 36, 129), (71, 33, 128),
+ (72, 31, 127), (70, 28, 125), (69, 26, 123), (67, 25, 122),
+ (66, 24, 121), (65, 23, 110), (67, 26, 100), (69, 29, 90),
+ (75, 33, 79), (82, 38, 68), (86, 41, 63), (91, 45, 59),
+ (114, 65, 49), (126, 76, 40), (139, 88, 31), (152, 100, 21),
+ (166, 112, 12), (172, 118, 8), (179, 124, 4), (191, 137, 1),
+ (202, 145, 0), (222, 163, 0), (229, 170, 0), (236, 177, 0),
+ (241, 181, 0), (247, 185, 0), (248, 188, 0), (250, 192, 0),
+ (254, 199, 0), (254, 201, 0), (255, 204, 0), (255, 204, 0),
+ (255, 204, 0), (255, 204, 0), (255, 204, 0), (255, 204, 0),
+ (255, 204, 0), (255, 200, 0), (255, 193, 0), (255, 187, 0),
+ (255, 183, 0), (255, 179, 0), (255, 174, 0), (255, 170, 0),
+ (255, 168, 5), (255, 163, 8), (255, 158, 11), (255, 153, 14),
+ (255, 148, 17), (255, 146, 18), (255, 145, 19), (255, 139, 22),
+ (255, 136, 25), (255, 133, 33), (255, 134, 38), (255, 135, 43),
+ (255, 136, 44), (255, 137, 46), (255, 139, 50), (255, 139, 51),
+ (251, 143, 54), (247, 144, 54), (243, 145, 54), (238, 145, 54),
+ (234, 145, 55), (231, 143, 56), (229, 141, 58), (224, 137, 66),
+ (215, 132, 77), (192, 114, 100), (177, 99, 109), (162, 84, 118),
+ (155, 77, 121), (148, 70, 125), (139, 58, 135), (135, 47, 150),
+ (120, 29, 173), (111, 23, 184), (103, 17, 195), (99, 14, 197),
+ (96, 12, 200), (91, 7, 201), (93, 4, 201), (91, 2, 199),
+ (95, 2, 195), (109, 6, 183), (117, 9, 172), (125, 13, 162),
+ (129, 16, 155), (134, 19, 149), (137, 27, 132), (144, 35, 117),
+ (161, 55, 96), (170, 65, 84), (180, 75, 72), (185, 81, 66),
+ (191, 88, 60), (201, 100, 46), (210, 109, 32), (217, 119, 22),
+ (222, 129, 16), (231, 146, 9), (232, 148, 7), (234, 150, 6),
+ (236, 151, 4), (239, 152, 2), (240, 156, 0), (240, 156, 0),
+ (237, 162, 0), (233, 163, 0), (230, 165, 0), (228, 164, 0),
+ (227, 163, 0), (222, 159, 0), (216, 155, 1), (210, 151, 2),
+ (203, 146, 3), (189, 140, 4), (186, 138, 4), (184, 136, 5),
+ (179, 130, 5), (174, 126, 6), (170, 118, 6), (166, 110, 7),
+ (158, 96, 9), (154, 86, 9), (151, 77, 9), (150, 73, 9),
+ (149, 70, 10), (148, 64, 12), (146, 56, 15), (143, 47, 21),
+ (140, 41, 28), (131, 20, 38), (128, 17, 43), (125, 14, 49),
+ (119, 9, 60), (113, 4, 73), (106, 1, 87), (106, 0, 108),
+ (94, 0, 138), (92, 0, 145), (91, 0, 152), (88, 0, 166),
+ (86, 0, 179), (85, 0, 190), (86, 0, 199), (87, 1, 208),
+ (94, 3, 214), (109, 10, 223), (116, 12, 224), (123, 15, 225),
+ (136, 20, 224), (148, 25, 219), (161, 30, 212), (168, 36, 201),
+ (174, 49, 164), (179, 53, 157), (184, 58, 150), (192, 65, 137),
+ (200, 72, 123), (206, 79, 111), (209, 83, 98), (210, 92, 88),
+ (208, 98, 81), (201, 99, 81), (193, 98, 83), (183, 94, 88),
+ (173, 85, 91), (164, 81, 100), (156, 80, 110), (153, 76, 111),
+ (150, 71, 116), (150, 70, 116), (150, 69, 116), (149, 67, 116),
+ (149, 65, 115), (148, 67, 114), (151, 69, 107), (159, 74, 101),
+ (168, 77, 89), (179, 82, 79), (190, 91, 71), (199, 93, 58),
+ (207, 99, 45), (211, 105, 35), (215, 114, 31), (216, 118, 27),
+ (217, 120, 24), (218, 123, 22), (219, 126, 19), (220, 124, 15),
+ (221, 123, 11), (223, 123, 8), (225, 126, 4), (226, 125, 2),
+ (226, 125, 2), (226, 122, 4), (225, 116, 7), (225, 107, 11),
+ (224, 99, 16), (224, 93, 22), (224, 87, 29), (225, 77, 36),
+ (227, 70, 43), (230, 63, 48), (233, 49, 46), (234, 42, 48),
+ (235, 39, 55), (235, 37, 63), (236, 37, 67), (236, 38, 74),
+ (239, 39, 75), (242, 40, 80), (246, 40, 78), (250, 43, 70),
+ (253, 47, 67), (254, 53, 59), (255, 66, 60), (255, 78, 59),
+ (255, 87, 54), (255, 96, 48), (255, 104, 40), (255, 111, 33),
+ (255, 113, 25), (255, 116, 17), (255, 113, 12), (254, 115, 9),
+ (251, 114, 9), (248, 113, 9), (244, 111, 9), (240, 106, 11),
+ (235, 101, 12), (230, 96, 13), (225, 85, 15), (219, 75, 19),
+ (211, 67, 24), (202, 60, 32), (190, 57, 42), (174, 44, 44),
+ (158, 43, 52), (143, 42, 62), (130, 41, 70), (119, 41, 79)
+ ),
+
+// 666 True_Blue
+((0, 19, 94), (0, 18, 93), (0, 17, 92), (0, 16, 92),
+ (0, 19, 93), (1, 22, 94), (2, 24, 95), (3, 26, 97),
+ (5, 28, 95), (8, 28, 86), (11, 29, 77), (13, 28, 71),
+ (16, 27, 65), (14, 23, 61), (12, 20, 58), (11, 18, 57),
+ (11, 16, 56), (12, 14, 53), (8, 12, 60), (4, 11, 68),
+ (2, 12, 76), (1, 14, 85), (1, 16, 88), (2, 18, 91),
+ (5, 26, 104), (6, 29, 113), (8, 33, 122), (8, 35, 126),
+ (8, 38, 130), (8, 38, 131), (8, 39, 133), (8, 37, 131),
+ (8, 33, 132), (6, 27, 129), (4, 27, 125), (2, 27, 121),
+ (2, 27, 120), (2, 27, 120), (4, 28, 121), (7, 30, 122),
+ (19, 48, 137), (19, 52, 138), (19, 56, 140), (19, 54, 138),
+ (19, 53, 137), (20, 52, 135), (21, 52, 134), (21, 49, 124),
+ (18, 42, 110), (5, 23, 79), (2, 16, 70), (0, 10, 62),
+ (0, 6, 58), (0, 3, 54), (0, 2, 53), (0, 1, 52),
+ (0, 0, 55), (0, 0, 59), (0, 1, 63), (0, 1, 67),
+ (0, 2, 72), (0, 2, 73), (0, 3, 74), (0, 4, 75),
+ (0, 4, 76), (1, 6, 82), (3, 9, 89), (6, 12, 97),
+ (7, 14, 104), (8, 17, 111), (12, 25, 122), (16, 36, 133),
+ (20, 56, 147), (19, 64, 158), (19, 72, 170), (19, 82, 176),
+ (19, 93, 183), (20, 100, 184), (21, 107, 186), (21, 110, 194),
+ (20, 107, 201), (16, 86, 203), (14, 82, 202), (12, 79, 201),
+ (12, 77, 201), (12, 75, 202), (17, 70, 199), (16, 58, 195),
+ (14, 41, 176), (10, 38, 167), (6, 35, 158), (6, 33, 154),
+ (7, 31, 150), (8, 30, 141), (10, 26, 134), (9, 19, 127),
+ (5, 14, 120), (2, 10, 110), (3, 12, 106), (4, 14, 102),
+ (4, 14, 100), (5, 14, 98), (4, 17, 95), (4, 19, 93),
+ (7, 22, 83), (9, 22, 74), (12, 22, 66), (12, 22, 63),
+ (12, 22, 61), (10, 22, 59), (8, 20, 57), (7, 17, 56),
+ (8, 16, 53), (9, 14, 56), (8, 13, 57), (7, 12, 58),
+ (3, 10, 62), (1, 10, 64), (2, 11, 66), (4, 15, 69),
+ (19, 34, 87), (25, 42, 98), (31, 50, 109), (30, 51, 109),
+ (30, 53, 109), (33, 54, 104), (36, 55, 105), (40, 57, 105),
+ (41, 56, 105), (28, 42, 81), (24, 35, 73), (21, 28, 65),
+ (16, 19, 52), (13, 12, 45), (10, 9, 41), (7, 7, 40),
+ (2, 2, 44), (1, 2, 45), (0, 2, 47), (0, 2, 46),
+ (0, 2, 45), (0, 2, 43), (0, 1, 40), (0, 1, 36),
+ (0, 2, 32), (0, 3, 25), (0, 2, 24), (0, 2, 24),
+ (0, 0, 25), (0, 1, 31), (0, 2, 38), (0, 3, 47),
+ (0, 4, 64), (0, 4, 68), (1, 4, 73), (1, 4, 79),
+ (1, 4, 83), (2, 4, 85), (1, 4, 86), (1, 4, 86),
+ (0, 6, 86), (1, 13, 89), (2, 16, 92), (3, 20, 96),
+ (6, 30, 106), (13, 44, 118), (24, 60, 134), (36, 79, 151),
+ (77, 124, 189), (87, 135, 196), (98, 147, 204), (112, 158, 215),
+ (118, 166, 224), (106, 170, 230), (107, 178, 237), (113, 193, 243),
+ (118, 195, 245), (120, 193, 245), (100, 181, 241), (77, 168, 235),
+ (62, 165, 232), (58, 161, 228), (58, 155, 227), (58, 141, 224),
+ (42, 106, 198), (37, 98, 186), (32, 91, 175), (23, 75, 154),
+ (18, 57, 135), (11, 43, 116), (7, 30, 99), (5, 23, 81),
+ (2, 19, 68), (1, 16, 61), (0, 19, 61), (0, 23, 64),
+ (2, 29, 71), (6, 34, 82), (7, 39, 96), (8, 43, 110),
+ (7, 47, 121), (6, 48, 128), (7, 48, 136), (8, 42, 139),
+ (8, 39, 139), (7, 36, 138), (4, 32, 133), (2, 30, 131),
+ (1, 25, 130), (2, 23, 127), (5, 24, 122), (12, 30, 117),
+ (21, 39, 117), (27, 51, 123), (32, 60, 132), (32, 62, 136),
+ (32, 62, 134), (35, 60, 129), (35, 59, 127), (33, 61, 130),
+ (28, 57, 135), (20, 48, 138), (14, 37, 136), (8, 27, 138),
+ (5, 20, 142), (2, 19, 144), (1, 19, 147), (1, 20, 146),
+ (0, 21, 145), (1, 19, 147), (2, 19, 143), (2, 19, 137),
+ (1, 19, 124), (1, 18, 106), (0, 14, 90), (1, 9, 74),
+ (2, 6, 62), (2, 4, 50), (4, 4, 41), (5, 4, 34),
+ (5, 4, 30), (6, 4, 32), (5, 5, 36), (5, 6, 42),
+ (6, 8, 48), (5, 9, 56), (6, 9, 68), (5, 10, 81),
+ (3, 11, 91), (3, 14, 97), (1, 18, 100), (0, 21, 103),
+ (2, 19, 104), (2, 17, 103), (2, 16, 100), (1, 16, 96)
+ ),
+
+// 667 Tryst
+((165, 198, 195), (171, 198, 186), (185, 202, 186), (200, 207, 187),
+ (209, 204, 183), (219, 202, 179), (219, 197, 173), (219, 192, 167),
+ (197, 157, 133), (181, 140, 116), (166, 124, 99), (158, 113, 89),
+ (150, 103, 80), (150, 98, 78), (150, 94, 76), (151, 93, 76),
+ (153, 93, 76), (155, 97, 77), (157, 105, 82), (160, 113, 88),
+ (164, 121, 95), (169, 130, 103), (174, 133, 106), (179, 137, 110),
+ (190, 142, 115), (190, 135, 110), (191, 129, 105), (179, 119, 95),
+ (168, 109, 86), (160, 102, 81), (152, 96, 76), (137, 84, 66),
+ (126, 76, 60), (113, 55, 45), (114, 48, 40), (115, 41, 36),
+ (115, 35, 30), (115, 30, 25), (116, 32, 24), (117, 35, 24),
+ (119, 48, 27), (125, 52, 28), (131, 57, 30), (136, 51, 28),
+ (141, 46, 26), (141, 44, 22), (142, 42, 19), (141, 41, 17),
+ (139, 44, 14), (144, 59, 10), (142, 60, 15), (141, 61, 21),
+ (139, 62, 30), (137, 64, 40), (135, 68, 45), (134, 72, 50),
+ (131, 90, 67), (133, 95, 67), (136, 101, 68), (129, 97, 71),
+ (122, 93, 74), (118, 92, 75), (115, 91, 77), (104, 85, 85),
+ (93, 83, 93), (93, 85, 86), (89, 79, 81), (86, 74, 76),
+ (84, 70, 72), (82, 67, 69), (78, 59, 63), (72, 52, 63),
+ (60, 45, 60), (57, 48, 60), (54, 51, 61), (58, 56, 60),
+ (62, 62, 60), (65, 63, 61), (68, 65, 63), (75, 69, 67),
+ (80, 69, 68), (83, 71, 67), (85, 72, 67), (87, 73, 67),
+ (87, 71, 67), (88, 69, 67), (92, 69, 67), (98, 67, 65),
+ (115, 67, 64), (121, 72, 65), (127, 77, 67), (128, 77, 68),
+ (130, 77, 70), (133, 81, 74), (134, 81, 75), (135, 83, 76),
+ (137, 84, 75), (146, 96, 77), (153, 99, 81), (160, 103, 86),
+ (163, 104, 88), (166, 106, 90), (172, 111, 93), (178, 114, 92),
+ (186, 122, 92), (184, 124, 94), (183, 126, 96), (183, 128, 99),
+ (183, 130, 102), (188, 137, 108), (194, 146, 116), (201, 156, 122),
+ (210, 169, 133), (220, 192, 154), (220, 196, 159), (221, 200, 165),
+ (223, 206, 172), (225, 212, 179), (227, 216, 182), (230, 219, 187),
+ (228, 224, 195), (224, 221, 195), (220, 219, 195), (218, 215, 192),
+ (216, 212, 190), (212, 203, 180), (208, 193, 168), (200, 179, 157),
+ (189, 171, 149), (174, 155, 130), (173, 152, 124), (172, 150, 119),
+ (171, 145, 108), (173, 138, 94), (173, 125, 80), (166, 113, 68),
+ (140, 85, 49), (131, 78, 42), (122, 71, 36), (119, 70, 34),
+ (116, 69, 32), (114, 66, 29), (111, 66, 31), (102, 63, 37),
+ (89, 64, 45), (73, 66, 56), (72, 68, 58), (71, 70, 61),
+ (76, 76, 65), (88, 84, 72), (100, 92, 79), (109, 103, 90),
+ (126, 123, 106), (129, 126, 108), (133, 130, 111), (141, 131, 112),
+ (149, 127, 109), (156, 117, 104), (157, 108, 103), (157, 103, 103),
+ (157, 100, 102), (147, 101, 103), (144, 100, 101), (142, 99, 99),
+ (136, 93, 93), (126, 86, 89), (114, 79, 87), (104, 73, 82),
+ (82, 68, 77), (77, 68, 75), (73, 69, 73), (69, 66, 65),
+ (69, 64, 59), (71, 60, 54), (78, 60, 50), (86, 62, 44),
+ (97, 64, 42), (104, 69, 40), (113, 72, 36), (124, 77, 33),
+ (138, 82, 34), (155, 92, 37), (171, 104, 39), (189, 114, 44),
+ (211, 129, 53), (211, 127, 52), (211, 126, 51), (203, 120, 50),
+ (194, 115, 48), (181, 110, 45), (173, 104, 45), (165, 102, 49),
+ (159, 101, 51), (152, 93, 47), (146, 84, 44), (146, 75, 40),
+ (141, 69, 37), (140, 69, 35), (143, 77, 37), (152, 93, 46),
+ (161, 109, 52), (172, 125, 60), (186, 139, 65), (196, 149, 72),
+ (204, 156, 77), (211, 163, 80), (216, 172, 86), (214, 176, 90),
+ (205, 179, 92), (191, 178, 87), (176, 174, 84), (161, 164, 80),
+ (146, 153, 77), (134, 150, 72), (128, 142, 75), (123, 136, 75),
+ (119, 130, 76), (116, 127, 77), (115, 124, 76), (116, 116, 78),
+ (119, 119, 75), (129, 123, 78), (141, 129, 81), (153, 131, 87),
+ (164, 136, 90), (171, 138, 92), (174, 133, 93), (172, 124, 89),
+ (165, 117, 83), (155, 113, 76), (147, 101, 74), (142, 94, 70),
+ (135, 86, 65), (132, 81, 62), (133, 73, 57), (135, 67, 50),
+ (133, 68, 43), (134, 72, 45), (139, 77, 51), (147, 88, 55),
+ (157, 101, 63), (173, 114, 75), (189, 128, 85), (203, 140, 90),
+ (210, 153, 99), (209, 161, 114), (202, 168, 122), (188, 174, 127),
+ (176, 177, 134), (167, 179, 147), (164, 182, 154), (165, 186, 164),
+ (171, 193, 179), (175, 195, 191), (173, 197, 197), (168, 199, 195)
+ ),
+
+// 668 Tumbleweed
+((85, 75, 65), (84, 76, 61), (88, 78, 62), (93, 81, 64),
+ (111, 93, 71), (129, 106, 78), (134, 111, 82), (140, 116, 86),
+ (146, 122, 90), (147, 119, 84), (148, 117, 78), (138, 111, 77),
+ (129, 105, 76), (115, 94, 71), (101, 83, 67), (97, 80, 64),
+ (93, 77, 62), (91, 81, 69), (95, 87, 76), (100, 94, 83),
+ (105, 99, 88), (110, 105, 93), (111, 106, 94), (113, 107, 95),
+ (116, 111, 98), (111, 106, 93), (106, 102, 89), (97, 90, 79),
+ (89, 79, 69), (85, 74, 63), (82, 69, 57), (76, 63, 47),
+ (70, 60, 41), (64, 56, 35), (63, 53, 31), (63, 51, 27),
+ (61, 52, 30), (59, 53, 33), (59, 53, 36), (59, 54, 39),
+ (59, 54, 47), (57, 53, 50), (55, 52, 53), (54, 52, 54),
+ (54, 52, 56), (55, 52, 56), (56, 53, 56), (57, 55, 54),
+ (61, 58, 53), (73, 63, 51), (78, 66, 51), (84, 70, 51),
+ (87, 74, 52), (90, 78, 53), (90, 77, 53), (91, 77, 54),
+ (88, 74, 59), (81, 71, 59), (75, 68, 59), (64, 60, 54),
+ (54, 53, 50), (50, 48, 47), (46, 44, 45), (39, 36, 38),
+ (32, 29, 31), (21, 19, 20), (20, 18, 19), (19, 17, 18),
+ (20, 17, 17), (21, 18, 17), (25, 22, 18), (28, 25, 19),
+ (34, 30, 21), (35, 31, 19), (37, 32, 17), (36, 31, 15),
+ (35, 30, 14), (34, 28, 13), (33, 26, 13), (32, 23, 12),
+ (30, 21, 11), (28, 21, 17), (31, 23, 20), (34, 25, 24),
+ (36, 26, 25), (38, 28, 27), (43, 33, 30), (47, 38, 32),
+ (52, 40, 26), (49, 37, 22), (47, 34, 18), (43, 32, 17),
+ (40, 31, 17), (36, 29, 14), (31, 24, 10), (27, 22, 6),
+ (21, 17, 3), (14, 11, 8), (15, 12, 12), (16, 13, 16),
+ (17, 14, 17), (18, 16, 18), (20, 18, 18), (22, 19, 19),
+ (25, 21, 25), (27, 23, 25), (29, 26, 26), (29, 27, 26),
+ (30, 28, 27), (31, 30, 28), (32, 32, 31), (35, 34, 33),
+ (37, 36, 34), (41, 36, 32), (41, 35, 31), (41, 35, 30),
+ (40, 32, 28), (38, 31, 28), (36, 30, 29), (37, 30, 29),
+ (37, 29, 31), (35, 29, 33), (34, 30, 35), (34, 32, 37),
+ (35, 35, 40), (39, 40, 45), (43, 44, 48), (46, 45, 50),
+ (48, 45, 50), (51, 52, 54), (53, 54, 55), (56, 56, 57),
+ (61, 60, 62), (68, 64, 65), (71, 66, 70), (72, 70, 73),
+ (73, 72, 76), (73, 70, 74), (73, 68, 73), (71, 67, 71),
+ (70, 66, 69), (67, 61, 64), (61, 57, 58), (56, 51, 51),
+ (51, 46, 47), (48, 41, 41), (47, 41, 40), (47, 41, 40),
+ (47, 42, 40), (47, 43, 42), (48, 45, 45), (52, 48, 51),
+ (60, 58, 64), (62, 60, 65), (64, 63, 67), (69, 69, 70),
+ (73, 72, 70), (79, 75, 68), (87, 76, 66), (92, 75, 60),
+ (95, 74, 56), (85, 65, 40), (82, 62, 38), (79, 59, 36),
+ (75, 54, 30), (71, 49, 30), (67, 46, 30), (59, 43, 31),
+ (47, 41, 40), (47, 43, 43), (47, 45, 47), (53, 51, 53),
+ (60, 56, 60), (67, 62, 67), (74, 69, 74), (84, 77, 76),
+ (94, 85, 78), (101, 89, 75), (105, 89, 70), (103, 84, 66),
+ (98, 78, 57), (93, 72, 49), (84, 63, 40), (74, 53, 28),
+ (54, 37, 14), (53, 35, 12), (52, 33, 11), (52, 37, 17),
+ (59, 44, 26), (72, 58, 44), (88, 80, 63), (114, 103, 82),
+ (133, 125, 100), (150, 142, 112), (162, 152, 123), (162, 157, 128),
+ (169, 161, 129), (166, 160, 130), (159, 154, 124), (149, 144, 117),
+ (134, 130, 106), (125, 123, 95), (122, 118, 89), (123, 118, 92),
+ (126, 122, 101), (133, 128, 110), (139, 135, 120), (145, 141, 122),
+ (148, 145, 126), (149, 147, 128), (148, 147, 131), (147, 144, 133),
+ (142, 140, 131), (136, 132, 126), (128, 125, 115), (119, 117, 106),
+ (112, 110, 98), (107, 105, 91), (103, 98, 87), (99, 95, 81),
+ (94, 91, 75), (88, 87, 70), (82, 81, 63), (76, 74, 55),
+ (70, 66, 51), (63, 60, 48), (55, 54, 44), (48, 47, 41),
+ (42, 40, 34), (38, 32, 28), (34, 26, 24), (29, 22, 20),
+ (24, 17, 16), (20, 15, 11), (19, 12, 8), (18, 12, 5),
+ (19, 14, 7), (21, 16, 11), (24, 21, 16), (29, 27, 21),
+ (33, 34, 25), (40, 41, 32), (46, 47, 40), (52, 52, 47),
+ (59, 57, 54), (65, 62, 58), (70, 66, 61), (74, 70, 66),
+ (78, 74, 70), (83, 77, 72), (90, 82, 74), (93, 84, 75),
+ (88, 79, 70), (84, 74, 66), (77, 69, 64), (78, 69, 62)
+ ),
+
+// 669 Type_AB_Positive
+((116, 19, 18), (115, 19, 18), (105, 22, 19), (95, 26, 20),
+ (82, 25, 19), (70, 24, 18), (64, 23, 17), (58, 23, 17),
+ (40, 27, 18), (37, 27, 19), (35, 28, 20), (39, 28, 20),
+ (43, 28, 20), (52, 28, 21), (62, 28, 22), (67, 26, 22),
+ (73, 25, 23), (105, 27, 26), (116, 28, 27), (127, 29, 28),
+ (131, 33, 34), (136, 38, 40), (139, 38, 40), (143, 38, 40),
+ (155, 34, 34), (153, 34, 34), (151, 34, 35), (148, 35, 35),
+ (146, 36, 36), (148, 34, 34), (151, 33, 32), (160, 27, 25),
+ (166, 26, 23), (169, 29, 27), (171, 30, 28), (174, 32, 29),
+ (180, 32, 28), (187, 33, 28), (189, 35, 28), (191, 37, 29),
+ (195, 37, 29), (195, 37, 29), (195, 37, 29), (188, 37, 30),
+ (182, 37, 32), (175, 37, 33), (168, 38, 34), (153, 37, 34),
+ (137, 37, 34), (105, 35, 31), (89, 33, 31), (74, 32, 32),
+ (65, 30, 29), (56, 29, 27), (54, 28, 26), (53, 28, 25),
+ (49, 30, 25), (48, 29, 25), (47, 28, 25), (46, 25, 24),
+ (45, 23, 23), (44, 25, 23), (44, 27, 24), (40, 29, 25),
+ (37, 29, 23), (31, 24, 20), (30, 24, 19), (30, 24, 19),
+ (30, 25, 19), (31, 26, 20), (34, 27, 20), (39, 29, 20),
+ (53, 28, 18), (64, 25, 17), (76, 23, 17), (88, 23, 18),
+ (100, 24, 19), (102, 22, 18), (105, 20, 17), (107, 20, 13),
+ (107, 20, 13), (102, 21, 16), (92, 19, 16), (82, 18, 16),
+ (76, 17, 15), (70, 17, 15), (61, 18, 14), (56, 21, 16),
+ (55, 26, 23), (59, 26, 25), (63, 27, 28), (63, 27, 28),
+ (64, 27, 28), (65, 27, 25), (66, 29, 24), (67, 33, 26),
+ (68, 38, 29), (71, 44, 34), (73, 52, 38), (76, 61, 43),
+ (77, 63, 44), (78, 66, 45), (79, 66, 48), (76, 47, 47),
+ (73, 54, 51), (69, 55, 48), (66, 57, 45), (62, 47, 41),
+ (58, 37, 37), (53, 31, 31), (45, 27, 27), (41, 26, 25),
+ (41, 28, 25), (49, 30, 25), (50, 29, 25), (52, 29, 25),
+ (56, 31, 25), (60, 33, 25), (63, 33, 26), (64, 31, 26),
+ (60, 32, 23), (58, 31, 21), (57, 31, 19), (58, 31, 18),
+ (59, 32, 18), (60, 30, 16), (66, 29, 16), (75, 27, 18),
+ (89, 25, 17), (123, 30, 19), (131, 30, 19), (139, 30, 19),
+ (155, 32, 21), (171, 31, 22), (186, 35, 25), (197, 37, 26),
+ (204, 37, 26), (203, 37, 26), (202, 38, 26), (201, 38, 26),
+ (200, 38, 27), (195, 35, 26), (185, 34, 26), (174, 28, 23),
+ (158, 27, 21), (128, 29, 23), (119, 30, 24), (111, 31, 25),
+ (95, 26, 24), (79, 24, 21), (65, 23, 21), (53, 22, 20),
+ (42, 32, 26), (42, 32, 27), (43, 32, 29), (51, 37, 35),
+ (63, 41, 43), (83, 58, 60), (102, 57, 61), (119, 54, 59),
+ (134, 55, 54), (158, 61, 58), (162, 60, 56), (167, 59, 55),
+ (169, 47, 47), (160, 42, 38), (142, 30, 20), (128, 28, 18),
+ (99, 27, 18), (91, 25, 17), (83, 23, 16), (71, 24, 15),
+ (65, 25, 14), (63, 27, 14), (67, 28, 15), (75, 25, 17),
+ (87, 25, 19), (102, 27, 18), (115, 26, 18), (122, 26, 17),
+ (125, 24, 17), (125, 23, 18), (122, 24, 18), (118, 26, 19),
+ (95, 25, 16), (87, 25, 17), (80, 26, 18), (65, 25, 18),
+ (54, 27, 17), (45, 31, 18), (38, 29, 18), (34, 32, 20),
+ (27, 31, 19), (22, 29, 20), (25, 29, 22), (31, 31, 23),
+ (35, 30, 25), (41, 36, 28), (47, 35, 30), (53, 36, 33),
+ (59, 37, 33), (64, 38, 32), (70, 42, 31), (75, 43, 30),
+ (77, 42, 30), (77, 40, 29), (72, 34, 25), (66, 31, 22),
+ (62, 28, 20), (59, 27, 18), (57, 25, 17), (57, 25, 17),
+ (56, 23, 16), (59, 20, 15), (64, 18, 14), (69, 17, 13),
+ (77, 20, 12), (82, 21, 11), (85, 25, 11), (89, 28, 11),
+ (86, 27, 11), (82, 27, 12), (75, 24, 12), (67, 27, 13),
+ (61, 30, 15), (54, 31, 16), (47, 31, 18), (40, 28, 18),
+ (34, 25, 19), (31, 25, 19), (27, 30, 20), (23, 29, 21),
+ (24, 28, 21), (27, 27, 21), (27, 21, 27), (27, 21, 27),
+ (24, 21, 28), (24, 21, 28), (28, 21, 28), (28, 20, 22),
+ (29, 20, 24), (28, 20, 22), (28, 20, 20), (27, 20, 20),
+ (28, 25, 20), (28, 25, 20), (28, 22, 20), (30, 22, 19),
+ (33, 19, 19), (41, 22, 19), (52, 21, 19), (67, 22, 18),
+ (81, 21, 19), (94, 20, 20), (102, 25, 21), (110, 23, 21)
+ ),
+
+// 670 Underwater_Day
+((29, 150, 138), (65, 164, 138), (81, 173, 150), (98, 183, 163),
+ (115, 186, 168), (133, 190, 173), (133, 186, 175), (133, 182, 178),
+ (123, 169, 157), (104, 159, 154), (86, 149, 151), (69, 142, 154),
+ (53, 136, 157), (58, 135, 169), (64, 134, 181), (66, 130, 186),
+ (69, 127, 192), (60, 144, 186), (46, 138, 182), (32, 132, 179),
+ (18, 120, 174), (5, 109, 170), (12, 103, 166), (19, 98, 162),
+ (58, 72, 150), (82, 71, 148), (107, 70, 146), (114, 74, 147),
+ (121, 79, 148), (115, 84, 147), (110, 89, 147), (94, 98, 145),
+ (73, 108, 147), (34, 120, 138), (33, 126, 140), (33, 133, 143),
+ (37, 131, 140), (41, 129, 137), (45, 127, 133), (49, 126, 129),
+ (39, 101, 118), (40, 93, 108), (42, 86, 98), (42, 85, 98),
+ (43, 84, 98), (42, 88, 98), (41, 93, 98), (39, 97, 97),
+ (36, 104, 104), (43, 113, 115), (57, 105, 113), (72, 98, 112),
+ (95, 96, 111), (119, 95, 111), (128, 96, 108), (138, 98, 105),
+ (144, 97, 132), (137, 109, 148), (130, 121, 165), (116, 121, 168),
+ (102, 121, 172), (92, 121, 168), (83, 122, 165), (66, 116, 148),
+ (57, 109, 115), (48, 84, 71), (48, 66, 48), (49, 48, 26),
+ (48, 42, 22), (47, 36, 18), (33, 35, 11), (25, 41, 7),
+ (12, 47, 41), (10, 60, 58), (8, 73, 76), (22, 76, 103),
+ (36, 79, 131), (46, 83, 133), (56, 88, 136), (77, 85, 139),
+ (90, 81, 138), (87, 58, 118), (73, 45, 102), (60, 32, 86),
+ (49, 26, 76), (39, 20, 67), (32, 18, 49), (29, 12, 33),
+ (39, 16, 16), (60, 27, 42), (81, 38, 68), (97, 46, 79),
+ (114, 54, 90), (140, 86, 117), (159, 97, 151), (181, 95, 165),
+ (177, 109, 163), (160, 104, 152), (131, 110, 143), (102, 116, 135),
+ (96, 121, 136), (91, 127, 138), (79, 143, 156), (74, 159, 155),
+ (92, 165, 176), (105, 158, 176), (118, 151, 177), (117, 144, 177),
+ (116, 138, 177), (118, 129, 168), (116, 118, 150), (106, 100, 140),
+ (93, 83, 112), (57, 53, 75), (52, 47, 70), (47, 41, 66),
+ (39, 44, 67), (31, 55, 83), (35, 54, 90), (43, 54, 102),
+ (51, 86, 143), (61, 86, 146), (71, 87, 150), (71, 95, 150),
+ (71, 103, 151), (82, 119, 148), (91, 123, 142), (87, 119, 131),
+ (83, 120, 132), (110, 103, 141), (112, 101, 145), (115, 100, 150),
+ (140, 119, 158), (160, 122, 164), (154, 119, 165), (153, 137, 168),
+ (126, 144, 148), (111, 139, 147), (97, 135, 147), (90, 134, 143),
+ (83, 134, 140), (75, 135, 142), (62, 140, 149), (53, 134, 152),
+ (56, 124, 152), (86, 128, 168), (100, 126, 171), (115, 125, 175),
+ (139, 131, 185), (165, 144, 191), (176, 150, 194), (172, 162, 198),
+ (149, 153, 184), (139, 150, 182), (130, 147, 180), (117, 147, 176),
+ (119, 137, 172), (118, 125, 174), (119, 117, 169), (134, 112, 154),
+ (143, 111, 147), (137, 106, 135), (136, 110, 131), (135, 115, 127),
+ (123, 117, 127), (111, 114, 127), (110, 120, 124), (115, 122, 112),
+ (109, 121, 110), (109, 122, 107), (109, 124, 105), (97, 126, 113),
+ (74, 127, 118), (55, 116, 115), (40, 102, 117), (28, 87, 108),
+ (12, 61, 83), (10, 39, 67), (12, 24, 51), (5, 11, 31),
+ (3, 9, 21), (4, 11, 13), (7, 11, 8), (9, 13, 9),
+ (12, 8, 4), (15, 8, 4), (19, 9, 5), (18, 9, 2),
+ (20, 8, 4), (23, 9, 8), (21, 14, 9), (21, 20, 22),
+ (29, 26, 40), (39, 32, 53), (50, 45, 72), (64, 59, 98),
+ (85, 63, 126), (97, 78, 151), (101, 101, 165), (110, 109, 180),
+ (114, 120, 207), (124, 162, 218), (143, 183, 210), (159, 175, 217),
+ (178, 191, 233), (193, 196, 229), (200, 190, 212), (202, 177, 202),
+ (189, 155, 183), (173, 163, 146), (159, 164, 112), (141, 134, 90),
+ (125, 137, 81), (97, 150, 81), (78, 141, 84), (62, 140, 100),
+ (33, 139, 111), (20, 137, 105), (11, 123, 93), (5, 101, 78),
+ (12, 86, 71), (29, 75, 67), (50, 77, 66), (67, 83, 74),
+ (89, 86, 77), (113, 96, 83), (110, 101, 90), (100, 94, 73),
+ (94, 88, 48), (68, 81, 52), (49, 74, 50), (39, 68, 32),
+ (28, 64, 44), (36, 62, 65), (52, 55, 61), (65, 46, 58),
+ (87, 38, 64), (111, 33, 57), (115, 27, 38), (124, 21, 39),
+ (133, 34, 56), (126, 53, 72), (125, 65, 105), (134, 93, 146),
+ (147, 119, 177), (144, 137, 205), (129, 155, 231), (134, 159, 229),
+ (130, 157, 213), (97, 152, 205), (70, 148, 184), (59, 150, 165),
+ (43, 141, 155), (26, 133, 146), (14, 136, 142), (16, 143, 139)
+ ),
+
+// 671 Venice
+((79, 14, 7), (81, 38, 30), (94, 53, 45), (107, 69, 61),
+ (129, 91, 72), (152, 114, 84), (161, 122, 92), (170, 131, 100),
+ (199, 156, 129), (191, 161, 137), (184, 166, 145), (160, 173, 152),
+ (137, 181, 160), (119, 180, 165), (101, 179, 171), (95, 173, 170),
+ (90, 168, 169), (73, 158, 167), (75, 161, 170), (78, 164, 173),
+ (83, 157, 167), (89, 150, 161), (92, 145, 156), (95, 140, 151),
+ (100, 130, 139), (94, 120, 129), (88, 110, 119), (84, 96, 106),
+ (81, 82, 93), (82, 75, 86), (84, 68, 80), (80, 66, 75),
+ (78, 63, 69), (69, 70, 79), (80, 68, 75), (91, 67, 72),
+ (96, 74, 79), (102, 81, 86), (96, 92, 98), (90, 103, 111),
+ (120, 119, 108), (140, 120, 98), (161, 121, 88), (166, 125, 91),
+ (172, 130, 94), (175, 132, 90), (178, 134, 87), (181, 138, 89),
+ (177, 143, 91), (156, 141, 106), (158, 141, 104), (161, 142, 103),
+ (164, 145, 107), (167, 148, 111), (167, 151, 116), (167, 154, 122),
+ (190, 170, 126), (199, 170, 115), (208, 171, 105), (207, 168, 99),
+ (206, 165, 93), (203, 158, 90), (201, 151, 88), (191, 129, 77),
+ (179, 107, 64), (141, 73, 35), (117, 53, 25), (94, 34, 16),
+ (85, 27, 13), (76, 21, 11), (62, 8, 10), (50, 11, 14),
+ (21, 18, 21), (19, 21, 21), (18, 24, 22), (28, 33, 26),
+ (39, 43, 31), (43, 43, 33), (47, 43, 35), (58, 41, 30),
+ (71, 32, 26), (94, 34, 25), (95, 35, 40), (96, 36, 55),
+ (98, 36, 60), (101, 37, 66), (113, 43, 72), (124, 56, 63),
+ (121, 70, 79), (117, 71, 95), (113, 72, 112), (115, 73, 111),
+ (118, 75, 111), (123, 80, 96), (121, 74, 84), (109, 60, 80),
+ (100, 44, 74), (101, 25, 62), (103, 20, 49), (106, 15, 36),
+ (104, 13, 30), (102, 11, 24), (95, 8, 15), (85, 14, 18),
+ (72, 33, 35), (64, 43, 48), (57, 54, 61), (52, 58, 68),
+ (48, 62, 76), (40, 69, 89), (37, 82, 102), (38, 96, 116),
+ (40, 107, 123), (49, 105, 125), (50, 101, 119), (52, 97, 114),
+ (55, 85, 102), (52, 75, 91), (49, 69, 76), (45, 60, 66),
+ (49, 39, 38), (50, 36, 39), (52, 33, 40), (50, 37, 45),
+ (48, 41, 51), (44, 52, 59), (46, 61, 66), (46, 70, 79),
+ (47, 81, 91), (29, 97, 109), (26, 97, 108), (24, 98, 108),
+ (25, 100, 110), (30, 96, 110), (38, 93, 116), (45, 89, 123),
+ (57, 88, 138), (68, 94, 149), (80, 100, 160), (86, 104, 165),
+ (92, 109, 170), (97, 113, 176), (99, 117, 178), (102, 130, 182),
+ (102, 132, 183), (91, 142, 171), (83, 145, 168), (75, 148, 166),
+ (62, 158, 169), (52, 168, 180), (43, 176, 187), (37, 177, 187),
+ (21, 174, 181), (18, 174, 181), (16, 174, 182), (14, 173, 182),
+ (19, 169, 180), (20, 164, 173), (25, 151, 161), (31, 140, 151),
+ (36, 130, 141), (41, 124, 135), (41, 124, 134), (41, 124, 134),
+ (41, 124, 134), (36, 125, 133), (31, 128, 135), (26, 132, 138),
+ (20, 141, 149), (18, 141, 149), (16, 142, 150), (16, 141, 148),
+ (16, 141, 147), (17, 142, 147), (21, 143, 150), (22, 143, 150),
+ (26, 137, 145), (29, 131, 138), (29, 125, 129), (27, 121, 123),
+ (24, 117, 119), (19, 111, 114), (17, 108, 110), (12, 103, 108),
+ (7, 105, 108), (8, 104, 108), (9, 104, 108), (14, 106, 110),
+ (20, 107, 115), (24, 112, 120), (30, 118, 126), (36, 123, 132),
+ (41, 127, 136), (46, 130, 139), (48, 131, 140), (49, 131, 141),
+ (50, 130, 140), (50, 129, 137), (55, 122, 132), (60, 112, 129),
+ (66, 101, 127), (71, 94, 121), (74, 92, 110), (78, 88, 97),
+ (79, 86, 94), (80, 82, 94), (80, 80, 100), (75, 85, 99),
+ (71, 89, 95), (64, 98, 96), (57, 104, 100), (52, 109, 111),
+ (46, 115, 119), (44, 117, 123), (43, 121, 127), (42, 123, 130),
+ (43, 125, 132), (44, 126, 134), (44, 127, 136), (45, 127, 136),
+ (45, 127, 137), (45, 127, 137), (45, 127, 138), (46, 127, 139),
+ (47, 129, 139), (50, 129, 140), (53, 128, 140), (59, 125, 144),
+ (65, 122, 150), (71, 122, 159), (79, 121, 166), (82, 120, 167),
+ (86, 117, 168), (88, 115, 167), (93, 114, 168), (107, 118, 171),
+ (122, 124, 166), (136, 129, 163), (150, 140, 154), (157, 148, 145),
+ (170, 154, 139), (183, 160, 126), (193, 159, 116), (200, 159, 105),
+ (197, 143, 89), (195, 126, 78), (187, 107, 64), (178, 85, 50),
+ (168, 75, 40), (153, 53, 25), (142, 33, 14), (126, 17, 10),
+ (111, 2, 5), (98, 2, 5), (88, 2, 5), (81, 3, 3)
+ ),
+
+// 672 Victoria
+((103, 95, 129), (114, 85, 111), (123, 80, 103), (132, 75, 96),
+ (140, 73, 89), (148, 71, 83), (151, 72, 80), (154, 74, 77),
+ (174, 79, 64), (180, 75, 59), (187, 72, 54), (189, 71, 53),
+ (191, 70, 53), (187, 73, 55), (183, 76, 57), (178, 77, 57),
+ (174, 78, 58), (152, 66, 61), (140, 60, 60), (129, 55, 60),
+ (117, 52, 60), (106, 50, 60), (100, 49, 60), (94, 48, 60),
+ (72, 43, 60), (66, 42, 59), (60, 42, 58), (63, 42, 55),
+ (67, 42, 53), (71, 42, 53), (76, 43, 53), (87, 41, 54),
+ (100, 41, 53), (113, 41, 53), (114, 41, 53), (116, 42, 53),
+ (119, 41, 56), (122, 40, 59), (123, 40, 62), (124, 40, 65),
+ (118, 44, 75), (108, 49, 80), (99, 55, 86), (91, 59, 92),
+ (84, 64, 99), (82, 64, 101), (81, 65, 104), (78, 66, 104),
+ (75, 66, 104), (73, 67, 99), (72, 67, 99), (72, 67, 99),
+ (70, 66, 98), (69, 66, 97), (68, 65, 96), (68, 65, 96),
+ (68, 63, 92), (69, 60, 93), (70, 57, 95), (67, 56, 97),
+ (64, 55, 100), (62, 55, 101), (61, 55, 102), (59, 58, 104),
+ (60, 57, 104), (63, 58, 105), (66, 62, 108), (70, 66, 111),
+ (74, 70, 114), (78, 75, 117), (90, 88, 124), (100, 100, 130),
+ (116, 114, 135), (117, 116, 136), (118, 118, 138), (122, 122, 140),
+ (127, 127, 143), (130, 128, 140), (134, 130, 137), (133, 130, 137),
+ (128, 125, 134), (111, 107, 128), (107, 103, 128), (103, 100, 128),
+ (102, 100, 128), (102, 100, 128), (102, 100, 127), (101, 98, 128),
+ (88, 90, 125), (82, 84, 121), (77, 78, 117), (75, 75, 116),
+ (73, 72, 115), (72, 67, 112), (72, 64, 110), (71, 60, 105),
+ (70, 57, 98), (64, 48, 88), (65, 47, 88), (66, 47, 89),
+ (68, 48, 91), (70, 50, 94), (75, 56, 96), (81, 66, 98),
+ (97, 89, 104), (107, 102, 113), (118, 115, 122), (123, 121, 127),
+ (128, 127, 133), (134, 136, 140), (135, 137, 146), (136, 140, 145),
+ (134, 140, 143), (125, 128, 140), (121, 124, 139), (118, 120, 138),
+ (107, 106, 137), (99, 97, 132), (91, 90, 126), (82, 81, 121),
+ (73, 72, 115), (71, 70, 114), (70, 69, 113), (71, 69, 111),
+ (72, 69, 110), (75, 70, 107), (81, 73, 102), (88, 73, 97),
+ (94, 71, 93), (108, 66, 84), (108, 63, 81), (109, 61, 78),
+ (108, 58, 70), (105, 53, 64), (100, 49, 59), (98, 48, 57),
+ (96, 45, 57), (93, 45, 57), (91, 45, 57), (88, 44, 57),
+ (85, 44, 57), (81, 44, 57), (82, 44, 56), (87, 46, 56),
+ (94, 51, 54), (105, 58, 54), (105, 60, 56), (106, 62, 58),
+ (108, 64, 64), (108, 65, 70), (112, 66, 74), (112, 65, 75),
+ (102, 63, 80), (97, 62, 82), (93, 61, 84), (80, 59, 88),
+ (73, 57, 91), (72, 53, 90), (73, 50, 84), (78, 46, 79),
+ (88, 42, 76), (106, 48, 70), (111, 50, 69), (117, 53, 68),
+ (128, 61, 65), (141, 65, 61), (156, 71, 59), (170, 73, 58),
+ (191, 80, 57), (192, 83, 57), (194, 87, 58), (194, 89, 59),
+ (194, 92, 58), (186, 91, 57), (178, 86, 52), (165, 81, 49),
+ (151, 77, 48), (135, 72, 49), (124, 67, 51), (112, 65, 54),
+ (101, 60, 53), (89, 55, 53), (80, 50, 54), (70, 47, 58),
+ (67, 53, 74), (68, 56, 78), (70, 60, 83), (74, 67, 91),
+ (78, 73, 99), (82, 75, 104), (84, 79, 109), (86, 82, 116),
+ (88, 85, 119), (88, 88, 121), (88, 89, 120), (86, 85, 117),
+ (83, 81, 110), (77, 76, 103), (73, 73, 97), (69, 70, 93),
+ (68, 68, 91), (69, 67, 91), (71, 66, 91), (71, 65, 90),
+ (74, 69, 91), (82, 74, 88), (93, 82, 85), (107, 92, 83),
+ (123, 102, 83), (137, 110, 82), (147, 115, 81), (154, 116, 75),
+ (156, 111, 69), (154, 107, 65), (151, 103, 63), (144, 97, 63),
+ (136, 94, 66), (127, 89, 69), (118, 79, 71), (105, 67, 72),
+ (93, 56, 75), (79, 46, 79), (69, 40, 85), (63, 38, 91),
+ (63, 38, 96), (65, 37, 99), (69, 38, 99), (74, 39, 100),
+ (76, 43, 103), (79, 47, 104), (82, 53, 108), (83, 58, 112),
+ (84, 59, 110), (85, 58, 106), (83, 58, 102), (81, 57, 97),
+ (78, 59, 94), (77, 64, 94), (79, 69, 91), (88, 72, 89),
+ (100, 76, 84), (109, 81, 79), (113, 85, 81), (115, 91, 87),
+ (112, 96, 97), (114, 102, 107), (119, 105, 115), (128, 112, 117),
+ (133, 116, 121), (133, 118, 124), (127, 118, 131), (116, 116, 136),
+ (107, 112, 142), (104, 108, 143), (101, 103, 140), (100, 100, 135)
+ ),
+
+// 673 Violet
+((50, 27, 100), (48, 28, 96), (50, 28, 96), (53, 28, 97),
+ (56, 30, 100), (59, 33, 104), (59, 34, 104), (60, 36, 105),
+ (59, 34, 105), (59, 34, 106), (59, 34, 108), (58, 33, 106),
+ (58, 33, 105), (58, 32, 101), (58, 31, 98), (58, 31, 97),
+ (58, 32, 97), (61, 39, 96), (63, 41, 94), (65, 44, 93),
+ (69, 48, 95), (73, 52, 97), (76, 54, 98), (80, 57, 100),
+ (89, 62, 107), (93, 66, 114), (98, 70, 122), (105, 80, 134),
+ (113, 90, 146), (117, 96, 152), (122, 103, 159), (134, 114, 171),
+ (140, 124, 181), (146, 138, 196), (148, 143, 198), (151, 148, 201),
+ (152, 148, 201), (153, 148, 202), (152, 148, 202), (152, 148, 203),
+ (150, 149, 206), (151, 150, 208), (153, 152, 211), (156, 154, 214),
+ (160, 157, 217), (160, 159, 216), (160, 161, 216), (158, 160, 214),
+ (154, 155, 205), (146, 136, 190), (141, 131, 189), (136, 127, 188),
+ (132, 125, 186), (129, 124, 185), (129, 123, 184), (129, 122, 184),
+ (130, 124, 198), (136, 133, 206), (143, 143, 215), (151, 151, 218),
+ (159, 160, 221), (162, 163, 222), (165, 166, 224), (173, 172, 226),
+ (181, 178, 230), (187, 182, 228), (179, 173, 217), (172, 165, 207),
+ (168, 158, 202), (165, 152, 197), (159, 138, 189), (154, 125, 183),
+ (130, 102, 168), (122, 95, 163), (115, 89, 158), (120, 93, 163),
+ (126, 98, 169), (129, 104, 173), (132, 110, 177), (137, 122, 187),
+ (144, 137, 197), (165, 161, 212), (171, 168, 218), (178, 176, 225),
+ (178, 177, 226), (178, 178, 228), (176, 175, 228), (172, 169, 225),
+ (160, 147, 209), (150, 132, 197), (140, 117, 186), (134, 110, 179),
+ (129, 104, 172), (118, 90, 161), (108, 78, 150), (101, 69, 139),
+ (96, 63, 132), (93, 64, 124), (96, 72, 128), (99, 80, 132),
+ (103, 86, 136), (107, 92, 141), (114, 105, 152), (121, 117, 163),
+ (134, 135, 181), (134, 135, 183), (134, 135, 185), (132, 132, 183),
+ (130, 130, 182), (124, 121, 175), (117, 109, 165), (105, 94, 150),
+ (93, 78, 136), (79, 54, 112), (78, 51, 108), (78, 49, 105),
+ (77, 47, 98), (76, 48, 94), (77, 51, 93), (78, 54, 97),
+ (85, 65, 109), (87, 69, 112), (90, 73, 116), (90, 72, 117),
+ (91, 72, 118), (94, 70, 121), (94, 69, 125), (97, 69, 129),
+ (99, 69, 132), (103, 68, 134), (104, 69, 135), (105, 71, 137),
+ (110, 79, 143), (118, 90, 152), (126, 104, 163), (133, 117, 172),
+ (143, 140, 191), (153, 154, 202), (164, 168, 214), (169, 173, 220),
+ (175, 179, 227), (183, 188, 235), (187, 194, 240), (192, 197, 241),
+ (197, 200, 242), (208, 205, 248), (209, 206, 248), (211, 207, 249),
+ (214, 210, 250), (217, 216, 248), (218, 220, 249), (220, 223, 251),
+ (218, 223, 251), (217, 222, 251), (217, 222, 251), (213, 220, 251),
+ (210, 219, 252), (206, 215, 252), (203, 210, 249), (201, 207, 247),
+ (201, 204, 245), (199, 200, 244), (200, 199, 243), (201, 198, 243),
+ (202, 197, 241), (203, 195, 239), (199, 191, 233), (188, 180, 225),
+ (175, 157, 206), (171, 152, 201), (168, 148, 197), (159, 140, 187),
+ (147, 132, 177), (125, 106, 154), (116, 96, 147), (108, 85, 137),
+ (105, 79, 131), (103, 77, 128), (94, 63, 116), (88, 55, 112),
+ (83, 49, 109), (80, 45, 109), (74, 43, 108), (69, 38, 107),
+ (61, 35, 107), (61, 36, 109), (62, 38, 112), (62, 42, 117),
+ (64, 42, 119), (67, 41, 121), (69, 39, 119), (73, 42, 120),
+ (77, 48, 122), (81, 52, 123), (86, 53, 126), (91, 57, 127),
+ (96, 61, 130), (101, 71, 136), (107, 83, 142), (114, 94, 152),
+ (122, 108, 165), (131, 121, 178), (142, 134, 192), (153, 149, 204),
+ (166, 163, 214), (178, 176, 225), (187, 187, 234), (193, 194, 240),
+ (197, 198, 244), (200, 200, 245), (201, 199, 245), (199, 197, 242),
+ (194, 190, 234), (187, 179, 225), (178, 170, 215), (170, 160, 208),
+ (162, 154, 202), (158, 153, 199), (156, 151, 197), (156, 153, 196),
+ (158, 155, 200), (159, 154, 200), (162, 158, 202), (164, 160, 205),
+ (165, 162, 208), (165, 163, 210), (161, 157, 207), (155, 148, 201),
+ (148, 139, 193), (143, 133, 189), (141, 130, 187), (140, 128, 186),
+ (141, 128, 187), (141, 126, 186), (144, 130, 190), (150, 135, 195),
+ (156, 142, 198), (163, 148, 201), (169, 149, 203), (171, 151, 205),
+ (170, 150, 207), (163, 149, 207), (154, 144, 202), (146, 135, 196),
+ (137, 125, 188), (126, 113, 182), (114, 103, 176), (97, 92, 168),
+ (83, 79, 159), (71, 67, 147), (62, 54, 137), (55, 46, 128),
+ (49, 40, 121), (46, 35, 114), (47, 31, 107), (49, 28, 102)
+ ),
+
+// 674 Violet_Fog
+((135, 103, 140), (117, 84, 121), (113, 73, 114), (109, 63, 108),
+ (103, 60, 103), (97, 58, 99), (92, 56, 95), (88, 55, 91),
+ (76, 47, 79), (66, 44, 71), (57, 41, 64), (46, 39, 56),
+ (35, 38, 49), (32, 37, 46), (29, 36, 43), (28, 36, 42),
+ (28, 36, 42), (24, 37, 40), (23, 37, 39), (22, 37, 38),
+ (21, 36, 37), (21, 35, 37), (21, 34, 36), (21, 34, 36),
+ (25, 31, 37), (29, 31, 40), (33, 32, 43), (44, 35, 51),
+ (55, 39, 59), (60, 41, 64), (66, 43, 69), (74, 46, 77),
+ (80, 49, 84), (102, 65, 108), (110, 72, 118), (118, 80, 128),
+ (116, 82, 130), (115, 84, 132), (115, 83, 132), (116, 83, 132),
+ (118, 84, 129), (111, 80, 121), (104, 76, 114), (94, 68, 103),
+ (84, 60, 93), (81, 57, 89), (79, 54, 85), (76, 48, 78),
+ (68, 48, 72), (55, 49, 65), (60, 53, 71), (65, 57, 78),
+ (72, 66, 89), (79, 76, 100), (83, 83, 107), (87, 90, 115),
+ (112, 117, 140), (125, 124, 153), (138, 131, 167), (143, 135, 174),
+ (148, 140, 182), (148, 142, 182), (149, 144, 183), (151, 140, 179),
+ (149, 131, 171), (126, 102, 144), (111, 92, 129), (96, 83, 114),
+ (91, 77, 106), (87, 72, 99), (73, 62, 84), (60, 52, 68),
+ (38, 45, 51), (37, 42, 50), (37, 40, 49), (39, 40, 52),
+ (41, 41, 56), (45, 43, 59), (50, 45, 63), (59, 49, 72),
+ (69, 51, 78), (82, 52, 88), (84, 52, 89), (86, 53, 90),
+ (87, 54, 91), (88, 56, 92), (95, 57, 96), (101, 62, 105),
+ (110, 70, 121), (110, 75, 123), (110, 81, 125), (112, 85, 128),
+ (114, 90, 131), (121, 94, 139), (129, 95, 145), (128, 93, 145),
+ (122, 87, 135), (99, 76, 110), (90, 69, 101), (82, 63, 93),
+ (79, 60, 90), (76, 58, 87), (72, 57, 86), (69, 60, 87),
+ (67, 66, 89), (65, 69, 88), (64, 72, 87), (63, 73, 87),
+ (62, 74, 87), (64, 75, 87), (65, 77, 89), (66, 80, 91),
+ (68, 84, 91), (71, 88, 94), (71, 88, 95), (72, 89, 97),
+ (75, 90, 105), (77, 91, 106), (76, 92, 105), (76, 88, 101),
+ (67, 69, 89), (58, 59, 78), (50, 49, 67), (46, 45, 61),
+ (42, 41, 55), (36, 33, 44), (34, 27, 41), (33, 25, 40),
+ (32, 22, 40), (31, 21, 38), (30, 21, 38), (30, 21, 38),
+ (30, 22, 37), (29, 21, 39), (27, 21, 38), (27, 20, 37),
+ (26, 21, 34), (26, 22, 34), (26, 23, 34), (26, 23, 34),
+ (26, 24, 34), (27, 25, 35), (27, 25, 34), (27, 25, 35),
+ (27, 26, 35), (27, 29, 36), (27, 29, 36), (27, 29, 36),
+ (27, 30, 36), (26, 29, 36), (25, 29, 36), (26, 30, 37),
+ (27, 34, 40), (27, 34, 40), (27, 35, 40), (27, 36, 41),
+ (27, 37, 41), (28, 37, 42), (29, 37, 43), (30, 37, 44),
+ (30, 37, 44), (31, 35, 44), (31, 34, 44), (32, 34, 44),
+ (35, 32, 44), (37, 31, 45), (41, 30, 47), (50, 33, 54),
+ (68, 41, 69), (72, 43, 72), (77, 45, 76), (74, 44, 73),
+ (74, 46, 75), (74, 48, 76), (74, 50, 78), (81, 57, 86),
+ (81, 61, 89), (79, 67, 91), (78, 72, 92), (78, 77, 94),
+ (82, 84, 101), (89, 91, 112), (96, 100, 123), (104, 107, 134),
+ (117, 115, 148), (117, 116, 150), (118, 117, 153), (115, 118, 154),
+ (111, 117, 152), (110, 113, 150), (108, 109, 147), (104, 104, 141),
+ (93, 99, 131), (82, 92, 117), (72, 84, 105), (65, 78, 95),
+ (60, 71, 88), (54, 64, 79), (49, 58, 69), (43, 51, 60),
+ (39, 46, 54), (37, 43, 52), (37, 41, 50), (38, 39, 49),
+ (38, 37, 47), (38, 36, 46), (36, 35, 45), (34, 36, 44),
+ (33, 36, 45), (32, 36, 45), (33, 37, 45), (34, 37, 46),
+ (33, 37, 46), (33, 37, 46), (33, 37, 46), (33, 36, 46),
+ (34, 34, 45), (34, 33, 44), (34, 32, 43), (35, 30, 41),
+ (35, 29, 40), (35, 29, 40), (36, 29, 41), (38, 33, 43),
+ (47, 36, 49), (58, 39, 57), (67, 43, 66), (76, 46, 75),
+ (80, 52, 82), (88, 56, 91), (97, 59, 99), (99, 60, 102),
+ (98, 58, 100), (92, 57, 97), (84, 56, 94), (80, 56, 93),
+ (75, 57, 89), (72, 57, 87), (74, 60, 88), (76, 65, 92),
+ (83, 72, 100), (91, 79, 106), (103, 86, 117), (118, 92, 132),
+ (135, 101, 149), (155, 114, 170), (172, 125, 183), (182, 129, 189),
+ (186, 131, 194), (184, 130, 191), (182, 135, 193), (184, 141, 195),
+ (175, 135, 185), (167, 128, 176), (155, 113, 160), (139, 106, 145)
+ ),
+
+// 675 Watermelon
+((92, 42, 30), (108, 66, 42), (106, 72, 54), (105, 79, 66),
+ (111, 83, 75), (117, 88, 85), (119, 94, 83), (122, 101, 82),
+ (106, 119, 84), (95, 118, 85), (85, 117, 87), (75, 108, 74),
+ (65, 100, 61), (52, 88, 48), (40, 76, 35), (36, 70, 34),
+ (33, 64, 33), (39, 48, 31), (46, 46, 30), (53, 45, 29),
+ (51, 48, 29), (49, 51, 29), (49, 52, 29), (50, 53, 30),
+ (54, 53, 28), (50, 57, 29), (46, 61, 30), (44, 71, 31),
+ (42, 82, 33), (44, 84, 32), (47, 87, 31), (51, 92, 32),
+ (54, 93, 32), (59, 101, 34), (60, 101, 33), (62, 101, 33),
+ (61, 96, 32), (61, 91, 32), (63, 87, 31), (65, 83, 31),
+ (79, 64, 30), (88, 54, 31), (97, 45, 33), (109, 37, 31),
+ (121, 30, 29), (128, 28, 29), (135, 26, 29), (145, 25, 29),
+ (146, 26, 30), (140, 31, 30), (134, 42, 29), (129, 54, 29),
+ (122, 70, 28), (115, 87, 28), (113, 91, 29), (111, 95, 31),
+ (89, 108, 33), (79, 106, 31), (70, 104, 30), (64, 94, 29),
+ (58, 84, 29), (53, 78, 28), (48, 72, 28), (38, 61, 26),
+ (29, 48, 25), (22, 29, 24), (21, 26, 23), (21, 23, 23),
+ (20, 23, 22), (20, 23, 22), (21, 23, 23), (25, 23, 23),
+ (42, 22, 24), (53, 20, 24), (64, 19, 25), (77, 17, 25),
+ (90, 15, 25), (96, 15, 25), (102, 15, 26), (112, 13, 27),
+ (115, 14, 27), (104, 15, 26), (95, 16, 25), (86, 17, 25),
+ (81, 17, 24), (76, 17, 24), (70, 18, 24), (66, 20, 23),
+ (81, 21, 23), (96, 19, 23), (112, 18, 23), (120, 20, 24),
+ (129, 23, 25), (146, 24, 28), (162, 27, 31), (175, 25, 32),
+ (180, 20, 32), (168, 24, 31), (157, 25, 32), (146, 27, 33),
+ (141, 24, 33), (136, 22, 33), (123, 20, 28), (113, 18, 26),
+ (106, 22, 25), (115, 25, 25), (125, 28, 25), (130, 28, 25),
+ (135, 29, 25), (145, 27, 25), (157, 27, 26), (175, 29, 31),
+ (189, 33, 31), (208, 36, 29), (208, 34, 28), (209, 33, 28),
+ (209, 28, 31), (201, 24, 32), (195, 22, 32), (184, 21, 30),
+ (159, 18, 25), (145, 14, 24), (131, 10, 24), (123, 9, 23),
+ (116, 9, 23), (99, 9, 22), (83, 13, 22), (69, 14, 20),
+ (59, 15, 20), (45, 19, 21), (41, 21, 22), (38, 23, 23),
+ (36, 28, 26), (40, 34, 29), (52, 40, 34), (68, 50, 35),
+ (84, 73, 40), (88, 83, 43), (93, 94, 47), (95, 95, 45),
+ (98, 97, 44), (94, 98, 45), (84, 96, 42), (74, 97, 37),
+ (61, 95, 37), (39, 77, 31), (33, 71, 30), (27, 66, 29),
+ (19, 55, 26), (16, 49, 25), (16, 43, 23), (17, 39, 22),
+ (16, 32, 20), (16, 30, 20), (16, 29, 20), (17, 26, 20),
+ (18, 26, 19), (19, 28, 20), (19, 30, 20), (20, 33, 22),
+ (22, 36, 24), (39, 39, 26), (46, 39, 25), (53, 39, 25),
+ (68, 38, 25), (84, 39, 26), (102, 33, 29), (117, 30, 29),
+ (141, 16, 26), (144, 16, 26), (148, 16, 26), (151, 13, 27),
+ (151, 13, 27), (146, 12, 29), (139, 9, 28), (130, 10, 27),
+ (121, 12, 27), (112, 14, 27), (102, 17, 27), (93, 19, 27),
+ (84, 19, 26), (75, 20, 24), (65, 21, 23), (55, 21, 22),
+ (39, 22, 22), (36, 22, 22), (33, 22, 22), (28, 24, 21),
+ (24, 26, 21), (23, 29, 23), (24, 32, 24), (30, 32, 26),
+ (39, 31, 26), (48, 29, 27), (56, 29, 28), (58, 32, 29),
+ (57, 32, 29), (56, 32, 29), (55, 27, 27), (55, 23, 25),
+ (53, 21, 24), (46, 21, 23), (38, 23, 22), (30, 24, 22),
+ (28, 25, 21), (32, 24, 21), (38, 23, 21), (46, 23, 21),
+ (52, 24, 23), (58, 31, 24), (63, 41, 26), (68, 53, 28),
+ (76, 65, 30), (83, 74, 34), (88, 84, 41), (90, 95, 49),
+ (87, 104, 54), (82, 109, 58), (78, 109, 57), (73, 102, 56),
+ (69, 95, 61), (63, 85, 58), (55, 72, 58), (46, 60, 49),
+ (38, 47, 39), (30, 37, 35), (26, 30, 29), (23, 25, 26),
+ (22, 24, 24), (25, 23, 22), (29, 24, 21), (32, 26, 23),
+ (38, 34, 27), (48, 50, 40), (65, 66, 53), (84, 84, 67),
+ (100, 97, 80), (114, 112, 97), (132, 139, 126), (148, 158, 147),
+ (163, 173, 157), (174, 164, 148), (181, 149, 137), (188, 141, 132),
+ (192, 130, 132), (184, 124, 125), (174, 98, 102), (161, 71, 76),
+ (154, 48, 52), (151, 34, 41), (144, 36, 40), (133, 47, 37),
+ (125, 53, 36), (109, 49, 33), (97, 46, 28), (95, 37, 31)
+ ),
+
+// 676 Whisp
+((179, 160, 155), (199, 173, 168), (210, 184, 179), (222, 195, 190),
+ (214, 185, 180), (207, 175, 171), (203, 171, 167), (200, 167, 163),
+ (180, 156, 152), (170, 145, 140), (160, 134, 129), (150, 125, 120),
+ (141, 117, 111), (129, 103, 97), (117, 90, 83), (114, 81, 77),
+ (112, 73, 71), (103, 56, 55), (98, 55, 54), (93, 54, 54),
+ (95, 56, 56), (97, 59, 58), (97, 64, 62), (97, 69, 66),
+ (100, 90, 85), (106, 100, 93), (113, 111, 101), (122, 117, 109),
+ (132, 123, 118), (135, 127, 121), (138, 132, 125), (142, 137, 130),
+ (140, 135, 128), (133, 126, 120), (127, 121, 115), (121, 116, 110),
+ (119, 113, 105), (117, 110, 100), (117, 110, 100), (117, 110, 101),
+ (127, 117, 108), (132, 120, 112), (138, 123, 116), (140, 125, 118),
+ (143, 127, 121), (143, 128, 121), (143, 129, 121), (142, 128, 123),
+ (141, 125, 123), (137, 120, 119), (136, 118, 117), (136, 117, 115),
+ (141, 116, 115), (147, 115, 116), (149, 115, 116), (152, 116, 116),
+ (150, 114, 112), (149, 116, 113), (149, 118, 114), (141, 114, 112),
+ (134, 111, 111), (129, 109, 108), (125, 107, 106), (116, 106, 104),
+ (111, 104, 104), (105, 98, 100), (102, 94, 97), (99, 91, 94),
+ (97, 89, 91), (95, 88, 89), (91, 81, 81), (85, 74, 73),
+ (67, 53, 52), (56, 42, 40), (46, 31, 29), (43, 29, 28),
+ (40, 28, 28), (41, 30, 31), (43, 33, 34), (51, 42, 43),
+ (67, 55, 58), (115, 103, 101), (141, 127, 124), (168, 152, 148),
+ (179, 162, 157), (191, 172, 166), (209, 189, 184), (222, 204, 198),
+ (234, 213, 206), (232, 208, 203), (231, 203, 200), (227, 199, 196),
+ (224, 195, 192), (217, 187, 183), (210, 181, 179), (214, 182, 179),
+ (217, 186, 181), (223, 192, 189), (226, 199, 195), (229, 207, 201),
+ (230, 207, 202), (231, 208, 203), (230, 205, 202), (223, 197, 193),
+ (191, 175, 168), (175, 160, 154), (159, 145, 141), (152, 137, 134),
+ (145, 130, 127), (129, 116, 111), (117, 107, 100), (109, 96, 91),
+ (110, 88, 84), (110, 82, 77), (110, 82, 78), (111, 83, 80),
+ (119, 84, 81), (125, 88, 83), (132, 94, 87), (136, 101, 96),
+ (150, 115, 110), (152, 121, 117), (155, 128, 124), (158, 129, 126),
+ (161, 131, 129), (161, 133, 131), (161, 133, 131), (153, 130, 130),
+ (147, 125, 123), (131, 110, 106), (126, 105, 102), (121, 101, 98),
+ (109, 90, 87), (95, 80, 78), (81, 69, 66), (70, 59, 58),
+ (54, 43, 42), (50, 39, 37), (47, 36, 33), (50, 38, 35),
+ (54, 41, 38), (64, 49, 45), (78, 61, 56), (93, 72, 68),
+ (113, 88, 85), (152, 122, 118), (157, 127, 124), (163, 132, 130),
+ (170, 138, 136), (172, 137, 137), (166, 132, 132), (153, 125, 124),
+ (117, 98, 95), (106, 90, 86), (96, 82, 78), (75, 67, 64),
+ (60, 55, 52), (49, 45, 43), (43, 39, 36), (41, 35, 36),
+ (48, 37, 40), (63, 49, 50), (67, 51, 51), (71, 53, 53),
+ (82, 60, 59), (93, 69, 66), (97, 75, 72), (97, 75, 69),
+ (90, 67, 59), (86, 64, 57), (83, 62, 56), (77, 59, 53),
+ (71, 57, 50), (70, 56, 50), (69, 55, 50), (68, 54, 51),
+ (65, 54, 52), (65, 55, 54), (67, 54, 55), (65, 51, 53),
+ (58, 45, 48), (51, 41, 44), (46, 35, 38), (45, 33, 35),
+ (45, 35, 35), (47, 38, 37), (50, 41, 40), (57, 48, 47),
+ (62, 54, 52), (64, 58, 56), (67, 61, 59), (69, 63, 61),
+ (70, 65, 62), (69, 65, 61), (70, 66, 60), (71, 64, 61),
+ (73, 66, 64), (79, 69, 68), (89, 77, 73), (96, 82, 79),
+ (100, 86, 84), (104, 90, 87), (106, 91, 86), (107, 89, 84),
+ (102, 82, 78), (94, 76, 71), (82, 66, 60), (70, 56, 53),
+ (59, 43, 44), (52, 35, 38), (46, 31, 31), (44, 32, 31),
+ (46, 33, 34), (55, 41, 41), (65, 51, 48), (78, 65, 59),
+ (92, 73, 67), (105, 82, 75), (117, 84, 80), (126, 87, 84),
+ (131, 90, 88), (131, 95, 91), (129, 96, 93), (129, 96, 94),
+ (129, 99, 97), (128, 107, 104), (127, 115, 112), (130, 123, 119),
+ (136, 129, 129), (147, 139, 139), (161, 150, 150), (177, 162, 160),
+ (188, 171, 172), (198, 180, 182), (207, 188, 189), (216, 193, 192),
+ (216, 193, 191), (210, 186, 186), (202, 177, 176), (191, 166, 165),
+ (181, 155, 153), (165, 142, 140), (151, 132, 129), (139, 123, 120),
+ (130, 118, 115), (120, 111, 108), (113, 109, 105), (109, 105, 103),
+ (107, 104, 102), (105, 101, 99), (106, 100, 97), (109, 98, 95),
+ (115, 102, 100), (119, 103, 101), (138, 122, 120), (157, 139, 133)
+ ),
+
+// 677 Whisper
+((32, 70, 66), (16, 29, 31), (13, 28, 30), (10, 27, 30),
+ (10, 33, 35), (10, 39, 41), (12, 42, 44), (14, 46, 48),
+ (13, 50, 52), (13, 48, 50), (14, 47, 48), (12, 38, 41),
+ (10, 30, 34), (9, 25, 28), (9, 21, 22), (9, 20, 21),
+ (9, 19, 20), (13, 18, 16), (16, 19, 15), (19, 20, 15),
+ (25, 22, 14), (32, 25, 14), (33, 27, 16), (34, 29, 18),
+ (42, 35, 23), (42, 37, 25), (42, 39, 28), (39, 38, 27),
+ (37, 38, 27), (34, 36, 25), (32, 34, 24), (28, 31, 22),
+ (25, 27, 18), (18, 20, 13), (15, 18, 13), (13, 17, 13),
+ (12, 17, 15), (11, 18, 17), (11, 19, 19), (11, 21, 22),
+ (14, 33, 33), (18, 49, 48), (23, 65, 64), (32, 81, 78),
+ (42, 97, 92), (42, 105, 99), (42, 114, 106), (37, 120, 118),
+ (38, 119, 113), (24, 86, 85), (19, 71, 68), (14, 56, 52),
+ (14, 44, 41), (14, 33, 30), (13, 31, 27), (13, 30, 25),
+ (12, 22, 22), (18, 24, 21), (24, 26, 21), (32, 30, 22),
+ (40, 34, 23), (44, 35, 23), (48, 37, 24), (52, 40, 26),
+ (54, 44, 28), (44, 39, 27), (40, 37, 25), (36, 35, 23),
+ (35, 33, 21), (34, 31, 19), (39, 31, 16), (47, 36, 18),
+ (66, 54, 26), (76, 62, 34), (86, 71, 42), (97, 80, 49),
+ (109, 89, 56), (114, 95, 61), (120, 101, 67), (144, 115, 75),
+ (151, 128, 88), (151, 139, 88), (131, 134, 86), (111, 130, 84),
+ (100, 116, 71), (90, 102, 59), (62, 84, 49), (43, 66, 42),
+ (21, 35, 24), (17, 29, 23), (14, 24, 23), (13, 23, 23),
+ (12, 22, 24), (12, 22, 24), (16, 24, 26), (18, 27, 29),
+ (16, 30, 32), (22, 39, 42), (23, 41, 43), (24, 43, 45),
+ (27, 46, 48), (31, 50, 51), (44, 54, 51), (49, 61, 46),
+ (65, 93, 67), (62, 99, 73), (60, 105, 79), (57, 103, 80),
+ (55, 102, 81), (50, 96, 82), (40, 78, 72), (32, 60, 55),
+ (32, 50, 45), (30, 36, 28), (30, 35, 27), (31, 34, 27),
+ (32, 35, 26), (31, 33, 24), (28, 31, 23), (27, 30, 23),
+ (24, 28, 21), (21, 26, 20), (19, 24, 19), (17, 22, 18),
+ (15, 21, 17), (10, 19, 15), (8, 16, 13), (6, 14, 13),
+ (5, 13, 13), (6, 14, 14), (6, 15, 15), (7, 16, 16),
+ (8, 18, 19), (6, 20, 22), (6, 21, 23), (7, 21, 23),
+ (5, 18, 21), (4, 15, 17), (3, 12, 14), (2, 10, 12),
+ (2, 9, 10), (0, 7, 8), (0, 7, 8), (2, 7, 6),
+ (3, 7, 6), (4, 11, 11), (5, 11, 11), (6, 11, 11),
+ (6, 13, 14), (5, 15, 16), (6, 15, 16), (6, 16, 16),
+ (8, 17, 19), (9, 19, 19), (10, 21, 20), (15, 25, 22),
+ (18, 32, 29), (22, 42, 38), (28, 51, 44), (37, 55, 49),
+ (44, 61, 53), (50, 59, 53), (50, 56, 50), (50, 54, 47),
+ (46, 51, 43), (43, 45, 39), (36, 43, 38), (31, 44, 40),
+ (30, 51, 44), (33, 55, 44), (36, 59, 44), (36, 58, 40),
+ (34, 58, 44), (38, 60, 42), (39, 56, 34), (33, 48, 35),
+ (35, 51, 38), (39, 56, 43), (42, 60, 46), (50, 71, 52),
+ (55, 83, 63), (52, 92, 69), (51, 95, 68), (51, 99, 74),
+ (41, 93, 73), (40, 91, 72), (40, 89, 72), (37, 85, 80),
+ (37, 85, 79), (39, 88, 81), (47, 97, 87), (63, 104, 88),
+ (69, 102, 82), (71, 97, 78), (78, 94, 78), (71, 87, 69),
+ (52, 77, 64), (42, 76, 73), (37, 90, 86), (30, 107, 105),
+ (32, 117, 114), (48, 129, 119), (54, 139, 131), (49, 131, 123),
+ (55, 113, 104), (52, 99, 91), (40, 80, 75), (41, 62, 60),
+ (45, 55, 52), (45, 54, 44), (60, 57, 42), (79, 66, 49),
+ (93, 81, 53), (115, 103, 66), (151, 145, 113), (149, 174, 149),
+ (127, 166, 140), (150, 176, 152), (149, 184, 163), (117, 155, 131),
+ (107, 123, 103), (105, 100, 78), (100, 87, 59), (87, 77, 54),
+ (69, 61, 45), (52, 49, 36), (39, 42, 31), (30, 35, 26),
+ (24, 29, 23), (20, 25, 20), (18, 24, 19), (21, 25, 21),
+ (25, 27, 21), (28, 30, 21), (28, 32, 23), (28, 32, 25),
+ (27, 34, 24), (25, 31, 24), (22, 30, 25), (22, 31, 26),
+ (23, 30, 27), (22, 32, 31), (19, 34, 36), (19, 36, 39),
+ (21, 39, 40), (23, 41, 41), (28, 43, 40), (38, 43, 37),
+ (47, 45, 33), (52, 52, 33), (56, 60, 40), (58, 64, 45),
+ (55, 79, 64), (53, 94, 78), (43, 74, 64), (36, 66, 63)
+ ),
+
+// 678 Wintergrass
+((161, 147, 99), (150, 137, 77), (153, 144, 92), (156, 151, 108),
+ (167, 158, 121), (179, 166, 134), (182, 168, 137), (185, 171, 141),
+ (190, 172, 141), (175, 161, 126), (160, 150, 112), (147, 142, 94),
+ (135, 134, 77), (127, 124, 57), (120, 115, 38), (123, 114, 34),
+ (126, 114, 30), (134, 115, 20), (138, 115, 21), (143, 116, 23),
+ (142, 114, 25), (142, 112, 28), (139, 111, 28), (136, 110, 29),
+ (119, 105, 47), (115, 106, 53), (112, 108, 60), (119, 115, 73),
+ (126, 123, 87), (134, 128, 94), (142, 133, 102), (155, 143, 113),
+ (164, 147, 117), (150, 142, 118), (137, 131, 104), (124, 120, 91),
+ (111, 110, 73), (98, 101, 56), (101, 100, 50), (105, 100, 44),
+ (119, 101, 25), (128, 107, 23), (138, 113, 21), (142, 118, 24),
+ (146, 123, 27), (144, 124, 31), (143, 126, 35), (141, 128, 43),
+ (136, 125, 51), (133, 124, 48), (134, 123, 42), (136, 122, 36),
+ (140, 122, 26), (144, 122, 17), (143, 120, 14), (142, 119, 11),
+ (129, 112, 7), (121, 105, 7), (114, 98, 8), (108, 96, 9),
+ (103, 95, 10), (101, 94, 11), (99, 93, 13), (101, 92, 12),
+ (104, 92, 16), (95, 89, 21), (92, 88, 26), (89, 87, 31),
+ (87, 88, 33), (86, 89, 35), (85, 92, 40), (90, 95, 40),
+ (104, 111, 37), (106, 111, 33), (108, 111, 30), (105, 107, 33),
+ (103, 104, 36), (99, 102, 36), (96, 100, 37), (89, 93, 42),
+ (86, 90, 47), (83, 86, 50), (80, 83, 46), (78, 81, 42),
+ (77, 81, 40), (77, 81, 38), (78, 82, 37), (76, 83, 39),
+ (87, 94, 49), (101, 104, 65), (116, 115, 81), (126, 122, 89),
+ (137, 129, 97), (157, 143, 112), (174, 156, 124), (186, 167, 128),
+ (186, 170, 121), (190, 162, 79), (184, 152, 57), (178, 142, 35),
+ (177, 137, 27), (176, 133, 19), (169, 127, 16), (160, 122, 16),
+ (139, 109, 21), (125, 108, 26), (112, 107, 32), (110, 105, 33),
+ (109, 104, 34), (100, 101, 36), (92, 98, 38), (93, 97, 35),
+ (95, 94, 31), (92, 90, 34), (91, 89, 32), (90, 89, 31),
+ (88, 87, 30), (86, 85, 31), (84, 84, 29), (87, 84, 28),
+ (100, 90, 22), (113, 96, 20), (127, 102, 18), (131, 106, 16),
+ (135, 110, 14), (152, 119, 12), (167, 127, 15), (168, 133, 24),
+ (172, 141, 45), (183, 153, 87), (183, 155, 98), (184, 158, 109),
+ (184, 161, 130), (186, 164, 136), (179, 158, 130), (163, 148, 116),
+ (126, 123, 93), (109, 109, 76), (92, 96, 60), (86, 92, 55),
+ (81, 88, 50), (68, 78, 40), (60, 73, 33), (59, 69, 23),
+ (53, 66, 19), (44, 64, 28), (45, 65, 29), (47, 66, 30),
+ (50, 75, 38), (54, 78, 42), (58, 82, 47), (63, 88, 51),
+ (70, 96, 57), (70, 96, 60), (71, 97, 63), (77, 99, 66),
+ (83, 105, 65), (86, 107, 65), (96, 110, 58), (106, 113, 48),
+ (107, 111, 42), (109, 104, 31), (108, 101, 32), (108, 99, 34),
+ (109, 99, 36), (110, 101, 42), (112, 105, 49), (120, 112, 49),
+ (133, 125, 51), (137, 125, 47), (141, 126, 43), (147, 126, 40),
+ (153, 131, 39), (162, 131, 35), (164, 131, 44), (166, 138, 63),
+ (171, 146, 79), (163, 148, 88), (149, 143, 101), (137, 139, 108),
+ (124, 131, 96), (105, 116, 84), (86, 104, 79), (75, 96, 68),
+ (73, 91, 60), (73, 91, 60), (73, 91, 60), (77, 94, 58),
+ (88, 98, 54), (100, 102, 49), (109, 107, 46), (116, 109, 43),
+ (126, 111, 37), (133, 115, 32), (135, 119, 28), (141, 121, 26),
+ (144, 120, 24), (146, 122, 23), (150, 123, 24), (152, 121, 26),
+ (153, 122, 30), (152, 123, 34), (148, 122, 40), (145, 123, 47),
+ (142, 125, 54), (142, 129, 69), (147, 136, 85), (156, 142, 98),
+ (163, 148, 111), (165, 150, 115), (173, 152, 103), (179, 153, 85),
+ (170, 148, 72), (157, 142, 55), (152, 135, 37), (143, 132, 34),
+ (127, 128, 41), (113, 122, 45), (105, 116, 47), (99, 112, 50),
+ (93, 106, 51), (88, 101, 50), (86, 98, 49), (84, 93, 46),
+ (78, 89, 44), (71, 81, 42), (61, 70, 39), (49, 63, 35),
+ (44, 57, 30), (50, 57, 37), (51, 59, 37), (56, 64, 32),
+ (70, 75, 37), (82, 86, 41), (93, 95, 38), (104, 100, 35),
+ (112, 107, 36), (122, 116, 40), (132, 124, 45), (140, 130, 59),
+ (149, 139, 81), (162, 149, 96), (172, 154, 114), (183, 163, 132),
+ (197, 172, 143), (205, 178, 147), (210, 184, 154), (212, 186, 159),
+ (212, 187, 157), (211, 188, 157), (209, 187, 159), (206, 181, 155),
+ (197, 173, 145), (193, 170, 141), (187, 162, 121), (169, 148, 95)
+ ),
+
+
+// 679 Wooden
+((92, 74, 63), (75, 57, 57), (70, 54, 54), (66, 51, 51),
+ (62, 49, 48), (59, 48, 45), (57, 48, 43), (56, 49, 42),
+ (54, 48, 42), (51, 55, 48), (49, 63, 54), (55, 74, 67),
+ (62, 86, 81), (69, 94, 81), (77, 102, 81), (90, 104, 79),
+ (104, 107, 78), (129, 101, 72), (132, 97, 64), (136, 94, 56),
+ (132, 87, 50), (129, 80, 45), (125, 79, 42), (122, 78, 39),
+ (104, 75, 39), (91, 69, 40), (78, 63, 42), (71, 59, 41),
+ (64, 56, 40), (61, 57, 40), (58, 58, 41), (55, 55, 41),
+ (53, 47, 42), (39, 51, 47), (44, 48, 42), (50, 46, 38),
+ (49, 48, 35), (48, 50, 33), (48, 49, 32), (48, 48, 31),
+ (46, 38, 25), (42, 36, 24), (39, 35, 23), (35, 29, 23),
+ (32, 23, 23), (30, 22, 22), (28, 21, 21), (24, 18, 24),
+ (17, 22, 22), (12, 20, 20), (12, 19, 18), (13, 19, 16),
+ (15, 22, 18), (17, 26, 21), (19, 27, 25), (22, 29, 29),
+ (27, 30, 37), (29, 34, 39), (31, 38, 42), (31, 34, 40),
+ (31, 31, 39), (30, 32, 38), (29, 33, 38), (27, 30, 37),
+ (27, 31, 35), (31, 35, 27), (36, 35, 28), (41, 35, 30),
+ (42, 35, 30), (44, 36, 31), (48, 42, 31), (51, 47, 32),
+ (55, 43, 30), (54, 44, 29), (53, 45, 28), (49, 42, 25),
+ (45, 40, 23), (43, 39, 22), (42, 38, 22), (38, 36, 21),
+ (33, 29, 19), (20, 24, 15), (20, 21, 13), (21, 19, 12),
+ (20, 15, 10), (19, 12, 9), (17, 11, 8), (15, 10, 7),
+ (16, 9, 6), (15, 10, 7), (15, 11, 8), (16, 13, 9),
+ (18, 16, 10), (21, 23, 14), (29, 23, 17), (34, 29, 19),
+ (39, 34, 21), (50, 38, 27), (54, 39, 27), (58, 40, 27),
+ (59, 41, 26), (60, 42, 26), (61, 40, 27), (61, 42, 28),
+ (64, 45, 29), (65, 48, 31), (66, 52, 34), (67, 53, 34),
+ (68, 54, 35), (69, 56, 39), (72, 59, 43), (75, 65, 49),
+ (78, 71, 52), (80, 75, 56), (82, 75, 56), (85, 76, 57),
+ (92, 80, 59), (97, 82, 60), (104, 88, 61), (113, 93, 65),
+ (131, 110, 79), (142, 115, 80), (154, 121, 81), (156, 124, 82),
+ (158, 128, 84), (149, 127, 86), (145, 117, 82), (140, 107, 75),
+ (135, 100, 67), (104, 84, 54), (97, 77, 52), (90, 71, 51),
+ (80, 64, 49), (72, 61, 49), (67, 64, 47), (65, 62, 47),
+ (56, 60, 45), (57, 56, 45), (58, 53, 45), (58, 52, 44),
+ (59, 51, 43), (57, 48, 39), (57, 43, 34), (57, 39, 30),
+ (58, 40, 27), (63, 40, 21), (65, 41, 19), (68, 43, 18),
+ (74, 44, 18), (77, 48, 20), (80, 51, 24), (85, 57, 27),
+ (97, 61, 31), (97, 62, 33), (98, 64, 35), (99, 66, 41),
+ (99, 70, 43), (100, 71, 46), (97, 73, 47), (94, 72, 50),
+ (86, 69, 53), (57, 76, 63), (54, 77, 65), (52, 79, 67),
+ (49, 78, 66), (48, 76, 68), (46, 71, 65), (45, 69, 61),
+ (51, 61, 45), (53, 57, 42), (56, 53, 40), (54, 45, 36),
+ (50, 47, 34), (43, 51, 36), (36, 54, 39), (35, 55, 39),
+ (30, 54, 40), (30, 54, 39), (30, 52, 40), (30, 49, 34),
+ (31, 43, 27), (38, 36, 22), (36, 29, 18), (34, 24, 18),
+ (31, 21, 13), (30, 19, 13), (29, 18, 13), (26, 15, 15),
+ (24, 14, 16), (22, 15, 15), (24, 18, 15), (28, 16, 17),
+ (32, 20, 22), (38, 26, 31), (48, 37, 43), (66, 50, 50),
+ (86, 72, 67), (103, 98, 80), (108, 113, 89), (118, 106, 88),
+ (123, 115, 88), (126, 119, 88), (119, 116, 86), (104, 94, 73),
+ (89, 79, 59), (76, 74, 51), (65, 70, 49), (52, 65, 49),
+ (51, 62, 47), (52, 62, 46), (62, 65, 46), (75, 63, 42),
+ (89, 62, 37), (95, 57, 30), (92, 55, 27), (87, 50, 22),
+ (87, 50, 18), (82, 42, 13), (70, 37, 11), (53, 34, 11),
+ (45, 34, 13), (42, 31, 14), (44, 29, 11), (44, 31, 10),
+ (47, 32, 13), (54, 35, 16), (61, 36, 17), (65, 40, 18),
+ (69, 42, 23), (71, 47, 29), (73, 47, 32), (72, 50, 32),
+ (74, 46, 32), (73, 50, 32), (73, 48, 32), (70, 46, 32),
+ (68, 42, 30), (64, 40, 30), (62, 39, 29), (58, 36, 30),
+ (54, 33, 28), (49, 32, 27), (44, 35, 26), (42, 34, 26),
+ (40, 35, 27), (36, 40, 30), (31, 44, 34), (35, 50, 38),
+ (40, 57, 40), (53, 63, 44), (62, 68, 49), (80, 77, 56),
+ (90, 82, 59), (90, 82, 58), (83, 72, 57), (86, 74, 60)
+ ),
+
+// 680 Wooden_2
+((59, 44, 27), (70, 50, 29), (75, 53, 30), (80, 57, 32),
+ (83, 59, 33), (87, 62, 34), (87, 63, 34), (88, 64, 35),
+ (88, 66, 35), (87, 64, 34), (86, 63, 34), (83, 61, 33),
+ (80, 59, 32), (76, 56, 30), (73, 54, 29), (70, 52, 28),
+ (68, 51, 28), (58, 45, 25), (52, 41, 23), (47, 37, 22),
+ (41, 33, 20), (36, 29, 19), (33, 27, 18), (31, 26, 18),
+ (24, 21, 16), (21, 19, 15), (19, 18, 15), (18, 17, 15),
+ (18, 17, 15), (17, 16, 15), (17, 16, 15), (17, 16, 15),
+ (17, 16, 15), (17, 16, 16), (17, 16, 16), (18, 17, 16),
+ (20, 17, 16), (22, 18, 17), (23, 19, 17), (24, 20, 17),
+ (31, 24, 19), (36, 26, 20), (41, 29, 22), (47, 32, 23),
+ (54, 36, 25), (57, 37, 25), (60, 39, 25), (64, 41, 26),
+ (67, 42, 27), (72, 47, 28), (75, 49, 28), (79, 52, 29),
+ (86, 56, 31), (93, 61, 33), (97, 63, 33), (101, 66, 34),
+ (117, 78, 38), (124, 85, 39), (132, 92, 41), (140, 105, 49),
+ (149, 118, 57), (154, 124, 62), (159, 131, 68), (171, 144, 74),
+ (181, 151, 79), (195, 164, 85), (199, 165, 83), (204, 167, 82),
+ (205, 168, 82), (206, 169, 83), (206, 170, 89), (207, 176, 93),
+ (205, 175, 95), (201, 170, 92), (197, 166, 90), (192, 157, 81),
+ (187, 149, 72), (184, 144, 68), (182, 139, 65), (180, 137, 63),
+ (181, 137, 61), (180, 135, 59), (176, 132, 56), (172, 130, 54),
+ (169, 127, 52), (166, 125, 51), (158, 117, 48), (148, 110, 44),
+ (134, 100, 39), (128, 95, 37), (122, 91, 36), (118, 88, 35),
+ (115, 86, 34), (107, 80, 32), (98, 73, 31), (86, 64, 29),
+ (74, 56, 27), (58, 45, 24), (55, 43, 24), (52, 41, 24),
+ (52, 41, 24), (53, 41, 24), (55, 42, 25), (57, 43, 26),
+ (59, 45, 27), (57, 44, 27), (56, 43, 27), (54, 42, 26),
+ (53, 42, 26), (51, 40, 26), (50, 39, 26), (49, 39, 25),
+ (49, 39, 25), (53, 41, 26), (54, 42, 26), (55, 43, 27),
+ (58, 44, 27), (60, 46, 28), (64, 49, 29), (69, 52, 30),
+ (80, 60, 32), (85, 63, 33), (91, 67, 35), (93, 68, 35),
+ (96, 70, 36), (99, 72, 36), (101, 74, 37), (103, 76, 37),
+ (105, 77, 38), (107, 79, 38), (106, 79, 38), (106, 79, 39),
+ (106, 79, 40), (105, 79, 39), (103, 78, 38), (102, 77, 38),
+ (105, 80, 37), (109, 81, 38), (113, 82, 40), (114, 82, 41),
+ (116, 83, 42), (117, 83, 43), (116, 82, 43), (113, 80, 42),
+ (110, 79, 41), (102, 75, 37), (100, 73, 36), (99, 72, 36),
+ (95, 69, 35), (91, 64, 34), (83, 59, 33), (75, 52, 31),
+ (56, 41, 26), (51, 38, 24), (47, 36, 23), (41, 33, 22),
+ (38, 32, 21), (38, 31, 21), (39, 32, 22), (43, 35, 23),
+ (48, 38, 24), (59, 45, 26), (62, 48, 27), (66, 51, 28),
+ (74, 57, 30), (83, 63, 32), (94, 69, 34), (104, 74, 36),
+ (101, 73, 35), (99, 71, 34), (98, 70, 34), (94, 67, 33),
+ (89, 64, 32), (82, 61, 30), (77, 58, 29), (82, 60, 29),
+ (76, 55, 28), (69, 51, 26), (61, 45, 24), (53, 39, 22),
+ (43, 32, 20), (32, 25, 18), (21, 19, 16), (21, 19, 16),
+ (20, 19, 16), (19, 18, 16), (19, 18, 16), (19, 18, 16),
+ (18, 17, 16), (18, 17, 15), (18, 17, 16), (18, 17, 16),
+ (19, 18, 16), (20, 19, 16), (22, 20, 16), (24, 22, 17),
+ (27, 23, 18), (29, 25, 18), (31, 27, 19), (32, 28, 20),
+ (33, 29, 20), (35, 30, 20), (36, 31, 21), (38, 33, 21),
+ (42, 35, 22), (46, 38, 23), (50, 41, 25), (56, 45, 26),
+ (61, 49, 27), (66, 52, 28), (72, 56, 29), (76, 59, 30),
+ (80, 62, 31), (84, 64, 31), (87, 67, 32), (91, 69, 34),
+ (95, 72, 36), (100, 76, 37), (106, 80, 38), (111, 84, 41),
+ (116, 87, 42), (118, 88, 43), (118, 89, 43), (115, 88, 44),
+ (111, 85, 44), (105, 80, 43), (99, 76, 40), (94, 73, 39),
+ (89, 69, 38), (84, 66, 37), (79, 62, 36), (74, 59, 34),
+ (69, 55, 33), (63, 50, 31), (56, 45, 29), (51, 41, 26),
+ (46, 37, 24), (42, 34, 22), (38, 32, 20), (35, 29, 19),
+ (33, 28, 19), (32, 27, 19), (30, 26, 19), (30, 26, 19),
+ (30, 26, 19), (31, 27, 19), (33, 28, 19), (35, 28, 19),
+ (38, 29, 19), (40, 31, 20), (42, 32, 21), (44, 33, 22),
+ (46, 34, 22), (48, 36, 23), (51, 38, 24), (54, 41, 26)
+ ),
+
+// 681 Wooden_3
+((95, 69, 38), (68, 47, 22), (53, 33, 11), (38, 20, 1),
+ (33, 17, 0), (28, 15, 0), (25, 14, 0), (23, 13, 1),
+ (15, 9, 1), (13, 7, 0), (12, 5, 0), (12, 5, 0),
+ (12, 5, 0), (14, 6, 0), (17, 7, 0), (19, 7, 0),
+ (21, 8, 0), (29, 12, 0), (31, 13, 0), (34, 15, 0),
+ (34, 15, 0), (35, 16, 0), (35, 15, 0), (35, 15, 0),
+ (32, 14, 1), (31, 14, 2), (30, 14, 3), (33, 18, 7),
+ (36, 23, 12), (40, 28, 18), (44, 33, 24), (57, 47, 38),
+ (74, 65, 57), (103, 96, 86), (117, 112, 102), (132, 128, 119),
+ (146, 144, 136), (161, 160, 154), (165, 164, 158), (169, 169, 163),
+ (168, 166, 160), (162, 158, 149), (156, 150, 138), (144, 135, 122),
+ (132, 120, 107), (123, 110, 97), (115, 101, 88), (99, 84, 68),
+ (87, 70, 52), (63, 41, 21), (53, 31, 12), (43, 21, 3),
+ (41, 20, 2), (39, 19, 1), (39, 19, 0), (40, 19, 0),
+ (43, 21, 0), (46, 24, 3), (50, 27, 6), (61, 36, 12),
+ (72, 45, 18), (78, 51, 21), (85, 57, 24), (96, 64, 25),
+ (105, 70, 27), (115, 79, 32), (114, 78, 30), (113, 78, 29),
+ (111, 74, 26), (109, 71, 23), (103, 65, 18), (95, 59, 15),
+ (81, 51, 17), (83, 54, 22), (85, 57, 28), (94, 66, 36),
+ (104, 75, 44), (108, 80, 47), (113, 86, 51), (122, 94, 60),
+ (130, 103, 67), (139, 108, 71), (138, 106, 69), (137, 105, 67),
+ (135, 104, 66), (133, 103, 65), (129, 100, 63), (127, 99, 63),
+ (124, 96, 63), (117, 91, 60), (110, 86, 57), (106, 82, 53),
+ (102, 79, 50), (92, 73, 46), (85, 66, 43), (78, 59, 39),
+ (67, 49, 32), (47, 29, 13), (43, 24, 10), (39, 19, 7),
+ (38, 18, 6), (38, 18, 6), (38, 17, 4), (38, 18, 3),
+ (39, 18, 3), (38, 17, 3), (38, 16, 3), (36, 15, 2),
+ (35, 15, 2), (34, 14, 1), (32, 13, 0), (31, 12, 0),
+ (31, 11, 0), (32, 13, 1), (33, 14, 2), (34, 15, 3),
+ (39, 22, 10), (48, 33, 21), (61, 45, 31), (77, 59, 41),
+ (107, 83, 51), (125, 102, 69), (144, 121, 87), (154, 132, 100),
+ (164, 143, 113), (183, 164, 136), (191, 174, 145), (200, 184, 151),
+ (205, 187, 155), (211, 194, 165), (208, 191, 163), (205, 189, 162),
+ (193, 178, 153), (178, 160, 136), (162, 139, 108), (145, 120, 86),
+ (114, 85, 48), (99, 70, 37), (84, 56, 26), (77, 49, 20),
+ (70, 43, 15), (61, 35, 8), (55, 29, 3), (52, 26, 3),
+ (55, 27, 4), (66, 38, 13), (70, 42, 17), (75, 46, 21),
+ (83, 54, 27), (93, 62, 34), (100, 70, 41), (107, 78, 50),
+ (120, 93, 65), (123, 94, 66), (126, 96, 67), (125, 96, 64),
+ (118, 89, 58), (110, 81, 52), (100, 73, 44), (92, 63, 39),
+ (87, 59, 32), (69, 40, 15), (65, 36, 11), (62, 33, 7),
+ (55, 26, 3), (52, 25, 3), (49, 23, 3), (46, 21, 2),
+ (42, 18, 0), (40, 17, 0), (39, 17, 0), (36, 17, 1),
+ (35, 16, 1), (35, 16, 1), (36, 17, 2), (40, 19, 3),
+ (45, 26, 8), (55, 37, 15), (68, 48, 23), (80, 59, 32),
+ (94, 67, 38), (102, 75, 48), (114, 87, 58), (125, 102, 73),
+ (149, 131, 105), (152, 135, 111), (155, 139, 117), (162, 143, 120),
+ (168, 148, 121), (171, 153, 122), (174, 154, 120), (174, 153, 119),
+ (174, 149, 115), (174, 145, 107), (173, 141, 98), (169, 134, 89),
+ (161, 126, 79), (152, 116, 74), (142, 106, 69), (130, 94, 60),
+ (117, 85, 53), (104, 75, 45), (94, 66, 37), (86, 59, 34),
+ (75, 49, 25), (66, 40, 18), (59, 34, 13), (57, 34, 12),
+ (63, 40, 18), (69, 46, 23), (74, 49, 26), (80, 51, 27),
+ (86, 59, 31), (98, 69, 37), (111, 81, 46), (120, 91, 55),
+ (128, 97, 62), (132, 105, 73), (141, 118, 86), (152, 131, 101),
+ (162, 144, 115), (171, 153, 126), (176, 159, 135), (179, 166, 145),
+ (184, 171, 152), (186, 173, 156), (186, 173, 152), (184, 167, 143),
+ (180, 161, 134), (177, 155, 126), (173, 148, 119), (166, 143, 111),
+ (157, 134, 101), (143, 122, 92), (130, 108, 79), (116, 93, 67),
+ (104, 83, 57), (96, 74, 48), (90, 70, 46), (87, 66, 44),
+ (89, 66, 44), (94, 71, 45), (102, 77, 47), (113, 87, 55),
+ (124, 98, 65), (136, 108, 72), (150, 119, 77), (158, 126, 79),
+ (161, 128, 79), (161, 128, 83), (158, 127, 83), (155, 124, 81),
+ (143, 112, 67), (129, 97, 53), (114, 83, 44), (101, 71, 35)
+ ),
+
+// 682 Woodland
+((67, 42, 19), (78, 38, 13), (86, 38, 10), (94, 39, 7),
+ (105, 43, 6), (116, 47, 5), (119, 48, 4), (122, 49, 3),
+ (117, 44, 3), (108, 39, 2), (100, 34, 1), (90, 31, 3),
+ (81, 29, 6), (76, 26, 7), (72, 24, 8), (72, 24, 9),
+ (72, 25, 10), (70, 27, 8), (72, 28, 9), (74, 30, 10),
+ (72, 32, 10), (71, 34, 10), (70, 34, 10), (70, 34, 11),
+ (62, 36, 11), (60, 38, 14), (59, 41, 18), (64, 49, 24),
+ (69, 57, 30), (70, 61, 35), (72, 66, 41), (75, 72, 45),
+ (73, 72, 46), (62, 66, 40), (57, 55, 31), (53, 45, 22),
+ (54, 40, 16), (56, 36, 11), (59, 35, 11), (62, 34, 11),
+ (68, 30, 11), (72, 31, 11), (76, 32, 11), (79, 34, 12),
+ (82, 36, 13), (84, 36, 12), (86, 37, 12), (83, 38, 12),
+ (82, 40, 14), (75, 44, 18), (72, 43, 18), (69, 43, 18),
+ (65, 45, 18), (62, 48, 18), (63, 48, 17), (64, 49, 16),
+ (62, 58, 19), (68, 66, 21), (74, 74, 24), (78, 76, 25),
+ (83, 78, 27), (87, 77, 27), (92, 76, 28), (91, 80, 28),
+ (87, 76, 29), (78, 75, 36), (70, 77, 42), (62, 79, 48),
+ (59, 77, 47), (57, 75, 47), (53, 77, 47), (48, 71, 41),
+ (41, 55, 27), (37, 54, 24), (34, 54, 21), (34, 57, 22),
+ (34, 61, 23), (35, 65, 28), (37, 69, 34), (45, 80, 47),
+ (54, 93, 54), (69, 113, 95), (67, 127, 105), (65, 142, 115),
+ (72, 145, 130), (79, 149, 145), (74, 153, 146), (72, 150, 113),
+ (79, 137, 113), (69, 120, 80), (60, 103, 48), (52, 94, 45),
+ (45, 86, 42), (33, 71, 33), (33, 56, 23), (37, 48, 19),
+ (40, 42, 15), (52, 31, 11), (51, 31, 12), (51, 32, 14),
+ (50, 32, 14), (50, 33, 15), (46, 36, 16), (43, 39, 16),
+ (37, 47, 19), (37, 51, 20), (37, 56, 21), (41, 58, 23),
+ (45, 60, 26), (60, 66, 31), (74, 76, 34), (93, 77, 32),
+ (114, 73, 28), (133, 70, 21), (132, 65, 17), (132, 61, 14),
+ (125, 56, 9), (114, 50, 9), (99, 47, 10), (85, 45, 9),
+ (65, 45, 17), (62, 51, 27), (60, 58, 37), (63, 61, 42),
+ (67, 65, 48), (73, 77, 53), (80, 86, 58), (92, 93, 67),
+ (101, 105, 63), (106, 112, 49), (108, 113, 46), (110, 115, 44),
+ (107, 116, 36), (99, 104, 33), (88, 90, 28), (71, 82, 26),
+ (49, 63, 25), (43, 58, 22), (38, 54, 20), (41, 54, 19),
+ (44, 54, 19), (50, 55, 18), (57, 53, 13), (69, 49, 11),
+ (81, 51, 9), (96, 49, 9), (98, 49, 8), (101, 50, 8),
+ (101, 49, 7), (100, 51, 9), (96, 53, 13), (92, 52, 15),
+ (95, 56, 16), (97, 56, 15), (100, 56, 15), (107, 56, 14),
+ (113, 57, 12), (116, 58, 12), (117, 60, 14), (113, 60, 16),
+ (107, 60, 20), (100, 75, 29), (100, 78, 30), (100, 81, 32),
+ (96, 87, 30), (100, 93, 30), (101, 92, 28), (95, 85, 24),
+ (91, 69, 16), (87, 65, 15), (84, 62, 14), (82, 58, 11),
+ (80, 55, 11), (76, 49, 13), (74, 44, 10), (71, 35, 8),
+ (69, 24, 9), (68, 17, 8), (69, 15, 10), (72, 21, 13),
+ (77, 26, 14), (88, 36, 15), (99, 56, 27), (108, 75, 41),
+ (134, 124, 44), (139, 134, 51), (145, 144, 59), (145, 139, 59),
+ (145, 135, 51), (145, 140, 48), (138, 118, 46), (132, 92, 39),
+ (125, 85, 33), (120, 80, 29), (124, 77, 23), (129, 70, 18),
+ (131, 63, 11), (133, 64, 7), (130, 63, 8), (123, 65, 6),
+ (112, 64, 10), (95, 61, 17), (78, 64, 18), (64, 63, 22),
+ (53, 55, 25), (49, 52, 21), (46, 45, 19), (45, 37, 16),
+ (50, 30, 11), (55, 23, 10), (58, 18, 9), (61, 15, 8),
+ (63, 13, 7), (66, 14, 9), (66, 18, 10), (65, 23, 11),
+ (66, 26, 12), (63, 32, 14), (58, 37, 12), (55, 41, 13),
+ (54, 49, 18), (56, 61, 23), (60, 68, 28), (68, 76, 31),
+ (81, 87, 36), (87, 94, 43), (88, 101, 46), (87, 105, 42),
+ (83, 97, 36), (77, 87, 36), (73, 81, 32), (69, 68, 21),
+ (69, 53, 20), (72, 46, 20), (74, 49, 22), (74, 51, 23),
+ (77, 53, 21), (80, 59, 23), (81, 59, 22), (83, 58, 18),
+ (82, 56, 15), (83, 52, 14), (85, 50, 13), (84, 49, 11),
+ (84, 50, 9), (85, 54, 12), (87, 62, 15), (86, 70, 17),
+ (86, 74, 15), (84, 75, 13), (78, 76, 16), (72, 70, 16),
+ (67, 60, 12), (72, 59, 18), (72, 57, 25), (57, 44, 20)
+ ),
+
+// 683 Yellow_Silk
+((222, 187, 42), (223, 201, 66), (215, 201, 67), (208, 202, 69),
+ (188, 192, 71), (168, 182, 74), (166, 176, 69), (164, 170, 65),
+ (167, 157, 52), (164, 157, 51), (162, 158, 51), (164, 158, 45),
+ (166, 159, 39), (164, 156, 36), (163, 154, 33), (163, 150, 30),
+ (163, 147, 28), (168, 138, 28), (166, 137, 32), (165, 136, 37),
+ (163, 136, 38), (162, 136, 39), (158, 139, 38), (155, 142, 38),
+ (161, 145, 28), (159, 140, 24), (158, 136, 21), (167, 121, 17),
+ (177, 106, 14), (175, 98, 18), (174, 90, 23), (183, 68, 25),
+ (189, 47, 25), (184, 37, 19), (181, 42, 20), (179, 47, 21),
+ (161, 40, 18), (144, 33, 16), (136, 35, 16), (129, 38, 17),
+ (90, 12, 29), (72, 11, 36), (54, 11, 43), (63, 20, 56),
+ (73, 29, 69), (79, 39, 79), (86, 49, 90), (113, 64, 94),
+ (128, 65, 89), (157, 86, 79), (171, 94, 63), (186, 102, 47),
+ (198, 117, 44), (211, 133, 41), (219, 148, 41), (227, 164, 41),
+ (236, 194, 45), (238, 200, 46), (240, 206, 48), (211, 186, 51),
+ (182, 167, 54), (169, 148, 53), (157, 130, 53), (150, 119, 69),
+ (104, 101, 82), (75, 74, 84), (60, 65, 82), (45, 57, 80),
+ (44, 62, 70), (44, 68, 61), (53, 57, 43), (65, 67, 45),
+ (117, 112, 45), (127, 122, 48), (138, 133, 52), (143, 137, 51),
+ (149, 141, 50), (154, 138, 49), (159, 135, 48), (167, 134, 43),
+ (175, 131, 38), (189, 122, 31), (191, 126, 29), (193, 130, 27),
+ (193, 130, 31), (194, 131, 35), (190, 140, 44), (182, 152, 51),
+ (172, 162, 82), (158, 147, 77), (144, 133, 72), (134, 120, 77),
+ (125, 107, 82), (94, 79, 76), (81, 53, 46), (78, 33, 37),
+ (76, 30, 29), (117, 45, 27), (144, 67, 31), (171, 90, 35),
+ (178, 101, 48), (186, 112, 61), (197, 115, 76), (199, 139, 90),
+ (207, 172, 141), (200, 174, 136), (193, 176, 132), (193, 169, 126),
+ (193, 163, 120), (181, 142, 86), (146, 124, 52), (120, 105, 30),
+ (116, 107, 23), (109, 100, 7), (111, 108, 12), (114, 117, 17),
+ (133, 133, 26), (152, 140, 26), (164, 147, 31), (173, 148, 39),
+ (210, 149, 55), (221, 137, 63), (233, 125, 72), (236, 125, 78),
+ (240, 126, 85), (233, 126, 95), (214, 118, 93), (193, 122, 92),
+ (173, 126, 85), (142, 133, 68), (139, 131, 64), (137, 130, 60),
+ (136, 128, 46), (140, 135, 43), (147, 137, 42), (153, 133, 37),
+ (190, 137, 59), (204, 146, 76), (218, 155, 93), (219, 161, 98),
+ (221, 167, 103), (217, 182, 107), (188, 188, 104), (170, 173, 100),
+ (177, 153, 87), (144, 128, 101), (148, 120, 101), (152, 113, 102),
+ (161, 115, 104), (155, 149, 126), (158, 178, 123), (168, 199, 117),
+ (216, 231, 119), (222, 236, 120), (229, 241, 121), (243, 239, 120),
+ (250, 235, 115), (251, 235, 117), (251, 232, 111), (250, 232, 102),
+ (252, 233, 104), (253, 231, 115), (252, 231, 124), (252, 232, 134),
+ (241, 230, 151), (229, 230, 163), (210, 229, 180), (178, 212, 185),
+ (139, 179, 188), (126, 176, 180), (113, 173, 172), (115, 158, 160),
+ (134, 167, 163), (160, 180, 155), (184, 180, 138), (207, 195, 122),
+ (233, 202, 113), (239, 196, 102), (224, 190, 87), (206, 182, 74),
+ (186, 180, 65), (172, 177, 66), (171, 178, 77), (185, 185, 74),
+ (215, 203, 72), (226, 208, 70), (238, 214, 69), (252, 220, 60),
+ (252, 221, 58), (244, 211, 55), (232, 195, 48), (216, 180, 40),
+ (190, 156, 31), (161, 128, 22), (135, 105, 12), (111, 76, 4),
+ (82, 48, 0), (72, 51, 0), (77, 53, 0), (84, 38, 5),
+ (103, 57, 13), (119, 76, 18), (142, 74, 26), (162, 86, 37),
+ (169, 104, 44), (182, 120, 61), (197, 141, 75), (210, 165, 71),
+ (220, 188, 74), (235, 203, 82), (247, 213, 74), (249, 219, 66),
+ (249, 222, 68), (252, 225, 71), (253, 223, 78), (251, 221, 89),
+ (240, 210, 90), (227, 195, 82), (227, 174, 73), (215, 149, 59),
+ (191, 132, 40), (182, 114, 21), (176, 97, 11), (168, 95, 6),
+ (157, 102, 8), (147, 103, 15), (147, 107, 20), (148, 114, 30),
+ (144, 110, 35), (137, 104, 31), (135, 86, 25), (135, 58, 20),
+ (137, 46, 13), (140, 32, 4), (129, 15, 0), (129, 24, 0),
+ (143, 45, 4), (147, 60, 8), (143, 75, 17), (151, 92, 33),
+ (162, 113, 42), (163, 126, 56), (154, 126, 69), (152, 136, 65),
+ (161, 145, 62), (159, 148, 59), (163, 150, 46), (181, 147, 37),
+ (191, 143, 35), (190, 144, 36), (190, 144, 40), (193, 144, 40),
+ (190, 143, 38), (188, 148, 41), (197, 156, 45), (210, 171, 43)
+ ),
+
+// 684 Zinfandel
+((131, 89, 66), (114, 86, 62), (107, 88, 64), (101, 91, 66),
+ (91, 89, 64), (81, 87, 63), (77, 85, 61), (73, 83, 60),
+ (55, 66, 46), (56, 67, 47), (58, 69, 49), (71, 75, 53),
+ (85, 82, 57), (98, 88, 61), (112, 94, 65), (115, 95, 66),
+ (119, 97, 68), (129, 100, 71), (129, 100, 71), (130, 101, 71),
+ (134, 100, 71), (138, 99, 72), (139, 98, 71), (140, 97, 71),
+ (138, 88, 65), (125, 81, 60), (113, 75, 55), (104, 71, 54),
+ (96, 68, 53), (96, 69, 55), (96, 70, 58), (101, 76, 64),
+ (113, 85, 72), (136, 105, 84), (144, 110, 87), (152, 115, 91),
+ (161, 122, 97), (170, 129, 103), (175, 132, 105), (180, 136, 108),
+ (203, 155, 119), (211, 159, 121), (219, 164, 124), (225, 166, 126),
+ (231, 169, 129), (232, 171, 131), (233, 174, 134), (234, 179, 142),
+ (234, 185, 150), (236, 198, 169), (237, 203, 177), (239, 209, 186),
+ (240, 214, 194), (241, 220, 203), (241, 222, 207), (241, 225, 212),
+ (240, 236, 228), (240, 237, 232), (241, 239, 237), (241, 239, 237),
+ (241, 239, 237), (241, 239, 236), (241, 239, 236), (241, 240, 236),
+ (241, 240, 236), (241, 239, 235), (240, 236, 228), (239, 234, 221),
+ (238, 231, 216), (238, 228, 212), (236, 222, 201), (234, 214, 189),
+ (226, 192, 170), (218, 179, 157), (211, 166, 145), (203, 153, 133),
+ (195, 141, 121), (193, 137, 115), (192, 133, 109), (191, 127, 97),
+ (191, 122, 93), (183, 114, 89), (177, 109, 87), (171, 105, 85),
+ (170, 103, 83), (169, 102, 82), (171, 103, 83), (179, 107, 85),
+ (190, 120, 93), (191, 126, 96), (193, 132, 100), (192, 134, 100),
+ (192, 136, 100), (191, 139, 103), (196, 141, 105), (203, 142, 108),
+ (207, 146, 111), (209, 156, 121), (203, 157, 120), (197, 158, 119),
+ (194, 156, 118), (191, 154, 117), (185, 147, 114), (179, 138, 110),
+ (172, 126, 104), (168, 125, 102), (164, 124, 101), (164, 124, 101),
+ (164, 124, 101), (164, 125, 103), (165, 126, 103), (167, 126, 104),
+ (171, 127, 107), (179, 132, 111), (181, 133, 111), (184, 134, 111),
+ (184, 135, 113), (181, 134, 111), (174, 133, 108), (164, 132, 105),
+ (143, 125, 93), (132, 115, 85), (121, 106, 77), (114, 100, 72),
+ (108, 94, 68), (95, 82, 59), (82, 72, 53), (70, 68, 47),
+ (64, 67, 44), (69, 74, 46), (74, 77, 49), (79, 80, 52),
+ (93, 86, 59), (107, 90, 66), (120, 97, 74), (133, 104, 80),
+ (161, 122, 96), (174, 135, 109), (188, 148, 123), (195, 156, 131),
+ (202, 164, 140), (213, 179, 156), (224, 191, 170), (233, 203, 182),
+ (239, 209, 191), (244, 223, 208), (244, 227, 212), (245, 231, 217),
+ (245, 238, 226), (246, 243, 233), (245, 249, 239), (239, 250, 237),
+ (231, 240, 220), (228, 236, 215), (225, 232, 210), (217, 222, 199),
+ (210, 212, 187), (204, 199, 178), (193, 187, 165), (181, 172, 150),
+ (173, 159, 134), (159, 138, 111), (156, 135, 106), (153, 132, 101),
+ (153, 127, 97), (153, 125, 97), (154, 124, 98), (157, 127, 100),
+ (171, 142, 121), (174, 147, 126), (177, 153, 131), (185, 167, 144),
+ (194, 180, 158), (201, 192, 170), (208, 200, 178), (217, 211, 190),
+ (225, 219, 202), (232, 225, 208), (236, 228, 211), (239, 230, 212),
+ (238, 233, 216), (238, 233, 216), (238, 233, 216), (237, 236, 222),
+ (237, 237, 222), (237, 236, 219), (238, 235, 217), (235, 236, 214),
+ (233, 236, 212), (230, 232, 205), (227, 229, 203), (224, 226, 200),
+ (223, 223, 198), (224, 216, 191), (223, 209, 181), (222, 204, 174),
+ (220, 193, 162), (217, 183, 149), (214, 171, 136), (212, 157, 124),
+ (210, 146, 114), (207, 136, 104), (204, 129, 97), (196, 119, 91),
+ (183, 111, 84), (169, 104, 76), (158, 95, 70), (151, 92, 69),
+ (146, 94, 71), (147, 100, 75), (150, 109, 84), (151, 122, 97),
+ (152, 134, 110), (151, 143, 120), (154, 154, 132), (156, 165, 142),
+ (165, 171, 147), (178, 179, 151), (193, 189, 158), (208, 197, 165),
+ (217, 202, 170), (226, 205, 175), (228, 208, 181), (229, 203, 178),
+ (225, 196, 170), (219, 189, 159), (214, 182, 149), (208, 174, 138),
+ (205, 168, 130), (200, 165, 128), (196, 163, 127), (190, 161, 129),
+ (183, 160, 127), (177, 159, 126), (171, 157, 125), (168, 157, 124),
+ (169, 159, 123), (170, 159, 123), (173, 159, 125), (173, 159, 124),
+ (172, 158, 123), (169, 155, 122), (165, 150, 117), (163, 148, 112),
+ (162, 140, 105), (163, 131, 99), (163, 124, 92), (163, 116, 86),
+ (164, 110, 82), (162, 103, 78), (158, 102, 75), (157, 108, 77),
+ (155, 107, 78), (153, 106, 77), (144, 100, 72), (137, 94, 68)
+ ),
+
+// 685 040412
+((0, 110, 219), (0, 110, 222), (8, 107, 223), (16, 105, 225),
+ (19, 103, 225), (23, 102, 226), (24, 100, 225), (26, 99, 225),
+ (42, 89, 224), (39, 90, 220), (37, 91, 217), (36, 86, 212),
+ (36, 82, 208), (39, 83, 195), (43, 85, 183), (46, 88, 179),
+ (50, 91, 175), (68, 106, 162), (73, 117, 156), (78, 128, 151),
+ (88, 136, 144), (98, 145, 138), (104, 149, 134), (110, 154, 131),
+ (119, 169, 117), (118, 168, 120), (117, 168, 124), (120, 168, 120),
+ (123, 169, 117), (127, 167, 113), (131, 166, 109), (138, 158, 102),
+ (140, 149, 89), (130, 151, 60), (132, 154, 46), (135, 158, 33),
+ (147, 163, 19), (159, 168, 5), (164, 168, 4), (170, 169, 4),
+ (180, 165, 5), (175, 160, 8), (170, 156, 11), (166, 143, 16),
+ (163, 130, 21), (157, 121, 21), (152, 113, 21), (142, 99, 21),
+ (133, 86, 22), (113, 72, 16), (111, 71, 8), (109, 70, 0),
+ (107, 66, 0), (106, 63, 0), (102, 62, 0), (99, 61, 0),
+ (84, 64, 0), (79, 61, 0), (75, 58, 0), (65, 57, 5),
+ (56, 56, 11), (49, 53, 18), (42, 51, 26), (28, 54, 40),
+ (14, 58, 54), (2, 70, 82), (3, 78, 94), (5, 86, 107),
+ (5, 89, 113), (5, 93, 120), (5, 102, 133), (5, 110, 145),
+ (1, 126, 170), (0, 132, 183), (0, 138, 196), (0, 146, 210),
+ (0, 155, 224), (0, 160, 231), (0, 165, 238), (0, 179, 243),
+ (0, 194, 246), (0, 218, 236), (0, 224, 227), (0, 231, 219),
+ (0, 232, 214), (0, 233, 210), (0, 232, 198), (7, 228, 184),
+ (15, 212, 156), (18, 200, 145), (21, 189, 134), (21, 183, 130),
+ (21, 177, 126), (25, 169, 124), (30, 158, 117), (33, 148, 109),
+ (33, 138, 100), (33, 127, 82), (34, 127, 67), (36, 127, 53),
+ (38, 127, 46), (40, 127, 39), (39, 128, 25), (40, 121, 16),
+ (32, 103, 12), (26, 98, 16), (21, 93, 21), (18, 91, 21),
+ (16, 89, 21), (9, 82, 21), (2, 71, 22), (0, 58, 29),
+ (0, 53, 29), (0, 58, 29), (0, 64, 25), (0, 71, 22),
+ (0, 81, 19), (0, 92, 12), (0, 100, 7), (0, 109, 7),
+ (0, 131, 0), (0, 141, 0), (0, 152, 0), (0, 153, 0),
+ (0, 155, 0), (2, 152, 0), (5, 152, 0), (7, 152, 0),
+ (8, 155, 0), (8, 148, 0), (8, 144, 0), (8, 141, 0),
+ (7, 133, 0), (5, 124, 0), (5, 116, 0), (4, 114, 0),
+ (5, 116, 0), (4, 114, 0), (4, 112, 0), (3, 110, 0),
+ (2, 109, 0), (1, 116, 0), (0, 116, 0), (0, 119, 0),
+ (0, 120, 0), (0, 119, 9), (0, 117, 14), (0, 116, 19),
+ (0, 112, 26), (0, 103, 35), (0, 96, 42), (0, 88, 49),
+ (0, 68, 71), (0, 66, 76), (0, 65, 81), (0, 64, 88),
+ (0, 65, 96), (0, 65, 100), (0, 70, 105), (8, 70, 107),
+ (21, 72, 110), (47, 84, 106), (53, 86, 102), (60, 89, 99),
+ (72, 98, 91), (79, 103, 84), (91, 105, 81), (96, 107, 82),
+ (109, 106, 79), (114, 105, 79), (120, 105, 79), (131, 103, 84),
+ (142, 99, 85), (156, 102, 84), (170, 106, 88), (186, 112, 86),
+ (200, 117, 85), (214, 130, 81), (224, 141, 78), (232, 154, 70),
+ (235, 168, 61), (232, 182, 54), (225, 194, 44), (215, 211, 40),
+ (190, 226, 57), (183, 228, 61), (177, 231, 65), (165, 235, 82),
+ (152, 235, 96), (140, 232, 110), (127, 231, 121), (117, 228, 135),
+ (113, 224, 149), (106, 218, 161), (99, 212, 172), (100, 205, 176),
+ (96, 200, 173), (89, 196, 170), (81, 183, 169), (72, 169, 166),
+ (70, 159, 166), (65, 148, 162), (63, 140, 159), (58, 133, 155),
+ (54, 126, 154), (57, 123, 151), (61, 119, 148), (61, 117, 142),
+ (71, 113, 135), (82, 109, 133), (93, 105, 131), (103, 98, 128),
+ (107, 89, 130), (116, 79, 130), (124, 70, 130), (135, 60, 130),
+ (144, 50, 128), (149, 42, 127), (148, 39, 123), (148, 39, 119),
+ (141, 44, 116), (135, 51, 109), (127, 61, 110), (123, 74, 117),
+ (117, 82, 124), (106, 89, 137), (95, 95, 149), (84, 96, 162),
+ (75, 96, 172), (68, 93, 182), (64, 91, 193), (53, 86, 203),
+ (42, 85, 214), (30, 86, 226), (21, 89, 232), (8, 92, 235),
+ (0, 100, 238), (0, 109, 240), (0, 117, 245), (0, 126, 252),
+ (0, 135, 255), (0, 144, 255), (0, 149, 255), (0, 154, 255),
+ (0, 156, 255), (0, 156, 255), (0, 155, 255), (0, 149, 255),
+ (0, 144, 252), (0, 138, 242), (0, 131, 233), (0, 126, 225),
+ (0, 121, 219), (0, 120, 218), (0, 120, 218), (0, 114, 218)
+ ),
+
+// 686 040412-000
+((171, 102, 133), (150, 79, 120), (137, 65, 111), (125, 51, 103),
+ (128, 47, 103), (132, 44, 104), (132, 43, 104), (133, 43, 105),
+ (132, 51, 106), (135, 59, 109), (138, 67, 112), (142, 75, 115),
+ (147, 84, 119), (151, 94, 123), (156, 105, 128), (159, 110, 130),
+ (163, 115, 133), (180, 127, 143), (186, 129, 146), (193, 132, 149),
+ (197, 134, 151), (202, 136, 153), (204, 136, 154), (206, 137, 155),
+ (212, 140, 158), (216, 140, 160), (220, 141, 163), (223, 141, 165),
+ (227, 142, 167), (228, 142, 167), (229, 142, 167), (230, 141, 168),
+ (232, 141, 169), (235, 141, 171), (235, 142, 171), (236, 143, 171),
+ (236, 144, 171), (237, 146, 171), (238, 146, 171), (239, 147, 172),
+ (241, 150, 173), (241, 150, 173), (241, 151, 173), (239, 150, 172),
+ (237, 150, 171), (234, 149, 170), (232, 148, 169), (225, 145, 165),
+ (216, 142, 161), (193, 132, 149), (178, 126, 141), (163, 120, 134),
+ (147, 113, 126), (131, 106, 118), (124, 103, 114), (117, 100, 111),
+ (92, 89, 99), (83, 85, 94), (74, 81, 90), (69, 79, 87),
+ (65, 77, 85), (64, 76, 84), (63, 75, 84), (62, 74, 83),
+ (62, 74, 83), (64, 74, 84), (66, 74, 85), (69, 75, 86),
+ (70, 75, 86), (71, 75, 87), (72, 76, 88), (74, 78, 89),
+ (78, 80, 91), (80, 80, 92), (82, 81, 93), (84, 81, 94),
+ (86, 82, 95), (87, 82, 95), (88, 82, 95), (90, 81, 96),
+ (93, 79, 97), (100, 73, 98), (103, 70, 99), (106, 68, 100),
+ (107, 67, 100), (108, 66, 100), (110, 65, 100), (111, 64, 100),
+ (110, 65, 100), (107, 66, 99), (105, 68, 99), (103, 69, 98),
+ (101, 70, 98), (98, 71, 97), (94, 73, 96), (92, 77, 96),
+ (92, 80, 97), (98, 88, 101), (105, 91, 104), (112, 95, 108),
+ (116, 97, 110), (121, 100, 113), (130, 105, 117), (139, 109, 122),
+ (152, 115, 128), (153, 115, 129), (154, 116, 130), (152, 115, 129),
+ (151, 115, 128), (146, 112, 126), (138, 109, 122), (131, 106, 118),
+ (124, 103, 114), (115, 100, 110), (114, 99, 110), (114, 99, 110),
+ (116, 100, 111), (120, 102, 112), (126, 104, 116), (134, 108, 120),
+ (153, 115, 129), (160, 118, 132), (167, 122, 136), (169, 122, 137),
+ (172, 123, 138), (173, 124, 139), (173, 124, 139), (172, 123, 138),
+ (168, 122, 137), (158, 117, 132), (153, 115, 129), (149, 114, 127),
+ (140, 110, 123), (131, 106, 118), (123, 103, 114), (116, 100, 111),
+ (100, 94, 103), (92, 90, 99), (85, 87, 95), (83, 86, 94),
+ (81, 85, 93), (78, 83, 91), (77, 81, 91), (76, 80, 90),
+ (75, 79, 90), (78, 78, 90), (79, 77, 90), (81, 77, 91),
+ (84, 77, 93), (87, 77, 94), (90, 76, 95), (93, 75, 96),
+ (99, 72, 98), (101, 71, 98), (103, 70, 99), (108, 66, 100),
+ (112, 62, 101), (116, 59, 102), (120, 55, 102), (125, 51, 103),
+ (128, 48, 104), (132, 44, 104), (132, 44, 104), (132, 44, 104),
+ (133, 43, 104), (133, 43, 104), (132, 44, 104), (130, 46, 104),
+ (126, 49, 103), (125, 50, 103), (124, 52, 103), (121, 55, 102),
+ (119, 61, 103), (121, 68, 106), (127, 76, 109), (135, 84, 115),
+ (143, 91, 120), (152, 101, 126), (163, 112, 132), (176, 121, 140),
+ (190, 129, 148), (203, 134, 154), (214, 138, 160), (222, 141, 164),
+ (232, 141, 169), (232, 140, 169), (233, 140, 170), (234, 139, 170),
+ (233, 137, 170), (232, 136, 169), (231, 135, 169), (231, 135, 169),
+ (231, 135, 169), (232, 136, 169), (233, 138, 170), (235, 140, 170),
+ (236, 142, 171), (237, 144, 172), (239, 146, 172), (240, 148, 173),
+ (241, 149, 173), (241, 150, 173), (242, 150, 173), (241, 150, 173),
+ (241, 149, 173), (241, 149, 173), (241, 149, 173), (241, 149, 173),
+ (240, 148, 173), (240, 148, 172), (238, 148, 172), (236, 148, 171),
+ (234, 147, 169), (229, 146, 167), (224, 144, 164), (216, 141, 161),
+ (207, 138, 156), (196, 133, 150), (184, 128, 144), (170, 122, 137),
+ (155, 116, 130), (140, 110, 123), (125, 104, 115), (112, 98, 109),
+ (99, 93, 102), (87, 88, 96), (77, 84, 91), (68, 80, 87),
+ (62, 78, 84), (58, 76, 82), (54, 74, 80), (52, 73, 79),
+ (50, 73, 78), (50, 72, 77), (49, 72, 77), (49, 72, 77),
+ (49, 72, 77), (50, 72, 78), (51, 72, 78), (53, 73, 79),
+ (55, 74, 80), (58, 75, 82), (62, 77, 84), (68, 79, 86),
+ (74, 82, 90), (84, 86, 94), (94, 91, 100), (108, 97, 107),
+ (124, 103, 114), (140, 110, 123), (159, 118, 132), (174, 124, 139),
+ (171, 121, 138), (168, 116, 135), (163, 109, 132), (161, 102, 129)
+ ),
+
+// 687 040412-001
+((100, 88, 103), (127, 94, 112), (138, 92, 116), (150, 91, 120),
+ (156, 90, 121), (162, 89, 123), (162, 86, 120), (163, 83, 118),
+ (154, 62, 107), (145, 52, 101), (136, 43, 95), (127, 38, 90),
+ (118, 34, 85), (111, 33, 82), (104, 32, 80), (101, 32, 79),
+ (99, 33, 78), (87, 38, 76), (81, 40, 74), (75, 43, 73),
+ (70, 44, 71), (66, 45, 70), (64, 45, 69), (62, 46, 68),
+ (59, 45, 66), (59, 45, 66), (59, 45, 66), (59, 45, 66),
+ (60, 45, 66), (60, 45, 66), (60, 45, 66), (58, 46, 65),
+ (56, 47, 65), (51, 49, 63), (49, 51, 63), (47, 54, 64),
+ (46, 56, 65), (46, 59, 67), (47, 59, 68), (48, 59, 69),
+ (55, 59, 72), (57, 58, 72), (59, 58, 73), (59, 56, 72),
+ (59, 54, 71), (59, 53, 71), (59, 53, 71), (58, 51, 69),
+ (57, 50, 67), (56, 47, 65), (57, 47, 66), (59, 48, 68),
+ (62, 48, 70), (66, 49, 72), (66, 48, 71), (67, 47, 71),
+ (67, 47, 71), (65, 48, 71), (63, 50, 71), (58, 50, 68),
+ (53, 51, 66), (50, 51, 64), (48, 52, 63), (44, 52, 61),
+ (42, 55, 62), (44, 61, 64), (45, 62, 65), (46, 63, 66),
+ (47, 63, 67), (49, 64, 68), (53, 64, 71), (57, 64, 74),
+ (66, 62, 77), (70, 62, 79), (74, 62, 82), (78, 62, 84),
+ (83, 63, 86), (84, 60, 85), (85, 58, 85), (88, 55, 85),
+ (91, 53, 86), (96, 53, 88), (95, 49, 86), (95, 46, 84),
+ (95, 45, 84), (95, 45, 84), (95, 46, 84), (96, 48, 86),
+ (105, 48, 88), (116, 54, 94), (127, 60, 100), (133, 65, 104),
+ (140, 71, 109), (150, 81, 116), (161, 86, 122), (174, 91, 128),
+ (188, 98, 134), (209, 116, 148), (212, 121, 151), (215, 127, 155),
+ (214, 128, 154), (213, 130, 154), (209, 130, 153), (206, 129, 155),
+ (203, 131, 163), (201, 131, 164), (199, 131, 166), (198, 129, 165),
+ (197, 127, 164), (196, 124, 162), (194, 117, 160), (191, 110, 156),
+ (186, 102, 151), (173, 83, 131), (168, 77, 125), (164, 72, 120),
+ (153, 61, 108), (139, 53, 100), (126, 45, 92), (115, 40, 86),
+ (97, 36, 77), (90, 36, 75), (84, 36, 73), (83, 36, 73),
+ (82, 37, 73), (83, 39, 75), (91, 41, 78), (100, 46, 83),
+ (112, 52, 89), (141, 69, 107), (148, 73, 111), (155, 78, 116),
+ (169, 89, 124), (178, 97, 129), (183, 104, 137), (184, 108, 142),
+ (173, 112, 142), (161, 108, 135), (150, 104, 129), (143, 98, 125),
+ (136, 93, 121), (125, 84, 115), (112, 75, 107), (100, 66, 97),
+ (92, 61, 90), (83, 48, 79), (83, 45, 78), (83, 43, 77),
+ (83, 38, 75), (85, 36, 75), (88, 34, 75), (92, 32, 76),
+ (101, 29, 79), (103, 28, 79), (105, 27, 80), (108, 26, 81),
+ (111, 25, 82), (111, 25, 82), (109, 26, 81), (107, 27, 80),
+ (102, 29, 79), (91, 33, 76), (88, 35, 76), (86, 38, 76),
+ (80, 42, 75), (74, 46, 75), (70, 50, 75), (68, 50, 74),
+ (69, 52, 76), (70, 52, 76), (72, 52, 77), (76, 51, 79),
+ (81, 48, 80), (86, 44, 80), (91, 41, 81), (94, 39, 81),
+ (96, 38, 81), (95, 38, 81), (93, 40, 81), (89, 44, 80),
+ (86, 48, 80), (85, 54, 81), (85, 57, 82), (86, 57, 84),
+ (95, 55, 84), (97, 54, 85), (100, 54, 86), (107, 53, 89),
+ (111, 48, 90), (117, 41, 91), (120, 35, 88), (123, 29, 86),
+ (127, 27, 86), (126, 26, 86), (125, 26, 86), (125, 28, 85),
+ (128, 31, 86), (134, 37, 90), (141, 45, 95), (147, 56, 101),
+ (151, 66, 107), (151, 75, 110), (149, 81, 112), (147, 85, 112),
+ (142, 90, 113), (135, 91, 111), (126, 89, 107), (115, 85, 102),
+ (106, 76, 96), (101, 69, 91), (96, 59, 86), (93, 51, 83),
+ (92, 44, 81), (91, 38, 79), (92, 36, 78), (94, 34, 78),
+ (96, 32, 77), (99, 29, 78), (101, 29, 78), (105, 30, 80),
+ (110, 34, 83), (119, 42, 89), (132, 52, 98), (147, 63, 109),
+ (163, 75, 119), (178, 87, 128), (190, 98, 140), (201, 110, 153),
+ (210, 120, 166), (217, 129, 176), (222, 136, 180), (221, 139, 184),
+ (217, 138, 185), (211, 135, 186), (201, 131, 185), (198, 126, 177),
+ (194, 119, 169), (183, 114, 161), (170, 108, 151), (154, 106, 145),
+ (147, 105, 140), (148, 101, 137), (151, 101, 138), (148, 100, 136),
+ (138, 99, 132), (129, 100, 130), (123, 98, 127), (120, 98, 125),
+ (116, 96, 123), (108, 93, 117), (100, 89, 110), (93, 85, 105),
+ (83, 80, 97), (78, 76, 92), (78, 76, 93), (85, 79, 94)
+ ),
+
+// 688 040412-002
+((42, 85, 77), (18, 49, 50), (17, 49, 50), (16, 50, 50),
+ (15, 49, 49), (14, 49, 49), (13, 48, 48), (12, 47, 48),
+ (11, 46, 46), (10, 45, 45), (10, 44, 45), (10, 44, 45),
+ (10, 44, 45), (11, 44, 45), (13, 44, 46), (14, 44, 46),
+ (15, 44, 46), (17, 39, 42), (17, 35, 38), (17, 31, 34),
+ (16, 29, 31), (15, 27, 29), (15, 27, 29), (15, 28, 30),
+ (21, 40, 41), (29, 50, 49), (37, 61, 57), (43, 74, 67),
+ (50, 87, 77), (54, 93, 81), (59, 99, 86), (64, 110, 97),
+ (68, 120, 112), (79, 145, 143), (85, 157, 162), (91, 170, 181),
+ (97, 182, 193), (103, 194, 206), (104, 198, 210), (106, 202, 214),
+ (103, 195, 207), (101, 192, 204), (100, 189, 201), (100, 190, 202),
+ (101, 191, 203), (101, 190, 202), (101, 189, 201), (99, 185, 197),
+ (96, 179, 191), (85, 155, 167), (77, 145, 154), (70, 135, 141),
+ (65, 128, 132), (61, 122, 124), (58, 118, 118), (55, 114, 113),
+ (55, 100, 94), (56, 98, 90), (57, 96, 86), (59, 101, 91),
+ (61, 107, 97), (61, 110, 102), (61, 114, 107), (64, 120, 110),
+ (64, 119, 109), (58, 106, 97), (51, 92, 84), (45, 78, 71),
+ (41, 71, 66), (38, 65, 61), (30, 54, 52), (23, 45, 45),
+ (19, 36, 38), (19, 36, 38), (20, 37, 39), (21, 39, 42),
+ (23, 42, 45), (24, 44, 47), (25, 46, 49), (28, 53, 53),
+ (34, 60, 58), (42, 72, 66), (47, 77, 69), (53, 83, 72),
+ (53, 84, 73), (54, 85, 74), (53, 83, 73), (50, 80, 71),
+ (40, 72, 68), (36, 68, 66), (33, 65, 65), (32, 64, 65),
+ (31, 64, 66), (30, 66, 68), (30, 70, 72), (33, 76, 77),
+ (34, 81, 82), (37, 90, 90), (37, 90, 90), (38, 90, 90),
+ (37, 89, 89), (36, 88, 88), (34, 83, 84), (30, 78, 79),
+ (25, 68, 69), (24, 67, 68), (24, 67, 68), (25, 69, 70),
+ (27, 72, 72), (31, 77, 78), (37, 84, 84), (41, 92, 92),
+ (45, 98, 98), (50, 104, 105), (48, 104, 105), (47, 104, 105),
+ (49, 107, 108), (50, 110, 110), (51, 112, 112), (54, 117, 118),
+ (69, 136, 142), (75, 144, 152), (81, 153, 162), (83, 155, 165),
+ (86, 158, 169), (86, 157, 169), (81, 147, 158), (75, 135, 145),
+ (66, 119, 128), (48, 86, 91), (44, 80, 84), (40, 74, 77),
+ (34, 63, 66), (30, 57, 58), (26, 53, 54), (23, 51, 53),
+ (22, 51, 52), (22, 53, 52), (23, 55, 53), (23, 55, 54),
+ (24, 56, 55), (26, 57, 58), (30, 62, 61), (33, 68, 67),
+ (37, 74, 73), (45, 90, 87), (48, 94, 89), (51, 98, 92),
+ (53, 102, 97), (54, 105, 99), (55, 106, 97), (54, 103, 95),
+ (50, 96, 94), (48, 95, 93), (47, 94, 92), (47, 93, 94),
+ (46, 95, 98), (46, 99, 100), (46, 101, 102), (44, 101, 101),
+ (44, 101, 101), (44, 95, 94), (43, 92, 91), (42, 90, 89),
+ (41, 87, 87), (41, 83, 82), (39, 78, 78), (37, 75, 75),
+ (33, 67, 68), (32, 65, 67), (31, 64, 66), (30, 60, 63),
+ (29, 58, 62), (28, 59, 62), (32, 61, 65), (35, 64, 70),
+ (35, 69, 72), (37, 73, 74), (41, 74, 75), (39, 73, 72),
+ (35, 69, 70), (34, 65, 64), (31, 61, 61), (27, 58, 61),
+ (26, 63, 65), (26, 65, 67), (26, 68, 69), (28, 74, 75),
+ (33, 83, 84), (38, 92, 92), (44, 100, 100), (48, 107, 108),
+ (52, 114, 114), (57, 117, 119), (58, 117, 120), (55, 115, 116),
+ (52, 106, 109), (47, 96, 99), (41, 85, 85), (33, 71, 73),
+ (26, 59, 63), (26, 54, 58), (25, 54, 57), (28, 57, 63),
+ (36, 68, 76), (46, 86, 92), (57, 104, 112), (70, 126, 135),
+ (81, 147, 158), (91, 170, 181), (101, 190, 202), (105, 199, 212),
+ (105, 198, 211), (102, 192, 204), (95, 178, 189), (85, 156, 167),
+ (73, 132, 143), (63, 113, 122), (55, 99, 106), (48, 89, 94),
+ (45, 84, 87), (43, 84, 86), (41, 87, 87), (42, 91, 90),
+ (46, 97, 97), (48, 102, 103), (49, 105, 106), (53, 109, 107),
+ (56, 112, 107), (58, 111, 106), (61, 112, 103), (63, 115, 104),
+ (64, 117, 105), (67, 121, 107), (68, 125, 111), (66, 127, 116),
+ (64, 128, 121), (66, 131, 124), (64, 131, 127), (62, 129, 130),
+ (62, 129, 130), (61, 129, 129), (60, 126, 126), (58, 123, 123),
+ (59, 120, 117), (57, 116, 111), (54, 111, 109), (52, 106, 103),
+ (51, 101, 96), (48, 95, 93), (49, 92, 89), (52, 92, 87),
+ (53, 97, 90), (59, 104, 93), (52, 89, 81), (40, 76, 72)
+ ),
+
+// 689 040412-005
+((48, 130, 119), (77, 132, 126), (88, 143, 127), (99, 154, 128),
+ (111, 176, 108), (123, 198, 88), (128, 204, 81), (134, 211, 75),
+ (146, 207, 66), (148, 199, 66), (150, 192, 67), (146, 184, 66),
+ (143, 176, 66), (128, 159, 70), (113, 143, 75), (105, 138, 77),
+ (98, 134, 79), (77, 105, 98), (70, 93, 114), (64, 81, 130),
+ (49, 68, 145), (34, 55, 160), (31, 52, 165), (28, 49, 170),
+ (44, 42, 161), (56, 44, 145), (68, 46, 129), (61, 43, 131),
+ (55, 41, 133), (55, 39, 137), (56, 37, 141), (61, 32, 156),
+ (72, 21, 155), (106, 20, 113), (103, 19, 101), (101, 18, 90),
+ (84, 17, 112), (68, 17, 134), (69, 17, 142), (71, 17, 151),
+ (70, 31, 161), (71, 38, 162), (73, 45, 163), (57, 49, 180),
+ (42, 54, 198), (34, 55, 208), (26, 57, 219), (12, 60, 232),
+ (7, 62, 235), (5, 67, 237), (4, 66, 237), (3, 66, 237),
+ (3, 67, 237), (3, 68, 237), (4, 69, 237), (5, 70, 237),
+ (5, 76, 236), (5, 79, 238), (6, 83, 240), (21, 91, 238),
+ (37, 99, 236), (46, 104, 233), (55, 109, 230), (71, 118, 222),
+ (82, 126, 212), (93, 127, 198), (94, 125, 191), (96, 124, 184),
+ (96, 123, 180), (97, 123, 176), (93, 124, 166), (84, 122, 160),
+ (59, 106, 163), (45, 93, 169), (31, 81, 175), (28, 71, 179),
+ (25, 61, 184), (33, 61, 183), (41, 62, 182), (60, 68, 180),
+ (79, 74, 179), (106, 89, 181), (120, 86, 185), (135, 84, 190),
+ (141, 85, 190), (148, 86, 190), (151, 84, 187), (146, 82, 183),
+ (118, 81, 172), (104, 68, 173), (91, 55, 174), (82, 48, 174),
+ (74, 41, 174), (55, 28, 176), (37, 23, 173), (21, 23, 169),
+ (5, 23, 163), (0, 28, 151), (0, 27, 149), (0, 27, 147),
+ (0, 26, 147), (0, 25, 147), (0, 25, 148), (2, 26, 149),
+ (26, 30, 154), (42, 29, 157), (59, 28, 160), (68, 27, 161),
+ (77, 27, 163), (90, 26, 163), (99, 28, 169), (115, 31, 173),
+ (134, 37, 177), (166, 65, 174), (170, 75, 167), (175, 85, 161),
+ (174, 106, 143), (171, 122, 126), (170, 131, 112), (170, 129, 97),
+ (172, 115, 97), (169, 113, 96), (167, 112, 96), (160, 114, 98),
+ (153, 116, 100), (136, 105, 98), (121, 84, 104), (108, 61, 115),
+ (92, 42, 128), (88, 26, 140), (88, 27, 137), (88, 29, 135),
+ (85, 29, 122), (83, 28, 106), (83, 23, 92), (82, 22, 94),
+ (116, 29, 93), (135, 42, 90), (155, 56, 88), (162, 62, 84),
+ (170, 68, 81), (169, 85, 81), (168, 103, 81), (166, 115, 84),
+ (167, 135, 84), (171, 171, 78), (170, 180, 72), (169, 190, 67),
+ (165, 208, 51), (157, 216, 36), (148, 224, 23), (141, 229, 9),
+ (124, 222, 15), (117, 216, 24), (111, 211, 34), (98, 199, 53),
+ (94, 193, 73), (93, 192, 89), (93, 191, 96), (98, 197, 105),
+ (99, 198, 114), (95, 192, 119), (97, 194, 120), (100, 196, 121),
+ (111, 199, 115), (124, 207, 117), (137, 212, 120), (140, 213, 120),
+ (127, 183, 124), (120, 178, 123), (114, 174, 122), (100, 164, 135),
+ (84, 154, 150), (72, 148, 165), (77, 148, 174), (76, 140, 182),
+ (78, 142, 172), (78, 146, 161), (76, 154, 144), (63, 159, 128),
+ (64, 174, 119), (60, 174, 126), (62, 176, 130), (63, 176, 137),
+ (60, 171, 142), (57, 170, 143), (54, 170, 145), (39, 159, 163),
+ (26, 145, 185), (14, 132, 209), (4, 119, 233), (0, 103, 242),
+ (0, 95, 243), (0, 89, 241), (1, 81, 237), (2, 73, 233),
+ (7, 68, 228), (20, 65, 223), (33, 68, 212), (46, 80, 188),
+ (61, 92, 164), (74, 105, 141), (79, 118, 119), (93, 129, 102),
+ (104, 140, 95), (111, 158, 74), (120, 175, 53), (124, 191, 36),
+ (112, 193, 32), (101, 187, 33), (96, 174, 53), (98, 158, 73),
+ (103, 143, 89), (115, 144, 90), (122, 135, 101), (119, 136, 96),
+ (117, 138, 97), (121, 139, 98), (129, 136, 101), (143, 152, 93),
+ (157, 155, 102), (162, 163, 99), (155, 167, 100), (137, 170, 99),
+ (123, 176, 92), (109, 189, 75), (94, 192, 72), (85, 198, 68),
+ (85, 194, 71), (74, 184, 78), (71, 178, 81), (69, 179, 70),
+ (61, 183, 54), (53, 193, 41), (50, 193, 41), (46, 186, 50),
+ (44, 178, 69), (43, 171, 90), (42, 165, 104), (39, 166, 117),
+ (30, 158, 139), (19, 148, 158), (10, 140, 178), (3, 131, 196),
+ (0, 122, 204), (0, 119, 201), (0, 115, 196), (0, 110, 190),
+ (0, 104, 184), (0, 97, 178), (0, 92, 173), (0, 83, 167),
+ (0, 79, 159), (6, 88, 148), (19, 100, 131), (34, 114, 118)
+ ),
+
+// 690 040412-006
+((42, 112, 82), (71, 97, 64), (77, 84, 59), (83, 72, 55),
+ (92, 65, 50), (101, 58, 46), (106, 54, 44), (112, 51, 43),
+ (129, 66, 44), (136, 69, 39), (144, 72, 35), (134, 66, 39),
+ (125, 61, 43), (114, 56, 48), (104, 52, 53), (97, 51, 58),
+ (91, 50, 63), (77, 46, 73), (76, 49, 69), (76, 52, 65),
+ (74, 52, 63), (72, 52, 62), (72, 50, 62), (73, 48, 62),
+ (74, 35, 74), (81, 26, 80), (89, 18, 86), (104, 13, 83),
+ (120, 9, 81), (128, 6, 79), (136, 4, 78), (152, 1, 72),
+ (166, 0, 67), (191, 0, 65), (192, 0, 70), (194, 0, 76),
+ (188, 3, 79), (183, 7, 82), (177, 11, 82), (171, 15, 83),
+ (145, 31, 83), (133, 40, 85), (121, 49, 88), (109, 54, 95),
+ (98, 60, 102), (90, 63, 106), (82, 66, 111), (67, 74, 119),
+ (50, 83, 126), (25, 101, 121), (20, 112, 113), (16, 123, 105),
+ (23, 127, 96), (31, 132, 88), (34, 133, 83), (38, 135, 79),
+ (47, 138, 67), (47, 138, 60), (48, 139, 54), (48, 139, 54),
+ (48, 140, 54), (48, 140, 55), (48, 141, 56), (48, 142, 59),
+ (49, 144, 64), (45, 144, 82), (38, 141, 92), (31, 138, 103),
+ (27, 137, 108), (23, 136, 113), (16, 134, 121), (9, 130, 129),
+ (11, 130, 129), (21, 130, 121), (31, 130, 113), (40, 123, 104),
+ (50, 116, 96), (51, 112, 92), (53, 108, 88), (48, 98, 87),
+ (46, 93, 79), (46, 95, 59), (55, 101, 46), (64, 107, 34),
+ (70, 108, 29), (77, 109, 24), (87, 111, 15), (91, 109, 15),
+ (86, 103, 19), (80, 108, 19), (74, 114, 19), (72, 120, 18),
+ (71, 126, 17), (69, 133, 21), (69, 141, 26), (69, 146, 30),
+ (69, 149, 34), (64, 147, 42), (65, 148, 38), (67, 149, 35),
+ (67, 149, 34), (67, 149, 33), (66, 148, 33), (64, 149, 33),
+ (55, 146, 42), (48, 137, 45), (41, 129, 48), (41, 125, 46),
+ (41, 122, 44), (43, 114, 37), (51, 104, 30), (64, 100, 21),
+ (78, 97, 13), (96, 99, 10), (98, 98, 10), (101, 97, 10),
+ (106, 94, 11), (103, 90, 12), (106, 79, 14), (116, 67, 18),
+ (137, 48, 32), (148, 48, 38), (160, 49, 44), (159, 52, 46),
+ (159, 56, 49), (148, 66, 56), (134, 75, 61), (125, 78, 66),
+ (124, 78, 71), (125, 61, 85), (132, 55, 87), (139, 50, 89),
+ (141, 42, 88), (140, 40, 88), (135, 47, 84), (124, 57, 77),
+ (121, 84, 59), (127, 87, 54), (133, 90, 49), (139, 87, 45),
+ (145, 85, 41), (147, 78, 37), (146, 72, 32), (136, 69, 30),
+ (124, 69, 28), (108, 94, 18), (104, 100, 18), (100, 106, 19),
+ (104, 116, 14), (97, 120, 14), (85, 120, 21), (72, 117, 31),
+ (41, 109, 55), (40, 107, 59), (40, 106, 64), (42, 99, 72),
+ (56, 95, 77), (72, 94, 73), (84, 89, 75), (96, 84, 77),
+ (105, 73, 85), (113, 59, 93), (117, 53, 93), (122, 47, 94),
+ (133, 36, 94), (149, 28, 86), (163, 20, 78), (177, 13, 68),
+ (191, 7, 55), (191, 10, 51), (192, 13, 48), (191, 19, 40),
+ (190, 28, 31), (191, 38, 23), (190, 48, 15), (189, 55, 7),
+ (185, 65, 3), (180, 75, 1), (175, 85, 0), (167, 94, 0),
+ (160, 105, 0), (153, 116, 0), (146, 127, 0), (141, 135, 0),
+ (133, 150, 0), (131, 152, 0), (130, 154, 0), (126, 157, 0),
+ (122, 158, 0), (118, 159, 0), (115, 160, 0), (113, 160, 0),
+ (112, 161, 0), (113, 160, 0), (116, 155, 0), (117, 144, 4),
+ (120, 132, 11), (125, 121, 20), (130, 108, 30), (134, 96, 38),
+ (137, 85, 46), (137, 77, 51), (135, 72, 52), (128, 61, 54),
+ (119, 53, 58), (110, 47, 64), (102, 42, 73), (94, 39, 83),
+ (87, 38, 97), (81, 39, 109), (72, 49, 117), (64, 55, 123),
+ (52, 63, 126), (39, 71, 127), (26, 78, 128), (15, 85, 128),
+ (15, 89, 133), (20, 89, 138), (26, 90, 144), (36, 87, 149),
+ (47, 83, 152), (56, 78, 155), (56, 77, 154), (48, 77, 149),
+ (47, 76, 144), (47, 68, 138), (49, 59, 130), (58, 50, 122),
+ (73, 40, 109), (96, 30, 101), (109, 26, 91), (110, 28, 84),
+ (101, 35, 79), (89, 42, 78), (73, 50, 76), (57, 58, 80),
+ (48, 62, 78), (50, 62, 78), (52, 60, 73), (62, 62, 71),
+ (62, 65, 69), (59, 69, 71), (50, 76, 76), (36, 85, 86),
+ (22, 92, 97), (9, 98, 109), (0, 102, 117), (0, 105, 122),
+ (0, 107, 123), (3, 97, 118), (3, 91, 114), (3, 87, 110),
+ (7, 91, 102), (14, 96, 96), (23, 101, 90), (34, 103, 84)
+ ),
+
+// 691 040412-007
+((108, 129, 87), (98, 136, 98), (113, 138, 101), (128, 140, 105),
+ (134, 123, 114), (140, 106, 123), (122, 105, 130), (105, 105, 138),
+ (105, 105, 140), (122, 103, 133), (139, 101, 126), (141, 95, 117),
+ (144, 90, 108), (146, 81, 99), (148, 73, 91), (148, 68, 87),
+ (148, 64, 84), (148, 46, 70), (148, 40, 64), (148, 34, 58),
+ (148, 31, 58), (148, 28, 58), (148, 27, 58), (149, 27, 58),
+ (147, 27, 59), (143, 27, 59), (139, 27, 59), (132, 27, 59),
+ (126, 28, 59), (123, 27, 59), (120, 27, 60), (115, 26, 62),
+ (112, 25, 63), (108, 22, 67), (107, 20, 69), (107, 18, 71),
+ (107, 18, 71), (107, 18, 71), (107, 19, 70), (107, 21, 70),
+ (109, 32, 76), (109, 39, 82), (110, 47, 88), (110, 57, 97),
+ (111, 68, 106), (108, 72, 111), (105, 77, 117), (90, 86, 123),
+ (86, 114, 128), (87, 145, 138), (87, 155, 141), (87, 165, 144),
+ (84, 175, 147), (82, 185, 151), (80, 189, 153), (79, 193, 155),
+ (76, 202, 154), (76, 202, 149), (76, 203, 144), (77, 197, 137),
+ (79, 192, 131), (79, 187, 127), (79, 183, 123), (77, 176, 113),
+ (75, 168, 104), (73, 151, 88), (72, 143, 78), (71, 135, 68),
+ (73, 132, 65), (76, 129, 63), (82, 120, 58), (84, 111, 53),
+ (81, 94, 44), (78, 86, 43), (75, 79, 42), (71, 73, 41),
+ (67, 67, 40), (64, 66, 41), (62, 65, 42), (64, 57, 43),
+ (64, 44, 44), (64, 41, 55), (64, 40, 56), (65, 39, 58),
+ (65, 39, 58), (65, 39, 58), (65, 39, 58), (65, 39, 58),
+ (67, 40, 52), (70, 39, 53), (74, 39, 54), (76, 38, 54),
+ (78, 37, 55), (83, 36, 56), (88, 36, 56), (92, 41, 56),
+ (97, 45, 54), (104, 65, 52), (110, 74, 53), (116, 84, 54),
+ (119, 87, 55), (122, 90, 57), (129, 94, 59), (135, 94, 64),
+ (143, 102, 75), (144, 109, 78), (146, 116, 82), (147, 120, 82),
+ (148, 125, 83), (147, 128, 81), (144, 136, 80), (140, 140, 77),
+ (134, 138, 72), (119, 131, 68), (116, 129, 68), (113, 127, 69),
+ (104, 124, 65), (100, 122, 65), (102, 120, 64), (104, 118, 64),
+ (108, 117, 58), (110, 115, 56), (113, 113, 54), (113, 111, 54),
+ (114, 109, 54), (113, 107, 56), (115, 104, 57), (118, 99, 59),
+ (123, 90, 60), (132, 80, 63), (133, 77, 63), (134, 75, 63),
+ (137, 69, 65), (138, 64, 68), (136, 63, 72), (134, 60, 75),
+ (125, 49, 78), (120, 44, 77), (116, 40, 76), (113, 38, 74),
+ (110, 37, 73), (104, 36, 68), (98, 34, 65), (92, 33, 62),
+ (88, 32, 61), (79, 31, 62), (78, 31, 62), (78, 31, 63),
+ (77, 31, 62), (78, 31, 63), (79, 30, 63), (81, 31, 62),
+ (89, 32, 61), (91, 34, 61), (93, 36, 61), (97, 40, 60),
+ (104, 44, 60), (112, 47, 60), (120, 49, 59), (129, 50, 56),
+ (137, 51, 54), (155, 53, 51), (158, 55, 50), (162, 58, 50),
+ (165, 66, 51), (170, 74, 52), (173, 85, 55), (174, 97, 59),
+ (174, 124, 69), (173, 129, 71), (173, 135, 73), (173, 141, 76),
+ (175, 143, 77), (176, 141, 75), (177, 139, 74), (178, 137, 73),
+ (177, 131, 74), (176, 126, 74), (173, 121, 75), (167, 120, 77),
+ (159, 119, 78), (151, 118, 78), (144, 118, 77), (137, 115, 73),
+ (136, 107, 64), (138, 105, 63), (140, 103, 62), (143, 100, 60),
+ (144, 100, 62), (143, 104, 66), (139, 110, 72), (134, 123, 77),
+ (120, 133, 82), (103, 135, 83), (96, 137, 83), (100, 137, 83),
+ (113, 136, 85), (129, 135, 87), (140, 124, 89), (147, 112, 90),
+ (153, 107, 91), (156, 100, 93), (153, 94, 96), (149, 89, 100),
+ (145, 81, 101), (142, 72, 99), (139, 63, 92), (136, 54, 84),
+ (132, 46, 77), (131, 41, 68), (130, 36, 62), (130, 37, 59),
+ (130, 39, 61), (128, 44, 64), (126, 50, 69), (124, 54, 75),
+ (123, 57, 77), (122, 60, 80), (123, 60, 79), (125, 59, 75),
+ (129, 58, 72), (136, 57, 69), (143, 58, 69), (150, 62, 69),
+ (157, 68, 68), (161, 74, 71), (165, 79, 74), (170, 84, 76),
+ (173, 85, 75), (176, 85, 70), (181, 80, 64), (185, 71, 59),
+ (190, 70, 52), (196, 70, 47), (196, 66, 45), (192, 67, 45),
+ (186, 71, 45), (179, 76, 45), (171, 82, 44), (163, 86, 42),
+ (154, 85, 41), (146, 83, 39), (144, 85, 36), (143, 78, 34),
+ (142, 72, 32), (141, 67, 32), (141, 60, 34), (140, 56, 35),
+ (133, 50, 38), (129, 49, 41), (123, 51, 47), (119, 63, 52),
+ (114, 76, 59), (112, 91, 66), (112, 109, 72), (104, 120, 79)
+ ),
+
+// 692 040412-008
+((58, 76, 155), (56, 80, 157), (54, 82, 159), (53, 85, 161),
+ (50, 89, 164), (47, 94, 167), (44, 97, 169), (42, 100, 171),
+ (35, 110, 180), (33, 113, 182), (31, 117, 185), (30, 118, 186),
+ (30, 120, 187), (29, 122, 188), (29, 125, 190), (29, 126, 190),
+ (29, 127, 190), (29, 125, 190), (30, 123, 188), (31, 121, 187),
+ (34, 117, 185), (38, 114, 183), (39, 111, 181), (41, 108, 179),
+ (46, 96, 167), (50, 88, 160), (54, 80, 153), (59, 70, 147),
+ (65, 61, 141), (69, 59, 139), (73, 57, 137), (80, 53, 133),
+ (86, 50, 131), (97, 46, 127), (100, 44, 124), (104, 43, 121),
+ (104, 42, 118), (105, 42, 116), (106, 41, 115), (108, 41, 114),
+ (109, 34, 112), (109, 32, 109), (110, 30, 106), (111, 28, 107),
+ (113, 27, 108), (114, 26, 107), (116, 26, 106), (116, 26, 106),
+ (117, 25, 106), (116, 25, 100), (118, 25, 96), (120, 25, 93),
+ (121, 25, 89), (123, 25, 86), (123, 25, 85), (124, 25, 84),
+ (127, 25, 82), (127, 25, 81), (127, 25, 80), (124, 25, 80),
+ (121, 25, 80), (120, 25, 80), (119, 25, 80), (114, 25, 82),
+ (110, 25, 84), (104, 25, 84), (104, 28, 90), (104, 31, 96),
+ (103, 34, 100), (102, 38, 105), (102, 45, 110), (100, 51, 117),
+ (92, 61, 129), (86, 65, 133), (80, 69, 137), (74, 73, 140),
+ (68, 77, 143), (66, 79, 144), (64, 82, 145), (58, 90, 149),
+ (53, 98, 156), (43, 116, 169), (40, 125, 176), (38, 135, 184),
+ (38, 139, 188), (38, 144, 192), (41, 152, 200), (41, 163, 207),
+ (41, 169, 212), (42, 166, 210), (43, 164, 208), (44, 160, 207),
+ (46, 157, 206), (46, 152, 200), (49, 144, 196), (47, 136, 192),
+ (49, 129, 190), (56, 117, 184), (58, 112, 181), (61, 108, 179),
+ (63, 104, 177), (66, 101, 176), (70, 94, 173), (74, 89, 171),
+ (84, 82, 168), (88, 79, 166), (92, 76, 164), (93, 74, 162),
+ (94, 73, 160), (98, 68, 157), (104, 64, 153), (106, 58, 151),
+ (109, 57, 147), (104, 51, 140), (102, 51, 139), (101, 51, 139),
+ (93, 53, 137), (86, 54, 137), (77, 57, 139), (68, 60, 139),
+ (56, 65, 139), (52, 67, 139), (49, 70, 139), (47, 69, 137),
+ (46, 68, 136), (45, 68, 136), (46, 69, 136), (46, 73, 137),
+ (43, 77, 140), (43, 84, 144), (42, 84, 143), (41, 84, 143),
+ (38, 82, 140), (35, 81, 139), (31, 80, 139), (29, 78, 136),
+ (25, 70, 133), (25, 70, 133), (25, 70, 133), (25, 71, 134),
+ (25, 72, 135), (25, 77, 137), (25, 80, 140), (25, 80, 140),
+ (26, 78, 140), (31, 76, 136), (32, 72, 132), (33, 68, 129),
+ (35, 56, 123), (38, 43, 114), (41, 35, 106), (45, 30, 100),
+ (49, 26, 97), (51, 26, 96), (53, 26, 96), (57, 26, 96),
+ (65, 27, 94), (73, 27, 93), (82, 26, 92), (92, 25, 89),
+ (97, 25, 85), (110, 25, 76), (113, 25, 74), (116, 25, 73),
+ (120, 25, 70), (123, 25, 70), (125, 25, 68), (125, 25, 70),
+ (127, 25, 72), (127, 25, 72), (128, 25, 72), (128, 25, 73),
+ (131, 25, 73), (132, 25, 73), (135, 25, 73), (136, 25, 73),
+ (137, 25, 74), (137, 25, 74), (137, 25, 76), (136, 25, 80),
+ (135, 25, 82), (132, 25, 88), (129, 25, 93), (125, 25, 101),
+ (114, 25, 120), (109, 27, 123), (104, 29, 127), (96, 34, 135),
+ (85, 42, 140), (73, 50, 147), (60, 58, 153), (54, 69, 160),
+ (47, 84, 165), (42, 93, 172), (35, 102, 177), (31, 112, 183),
+ (26, 120, 188), (25, 128, 194), (25, 135, 196), (25, 137, 199),
+ (25, 137, 199), (25, 136, 199), (25, 135, 196), (25, 129, 194),
+ (26, 125, 190), (27, 120, 184), (30, 116, 179), (31, 109, 173),
+ (31, 104, 168), (30, 96, 164), (30, 90, 159), (30, 84, 152),
+ (30, 74, 147), (29, 68, 140), (30, 58, 135), (33, 47, 129),
+ (37, 41, 123), (41, 35, 120), (43, 35, 117), (45, 35, 119),
+ (42, 39, 120), (38, 46, 123), (34, 53, 127), (31, 60, 129),
+ (27, 62, 132), (26, 64, 135), (25, 64, 136), (26, 60, 136),
+ (29, 58, 136), (33, 57, 136), (38, 54, 139), (41, 54, 140),
+ (43, 58, 143), (46, 65, 147), (46, 70, 152), (46, 78, 157),
+ (45, 86, 164), (42, 94, 169), (41, 98, 173), (39, 101, 175),
+ (39, 101, 175), (41, 98, 173), (42, 94, 171), (46, 90, 167),
+ (49, 85, 163), (53, 80, 159), (51, 84, 160), (50, 85, 161),
+ (50, 88, 161), (49, 88, 161), (50, 88, 161), (50, 88, 161),
+ (50, 85, 161), (51, 85, 161), (53, 85, 161), (54, 85, 160)
+ ),
+
+// 693 040412-010
+((105, 129, 103), (109, 131, 103), (110, 132, 103), (112, 133, 103),
+ (114, 134, 103), (116, 135, 103), (116, 135, 103), (117, 136, 103),
+ (120, 137, 102), (121, 137, 101), (123, 138, 101), (124, 138, 100),
+ (126, 138, 100), (127, 138, 99), (128, 138, 98), (128, 138, 97),
+ (129, 138, 97), (131, 138, 95), (131, 138, 94), (132, 138, 93),
+ (133, 138, 92), (134, 138, 92), (134, 138, 91), (134, 138, 91),
+ (135, 137, 90), (135, 137, 89), (136, 137, 88), (135, 135, 86),
+ (134, 133, 84), (132, 132, 82), (131, 131, 81), (128, 128, 77),
+ (126, 126, 74), (120, 121, 68), (117, 118, 65), (115, 116, 63),
+ (112, 114, 60), (109, 112, 57), (108, 110, 56), (107, 109, 55),
+ (102, 105, 51), (99, 103, 49), (97, 101, 47), (94, 99, 45),
+ (92, 97, 43), (90, 96, 42), (89, 95, 42), (87, 93, 40),
+ (84, 91, 39), (79, 87, 36), (77, 85, 35), (75, 84, 34),
+ (72, 82, 33), (70, 81, 33), (69, 80, 32), (68, 79, 32),
+ (63, 76, 31), (61, 74, 31), (59, 73, 31), (57, 72, 31),
+ (55, 71, 31), (54, 70, 31), (53, 70, 31), (52, 69, 31),
+ (50, 68, 32), (47, 66, 33), (45, 65, 33), (44, 65, 34),
+ (43, 64, 34), (42, 64, 35), (41, 64, 36), (40, 64, 36),
+ (38, 63, 38), (37, 63, 39), (36, 63, 40), (35, 62, 41),
+ (34, 62, 42), (33, 62, 42), (33, 62, 43), (32, 62, 44),
+ (31, 62, 45), (30, 62, 46), (29, 62, 47), (29, 62, 48),
+ (28, 62, 48), (28, 63, 48), (28, 63, 49), (27, 63, 50),
+ (26, 63, 51), (26, 63, 51), (26, 64, 52), (25, 64, 52),
+ (25, 64, 53), (25, 65, 53), (25, 65, 54), (25, 66, 54),
+ (25, 66, 55), (25, 68, 56), (26, 69, 57), (28, 71, 59),
+ (30, 72, 60), (32, 74, 62), (35, 77, 65), (38, 80, 68),
+ (45, 85, 74), (48, 87, 76), (51, 90, 79), (52, 91, 80),
+ (54, 93, 81), (58, 95, 83), (61, 98, 86), (64, 100, 88),
+ (67, 103, 89), (73, 107, 93), (74, 108, 93), (76, 109, 94),
+ (79, 112, 96), (82, 114, 97), (84, 116, 98), (87, 118, 100),
+ (92, 121, 102), (94, 122, 102), (97, 124, 103), (98, 125, 103),
+ (99, 126, 104), (102, 127, 105), (104, 129, 105), (106, 130, 105),
+ (105, 129, 103), (109, 131, 103), (110, 131, 103), (111, 132, 103),
+ (112, 133, 103), (114, 134, 103), (116, 135, 103), (117, 136, 103),
+ (120, 137, 102), (121, 137, 101), (123, 138, 101), (123, 138, 100),
+ (124, 138, 100), (126, 138, 100), (127, 138, 99), (128, 138, 98),
+ (129, 138, 97), (131, 138, 95), (131, 138, 94), (131, 138, 94),
+ (132, 138, 93), (133, 138, 92), (134, 138, 92), (134, 138, 91),
+ (135, 137, 90), (135, 137, 89), (136, 137, 89), (136, 137, 88),
+ (137, 136, 88), (134, 133, 84), (131, 131, 81), (128, 128, 77),
+ (126, 126, 74), (120, 121, 68), (118, 120, 66), (117, 119, 65),
+ (115, 116, 63), (112, 114, 60), (109, 112, 57), (107, 109, 55),
+ (102, 105, 51), (100, 104, 50), (99, 103, 49), (97, 101, 47),
+ (94, 99, 45), (92, 97, 43), (89, 95, 42), (87, 93, 40),
+ (84, 91, 39), (82, 89, 37), (79, 87, 36), (77, 86, 35),
+ (75, 84, 34), (72, 82, 33), (70, 81, 33), (68, 79, 32),
+ (63, 76, 31), (62, 75, 31), (61, 75, 31), (59, 73, 31),
+ (57, 72, 31), (55, 71, 31), (53, 70, 31), (52, 69, 31),
+ (50, 68, 32), (48, 67, 32), (47, 66, 33), (45, 66, 33),
+ (44, 65, 34), (42, 64, 35), (41, 64, 36), (40, 64, 36),
+ (39, 63, 37), (38, 63, 38), (37, 63, 39), (36, 63, 40),
+ (35, 62, 41), (34, 62, 42), (33, 62, 43), (32, 62, 44),
+ (31, 62, 45), (31, 62, 46), (30, 62, 46), (29, 62, 47),
+ (29, 62, 48), (28, 63, 48), (28, 63, 49), (27, 63, 50),
+ (27, 63, 50), (26, 63, 51), (26, 64, 52), (26, 64, 52),
+ (25, 64, 53), (25, 65, 53), (25, 65, 54), (25, 66, 54),
+ (25, 66, 55), (25, 67, 55), (25, 68, 56), (25, 68, 56),
+ (28, 71, 59), (32, 74, 62), (35, 77, 65), (38, 80, 68),
+ (42, 82, 71), (45, 85, 74), (48, 88, 76), (51, 90, 79),
+ (54, 93, 81), (58, 95, 83), (61, 98, 86), (64, 100, 88),
+ (67, 103, 89), (70, 105, 91), (73, 107, 93), (76, 109, 94),
+ (79, 112, 96), (82, 114, 97), (84, 116, 98), (87, 118, 100),
+ (90, 119, 101), (92, 121, 102), (95, 123, 102), (97, 124, 103),
+ (99, 126, 104), (102, 127, 105), (104, 129, 105), (106, 130, 105)
+ ),
+
+// 694 040412-011
+((126, 48, 55), (118, 44, 69), (114, 43, 73), (110, 42, 78),
+ (106, 41, 80), (103, 40, 83), (101, 39, 84), (99, 38, 86),
+ (92, 38, 92), (87, 36, 89), (83, 34, 87), (77, 33, 85),
+ (72, 33, 83), (70, 32, 80), (69, 31, 78), (68, 30, 77),
+ (67, 30, 76), (63, 30, 71), (63, 30, 69), (63, 30, 67),
+ (63, 30, 63), (63, 30, 59), (62, 30, 57), (62, 30, 55),
+ (66, 29, 54), (67, 28, 56), (69, 28, 58), (71, 27, 59),
+ (73, 27, 60), (74, 26, 60), (75, 26, 61), (77, 26, 62),
+ (79, 25, 64), (83, 24, 67), (85, 23, 68), (88, 23, 70),
+ (90, 22, 71), (93, 21, 73), (94, 21, 73), (96, 21, 74),
+ (101, 19, 78), (104, 18, 80), (107, 18, 82), (110, 17, 83),
+ (113, 16, 85), (114, 15, 85), (116, 15, 85), (119, 14, 87),
+ (122, 14, 89), (129, 12, 88), (132, 11, 88), (136, 10, 88),
+ (139, 9, 88), (143, 8, 88), (145, 7, 86), (147, 7, 85),
+ (154, 5, 83), (157, 4, 81), (161, 3, 79), (165, 2, 75),
+ (169, 1, 71), (170, 0, 70), (172, 0, 69), (176, 2, 66),
+ (180, 4, 61), (187, 6, 52), (190, 8, 46), (194, 10, 41),
+ (195, 11, 39), (197, 12, 38), (201, 15, 29), (204, 17, 22),
+ (211, 33, 16), (214, 40, 14), (218, 48, 12), (220, 56, 10),
+ (223, 65, 9), (224, 69, 8), (226, 74, 8), (228, 81, 6),
+ (231, 87, 4), (234, 100, 2), (236, 107, 1), (238, 115, 0),
+ (238, 118, 0), (239, 122, 0), (240, 126, 0), (241, 131, 0),
+ (242, 144, 0), (242, 147, 0), (243, 150, 0), (243, 153, 0),
+ (243, 156, 0), (243, 160, 0), (243, 161, 0), (243, 162, 1),
+ (242, 165, 2), (241, 168, 5), (240, 169, 6), (239, 170, 8),
+ (238, 169, 9), (238, 168, 10), (237, 166, 12), (235, 165, 15),
+ (229, 163, 19), (225, 161, 19), (221, 159, 19), (219, 158, 19),
+ (217, 157, 20), (212, 156, 21), (208, 152, 21), (204, 149, 24),
+ (199, 147, 24), (190, 139, 26), (187, 137, 27), (185, 135, 29),
+ (180, 129, 31), (176, 125, 31), (171, 118, 33), (166, 113, 35),
+ (156, 98, 39), (151, 92, 40), (146, 86, 41), (144, 83, 41),
+ (142, 80, 42), (137, 72, 44), (133, 63, 45), (128, 58, 46),
+ (126, 48, 55), (118, 44, 69), (116, 43, 71), (114, 43, 73),
+ (110, 42, 78), (106, 41, 81), (103, 40, 83), (99, 38, 86),
+ (92, 38, 92), (87, 36, 89), (83, 34, 87), (80, 34, 86),
+ (78, 34, 85), (72, 33, 83), (69, 32, 80), (69, 31, 78),
+ (67, 30, 76), (63, 30, 71), (62, 29, 70), (61, 29, 69),
+ (63, 30, 67), (65, 30, 65), (63, 30, 59), (62, 30, 55),
+ (66, 29, 54), (66, 29, 56), (67, 29, 59), (69, 28, 58),
+ (71, 27, 58), (73, 27, 60), (75, 26, 61), (77, 26, 62),
+ (79, 25, 64), (83, 24, 67), (84, 24, 68), (85, 24, 69),
+ (88, 23, 70), (90, 22, 71), (93, 21, 73), (96, 21, 74),
+ (101, 19, 78), (102, 18, 79), (104, 18, 80), (107, 18, 82),
+ (110, 17, 83), (113, 16, 85), (116, 15, 85), (119, 14, 87),
+ (122, 14, 89), (126, 13, 87), (129, 12, 88), (132, 11, 88),
+ (136, 10, 88), (139, 9, 88), (143, 8, 88), (147, 7, 85),
+ (154, 5, 83), (156, 4, 82), (158, 4, 82), (161, 3, 79),
+ (165, 2, 75), (169, 1, 71), (172, 0, 69), (176, 2, 66),
+ (180, 4, 61), (183, 5, 58), (187, 6, 52), (190, 8, 49),
+ (194, 10, 41), (197, 12, 38), (201, 15, 29), (204, 17, 22),
+ (208, 23, 17), (211, 33, 16), (215, 42, 14), (218, 48, 12),
+ (221, 57, 10), (223, 65, 9), (226, 74, 8), (228, 81, 6),
+ (231, 87, 4), (233, 95, 3), (234, 100, 2), (236, 108, 1),
+ (238, 115, 0), (239, 122, 0), (240, 126, 0), (241, 131, 0),
+ (242, 137, 0), (242, 144, 0), (243, 147, 0), (243, 150, 0),
+ (243, 156, 0), (243, 160, 0), (243, 161, 0), (243, 162, 1),
+ (242, 165, 2), (242, 165, 3), (241, 168, 5), (240, 168, 7),
+ (239, 170, 8), (238, 168, 10), (237, 166, 12), (235, 165, 15),
+ (233, 164, 17), (229, 163, 19), (225, 161, 19), (221, 159, 19),
+ (217, 157, 20), (212, 156, 21), (208, 152, 21), (204, 149, 24),
+ (199, 147, 24), (195, 143, 26), (190, 139, 26), (185, 135, 29),
+ (180, 129, 31), (176, 125, 31), (171, 118, 33), (166, 113, 35),
+ (161, 106, 36), (156, 98, 39), (151, 94, 40), (146, 86, 41),
+ (142, 80, 42), (137, 72, 44), (133, 63, 45), (128, 58, 46)
+ ),
+
+// 695 040412-012
+((185, 134, 154), (177, 127, 143), (172, 123, 137), (168, 120, 132),
+ (164, 116, 126), (160, 113, 121), (158, 111, 118), (156, 110, 115),
+ (147, 102, 104), (143, 98, 98), (139, 95, 93), (134, 91, 87),
+ (130, 88, 81), (123, 83, 74), (116, 78, 67), (112, 76, 64),
+ (109, 74, 61), (95, 65, 49), (89, 61, 44), (83, 58, 39),
+ (78, 54, 35), (73, 51, 31), (70, 49, 29), (67, 48, 27),
+ (57, 42, 21), (52, 39, 18), (47, 37, 16), (43, 35, 15),
+ (40, 34, 14), (39, 33, 14), (39, 33, 15), (38, 33, 15),
+ (37, 32, 16), (35, 31, 17), (34, 30, 18), (33, 30, 19),
+ (32, 30, 19), (31, 30, 20), (30, 29, 20), (30, 29, 21),
+ (28, 28, 22), (27, 27, 23), (26, 27, 24), (25, 26, 24),
+ (24, 26, 25), (23, 26, 25), (23, 26, 26), (23, 26, 27),
+ (22, 26, 28), (21, 27, 30), (21, 27, 31), (21, 28, 33),
+ (21, 29, 34), (21, 31, 36), (21, 32, 37), (21, 33, 38),
+ (22, 37, 42), (22, 39, 44), (23, 41, 47), (24, 44, 49),
+ (26, 47, 52), (26, 48, 53), (27, 50, 55), (28, 53, 57),
+ (29, 57, 60), (31, 63, 65), (32, 66, 67), (33, 69, 70),
+ (34, 70, 71), (35, 72, 73), (36, 75, 76), (37, 78, 78),
+ (39, 84, 84), (40, 87, 86), (41, 91, 89), (42, 94, 91),
+ (44, 97, 94), (44, 98, 95), (45, 100, 97), (46, 103, 100),
+ (48, 106, 102), (52, 111, 108), (55, 113, 111), (58, 116, 114),
+ (59, 117, 115), (61, 119, 116), (65, 121, 119), (69, 123, 122),
+ (77, 127, 128), (82, 129, 131), (87, 131, 134), (89, 132, 135),
+ (92, 133, 137), (97, 135, 141), (103, 136, 144), (108, 138, 147),
+ (114, 139, 150), (125, 143, 156), (130, 144, 159), (136, 146, 162),
+ (139, 147, 164), (142, 148, 166), (148, 149, 169), (153, 151, 172),
+ (164, 154, 178), (170, 155, 181), (176, 157, 184), (178, 158, 185),
+ (181, 159, 187), (187, 161, 191), (192, 162, 193), (197, 163, 196),
+ (201, 164, 198), (207, 165, 200), (208, 165, 200), (210, 165, 200),
+ (211, 164, 199), (212, 163, 198), (212, 162, 197), (212, 161, 195),
+ (210, 157, 189), (207, 154, 185), (205, 152, 181), (203, 150, 178),
+ (202, 149, 176), (198, 145, 171), (194, 142, 165), (189, 138, 160),
+ (185, 134, 154), (177, 127, 143), (174, 125, 140), (172, 124, 137),
+ (168, 120, 132), (164, 117, 126), (160, 113, 121), (156, 110, 115),
+ (147, 102, 104), (143, 98, 98), (139, 95, 93), (136, 93, 90),
+ (134, 92, 87), (130, 88, 81), (123, 83, 74), (116, 78, 67),
+ (109, 74, 61), (95, 65, 49), (92, 63, 46), (89, 61, 44),
+ (83, 58, 39), (79, 55, 35), (73, 51, 31), (67, 48, 27),
+ (57, 42, 21), (54, 41, 19), (52, 40, 18), (47, 37, 16),
+ (42, 35, 14), (40, 34, 14), (39, 33, 15), (38, 33, 15),
+ (37, 32, 16), (35, 31, 17), (34, 31, 17), (34, 31, 18),
+ (33, 30, 19), (32, 30, 20), (31, 30, 20), (30, 29, 21),
+ (28, 28, 22), (27, 28, 22), (27, 28, 23), (26, 27, 24),
+ (25, 27, 24), (24, 26, 25), (23, 26, 26), (23, 26, 27),
+ (22, 26, 28), (21, 26, 29), (21, 27, 30), (21, 27, 31),
+ (21, 28, 33), (21, 30, 35), (21, 31, 36), (21, 33, 38),
+ (22, 37, 42), (22, 38, 43), (23, 39, 44), (23, 41, 47),
+ (24, 44, 49), (26, 47, 52), (27, 50, 55), (28, 53, 57),
+ (29, 57, 60), (30, 60, 62), (31, 63, 65), (32, 66, 68),
+ (33, 69, 70), (35, 72, 73), (36, 75, 76), (37, 78, 78),
+ (38, 81, 81), (39, 84, 84), (40, 87, 86), (41, 91, 89),
+ (42, 94, 92), (44, 97, 94), (45, 100, 97), (46, 103, 100),
+ (48, 106, 102), (50, 108, 105), (52, 111, 108), (55, 114, 111),
+ (58, 116, 114), (61, 119, 116), (65, 121, 119), (69, 123, 122),
+ (73, 125, 125), (77, 127, 128), (82, 129, 131), (87, 131, 134),
+ (92, 133, 137), (97, 135, 141), (103, 136, 144), (108, 138, 147),
+ (114, 139, 150), (120, 141, 153), (125, 143, 156), (131, 144, 159),
+ (136, 146, 162), (142, 148, 166), (148, 149, 169), (153, 151, 172),
+ (159, 152, 175), (164, 154, 178), (170, 156, 181), (176, 157, 184),
+ (181, 159, 187), (187, 161, 191), (192, 162, 193), (197, 163, 196),
+ (201, 164, 198), (205, 165, 199), (207, 165, 200), (210, 165, 200),
+ (211, 164, 199), (212, 163, 198), (212, 162, 197), (212, 161, 195),
+ (212, 159, 192), (210, 157, 189), (208, 154, 185), (205, 152, 181),
+ (202, 149, 176), (198, 145, 171), (194, 142, 165), (189, 138, 160)
+ ),
+
+// 696 040412-013
+((64, 11, 92), (58, 10, 86), (55, 9, 82), (52, 9, 79),
+ (49, 8, 76), (46, 8, 73), (45, 8, 72), (44, 9, 71),
+ (39, 9, 65), (37, 9, 62), (35, 10, 60), (33, 10, 58),
+ (31, 11, 56), (28, 12, 54), (26, 13, 52), (25, 13, 51),
+ (25, 14, 50), (29, 14, 56), (30, 14, 59), (32, 14, 62),
+ (34, 13, 65), (37, 13, 69), (38, 13, 70), (39, 14, 72),
+ (42, 14, 78), (44, 14, 81), (46, 14, 84), (47, 14, 87),
+ (49, 15, 90), (50, 14, 91), (52, 14, 93), (54, 14, 97),
+ (55, 15, 100), (59, 14, 106), (60, 14, 109), (62, 15, 112),
+ (64, 15, 115), (67, 15, 118), (68, 15, 119), (69, 15, 121),
+ (72, 17, 126), (74, 17, 128), (76, 18, 131), (77, 19, 133),
+ (78, 20, 135), (79, 20, 136), (80, 20, 138), (82, 22, 140),
+ (84, 22, 142), (87, 24, 146), (88, 26, 147), (90, 28, 149),
+ (92, 29, 150), (94, 31, 152), (94, 32, 153), (94, 33, 154),
+ (98, 36, 157), (99, 38, 158), (101, 40, 159), (102, 42, 160),
+ (103, 44, 161), (103, 45, 161), (104, 46, 162), (106, 48, 163),
+ (107, 51, 164), (110, 55, 165), (111, 58, 166), (112, 61, 167),
+ (113, 62, 167), (114, 63, 167), (115, 66, 167), (115, 69, 168),
+ (118, 74, 169), (119, 76, 169), (121, 79, 170), (122, 81, 170),
+ (123, 84, 171), (123, 85, 171), (124, 87, 171), (124, 90, 172),
+ (126, 93, 172), (128, 98, 173), (128, 101, 173), (128, 104, 174),
+ (128, 105, 174), (129, 106, 175), (130, 108, 175), (132, 111, 175),
+ (132, 115, 176), (132, 117, 176), (132, 119, 176), (132, 119, 176),
+ (133, 120, 176), (129, 122, 176), (131, 123, 176), (131, 123, 175),
+ (133, 124, 175), (131, 126, 174), (136, 125, 173), (141, 125, 172),
+ (142, 125, 171), (143, 125, 171), (142, 125, 170), (146, 124, 169),
+ (156, 122, 167), (158, 121, 166), (160, 120, 165), (161, 119, 164),
+ (163, 119, 163), (162, 117, 162), (162, 114, 154), (161, 113, 154),
+ (160, 110, 150), (157, 104, 145), (156, 103, 143), (156, 102, 142),
+ (155, 99, 140), (153, 95, 139), (152, 91, 134), (150, 88, 133),
+ (146, 81, 128), (144, 76, 125), (143, 72, 123), (142, 70, 122),
+ (141, 69, 122), (140, 65, 118), (138, 61, 116), (136, 58, 115),
+ (135, 53, 111), (131, 46, 108), (130, 44, 106), (130, 42, 105),
+ (128, 38, 103), (126, 35, 100), (125, 30, 98), (123, 27, 96),
+ (119, 19, 92), (117, 15, 89), (116, 12, 87), (115, 10, 86),
+ (115, 9, 85), (114, 6, 84), (113, 4, 82), (112, 2, 80),
+ (111, 0, 79), (109, 0, 77), (109, 0, 76), (109, 0, 76),
+ (108, 0, 77), (108, 0, 76), (108, 0, 75), (108, 0, 75),
+ (108, 0, 74), (108, 0, 74), (108, 0, 74), (108, 0, 74),
+ (108, 0, 74), (109, 0, 74), (109, 0, 74), (110, 0, 74),
+ (111, 0, 74), (112, 0, 74), (112, 1, 74), (113, 2, 74),
+ (115, 3, 76), (116, 6, 77), (117, 9, 77), (119, 11, 79),
+ (122, 19, 83), (123, 20, 83), (124, 22, 84), (126, 26, 86),
+ (128, 29, 87), (130, 34, 88), (132, 38, 90), (133, 41, 92),
+ (135, 45, 93), (137, 49, 94), (139, 52, 96), (141, 57, 96),
+ (143, 60, 98), (145, 64, 99), (147, 67, 100), (148, 71, 101),
+ (152, 79, 102), (153, 81, 102), (154, 83, 102), (156, 87, 102),
+ (158, 90, 102), (159, 94, 103), (161, 97, 102), (163, 100, 102),
+ (164, 103, 103), (165, 109, 104), (167, 113, 105), (168, 115, 107),
+ (169, 121, 108), (170, 123, 110), (171, 126, 110), (171, 128, 111),
+ (172, 128, 112), (173, 132, 113), (173, 131, 114), (173, 132, 115),
+ (174, 130, 116), (174, 132, 117), (174, 130, 118), (174, 128, 119),
+ (174, 127, 120), (174, 123, 120), (173, 120, 123), (173, 119, 129),
+ (172, 118, 132), (172, 116, 135), (171, 115, 140), (170, 114, 143),
+ (169, 111, 147), (168, 109, 149), (167, 106, 152), (166, 103, 154),
+ (165, 101, 156), (163, 98, 159), (162, 94, 160), (159, 91, 161),
+ (157, 88, 161), (154, 84, 161), (153, 82, 160), (151, 78, 160),
+ (148, 75, 160), (147, 72, 160), (144, 68, 160), (143, 65, 160),
+ (140, 62, 160), (139, 58, 160), (138, 55, 159), (135, 51, 159),
+ (134, 48, 159), (132, 45, 159), (131, 41, 159), (128, 38, 159),
+ (123, 35, 154), (118, 33, 149), (115, 31, 144), (110, 29, 139),
+ (105, 27, 135), (101, 25, 130), (97, 23, 126), (92, 22, 121),
+ (88, 20, 117), (84, 19, 113), (80, 18, 109), (78, 16, 105),
+ (74, 15, 101), (69, 14, 98), (67, 14, 94), (64, 13, 91)
+ ),
+
+// 697 040412-014
+((50, 131, 83), (52, 132, 87), (52, 133, 87), (52, 134, 87),
+ (52, 134, 87), (53, 134, 88), (54, 134, 88), (55, 134, 88),
+ (56, 132, 89), (56, 131, 89), (57, 131, 89), (57, 129, 88),
+ (57, 128, 88), (57, 127, 86), (57, 126, 84), (57, 124, 84),
+ (57, 123, 84), (56, 119, 80), (56, 117, 78), (57, 115, 76),
+ (57, 113, 75), (57, 111, 75), (57, 110, 73), (57, 110, 72),
+ (57, 106, 70), (56, 104, 68), (55, 102, 67), (55, 100, 65),
+ (56, 98, 63), (55, 97, 62), (55, 97, 61), (56, 94, 58),
+ (55, 93, 57), (54, 89, 54), (54, 87, 53), (55, 85, 53),
+ (56, 82, 51), (58, 79, 50), (57, 78, 49), (57, 78, 49),
+ (55, 73, 47), (54, 71, 45), (54, 69, 44), (54, 67, 42),
+ (55, 65, 40), (54, 63, 40), (53, 62, 40), (51, 60, 38),
+ (49, 58, 37), (46, 53, 35), (44, 50, 33), (43, 48, 32),
+ (41, 46, 30), (39, 44, 28), (38, 42, 27), (38, 41, 27),
+ (36, 36, 24), (34, 32, 23), (32, 29, 22), (30, 27, 20),
+ (28, 25, 19), (26, 22, 19), (25, 20, 20), (25, 20, 20),
+ (25, 20, 20), (25, 20, 20), (25, 20, 20), (25, 20, 20),
+ (25, 20, 20), (25, 20, 20), (25, 20, 20), (25, 20, 20),
+ (25, 20, 20), (25, 20, 20), (25, 20, 20), (25, 20, 20),
+ (25, 20, 20), (25, 20, 20), (25, 20, 20), (19, 19, 27),
+ (19, 19, 31), (20, 17, 41), (22, 18, 47), (24, 19, 53),
+ (25, 20, 56), (27, 21, 60), (31, 25, 66), (36, 28, 74),
+ (42, 37, 90), (46, 41, 98), (51, 45, 106), (52, 46, 110),
+ (54, 48, 114), (57, 54, 122), (62, 57, 130), (65, 60, 139),
+ (68, 65, 147), (76, 73, 163), (79, 77, 170), (83, 81, 178),
+ (85, 82, 182), (88, 84, 186), (91, 89, 194), (93, 93, 202),
+ (97, 97, 207), (96, 96, 201), (95, 95, 196), (94, 95, 192),
+ (94, 96, 188), (93, 94, 180), (93, 95, 172), (92, 93, 164),
+ (89, 95, 155), (89, 95, 141), (89, 95, 138), (89, 96, 136),
+ (89, 99, 130), (88, 97, 124), (86, 105, 114), (96, 108, 83),
+ (96, 102, 63), (92, 98, 53), (89, 95, 44), (87, 93, 39),
+ (85, 91, 34), (85, 89, 27), (84, 90, 22), (88, 93, 22),
+ (89, 95, 26), (96, 102, 30), (98, 103, 32), (101, 104, 34),
+ (103, 107, 37), (107, 110, 40), (110, 114, 43), (114, 116, 47),
+ (121, 123, 51), (124, 125, 54), (128, 128, 57), (130, 130, 59),
+ (132, 132, 61), (135, 135, 64), (139, 136, 66), (141, 139, 70),
+ (145, 143, 71), (151, 146, 77), (152, 148, 78), (153, 150, 79),
+ (155, 152, 82), (157, 154, 85), (159, 156, 86), (160, 158, 88),
+ (163, 160, 93), (163, 161, 94), (164, 162, 95), (165, 161, 97),
+ (165, 163, 99), (167, 161, 99), (167, 163, 100), (167, 163, 102),
+ (167, 163, 103), (165, 163, 106), (165, 163, 107), (165, 163, 108),
+ (164, 162, 108), (163, 163, 109), (161, 161, 109), (159, 161, 110),
+ (157, 160, 113), (155, 159, 113), (153, 159, 113), (150, 159, 114),
+ (151, 157, 114), (145, 156, 115), (145, 156, 115), (141, 155, 118),
+ (136, 155, 118), (126, 153, 119), (119, 153, 119), (119, 152, 127),
+ (118, 151, 135), (116, 151, 139), (116, 149, 149), (115, 143, 149),
+ (111, 144, 148), (110, 140, 148), (109, 137, 148), (107, 137, 147),
+ (106, 138, 145), (104, 132, 144), (101, 135, 141), (100, 131, 140),
+ (97, 131, 139), (96, 133, 136), (93, 129, 134), (91, 131, 131),
+ (90, 128, 128), (87, 127, 124), (84, 124, 122), (80, 123, 114),
+ (79, 120, 109), (75, 118, 105), (73, 116, 99), (71, 114, 94),
+ (68, 111, 91), (65, 108, 89), (61, 107, 83), (59, 104, 79),
+ (57, 102, 73), (54, 101, 70), (51, 98, 66), (48, 95, 62),
+ (46, 94, 57), (42, 91, 56), (40, 89, 52), (37, 86, 48),
+ (33, 85, 44), (32, 83, 41), (30, 81, 39), (29, 79, 36),
+ (26, 79, 35), (25, 78, 32), (23, 77, 31), (22, 77, 29),
+ (21, 77, 29), (21, 77, 28), (20, 77, 28), (20, 77, 28),
+ (20, 77, 28), (20, 78, 28), (20, 79, 28), (20, 79, 29),
+ (20, 81, 31), (21, 83, 32), (21, 85, 35), (23, 86, 35),
+ (24, 89, 39), (26, 91, 40), (27, 94, 43), (28, 95, 47),
+ (30, 98, 47), (30, 101, 50), (32, 102, 52), (34, 104, 55),
+ (35, 107, 56), (36, 108, 60), (39, 111, 63), (39, 114, 64),
+ (40, 115, 67), (42, 118, 68), (43, 120, 71), (44, 123, 74),
+ (45, 124, 77), (47, 127, 78), (48, 128, 80), (49, 130, 82)
+ ),
+
+// 698 040412-015
+((130, 49, 119), (131, 50, 117), (131, 51, 117), (132, 53, 117),
+ (133, 53, 119), (134, 53, 122), (134, 53, 121), (134, 53, 120),
+ (134, 55, 122), (133, 56, 121), (132, 57, 121), (131, 57, 120),
+ (130, 57, 119), (128, 57, 117), (127, 57, 115), (126, 57, 116),
+ (126, 57, 118), (122, 58, 114), (120, 57, 113), (118, 56, 113),
+ (116, 56, 111), (114, 56, 110), (112, 56, 108), (111, 57, 107),
+ (108, 56, 107), (105, 56, 105), (102, 57, 104), (100, 56, 102),
+ (99, 56, 101), (96, 56, 99), (94, 56, 98), (92, 55, 97),
+ (86, 56, 94), (81, 56, 90), (78, 54, 88), (75, 53, 86),
+ (72, 52, 84), (70, 52, 82), (66, 51, 80), (63, 50, 79),
+ (58, 47, 75), (54, 45, 73), (51, 44, 71), (49, 43, 68),
+ (48, 43, 66), (45, 41, 65), (43, 40, 65), (43, 40, 62),
+ (41, 38, 60), (35, 35, 56), (33, 34, 53), (32, 33, 50),
+ (30, 31, 47), (29, 30, 45), (28, 29, 44), (28, 28, 44),
+ (25, 28, 38), (23, 29, 36), (22, 30, 35), (20, 25, 32),
+ (19, 21, 29), (19, 22, 28), (19, 24, 28), (20, 25, 23),
+ (20, 25, 23), (20, 25, 23), (20, 25, 23), (20, 25, 23),
+ (20, 25, 23), (20, 25, 23), (20, 25, 23), (20, 25, 23),
+ (20, 25, 23), (20, 25, 23), (20, 25, 23), (20, 25, 23),
+ (20, 25, 23), (20, 25, 23), (20, 25, 23), (20, 25, 23),
+ (27, 24, 19), (36, 31, 18), (41, 37, 17), (46, 44, 16),
+ (49, 46, 17), (53, 49, 19), (60, 55, 21), (66, 61, 25),
+ (82, 74, 33), (90, 81, 37), (98, 88, 41), (102, 92, 43),
+ (106, 96, 45), (114, 102, 48), (122, 107, 54), (130, 115, 57),
+ (139, 123, 60), (155, 136, 68), (162, 141, 73), (170, 147, 78),
+ (174, 150, 79), (178, 154, 81), (186, 162, 84), (194, 168, 89),
+ (207, 178, 96), (205, 176, 96), (203, 175, 96), (199, 172, 95),
+ (196, 169, 95), (188, 161, 94), (180, 155, 93), (172, 148, 93),
+ (164, 144, 92), (147, 125, 88), (144, 123, 88), (141, 121, 89),
+ (136, 116, 89), (130, 109, 89), (124, 105, 88), (114, 87, 86),
+ (76, 74, 106), (65, 67, 102), (54, 60, 98), (49, 55, 96),
+ (44, 51, 95), (34, 43, 91), (27, 39, 89), (22, 34, 90),
+ (22, 36, 93), (29, 44, 98), (29, 43, 100), (30, 43, 102),
+ (34, 49, 104), (37, 52, 107), (40, 55, 110), (43, 58, 114),
+ (48, 67, 119), (51, 70, 122), (55, 74, 126), (56, 75, 127),
+ (57, 76, 128), (61, 80, 132), (64, 83, 135), (66, 88, 139),
+ (70, 91, 141), (75, 97, 148), (76, 99, 149), (77, 102, 151),
+ (79, 101, 153), (82, 104, 155), (85, 107, 157), (86, 108, 159),
+ (91, 112, 161), (92, 113, 162), (93, 115, 163), (95, 116, 164),
+ (97, 120, 165), (99, 119, 165), (99, 123, 167), (100, 122, 167),
+ (102, 124, 167), (104, 125, 167), (105, 124, 166), (106, 124, 165),
+ (108, 125, 165), (108, 125, 164), (109, 123, 163), (109, 123, 161),
+ (111, 122, 160), (112, 122, 160), (113, 122, 160), (113, 119, 159),
+ (114, 117, 159), (114, 120, 157), (115, 115, 156), (115, 115, 156),
+ (122, 118, 155), (127, 118, 155), (137, 119, 153), (144, 119, 153),
+ (152, 119, 152), (151, 118, 143), (151, 116, 138), (149, 116, 125),
+ (149, 112, 114), (148, 111, 115), (148, 111, 117), (148, 110, 109),
+ (147, 107, 108), (145, 106, 109), (144, 105, 104), (141, 101, 106),
+ (140, 100, 101), (139, 97, 100), (136, 96, 104), (134, 93, 99),
+ (131, 91, 102), (128, 90, 100), (127, 87, 100), (124, 84, 97),
+ (123, 80, 101), (120, 79, 101), (118, 75, 99), (116, 73, 102),
+ (114, 71, 102), (111, 68, 99), (108, 65, 96), (107, 61, 97),
+ (104, 59, 96), (102, 57, 98), (101, 54, 98), (98, 51, 96),
+ (95, 48, 93), (92, 46, 94), (91, 42, 90), (88, 40, 89),
+ (83, 37, 86), (82, 33, 85), (79, 32, 83), (77, 30, 81),
+ (72, 29, 79), (73, 26, 79), (71, 25, 78), (70, 23, 77),
+ (69, 22, 77), (70, 21, 77), (69, 21, 77), (69, 20, 77),
+ (69, 20, 77), (69, 20, 77), (70, 20, 78), (71, 20, 79),
+ (72, 20, 79), (76, 20, 81), (78, 21, 83), (82, 21, 85),
+ (81, 23, 86), (87, 24, 89), (88, 26, 91), (92, 27, 94),
+ (95, 28, 94), (97, 30, 98), (101, 30, 100), (102, 32, 101),
+ (104, 34, 102), (107, 35, 105), (108, 36, 103), (111, 39, 106),
+ (114, 39, 109), (115, 40, 107), (118, 42, 112), (120, 43, 112),
+ (123, 44, 114), (124, 45, 113), (127, 47, 118), (128, 48, 117)
+ ),
+
+// 699 040412-016
+((81, 115, 124), (85, 126, 131), (86, 132, 134), (87, 138, 138),
+ (86, 141, 138), (85, 144, 139), (84, 145, 139), (84, 147, 140),
+ (81, 152, 140), (79, 153, 140), (78, 155, 140), (76, 155, 138),
+ (75, 156, 137), (73, 156, 136), (72, 157, 136), (71, 156, 135),
+ (70, 156, 135), (66, 154, 131), (64, 152, 127), (62, 151, 124),
+ (60, 148, 122), (58, 146, 120), (57, 145, 119), (56, 144, 118),
+ (51, 137, 111), (48, 133, 107), (46, 129, 104), (43, 124, 99),
+ (41, 119, 94), (39, 116, 91), (38, 113, 89), (35, 108, 85),
+ (33, 102, 81), (28, 91, 72), (26, 86, 68), (25, 81, 65),
+ (24, 76, 62), (24, 72, 59), (23, 70, 58), (23, 68, 57),
+ (23, 60, 53), (23, 56, 51), (24, 53, 50), (24, 48, 48),
+ (24, 43, 46), (23, 40, 44), (23, 38, 43), (22, 32, 40),
+ (21, 26, 37), (22, 20, 35), (26, 19, 38), (31, 19, 41),
+ (37, 19, 44), (43, 20, 48), (45, 20, 50), (48, 20, 52),
+ (60, 22, 58), (63, 21, 60), (67, 20, 62), (70, 19, 63),
+ (73, 19, 65), (74, 19, 65), (75, 19, 65), (78, 18, 67),
+ (80, 18, 67), (83, 18, 69), (84, 18, 69), (85, 19, 69),
+ (85, 19, 68), (85, 19, 67), (86, 19, 68), (86, 20, 67),
+ (86, 21, 65), (85, 22, 64), (85, 23, 64), (83, 24, 62),
+ (82, 26, 61), (81, 26, 59), (80, 27, 58), (79, 29, 58),
+ (76, 30, 54), (72, 33, 50), (71, 34, 48), (70, 35, 46),
+ (69, 35, 45), (69, 36, 44), (70, 36, 44), (70, 39, 42),
+ (75, 50, 44), (79, 56, 46), (84, 62, 49), (86, 64, 50),
+ (88, 67, 51), (92, 72, 54), (97, 79, 57), (101, 83, 59),
+ (105, 88, 62), (114, 97, 67), (117, 98, 68), (120, 99, 69),
+ (122, 101, 70), (125, 103, 72), (129, 105, 74), (133, 107, 76),
+ (142, 110, 80), (146, 112, 82), (151, 115, 85), (153, 115, 86),
+ (155, 116, 87), (159, 119, 90), (163, 121, 93), (167, 125, 97),
+ (169, 123, 97), (172, 120, 100), (172, 119, 100), (173, 119, 101),
+ (174, 118, 102), (175, 117, 104), (175, 117, 105), (176, 116, 107),
+ (177, 119, 111), (177, 119, 113), (177, 119, 115), (176, 119, 116),
+ (176, 119, 117), (177, 121, 120), (177, 123, 122), (177, 125, 125),
+ (177, 127, 127), (176, 133, 134), (175, 134, 135), (174, 136, 137),
+ (173, 139, 141), (171, 142, 143), (169, 146, 147), (167, 149, 151),
+ (161, 156, 156), (158, 159, 158), (155, 162, 160), (153, 163, 161),
+ (152, 165, 163), (148, 166, 163), (145, 168, 165), (142, 169, 165),
+ (138, 169, 164), (131, 168, 163), (129, 167, 161), (127, 167, 160),
+ (124, 166, 160), (120, 164, 158), (116, 162, 154), (112, 159, 150),
+ (104, 153, 144), (102, 151, 142), (100, 149, 140), (96, 145, 136),
+ (92, 140, 130), (88, 135, 126), (84, 129, 119), (80, 123, 114),
+ (75, 116, 106), (66, 102, 92), (64, 98, 88), (62, 95, 85),
+ (58, 88, 78), (55, 82, 72), (51, 77, 65), (48, 72, 60),
+ (43, 64, 50), (42, 62, 48), (41, 61, 47), (39, 58, 43),
+ (37, 56, 39), (36, 55, 37), (35, 54, 35), (35, 55, 34),
+ (34, 55, 33), (34, 56, 32), (35, 58, 32), (36, 60, 32),
+ (37, 62, 33), (37, 65, 33), (38, 68, 34), (40, 72, 35),
+ (42, 80, 39), (43, 82, 40), (44, 85, 41), (45, 90, 43),
+ (47, 95, 45), (48, 99, 47), (50, 103, 49), (51, 106, 51),
+ (52, 109, 53), (53, 112, 53), (54, 114, 55), (55, 115, 57),
+ (55, 116, 57), (55, 117, 57), (55, 117, 57), (55, 117, 57),
+ (55, 117, 58), (55, 117, 58), (54, 116, 58), (53, 114, 56),
+ (52, 112, 55), (51, 110, 55), (50, 107, 54), (48, 103, 50),
+ (47, 99, 49), (44, 95, 47), (42, 90, 45), (40, 84, 42),
+ (37, 79, 40), (35, 73, 37), (33, 68, 35), (31, 63, 33),
+ (29, 59, 32), (28, 55, 30), (27, 52, 30), (26, 48, 28),
+ (26, 46, 29), (25, 43, 27), (26, 42, 30), (26, 40, 30),
+ (26, 39, 30), (27, 38, 32), (28, 37, 33), (29, 37, 35),
+ (30, 36, 37), (30, 35, 38), (30, 34, 39), (30, 33, 40),
+ (31, 34, 42), (32, 34, 44), (34, 35, 46), (36, 37, 49),
+ (38, 39, 53), (40, 41, 56), (43, 44, 60), (45, 47, 64),
+ (48, 51, 68), (50, 53, 71), (52, 56, 75), (55, 60, 79),
+ (57, 63, 82), (59, 67, 86), (61, 70, 89), (63, 74, 93),
+ (66, 79, 96), (68, 83, 100), (70, 87, 103), (72, 92, 107),
+ (74, 95, 110), (76, 101, 114), (78, 106, 117), (80, 111, 121)
+ ),
+
+// 700 040412-017
+((0, 68, 38), (0, 57, 27), (0, 53, 23), (0, 50, 20),
+ (0, 48, 19), (0, 46, 18), (0, 45, 18), (0, 45, 18),
+ (1, 44, 21), (1, 44, 23), (1, 45, 25), (2, 46, 28),
+ (3, 48, 31), (3, 49, 34), (4, 51, 37), (4, 51, 39),
+ (4, 52, 41), (6, 55, 47), (6, 56, 49), (7, 58, 52),
+ (8, 58, 53), (9, 59, 55), (9, 59, 55), (10, 59, 56),
+ (11, 58, 55), (11, 57, 53), (11, 57, 52), (11, 55, 50),
+ (12, 54, 48), (12, 53, 46), (12, 52, 45), (12, 51, 42),
+ (12, 49, 39), (12, 46, 32), (12, 45, 28), (13, 44, 25),
+ (14, 43, 23), (16, 43, 21), (17, 43, 20), (18, 43, 19),
+ (24, 45, 16), (28, 48, 15), (33, 51, 15), (39, 55, 16),
+ (45, 59, 17), (48, 62, 18), (52, 65, 19), (60, 71, 22),
+ (68, 78, 25), (87, 93, 33), (97, 101, 37), (107, 110, 42),
+ (117, 118, 47), (128, 127, 52), (133, 131, 54), (138, 136, 57),
+ (156, 153, 66), (163, 160, 70), (171, 167, 74), (176, 172, 77),
+ (182, 178, 80), (183, 179, 81), (185, 181, 82), (186, 183, 84),
+ (186, 184, 85), (179, 182, 85), (172, 179, 83), (166, 176, 82),
+ (162, 173, 80), (158, 171, 79), (148, 166, 76), (138, 160, 73),
+ (119, 149, 67), (108, 142, 65), (97, 136, 63), (86, 129, 61),
+ (75, 123, 59), (69, 120, 58), (64, 117, 58), (54, 112, 57),
+ (44, 107, 56), (28, 101, 57), (23, 100, 59), (18, 100, 62),
+ (16, 100, 64), (14, 100, 66), (11, 102, 71), (9, 104, 76),
+ (5, 110, 87), (3, 113, 93), (1, 117, 99), (0, 119, 102),
+ (0, 122, 106), (0, 128, 113), (0, 134, 121), (0, 142, 129),
+ (0, 149, 137), (2, 162, 153), (3, 168, 160), (4, 175, 168),
+ (4, 178, 171), (5, 181, 174), (6, 186, 180), (7, 191, 185),
+ (9, 199, 194), (10, 201, 196), (11, 204, 198), (11, 204, 198),
+ (12, 204, 199), (12, 204, 198), (13, 202, 196), (13, 199, 192),
+ (14, 195, 187), (13, 184, 173), (12, 180, 168), (12, 177, 164),
+ (11, 169, 155), (11, 161, 145), (10, 152, 134), (9, 143, 124),
+ (6, 124, 102), (5, 115, 91), (4, 106, 81), (3, 101, 76),
+ (3, 97, 71), (2, 89, 61), (2, 81, 53), (1, 74, 45),
+ (0, 68, 38), (0, 57, 27), (0, 55, 25), (0, 53, 23),
+ (0, 50, 20), (0, 47, 19), (0, 46, 18), (0, 45, 18),
+ (1, 44, 21), (1, 44, 23), (1, 45, 25), (1, 45, 26),
+ (2, 46, 28), (3, 48, 31), (3, 49, 34), (4, 51, 37),
+ (4, 52, 41), (6, 55, 47), (6, 56, 48), (7, 57, 50),
+ (7, 58, 52), (8, 58, 54), (9, 59, 55), (10, 59, 56),
+ (11, 58, 55), (11, 58, 54), (11, 58, 54), (11, 57, 52),
+ (12, 55, 50), (12, 54, 48), (12, 52, 45), (12, 51, 42),
+ (12, 49, 39), (12, 46, 32), (12, 45, 30), (12, 45, 29),
+ (13, 44, 25), (14, 43, 23), (16, 43, 21), (18, 43, 19),
+ (24, 45, 16), (26, 46, 15), (28, 48, 15), (33, 51, 15),
+ (38, 55, 16), (45, 59, 17), (52, 65, 19), (60, 71, 22),
+ (68, 78, 25), (78, 85, 29), (87, 93, 33), (97, 101, 38),
+ (107, 110, 42), (118, 118, 47), (128, 127, 52), (138, 136, 57),
+ (156, 153, 66), (160, 156, 68), (164, 160, 70), (171, 167, 74),
+ (177, 173, 77), (182, 178, 80), (185, 181, 82), (186, 183, 84),
+ (186, 184, 85), (183, 183, 85), (179, 182, 85), (174, 179, 84),
+ (166, 176, 82), (158, 171, 79), (148, 166, 76), (138, 160, 73),
+ (128, 155, 70), (119, 149, 67), (108, 142, 65), (97, 136, 63),
+ (86, 129, 61), (75, 123, 59), (64, 117, 58), (54, 112, 57),
+ (44, 107, 56), (35, 103, 56), (28, 101, 57), (23, 100, 59),
+ (18, 100, 62), (14, 100, 66), (11, 102, 71), (9, 104, 76),
+ (7, 106, 82), (5, 110, 87), (3, 113, 93), (1, 117, 99),
+ (0, 122, 106), (0, 128, 113), (0, 134, 121), (0, 142, 129),
+ (0, 149, 137), (1, 156, 145), (2, 162, 153), (3, 169, 161),
+ (4, 175, 168), (5, 181, 174), (6, 186, 180), (7, 191, 185),
+ (8, 196, 190), (9, 199, 194), (10, 202, 197), (11, 204, 198),
+ (12, 204, 199), (12, 204, 198), (13, 202, 196), (13, 199, 192),
+ (14, 195, 187), (13, 189, 180), (13, 184, 173), (12, 177, 164),
+ (11, 169, 155), (11, 161, 145), (10, 152, 134), (9, 143, 124),
+ (7, 134, 113), (6, 124, 102), (5, 115, 91), (4, 106, 81),
+ (3, 97, 71), (2, 89, 61), (2, 81, 53), (1, 74, 45)
+ ),
+
+ // 701 Spectrum // AV: why did nobody add this before?!
+ ((255, 0, 0), (255, 4, 0), (255, 8, 0), (255, 16, 0),
+(255, 20, 0), (255, 28, 0), (255, 32, 0), (255, 40, 0),
+(255, 45, 0), (255, 53, 0), (255, 57, 0), (255, 65, 0),
+(255, 69, 0), (255, 77, 0), (255, 81, 0), (255, 89, 0),
+(255, 93, 0), (255, 101, 0), (255, 105, 0), (255, 113, 0),
+(255, 117, 0), (255, 125, 0), (255, 130, 0), (255, 134, 0),
+(255, 142, 0), (255, 146, 0), (255, 154, 0), (255, 158, 0),
+(255, 166, 0), (255, 170, 0), (255, 178, 0), (255, 182, 0),
+(255, 190, 0), (255, 194, 0), (255, 202, 0), (255, 206, 0),
+(255, 215, 0), (255, 219, 0), (255, 227, 0), (255, 231, 0),
+(255, 239, 0), (255, 243, 0), (255, 251, 0), (251, 255, 0),
+(247, 255, 0), (239, 255, 0), (235, 255, 0), (227, 255, 0),
+(223, 255, 0), (215, 255, 0), (210, 255, 0), (202, 255, 0),
+(198, 255, 0), (190, 255, 0), (186, 255, 0), (178, 255, 0),
+(174, 255, 0), (166, 255, 0), (162, 255, 0), (154, 255, 0),
+(150, 255, 0), (142, 255, 0), (138, 255, 0), (130, 255, 0),
+(125, 255, 0), (121, 255, 0), (113, 255, 0), (109, 255, 0),
+(101, 255, 0), (97, 255, 0), (89, 255, 0), (85, 255, 0),
+(77, 255, 0), (73, 255, 0), (65, 255, 0), (61, 255, 0),
+(53, 255, 0), (49, 255, 0), (40, 255, 0), (36, 255, 0),
+(28, 255, 0), (24, 255, 0), (16, 255, 0), (12, 255, 0),
+(4, 255, 0), (0, 255, 0), (0, 255, 0), (0, 255, 8),
+(0, 255, 12), (0, 255, 20), (0, 255, 24), (0, 255, 32),
+(0, 255, 36), (0, 255, 45), (0, 255, 49), (0, 255, 57),
+(0, 255, 61), (0, 255, 69), (0, 255, 73), (0, 255, 81),
+(0, 255, 85), (0, 255, 93), (0, 255, 97), (0, 255, 105),
+(0, 255, 109), (0, 255, 117), (0, 255, 121), (0, 255, 125),
+(0, 255, 134), (0, 255, 138), (0, 255, 146), (0, 255, 150),
+(0, 255, 158), (0, 255, 162), (0, 255, 170), (0, 255, 174),
+(0, 255, 182), (0, 255, 186), (0, 255, 194), (0, 255, 198),
+(0, 255, 206), (0, 255, 210), (0, 255, 219), (0, 255, 223),
+(0, 255, 231), (0, 255, 235), (0, 255, 243), (0, 255, 247),
+(0, 255, 255), (0, 247, 255), (0, 243, 255), (0, 235, 255),
+(0, 231, 255), (0, 223, 255), (0, 219, 255), (0, 210, 255),
+(0, 206, 255), (0, 198, 255), (0, 194, 255), (0, 186, 255),
+(0, 182, 255), (0, 174, 255), (0, 170, 255), (0, 162, 255),
+(0, 158, 255), (0, 150, 255), (0, 146, 255), (0, 138, 255),
+(0, 134, 255), (0, 125, 255), (0, 121, 255), (0, 117, 255),
+(0, 109, 255), (0, 105, 255), (0, 97, 255), (0, 93, 255),
+(0, 85, 255), (0, 81, 255), (0, 73, 255), (0, 69, 255),
+(0, 61, 255), (0, 57, 255), (0, 49, 255), (0, 45, 255),
+(0, 36, 255), (0, 32, 255), (0, 24, 255), (0, 20, 255),
+(0, 12, 255), (0, 8, 255), (0, 0, 255), (0, 0, 255),
+(4, 0, 255), (12, 0, 255), (16, 0, 255), (24, 0, 255),
+(28, 0, 255), (36, 0, 255), (40, 0, 255), (49, 0, 255),
+(53, 0, 255), (61, 0, 255), (65, 0, 255), (73, 0, 255),
+(77, 0, 255), (85, 0, 255), (89, 0, 255), (97, 0, 255),
+(101, 0, 255), (109, 0, 255), (113, 0, 255), (121, 0, 255),
+(125, 0, 255), (130, 0, 255), (138, 0, 255), (142, 0, 255),
+(150, 0, 255), (154, 0, 255), (162, 0, 255), (166, 0, 255),
+(174, 0, 255), (178, 0, 255), (186, 0, 255), (190, 0, 255),
+(198, 0, 255), (202, 0, 255), (210, 0, 255), (215, 0, 255),
+(223, 0, 255), (227, 0, 255), (235, 0, 255), (239, 0, 255),
+(247, 0, 255), (251, 0, 255), (255, 0, 251), (255, 0, 243),
+(255, 0, 239), (255, 0, 231), (255, 0, 227), (255, 0, 219),
+(255, 0, 215), (255, 0, 206), (255, 0, 202), (255, 0, 194),
+(255, 0, 190), (255, 0, 182), (255, 0, 178), (255, 0, 170),
+(255, 0, 166), (255, 0, 158), (255, 0, 154), (255, 0, 146),
+(255, 0, 142), (255, 0, 134), (255, 0, 130), (255, 0, 125),
+(255, 0, 117), (255, 0, 113), (255, 0, 105), (255, 0, 101),
+(255, 0, 93), (255, 0, 89), (255, 0, 81), (255, 0, 77),
+(255, 0, 69), (255, 0, 65), (255, 0, 57), (255, 0, 53),
+(255, 0, 45), (255, 0, 40), (255, 0, 32), (255, 0, 28),
+(255, 0, 20), (255, 0, 16), (255, 0, 8), (255, 0, 4)),
+
+// 702 Alice_3D_grass_and_sky
+((12, 12, 12), (9, 40, 19), (8, 66, 29), (7, 91, 37),
+(5, 112, 43), (3, 129, 49), (1, 141, 54), (0, 149, 59),
+(0, 151, 60), (0, 148, 61), (0, 139, 60), (0, 127, 54),
+(0, 109, 48), (1, 88, 39), (3, 64, 32), (6, 39, 22),
+(12, 12, 12), (13, 38, 18), (14, 63, 25), (16, 86, 31),
+(17, 106, 38), (18, 123, 44), (17, 134, 48), (17, 141, 53),
+(16, 143, 54), (15, 140, 54), (13, 132, 52), (13, 120, 48),
+(11, 103, 43), (11, 84, 38), (11, 61, 30), (10, 37, 21),
+(12, 12, 12), (17, 43, 15), (25, 72, 19), (30, 100, 23),
+(35, 123, 26), (38, 143, 28), (38, 156, 29), (35, 165, 29),
+(34, 167, 29), (30, 164, 27), (26, 154, 26), (23, 140, 25),
+(21, 120, 23), (18, 97, 22), (15, 70, 19), (12, 42, 15),
+(12, 12, 12), (27, 41, 18), (42, 69, 26), (55, 95, 32),
+(66, 117, 38), (73, 136, 42), (76, 149, 45), (77, 157, 46),
+(76, 159, 46), (70, 156, 44), (66, 147, 42), (56, 133, 37),
+(47, 115, 33), (37, 93, 28), (27, 67, 22), (17, 40, 15),
+(12, 12, 12), (36, 46, 16), (59, 79, 20), (80, 109, 25),
+(97, 134, 31), (111, 156, 35), (118, 171, 39), (126, 181, 42),
+(125, 183, 44), (121, 180, 44), (113, 169, 44), (101, 153, 41),
+(85, 132, 36), (69, 106, 32), (51, 76, 26), (31, 45, 18),
+(12, 12, 12), (41, 45, 12), (71, 76, 15), (96, 104, 17),
+(115, 129, 20), (132, 149, 23), (144, 164, 25), (149, 173, 27),
+(151, 175, 29), (146, 172, 29), (138, 162, 30), (123, 147, 29),
+(104, 126, 26), (84, 101, 23), (61, 73, 20), (36, 43, 15),
+(12, 12, 12), (48, 49, 8), (85, 85, 7), (114, 118, 7),
+(141, 146, 7), (161, 169, 7), (177, 186, 7), (183, 196, 9),
+(186, 199, 10), (180, 195, 11), (170, 184, 12), (154, 167, 12),
+(130, 143, 13), (103, 115, 13), (75, 82, 12), (43, 48, 11),
+(12, 12, 12), (48, 41, 5), (82, 71, 2), (113, 98, 0),
+(140, 123, 0), (162, 143, 0), (178, 157, 0), (189, 170, 0),
+(191, 172, 0), (188, 172, 0), (176, 161, 0), (160, 146, 0),
+(137, 128, 2), (110, 103, 4), (79, 74, 6), (46, 42, 9),
+(12, 12, 12), (32, 59, 56), (52, 105, 99), (71, 147, 139),
+(86, 185, 177), (99, 216, 208), (108, 239, 232), (112, 254, 245),
+(114, 255, 252), (110, 255, 249), (103, 243, 237), (93, 221, 217),
+(80, 190, 186), (64, 153, 151), (47, 109, 106), (29, 62, 59),
+(12, 12, 12), (35, 56, 53), (59, 98, 96), (81, 138, 135),
+(99, 173, 172), (114, 202, 199), (124, 224, 223), (130, 239, 239),
+(131, 244, 244), (128, 240, 241), (120, 227, 228), (108, 206, 207),
+(93, 175, 179), (74, 143, 144), (53, 100, 103), (32, 56, 59),
+(12, 12, 12), (38, 56, 42), (65, 97, 73), (90, 135, 105),
+(111, 168, 132), (128, 196, 155), (140, 215, 174), (147, 228, 182),
+(149, 231, 190), (146, 227, 188), (136, 213, 179), (123, 194, 165),
+(105, 168, 145), (84, 135, 117), (61, 97, 84), (35, 56, 49),
+(12, 12, 12), (44, 54, 42), (76, 94, 72), (105, 131, 99),
+(127, 163, 123), (145, 189, 142), (156, 208, 158), (164, 220, 168),
+(166, 223, 174), (163, 219, 173), (152, 206, 166), (138, 187, 154),
+(118, 160, 134), (94, 128, 110), (68, 92, 80), (39, 53, 45),
+(12, 12, 12), (57, 59, 39), (100, 103, 66), (136, 144, 92),
+(172, 180, 116), (197, 209, 135), (216, 230, 150), (224, 243, 160),
+(226, 247, 164), (221, 242, 162), (205, 228, 154), (184, 207, 140),
+(155, 177, 122), (123, 141, 99), (86, 101, 72), (49, 57, 41),
+(12, 12, 12), (57, 51, 35), (100, 86, 61), (140, 125, 85),
+(174, 153, 105), (202, 180, 123), (223, 201, 136), (236, 214, 145),
+(239, 218, 149), (235, 217, 148), (221, 204, 140), (200, 188, 128),
+(171, 160, 112), (137, 129, 90), (98, 93, 66), (56, 52, 38),
+(12, 12, 12), (62, 54, 32), (109, 93, 54), (153, 130, 74),
+(191, 164, 92), (222, 190, 107), (245, 212, 119), (255, 224, 127),
+(255, 225, 131), (255, 224, 129), (243, 216, 122), (220, 197, 112),
+(188, 169, 97), (150, 135, 79), (107, 96, 58), (60, 52, 35),
+(12, 12, 12), (62, 43, 29), (109, 78, 48), (152, 108, 65),
+(189, 135, 80), (220, 159, 94), (242, 173, 104), (255, 186, 111),
+(255, 186, 115), (253, 187, 113), (238, 178, 108), (215, 162, 100),
+(184, 138, 87), (146, 112, 71), (104, 81, 52), (59, 47, 32)),
+
+// 703 Alice_3D_Gems
+((0, 0, 0), (1, 32, 25), (2, 64, 50), (3, 96, 76),
+(4, 128, 101), (5, 160, 126), (6, 192, 152), (7, 224, 177),
+(32, 20, 0), (16, 36, 9), (10, 64, 28), (11, 96, 53),
+(12, 128, 78), (13, 160, 104), (14, 192, 130), (15, 224, 154),
+(64, 40, 0), (58, 68, 17), (32, 72, 18), (19, 96, 30),
+(20, 128, 56), (21, 160, 81), (22, 192, 107), (23, 224, 130),
+(96, 61, 0), (100, 99, 25), (75, 104, 26), (48, 108, 27),
+(28, 128, 33), (29, 160, 57), (30, 192, 84), (31, 224, 108),
+(128, 81, 0), (132, 119, 32), (117, 136, 34), (91, 140, 35),
+(65, 144, 36), (39, 160, 37), (38, 192, 61), (39, 224, 85),
+(160, 101, 0), (164, 140, 32), (162, 168, 42), (133, 172, 43),
+(108, 176, 44), (81, 180, 45), (55, 192, 46), (47, 224, 61),
+(192, 122, 0), (196, 161, 32), (200, 198, 50), (176, 204, 51),
+(151, 208, 52), (125, 212, 53), (97, 216, 54), (72, 224, 55),
+(224, 142, 0), (228, 179, 32), (232, 218, 58), (219, 236, 59),
+(192, 240, 60), (168, 244, 61), (140, 248, 62), (113, 252, 63),
+(56, 0, 64), (29, 4, 65), (8, 12, 66), (12, 51, 96),
+(16, 89, 128), (20, 127, 160), (24, 167, 192), (28, 205, 224),
+(72, 0, 48), (72, 32, 73), (46, 40, 74), (44, 71, 96),
+(48, 109, 128), (52, 147, 160), (56, 185, 192), (60, 224, 224),
+(80, 0, 25), (81, 32, 50), (82, 64, 76), (76, 91, 96),
+(80, 128, 126), (84, 160, 152), (86, 192, 178), (87, 224, 204),
+(96, 0, 3), (100, 35, 32), (104, 73, 64), (105, 108, 91),
+(92, 128, 104), (93, 160, 129), (94, 192, 155), (95, 224, 181),
+(128, 17, 0), (132, 55, 32), (136, 94, 64), (140, 132, 96),
+(121, 144, 100), (101, 160, 106), (102, 192, 132), (103, 224, 158),
+(160, 37, 0), (164, 76, 32), (168, 114, 64), (172, 152, 96),
+(164, 176, 108), (137, 180, 109), (111, 192, 110), (111, 224, 134),
+(192, 57, 0), (196, 95, 32), (200, 134, 64), (204, 172, 96),
+(207, 208, 116), (181, 212, 117), (154, 216, 118), (128, 224, 119),
+(224, 78, 0), (228, 117, 32), (232, 154, 64), (236, 192, 96),
+(240, 231, 124), (223, 244, 125), (197, 248, 126), (169, 252, 127),
+(113, 0, 128), (87, 4, 129), (59, 8, 130), (33, 12, 131),
+(16, 25, 132), (20, 64, 160), (24, 102, 192), (28, 139, 224),
+(136, 0, 120), (128, 32, 137), (102, 40, 138), (75, 44, 139),
+(49, 48, 140), (52, 84, 160), (56, 122, 192), (60, 161, 224),
+(144, 0, 96), (145, 32, 122), (145, 64, 146), (119, 76, 147),
+(92, 80, 148), (84, 104, 160), (88, 142, 192), (92, 180, 224),
+(152, 0, 73), (153, 32, 98), (154, 64, 124), (155, 96, 150),
+(135, 112, 156), (116, 124, 160), (120, 162, 192), (124, 201, 224),
+(160, 0, 50), (161, 32, 75), (162, 64, 101), (163, 96, 127),
+(164, 128, 152), (151, 148, 165), (152, 183, 192), (156, 221, 224),
+(168, 0, 28), (169, 32, 52), (170, 64, 78), (172, 96, 104),
+(176, 128, 130), (180, 165, 160), (174, 192, 180), (175, 224, 206),
+(192, 0, 6), (196, 32, 32), (200, 71, 64), (204, 109, 96),
+(208, 147, 128), (212, 185, 160), (210, 216, 182), (184, 224, 183),
+(224, 14, 0), (228, 51, 32), (232, 89, 64), (236, 129, 96),
+(240, 167, 128), (244, 205, 160), (248, 244, 190), (227, 252, 191),
+(170, 0, 192), (143, 4, 193), (116, 8, 194), (88, 12, 195),
+(64, 16, 196), (37, 20, 197), (24, 38, 198), (28, 77, 224),
+(200, 0, 190), (184, 32, 201), (159, 40, 202), (131, 44, 203),
+(105, 48, 204), (80, 52, 205), (56, 58, 206), (60, 95, 224),
+(208, 0, 170), (209, 32, 195), (201, 64, 210), (175, 76, 211),
+(148, 80, 212), (123, 84, 213), (94, 88, 214), (92, 116, 224),
+(216, 0, 144), (217, 32, 171), (218, 64, 195), (217, 96, 219),
+(191, 112, 220), (165, 116, 221), (139, 120, 222), (124, 137, 224),
+(224, 0, 123), (225, 32, 148), (226, 64, 172), (227, 96, 199),
+(228, 128, 223), (208, 148, 229), (181, 152, 230), (156, 157, 231),
+(232, 0, 100), (233, 32, 126), (234, 64, 149), (235, 96, 175),
+(236, 128, 200), (237, 160, 226), (224, 184, 238), (198, 188, 239),
+(240, 0, 76), (241, 32, 102), (242, 64, 126), (243, 96, 152),
+(244, 128, 178), (245, 160, 203), (246, 192, 228), (240, 220, 247),
+(248, 0, 53), (249, 32, 79), (250, 64, 104), (251, 96, 130),
+(252, 128, 155), (253, 160, 180), (254, 192, 206), (255, 224, 231))
+
+
+);
+
+const CMapNames: array[0..NMAPS] of string =
+(
+ '000_south-sea-bather',
+ '001_sky-flesh',
+ '002_blue-bather',
+ '003_no-name',
+ '004_pillows',
+ '005_mauve-splat',
+ '006_facial-treescape 6',
+ '007_fasion-bug',
+ '008_leafy-face',
+ '009_mouldy-sun',
+ '010_sunny-harvest',
+ '011_peach-tree',
+ '012_fire-dragon',
+ '013_ice-dragon',
+ '014_german-landscape',
+ '015_no-name',
+ '016_living-mud-bomb',
+ '017_cars',
+ '018_unhealthy-tan',
+ '019_daffodil',
+ '020_rose',
+ '021_healthy-skin',
+ '022_orange',
+ '023_white-ivy',
+ '024_summer-makeup',
+ '025_glow-buzz',
+ '026_deep-water',
+ '027_afternoon-beach',
+ '028_dim-beach',
+ '029_cloudy-brick',
+ '030_burning-wood',
+ '031_aquatic-garden',
+ '032_no-name',
+ '033_fall-quilt',
+ '034_night-blue-sky',
+ '035_shadow-iris',
+ '036_solid-sky',
+ '037_misty-field',
+ '038_wooden-highlight',
+ '039_jet-tundra',
+ '040_pastel-lime',
+ '041_hell',
+ '042_indian-coast',
+ '043_dentist-decor',
+ '044_greenland',
+ '045_purple-dress',
+ '046_no-name',
+ '047_spring-flora',
+ '048_andi',
+ '049_gig-o835',
+ '050_rie02',
+ '051_rie05',
+ '052_rie11',
+ '053_etretat.ppm',
+ '054_the-hollow-needle-at-etretat.ppm',
+ '055_rouen-cathedral-sunset.ppm',
+ '056_the-houses-of-parliament.ppm',
+ '057_starry-night.ppm',
+ '058_water-lilies-sunset.ppm',
+ '059_gogh.chambre-arles.ppm',
+ '060_gogh.entrance.ppm',
+ '061_gogh.the-night-cafe.ppm',
+ '062_gogh.vegetable-montmartre.ppm',
+ '063_matisse.bonheur-vivre.ppm',
+ '064_matisse.flowers.ppm',
+ '065_matisse.lecon-musique.ppm',
+ '066_modigliani.nude-caryatid.ppm',
+ '067_braque.instruments.ppm',
+ '068_calcoast09.ppm',
+ '069_dodge102.ppm',
+ '070_ernst.anti-pope.ppm',
+ '071_ernst.ubu-imperator.ppm',
+ '072_fighting-forms.ppm',
+ '073_fog25.ppm',
+ '074_geyser27.ppm',
+ '075_gris.josette.ppm',
+ '076_gris.landscape-ceret.ppm',
+ '077_kandinsky.comp-9.ppm',
+ '078_kandinsky.yellow-red-blue.ppm',
+ '079_klee.insula-dulcamara.ppm',
+ '080_nile.ppm',
+ '081_picasso.jfille-chevre.ppm',
+ '082_pollock.lavender-mist.ppm',
+ '083_yngpaint.ppm',
+ '084_cl-gold-orange-green from classlady1.ugr',
+ '085_cl-gold-rose',
+ '086_cl-lavender-purple-blues-black',
+ '087_cl-yellow_mixed-brown-gold',
+ '088_cl-dark_reds-white-grays',
+ '089_cl-gold-dark_reds-browns-blues',
+ '090_cl-golds-browns',
+ '091_cl-purples-browns-blues-tans',
+ '092_cl-oranges-browns-whites',
+ '093_cl-blues-greens-whites',
+ '094_cl-tans-yellows-browns',
+ '095_cl-golds-browns2',
+ '096_cl-pastels',
+ '097_multi_color_1 from ron1.ugr (classylady & ron)',
+ '098_oranges',
+ '099_multi_color_2',
+ '100_rw-yellow-orange',
+ '101_rw-multi-color-2',
+ '102_rw-blue-with-red',
+ '103_rw-blue-with-red-2',
+ '104_rw-blues-3',
+ '105_rw-reds-pinks-blues',
+ '106_rw-browns-greens-reds-bule',
+ '107_rw-browns-pinks-reds-blues',
+ '108_rw-reds-greens-blues-pinks-yellows-browns',
+ '109_rw-greens-light-to-dark',
+ '110_rw-blues-reds-purples',
+ '111_rw-multi-5',
+ '112_rw-blues-black-purple',
+ '113_rw-multi-colors-6',
+ '114_rw-multi-reds-oranges',
+ '115_rw-yellows-browns-goldish',
+ '116_rw-multi-blues-with-gray',
+ '117_rw-greens-multi',
+ '118_rw-browns-orange-yellow-with-blues',
+ '119_rw-reds-blues-greens-pinks',
+ '120_rw-reds-browns-golds-tans',
+ '121_dg009',
+ '122_dg016',
+ '123_dg031',
+ '124_dg085',
+ '125_dg086',
+ '126_dg089',
+ '127_Apophysis-040426-1crabgrass from pat phillips patrx.deviantart.com',
+ '128_Apophysis-040426-12bs1fl',
+ '129_Apophysis-040426-1cometnuc',
+ '130_Apophysis-040426-1passionscross',
+ '131_Apophysis-040426-1butterflyflower',
+ '132_Apophysis-040426-1Watcher',
+ '133_Apophysis-040426-1knotted',
+ '134_Apophysis-040426-1artdeco',
+ '135_Apophysis-040426-1expl_orange2a',
+ '136_Apophysis-040426-1heartFlowers',
+ '137_Apophysis-040426-1H-bird1g',
+ '138_Apophysis-040426-1Emergence2',
+ '139_Apophysis-040426-1Egg',
+ '140_Apophysis-040426-1PenEgg',
+ '141_Apophysis-040426-1kaosGothic',
+ '142_Apophysis-040426-1KQNova',
+ '143_Apophysis-040426-1kaosframe',
+ '144_Apophysis-040426-147KaosRing',
+ '145_Apophysis-040426-147Fighting_Fish',
+ '146_Apophysis-040426-147ReachingMoon',
+ '147_Apophysis-040426-163KaosScepter',
+ '148_Apophysis-040426-163KSphere',
+ '149_Apophysis-040426-163KInterseed',
+ '150_Apophysis-040426-163XmasFlwers',
+ '151_Apophysis-040426-163Shield',
+ '152_Apophysis-040426-163AlienFlwers',
+ '153_Apophysis-040426-163AlienFlwers4',
+ '154_Apophysis-040426-163butterflyflwer1',
+ '155_Apophysis-040426-163ButterflySherbert',
+ '156_Apophysis-040426-163BFlyGate4',
+ '157_Apophysis-040426-163BFlyGate4Inv',
+ '158_Apophysis-040426-163CeltCross',
+ '159_Apophysis-040426-163Egg4d',
+ '160_Apophysis-040426-163FlowerFerns',
+ '161_Apophysis-040426-163FlowerFernsInv',
+ '162_Apophysis-040426-163FlwrFernsInv',
+ '163_Apophysis-040426-163FloralCascade2',
+ '164_Apophysis-040426-163FlowerBurst',
+ '165_Apophysis-040426-163MaltesePurple',
+ '166_Apophysis-040426-163Mycelialg',
+ '167_Apophysis-040426-163MyceliaInv',
+ '168_Apophysis-040426-163MrryGRnd',
+ '169_Apophysis-040426-163SprngFlwrs',
+ '170_Apophysis-040426-163SprngFlwersInv',
+ '171_Apophysis-040426-163DemMask',
+ '172_Apophysis-040426-163ResurectTree',
+ '173_Apophysis-040426-163GldBlue',
+ '174_Apophysis-040426-163WrldBndr',
+ '175_Apophysis-040426-163GrnPrpl',
+ '176_Apophysis-040426-163SphPart2',
+ '177_Apophysis-040426-163StAmF',
+ '178_Apophysis-040426-163StCosOwl',
+ '179_Apophysis-040426-163StGenie',
+ '180_Apophysis-040426-163St',
+ '181_Apophysis-040426-163StSatAngel',
+ '182_Apophysis-040427-1knotted',
+ '183_Apophysis-040427-4AlngSpder',
+ '184_Apophysis-040427-4AlienFlwerBwl',
+ '185_Apophysis-040427-4AlienFlwrBwl_inv',
+ '186_Apophysis-040427-4AmusePrk',
+ '187_Apophysis-040427-4AmusePrkInv',
+ '188_Apophysis-040427-4AmythIceInv',
+ '189_Apophysis-040427-4AmythIce',
+ '190_Apophysis-040427-4AngOrchid',
+ '191_Apophysis-040427-4Leaves',
+ '192_Apophysis-040427-4Bdlnds',
+ '193_Apophysis-040427-4BnnySurp',
+ '194_Apophysis-040427-4BorgEY',
+ '195_Apophysis-040427-4BB4',
+ '196_Apophysis-040427-4BflyWindw2',
+ '197_Apophysis-040427-4BflyWndw3',
+ '198_Apophysis-040427-4ChalLghtDrknss',
+ '199_Apophysis-040427-4ChalicDrknsIce',
+ '200_Apophysis-040427-4CactusFlwer',
+ '201_Apophysis-040427-4ChrryBlssmT',
+ '202_Apophysis-040427-4ChrryBlssm2',
+ '203_Apophysis-040427-4CircAmbr',
+ '204_Apophysis-040427-4CsmcOwl',
+ '205_Apophysis-040427-4DblBeetle',
+ '206_Apophysis-040427-4DrkMantis',
+ '207_Apophysis-040427-4HolidyBull',
+ '208_Apophysis-040427-4DrkFlorCnpy',
+ '209_Apophysis-040427-4DethstrDemis',
+ '210_Apophysis-040427-4DethstrDems',
+ '211_Apophysis-040427-4DeerDemMsk',
+ '212_Apophysis-040427-4CrouchDragn',
+ '213_Apophysis-040427-4CopprMapleleaf',
+ '214_Apophysis-040427-4Circulations',
+ '215_Apophysis-040427-4DmnContaind',
+ '216_Apophysis-040427-4DmnCntndWP',
+ '217_Apophysis-040427-4DmnDimensn',
+ '218_Apophysis-040427-4SatnFlorlSwag',
+ '219_Apophysis-040427-4DDragHeart',
+ '220_Apophysis-040427-4DimesPathsE',
+ '221_Apophysis-040427-4DimensPathsE2',
+ '222_Apophysis-040427-4DimensPathE2',
+ '223_Apophysis-040427-4Doodles',
+ '224_Apophysis-040427-4Doodles2',
+ '225_Apophysis-040427-4doodles3',
+ '226_Apophysis-040427-4Doodle3inv',
+ '227_Apophysis-040427-6DoublEagles2',
+ '228_Apophysis-040427-6Equinox',
+ '229_Apophysis-040427-6Equinox2',
+ '230_Apophysis-040427-6BluBrd',
+ '231_Apophysis-040427-6BluBrdInv',
+ '232_Apophysis-040427-6FaerieKng',
+ '233_Apophysis-040427-6FireDemnOrch',
+ '234_Apophysis-040427-6CsmcLottoWhl',
+ '235_Apophysis-040427-6DreamFaeriRlm',
+ '236_Apophysis-040427-6EyeUniv',
+ '237_Apophysis-040427-6FaeriRob',
+ '238_Apophysis-040427-6FaeriRob2',
+ '239_Apophysis-040427-6FaeriRobDet',
+ '240_Apophysis-040427-6FlakWhorls',
+ '241_Apophysis-040427-11FlarCelebrat',
+ '242_Apophysis-040427-11SpacTrees',
+ '243_Apophysis-040427-11FloralQult',
+ '244_Apophysis-040427-20FlwrFrnsBFly',
+ '245_Apophysis-040427-24FracrameE',
+ '246_Apophysis-040427-24FNouveau',
+ '247_Apophysis-040427-24GuardFaeriR',
+ '248_Apophysis-040427-24GoldenRays',
+ '249_Apophysis-040427-24HunterSunset',
+ '250_Apophysis-040427-25IntoWeave',
+ '251_Apophysis-040427-26AlienMind',
+ '252_Apophysis-040427-26ISpher4',
+ '253_Apophysis-040427-26ISph2',
+ '254_Apophysis-040427-26ISph11',
+ '255_Apophysis-040427-43HeartFlwr',
+ '256_Apophysis-040427-43JunglThron',
+ '257_Apophysis-040427-44jawa',
+ '258_Apophysis-040427-51KaosGrn',
+ '259_Apophysis-040427-51KaosFish',
+ '260_Apophysis-040427-51KKlown',
+ '261_Apophysis-040427-51KaosEgg',
+ '262_Apophysis-040427-51LavLace',
+ '263_Apophysis-040427-51mudding',
+ '264_Apophysis-040427-51pane;',
+ '265_Apophysis-040427-51RiftAO',
+ '266_Apophysis-040427-51ylwAlien',
+ '267_Apophysis-040427-51elecforest',
+ '268_Apophysis-040427-51ReachMoon',
+ '269_Apophysis-040427-51satPhlox',
+ '270_Apophysis-040427-51SnikRchg',
+ '271_Apophysis-040427-51SmwhrDream',
+ '272_Apophysis-040427-51eyepuzzl',
+ '273_Apophysis-040427-51SpherInBlm',
+ '274_Apophysis-040427-51SunrisSpacTim',
+ '275_Apophysis-040427-51synaps',
+ '276_Apophysis-040427-51StPeacocl',
+ '277_Apophysis-040427-51TmplWatrs2',
+ '278_Apophysis-040427-51TeddyScare',
+ '279_Apophysis-040427-51kaosGardenr',
+ '280_Apophysis-040427-51Thatway4',
+ '281_Apophysis-040427-51ThatwayGrn',
+ '282_Apophysis-040427-51TreeLife1',
+ '283_Apophysis-040427-51TreeLife',
+ '284_Apophysis-040427-51triflwr',
+ '285_Apophysis-040427-51mitosis',
+ '286_Apophysis-040427-51triflwer',
+ '287_Apophysis-040427-51yggF',
+ '288_Apophysis-040427-51Gwrap',
+ '289_Apophysis-040428-1Gradient1',
+ '290_Apophysis-040428-3Gradient2',
+ '291_Apophysis-040602-1',
+ '292_Apophysis-040531-100figurine_2abcd',
+ '293_Apo-040627-1_chickadee_pix',
+ '294_2u0026t.jpg from bTomchek',
+ '295_2u0007t.jpg',
+ '296_2u0010t.jpg',
+ '297_2u0015t.jpg',
+ '298_2u0017pp1t.jpg',
+ '299_2u0017t.jpg',
+ '300_2u0018t.jpg',
+ '301_2u0020pp1t.jpg',
+ '302_2u0020t.jpg',
+ '303_2u0024t.jpg',
+ '304_gradient0000.jpg',
+ '305_0t0507.jpg',
+ '306_0t0524.jpg',
+ '307_0t0533.jpg',
+ '308_0u0075.jpg',
+ '309_0u0298.jpg',
+ '310_0u0298pp1.jpg',
+ '311_0u0303.jpg',
+ '312_0u0333.jpg',
+ '313_0u0752.jpg',
+ '314_0u0768.jpg',
+ '315_0u0795.jpg',
+ '316_1u0214.jpg',
+ '317_1u0215.jpg',
+ '318_1u0216.jpg',
+ '319_1u0216pp1.jpg',
+ '320_3m0001.jpg',
+ '321_3m0004.jpg',
+ '322_3m0005.jpg',
+ '323_3m0006.jpg',
+ '324_3m0007.jpg',
+ '325_3m0008.jpg',
+ '326_3m0009.jpg',
+ '327_3m0010.jpg',
+ '328_3m0011.jpg',
+ '329_3m0012.jpg',
+ '330_3m0013.jpg',
+ '331_3m0014.jpg',
+ '332_3m0015.jpg',
+ '333_3m0016.jpg',
+ '334_3m0018.jpg',
+ '335_4u0002.jpg',
+ '336_4u0003.jpg',
+ '337_4u0004.jpg',
+ '338_4u0005.jpg',
+ '339_4u0006.jpg',
+ '340_4u0007.jpg',
+ '341_4u0008.jpg',
+ '342_4u0009.jpg',
+ '343_4u0009b.jpg',
+ '344_4u0010.jpg',
+ '345_4u0011.jpg',
+ '346_4u0012.jpg',
+ '347_4u0013.jpg',
+ '348_4u0019.jpg',
+ '349_4u0022.jpg',
+ '350_k2u0217.jpg',
+ '351_ku0213.jpg',
+ '352_ku0215.jpg',
+ '353_s00026.jpg',
+ '354_s00043.jpg',
+ '355_s00118.jpg',
+ '356_s00138.jpg',
+ '357_s00149.jpg',
+ '358_vchira_0001.jpg',
+ '359_vchira_0003.jpg',
+ '360_vchira_0012.jpg',
+ '361_vchira_0013.jpg',
+ '362_vchira_0014.jpg',
+ '363_vchira_0015.jpg',
+ '364_vchira_17.jpg',
+ '365_vchira_18pp1.jpg',
+ '366_vchira_19.jpg',
+ '367_vchira_28.jpg',
+ '368_vchira_2pp1.jpg',
+ '369_00017',
+ '370_040208-115',
+ '371_040221-00',
+ '372_040221-11',
+ '373_040221-12',
+ '374_040221-13',
+ '375_040221-14',
+ '376_040221-19',
+ '377_040221-2',
+ '378_040221-21',
+ '379_040221-22',
+ '380_040221-23',
+ '381_040221-24',
+ '382_040221-25',
+ '383_040221-26',
+ '384_040221-27',
+ '385_040221-28',
+ '386_040221-29',
+ '387_040221-30',
+ '388_040221-31',
+ '389_040221-32',
+ '390_040221-33',
+ '391_040221-34',
+ '392_040221-35',
+ '393_040221-36',
+ '394_040221-37',
+ '395_040221-38',
+ '396_040221-39',
+ '397_040221-40',
+ '398_040221-41',
+ '399_040221-42',
+ '400_040221-43',
+ '401_040221-44',
+ '402_040221-45',
+ '403_040221-46',
+ '404_040221-47',
+ '405_040221-48',
+ '406_040221-49',
+ '407_040221-50',
+ '408_040221-51',
+ '409_040221-52',
+ '410_040221-53',
+ '411_040221-54',
+ '412_040221-55',
+ '413_040221-56',
+ '414_040221-57',
+ '415_040221-58',
+ '416_040221-59',
+ '417_040221-60',
+ '418_040221-61',
+ '419_040221-62',
+ '420_040221-63',
+ '421_040221-64',
+ '422_040221-71',
+ '423_040221-74',
+ '424_040221-78',
+ '425_040221-80',
+ '426_040221-81',
+ '427_040221-84',
+ '428_040221-85',
+ '429_040221-86',
+ '430_040221-88',
+ '431_040221-89',
+ '432_040221-90',
+ '433_040221-91',
+ '434_040221-92',
+ '435_040221-93',
+ '436_040221-94',
+ '437_040221-95',
+ '438_040221-96',
+ '439_040221-97',
+ '440_040221-98',
+ '441_040221-99',
+ '442_040222',
+ '443_040222-00',
+ '444_040222-01',
+ '445_040222-02',
+ '446_040222-03',
+ '447_040222-05',
+ '448_040222-06',
+ '449_040222-07',
+ '450_040222-08',
+ '451_040222-09',
+ '452_040222-10',
+ '453_040222-11',
+ '454_040222-12',
+ '455_040222-13',
+ '456_040222-15',
+ '457_040222-16',
+ '458_040222-17',
+ '459_040222-18',
+ '460_040222-19',
+ '461_040222-20',
+ '462_040222-21',
+ '463_040222-22',
+ '464_040222-23',
+ '465_040222-24',
+ '466_040222-25',
+ '467_040222-26',
+ '468_040222-27',
+ '469_040222-28',
+ '470_040222-29',
+ '471_040223',
+ '472_040224',
+ '473_040225',
+ '474_040226',
+ '475_040227',
+ '476_040228',
+ '477_10000',
+ '478_Apophysis-040208-115d',
+ '479_Apophysis-040208-115e',
+ '480_Apophysis-040208-115g',
+ '481_Apophysis-040208-115h',
+ '482_Apophysis-040208-115i',
+ '483_Apophysis-040208-115j',
+ '484_Apophysis-040208-115k',
+ '485_A_Bit_Confused',
+ '486_Afternoon_Shadows',
+ '487_Air',
+ '488_Angora',
+ '489_Antique',
+ '490_Arizona',
+ '491_Autumn_Garden',
+ '492_Autumn_Leaves',
+ '493_Autumn_Mountains',
+ '494_Awakening',
+ '495_Baby',
+ '496_Banana',
+ '497_Beach',
+ '498_Beautiful',
+ '499_Before_Dawn',
+ '500_Beginning_to_Thaw',
+ '501_Beige',
+ '502_Berry_Bush',
+ '503_Biology_Class',
+ '504_Birthday_Party',
+ '505_Bistro',
+ '506_Blossoms',
+ '507_Blue_Velvet',
+ '508_Bluebells',
+ '509_Blush',
+ '510_Bluster',
+ '511_Boquet_of_Roses',
+ '512_Brushed_Silver',
+ '513_Bubblegum',
+ '514_California',
+ '515_Canyon',
+ '516_Carnations',
+ '517_Carnival',
+ '518_Carpenter',
+ '519_Cellist',
+ '520_Cherry',
+ '521_Circus',
+ '522_City_Street',
+ '523_Clash',
+ '524_Clouds',
+ '525_Copper',
+ '526_Coral',
+ '527_Cotton_Flower',
+ '528_Country_Garden',
+ '529_Creamsicle',
+ '530_Cricket_Music',
+ '531_Dark_Rainbow',
+ '532_Dark_Rose',
+ '533_Dark_Turquoise',
+ '534_Dark_Waters',
+ '535_Darkness',
+ '536_Davinci',
+ '537_Daylight_Fading',
+ '538_Dinosaurs',
+ '539_Dragon',
+ '540_Dust_Bunny',
+ '541_Dynasty',
+ '542_Easter',
+ '543_Easter_2',
+ '544_Easter_3',
+ '545_Egg_Hunt',
+ '546_Elements',
+ '547_Embers',
+ '548_Etomchek-040328-005',
+ '549_Etomchek-040328-006',
+ '550_Etomchek-040328-007',
+ '551_Etomchek-040328-008',
+ '552_Etomchek-040328-009',
+ '553_Etomchek-040328-010',
+ '554_Etomchek-040328-011',
+ '555_Evening_Sunshine',
+ '556_Evensong',
+ '557_Exceding_Expectations',
+ '558_Explosion',
+ '559_Faded_Denim',
+ '560_Fading_Away',
+ '561_Fiery_Sky',
+ '562_Fiesta',
+ '563_First_Love',
+ '564_Flame',
+ '565_Flying_a_Kite',
+ '566_Foamy_Waves',
+ '567_For_Lenora',
+ '568_For_Stacy',
+ '569_Forest',
+ '570_Frivolous',
+ '571_Fun_Stuff',
+ '572_Getting_a_Tan',
+ '573_gipper',
+ '574_Glade',
+ '575_Glory',
+ '576_Gold_and_Blue',
+ '577_Golden',
+ '578_Golden_Green',
+ '579_Goldenrod',
+ '580_Grape',
+ '581_Lemon_Grass',
+ '582_Magenta_and_Teal',
+ '583_Mahogany',
+ '584_Marina',
+ '585_Meadow',
+ '586_Mermaid',
+ '587_Mesmerize',
+ '588_Midnight_Wave',
+ '589_Mint',
+ '590_Mistic',
+ '591_Mixed_Berry',
+ '592_More_Blue',
+ '593_Morning_Glories_at_Night',
+ '594_Moss',
+ '595_Moss2',
+ '596_Motel_Decor',
+ '597_Muddy',
+ '598_Muddy_2',
+ '599_Muted_Rainbow',
+ '600_Mystery',
+ '601_Neon',
+ '602_Neon_Purple',
+ '603_Night_Flower',
+ '604_Night_Reeds',
+ '605_No_Clue',
+ '606_Nonsense',
+ '607_Oak_Tree',
+ '608_Ocean_Mist',
+ '609_Paige',
+ '610_Paris',
+ '611_Parrot',
+ '612_Pastel_Lime',
+ '613_Peace',
+ '614_Persia',
+ '615_Persia_2',
+ '616_Persia_3',
+ '617_Pink',
+ '618_Pollen',
+ '619_Poppies',
+ '620_Produce_Department',
+ '621_Purple',
+ '622_Queen_Anne',
+ '623_Quiet',
+ '624_Rainbow_Sprinkles',
+ '625_Rainforest',
+ '626_Rainy_Day_in_Spring',
+ '627_Rainy_Forset',
+ '628_Red_Light',
+ '629_Riddle',
+ '630_Riverside',
+ '631_Rose_Bush',
+ '632_Rusted',
+ '633_Sachet',
+ '634_Sage',
+ '635_Saturday_Morning',
+ '636_Scattered_Petals',
+ '637_Sea_Mist',
+ '638_Secret',
+ '639_Serenity',
+ '640_Serpent',
+ '641_Sharp',
+ '642_Shy_Violets',
+ '643_Singe',
+ '644_Slate',
+ '645_Slightly_Messy',
+ '646_Smog',
+ '647_Sno_and_Shadows',
+ '648_Snowy_Field',
+ '649_Snuggle',
+ '650_Soap_Bubble',
+ '651_Sophia',
+ '652_Strawberries',
+ '653_Summer',
+ '654_Summer_Fire',
+ '655_Summer_Skies',
+ '656_Summer_Tulips',
+ '657_Sunbathing',
+ '658_Sunny_Field',
+ '659_Sunset',
+ '660_Surfer',
+ '661_Tequila',
+ '662_Thistle',
+ '663_Tribal',
+ '664_Trippy',
+ '665_Tropic',
+ '666_True_Blue',
+ '667_Tryst',
+ '668_Tumbleweed',
+ '669_Type_AB_Positive',
+ '670_Underwater_Day',
+ '671_Venice',
+ '672_Victoria',
+ '673_Violet',
+ '674_Violet_Fog',
+ '675_Watermelon',
+ '676_Whisp',
+ '677_Whisper',
+ '678_Wintergrass',
+ '679_Wooden',
+ '680_Wooden_2',
+ '681_Wooden_3',
+ '682_Woodland',
+ '683_Yellow_Silk',
+ '684_Zinfandel',
+ '685_040412',
+ '686_040412-000',
+ '687_040412-001',
+ '688_040412-002',
+ '689_040412-005',
+ '690_040412-006',
+ '691_040412-007',
+ '692_040412-008',
+ '693_040412-010',
+ '694_040412-011',
+ '695_040412-012',
+ '696_040412-013',
+ '697_040412-014',
+ '698_040412-015',
+ '699_040412-016',
+ '700_040412-017',
+ '701_Spectrum',
+ '702_Alice_3D_Grass-and-Sky',
+ '703_Alice_3D_Gems'
+);
+
+implementation
+
+end.
+
+
diff --git a/Core/BaseVariation.pas b/Core/BaseVariation.pas
new file mode 100644
index 0000000..ac356c4
--- /dev/null
+++ b/Core/BaseVariation.pas
@@ -0,0 +1,226 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit BaseVariation;
+
+interface
+
+type
+ TCalcFunction = procedure of object;
+
+type
+ TBaseVariation = class
+
+ protected
+ procedure CalcFunction; virtual; abstract;
+
+ public
+ vvar: double;
+ FTx, FTy: ^double;
+ FPx, FPy: ^double;
+ FTz, FPz: ^double;
+
+ // more params :)
+ color : ^double;
+ a, b, c, d, e, f : double;
+
+ class function GetName: string; virtual; abstract;
+ class function GetInstance: TBaseVariation; virtual; abstract;
+
+ function GetNrVariables: integer; virtual;
+ function GetVariableNameAt(const Index: integer): string; virtual;
+
+ function GetVariable(const Name: string; var Value: double): boolean; virtual;
+ function SetVariable(const Name: string; var Value: double): boolean; virtual;
+ function ResetVariable(const Name: string): boolean; virtual;
+
+ function GetVariableStr(const Name: string): string; virtual;
+ function SetVariableStr(const Name: string; var strValue: string): boolean; virtual;
+
+ procedure Prepare; virtual;
+
+ procedure GetCalcFunction(var Delphi_Suxx: TCalcFunction); virtual;
+ end;
+
+ TBaseVariationClass = class of TBaseVariation;
+
+type
+ TVariationLoader = class
+ public
+ Supports3D, SupportsDC : boolean;
+
+ function GetName: string; virtual; abstract;
+ function GetInstance: TBaseVariation; virtual; abstract;
+ function GetNrVariables: integer; virtual; abstract;
+ function GetVariableNameAt(const Index: integer): string; virtual; abstract;
+ end;
+
+type
+ TVariationClassLoader = class (TVariationLoader)
+ public
+ constructor Create(varClass : TBaseVariationClass);
+ function GetName: string; override;
+ function GetInstance: TBaseVariation; override;
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ private
+ VariationClass : TBaseVariationClass;
+ end;
+
+const
+ PI2 = 6.283185307179586476925286766559; // AV
+ PI_2 = 1.5707963267948966192313216916398; // AV
+
+function fmod(x, y: double) : double;
+procedure SinhCosh(const v: double; var sh, ch: double); // AV
+
+implementation
+
+uses SysUtils;
+
+function fmod(x, y: double) : double;
+begin
+ Result := frac(x / y) * y;
+end;
+
+procedure SinhCosh(const v: double; var sh, ch: double);
+// AV: calcs both hyperbolic sine and cosine
+var ep, en: double;
+begin
+ ep := 0.5 * exp(v);
+ en := 0.25 / ep; // 0.5 * exp(-v);
+ sh := ep - en;
+ ch := ep + en;
+end;
+
+{ TBaseVariation }
+
+///////////////////////////////////////////////////////////////////////////////
+function TBaseVariation.GetNrVariables: integer;
+begin
+ Result := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TBaseVariation.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+function TBaseVariation.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+function TBaseVariation.ResetVariable(const Name: string): boolean;
+var
+ zero: double;
+begin
+ zero := 0;
+ Result := SetVariable(Name, zero);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TBaseVariation.GetVariableStr(const Name: string): string;
+var
+ value: double;
+begin
+ if GetVariable(Name, value) then
+ Result := Format('%.6g', [value])
+ else
+ Result := '';
+end;
+
+function TBaseVariation.SetVariableStr(const Name: string; var strValue: string): boolean;
+var
+ v, oldv: double;
+begin
+ if GetVariable(Name, oldv) then begin
+ try
+ v := StrToFloat(strValue);
+ SetVariable(Name, v);
+ except
+ v := oldv;
+ end;
+ strValue := Format('%.6g', [v]);
+ Result := true;
+ end
+ else Result := false;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TBaseVariation.GetVariableNameAt(const Index: integer): string;
+begin
+ Result := ''
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseVariation.Prepare;
+begin
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseVariation.GetCalcFunction(var Delphi_Suxx: TCalcFunction);
+begin
+ Delphi_Suxx := CalcFunction; // -X- lol
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+{ TVariationClassLoader }
+
+constructor TVariationClassLoader.Create(varClass : TBaseVariationClass);
+begin
+ VariationClass := varClass;
+end;
+
+function TVariationClassLoader.GetName: string;
+begin
+ Result := VariationClass.GetName();
+end;
+
+function TVariationClassLoader.GetInstance: TBaseVariation;
+begin
+ Result := VariationClass.GetInstance();
+end;
+
+function TVariationClassLoader.GetNrVariables: integer;
+var
+ hack : TBaseVariation;
+begin
+ hack := GetInstance();
+ Result := hack.GetNrVariables();
+ hack.Free();
+end;
+
+function TVariationClassLoader.GetVariableNameAt(const Index: integer): string;
+var
+ hack : TBaseVariation;
+begin
+ hack := GetInstance();
+ Result := hack.GetVariableNameAt(Index);
+ hack.Free();
+end;
+
+end.
diff --git a/Core/Bezier.pas b/Core/Bezier.pas
new file mode 100644
index 0000000..23bcae0
--- /dev/null
+++ b/Core/Bezier.pas
@@ -0,0 +1,94 @@
+unit Bezier;
+
+interface
+
+uses Math;
+
+
+type
+ BezierPoint = record
+ x, y: double;
+ end;
+ BezierRect = record
+ x0, y0, x1, y1: double;
+ end;
+
+ BezierPoints = array [0..3] of BezierPoint;
+ BezierWeights = array [0..3] of double;
+
+procedure BezierCopy(src: BezierPoints; var tgt: BezierPoints);
+procedure BezierSetRect(var points: BezierPoints; flip: boolean; rect: BezierRect);
+procedure BezierUnsetRect(var points: BezierPoints; flip: boolean; rect: BezierRect);
+
+procedure BezierSolve(t: double; src: BezierPoints; w: BezierWeights; var solution: BezierPoint);
+function BezierFunc(t: double; src: BezierPoints; w: BezierWeights): double;
+
+implementation
+ procedure BezierCopy(src: BezierPoints; var tgt: BezierPoints);
+ var
+ i, n: integer;
+ begin
+ n := Length(src);
+ for i := 0 to n - 1 do
+ tgt[i] := src[i];
+ end;
+ procedure BezierSetRect(var points: BezierPoints; flip: boolean; rect: BezierRect);
+ var
+ i, n: integer;
+ f: double;
+ begin
+ n := Length(points);
+ for i := 0 to n - 1 do
+ begin
+ if (flip) then f := 1 - points[i].y
+ else f := points[i].y;
+
+ points[i].x := points[i].x * (rect.x1 - rect.x0) + rect.x0;
+ points[i].y := f * (rect.y1 - rect.y0) + rect.y0;
+ end;
+ end;
+ procedure BezierUnsetRect(var points: BezierPoints; flip: boolean; rect: BezierRect);
+ var
+ i, n: integer;
+ f: double;
+ begin
+ if ((rect.x1 - rect.x0) = 0) or ((rect.y1 - rect.y0) = 0) then Exit;
+
+ n := Length(points);
+ for i := 0 to n - 1 do
+ begin
+ points[i].x := (points[i].x - rect.x0) / (rect.x1 - rect.x0);
+ points[i].y := (points[i].y - rect.y0) / (rect.y1 - rect.y0);
+
+ if (flip) then points[i].y := 1 - points[i].y;
+ end;
+ end;
+
+ procedure BezierSolve(t: double; src: BezierPoints; w: BezierWeights; var solution: BezierPoint);
+ var
+ s, s2, s3, t2, t3, nom_x, nom_y, denom: double;
+ begin
+ s := 1 - t;
+ s2 := s * s; s3 := s * s * s;
+ t2 := t * t; t3 := t * t * t;
+
+ nom_x := w[0] * s3 * src[0].x + w[1] * s2 * 3 * t * src[1].x +
+ w[2] * s * 3 * t2 * src[2].x + w[3] * t3 * src[3].x;
+ nom_y := w[0] * s3 * src[0].y + w[1] * s2 * 3 * t * src[1].y +
+ w[2] * s * 3 * t2 * src[2].y + w[3] * t3 * src[3].y;
+ denom := w[0] * s3 + w[1] * s2 * 3 * t + w[2] * s * 3 * t2 + w[3] * t3;
+
+ if (IsNaN(nom_x)) or (IsNaN(nom_y)) or (IsNaN(denom)) then Exit;
+ if denom = 0 then Exit;
+
+ solution.x := nom_x / denom;
+ solution.y := nom_y / denom;
+ end;
+ function BezierFunc(t: double; src: BezierPoints; w: BezierWeights): double;
+ var
+ p: BezierPoint;
+ begin
+ BezierSolve(t, src, w, p);
+ Result := p.y;
+ end;
+end.
diff --git a/Core/Chaotica.pas b/Core/Chaotica.pas
new file mode 100644
index 0000000..7eb1db6
--- /dev/null
+++ b/Core/Chaotica.pas
@@ -0,0 +1,300 @@
+unit Chaotica;
+
+interface
+
+uses Global, RegularExpressionsCore, RegexHelper, Classes, SysUtils, XFormMan, Windows,
+ ShellAPI, Forms, ControlPoint, Translation;
+
+function C_GetPathOf(filename: string; usex64: boolean): string;
+function C_SupportsDllPlugins(usex64: boolean): boolean;
+function C_IsDllPluginBlacklisted(filename: string; usex64: boolean): boolean;
+function C_IsVariationNative(name: string; usex64: boolean): boolean;
+function C_IsDllPluginInstalled(filename: string): boolean;
+
+procedure C_SyncDllPlugins;
+procedure C_InstallVariation(name: string);
+procedure C_ExecuteChaotica(flamexml: string; plugins: TStringList; usex64: boolean);
+
+implementation
+
+uses Main;
+
+(* // AV: rewrote and moved to Global unit
+function CheckX64: Boolean;
+var
+ SEInfo: TShellExecuteInfo;
+ ExitCode: DWORD;
+ ExecuteFile, ParamString, StartInString: string;
+begin
+ {$ifdef Apo7X64}
+ Result := true;
+ exit;
+ {$endif}
+
+ ExecuteFile := ExtractFilePath(Application.ExeName) + 'chk64.exe';
+ FillChar(SEInfo, SizeOf(SEInfo), 0);
+ SEInfo.cbSize := SizeOf(TShellExecuteInfo);
+
+ with SEInfo do begin
+ fMask := SEE_MASK_NOCLOSEPROCESS;
+ Wnd := Application.Handle;
+ lpFile := PChar(ExecuteFile) ;
+ nShow := SW_SHOWNORMAL;
+ end;
+
+ if ShellExecuteEx(@SEInfo) then
+ begin
+ repeat
+ Application.ProcessMessages;
+ GetExitCodeProcess(SEInfo.hProcess, ExitCode);
+ until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
+ Result := (ExitCode = 0);
+ end else begin
+ Result := false;
+ end;
+end;
+*)
+
+function C_GetPathOf(filename: string; usex64: boolean): string;
+begin
+ Result := ChaoticaPath + '\' + filename;
+end;
+
+function C_SupportsDllPlugins(usex64: boolean): boolean;
+const
+ re_root : string = '.*? ';
+ re_attrib : string = 'supports_dll_plugins="(.*?)"';
+var
+ xml_file : TStringList;
+ xml_text, attrib, value : string;
+begin
+ if usex64 then begin
+ Result := false;
+ Exit;
+ end;
+
+ xml_file := TStringList.Create;
+// AV: for compatibility with new Chaotica versions
+ if not FileExists(ChaoticaPath + '\variation_compatibility.xml') then
+ begin
+ xml_file.Add('' + #13#10 + ' ');
+ xml_file.SaveToFile(ChaoticaPath + '\variation_compatibility.xml');
+ xml_file.Clear;
+ end;
+ xml_file.LoadFromFile(C_GetPathOf('variation_compatibility.xml', false));
+ xml_text := xml_file.Text;
+ xml_file.Free;
+
+ attrib := GetStringPart(xml_text, re_root, 1, 'supports_dll_plugins="false"');
+ value := GetStringPart(attrib, re_attrib, 1, 'false');
+
+ Result := (value = 'true');
+end;
+
+function C_IsDllPluginBlacklisted(filename: string; usex64: boolean): boolean;
+var
+ i: integer;
+ blacklist: TStringList;
+begin
+ blacklist := TStringList.Create;
+ if not FileExists(ChaoticaPath + '\plugin_dll_blacklist.txt') then
+ begin
+ blacklist.Add('avMobius.dll');
+ blacklist.Add('Cross.dll');
+ blacklist.Add('Epispiral.dll');
+ blacklist.Add('EpispiralVariationPlugin.dll');
+ blacklist.Add('FlowerVariationPlugin.dll');
+ blacklist.Add('Lissajous.dll');
+ blacklist.Add('Mandelbrot.dll');
+ blacklist.Add('ShapeVariationPlugin.dll');
+ blacklist.Add('slinky.dll');
+ blacklist.Add('Spirograph.dll');
+ blacklist.Add('Square.dll');
+ blacklist.Add('Stretchy Pants.dll');
+ blacklist.Add('Waffle.dll');
+ blacklist.SaveToFile(ChaoticaPath + '\plugin_dll_blacklist.txt');
+ end;
+
+ blacklist.LoadFromFile(C_GetPathOf('plugin_dll_blacklist.txt', usex64));
+
+ for i := 0 to blacklist.Count - 1 do begin
+ if LowerCase(filename) = LowerCase(blacklist.Strings[i]) then begin
+ Result := true;
+ blacklist.Free;
+ Exit;
+ end;
+ end;
+
+ blacklist.Free;
+ Result := false;
+end;
+
+function C_IsVariationNative(name: string; usex64: boolean): boolean;
+const
+ re_root : string = '(.*?)';
+ re_var : string = ' ';
+var
+ xml, var_name : string;
+ xml_file : TStringList;
+ find_var : TPerlRegEx;
+ found_var : boolean;
+begin
+
+ xml_file := TStringList.Create;
+ // AV: for compatibility with new Chaotica versions
+ if not FileExists(ChaoticaPath + '\variation_compatibility.xml') then
+ begin
+ xml_file.Add('' + #13#10 + ' ');
+ xml_file.SaveToFile(ChaoticaPath + '\variation_compatibility.xml');
+ xml_file.Clear;
+ end;
+ xml_file.LoadFromFile(C_GetPathOf('variation_compatibility.xml', false));
+ xml := xml_file.Text;
+ xml_file.Free;
+
+ find_var := TPerlRegEx.Create;
+ find_var.RegEx := re_var;
+ find_var.Options := [preSingleLine, preCaseless];
+ find_var.Subject := GetStringPart(xml, re_root, 1, '');
+ found_var := find_var.Match;
+
+ while found_var do begin
+ var_name := String(find_var.Groups[1]);
+ found_var := find_var.MatchAgain;
+
+ if LowerCase(name) = var_name then begin
+ find_var.Destroy;
+ Result := true;
+ Exit;
+ end;
+ end;
+
+ find_var.Destroy;
+ Result := false;
+end;
+
+function C_IsDllPluginInstalled(filename: string): boolean;
+var
+ path : string;
+begin
+ path := C_GetPathOf('plugins\' + filename, false);
+ Result := FileExists(path);
+end;
+
+////////////////////////////////////////////////////////////////////
+
+procedure C_InstallVariation(name: string);
+var
+ filename: string;
+begin
+ filename := GetFileNameOfVariation(name);
+
+ if (filename = '') then Exit;
+ if C_IsDllPluginInstalled(filename) then Exit;
+
+ CopyFile(PCHAR(filename), PCHAR(C_GetPathOf('plugins\' +
+ ExtractFileName(filename), false)), false);
+end;
+
+procedure C_SyncDllPlugins;
+var
+ src_dir: string;
+ tgt_dir: string;
+
+ searchResult: TSearchRec;
+begin
+ src_dir := PluginPath;
+ tgt_dir := C_GetPathOf('Plugins', false);
+
+ if (not DirectoryExists(src_dir)) then Exit;
+ if (not DirectoryExists(tgt_dir)) then Exit;
+ //CreateDir(ChaoticaPath + '\Plugins');
+
+ // First clear all plugins on Chaotica side
+ if FindFirst(tgt_dir + '\*.dll', faAnyFile, searchResult) = 0 then
+ begin
+ repeat
+ DeleteFile(PCHAR(tgt_dir + '\' + searchResult.Name)) ;
+ until (FindNext(searchResult) <> 0);
+ SysUtils.FindClose(searchResult);
+ end;
+
+ // Then copy all plugins from Apophysis to Chaotica
+ if FindFirst(src_dir + '*.dll', faAnyFile, searchResult) = 0 then
+ begin
+ repeat
+ if not C_IsDllPluginBlacklisted(searchResult.Name, false)
+ then CopyFile(
+ PCHAR(src_dir + '\' + searchResult.Name),
+ PCHAR(tgt_dir + '\' + searchResult.Name),
+ false);
+ until (FindNext(searchResult) <> 0);
+ SysUtils.FindClose(searchResult);
+ end;
+end;
+
+procedure C_ExecuteChaotica(flamexml: string; plugins: TStringList; usex64: boolean);
+var
+ i: integer;
+ name, fname: string;
+ fails: TStringList;
+ txt: TStringList;
+ fin_usex64: boolean;
+begin
+ fails := TStringList.Create;
+
+ {$ifdef Apo7X64}
+ fin_usex64 := true;
+ {$else}
+ fin_usex64 := usex64 and CheckX64; // currently useless...
+ for i := 0 to plugins.Count - 1 do begin
+ name := GetFileNameOfVariation(plugins.Strings[i]);
+ if (name = '') then name := plugins.Strings[i];
+ fin_usex64 := fin_usex64 and C_IsVariationNative(name, usex64);
+ end;
+
+ for i := 0 to plugins.Count - 1 do begin
+ name := GetFileNameOfVariation(plugins.Strings[i]);
+ if (name = '') then name := plugins.Strings[i]; // assume built-in
+
+ if not C_IsVariationNative(name, fin_usex64) then begin // not native -> try install
+ if C_SupportsDllPlugins(fin_usex64) then // dll unsupported -> fail
+ fails.Add(plugins.Strings[i])
+ else if C_IsDllPluginBlacklisted(name, fin_usex64) then // dll supported and blacklisted -> fail
+ fails.Add(plugins.Strings[i]);
+ //else C_InstallVariation(plugins.Strings[i]); // dll supported and not blacklisted -> install
+ // ^^^ this is done on Apophysis startup now!
+ end;
+ end;
+ {$endif}
+
+ name := C_GetPathOf('chaotica.exe', fin_usex64);
+ if (not FileExists(name)) then begin
+ messagebox(0, PCHAR(TextByKey('main-status-nochaotica')),
+ PCHAR('Apophysis AV'), MB_ICONHAND);
+ Exit;
+ end;
+
+ if (fails.Count > 0) then begin
+ messagebox(0, PCHAR(TextByKey('main-status-oldchaotica')),
+ PCHAR('Apophysis AV'), MB_ICONHAND or MB_OK);
+ end;
+
+ // TODO: add directory cleaning
+ fname := GetEnvironmentVariable('TEMP') + '\chaotica_export.flame';
+ txt := TStringList.Create;
+
+ txt.Text := flamexml;
+ txt.SaveToFile(fname);
+
+ txt.Free;
+ fails.Free;
+
+ //if fin_usex64 then MessageBox(0, PCHAR('DBG:x64'), PCHAR(''), MB_OK)
+ //else MessageBox(0, PCHAR('DBG:x86'), PCHAR(''), MB_OK) ;
+
+ ShellExecute(application.handle, PChar('open'), pchar(name),
+ PChar('"' + fname + '"'), PChar(ExtractFilePath(name)), SW_SHOWNORMAL);
+end;
+
+end.
diff --git a/Core/Global.pas b/Core/Global.pas
new file mode 100644
index 0000000..8d37eff
--- /dev/null
+++ b/Core/Global.pas
@@ -0,0 +1,764 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit Global;
+
+interface
+
+uses
+ Windows, SysUtils, Classes, SyncObjs, Controls, Graphics, Math,
+ cmap, ControlPoint, Xform, CommDlg;
+
+type
+ EFormatInvalid = class(Exception);
+ // AV: chanded the name to avoid conflicts with XForm
+ TMatrix2 = array[0..1, 0..1] of double;
+
+{ Weight manipulation }
+{ Triangle transformations }
+function triangle_area(t: TTriangle): double;
+function transform_affine(const t: TTriangle; const Triangles: TTriangles): boolean;
+function line_dist(x, y, x1, y1, x2, y2: double): double;
+function dist(x1, y1, x2, y2: double): double;
+procedure MultMatrix(var s: TMatrix2; const m: TMatrix2);
+{ Parsing functions }
+function GetVal(token: string): string;
+function ReplaceTabs(str: string): string;
+{ Palette and gradient functions }
+//function GetGradient(FileName, Entry: string): string;
+{ Misc }
+function det(a, b, c, d: double): double;
+function solve3(x1, x2, x1h, y1, y2, y1h, z1, z2, z1h: double;
+ var a, b, e: double): double;
+function OpenSaveFileDialog(Parent: TWinControl;
+ const DefExt,
+ Filter,
+ InitialDir,
+ Title: string;
+ var FileName: string;
+ MustExist,
+ OverwritePrompt,
+ NoChangeDir,
+ DoOpen: Boolean): Boolean;
+procedure LoadThumbnailPlaceholder(ThumbnailSize : integer);
+function GetEnvVarValue(const VarName: string): string;
+function Round6(x: double): double;
+function MiddleColor(const clOne, clTwo: TColor): TColor; // AV
+function CheckX64: Boolean; // AV
+
+const
+ APP_NAME: string = 'Apophysis AV';
+ APP_VERSION: string = 'Phoenix Edition';
+ {$ifdef Apo7X64}
+ APP_BUILD: string = ' - 64 bit';
+ {$else}
+ APP_BUILD: string = ' - 32 bit';
+ {$endif}
+ MAX_TRANSFORMS: integer = 100;
+ prefilter_white: integer = 1024;
+ eps: double = 1E-10;
+ White_level = 200;
+ FT_BMP = 1; FT_PNG = 2; FT_JPG = 3;
+
+ //clyellow1 = TColor($17FCFF);
+ //clplum2 = TColor($ECA9E6);
+ //clSlateGray = TColor($837365);
+const
+ crEditArrow = 20;
+ crEditMove = 21;
+ crEditRotate = 22;
+ crEditScale = 23;
+
+const
+ SingleBuffer : boolean =
+ {$ifdef Apo7X64}
+ false
+ {$else}
+ true
+ {$endif};
+
+var
+ MainSeed: integer;
+ MainTriangles: TTriangles; // ControlPoint.TTriangles;
+ Transforms: integer; // Count of Tranforms
+ EnableFinalXform: boolean;
+ AppPath: string; // Path of application file
+ OpenFile: string; // Name of currently open file
+ CanDrawOnResize: boolean;
+ PreserveWeights: boolean;
+ AlwaysCreateBlankFlame : boolean;
+ // StartupCheckForUpdates : boolean;
+ TBWidth1 : integer;
+ TBWidth2 : integer;
+ TBWidth3 : integer;
+ TBWidth4 : integer;
+ TBWidth5 : integer;
+ ThumbnailPlaceholder : TBitmap;
+ WarnOnMissingPlugin : boolean;
+ EmbedThumbnails : boolean;
+ RandomizeTemplates: boolean;
+ LanguageFile : string;
+ AvailableLanguages : TStringList;
+ PluginPath : string;
+
+ // AV: GUI Theme Stuff
+ CurrentStyle: string;
+ // theme-aware system colors
+ WinColor, BrightColor, MidColor, TextColor: TColor;
+ IsDarkTheme, IsLightMenu: boolean;
+
+ { UPR Options }
+
+ UPRSampleDensity: integer;
+ UPRFilterRadius: double;
+ UPROversample: integer;
+ UPRAdjustDensity: boolean;
+ UPRColoringIdent: string;
+ UPRColoringFile: string;
+ UPRFormulaIdent: string;
+ UPRFormulaFile: string;
+ UPRWidth: Integer;
+ UPRHeight: Integer;
+ ImageFolder: string;
+ UPRPath: string; // Name and folder of last UPR file
+ cmap_index: integer; // Index to current gradient
+ Variation: TVariation; // Current variation // ControlPoint.TVariation;
+ NumTries, TryLength: integer; // Settings for smooth palette
+ SmoothPaletteFile: string;
+
+ { Editor }
+
+ UseFlameBackground, UseTransformColors: boolean;
+ HelpersEnabled: boolean;
+ EditorBkgColor, ReferenceTriangleColor: integer;
+ GridColor1, GridColor2, HelpersColor, FlipColor: integer;
+ ExtEditEnabled, TransformAxisLock, RebuildXaosLinks: boolean;
+ ShowAllXforms: boolean;
+ EditorPreviewTransparency: integer;
+ EnableEditorPreview: boolean;
+ AllowResetCoefs, AllowResetLinear: boolean; // AV
+
+ { Display }
+
+ defSampleDensity, defPreviewDensity: Double;
+ defGamma, defBrightness, defVibrancy, defContrast, // AV
+ defFilterRadius, defGammaThreshold: Double;
+ defOversample: integer;
+ FUSE: byte; // AV: moved from ControlPoint and changed to variable
+ RhombTR, SquareTR, HexTR: single; // AV: tile radii
+
+ { Render }
+
+ renderDensity, renderFilterRadius: double;
+ renderOversample, renderWidth, renderHeight: integer;
+ // renderBitsPerSample: integer;
+ renderPath: string;
+ JPEGQuality: integer;
+ renderFileFormat: integer;
+ InternalBitsPerSample: integer;
+ EmbedFlame, SaveInFlame: boolean; // AV
+
+ NrTreads: Integer;
+ UseNrThreads: byte; // AV: currently holds Nr CPU cores
+
+ PNGTransparency: integer;
+ ShowTransparency: boolean;
+
+ MainPreviewScale: double;
+ ExtendMainPreview: boolean;
+
+ (*
+ StoreEXIF : boolean;
+ StoreParamsEXIF : boolean;
+ ExifAuthor : string;
+ *)
+
+ { Defaults }
+
+ LastOpenFile: string;
+ LastOpenFileEntry: integer;
+ RememberLastOpenFile: boolean;
+ UseSmallThumbnails: boolean;
+ ClassicListMode: boolean;
+ ConfirmDelete: boolean; // Flag confirmation of entry deletion
+ OldPaletteFormat: boolean;
+ ConfirmExit: boolean;
+ ConfirmStopRender: boolean;
+ ConfirmClearScript: boolean;
+ SavePath, SmoothPalettePath: string;
+ RandomPrefix, RandomDate: string;
+ RandomIndex: integer;
+ FlameFile, GradientFile, GradientEntry, FlameEntry: string;
+ ParamFolder: string;
+ prevLowQuality, prevMediumQuality, prevHighQuality: double;
+ defSmoothPaletteFile: string;
+ BrowserPath: string; // Stored path of browser open dialog
+ EditPrevQual, MutatePrevQual, AdjustPrevQual: byte; // Integer;
+ ThumbPrevQual: byte; // AV
+ randMinTransforms, randMaxTransforms: integer;
+ mutantMinTransforms, mutantMaxTransforms: integer;
+ KeepBackground: boolean;
+ RandBackColor: integer; // AV
+ randGradient: Integer;
+ randGradientFile: string;
+ randColorBlend: byte; // AV
+ EqualStripes: boolean;
+ defFlameFile: string;
+ defScriptFile: string; // AV
+ SetEngLayout: boolean; // AV
+ ScreenShotPath: string; // AV
+ AutoSaveXML, ApplyFlatten: boolean; // AV
+
+ PlaySoundOnRenderComplete: boolean;
+ RenderCompleteSoundFile: string;
+
+ SaveIncompleteRenders: boolean;
+ ShowRenderStats, ShowRenderImage: boolean;
+ LowerRenderPriority: boolean;
+
+ SymmetryType: integer;
+ SymmetryOrder: integer;
+ SymmetryNVars: integer;
+ Variations: array of boolean;
+ FavouriteVariations: array of boolean;
+
+ MainForm_RotationMode: byte; // integer;
+ PreserveQuality: boolean;
+ FlameEnumMode: byte; // AV
+
+ { For random gradients }
+
+ MinNodes, MaxNodes, MinHue, MaxHue, MinSat, MaxSat, MinLum, MaxLum: integer;
+ //ReferenceMode: integer;
+ BatchSize: Integer;
+ // Compatibility: integer; //0 = original, 1 = Drave's
+ Favorites: TStringList;
+ Script: string;
+ ScriptPath: string;
+ // SheepServer, SheepNick, SheepURL, SheepPW,
+ flam3Path, helpPath: string;
+ ExportBatches, ExportOversample, ExportWidth, ExportHeight, ExportFileFormat: Integer;
+ ExportFilter, ExportDensity: Double;
+ ExportEstimator, ExportEstimatorMin, ExportEstimatorCurve: double;
+ ExportJitters: integer;
+ ExportGammaTreshold: double;
+ OpenFileType: TFileType;
+// ResizeOnLoad: Boolean;
+ ShowProgress: Boolean;
+ defLibrary: string;
+ LimitVibrancy: Boolean;
+ DefaultPalette: TColorMap;
+
+ ChaoticaPath: string;
+ UseX64IfPossible: boolean;
+
+ AutoOpenLog: Boolean;
+ AutoSaveEnabled: Boolean;
+ AutoSaveFreq: integer;
+ AutoSavePath: string;
+
+ LineCenterColor : integer;
+ LineThirdsColor : integer;
+ LineGRColor : integer;
+ EnableGuides : boolean;
+
+implementation
+
+function GetEnvVarValue(const VarName: string): string;
+var
+ BufSize: Integer; // buffer size required for value
+begin
+ // Get required buffer size (inc. terminal #0)
+ BufSize := GetEnvironmentVariable(
+ PChar(VarName), nil, 0);
+ if BufSize > 0 then
+ begin
+ // Read env var value into result string
+ SetLength(Result, BufSize - 1);
+ GetEnvironmentVariable(PChar(VarName),
+ PChar(Result), BufSize);
+ end
+ else
+ // No such environment variable
+ Result := '';
+end;
+
+procedure LoadThumbnailPlaceholder(ThumbnailSize : integer);
+var
+ placeholderIcon: TBitmap;
+const
+ pi_width = 48;
+ pi_height = 48;
+begin
+ placeholderIcon := TBitmap.Create;
+ placeholderIcon.Handle := LoadBitmap(hInstance, 'THUMB_PLACEHOLDER');
+ // AV: replaced a local variable by the global one
+ ThumbnailPlaceholder.PixelFormat := pf32bit;
+ ThumbnailPlaceholder.HandleType := bmDIB;
+ ThumbnailPlaceholder.Width := ThumbnailSize;
+ ThumbnailPlaceholder.Height := ThumbnailSize;
+
+ with ThumbnailPlaceholder.Canvas do begin
+ Brush.Color := $000000;
+ FillRect(Rect(0, 0, ThumbnailPlaceholder.Width, ThumbnailPlaceholder.Height));
+ Draw(round(ThumbnailSize / 2 - pi_width / 2), round(ThumbnailSize / 2 - pi_height / 2), placeholderIcon);
+ end;
+
+ placeholderIcon.Free;
+end;
+
+function MiddleColor(const clOne, clTwo: TColor): TColor; // AV
+begin
+ Result := (((clOne and $ff) + (clTwo and $ff)) shr 1 ) +
+ ((((clOne shr 8) and $ff) + ((clTwo shr 8) and $ff)) shr 1 ) shl 8 +
+ ((((clOne shr 16) and $ff) + ((clTwo shr 16) and $ff)) shr 1 ) shl 16;
+end;
+
+{ IFS }
+
+function det(a, b, c, d: double): double;
+begin
+ Result := (a * d - b * c);
+end;
+
+function Round6(x: double): double;
+// Really ugly, but it works
+begin
+ // --Z-- this is ridiculous:
+ // Result := StrToFloat(Format('%.6f', [x]));
+ // and yes, this is REALLY ugly :-\
+ Result := RoundTo(x, -6);
+end;
+
+procedure MultMatrix(var s: TMatrix2; const m: TMatrix2); // AV: moved from Main
+var
+ a, b, c, d, e, f, g, h: double;
+begin
+ a := s[0, 0];
+ b := s[0, 1];
+ c := s[1, 0];
+ d := s[1, 1];
+ e := m[0, 0];
+ f := m[0, 1];
+ g := m[1, 0];
+ h := m[1, 1];
+{
+ [a, b][e ,f] [a*e+b*g, a*f+b*h]
+ [ ][ ] = [ ]
+ [c, d][g, h] [c*e+d*g, c*f+d*h]
+}
+ s[0, 0] := a * e + b * g;
+ s[0, 1] := a * f + b * h;
+ s[1, 0] := c * e + d * g;
+ s[1, 1] := c * f + d * h;
+end;
+
+function solve3(x1, x2, x1h, y1, y2, y1h, z1, z2, z1h: double;
+ var a, b, e: double): double;
+var
+ det1: double;
+begin
+ det1 := x1 * det(y2, 1.0, z2, 1.0) - x2 * det(y1, 1.0, z1, 1.0)
+ + 1 * det(y1, y2, z1, z2);
+ if (det1 = 0.0) then
+ begin
+ Result := det1;
+ EXIT;
+ end
+ else
+ begin
+ a := (x1h * det(y2, 1.0, z2, 1.0) - x2 * det(y1h, 1.0, z1h, 1.0)
+ + 1 * det(y1h, y2, z1h, z2)) / det1;
+ b := (x1 * det(y1h, 1.0, z1h, 1.0) - x1h * det(y1, 1.0, z1, 1.0)
+ + 1 * det(y1, y1h, z1, z1h)) / det1;
+ e := (x1 * det(y2, y1h, z2, z1h) - x2 * det(y1, y1h, z1, z1h)
+ + x1h * det(y1, y2, z1, z2)) / det1;
+ a := Round6(a);
+ b := Round6(b);
+ e := Round6(e);
+ Result := det1;
+ end;
+end;
+
+function dist(x1, y1, x2, y2: double): double;
+//var
+// d2: double;
+begin
+(*
+ { From FDesign source
+ { float pt_pt_distance(float x1, float y1, float x2, float y2) }
+ d2 := (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
+ if (d2 = 0.0) then
+ begin
+ Result := 0.0;
+ exit;
+ end
+ else
+ Result := sqrt(d2);
+*)
+
+ // --Z-- This is just amazing... :-\
+ // Someone needed an 'FDesign source' - to compute distance between two points??!?
+
+ Result := Hypot(x2-x1, y2-y1);
+end;
+
+function line_dist(x, y, x1, y1, x2, y2: double): double;
+var
+ a, b, e, c: double;
+begin
+ if ((x = x1) and (y = y1)) then
+ a := 0.0
+ else
+ a := sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
+ if ((x = x2) and (y = y2)) then
+ b := 0.0
+ else
+ b := sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));
+ if ((x1 = x2) and (y1 = y2)) then
+ e := 0.0
+ else
+ e := sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+ if ((a * a + e * e) < (b * b)) then
+ Result := a
+ else if ((b * b + e * e) < (a * a)) then
+ Result := b
+ else if (e <> 0.0) then
+ begin
+ c := (b * b - a * a - e * e) / (-2 * e);
+ if ((a * a - c * c) < 0.0) then
+ Result := 0.0
+ else
+ Result := sqrt(a * a - c * c);
+ end
+ else
+ Result := a;
+end;
+
+function transform_affine(const t: TTriangle; const Triangles: TTriangles): boolean;
+var
+ ra, rb, rc, a, b, c: double;
+begin
+ Result := True;
+ ra := dist(Triangles[-1].y[0], Triangles[-1].x[0],
+ Triangles[-1].y[1], Triangles[-1].x[1]);
+ rb := dist(Triangles[-1].y[1], Triangles[-1].x[1],
+ Triangles[-1].y[2], Triangles[-1].x[2]);
+ rc := dist(Triangles[-1].y[2], Triangles[-1].x[2],
+ Triangles[-1].y[0], Triangles[-1].x[0]);
+ a := dist(t.y[0], t.x[0], t.y[1], t.x[1]);
+ b := dist(t.y[1], t.x[1], t.y[2], t.x[2]);
+ c := dist(t.y[2], t.x[2], t.y[0], t.x[0]);
+ if (a > ra) then
+ Result := False
+ else if (b > rb) then
+ Result := False
+ else if (c > rc) then
+ Result := False
+ else if ((a = ra) and (b = rb) and (c = rc)) then
+ Result := False;
+end;
+
+function triangle_area(t: TTriangle): double;
+var
+ base, height: double;
+begin
+ try
+ base := dist(t.x[0], t.y[0], t.x[1], t.y[1]);
+ height := line_dist(t.x[2], t.y[2], t.x[1], t.y[1],
+ t.x[0], t.y[0]);
+ if (base < 1.0) then
+ Result := height
+ else if (height < 1.0) then
+ Result := base
+ else
+ Result := 0.5 * base * height;
+ except on E: EMathError do
+ Result := 0;
+ end;
+end;
+
+{ Parse }
+
+function GetVal(token: string): string;
+var
+ p: integer;
+begin
+ p := Pos('=', token);
+ Delete(Token, 1, p);
+ Result := Token;
+end;
+
+function ReplaceTabs(str: string): string;
+{Changes tab characters in a string to spaces}
+var
+ i: integer;
+begin
+ for i := 1 to Length(str) do
+ begin
+ if str[i] = #9 then
+ begin
+ Delete(str, i, 1);
+ Insert(#32, str, i);
+ end;
+ end;
+ Result := str;
+end;
+
+(*
+{ Palette and gradient functions }
+
+function RGBToColor(Pal: TMapPalette; index: integer): Tcolor;
+begin
+ { Converts the RGB values from a palette index to the TColor type ...
+ could maybe change it to SHLs }
+ Result := (Pal.Blue[index] * 65536) + (Pal.Green[index] * 256)
+ + Pal.Red[index];
+end;
+
+procedure rgb2hsv(const rgb: array of double; out hsv: array of double);
+var
+ maxval, minval: double;
+ del: double;
+begin
+ Maxval := Max(rgb[0], Max(rgb[1], rgb[2]));
+ Minval := Min(rgb[0], Min(rgb[1], rgb[2]));
+
+ hsv[2] := maxval; // v
+
+ if (Maxval > 0) and (maxval <> minval) then begin
+ del := maxval - minval;
+ hsv[1] := del / Maxval; //s
+
+ hsv[0] := 0;
+ if (rgb[0] > rgb[1]) and (rgb[0] > rgb[2]) then begin
+ hsv[0] := (rgb[1] - rgb[2]) / del;
+ end else if (rgb[1] > rgb[2]) then begin
+ hsv[0] := 2 + (rgb[2] - rgb[0]) / del;
+ end else begin
+ hsv[0] := 4 + (rgb[0] - rgb[1]) / del;
+ end;
+
+ if hsv[0] < 0 then
+ hsv[0] := hsv[0] + 6;
+
+ end else begin
+ hsv[0] := 0;
+ hsv[1] := 0;
+ end;
+end;
+
+procedure hsv2rgb(const hsv: array of double; out rgb: array of double);
+var
+ j: integer;
+ f, p, q, t, v: double;
+begin
+ j := floor(hsv[0]);
+ f := hsv[0] - j;
+ v := hsv[2];
+ p := hsv[2] * (1 - hsv[1]);
+ q := hsv[2] * (1 - hsv[1] * f);
+ t := hsv[2] * (1 - hsv[1] * (1 - f));
+
+ case j of
+ 0: begin rgb[0] := v; rgb[1] := t; rgb[2] := p; end;
+ 1: begin rgb[0] := q; rgb[1] := v; rgb[2] := p; end;
+ 2: begin rgb[0] := p; rgb[1] := v; rgb[2] := t; end;
+ 3: begin rgb[0] := p; rgb[1] := q; rgb[2] := v; end;
+ 4: begin rgb[0] := t; rgb[1] := p; rgb[2] := v; end;
+ 5: begin rgb[0] := v; rgb[1] := p; rgb[2] := t; end;
+ end;
+end;
+
+function GetGradient(FileName, Entry: string): string;
+var
+ FileStrings: TStringList;
+ GradStrings: TStringList;
+ i: integer;
+begin
+ FileStrings := TStringList.Create;
+ GradStrings := TStringList.Create;
+ try
+ try
+ FileStrings.LoadFromFile(FileName);
+ for i := 0 to FileStrings.count - 1 do
+ if Pos(Entry + ' ', Trim(FileStrings[i])) = 1 then break;
+ GradStrings.Add(FileStrings[i]);
+ repeat
+ inc(i);
+ GradStrings.Add(FileStrings[i]);
+ until Pos('}', FileStrings[i]) <> 0;
+ GetGradient := GradStrings.Text;
+ except on exception do
+ Result := '';
+ end;
+ finally
+ GradStrings.Free;
+ FileStrings.Free;
+ end;
+end;
+*)
+
+function CheckX64: Boolean; // AV
+var
+ IsWow64Process:
+ function(hProcess: THandle; out Wow64Process: boolean): boolean; stdcall;
+ Wow64Process: boolean;
+begin
+ IsWow64Process := GetProcAddress(GetModuleHandle('kernel32.dll'), 'IsWow64Process');
+
+ Wow64Process := False;
+ if Assigned(IsWow64Process) then
+ Wow64Process := IsWow64Process(GetCurrentProcess, Wow64Process) and Wow64Process;
+
+ Result := Wow64Process;
+end;
+
+function ReplaceStr(Str, SearchStr, ReplaceStr: string): string;
+begin
+ while Pos(SearchStr, Str) <> 0 do
+ begin
+ Insert(ReplaceStr, Str, Pos(SearchStr, Str));
+ system.Delete(Str, Pos(SearchStr, Str), Length(SearchStr));
+ end;
+ Result := Str;
+end;
+
+function SplitFilter(const fText: String; const fSep: Char; fTrim: Boolean=false; fQuotes: Boolean=false): TStringList;
+var vI: Integer;
+ vBuffer: String;
+ vOn: Boolean;
+begin
+ Result:= TStringList.Create;
+ vBuffer:='';
+ vOn:=true;
+ for vI:=1 to Length(fText) do
+ begin
+ if (fQuotes and(fText[vI]=fSep)and vOn)or(Not(fQuotes) and (fText[vI]=fSep)) then
+ begin
+ if fTrim then vBuffer:=Trim(vBuffer);
+ if vBuffer='' then vBuffer:=fSep; // !!! e.g. split(',**',',')...
+ if vBuffer[1]=fSep then
+ vBuffer:=Copy(vBuffer,2,Length(vBuffer));
+ Result.Add(vBuffer);
+ vBuffer:='';
+ end;
+ if fQuotes then
+ begin
+ if fText[vI]='"' then
+ begin
+ vOn:=Not(vOn);
+ Continue;
+ end;
+ if (fText[vI]<>fSep)or((fText[vI]=fSep)and(vOn=false)) then
+ vBuffer:=vBuffer+fText[vI];
+ end else
+ if fText[vI]<>fSep then
+ vBuffer:=vBuffer+fText[vI];
+ end;
+ if vBuffer<>'' then
+ begin
+ if fTrim then vBuffer:=Trim(vBuffer);
+ Result.Add(vBuffer);
+ end;
+end;
+
+function OpenSaveFileDialog(Parent: TWinControl;
+ const DefExt,
+ Filter,
+ InitialDir,
+ Title: string;
+ var FileName: string;
+ MustExist,
+ OverwritePrompt,
+ NoChangeDir,
+ DoOpen: Boolean): Boolean;
+// uses commdlg
+var
+ ofn: TOpenFileName;
+ szFile: array[0..260] of Char;
+ fa, fa2: TStringList;
+ h,i,j,k,c : integer;
+ cs, s : string;
+begin
+ Result := False;
+ FillChar(ofn, SizeOf(TOpenFileName), 0);
+ with ofn do
+ begin
+ lStructSize := SizeOf(TOpenFileName);
+ hwndOwner := Parent.Handle;
+ lpstrFile := szFile;
+ nMaxFile := SizeOf(szFile);
+ if (Title <> '') then
+ lpstrTitle := PChar(Title);
+ if (InitialDir <> '') then
+ lpstrInitialDir := PChar(InitialDir);
+ StrPCopy(lpstrFile, FileName);
+ lpstrFilter := PChar(ReplaceStr(Filter, '|', #0)+#0#0);
+ fa := splitFilter(Filter, '|');
+
+ k := 0;
+ c := (fa.Count div 2);
+ for i := 0 to c - 1 do begin
+ j := 2 * i + 1;
+ cs := LowerCase(fa.Strings[j]);
+ fa2 := splitFilter(cs, ';');
+ for h := 0 to fa2.Count - 1 do begin
+ cs := fa2.Strings[h];
+ s := '*.' + LowerCase(DefExt);
+ if (cs = s) then k := i;
+ end;
+ fa2.Free; //AV: fixed multiple memory leaks!
+ end;
+ fa.Free; // AV: fixed memory leak!
+
+ nFilterIndex := k + 1;
+ if DefExt <> '' then
+ lpstrDefExt := PChar(DefExt);
+ end;
+
+ if MustExist then ofn.Flags := ofn.Flags or OFN_FILEMUSTEXIST;
+ if OverwritePrompt then ofn.Flags := ofn.Flags or OFN_OVERWRITEPROMPT;
+ if NoChangeDir then ofn.Flags := ofn.Flags or OFN_NOCHANGEDIR;
+
+ if DoOpen then
+ begin
+ if GetOpenFileName(ofn) then
+ begin
+ Result := True;
+ FileName := StrPas(szFile);
+ end;
+ end
+ else
+ begin
+ if GetSaveFileName(ofn) then
+ begin
+ Result := True;
+ FileName := StrPas(szFile);
+ end;
+ end
+end; // function OpenSaveFileDialog
+
+end.
+
diff --git a/Core/Translation.pas b/Core/Translation.pas
new file mode 100644
index 0000000..8450110
--- /dev/null
+++ b/Core/Translation.pas
@@ -0,0 +1,1127 @@
+{
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+}
+
+unit Translation;
+
+interface
+
+uses Global, Classes, Forms, LibXmlParser, LibXmlComps, SysUtils, RegexHelper;
+
+procedure ListLanguages;
+procedure LanguageInfo(path: string; var name, localName: string);
+function LanguageAuthor(path: string): string;
+procedure Add(key, value: string);
+procedure LoadLanguage(path:string);
+procedure LoadEnglish();
+function TextByKey(key:string):string;
+
+type
+ TParser = class
+ public
+ constructor Create;
+ destructor Destroy; override; // AV: added to clean up the memory
+
+ procedure ListXmlScannerStartTag(Sender: TObject; TagName: string; Attributes: TAttrList);
+ procedure ListXmlScannerEndTag(Sender: TObject; TagName: string);
+ procedure ListXmlScannerEmptyTag(Sender: TObject; TagName: string; Attributes: TAttrList);
+ procedure ListXmlScannerContent(Sender: TObject; Content: string);
+ private
+ currentTagname: string;
+ parentTagnames: TStringList;
+ end;
+
+ TKeyValuePair = class
+ public
+ key: string;
+ value: string;
+ end;
+
+ TDictionary = array of TKeyValuePair;
+var
+ language: TDictionary;
+ defaultlanguage: TDictionary;
+ tokenCount: integer;
+ ListXmlScanner: TEasyXmlScanner;
+ parser: TParser;
+
+implementation
+
+procedure ListLanguages;
+var
+ searchResult: TSearchRec;
+ langpath: string;
+begin
+ if FindFirst(ExtractFilePath(Application.ExeName) + 'Languages\*.xml', faAnyFile, searchResult) = 0 then
+ begin
+ repeat
+ AvailableLanguages.Add(ExtractFilePath(Application.ExeName) + 'Languages\' + searchResult.Name);
+ until (FindNext(searchResult) <> 0);
+ SysUtils.FindClose(searchResult);
+ end;
+end;
+
+procedure LanguageInfo(path: string; var name, localName: string);
+const
+ exp1 = '\stitle="([^"]*)"';
+ exp2 = '\slocalized-title="([^"]*)"';
+var
+ langxml : string;
+ sl: TStringList;
+begin
+ sl := TStringList.Create;
+ sl.LoadFromFile(path);
+ langxml := sl.Text;
+ sl.Destroy;
+
+ name := GetStringPart(langxml, exp1, 1, '');
+ localname := GetStringPart(langxml, exp2, 1, '');
+end;
+
+function LanguageAuthor(path: string): string;
+const
+ exp = '\sauthor="([^"]*)"';
+var
+ langxml : string;
+ sl: TStringList;
+begin
+ sl := TStringList.Create;
+ sl.LoadFromFile(path);
+ langxml := sl.Text;
+ sl.Destroy;
+
+ Result := GetStringPart(langxml, exp, 1, '');
+end;
+
+procedure LoadEnglish();
+begin
+ //TODO:
+ //render-status-renderhibernated
+
+ Add('common-ok', 'OK');
+ Add('common-cancel', 'Cancel');
+ Add('common-apply', 'Apply');
+ Add('common-yes', 'Yes');
+ Add('common-no', 'No');
+ Add('common-lowquality', 'Low Quality');
+ Add('common-mediumquality', 'Medium Quality');
+ Add('common-highquality', 'High Quality');
+ Add('common-copy', 'Copy');
+ Add('common-paste', 'Paste');
+ Add('common-cut', 'Cut');
+ Add('common-delete', 'Delete');
+ Add('common-rename', 'Rename');
+ Add('common-undo', 'Undo');
+ Add('common-redo', 'Redo');
+ Add('common-width', 'Width');
+ Add('common-height', 'Height');
+ Add('common-size', 'Size');
+ Add('common-pixels', 'Pixels');
+ Add('common-keepaspect', 'Maintain aspect ratio');
+ Add('common-destination', 'Destination');
+ Add('common-filename', 'File name');
+ Add('common-browse', 'Browse...');
+ Add('common-quality', 'Quality');
+ Add('common-filterradius', 'Filter Radius');
+ Add('common-density', 'Density');
+ Add('common-oversample', 'Oversample');
+ Add('common-gamma', 'Gamma');
+ Add('common-brightness', 'Brightness');
+ Add('common-contrast', 'Contrast');
+ Add('common-vibrancy', 'Vibrancy');
+ Add('common-background', 'Background');
+ Add('common-gammathreshold', 'Gamma Threshold');
+ Add('common-start', 'Start');
+ Add('common-pause', 'Pause');
+ Add('common-resume', 'Resume');
+ Add('common-close', 'Close');
+ Add('common-clear', 'Clear');
+ Add('common-enabled', 'Enabled');
+ Add('common-disabled', 'Disabled');
+ Add('common-minimum', 'Minimum');
+ Add('common-maximum', 'Maximum');
+ Add('common-resetlocation', 'Reset location');
+ Add('common-openwav', 'Open the audiofile...');
+ Add('common-genericopenfailure', 'Unable to open "%s".');
+ Add('common-genericsavefailure', 'Unable to save "%s".');
+ Add('common-genericcopyfailure', 'Cannot copy file.');
+ Add('common-openpngerror1', 'Error loading flame parameters from the "%s" image.');
+ Add('common-openpngerror2', 'Could not find flame parameters in the "%s" image.');
+ Add('common-openpngerror3', 'Error reading flame parameters from the "%s" image.');
+ Add('common-loaderror', 'Cannot load plugin from %s: variation "%s" already exists!');
+ Add('common-loaderror1', 'There were problems with some of the plugins:');
+ Add('common-noparamfile', 'The file does not exists.');
+ Add('common-invalidformat', 'Invalid format.');
+ Add('common-confirmexit', 'Do you really want to exit? All unsaved data will be lost!');
+ Add('common-confirmdelete', 'Are you sure you want to permanently delete "%s"? ');
+ Add('common-confirmrename', 'After renaming "%s", all changes made to this flame can be lost. Do you want to continue?');
+ Add('common-deletecurrent', 'All changes made to the current flame will be lost!');
+ Add('common-dragpanelhint', 'Click and drag to change value');
+ Add('common-trace-title', 'Trace log');
+ Add('common-trace-main', 'Main');
+ Add('common-trace-fullscreen', 'Fullscreen');
+ Add('common-trace-notrace', 'No trace');
+ Add('common-trace-minimal', 'Minimal trace');
+ Add('common-trace-fulltrace', 'Full trace');
+ Add('common-trace-pausing', 'Pausing render');
+ Add('common-trace-resuming', 'Resuming render');
+ Add('common-trace-terminating', 'Terminating render');
+ Add('common-trace-stopping', 'Stopping render');
+ Add('common-trace-saving', 'Saving image...');
+ Add('common-trace-creating-simple', 'Creating image...');
+ Add('common-trace-creating-detailed', 'Creating image with quality: %f...');
+ Add('common-trace-rendering-oneslice', 'Rendering...');
+ Add('common-trace-rendering-multipleslices', 'Rendering slice %d of %d...');
+ Add('common-trace-allocating', 'Allocating %n Mb of memory...');
+ Add('common-trace-notenoughmemory', 'ERROR: Not enough memory for this render!');
+ Add('common-statistics-title-oneslice', 'Render Statistics:');
+ Add('common-statistics-title-multipleslices', 'Render Statistics for the last slice:');
+ Add('common-statistics-maxpossiblebits', 'Max possible bits: %2.3f');
+ Add('common-statistics-maxred', 'Max Red: %2.3f bits');
+ Add('common-statistics-maxgreen', 'Max Green: %2.3f bits');
+ Add('common-statistics-maxblue', 'Max Blue: %2.3f bits');
+ Add('common-statistics-maxcounter', 'Max Count: %2.3f bits');
+ Add('common-statistics-pointhitratio', 'Point hit ratio: %2.2f%%');
+ Add('common-statistics-averagespeed', 'Average speed: %n iterations per second');
+ Add('common-statistics-purerenderingtime', 'Pure rendering time:');
+ Add('common-seconds', 'second(s)');
+ Add('common-minutes', 'minute(s)');
+ Add('common-hours', 'hour(s)');
+ Add('common-days', 'day(s)');
+ Add('common-suspendtodisk', 'Suspend to disk');
+ Add('common-resumefromdisk', 'Resume from disk');
+ Add('common-filter-flamefiles', 'Apophysis Flame Library (*.flame;*.xml)');
+ Add('common-filter-gradientfiles', 'Gradient files (*.gradient;*.ugr)');
+ Add('common-filter-fractintfiles', 'Fractint maps (*.map)');
+ Add('common-filter-uprfiles', 'UltraFractal parameters (*.upr)');
+ Add('common-filter-templatefiles', 'Apophysis Template Library (*.template;*.flame)');
+ Add('common-filter-undofiles', 'Apophysis Undo Parameters (*.undo;*.apo)');
+ Add('common-filter-scriptfiles', 'Apophysis Script (*.aposcript;*.asc)');
+ Add('common-filter-allimages', 'All images (*.bmp;*.dib;*.jpg;*.jpeg)');
+ Add('common-filter-bitmap', 'Windows Bitmap (*.bmp;*.dib)');
+ Add('common-filter-jpeg', 'JPEG (*.jpg;*.jpeg)');
+ Add('common-filter-png', 'Portable Network Graphics (*.png)');
+ Add('common-filter-allfiles', 'All files (*.*)');
+ Add('common-open-apoimage', 'Import Apophysis parameters from the image...');
+ Add('common-favscriptadded', 'The script "%s" was added to your favourites list.');
+ Add('common-favscriptexists', 'The script "%s" already exists in your favourites list.');
+ Add('common-screenshot-saved', 'The screenshot "%s" was successfully saved in "%s" directory.');
+ Add('common-screenshot-error', 'Cannot save the screenshot.');
+ Add('common-translation', 'translation contributed by:');
+ Add('common-pluginlink', 'Apophysis Plugins (download)');
+ Add('common-thirdparty', 'This application was created using:');
+ Add('common-donate', 'Donate');
+ Add('common-donatehint', 'If you really like Apophysis, please, donate a dime for its future development');
+ Add('splash-loadingui', 'Loading user interface...');
+ Add('splash-loadingsettings', 'Loading settings...');
+ Add('splash-loadingplugins', 'Loading plugins...');
+ Add('splash-initrenderer', 'Initializing renderer...');
+ Add('splash-initcolormap', 'Initializing gradients...');
+ Add('splash-initbatch', 'Creating fractal batch...');
+ Add('splash-execstartupscript', 'Executing "autoexec.asc"...');
+ Add('transitions-title', 'Transform Transitions');
+ Add('transitions-matrix', 'Probability matrix');
+ Add('transitions-transform', 'Transform:');
+ Add('transitions-inpercents', ' Show probabilities in percents');
+ Add('adjustment-title', 'Adjustment');
+ Add('adjustment-common-depthblur', 'Depth Blur');
+ Add('adjustment-common-pitch', 'Pitch');
+ Add('adjustment-common-yaw', 'Yaw');
+ Add('adjustment-common-roll', 'Roll');
+ Add('adjustment-common-height', 'Height');
+ Add('adjustment-common-perspective', 'Perspective');
+ Add('adjustment-common-scale', 'Scale');
+ Add('adjustment-hint-depthblur', 'Strength of blurring from edges');
+ Add('adjustment-hint-pitch', 'Angle (in degrees) of rotation around X-axis');
+ Add('adjustment-hint-yaw', 'Angle (in degrees) of rotation around Z-axis');
+ Add('adjustment-hint-roll', 'Angle (in degrees) of rotation around Y-axis');
+ Add('adjustment-hint-height', 'Height of the 3D-camera');
+ Add('adjustment-hint-perspective', 'Strength of a perspective distortion');
+ Add('adjustment-hint-scale', 'Scale factor for the flame');
+ Add('adjustment-hint-resetzoom', 'Reset camera zooming without changing flame size and position'); // AV
+ Add('adjustment-tab-camera-title', 'Camera');
+ Add('adjustment-tab-camera-zoom', 'Zoom');
+ Add('adjustment-tab-camera-xpos', 'X-Position');
+ Add('adjustment-tab-camera-ypos', 'Y-Position');
+ Add('adjustment-tab-camera-rotation', 'Rotation');
+ Add('adjustment-tab-camera-resetzoom', 'Reset zoom'); // AV
+ Add('adjustment-tab-rendering-title', 'Rendering');
+ Add('adjustment-tab-rendering-istransparent', 'Transparent');
+ Add('adjustment-tab-gradient-title', 'Gradient');
+ Add('adjustment-tab-gradient-palettehint', 'Right-click for context menu, Double click to randomize, Drag to rotate gradient, Alt + Drag to choose the fragment, Ctrl + Drag to stretch the palette');
+ Add('adjustment-tab-gradient-moderotate', 'Rotate');
+ Add('adjustment-tab-gradient-modehue', 'Hue');
+ Add('adjustment-tab-gradient-modesaturation', 'Saturation');
+ Add('adjustment-tab-gradient-modeluminance', 'Luminance'); // AV
+ Add('adjustment-tab-gradient-modebrightness', 'Brightness');
+ Add('adjustment-tab-gradient-modecontrast', 'Contrast');
+ Add('adjustment-tab-gradient-modeblur', 'Blur');
+ Add('adjustment-tab-gradient-modefrequency', 'Frequency');
+ Add('adjustment-tab-gradient-preset', 'Preset');
+ Add('adjustment-tab-gradient-reset', 'Reset');
+ Add('adjustment-tab-gradient-current', 'Current');
+ Add('adjustment-tab-gradient-start', 'Start');
+ Add('adjustment-tab-gradient-last', 'Last');
+ Add('adjustment-tab-gradient-modehint', 'Click for menu');
+ Add('adjustment-tab-gradient-copyhint', 'Copy gradient to clipboard');
+ Add('adjustment-tab-gradient-selectedhint', 'Change the selected color area');
+ Add('adjustment-tab-gradient-pastehint', 'Paste gradient from clipboard');
+ Add('adjustment-tab-gradient-presethint', 'Click to choose random preset');
+ Add('adjustment-tab-size-title', 'Image size');
+ Add('adjustment-tab-size-preset', 'Change the image size according to the preset');
+ Add('adjustment-tab-size-savepreset', 'Save current size as a preset');
+ Add('adjustment-tab-size-presets', 'Size presets');
+ Add('adjustment-tab-size-resizemain', 'Resize main window');
+ Add('adjustment-tab-size-custom', 'Custom');
+ Add('adjustment-tab-size-ratio', 'Aspect ratio'); //AV
+ Add('adjustment-tab-size-output', 'Settings');
+ Add('adjustment-tab-curves-title', 'Curves');
+ Add('adjustment-tab-curves-reset', 'Reset');
+ Add('adjustment-tab-curves-selected', 'Selected curve:');
+ Add('adjustment-tab-curves-overall', 'Overall');
+ Add('adjustment-tab-curves-red', 'Red');
+ Add('adjustment-tab-curves-green', 'Green');
+ Add('adjustment-tab-curves-blue', 'Blue');
+ Add('adjustment-popup-quality-instantpreview', 'Instant preview');
+ Add('adjustment-popup-gradient-randomize', 'Randomize');
+ Add('adjustment-popup-gradient-adjustbyslider', 'Adjust colors using slider');
+ Add('adjustment-popup-gradient-invert', 'Invert');
+ Add('adjustment-popup-gradient-reverse', 'Reverse');
+ Add('adjustment-popup-gradient-invertsel', 'Invert selected colors');
+ Add('adjustment-popup-gradient-reversesel', 'Reverse fragment');
+ Add('adjustment-popup-gradient-interprgb', 'Interpolate RGB values between end points');
+ Add('adjustment-popup-gradient-interphsv', 'Interpolate HSV values between end points');
+ Add('adjustment-popup-gradient-randomizesel', 'Randomize the selected color area');
+ Add('adjustment-popup-gradient-setcolor', 'Set the color for the selected area...');
+ Add('adjustment-popup-gradient-swaprgb', 'Swap RGB values...');
+ Add('adjustment-popup-gradient-copysel', 'Copy color fragment');
+ Add('adjustment-popup-gradient-pastesel', 'Paste color fragment');
+ Add('adjustment-popup-gradient-mixcolors', 'Mix colors of copied and selected fragments ');
+ Add('adjustment-popup-gradient-grayscale', 'Greyscale');
+ Add('adjustment-popup-gradient-sepia', 'Sepia');
+ Add('adjustment-popup-gradient-removedark', 'Brighten dark areas');
+ Add('adjustment-popup-gradient-symmetry', 'Add symmetry...');
+ Add('adjustment-popup-gradient-flipleft', 'Flip the left half to the right');
+ Add('adjustment-popup-gradient-flipright', 'Flip the right half to the left');
+ Add('adjustment-popup-gradient-smoothize', 'Smoothize');
+ Add('adjustment-popup-gradient-smoothizesel', 'Smoothize the selected color area');
+ Add('adjustment-popup-gradient-smooth', 'Smooth Palette...');
+ Add('adjustment-popup-gradient-browser', 'Gradient Browser...');
+ Add('adjustment-popup-gradient-saveasugr', 'Save Gradient...');
+ Add('adjustment-popup-gradient-saveasmap', 'Save as Map File...');
+ Add('adjustment-popup-gradient-saveasdefault', 'Save as default');
+ Add('adjustment-popup-gradient-adjustfragment', 'Adjust color fragment...');
+ Add('editor-title', 'Transform Editor');
+ Add('editor-common-transform', 'Transform:');
+ Add('editor-common-name', 'Name:');
+ Add('editor-common-weight', 'Weight:');
+ Add('editor-common-finalxformlistitem', 'Final');
+ Add('editor-common-fromprefix', 'from %d');
+ Add('editor-common-toprefix', 'to %d');
+ Add('editor-tab-variations-title', 'Variations');
+ Add('editor-tab-variations-name', 'Name');
+ Add('editor-tab-variations-value', 'Value');
+ Add('editor-tab-variations-search', 'Search:'); // AV
+ Add('editor-tab-variations-order', 'Edit the Order...'); // AV
+ Add('editor-tab-variations-orderhint', 'Adjust the order of variations for the chosen transform'); // AV
+ Add('editor-tab-variations-togglehideunused', ' Hide unused variations');
+ Add('editor-tab-variations-toggleshowall', ' Show all variations'); // AV
+ Add('editor-tab-variations-togglefavourites', ' Favourite variations'); // AV
+ Add('editor-tab-variables-title', 'Variables');
+ Add('editor-tab-variables-name', 'Name');
+ Add('editor-tab-variables-value', 'Value');
+ Add('editor-tab-variables-toggleshowall', 'Show all variables');
+ Add('editor-tab-variables-reset', 'Reset');
+ Add('editor-tab-chaos-title', 'Xaos');
+ Add('editor-tab-chaos-path', 'Path');
+ Add('editor-tab-chaos-modifier', 'Weight modifier');
+ Add('editor-tab-chaos-viewasto', 'View links as "to"');
+ Add('editor-tab-chaos-viewasfrom', 'View links as "from"');
+ Add('editor-tab-triangle-title', 'Triangle');
+ Add('editor-tab-triangle-pivot', 'Pivot Point');
+ Add('editor-tab-triangle-modelocal', 'Local');
+ Add('editor-tab-triangle-modeworld', 'World');
+ Add('editor-tab-triangle-tolocal', 'Toggle local (affine) pivot cooordinates');
+ Add('editor-tab-triangle-toworld', 'Toggle world (cartesian) pivot cooordinates');
+ Add('editor-tab-triangle-resetpivot', 'Reset pivot point');
+ Add('editor-tab-triangle-pickpivot', 'Pick pivot point using mouse');
+ Add('editor-tab-triangle-rotateleft', 'Rotate triangle counter-clockwise');
+ Add('editor-tab-triangle-rotateright', 'Rotate triangle clockwise');
+ Add('editor-tab-triangle-moveup', 'Move triangle up');
+ Add('editor-tab-triangle-movedown', 'Move triangle down');
+ Add('editor-tab-triangle-moveleft', 'Move triangle left');
+ Add('editor-tab-triangle-moveright', 'Move triangle right');
+ Add('editor-tab-triangle-scaledown', 'Scale triangle down');
+ Add('editor-tab-triangle-scaleup', 'Scale triangle up');
+ Add('editor-tab-triangle-autoweight', 'Auto-balance weights');
+ Add('editor-tab-triangle-reflection', 'Reflection Axis');
+ Add('editor-tab-triangle-fliptriangle', 'Flip triangle');
+ Add('editor-tab-triangle-flipx', 'Set the X-axis as a reflection line');
+ Add('editor-tab-triangle-flipy', 'Set the Y-axis as a reflection line');
+ Add('editor-tab-triangle-flipxy', 'Set the main XY-diagonal as a reflection line');
+ Add('editor-tab-triangle-hideline', 'Hide line');
+ Add('editor-tab-triangle-showline', 'Show line');
+ Add('editor-tab-triangle-showlinehint', 'Draw or hide the reflection axis for the selected triangle');
+ Add('editor-tab-triangle-fliptrianglehint', 'Flip triangle through a line');
+ Add('editor-tab-triangle-resetflip', 'Reset point coordinates to (0,0)');
+ Add('editor-tab-triangle-transforms', 'Geometric Operations');
+ Add('editor-tab-triangle-transformshint', ' Hotkey A - apply to all vectors, hotkey X - apply to OX-vector only, hotkey Y - apply to OY-vector only, hotkey O - apply to O-vector only');
+ Add('editor-tab-triangle-coordinates', 'Coordinates');
+ Add('editor-tab-triangle-menuhint', 'Adjust the transformation tools...');
+ Add('editor-tab-triangle-pivot1x', 'Pivot point abscissa in the chosen coordinate system');
+ Add('editor-tab-triangle-pivot1y', 'Pivot point ordinate in the chosen coordinate system');
+ Add('editor-tab-triangle-pivot2x', 'Second point abscissa in the chosen coordinate system');
+ Add('editor-tab-triangle-pivot2y', 'Second point ordinate in the chosen coordinate system');
+ Add('editor-tab-transform-title', 'Transform');
+ Add('editor-tab-transform-reset', 'Reset transform');
+ Add('editor-tab-transform-resethint', 'Reset all vectors to default position');
+ Add('editor-tab-transform-affine', 'Affine coefficients');
+ Add('editor-tab-transform-postaffine', 'Post-affine coefficients');
+ Add('editor-tab-transform-swapaffine', 'Swap matrices');
+ Add('editor-tab-transform-swapaffinehint', 'Swap pre- and post-affine coefficients');
+ Add('editor-tab-transform-conjugate', 'Conjugate');
+ Add('editor-tab-transform-conjugatehint', 'Calculate the invert matrix and write the result into the second matrix');
+ Add('editor-tab-transform-coordsystem', 'Coordinate system');
+ Add('editor-tab-transform-rectangular', 'Rectangular');
+ Add('editor-tab-transform-rectangularhint', 'Show vectors in rectangular (cartesian) coordinates');
+ Add('editor-tab-transform-polar', 'Polar (deg)');
+ Add('editor-tab-transform-polarhint', 'Show vector in polar coordinates');
+ Add('editor-tab-transform-resetpost', 'Reset post transform');
+ Add('editor-tab-transform-resetposthint', 'Reset all post-transform vectors to default position');
+ Add('editor-tab-transform-autozscale', 'Auto-calculate pre_zscale');
+ Add('editor-tab-transform-resetxhint', 'Reset vector X');
+ Add('editor-tab-transform-resetyhint', 'Reset vector Y');
+ Add('editor-tab-transform-resetohint', 'Reset vector O');
+ Add('editor-tab-color-title', 'Colors');
+ Add('editor-tab-color-transformcolor', 'Transform color');
+ Add('editor-tab-color-colorspeed', 'Color speed');
+ Add('editor-tab-color-opacity', 'Opacity');
+ Add('editor-tab-color-directcolor', 'Direct color');
+ Add('editor-tab-color-togglesolo', 'Solo');
+ Add('editor-tab-color-togglesoloformat', 'Solo transform #%d');
+ Add('editor-tab-color-varpreview', 'Variation preview');
+ Add('editor-tab-color-previewrange', 'Range');
+ Add('editor-tab-color-previewdepth', 'Depth');
+ Add('editor-tab-color-previewdensity', 'Density');
+ Add('editor-tab-color-previewrangehint', 'Area to which variations are applied');
+ Add('editor-tab-color-previewdepthhint', 'Number of recursive calculations');
+ Add('editor-tab-color-previewdensityhint', 'Frequency of the grid nodes');
+ Add('editor-tab-color-preview', 'Preview');
+ Add('editor-grid-type', 'Grid Type');
+ Add('editor-grid-typehint', 'Coordinate system for the grid');
+ Add('editor-grid-polar', 'Polar');
+ Add('editor-grid-bipolar', 'Bipolar');
+ Add('editor-grid-elliptic', 'Elliptic');
+ Add('editor-grid-rectangular', 'Rectangular');
+ Add('editor-toolbar-newflame', 'New blank flame');
+ Add('editor-toolbar-newtransform', 'Add a new transform');
+ Add('editor-toolbar-addlinkedtransform', 'Add linked post-transform');
+ Add('editor-toolbar-addlinkedpretransform', 'Add linked pre-transform');
+ Add('editor-toolbar-duplicatetransform', 'Duplicate transform');
+ Add('editor-toolbar-removetransform', 'Remove the selected transform');
+ Add('editor-toolbar-modeselect', 'Selection mode');
+ Add('editor-toolbar-modemove', 'Movement mode');
+ Add('editor-toolbar-moderotate', 'Rotation mode');
+ Add('editor-toolbar-modescale', 'Scale mode');
+ Add('editor-toolbar-toggleworldpivot', 'Toggle world pivot');
+ Add('editor-toolbar-rotate90ccw', 'Rotate 90° counter-clockwise');
+ Add('editor-toolbar-rotate90cw', 'Rotate 90° clockwise');
+ Add('editor-toolbar-fliph', 'Flip transform horizontal');
+ Add('editor-toolbar-flipv', 'Flip transform vertical');
+ Add('editor-toolbar-togglevarpreview', 'Show variation preview');
+ Add('editor-toolbar-toggleposttransform', 'Enable/edit affine post-transform');
+ Add('editor-toolbar-togglefinaltransform', 'Enable final transform');
+ Add('editor-toolbar-pihint', 'Insert math constant into the selected text field');
+ Add('editor-toolbar-pimenu', 'Insert fraction of');
+ Add('editor-toolbar-squareroots', 'Insert square root...');
+ Add('editor-toolbar-squareroot', 'Square root of the number');
+ Add('editor-toolbar-goldenratio', 'Insert Golden ratio');
+ Add('editor-toolbar-invert', 'Invert the number');
+ Add('editor-toolbar-square', 'Square the number');
+ Add('editor-toolbar-multiply', 'Multiply by 2');
+ Add('editor-toolbar-divide', 'Divide by 2');
+ Add('editor-toolbar-calccos', 'Calculate cosine of the value');
+ Add('editor-toolbar-calcsin', 'Calculate sine of the value');
+ Add('editor-toolbar-calctan', 'Calculate tangent of the value');
+ Add('editor-toolbar-usedegrees', 'Use degrees');
+ Add('editor-toolbar-showchaos', 'Show chaotic transitions structure...');
+ Add('editor-popup-panel-autozoom', 'Zoom automatically');
+ Add('editor-popup-panel-toggleextendededit', 'Toggle extended edit mode');
+ Add('editor-popup-panel-locktransformaxes', 'Lock transform axes');
+ Add('editor-popup-panel-allfliph', 'Flip all horizontally');
+ Add('editor-popup-panel-allflipv', 'Flip all vertically');
+ Add('editor-popup-panel-allflipline', 'Flip all through a line');
+ Add('editor-popup-quality-autoreset', 'Auto-reset location');
+ Add('editor-popup-transform-resetposition', 'Reset position');
+ Add('editor-popup-transform-resetrotation', 'Reset rotation');
+ Add('editor-popup-transform-resetscale', 'Reset scale');
+ Add('editor-popup-transform-resetflip', 'Reset reflection');
+ Add('editor-popup-transform-copycoords', 'Copy triangle coordinates');
+ Add('editor-popup-transform-pastecoords', 'Paste triangle coordinates');
+ Add('editor-popup-transform-copywhole', 'Copy whole transform');
+ Add('editor-popup-transform-pastewhole', 'Paste transform(s)');
+ Add('editor-popup-transform-resetentiretriangle', 'Reset triangle');
+ Add('editor-popup-chaos-rebuildlinks', 'Rebuild chaos links');
+ Add('editor-popup-chaos-clearall', 'Clear all current modifiers (reset to zero)');
+ Add('editor-popup-chaos-setall', 'Set all current modifiers to 1');
+ Add('editor-popup-chaos-showmenu', 'More...');
+ Add('editor-popup-chaos-random', 'Randomize all current modifiers');
+ Add('editor-popup-chaos-normalize', 'Normalize transition matrix');
+ Add('editor-popup-chaos-randomize', 'Randomize transition matrix');
+ Add('editor-popup-chaos-reset', 'Reset transition matrix');
+ Add('editor-popup-chaos-clearabove', 'Clear modifiers above selected');
+ Add('editor-popup-chaos-clearbelow', 'Clear modifiers below selected');
+ Add('editor-popup-chaos-container', 'Add container transform');
+ Add('editor-popup-chaos-keepweight', 'Inherit original weights');
+ Add('editor-popup-chaos-invert', 'Invert current settings');
+ Add('editor-popup-triangle-rotateall', 'Rotate all vectors');
+ Add('editor-popup-triangle-rotatex', 'Rotate only X-axis');
+ Add('editor-popup-triangle-rotatey', 'Rotate only Y-axis');
+ Add('editor-popup-triangle-rotateo', 'Rotate only O-vector');
+ Add('editor-popup-triangle-scaleall', 'Scale all vectors');
+ Add('editor-popup-triangle-scalex', 'Scale only X-axis');
+ Add('editor-popup-triangle-scaley', 'Scale only Y-axis');
+ Add('editor-popup-triangle-scaleo', 'Scale only O-vector');
+ Add('editor-popup-triangle-squaregrid', 'Move along a square lattice');
+ Add('editor-popup-triangle-hexgrid', 'Move along a triangular lattice');
+ Add('editor-popup-triangle-invertstep', 'Invert current Move step');
+ Add('editor-popup-triangle-arcsin', 'Calculate arcsin of the scale factor');
+ Add('editor-popup-triangle-display', 'Display internally modified values');
+ // Add('editor-status-zoomformat', 'Zoom: %f');
+ Add('editor-status-xformat', 'X: %f');
+ Add('editor-status-yformat', 'Y: %f');
+ Add('editor-status-rotateformat', 'Rotate: %3.2f° Inner angle: %3.2f°');
+ Add('editor-status-rotateformat2', 'Rotate: %3.2f° Local axis: %3.2f°');
+ Add('editor-status-rotateformat3', 'Rotate: %3.2f°');
+ Add('editor-status-scaleformat', 'Distance: %3.3f Scale: %3.2f%%');
+ Add('editor-status-scaleformat2', 'Scale: %3.2f%%');
+ Add('editor-status-moveformat', 'Move: %3.3f ; %3.3f');
+ Add('editor-status-moveformat2', 'Move: %3.3f ; %3.3f');
+ Add('editor-status-transformformat', 'Transform #%d');
+ Add('editor-status-zoomformat', 'Zoom: %f');
+ Add('editor-status-angle', 'Current angle'); // AV
+ Add('editor-status-selecton', 'Select ON');
+ Add('editor-status-selectoff', 'Select OFF');
+ Add('editor-status-warnscale', 'Current scale factor is out of range! The value inserted into the "Scale" field must be less than 100 percents.');
+ Add('editor-status-warninvert', 'The affine determinant is too small for this operation.');
+ Add('editor-status-nonumfield', 'No active numeric field found. Please select a numeric field before opening the menu.');
+ Add('export-title', 'Export to flam3');
+ Add('export-paramoptions-title', 'Parameter options');
+ Add('export-paramoptions-bufferdepth', 'Buffer depth');
+ Add('export-paramoptions-strips', 'Strips');
+ Add('export-paramoptions-estimatorradius', 'DE radius');
+ Add('export-paramoptions-estimatorcurve', 'DE curve');
+ Add('export-paramoptions-estimatormin', 'DE minimum');
+ Add('export-paramoptions-dorender', 'Render');
+ Add('export-paramoptions-warningtitle', 'WARNING');
+ Add('export-paramoptions-warningtext', 'Fractals created with this version of Apophysis are not supported by flam3! To render 2D-only fractals, download the latest version of flam3 from');
+ Add('favscripts-title', 'Favourite scripts');
+ Add('favscripts-hint', 'User''s Favourite scripts list');
+ Add('favscripts-add', 'Add');
+ Add('favscripts-remove', 'Remove');
+ Add('favscripts-moveup', 'Move up');
+ Add('favscripts-movedown', 'Move down');
+ Add('fullscreen-popup-rendermore', 'Render more');
+ Add('fullscreen-popup-stoprender', 'Stop render');
+ Add('gradientbrowser-title', 'Gradient Browser');
+ Add('selectcolors-title', 'Palette Interval Selection');
+ Add('selectcolors-start', 'Start palette index:');
+ Add('selectcolors-last', 'Last palette index:');
+ Add('postprocess-title', 'Post-process render');
+ Add('postprocess-save', 'Save');
+ Add('postprocess-fittowindow', 'Fit to window');
+ Add('render-title', 'Render flame');
+ Add('render-common-gotofolder', 'Open target folder...');
+ Add('render-tab-settings-title', 'Settings');
+ Add('render-tab-output-title', 'Output');
+ Add('render-presets-title', 'Presets');
+ Add('render-presets-save', 'Save current preset');
+ Add('render-presets-delete', 'Delete the selected preset');
+ Add('render-prestatus-saveerror-preset', 'Cannot save preset settings.');
+ Add('render-resourceusage-title', 'Resource usage');
+ Add('render-resourceusage-infotext', 'The render process will use %u MB of %u MB available physical memory');
+ Add('render-resourceusage-infotext2', 'Apophysis will try to use %u processor cores (%u available) - change this in the options');
+ Add('render-resourceusage-limit', 'Memory limit');
+ Add('render-resourceusage-nolimit', 'No limit');
+ Add('render-resourceusage-bufferdepth', 'Buffer depth');
+ Add('render-output-title', 'Output options');
+ Add('render-output-saveparams1', 'Save parameters in the flame-file');
+ Add('render-output-saveparams2', 'Save parameters in the PNG-image');
+ Add('render-completion-title', 'Completion options');
+ Add('render-completion-postprocess', 'Post-process after rendering');
+ Add('render-completion-shutdown', 'Shut down the computer after rendering');
+ Add('render-completion-playsound', 'Play sound after rendering');
+ Add('render-completion-saveincomplete', 'Save incomplete renders');
+ Add('render-status-rendererror-log', 'Rendering failed!');
+ Add('render-status-rendererror-message', 'Error while rendering!');
+ Add('render-status-saveerror-log', 'Error saving image!');
+ Add('render-status-saveerror-message1', 'An error occured while saving the image:');
+ Add('render-status-saveerror-message2', 'Check your free disk space and try again.');
+ Add('render-status-totaltime', 'Total time:');
+ Add('render-status-renderterminated', 'Rendering terminated!');
+ Add('render-status-renderhibernated', 'Rendering paused and progress saved!');
+ Add('render-status-elapsed', 'Elapsed');
+ Add('render-status-remaining', 'Remaining');
+ Add('render-status-slicestatus', 'Slice %d of %d');
+ Add('render-status-notenoughmemory1', 'You do not have enough memory for this render. Do you want to continue anyway?');
+ Add('render-status-notenoughmemory2', 'You do not have enough memory for this render. Please use a lower Maximum memory setting. Do you want to ignore this problem and continue?');
+ Add('render-status-nofilename', 'Please enter a file name.');
+ Add('render-status-fileexists-message1', '"%s" already exists');
+ Add('render-status-fileexists-message2', 'Do you want to replace it?');
+ Add('render-status-pathdoesnotexist', 'The directory does not exist.');
+ Add('render-status-invaliddensity', 'Invalid Sample Density value');
+ Add('render-status-invalidfilterradius', 'Invalid Filter Radius value');
+ Add('render-status-invalidoversample', 'Invalid Oversample value');
+ Add('render-status-invalidwidth', 'Invalid image width');
+ Add('render-status-invalidheight', 'Invalid image height');
+ Add('render-status-maxmemorytoosmall', 'Maximum memory value is too small. Do you want to continue anyway?');
+ Add('render-status-shuttingdownrender', 'Shutting down previous render...');
+ Add('render-status-log-title', 'Rendering "%s"');
+ Add('render-status-log-size', 'Size: %dx%d');
+ Add('render-status-log-quality', 'Quality: %g');
+ Add('render-status-log-oversampling', 'Oversample: %d, Filter: %g');
+ Add('render-status-log-bufferdepth', 'Buffer depth: %s');
+ Add('render-status-log-memorylimit', 'Memory limit: %d MB');
+ Add('render-status-log-largepng-message1', '*** WARNING *** You have selected PNG format and an image size which exceeds 20 megapixels');
+ Add('render-status-log-largepng-message2', 'PNG format with extreme high-resolution images is not recommended!');
+ Add('render-status-log-largepng-message3', 'To avoid slowdown (and possible memory problems) use BMP file format instead.');
+ Add('render-status-confirmstop', 'Do you want to stop the current render?');
+ Add('render-status-dosnapshot', 'Do snapshot');
+ Add('render-status-dosnapshothint', 'Save current state as a picture');
+ Add('messages-title', 'Messages');
+ Add('messages-openautomatically', 'Automatically open this window');
+ Add('mutation-title', 'Mutation');
+ Add('mutation-directions', 'Directions');
+ Add('mutation-speed', 'Speed');
+ Add('mutation-trend', 'Trend');
+ Add('mutation-keepnumberoftransforms', 'Keep transform count');
+ Add('mutation-randomtrend', 'Random');
+ Add('mutation-maintainsymmetry', 'Maintain symmetry');
+ Add('mutation-previous', 'Previous');
+ Add('options-title', 'Settings ');
+ Add('options-selectplugins', 'Please, specify the plugin folder');
+ Add('options-restartnotice', 'You must restart Apophysis AV to make your changes have effect.');
+ Add('options-tab-general-title', 'General ');
+ Add('options-tab-general-language', 'Language file');
+ Add('options-tab-general-multithreading', 'Multithreading ');
+ Add('options-tab-general-multithreading-off', 'Off ');
+ Add('options-tab-general-bufferdepth', 'Buffer depth ');
+ Add('options-tab-general-jpegquality', 'JPEG quality ');
+ Add('options-tab-general-pngtransparency', 'PNG transparency ');
+ Add('options-tab-general-showextendedstatistics', 'Show extended render statistics ');
+ Add('options-tab-general-showrenderimage', 'Show the rendered image ');
+ Add('options-tab-general-confirmdelete', 'Confirm deleting flames ');
+ Add('options-tab-general-confirmexit', 'Confirm exit ');
+ Add('options-tab-general-confirmrenderstop', 'Confirm stop rendering ');
+ Add('options-tab-general-confirmclearscript', 'Confirm clear script ');
+ Add('options-tab-general-oldgradientformat', 'Use old gradient format ');
+ Add('options-tab-general-templaterandcolor', 'Randomize gradient for templates ');
+ Add('options-tab-general-alwaysblankflame', 'Disable templates ');
+ Add('options-tab-general-autosavepasted', 'Automatically save new and pasted flames ');
+ Add('options-tab-general-enablemissingpluginswarning', 'Warn on missing plugins ');
+ Add('options-tab-general-enablethumbnailembedding', 'Enable thumbnail embedding ');
+ Add('options-tab-general-setenglayout', 'Set English keyboard layout');
+ Add('options-tab-general-rotatemode', 'Rotation mode ');
+ Add('options-tab-general-rotateimage', 'Rotate image ');
+ Add('options-tab-general-rotateframe', 'Rotate frame ');
+ Add('options-tab-general-zoommode', 'Zooming mode ');
+ Add('options-tab-general-preservequality', 'Preserve quality ');
+ Add('options-tab-general-preservespeed', 'Preserve speed ');
+ Add('options-tab-general-enummode', 'Enumerating mode ');
+ Add('options-tab-general-enum0', 'Script-compatible (zero-based) ');
+ Add('options-tab-general-enum1', 'Standart (start from 1) ');
+ Add('options-tab-general-guides', 'Guidelines ');
+ Add('options-tab-general-enableguides', 'Enable guides ');
+ Add('options-tab-general-guidecentercolor', 'Center ');
+ Add('options-tab-general-guidethirdscolor', 'Thirds ');
+ Add('options-tab-general-guidegoldenratiocolor', 'Golden ratio ');
+ //Add('options-tab-general-singleprecision', 'Use single-precision buffers ');
+ Add('options-tab-general-onrendercomplete', 'On render complete ');
+ Add('options-tab-general-playsound', 'Play sound ');
+ Add('options-tab-general-soundfile', 'Sound file: ');
+ Add('options-tab-general-playhint', 'Play');
+ Add('options-tab-general-autoflatten', 'Apply flattening to old flames');
+ Add('options-tab-general-pluginpath', 'Plugin folder ');
+ Add('options-tab-editor-title', 'Editor ');
+ Add('options-tab-editor-editorgraph', 'Graph ');
+ Add('options-tab-editor-editordefaults', 'Defaults ');
+ Add('options-tab-editor-usetransformcolor', 'Use transform color ');
+ Add('options-tab-editor-helperlines', 'Show helper lines ');
+ Add('options-tab-editor-alwaysshowbothtransformtypes', 'Always show both transform types ');
+ Add('options-tab-editor-backgroundcolor', 'Background ');
+ Add('options-tab-editor-gridcolors', 'Grid ');
+ Add('options-tab-editor-referencecolor', 'Reference ');
+ Add('options-tab-editor-helpercolors', 'Helpers ');
+ Add('options-tab-editor-extendededit', 'Extended edit mode ');
+ Add('options-tab-editor-locktransformaxes', 'Lock transform axes ');
+ Add('options-tab-editor-rebuildxaoslinks', 'Rebuild links after deleting');
+ Add('options-tab-editor-enablepreview', 'Enable background preview');
+ Add('options-tab-editor-previewtransparency', 'Transparency');
+ Add('options-tab-editor-resetcoefs', 'Reset affine values by double-click');
+ Add('options-tab-editor-resetlinear', 'Reset linear when other variation is set');
+ Add('options-tab-display-title', 'Display ');
+ Add('options-tab-display-rendering', 'Rendering ');
+ Add('options-tab-display-previewdensity', 'Preview density ');
+ Add('options-tab-display-mainpreview', 'Main window preview ');
+ Add('options-tab-display-extendpreviewbuffer', 'Extend preview buffer ');
+ Add('options-tab-display-extenspreviewbufferlabel', 'Buffer extension ');
+ Add('options-tab-display-showtransparency', 'Show transparency ');
+ Add('options-tab-display-usesmallthumbs', 'Use small thumbnails (like Apophysis 2.09) ');
+ Add('options-tab-display-fuse', 'Skipped iterations');
+ Add('options-tab-display-tileradius', 'Tile radius');
+ Add('options-tab-random-title', 'Random ');
+ Add('options-tab-random-numberoftransforms', 'Number of transforms ');
+ Add('options-tab-random-mutationtransforms', 'Mutation transforms ');
+ Add('options-tab-random-randombatch', 'Random batch ');
+ Add('options-tab-random-forcedsymmetry', 'Forced symmetry ');
+ Add('options-tab-random-batchsize', 'Batch size ');
+ Add('options-tab-random-titleprefix', 'Title prefix ');
+ Add('options-tab-random-keepbackground', ' Keep the current background color');
+ Add('options-tab-random-symtype', 'Type');
+ Add('options-tab-random-symorder', 'Order');
+ Add('options-tab-random-symlimit', 'Limit');
+ Add('options-tab-random-type-none', 'None');
+ Add('options-tab-random-type-bilateral', 'Bilateral');
+ Add('options-tab-random-type-rotational', 'Rotational');
+ Add('options-tab-random-type-dihedral', 'Dihedral');
+ Add('options-tab-random-onrandom', 'On random flame use... ');
+ Add('options-tab-random-userandom', 'Random preset gradient');
+ Add('options-tab-random-usedefault', 'Default gradient ');
+ Add('options-tab-random-usecurrent', 'Current gradient ');
+ Add('options-tab-random-randomcalculated', 'Random gradient ');
+ Add('options-tab-random-randomfromfile', 'Random from file ');
+ Add('options-tab-random-filetouse', 'Gradient file to use ');
+ Add('options-tab-variations-title', 'Variations ');
+ Add('options-tab-variations-random', 'Random choise ');
+ Add('options-tab-variations-faves', 'Favourites ');
+ Add('options-tab-variations-setall', 'Set all ');
+ Add('options-tab-variations-clearall', 'Clear all ');
+ Add('options-tab-variations-invert', 'Invert selection');
+ Add('options-tab-gradient-title', 'Gradient ');
+ Add('options-tab-gradient-numberofnodes', 'Number of nodes ');
+ Add('options-tab-gradient-smoothpalette', 'Smooth palette ');
+ Add('options-tab-gradient-huebetween', 'Hue range ');
+ Add('options-tab-gradient-satbetween', 'Saturation range ');
+ Add('options-tab-gradient-lumbetween', 'Luminance range ');
+ Add('options-tab-gradient-numtries', 'Number of tries ');
+ Add('options-tab-gradient-trylength', 'Try length ');
+ Add('options-tab-gradient-colorblend', 'Color blending type ');
+ Add('options-tab-gradient-rgbblend', 'RGB blend ');
+ Add('options-tab-gradient-hsvblend', 'HSV blend ');
+ Add('options-tab-gradient-noblend', 'No blending ');
+ Add('options-tab-gradient-equalstripes', 'Use equal width of gradient color stripes');
+ Add('options-tab-upr-title', 'UltraFractal ');
+ Add('options-tab-upr-paramdefaults', 'Parameter defaults ');
+ Add('options-tab-upr-coloralgorithm', 'Coloring algorithm ');
+ Add('options-tab-upr-uprsize', 'Image size ');
+ Add('options-tab-upr-formula', 'Formula ');
+ Add('options-tab-upr-identifier', 'Identifier ');
+ Add('options-tab-upr-adjustdensity', 'Adjust sample density ');
+ Add('options-tab-environment-title', 'Environment');
+ Add('options-tab-environment-defaultparams', 'Default parameters ');
+ Add('options-tab-environment-smoothpalette', 'Smooth palette ');
+ Add('options-tab-environment-functionlib', 'Scripting function library ');
+ Add('options-tab-environment-exportrenderer', 'Export renderer ');
+ Add('options-tab-environment-helpfile', 'Help file ');
+ Add('options-tab-environment-screenshots', 'Screenshot folder ');
+ Add('options-tab-environment-defaultscript', 'Default script file ');
+ Add('options-tab-environment-screenshotshint', 'Select a folder for Apophysis screenshots: ');
+ Add('options-tab-environment-rememberlastopen', 'Remember last open parameters ');
+ Add('options-tab-environment-autosave', 'Enable autosave ');
+ Add('options-tab-environment-savefrequency', 'Save frequency ');
+ Add('options-tab-environment-usex64chaotica', 'Use 64-bit version if possible');
+ Add('preview-title', 'Preview');
+ Add('preview-keepframe', 'Saving images with boarders');
+ Add('preview-pause', 'Pause the animation');
+ Add('preview-resume', 'Resume the animation');
+ Add('save-title', 'Save');
+ Add('save-name', 'Fractal name');
+ Add('save-namepal', 'Palette name');
+ Add('save-oldformat', 'Use old format');
+ Add('save-newformat', 'Use new format');
+ Add('save-type-parameters', 'Save Parameters');
+ Add('save-type-allparameters', 'Save All Parameters');
+ Add('save-type-template', 'Save Template');
+ Add('save-type-gradient', 'Save Gradient');
+ Add('save-type-exportupr', 'Export UPR');
+ Add('save-status-notitle', 'No item name given.');
+ Add('save-status-invalidfilename', 'Invalid file name.');
+ Add('save-status-alreadyexists', '"%s" in "%s" already exists. Do you want to replace it?');
+ Add('save-status-alreadyexists2', '"%s" already exists. Do you want to replace it?');
+ Add('save-status-alreadyexists3', 'The flame "%s" already exists. Please, select another name.');
+ Add('savepreset-title', 'Save preset');
+ Add('savepreset-name', 'Name');
+ Add('savepreset-notitle', 'No preset name given.');
+ Add('script-title', 'Script Editor');
+ Add('script-rendering', 'Rendering image "%s"...');
+ Add('script-break', 'Break');
+ Add('script-new', 'New script');
+ Add('script-open', 'Open');
+ Add('script-save', 'Save');
+ Add('script-run', 'Run');
+ Add('script-pause', 'Pause');
+ Add('script-stop', 'Stop');
+ Add('script-faves', 'Add to favourites');
+ Add('script-line', 'Line');
+ Add('script-position', 'Position');
+ Add('script-confirmclear', 'Are you really want to delete the script? All unsaved changes will be lost!');
+ Add('script-codeblocks', 'Show code blocks');
+ Add('script-codeblock', 'Active code block renaming');
+ Add('script-codeblockrename', 'Insert new caption: ');
+ Add('script-codeblockhints', 'Show code blocks in hints');
+ Add('script-commentout', 'Comment out the selection by...');
+ Add('script-surround', 'Surround the selection by...');
+ Add('script-clipboardview', 'Add code blocks from the clipboard');
+ Add('script-codeblockhint', 'Select a block and drag it into the Script editor');
+ Add('script-findreplace', 'Find and replace...');
+ Add('script-textnotfound', 'The search is finished. The text is not found at the script.');
+ Add('script-collapsecode', 'Collapse all blocks of code');
+ Add('script-expandcode', 'Expand all blocks of code');
+ Add('script-compileerror', 'Script: COMPILE ERROR');
+ Add('script-runtimeerror', 'Script: RUNTIME ERROR');
+ Add('script-status-default', 'Press Ctrl + "Space" for automathic code completion ');
+ Add('script-status-compileerror', 'Fail to run the script');
+ Add('script-status-runtimeerror', 'Script execution failed');
+ Add('script-status-break', 'Execution stopped by user.');
+ Add('script-status-executing', 'Executing current script...');
+ Add('script-status-stopped', 'Infinite loop was stopped');
+ Add('script-status-syntaxerror', 'Syntax error');
+ Add('script-status-noclassmember', 'Unknown member identifier');
+ Add('script-status-noidentifier', 'Unknown identifier or variable is not declared');
+ Add('script-status-constassign', 'Cannot assign a value to constant');
+ Add('script-status-varnotarray', 'Variable is not an array');
+ Add('script-status-noformfile', 'Cannot find form file');
+ Add('script-status-unknownmethod', 'Unknown method or routine');
+ Add('script-status-toomanyparams', 'Too many parameters for method');
+ Add('script-status-notenoughparams', 'Not enough actual parameters for method');
+ Add('script-status-expectparams', 'Expected # parameters');
+ Add('script-status-expectvar', 'Method # expects variable reference');
+ Add('script-status-notassign', 'Assign to method # is not allowed');
+ Add('script-status-propnotfunc', 'Property # cannot be called as a method');
+ Add('script-status-outofrange', 'Transform index is out of range!');
+ Add('script-status-varoutofrange', 'The index or parameter value is out of range.');
+ Add('script-status-notransforms', 'Not enough transforms to perform the operation.');
+ Add('script-status-toomanytransforms', 'Too many transforms to perform the operation.');
+ Add('script-status-paused', 'Script execution is paused');
+ Add('script-status-cancelrender', 'Render was cancelled by user.');
+ Add('splash-loadingtext', 'Loading');
+ Add('template-title', 'Templates');
+ Add('template-filename', 'Source template file: ');
+ Add('main-common-title-lite', 'Lite Version');
+ Add('main-common-title-t500', 'High-Memory Version');
+ Add('main-common-randombatch', 'Random Batch');
+ Add('main-menu-file-title', 'File');
+ Add('main-menu-file-new', 'New');
+ Add('main-menu-file-open', 'Open the flame...');
+ Add('main-menu-file-loadpng', 'Load parameters from PNG...');
+ Add('main-menu-file-loadpnghint', 'Open the PNG-image that containing flame parameters');
+ Add('main-menu-file-restoreautosave', 'Restore last autosave');
+ Add('main-menu-file-autosavehint', 'Open the last automatically saved fractal project');
+ Add('main-menu-file-saveparams', 'Save parameters...');
+ Add('main-menu-file-saveallparams', 'Save all parameters...');
+ Add('main-menu-file-saveallhint', 'Save parameters of all fractals to a file');
+ Add('main-menu-file-smoothpalette', 'Smooth palette...');
+ Add('main-menu-file-smoothpalettehint', 'Create a smooth color gradient from an image');
+ Add('main-menu-file-gradientbrowser', 'Gradient browser...');
+ Add('main-menu-file-gradientbrowserhint', 'Browse saved fractal palettes libraries...');
+ Add('main-menu-file-exportupr', 'Export UPR...');
+ Add('main-menu-file-exportflame', 'Export to flam3...');
+ Add('main-menu-file-exportchaotica', 'Export to Chaotica...');
+ Add('main-menu-file-importgimp', 'Import GIMP parameters...');
+ Add('main-menu-file-exportuprhint', '*** OUTDATED *** Save the flame in UltraFractal''s parameters format. 3D-properties are not supported!');
+ Add('main-menu-file-exportflamehint', '*** OUTDATED *** Export the current flame parameters in a FLAM3 format. 3D-properties are not supported!');
+ Add('main-menu-file-exportchaoticahint', 'Export the current fractal to Chaotica software. 3D-properties are not supported!');
+ Add('main-menu-file-importgimphint', '*** OUTDATED *** Import GIMP parameters, which were created using the Flame filter');
+ Add('main-menu-file-randombatch', 'Random batch');
+ Add('main-menu-file-exit', 'Exit');
+ Add('main-menu-file-randombatchhint', 'Create and load a file consist of random fractal parameters');
+ Add('main-menu-file-exithint', 'Quit and close Apophysis');
+ Add('main-menu-edit-title', 'Edit');
+ Add('main-menu-edit-saveundo', 'Save undo stack...');
+ Add('main-menu-edit-copyasupr', 'Copy as UPR');
+ Add('main-menu-edit-copy', 'Copy the flame XML-parameters to the clipboard');
+ Add('main-menu-edit-paste', 'Paste the flame XML-parameters from cripboard');
+ Add('main-menu-edit-copyuprhint', 'Copy the UltraFractal-parameters of the flame to the clipboard ');
+ Add('main-menu-view-title', 'View');
+ Add('main-menu-view-fullscreen', 'Full screen');
+ Add('main-menu-view-editor', 'Editor');
+ Add('main-menu-view-adjustment', 'Adjustment');
+ Add('main-menu-view-gradient', 'Gradient');
+ Add('main-menu-view-mutation', 'Mutation');
+ Add('main-menu-view-imagesize', 'Image size');
+ Add('main-menu-view-messages', 'Messages');
+ Add('main-menu-view-curves', 'Curves');
+ Add('main-menu-flame-title', 'Flame');
+ Add('main-menu-flame-reset', 'Reset location');
+ Add('main-menu-flame-randomize', 'Randomize all parameters');
+ Add('main-menu-flame-randomizehint', 'Randomize all parameters of the current fractal flame');
+ Add('main-menu-flame-changeweights', 'Change weight distribution...');
+ Add('main-menu-flame-changecolors', 'Change color distribution...');
+ Add('main-menu-flame-randomweights', 'Randomize weights');
+ Add('main-menu-flame-equalweights', 'Equalize weights');
+ Add('main-menu-flame-randomweightshint', 'Randomize transform weights (probabilities)');
+ Add('main-menu-flame-equalweightshint', 'Set all weights (transform probabilities) to the same value');
+ //Add('main-menu-flame-computeweights', 'Compute weights');
+ Add('main-menu-flame-calculateweights', 'Calculate weights');
+ Add('main-menu-flame-normweights', 'Normalize weights');
+ Add('main-menu-flame-calculateweightshint', 'Compute transform weights in accordance to their scale factors');
+ Add('main-menu-flame-normweightshint', 'Set transform weights to their total sum equals to 1.0');
+ Add('main-menu-flame-calculatecolors', 'Calculate color values');
+ Add('main-menu-flame-randomizecolors', 'Randomize color values');
+ Add('main-menu-flame-resetcolors', 'Reset color values');
+ Add('main-menu-flame-calculatecolorspeed', 'Calculate color speed');
+ Add('main-menu-flame-randomizecolorspeed', 'Randomize color speed');
+ Add('main-menu-flame-resetcolorspeed', 'Reset color speed');
+ Add('main-menu-flame-calccolorshint', 'Distribute transform color parameters evenly');
+ Add('main-menu-flame-randcolorshint', 'Randomize transform color parameters, but keep the existing color palette');
+ Add('main-menu-flame-calccolorspeedhint', 'Calculate color speed values based on transform weights and contraction factors');
+ Add('main-menu-flame-randcolorspeedhint', 'Randomize a speed of changing colors from the current palette');
+ Add('main-menu-flame-resetcolorspeedhint', 'Reset all color speed values to zero');
+ Add('main-menu-flame-resetcolorshint', 'Reset all color values to zero (make the fractal monochrome)');
+ Add('main-menu-flame-flatten', 'Apply flatten');
+ Add('main-menu-flame-flattenhint', 'Apply "flatten" variation for all pseudo-3D transforms');
+ Add('main-menu-flame-unflatten', 'Unflatten');
+ Add('main-menu-flame-unflattenhint', 'Reset "flatten" variation for all transforms');
+ Add('main-menu-flame-rendertodisk', 'Render flame...');
+ Add('main-menu-flame-renderallflames', 'Render all flames...');
+ Add('main-menu-flame-resumeunfinished', 'Resume unfinished render process...');
+ Add('main-menu-flame-generatereport', 'Summarize flame...');
+ Add('main-menu-flame-reporthint', 'Show some basic information about the current fractal');
+ Add('main-menu-flame-addtile', 'Add equiaffine tile...');
+ Add('main-menu-flame-addsymmetry', 'Add equiaffine symmetry...');
+ Add('main-menu-flame-rhombustile', 'Rhombus');
+ Add('main-menu-flame-squaretile', 'Square');
+ Add('main-menu-flame-hextile', 'Hexagonal');
+ Add('main-menu-flame-symorder', ', order...');
+ Add('main-menu-flame-template', 'Save as template...');
+ Add('main-menu-flame-templatehint', 'Save the fractal as a template for future flames');
+ Add('main-menu-variation-title', 'Variation');
+ Add('main-menu-variation-random', 'Random');
+ Add('main-menu-variation-builtin', 'Built-in');
+ Add('main-menu-variation-plugins', 'Plugins');
+ Add('main-menu-variation-randomhint', 'Randomly selected variation');
+ Add('main-menu-variation-builtinhint', 'The list of built-in variations');
+ Add('main-menu-variation-pluginshint', 'The list of dinamically loaded variations');
+ Add('main-menu-script-title', 'Script');
+ Add('main-menu-script-run', 'Run script');
+ Add('main-menu-script-run2', 'Run "%s"');
+ Add('main-menu-script-run3', 'Load and run the "%s" script.');
+ Add('main-menu-script-directory', 'Directory');
+ Add('main-menu-script-directoryhint', 'Scripts from default directory');
+ Add('main-menu-script-more', 'More');
+ Add('main-menu-script-stop', 'Stop script');
+ Add('main-menu-script-open', 'Open...');
+ Add('main-menu-script-openhint', 'Open a saved script file');
+ Add('main-menu-script-edit', 'Edit script');
+ Add('main-menu-script-managefaves', 'Manage favourites...');
+ Add('main-menu-script-flametoscript', 'Generate script from flame');
+ Add('main-menu-script-managefaveshint', 'Show the Favourite Scripts Manager');
+ Add('main-menu-script-flametoscripthint', 'Translate visual flame properties into a programming language');
+ Add('main-menu-options-title', 'Tools');
+ Add('main-menu-options-togglemaintoolbar', 'Show the toolbar');
+ Add('main-menu-options-togglestatusbar', 'Show the status bar');
+ Add('main-menu-options-togglefilelist', 'Show the parameter list');
+ Add('main-menu-options-resetfilelistwidth', 'Reset the content list width'); // Reset layout
+ Add('main-menu-options-resetwidthhint', 'Set default width for the left panel');
+ Add('main-menu-options-sortflames', 'Sort flames alphabetically');
+ Add('main-menu-options-enumflames', 'Display flame indices');
+ Add('main-menu-options-tracelog', 'Trace log...');
+ Add('main-menu-options-traceloghint', 'Show trace log (system processes connected with Apophysis)');
+ Add('main-menu-options-showoptions', 'Settings...');
+ Add('main-menu-options-apouistyle', 'Apophysis GUI style...');
+ Add('main-menu-options-apouistylehint', 'Change the Apophysis visual appearance');
+ Add('main-menu-help-title', 'Help');
+ Add('main-menu-help-contents', 'Contents');
+ Add('main-menu-help-aboutalgorithm', 'About fractal flames...');
+ Add('main-menu-help-aboutapophysis', 'About Apophysis ...');
+ Add('main-menu-help-contentshint', 'Open the Apophysis help file');
+ Add('main-menu-help-aboutalgorithmhint', 'Open the corresponding documentation in your internet browser');
+ Add('main-menu-help-aboutapophysishint', 'Show copyright and version information');
+ Add('main-menu-help-ifstheory', 'Theory of IFS fractals...');
+ Add('main-menu-help-ifstheoryhint', 'Open the link to M.Barnsley''s "Fractal Everywhere" book in your internet browser');
+ Add('main-menu-help-pluginlink', 'Download Apophysis plugins....');
+ Add('main-menu-renamehint', 'Rename the selected fractal');
+ Add('main-menu-deletehint', 'Delete the selected fractal from the file');
+ Add('main-menu-screenshot', 'Make a sreenshot of the active window');
+ Add('main-menu-saveimage', 'Save the preview image with parameters');
+ Add('main-menu-updatethumb', 'Update thumbnail');
+ Add('main-menu-updateallthumbs', 'Update all thumbnails');
+ Add('main-toolbar-listviewmode-classic', 'Classic view | Change the flame list view to a report (single text)');
+ Add('main-toolbar-listviewmode-icons', 'Thumbnail view | Change a flame list view to icons');
+ Add('main-toolbar-togglealpha', 'Show transparency | Show the flame on a transparent background');
+ Add('main-toolbar-toggleguides', 'Show guidelines | Show flame thirds, center and golden ratio');
+ Add('main-toolbar-modemove', 'Translate the camera | Translate the fractal image using mouse');
+ Add('main-toolbar-moderotate', 'Rotate the camera | Rotate the fractal image using mouse');
+ Add('main-toolbar-modezoomin', 'Zoom in | Scale up the fractal image using mouse');
+ Add('main-toolbar-modezoomout', 'Zoom out | Scale down the fractal image using mouse');
+ // AV: added a bunch of missing hints
+ Add('main-toolbar-new', 'New Flame | Create a new fractal project');
+ Add('main-toolbar-open', 'Open (Ctrl+O) | Open a parameter file for browsing');
+ Add('main-toolbar-saveparams', 'Save fractal parameters (Ctrl+S)| Save fractal parameters to a flame file');
+ Add('main-toolbar-render', 'Render flame(Ctrl+R) | Save the current flame to disk as a picture');
+ Add('main-toolbar-renderall', 'Render all flames| Save all fractals as pictures');
+ Add('main-toolbar-undo', 'Undo (Ctrl+Z)| Undo the last action');
+ Add('main-toolbar-redo', 'Redo (Ctrl+Y) | Redo the last cancelled action');
+ Add('main-toolbar-reset', 'Reset Location (F12) | Recalculate the flame size and position');
+ Add('main-toolbar-fullscreen', 'Fullscreen (F3) | Show full-screen view of the flame');
+ Add('main-toolbar-editor', 'Editor | Open transform editor');
+ Add('main-toolbar-adjustment', 'Adjustment | Adjust the position, size and colors of the flame');
+ Add('main-toolbar-gradient', 'Gradient | Change a color palette of the flame');
+ Add('main-toolbar-curves', 'Curves | Edit color curves of the fractal image');
+ Add('main-toolbar-mutation', 'Mutation | Show randomly generated modifications of the current flame');
+ Add('main-toolbar-quality', 'Rendering quality | Set flame quality (density) for the main preview window');
+ Add('main-toolbar-imagesize', 'Image size | Change the image size');
+ Add('main-toolbar-messages', 'Messages | Show error messages');
+ Add('main-toolbar-options', 'Settings | Change Apophysis default settings');
+ Add('main-toolbar-editscript', 'Edit script | Edit the script code');
+ Add('main-toolbar-runscript', 'Run script | Execute the current script');
+ Add('main-toolbar-stopscript', 'Stop script | To stop an animation script, you can press any key on your keyboard');
+ Add('main-status-batchgenerate', 'Generating %d of %s...');
+ Add('main-status-batcherror', 'Error creating batch.');
+ Add('main-status-calculatingpalette', 'Calculating the palette, (%d%%)...'); // AV: doesn't work...
+ Add('main-status-noflam3', 'Unable to find flam3 executable. Please verify your settings.');
+ Add('main-status-nohelpfile', 'Please specify a help file path in the options dialog first.');
+ Add('main-status-variationsorvariables', 'variations or variables');
+ Add('main-status-plugins', 'plugins');
+ Add('main-status-pluginpath-ioerror', 'Failed to write the setting for the plugin directory. Apophysis will use the default setting.');
+ Add('main-status-noloadingerrors', 'Flame loaded without errors');
+ Add('main-status-loadingerrorcount', '%d errors in flame');
+ Add('main-status-morepluginsneeded', 'The flame "%s" requires the following additional %s:');
+ Add('main-status-noautosave', 'No autosave present.');
+ Add('main-status-chaoticacompatmissing', 'The variation compatibility data file can not be found at the configured location of Chaotica. The rendering result may look different from the preview. Do you want to proceed?');
+ Add('main-status-nochaotica', 'The executable file of Chaotica could not be found. Please check your settings.');
+ Add('main-status-oldchaotica', 'The rendering result may look different from the preview. Do you want to proceed?');
+ Add('main-report-transformcount', 'Transform count: %d');
+ Add('main-report-finaltransform', 'Has final transform: %s');
+ Add('main-report-directcoloring', 'Has direct coloring: ');
+ Add('main-report-flame3d', 'Has 3D view: ');
+ Add('main-report-usedplugins', 'Used plugins:');
+ Add('main-report-noplugins', '(none)');
+ Add('varorder-title', 'Variation Execution Order');
+ Add('varorder-totop', 'To Top');
+ Add('varorder-tobottom', 'To Bottom');
+ Add('varorder-byname', 'Sort by name');
+ Add('varorder-bynamehint', 'Sort variations in alphabetical order');
+ Add('varorder-byindex', 'Default order');
+ Add('varorder-byindexhint', 'Restore the default variation order in Transform Editor');
+ Add('varorder-noselected', 'Active variation not found. Please, select the variation to move.');
+end;
+
+procedure Add(key, value: string);
+var entry : TKeyValuePair;
+begin
+ Inc(tokenCount);
+ SetLength(language, tokenCount);
+ SetLength(defaultlanguage, tokenCount);
+ entry := TKeyValuePair.Create;
+ entry.key := key;
+ entry.value := value;
+ language[tokenCount - 1] := entry;
+ defaultlanguage[tokenCount - 1] := entry;
+end;
+
+procedure AddNoDefault(key, value: string);
+var entry : TKeyValuePair;
+begin
+ Inc(tokenCount);
+ SetLength(language, tokenCount);
+ entry := TKeyValuePair.Create;
+ entry.key := key;
+ entry.value := value;
+ language[tokenCount - 1] := entry;
+end;
+
+procedure LoadLanguage(path: string);
+begin
+ if (path = '') or (not FileExists(path)) then LoadEnglish()
+ else begin
+ tokenCount := 0;
+ if true then begin
+ parser := TParser.Create;
+ ListXmlScanner := TEasyXmlScanner.Create(nil);
+
+ ListXmlScanner.OnStartTag := parser.ListXmlScannerStartTag;
+ ListXmlScanner.OnEndTag := parser.ListXmlScannerEndTag;
+ ListXmlScanner.OnEmptyTag := parser.ListXmlScannerEmptyTag;
+ ListXmlScanner.OnContent := parser.ListXmlScannerContent;
+
+ ListXmlScanner.Filename := path;
+ ListXmlScanner.Execute;
+
+ ListXmlScanner.Destroy;
+ parser.Destroy;
+ end;
+ end;
+end;
+
+function TextByKey(key:string):string;
+var i: integer;
+begin
+
+ Result := '#ERR_NO_TEXT#';
+ for i:=0 to tokenCount - 1 do begin
+ if LowerCase(language[i].key) = LowerCase(key) then begin
+ Result := language[i].value;
+ exit;
+ end;
+ end;
+
+ // maybe try default language?
+ for i:=0 to tokenCount - 1 do begin
+ if LowerCase(defaultlanguage[i].key) = LowerCase(key) then begin
+ Result := defaultlanguage[i].value;
+ exit;
+ end;
+ end;
+
+end;
+
+constructor TParser.Create;
+begin
+ self.parentTagnames := TStringList.Create;
+end;
+
+procedure TParser.ListXmlScannerStartTag(Sender: TObject; TagName: string; Attributes: TAttrList);
+begin
+ self.parentTagnames.Add(self.currentTagname);
+ self.currentTagname := TagName;
+end;
+procedure TParser.ListXmlScannerEndTag(Sender: TObject; TagName: string);
+var lastIndex : integer;
+begin
+ lastIndex := self.parentTagnames.Count - 1;
+ self.currentTagname := self.parentTagnames.Strings[lastIndex];
+ self.parentTagnames.Delete(lastIndex);
+end;
+
+procedure TParser.ListXmlScannerEmptyTag(Sender: TObject; TagName: string; Attributes: TAttrList);
+var lastIndex : integer;
+begin
+ self.parentTagnames.Add(self.currentTagname);
+ self.currentTagname := TagName;
+ self.ListXmlScannerContent(Sender, '');
+ lastIndex := self.parentTagnames.Count - 1;
+ self.currentTagname := self.parentTagnames.Strings[lastIndex];
+ self.parentTagnames.Delete(lastIndex);
+end;
+
+destructor TParser.Destroy;
+begin
+ self.parentTagnames.Free; // AV: fixed memory leak
+ inherited;
+end;
+
+procedure TParser.ListXmlScannerContent(Sender: TObject; Content: string);
+const root: string = 'stringtable';
+var key, tn: string; i: integer;
+begin
+ for i:=0 to self.parentTagnames.Count - 1 do begin
+ tn := self.parentTagnames.Strings[i];
+ if not (tn = '') and not (tn = root) then key := key + tn + '-';
+ end;
+ key := key + self.currentTagname;
+ Add(key, Content);
+end;
+
+end.
diff --git a/Core/XFormMan.pas b/Core/XFormMan.pas
new file mode 100644
index 0000000..c434648
--- /dev/null
+++ b/Core/XFormMan.pas
@@ -0,0 +1,356 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit XFormMan;
+
+interface
+
+uses
+ BaseVariation, SysUtils, Forms, Windows;
+
+const
+ NRLOCVAR = 36;
+var
+ NumBuiltinVars: integer;
+
+type
+ TFNToVN = record
+ FileName: string;
+ VarName: string;
+ end;
+
+function NrVar: integer;
+function Varnames(const index: integer): String;
+procedure RegisterVariation(Variation: TVariationLoader; supports3D, supportsDC : boolean);
+function GetNrRegisteredVariations: integer;
+function GetRegisteredVariation(const Index: integer): TVariationLoader;
+function GetNrVariableNames: integer;
+function GetVariableNameAt(const Index: integer): string;
+function GetVariationIndex(const str: string): integer;
+function GetVariationIndexFromVariableNameIndex(const Index: integer): integer;
+procedure VarSupports(index : integer; var supports3D : boolean; var supportsDC : boolean);
+procedure InitializeXFormMan;
+procedure DestroyXFormMan;
+procedure RegisterVariationFile(filename, name: string);
+function GetFileNameOfVariation(name: string): string;
+
+implementation
+
+uses
+ Classes;
+
+var
+ VariationList: TList;
+ VariableNames: TStringlist;
+ loaderNum : integer;
+ Variable2VariationIndex : array of integer;
+ FNToVNList : array of TFNToVN;
+ FNToVNCount: integer;
+
+procedure InitializeXFormMan;
+begin
+ VariationList := TList.Create;
+ VariableNames := TStringlist.create;
+ SetLength(Variable2VariationIndex,0);
+ SetLength(FNToVNList, 0);
+ FNToVNCount := 0;
+end;
+
+procedure VarSupports(index : integer; var supports3D : boolean; var supportsDC : boolean);
+const
+ supports3D_arr: array[0..NRLOCVAR-1] of boolean = (
+ true, //'linear',
+ true, //'flatten',
+ true, //'pre_blur3D',
+ true, //'spherical',
+ true, //'swirl',
+ true, //'horseshoe',
+ true, //'polar',
+ true, //'disc',
+ true, //'spiral',
+ true, //'hyperbolic',
+ true, //'diamond',
+ true, //'eyefish',
+ true, //'bubble',
+ true, //'cylinder',
+ true, //'noise',
+ true, //'blur',
+ false, //'gaussian_blur',
+ true, //'zblur',
+ true, //'blur3D',
+ false, //'pre_blur',
+ true, //'pre_zscale',
+ true, //'pre_ztranslate',
+ true, //'pre_rotate_x',
+ true, //'pre_rotate_y',
+ true, //'zscale',
+ true, //'ztranslate',
+ true, //'zcone',
+ true, //'post_rotate_x',
+ true, //'post_rotate_y',
+ false, //'post_mirror_x',
+ false, //'post_mirror_y',
+ true, //'post_mirror_z',
+ true, //'hemisphere',
+ true, //'cross',
+ true, //'pyramid'
+ true // polar2
+ );
+ supportsDC_arr: array[0..NRLOCVAR-1] of boolean = (
+ false, //'linear',
+ false, //'flatten',
+ false, //'pre_blur3D',
+ false, //'spherical',
+ false, //'swirl',
+ false, //'horseshoe',
+ false, //'polar',
+
+ false, //'disc',
+ false, //'spiral',
+ false, //'hyperbolic',
+ false, //'diamond',
+
+ false, //'eyefish',
+ false, //'bubble',
+ false, //'cylinder',
+ false, //'noise',
+ false, //'blur',
+ false, //'gaussian_blur',
+ false, //'zblur',
+ false, //'blur3D',
+
+ false, //'pre_blur',
+ false, //'pre_zscale',
+ false, //'pre_ztranslate',
+ false, //'pre_rotate_x',
+ false, //'pre_rotate_y',
+
+ false, //'zscale',
+ false, //'ztranslate',
+ false, //'zcone',
+
+ false, //'post_rotate_x',
+ false, //'post_rotate_y'
+
+ false, //'post_mirror_x',
+ false, //'post_mirror_y',
+ false, //'post_mirror_z',
+
+ false, //'hemisphere',
+ false, //'cross',
+ false, //'pyramid'
+ false // polar2
+ );
+var
+ varl : TVariationLoader;
+begin
+
+ if (index >= NRLOCVAR) then begin
+ supports3D := TVariationLoader(VariationList.Items[index - NRLOCVAR]).supports3D;
+ supportsDC := TVariationLoader(VariationList.Items[index - NRLOCVAR]).supportsDC;
+ end else begin
+ supports3D := supports3D_arr[index];
+ supportsDC := supportsDC_arr[index];
+ end;
+end;
+
+
+procedure DestroyXFormMan;
+var i: integer;
+begin
+ VariableNames.Free;
+
+ // The registered variation loaders are owned here, so we must free them.
+ for i := 0 to VariationList.Count-1 do
+ TVariationLoader(VariationList[i]).Free;
+ VariationList.Free;
+
+ Finalize(Variable2VariationIndex);
+ Finalize(FNToVNList);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function NrVar: integer;
+begin
+ Result := NRLOCVAR + VariationList.Count;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+function GetVariationIndexFromVariableNameIndex(const Index: integer): integer;
+begin
+ if (Index < 0) or (Index > High(Variable2VariationIndex)) then
+ Result := -1
+ else
+ Result := Variable2VariationIndex[Index];
+end;
+
+function Varnames(const index: integer): String;
+const
+ cvarnames: array[0..NRLOCVAR-1] of string = (
+ 'linear',
+ 'flatten',
+ 'pre_blur3D',
+ 'spherical',
+ 'swirl',
+ 'horseshoe',
+ 'polar',
+// 'handkerchief',
+// 'heart',
+ 'disc',
+ 'spiral',
+ 'hyperbolic',
+ 'diamond',
+// 'ex',
+// 'julia',
+// 'bent',
+// 'waves',
+// 'fisheye',
+// 'popcorn',
+// 'exponential',
+// 'power',
+// 'cosine',
+// 'rings',
+// 'fan',
+ 'eyefish',
+ 'bubble',
+ 'cylinder',
+ 'noise',
+ 'blur',
+ 'gaussian_blur',
+ 'zblur',
+ 'blur3D',
+
+ 'pre_blur',
+ 'pre_zscale',
+ 'pre_ztranslate',
+ 'pre_rotate_x',
+ 'pre_rotate_y',
+
+ 'zscale',
+ 'ztranslate',
+ 'zcone',
+
+ 'post_rotate_x',
+ 'post_rotate_y',
+
+ 'post_mirror_x',
+ 'post_mirror_y',
+ 'post_mirror_z',
+
+ 'hemisphere',
+ 'cross',
+ 'pyramid',
+ 'polar2'
+ );
+begin
+ if Index < NRLOCVAR then
+ Result := cvarnames[Index]
+ else
+ Result := TVariationLoader(VariationList[Index - NRLOCVAR]).GetName;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function GetVariationIndex(const str: string): integer;
+var
+ i: integer;
+begin
+ i := NRVAR-1;
+ while (i >= 0) and (Varnames(i) <> str) do Dec(i);
+ Result := i;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure RegisterVariationFile(filename, name: string);
+begin
+ FNToVNCount := FNToVNCount + 1;
+ SetLength(FNToVNList, FNToVNCount);
+ FNToVNList[FNToVNCount - 1].FileName := filename;
+ FNToVNList[FNToVNCount - 1].VarName := name;
+end;
+
+function GetFileNameOfVariation(name: string): string;
+var i: integer;
+begin
+ for i := 0 to FNToVNCount - 1 do begin
+ if FNToVNList[i].VarName = name then begin
+ Result := FNToVNList[i].FileName;
+ Exit;
+ end;
+ end;
+ Result := '';
+end;
+
+procedure RegisterVariation(Variation: TVariationLoader; supports3D, supportsDC : boolean);
+var
+ i: integer;
+ prevNumVariables:integer;
+begin
+ OutputDebugString(PChar(Variation.GetName));
+
+ VariationList.Add(Variation);
+ Variation.Supports3D := supports3D;
+ Variation.SupportsDC := supportsDC;
+
+ prevNumVariables := GetNrVariableNames;
+ setLength(Variable2VariationIndex, prevNumVariables + Variation.GetNrVariables);
+ for i := 0 to Variation.GetNrVariables - 1 do begin
+ VariableNames.Add(Variation.GetVariableNameAt(i));
+ Variable2VariationIndex[prevNumVariables + i] := NrVar-1;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function GetNrRegisteredVariations: integer;
+begin
+ Result := VariationList.count;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function GetRegisteredVariation(const Index: integer): TVariationLoader;
+begin
+ Result := TVariationLoader(VariationList[Index]);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function GetNrVariableNames: integer;
+begin
+ Result := VariableNames.Count;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function GetVariableNameAt(const Index: integer): string;
+begin
+ Result := VariableNames[Index];
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ InitializeXFormMan;
+
+finalization
+ DestroyXFormMan;
+
+end.
diff --git a/Flame/ControlPoint.pas b/Flame/ControlPoint.pas
new file mode 100644
index 0000000..45f502e
--- /dev/null
+++ b/Flame/ControlPoint.pas
@@ -0,0 +1,3158 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit ControlPoint;
+
+interface
+
+//{$define VAR_STR}
+
+uses
+ Classes, Windows, Cmap, XForm, XFormMan, Binary,
+ SysUtils, math, ZLib, Bezier;
+
+const
+ SUB_BATCH_SIZE = 10000;
+ PROP_TABLE_SIZE = 1024;
+ PREFILTER_WHITE = (1 shl 26);
+ FILTER_CUTOFF = 1.8;
+ BRIGHT_ADJUST = 2.3;
+ //FUSE = 15; // AV: moved to Global since it became a variable
+
+type
+ TCoefsArray= array[0..2, 0..1] of double;
+ pCoefsArray= ^TCoefsArray;
+ TTriangle = record
+ x: array[0..2] of double;
+ y: array[0..2] of double;
+ end;
+ TTriangles = array[-1..NXFORMS] of TTriangle;
+ TSPoint = record
+ x: double;
+ y: double;
+ end;
+ TSRect = record
+ Left, Top, Right, Bottom: double;
+ end;
+ TMapPalette = record
+ Red: array[0..255] of byte;
+ Green: array[0..255] of byte;
+ Blue: array[0..255] of byte;
+ end;
+ TColorMaps = record
+ Identifier: string;
+ UGRFile: string;
+ end;
+ pPixArray = ^TPixArray;
+ TPixArray = array[0..1279, 0..1023, 0..3] of integer;
+ pPreviewPixArray = ^TPreviewPixArray;
+ TPreviewPixArray = array[0..159, 0..119, 0..3] of integer;
+ TFileType = (ftIfs, ftFla, ftXML);
+
+type //?
+ PLongintArray = ^TLongintArray;
+ TLongintArray = array[0..8192] of Longint;
+
+type
+ TVariation = (vLinear, vCustom, vRandom = 1000); // AV: fixed outdated values
+
+type
+ TPointsArray = array of TCPpoint;
+ TPointsXYArray = array of TXYpoint;
+
+ P2Cpoint = ^T2Cpoint;
+ T2CPointsArray = array of T2Cpoint;
+
+ TControlPoint = class
+ public
+ finalXform: TXForm;
+ finalXformEnabled: boolean;
+ useFinalXform: boolean;
+ soloXform: integer;
+ curvePoints: array [0..3] of BezierPoints;
+ curveWeights: array [0..3] of BezierWeights;
+
+ Transparency: boolean;
+
+ cameraPitch, cameraYaw, cameraPersp, cameraDOF: double;
+ cameraZpos, cameraRoll: double;
+ ProjectionFunc: procedure(pPoint: PCPPoint) of object;
+
+ xform: array[0..NXFORMS] of TXForm;
+
+ noLinearFix: boolean;
+ variation: TVariation;
+ cmap: TColorMap;
+ cmapindex: integer;
+ time: double;
+ Fbrightness: double; // 1.0 = normal
+ contrast: double; // 1.0 = normal
+ gamma: double;
+ Width: integer;
+ Height: integer;
+ spatial_oversample: integer;
+ name, nick, url: string;
+ center: array[0..1] of double; // camera center
+ vibrancy: double; // blend between color algs (0=old,1=new)
+ hue_rotation: double; // applies to cmap, 0-1
+ background: array[0..3] of Integer; // Changed to integers so no conversion needed - mt
+ zoom: double; // effects ppu and sample density
+ pixels_per_unit: double; // and scale
+ spatial_filter_radius: double; // variance of gaussian
+ sample_density: extended; // samples per pixel (not bucket)
+ (* in order to motion blur more accurately we compute the logs of the
+ sample density many times and average the results. we interplate
+ only this many times. *)
+ actual_density: extended; // for incomplete renders
+ nbatches: integer; // this much color resolution. but making it too high induces clipping
+ white_level: integer;
+ cmap_inter: integer; // if this is true, then color map interpolates one entry
+ // at a time with a bright edge
+ symmetry: integer;
+ pulse: array[0..1, 0..1] of double; // [i][0]=magnitute [i][1]=frequency */
+ wiggle: array[0..1, 0..1] of double; // frequency is /minute, assuming 30 frames/s */
+
+ estimator, estimator_min, estimator_curve: double; // density estimator.
+ jitters: integer;
+ gamma_threshold: double;
+ enable_de : boolean;
+ used_plugins : TStringList;
+
+// PropTable: array of TXForm;
+ FAngle: Double;
+ //FTwoColorDimensions: Boolean;
+
+ procedure FillUsedPlugins;
+
+ private
+ invalidXform: TXForm;
+
+ CameraMatrix: array[0..2, 0..2] of double;
+ DofCoef: double;
+ gauss_rnd: array [0..3] of double;
+ gauss_N: integer;
+
+ sinPitch, cosPitch, sinRoll, cosRoll,
+ sinYaw, cosYaw: double;
+
+ procedure ProjectNone(pPoint: PCPPoint);
+ procedure ProjectPitch(pPoint: PCPPoint);
+ procedure ProjectPitchYaw(pPoint: PCPPoint);
+ procedure ProjectPitchDOF(pPoint: PCPPoint);
+ procedure ProjectPitchYawDOF(pPoint: PCPPoint);
+ // AV: for rotation around Y-axis
+ procedure ProjectPitchRoll(pPoint: PCPPoint);
+ procedure ProjectPitchRollYaw(pPoint: PCPPoint);
+ procedure ProjectPitchRollYawDOF(pPoint: PCPPoint);
+
+ function getppux: double;
+ function getppuy: double;
+
+ function GetBrightness: double;
+ procedure SetBrightness(br: double);
+ function GetRelativeGammaThreshold: double;
+ procedure SetRelativeGammaThreshold(gtr: double);
+
+ public
+ xdata : string;
+
+ procedure SaveToStringlist(sl: TStringlist);
+ procedure SaveToFile(Filename: string);
+ procedure SaveToBinary(const handle: File);
+
+ procedure ParseString(aString: string);
+ procedure ParseStringList(sl: TStringlist);
+ procedure RandomCP(min: integer = 2; max: integer = NXFORMS; calc: boolean = true);
+ procedure RandomCP1;
+ procedure CalcBoundbox;
+ function BlowsUp(NrPoints: integer): boolean;
+
+ procedure SetVariation(vari: TVariation);
+ procedure Clear;
+
+ procedure InterpolateX(cp1, cp2: TControlPoint; Tm: double);
+ procedure InterpolateAll(cp1, cp2: TControlPoint; Tm: double; it: integer);
+
+ procedure IterateXY(NrPoints: integer; var Points: TPointsXYArray);
+ procedure IterateXYC(NrPoints: integer; var Points: TPointsArray);
+
+ procedure Prepare;
+
+ function Clone: TControlPoint;
+ procedure Copy(cp1: TControlPoint; KeepSizes: boolean = false; nt: byte = NXFORMS); // AV
+
+ function HasFinalXForm: boolean;
+
+ // CP-specific functions moved from unit Main
+ function NumXForms: integer;
+ function TrianglesFromCP(var Triangles: TTriangles): integer;
+ procedure GetFromTriangles(const Triangles: TTriangles; const t: integer);
+
+ procedure GetTriangle(var Triangle: TTriangle; const n: integer);
+ procedure GetPostTriangle(var Triangle: TTriangle; const n: integer);
+
+ procedure EqualizeWeights;
+ procedure NormalizeWeights;
+ procedure RandomizeWeights;
+ procedure ComputeWeights(Triangles: TTriangles; t: integer);
+ procedure NormalizeProbabilities; // AV
+ procedure CalculateWeights; // AV
+ procedure CalculateColorSpeed; // AV
+ procedure AdjustScale(w, h: integer);
+
+ constructor Create;
+ destructor Destroy; override;
+
+ procedure ZoomtoRect(R: TSRect);
+ procedure ZoomOuttoRect(R: TSRect);
+ procedure MoveRect(R: TSRect);
+ procedure ZoomIn(Factor: double);
+ procedure Rotate(Angle: double);
+
+ property ppux: double read getppux;
+ property ppuy: double read getppuy;
+
+ property brightness: double
+ read GetBrightness
+ write SetBrightness;
+ property gammaThreshRelative: double
+ read GetRelativeGammaThreshold
+ write SetRelativeGammaThreshold;
+ end;
+
+function add_symmetry_to_control_point(var cp: TControlPoint; sym: integer): integer;
+procedure tile_control_point(var cp: TControlPoint; sym: integer);
+function CalcUPRMagn(const cp: TControlPoint): double;
+procedure FillVarDisturb;
+function CalcBinaryFlameSize(cp: TControlPoint): integer;
+
+implementation
+
+uses global;
+
+var
+ var_distrib: array of integer;
+ mixed_var_distrib: array of integer;
+
+{ TControlPoint }
+
+function sign(n: double): double;
+begin
+ if n < 0 then Result := -1
+ else if n > 0 then Result := 1
+ else Result := 0;
+end;
+
+procedure TControlPoint.FillUsedPlugins;
+var
+ i, j, k, f : integer;
+ v : double;
+ s : String;
+begin
+ used_plugins.Clear;
+
+ f := -1;
+ if self.finalXformEnabled then f := 0;
+
+ for i := 0 to Min(NumXForms+f, NXFORMS) do
+ with xform[i] do begin
+ for j := 0 to NRVAR - 1 do begin
+ v := self.xform[i].GetVariation(j);
+ if (v <> 0) and // uses variation
+ (used_plugins.IndexOf(Varnames(j)) < 0) // not listed yet
+ then begin
+ used_plugins.Add(Varnames(j));
+ s := s + Varnames(j) + ' on TX #' + IntToStr(i + 1) + #13#10;
+ end;
+ end;
+ end;
+
+ // Faulty...
+ (*
+ for i := 0 to NumXforms-1 do begin
+ for j := NumBuiltinVars to xform[i].NumVariations-1 do begin
+ v := self.xform[i].GetVariation(j);
+ if (v = 0) then continue;
+ s := Varnames(j);
+ k := used_plugins.IndexOf(s);
+ if (k < 0) or (k >= used_plugins.Count) then
+ used_plugins.Add(s);
+ end;
+ end;
+ if finalXformEnabled then begin
+ for j := NumBuiltinVars to self.finalXform.NumVariations-1 do begin
+ v := self.finalXform.GetVariation(j);
+ s := Varnames(j);
+ if (v = 0) then continue;
+ k := used_plugins.IndexOf(s);
+ if (k < 0) or (k >= used_plugins.Count) then
+ used_plugins.Add(s);
+ end;
+ end;
+ *)
+end;
+
+constructor TControlPoint.Create;
+var
+ i: Integer;
+begin
+ for i := 0 to NXFORMS do begin
+ xform[i] := TXForm.Create;
+ end;
+ invalidXform := TXForm.Create;
+ soloXform := -1;
+
+ pulse[0][0] := 0;
+ pulse[0][1] := 60;
+ pulse[1][0] := 0;
+ pulse[1][1] := 60;
+
+ wiggle[0][0] := 0;
+ wiggle[0][1] := 60;
+ wiggle[1][0] := 0;
+ wiggle[1][1] := 60;
+
+ background[0] := 0;
+ background[1] := 0;
+ background[2] := 0;
+
+ for i := 0 to 3 do
+ begin
+ curvePoints[i][0].x := 0.00; curvePoints[i][0].y := 0.00; curveWeights[i][0] := 1;
+ curvePoints[i][1].x := 0.00; curvePoints[i][1].y := 0.00; curveWeights[i][1] := 1;
+ curvePoints[i][2].x := 1.00; curvePoints[i][2].y := 1.00; curveWeights[i][2] := 1;
+ curvePoints[i][3].x := 1.00; curvePoints[i][3].y := 1.00; curveWeights[i][3] := 1;
+ end;
+
+ center[0] := 0;
+ center[1] := 0;
+
+ pixels_per_unit := 50;
+
+ width := 100;
+ Height := 100;
+
+ spatial_oversample := 1;
+ spatial_filter_radius := 0.5;
+
+ FAngle := 0;
+ gamma := 1;
+ vibrancy := 1;
+ contrast := 1;
+ Fbrightness := 1;
+ hue_rotation := 1; // AV
+
+ sample_density := 50;
+ zoom := 0;
+ nbatches := 1;
+
+ white_level := 200;
+
+ estimator := 9.0;
+ estimator_min := 0.0;
+ estimator_curve := 0.4;
+ enable_de := false;
+ jitters := 1;
+ gamma_threshold := 0.01;
+
+ //FTwoColorDimensions := False;
+
+ finalXformEnabled := false;
+ Transparency := false;
+
+ cameraPitch := 0;
+ cameraYaw := 0;
+ cameraRoll := 0;
+ cameraPersp := 0;
+ cameraZpos := 0;
+ cameraDOF := 0;
+
+ used_plugins := TStringList.Create;
+ xdata := '';
+end;
+
+destructor TControlPoint.Destroy;
+var
+ i: Integer;
+begin
+ for i := 0 to NXFORMS do
+ xform[i].Free;
+ invalidXform.Free;
+
+ used_plugins.Free; // <<< -X- commenting out = hack - fixme!
+ // AV: uncommented to save user's PC memory from leaking - fixme!
+ inherited;
+end;
+
+procedure TControlPoint.Prepare;
+var
+ i, n: Integer;
+ propsum: double;
+ LoopValue: double;
+ j: integer;
+ TotValue: double;
+
+ k: integer;
+ tp: array[0..NXFORMS] of double;
+begin
+// SetLength(PropTable, PROP_TABLE_SIZE);
+
+ //totValue := 0;
+ n := NumXforms;
+ assert(n > 0);
+
+ finalXform := xform[n];
+ finalXform.Prepare;
+ useFinalXform := FinalXformEnabled and HasFinalXform;
+ for i := 0 to n - 1 do begin
+ xform[i].Prepare;
+ //totValue := totValue + xform[i].density;
+ end;
+ invalidXform.PrepareInvalidXForm;
+
+ if soloXform >= 0 then begin
+ for i := 0 to n - 1 do begin
+ xform[i].transOpacity := 0;
+ end;
+ xform[soloXform].transOpacity := 1;
+ end;
+
+ for k := 0 to n - 1 do begin
+ totValue := 0;
+ SetLength(xform[k].PropTable, PROP_TABLE_SIZE);
+
+ for i := 0 to n - 1 do begin
+ tp[i] := xform[i].density * xform[k].modWeights[i];
+ totValue := totValue + tp[i];
+ end;
+
+ if totValue > 0 then begin
+ LoopValue := 0;
+ for i := 0 to PROP_TABLE_SIZE-1 do begin
+ propsum := 0;
+ j := -1;
+ repeat
+ inc(j);
+ propsum := propsum + tp[j];//xform[j].density;
+ until (propsum > LoopValue) or (j = n - 1);
+
+ //assert(tp[j]<>0);
+
+ xform[k].PropTable[i] := xform[j];
+ LoopValue := LoopValue + TotValue / PROP_TABLE_SIZE;
+ end;
+ end
+ else begin
+ for i := 0 to PROP_TABLE_SIZE-1 do
+ xform[k].PropTable[i] := invalidXform;
+ end;
+ end;
+
+ (*
+ CameraMatrix[0, 0] := cos(-CameraYaw);
+ CameraMatrix[1, 0] := -sin(-CameraYaw);
+ CameraMatrix[2, 0] := 0;
+ CameraMatrix[0, 1] := cos(CameraPitch) * sin(-CameraYaw);
+ CameraMatrix[1, 1] := cos(CameraPitch) * cos(-CameraYaw);
+ CameraMatrix[2, 1] := -sin(CameraPitch);
+ CameraMatrix[0, 2] := sin(CameraPitch) * sin(-CameraYaw);
+ CameraMatrix[1, 2] := sin(CameraPitch) * cos(-CameraYaw);
+ CameraMatrix[2, 2] := cos(CameraPitch);
+ *)
+ // AV: added 3D camera precalc
+ SinCos(cameraPitch, sinPitch, cosPitch);
+ SinCos(cameraRoll, sinRoll, cosRoll);
+ SinCos(-cameraYaw, sinYaw, cosYaw);
+ // AV: recalculate the matrix in order to support Y-rotation
+ CameraMatrix[0, 0] := cosRoll * cosYaw;
+ CameraMatrix[1, 0] := -cosRoll * sinYaw;
+ CameraMatrix[2, 0] := sinRoll;
+ CameraMatrix[0, 1] := sinPitch * sinRoll * cosYaw + cosPitch * sinYaw;
+ CameraMatrix[1, 1] := -sinPitch * sinRoll * sinYaw + cosPitch * cosYaw;
+ CameraMatrix[2, 1] := -sinPitch * cosRoll;
+ CameraMatrix[0, 2] := -cosPitch * sinRoll * cosYaw + sinPitch * sinYaw;
+ CameraMatrix[1, 2] := cosPitch * sinRoll * sinYaw + sinPitch * cosYaw;
+ CameraMatrix[2, 2] := cosPitch * cosRoll;
+ DofCoef := 0.1 * CameraDOF;
+ gauss_rnd[0] := random;
+ gauss_rnd[1] := random;
+ gauss_rnd[2] := random;
+ gauss_rnd[3] := random;
+ gauss_N := 0;
+
+ if (CameraDOF <> 0) then begin
+ if (CameraRoll = 0) then
+ begin
+ if (CameraYaw <> 0) then
+ ProjectionFunc := ProjectPitchYawDOF
+ else
+ ProjectionFunc := ProjectPitchDOF;
+ end else // Roll and DOF
+ ProjectionFunc := ProjectPitchRollYawDOF;
+ end
+ else if (CameraPitch <> 0) or (CameraRoll <> 0) or (CameraYaw <> 0) then begin
+ if (CameraRoll <> 0) then
+ ProjectionFunc := ProjectPitchRollYaw
+ else if (CameraYaw <> 0) then // Roll = 0
+ ProjectionFunc := ProjectPitchYaw
+ else // Roll = Yaw = 0
+ ProjectionFunc := ProjectPitch;
+ end
+ else ProjectionFunc := ProjectNone;
+end;
+
+procedure TControlPoint.IterateXY(NrPoints: integer; var Points: TPointsXYArray);
+var
+ i: Integer;
+ px, py: double;
+ pPoint: PXYPoint;
+
+ xf: TXform;
+begin
+ px := 2 * random - 1;
+ py := 2 * random - 1;
+
+ try
+ xf := xform[0]; //random(NumXForms)];
+ for i := 0 to FUSE do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPointXY(px,py);
+ end;
+
+ pPoint := @Points[0];
+
+ if UseFinalXform then
+ for i := 0 to NrPoints - 1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPointXY(px,py);
+ if (xf.transOpacity = 0) or
+ ((xf.transOpacity < 1) and (random > xf.transOpacity)) then
+ pPoint^.x := 1e300 // MaxDouble // hack
+ else begin
+ pPoint^.X := px;
+ pPoint^.Y := py;
+ end;
+ finalXform.NextPointXY(pPoint^.X, pPoint^.y);
+ Inc(pPoint);
+ end
+ else
+ for i := 0 to NrPoints - 1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPointXY(px,py);
+ if (xf.transOpacity = 0) or // AV
+ ((xf.transOpacity < 1) and (random > xf.transOpacity)) then // AV
+ pPoint^.x := 1e300 // MaxDouble // hack
+ else begin
+ pPoint.X := px;
+ pPoint.Y := py;
+ end;
+ Inc(pPoint);
+ end;
+ except
+ on EMathError do begin
+ exit;
+ end;
+ end;
+end;
+
+procedure TControlPoint.IterateXYC(NrPoints: integer; var Points: TPointsArray);
+var
+ i: Integer;
+ p: TCPPoint;
+ pPoint: PCPPoint;
+
+ xf: TXform;
+begin
+ p.x := 2 * random - 1;
+ p.y := 2 * random - 1;
+ p.z := 0; // AV: fixed - someone forgot to initialize this variable
+ p.c := random;
+
+ try
+ xf := xform[0]; //random(NumXForms)];
+ for i := 0 to FUSE do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+ end;
+
+ pPoint := @Points[0];
+
+ if UseFinalXform then
+ for i := 0 to NrPoints - 1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+
+ if (xf.transOpacity = 0) or // AV: moved here from rendering unit
+ ((xf.transOpacity < 1) and (random > xf.transOpacity)) then
+ pPoint^.x := 1e300 // MaxDouble // hack
+ else
+ begin
+ finalXform.NextPointTo(p, pPoint^);
+ ProjectionFunc(pPoint);
+ end;
+ Inc(pPoint);
+ end
+ else
+ for i := 0 to NrPoints - 1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+
+ if (xf.transOpacity = 0) or // AV: moved here from rendering unit
+ ((xf.transOpacity < 1) and (random > xf.transOpacity)) then
+ pPoint^.x := 1e300 // MaxDouble // hack
+ else
+ begin
+ pPoint^ := p;
+ ProjectionFunc(pPoint);
+ end;
+ Inc(pPoint);
+ end;
+ except
+ on EMathError do begin
+ exit;
+ end;
+ on EInvalidPointer do exit; // AV
+ end;
+end;
+
+procedure TControlPoint.ProjectNone(pPoint: PCPPoint);
+var
+ zr: double;
+begin
+ zr := 1 - cameraPersp * (pPoint^.z - CameraZpos);
+
+ pPoint^.x := pPoint^.x / zr;
+ pPoint^.y := pPoint^.y / zr;
+ //pPoint^.z := pPoint^.z - CameraZpos; // AV: ?
+end;
+
+procedure TControlPoint.ProjectPitch(pPoint: PCPPoint);
+var
+ y, z, zr: double;
+begin
+ z := pPoint^.z - CameraZpos;
+ y := CameraMatrix[1,1] * pPoint^.y - sinPitch * z;
+ zr := 1 - cameraPersp *
+ (CameraMatrix[1,2] * pPoint^.y + cosPitch * z);
+
+ pPoint^.x := pPoint^.x / zr;
+ pPoint^.y := y / zr;
+ //pPoint^.z := pPoint^.z - CameraZpos;
+end;
+
+procedure TControlPoint.ProjectPitchYaw(pPoint: PCPPoint);
+var
+ x, y, z, zr: double;
+begin
+ z := pPoint^.z - CameraZpos;
+ x := cosYaw * pPoint^.x - sinYaw * pPoint^.y;
+ y := CameraMatrix[0,1] * pPoint^.x + CameraMatrix[1,1] * pPoint^.y - sinPitch * z;
+ zr := 1 - cameraPersp *
+ (CameraMatrix[0,2]* pPoint^.x + CameraMatrix[1,2]*pPoint^.y + cosPitch * z);
+
+ pPoint^.x := x / zr;
+ pPoint^.y := y / zr;
+ //pPoint^.z := pPoint^.z - CameraZpos;
+end;
+
+procedure TControlPoint.ProjectPitchDOF(pPoint: PCPPoint);
+var
+ x, y, z, zr, dr: double;
+ dsin, dcos: double;
+ t: double;
+begin
+ z := pPoint^.z - CameraZpos;
+ y := CameraMatrix[1,1] * pPoint^.y - sinPitch * z;
+ z := CameraMatrix[1,2] * pPoint^.y + cosPitch * z;
+ zr := 1 - cameraPersp * z;
+
+//{$define GAUSSIAN_DOF}
+{$ifdef GAUSSIAN_DOF}
+ asm
+ fld qword ptr [eax + gauss_rnd]
+ fadd qword ptr [eax + gauss_rnd+8]
+ fadd qword ptr [eax + gauss_rnd+16]
+ fadd qword ptr [eax + gauss_rnd+24]
+ fld1
+ fadd st, st
+ fsubp st(1),st
+ fmul qword ptr [eax + dofCoef]
+ fmul qword ptr [z]
+ fstp qword ptr [dr]
+ call AsmRandExt
+ mov edx, [eax + gauss_N]
+ fst qword ptr [eax + gauss_rnd + edx*8]
+ inc edx
+ and edx,$03
+ mov [eax + gauss_N], edx
+ fadd st, st
+ fldpi
+ fmulp
+ fsincos
+ fstp qword ptr [dcos]
+ fstp qword ptr [dsin]
+ end;
+{$else}
+ t := random * 2 * pi;
+ SinCos(t, dsin, dcos);
+ dr := random * dofCoef * z;
+{
+ asm
+ fld qword ptr [z]
+ fmul st, st
+ fmul qword ptr [eax + dofCoef]
+ fldpi
+ fadd st, st
+ call AsmRandExt
+ fmulp
+ fsincos
+ fstp qword ptr [dcos]
+ fstp qword ptr [dsin]
+ call AsmRandExt
+ fmulp
+ fstp qword ptr [dr]
+ end;
+}
+{$endif}
+
+ pPoint^.x := (pPoint^.x + dr*dcos) / zr;
+ pPoint^.y := (y + dr*dsin) / zr;
+ //pPoint^.z := pPoint^.z - CameraZpos;
+end;
+
+procedure TControlPoint.ProjectPitchYawDOF(pPoint: PCPPoint);
+var
+ x, y, z, zr, dr: double;
+ dsin, dcos: double;
+ t : double;
+begin
+ z := pPoint^.z - CameraZpos;
+ x := cosYaw * pPoint^.x - sinYaw * pPoint^.y;
+ y := CameraMatrix[0,1] * pPoint^.x + CameraMatrix[1,1] * pPoint^.y - sinPitch * z;
+ z := CameraMatrix[0,2] * pPoint^.x + CameraMatrix[1,2] * pPoint^.y + cosPitch * z;
+ zr := 1 - cameraPersp * z;
+
+{$ifdef GAUSSIAN_DOF}
+ asm
+ fld qword ptr [eax + gauss_rnd]
+ fadd qword ptr [eax + gauss_rnd+8]
+ fadd qword ptr [eax + gauss_rnd+16]
+ fadd qword ptr [eax + gauss_rnd+24]
+ fld1
+ fadd st, st
+ fsubp st(1),st
+ fmul qword ptr [eax + dofCoef]
+ fmul qword ptr [z]
+ fstp qword ptr [dr]
+ call AsmRandExt
+ mov edx, [eax + gauss_N]
+ fst qword ptr [eax + gauss_rnd + edx*8]
+ inc edx
+ and edx,$03
+ mov [eax + gauss_N], edx
+ fadd st, st
+ fldpi
+ fmulp
+ fsincos
+ fstp qword ptr [dcos]
+ fstp qword ptr [dsin]
+ end;
+{$else}
+ t := random * 2 * pi;
+ SinCos(t, dsin, dcos);
+ dr := random * dofCoef * z;
+{
+ asm
+ fld qword ptr [z]
+ fmul st, st
+ fmul qword ptr [eax + dofCoef]
+ fldpi
+ fadd st, st
+ call AsmRandExt
+ fmulp
+ fsincos
+ fstp qword ptr [dcos]
+ fstp qword ptr [dsin]
+ call AsmRandExt
+ fmulp
+ fstp qword ptr [dr]
+ end;
+}
+{$endif}
+
+ pPoint^.x := (x + dr*dcos) / zr;
+ pPoint^.y := (y + dr*dsin) / zr;
+ // pPoint^.z := pPoint^.z - CameraZpos;
+end;
+
+procedure TControlPoint.ProjectPitchRoll(pPoint: PCPPoint);
+var // AV: added Y-rotation
+ x, y, z, zr: double;
+begin
+ z := pPoint^.z - CameraZpos;
+ x := cosRoll * pPoint^.x + CameraMatrix[1,0] * pPoint^.y + CameraMatrix[1,0] * z;
+ y := cosPitch * pPoint^.y - sinPitch * z;
+ zr := 1 - cameraPersp *
+ (sinRoll * pPoint^.x + CameraMatrix[1,2] * pPoint^.y + CameraMatrix[2,2] * z);
+
+ pPoint^.x := x / zr;
+ pPoint^.y := y / zr;
+end;
+
+procedure TControlPoint.ProjectPitchRollYaw(pPoint: PCPPoint);
+var // AV: added Y-rotation
+ x, y, z, zr: double;
+begin
+ z := pPoint^.z - CameraZpos;
+ x := CameraMatrix[0,0] * pPoint^.x + CameraMatrix[1,0] * pPoint^.y + CameraMatrix[2,0] * z;
+ y := CameraMatrix[0,1] * pPoint^.x + CameraMatrix[1,1] * pPoint^.y + CameraMatrix[2,1] * z;
+ zr := 1 - cameraPersp *
+ (CameraMatrix[0,2]* pPoint^.x + CameraMatrix[1,2]*pPoint^.y + CameraMatrix[2,2] * z);
+
+ pPoint^.x := x / zr;
+ pPoint^.y := y / zr;
+end;
+
+procedure TControlPoint.ProjectPitchRollYawDOF(pPoint: PCPPoint);
+var // AV: added Y-rotation
+ x, y, z, zr, dr: double;
+ dsin, dcos: double;
+ t : double;
+begin
+ z := pPoint^.z - CameraZpos;
+ x := CameraMatrix[0,0] * pPoint^.x + CameraMatrix[1,0] * pPoint^.y + CameraMatrix[2,0] * z;
+ y := CameraMatrix[0,1] * pPoint^.x + CameraMatrix[1,1] * pPoint^.y + CameraMatrix[2,1] * z;
+ z := CameraMatrix[0,2]* pPoint^.x + CameraMatrix[1,2]*pPoint^.y + CameraMatrix[2,2] * z;
+ zr := 1 - cameraPersp * z;
+
+ t := random * 2 * pi;
+ SinCos(t, dsin, dcos);
+ dr := random * dofCoef * z;
+
+ pPoint^.x := (x + dr * dcos) / zr;
+ pPoint^.y := (y + dr * dsin) / zr;
+end;
+
+function TControlPoint.BlowsUp(NrPoints: integer): boolean;
+var
+ i, n: Integer;
+ px, py: double;
+ minx, maxx, miny, maxy: double;
+ Points: TPointsXYArray;
+ CurrentPoint: PXYPoint;
+
+ xf: TXForm;
+begin
+ Result := false;
+
+ n := min(SUB_BATCH_SIZE, NrPoints);
+ SetLength(Points, n);
+
+ px := 2 * random - 1;
+ py := 2 * random - 1;
+
+ Prepare;
+
+ try
+ xf := xform[random(NumXForms)];
+ for i := 0 to FUSE do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPointXY(px,py);
+ end;
+
+ CurrentPoint := @Points[0];
+ for i := 0 to n-1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPointXY(px,py);
+ CurrentPoint.X := px;
+ CurrentPoint.Y := py;
+ Inc(CurrentPoint);
+ // random CPs don't use finalXform...
+ end;
+ except
+ on EMathError do begin
+ Result := True;
+ Exit;
+ end;
+ end;
+
+ // It is possible that the transformation will grow very large but remain below the overflow line
+ minx := 1E10;
+ maxx := -1E10;
+ miny := 1E10;
+ maxy := -1E10;
+ for i := 0 to n-1 do begin
+ minx := min(minx, Points[i].x);
+ maxx := max(maxx, Points[i].x);
+ miny := min(miny, Points[i].y);
+ maxy := max(maxy, Points[i].y);
+ end;
+
+ if ((Maxx - MinX) > 1000) or ((Maxy - Miny) > 1000) then
+ Result := True;
+end;
+
+procedure TControlPoint.ParseString(aString: string);
+var
+ ParseValues: TStringList;
+ ParsePos: integer;
+ CurrentToken: string;
+ CurrentXForm: integer;
+ i: integer;
+ OldDecimalSperator: Char;
+ v: double;
+begin
+ ParseValues := TStringList.Create;
+ ParseValues.CommaText := AString;
+
+ OldDecimalSperator := FormatSettings.DecimalSeparator;
+ FormatSettings.DecimalSeparator := '.';
+
+ CurrentXForm := 0;
+
+ ParsePos := 0;
+ while (ParsePos < ParseValues.Count) do begin
+ CurrentToken := ParseValues[ParsePos];
+ if AnsiCompareText(CurrentToken, 'xform') = 0 then begin
+ Inc(ParsePos);
+ CurrentXForm := StrToInt(ParseValues[ParsePos]);
+ (*end else if AnsiCompareText(CurrentToken, 'plugins') = 0 then begin
+ used_plugins.Clear;
+ i := 0;
+ while true do begin
+ if (ParsePos + 1) >= ParseValues.Count then
+ break;
+
+ Inc(ParsePos);
+ used_plugins.Add(ParseValues[ParsePos]);
+ Inc(i);
+ end; *)
+ end else if AnsiCompareText(CurrentToken, 'finalxformenabled') = 0 then begin
+ Inc(ParsePos);
+ finalxformenabled := StrToInt(ParseValues[ParsePos]) <> 0;
+ end else if AnsiCompareText(CurrentToken, 'soloxform') = 0 then begin
+ Inc(ParsePos);
+ soloxform := StrToInt(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'time') = 0 then begin
+ Inc(ParsePos);
+ time := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'brightness') = 0 then begin
+ Inc(ParsePos);
+ brightness := StrToFloat(ParseValues[ParsePos]) / BRIGHT_ADJUST;
+ end else if AnsiCompareText(CurrentToken, 'zoom') = 0 then begin // mt
+ Inc(ParsePos); // mt
+ zoom := StrToFloat(ParseValues[ParsePos]); // mt
+ end else if AnsiCompareText(CurrentToken, 'angle') = 0 then begin
+ Inc(ParsePos);
+ FAngle := StrToFloat(ParseValues[ParsePos]);
+// 3d camera stuff
+ end else if AnsiCompareText(CurrentToken, 'cam_pitch') = 0 then begin
+ Inc(ParsePos);
+ cameraPitch := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'cam_yaw') = 0 then begin
+ Inc(ParsePos);
+ cameraYaw := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'cam_roll') = 0 then begin
+ Inc(ParsePos); // AV: add third angle
+ cameraRoll := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'cam_persp') = 0 then begin
+ Inc(ParsePos);
+ cameraPersp := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'cam_zpos') = 0 then begin
+ Inc(ParsePos);
+ cameraZpos := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'cam_dof') = 0 then begin
+ Inc(ParsePos);
+ cameraDOF := abs(StrToFloat(ParseValues[ParsePos]));
+// end 3d
+ end else if AnsiCompareText(CurrentToken, 'contrast') = 0 then begin
+ Inc(ParsePos);
+ contrast := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'gamma') = 0 then begin
+ Inc(ParsePos);
+ gamma := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'vibrancy') = 0 then begin
+ Inc(ParsePos);
+ vibrancy := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'gamma_threshold') = 0 then begin
+ Inc(ParsePos);
+ gamma_threshold := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'hue_rotation') = 0 then begin
+ Inc(ParsePos);
+ hue_rotation := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'zoom') = 0 then begin
+ Inc(ParsePos);
+ zoom := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'imagesize') = 0 then begin
+ Inc(ParsePos);
+ Width := StrToInt(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ Height := StrToInt(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'image_size') = 0 then begin
+ Inc(ParsePos);
+ Width := StrToInt(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ Height := StrToInt(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'center') = 0 then begin
+ Inc(ParsePos);
+ center[0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ center[1] := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'background') = 0 then begin
+ Inc(ParsePos);
+ // Trap conversion errors for older parameters
+ try
+ background[0] := StrToInt(ParseValues[ParsePos]);
+ except on EConvertError do
+ background[0] := 0;
+ end;
+ Inc(ParsePos);
+ try
+ background[1] := StrToInt(ParseValues[ParsePos]);
+ except on EConvertError do
+ background[1] := 0;
+ end;
+ Inc(ParsePos);
+ try
+ background[2] := StrToInt(ParseValues[ParsePos]);
+ except on EConvertError do
+ background[2] := 0;
+ end;
+ end else if AnsiCompareText(CurrentToken, 'curves') = 0 then begin
+ for i := 0 to 3 do
+ begin
+ Inc(ParsePos);curvePoints[i][0].x := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curvePoints[i][0].y := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curveWeights[i][0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curvePoints[i][1].x := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curvePoints[i][1].y := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curveWeights[i][1] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curvePoints[i][2].x := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curvePoints[i][2].y := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curveWeights[i][2] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curvePoints[i][3].x := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curvePoints[i][3].y := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);curveWeights[i][3] := StrToFloat(ParseValues[ParsePos]);
+ end;
+ end else if AnsiCompareText(CurrentToken, 'pulse') = 0 then begin
+ Inc(ParsePos);
+ pulse[0, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ pulse[0, 1] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ pulse[1, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ pulse[1, 1] := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'wiggle') = 0 then begin
+ Inc(ParsePos);
+ wiggle[0, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ wiggle[0, 1] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ wiggle[1, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ wiggle[1, 1] := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'pixels_per_unit') = 0 then begin
+ Inc(ParsePos);
+ pixels_per_unit := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'spatial_filter_radius') = 0 then begin
+ Inc(ParsePos);
+ spatial_filter_radius := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'spatial_oversample') = 0 then begin
+ Inc(ParsePos);
+ spatial_oversample := StrToInt(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'sample_density') = 0 then begin
+ Inc(ParsePos);
+ sample_density := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'nbatches') = 0 then begin
+ Inc(ParsePos);
+ nbatches := StrToInt(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'white_level') = 0 then begin
+ Inc(ParsePos);
+ white_level := StrToInt(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'cmap') = 0 then begin
+ Inc(ParsePos);
+ cmapindex := StrToInt(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'cmap_inter') = 0 then begin
+ Inc(ParsePos);
+ cmap_inter := StrToInt(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'palette') = 0 then begin
+// Inc(ParsePos);
+// cmapindex := StrToInt(ParseValues[ParsePos]);
+ OutputDebugString(Pchar('NYI import Palette'));
+ end else if AnsiCompareText(CurrentToken, 'density') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].Density := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'color') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].color := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'symmetry') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].symmetry := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'coefs') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].c[0, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].c[0, 1] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].c[1, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].c[1, 1] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].c[2, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].c[2, 1] := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'post') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].p[0, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].p[0, 1] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].p[1, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].p[1, 1] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].p[2, 0] := StrToFloat(ParseValues[ParsePos]);
+ Inc(ParsePos);
+ xform[CurrentXForm].p[2, 1] := StrToFloat(ParseValues[ParsePos]);
+ end else if AnsiCompareText(CurrentToken, 'postxswap') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].postXswap := (ParseValues[ParsePos] = '1');
+ end else if AnsiCompareText(CurrentToken, 'autozscale') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].autoZscale := (ParseValues[ParsePos] = '1');
+ end
+ ////////////////////
+ else if AnsiCompareText(CurrentToken, 'var_order') = 0 then begin
+ for i := 0 to NRVAR - 1 do
+ xform[CurrentXForm].ifs[i] := Varnames(i);
+
+ i := 0;
+ while true do begin
+ if (ParsePos + 1) >= ParseValues.Count then
+ break;
+ if CharInSet(ParseValues[ParsePos + 1][1], ['a'..'z', 'A'..'Z', '.']) then
+ break;
+
+ Inc(ParsePos);
+ xform[CurrentXForm].ifs[i] := Varnames(StrToInt(ParseValues[ParsePos]));
+ Inc(i);
+ end;
+ end
+ //////////////////////////
+ else if AnsiCompareText(CurrentToken, 'vars') = 0 then begin
+ for i := 0 to NRVAR - 1 do begin
+ xform[CurrentXForm].SetVariation(i, 0.0);
+ end;
+
+ i := 0;
+ while true do begin
+ if (ParsePos + 1) >= ParseValues.Count then
+ break;
+ if CharInSet(ParseValues[ParsePos + 1][1], ['a'..'z', 'A'..'Z']) then
+ break;
+
+ Inc(ParsePos);
+ xform[CurrentXForm].SetVariation(i, StrToFloat(ParseValues[ParsePos]));
+ Inc(i);
+ end;
+ end else if AnsiCompareText(CurrentToken, 'variables') = 0 then begin
+{
+ v := 0;
+ for i:= 0 to GetNrVariableNames-1 do begin
+ xform[CurrentXForm].SetVariable(GetVariableNameAt(i), v);
+ end;
+}
+ for i:= 0 to GetNrVariableNames-1 do begin
+ xform[CurrentXForm].ResetVariable(GetVariableNameAt(i));
+ end;
+
+ i := 0;
+ while true do begin
+ if (ParsePos + 1) >= ParseValues.Count then
+ break;
+ if CharInSet(ParseValues[ParsePos + 1][1], ['a'..'z', 'A'..'Z']) then
+ break;
+
+ Inc(ParsePos);
+ v := StrToFloat(ParseValues[ParsePos]);
+ xform[CurrentXForm].SetVariable(GetVariableNameAt(i), v);
+ Inc(i);
+ end;
+
+ end else if AnsiCompareText(CurrentToken, 'chaos') = 0 then begin
+ i := 0;
+ while true do begin
+ if (ParsePos + 1) >= ParseValues.Count then
+ break;
+ if CharInSet(ParseValues[ParsePos + 1][1], ['a'..'z', 'A'..'Z']) then
+ break;
+
+ Inc(ParsePos);
+ v := StrToFloat(ParseValues[ParsePos]);
+ xform[CurrentXForm].modWeights[i] := v;
+ Inc(i);
+ end;
+
+ end else if AnsiCompareText(CurrentToken, 'plotmode') = 0 then begin
+ Inc(ParsePos);
+ if((StrToInt(ParseValues[ParsePos]) = 1)) then
+ xform[CurrentXForm].transOpacity := 0;
+ end else if AnsiCompareText(CurrentToken, 'opacity') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].transOpacity := (StrToFloat(ParseValues[ParsePos]));
+ end else if AnsiCompareText(CurrentToken, 'var_color') = 0 then begin
+ Inc(ParsePos);
+ xform[CurrentXForm].pluginColor := (StrToFloat(ParseValues[ParsePos]));
+ end else begin
+ OutputDebugString(Pchar('Unknown Token: ' + CurrentToken));
+ end;
+
+ Inc(ParsePos);
+ end;
+ GetCmap(cmapindex, hue_rotation, Cmap);
+
+ ParseValues.Free;
+
+ FormatSettings.DecimalSeparator := OldDecimalSperator;
+end;
+
+
+procedure TControlPoint.SetVariation(vari: TVariation);
+var
+ i, j, v: integer;
+ rv: integer;
+ VarPossible: boolean;
+begin
+ FillVarDisturb;
+ VarPossible := false;
+ for j := 0 to NRVAR - 1 do begin
+ VarPossible := VarPossible or Variations[j];
+ end;
+
+ if VarPossible then begin
+ repeat
+ rv := var_distrib[random(Length(var_distrib))];
+ until Variations[rv];
+ end else begin
+ rv := 0;
+ end;
+
+ for i := 0 to NXFORMS - 1 do begin
+ for j := 0 to NRVAR - 1 do begin
+ xform[i].SetVariation(j, 0.0);
+ end;
+
+ if vari = vRandom then
+ begin
+ if rv < 0 then
+ begin
+ if VarPossible then begin
+ repeat
+ v := Mixed_var_distrib[random(Length(mixed_var_distrib))];
+ until Variations[v]; // Use only Variations set in options
+ end else begin
+ v := 0;
+ end;
+ xform[i].SetVariation(v, 1.0);
+ end
+ else
+ xform[i].SetVariation(rv, 1.0);
+ end
+ else
+ xform[i].SetVariation(integer(vari), 1);
+ end;
+end;
+
+procedure TControlPoint.RandomCP(min: integer = 2; max: integer = NXFORMS; calc: boolean = true);
+var
+ nrXforms: integer;
+ i, j: integer;
+ v, rv: integer;
+ VarPossible: boolean;
+begin
+//hue_rotation := random;
+ hue_rotation := 1;
+ cmapindex := RANDOMCMAP;
+ GetCmap(cmapindex, hue_rotation, cmap);
+ time := 0.0;
+
+//nrXforms := xform_distrib[random(13)];
+ nrXforms := random(Max - (Min - 1)) + Min;
+
+ FillVarDisturb;
+ VarPossible := false;
+ for j := 0 to NRVAR - 1 do begin
+ VarPossible := VarPossible or Variations[j];
+ end;
+
+ if VarPossible then begin
+ repeat
+ rv := var_distrib[random(Length(var_distrib))];
+ until Variations[rv];
+ end else begin
+ rv := 0;
+ end;
+
+ for i := 0 to NXFORMS - 1 do begin
+ xform[i].density := 0;
+ end;
+
+ for i := 0 to nrXforms - 1 do begin
+ xform[i].density := 1.0 / nrXforms;
+ xform[i].color := i / (nrXforms - 1);
+
+ xform[i].c[0][0] := 2 * random - 1;
+ xform[i].c[0][1] := 2 * random - 1;
+ xform[i].c[1][0] := 2 * random - 1;
+ xform[i].c[1][1] := 2 * random - 1;
+ xform[i].c[2][0] := 4 * random - 2;
+ xform[i].c[2][1] := 4 * random - 2;
+
+ for j := 0 to NRVAR - 1 do begin
+ xform[i].SetVariation(j, 0);
+ end;
+
+ {for j := 0 to NRVAR - 1 do begin
+ xform[i].SetVariation(j, 0);
+ end; } // AV: why do we do it twice?
+
+ if rv < 0 then begin
+ if VarPossible then begin
+ repeat
+ v := Mixed_var_distrib[random(Length(mixed_var_distrib))];
+ until Variations[v]; // use only variations set in options
+ end else begin
+ v := 0;
+ end;
+
+ xform[i].SetVariation(v, 1);
+ end else
+ xform[i].SetVariation(rv, 1);
+
+ end;
+ if calc then
+ CalcBoundbox;
+end;
+
+procedure TControlPoint.RandomCP1;
+var
+ i, j: Integer;
+begin
+ RandomCP;
+ for i := 0 to NXFORMS - 1 do begin
+ for j := 0 to NRVAR - 1 do begin
+ xform[i].SetVariation(j, 0);
+ end;
+ xform[i].SetVariation(0, 1);
+ end;
+
+ CalcBoundbox;
+end;
+
+procedure TControlPoint.CalcBoundbox;
+const
+ limit = 50; // AV
+var
+ Points: TPointsArray; // AV: fixed - was TPointsXYArray;
+ i, j: integer;
+ deltax, minx, maxx: double;
+ cntminx, cntmaxx: integer;
+ deltay, miny, maxy: double;
+ cntminy, cntmaxy: integer;
+ LimitOutSidePoints: integer;
+begin
+// RandSeed := 1234567;
+ try
+ SetLength(Points, SUB_BATCH_SIZE);
+ Prepare;
+ IterateXYC(SUB_BATCH_SIZE, points); // AV: fixed - was IterateXY
+
+ LimitOutSidePoints := Round(0.05 * SUB_BATCH_SIZE);
+ // who've been coding this nonsence?!
+ minx := limit; // 1e99;
+ maxx := -limit; // -1e99;
+ miny := limit; // 1e99;
+ maxy := -limit; // -1e99;
+ for i := 0 to SUB_BATCH_SIZE - 1 do begin
+ //if Points[i].x > 1e200 then continue;
+ // AV: rewrote the block to fix the crash
+ if InRange(Points[i].x, -limit, limit) then
+ begin
+ minx := min(minx, Points[i].x);
+ maxx := max(maxx, Points[i].x);
+ end
+ else
+ begin
+ minx := -limit;
+ maxx := limit;
+ end;
+ if InRange(Points[i].y, -limit, limit) then
+ begin
+ miny := min(miny, Points[i].y);
+ maxy := max(maxy, Points[i].y);
+ end
+ else
+ begin
+ miny := -limit;
+ maxy := limit;
+ end;
+ end;
+
+ deltax := (maxx - minx) * 0.25;
+ maxx := (maxx + minx) / 2;
+ minx := maxx;
+
+ deltay := (maxy - miny) * 0.25;
+ maxy := (maxy + miny) / 2;
+ miny := maxy;
+
+ for j := 0 to 10 do begin
+ cntminx := 0;
+ cntmaxx := 0;
+ cntminy := 0;
+ cntmaxy := 0;
+ for i := 0 to SUB_BATCH_SIZE - 1 do begin
+ // AV: rewrote the block to fix the crash
+ if InRange(Points[i].x, -limit, limit) then
+ begin
+ if (Points[i].x < minx) then Inc(cntminx);
+ if (Points[i].x > maxx) then Inc(cntmaxx);
+ end;
+ if InRange(Points[i].y, -limit, limit) then
+ begin
+ if (Points[i].y < miny) then Inc(cntminy);
+ if (Points[i].y > maxy) then Inc(cntmaxy);
+ end;
+ end;
+
+ if (cntMinx < LimitOutSidePoints) then begin
+ minx := minx + deltax;
+ end else begin
+ minx := minx - deltax;
+ end;
+
+ if (cntMaxx < LimitOutSidePoints) then begin
+ maxx := maxx - deltax;
+ end else begin
+ maxx := maxx + deltax;
+ end;
+
+ deltax := deltax / 2;
+
+ if (cntMiny < LimitOutSidePoints) then begin
+ miny := miny + deltay;
+ end else begin
+ miny := miny - deltay;
+ end;
+
+ if (cntMaxy < LimitOutSidePoints) then begin
+ maxy := maxy - deltay;
+ end else begin
+ maxy := maxy + deltay;
+ end;
+
+ deltay := deltay / 2;
+ end;
+
+ if (abs(maxx - minx) > 1000) or
+ (abs(maxy - miny) > 1000) then
+ raise EMathError.Create('Flame area too large');
+
+ center[0] := (minx + maxx) / 2;
+ center[1] := (miny + maxy) / 2;
+ if (abs(maxx - minx) > 0.001) and (abs(maxy - miny) > 0.001) then
+ pixels_per_unit := 0.65 * Min(Width / abs(maxx - minx),
+ Height / abs(maxy - miny))
+ else
+ pixels_per_unit := 10;
+ except on EMathError do
+ begin // default
+ center[0] := 0;
+ center[1] := 0;
+ pixels_per_unit := 10;
+ end;
+ end;
+end;
+
+function CalcUPRMagn(const cp: TControlPoint): double;
+const
+ limit = 50; // AV
+var
+ Points: TPointsXYArray;
+ i, j: integer;
+ deltax, minx, maxx: double;
+ cntminx, cntmaxx: integer;
+ deltay, miny, maxy: double;
+ cntminy, cntmaxy: integer;
+ LimitOutSidePoints: integer;
+ xLength, yLength: double;
+begin
+ try
+ SetLength(Points, SUB_BATCH_SIZE);
+ cp.iterateXY(SUB_BATCH_SIZE, Points);
+
+ LimitOutSidePoints := Round(0.05 * SUB_BATCH_SIZE);
+
+ minx := limit; // AV // 1E99;
+ maxx := -limit; // AV // -1E99;
+ miny := limit; // AV // 1E99;
+ maxy := -limit; // AV // -1E99;
+ { // AV: commented out
+ for i := 0 to SUB_BATCH_SIZE - 1 do begin
+ minx := min(minx, Points[i].x);
+ maxx := max(maxx, Points[i].x);
+ miny := min(miny, Points[i].y);
+ maxy := max(maxy, Points[i].y);
+ end;
+ }
+ for i := 0 to SUB_BATCH_SIZE - 1 do begin // AV
+ if InRange(Points[i].x, -limit, limit) then
+ begin
+ minx := min(minx, Points[i].x);
+ maxx := max(maxx, Points[i].x);
+ end
+ else
+ begin
+ minx := -limit;
+ maxx := limit;
+ end;
+ if InRange(Points[i].y, -limit, limit) then
+ begin
+ miny := min(miny, Points[i].y);
+ maxy := max(maxy, Points[i].y);
+ end
+ else
+ begin
+ miny := -limit;
+ maxy := limit;
+ end;
+ end;
+
+ deltax := (maxx - minx) * 0.25;
+ maxx := (maxx + minx) / 2;
+ minx := maxx;
+
+ deltay := (maxy - miny) * 0.25;
+ maxy := (maxy + miny) / 2;
+ miny := maxy;
+
+ for j := 0 to 10 do begin
+ cntminx := 0;
+ cntmaxx := 0;
+ cntminy := 0;
+ cntmaxy := 0;
+ { // AV: commented out
+ for i := 0 to SUB_BATCH_SIZE - 1 do begin
+ if (Points[i].x < minx) then Inc(cntminx);
+ if (Points[i].x > maxx) then Inc(cntmaxx);
+ if (Points[i].y < miny) then Inc(cntminy);
+ if (Points[i].y > maxy) then Inc(cntmaxy);
+ end;
+ }
+ for i := 0 to SUB_BATCH_SIZE - 1 do begin // AV
+ if InRange(Points[i].x, -limit, limit) then
+ begin
+ if (Points[i].x < minx) then Inc(cntminx);
+ if (Points[i].x > maxx) then Inc(cntmaxx);
+ end;
+ if InRange(Points[i].y, -limit, limit) then
+ begin
+ if (Points[i].y < miny) then Inc(cntminy);
+ if (Points[i].y > maxy) then Inc(cntmaxy);
+ end;
+ end;
+
+ if (cntMinx < LimitOutSidePoints) then begin
+ minx := minx + deltax;
+ end else begin
+ minx := minx - deltax;
+ end;
+
+ if (cntMaxx < LimitOutSidePoints) then begin
+ maxx := maxx - deltax;
+ end else begin
+ maxx := maxx + deltax;
+ end;
+
+ deltax := deltax / 2;
+
+ if (cntMiny < LimitOutSidePoints) then begin
+ miny := miny + deltay;
+ end else begin
+ miny := miny - deltay;
+ end;
+
+ if (cntMaxy < LimitOutSidePoints) then begin
+ maxy := maxy - deltay;
+ end else begin
+ maxy := maxy + deltay;
+ end;
+
+ deltay := deltay / 2;
+ end;
+
+ if ((maxx - minx) > 1000) or
+ ((maxy - miny) > 1000) then
+ raise EMathError.Create('Flame area too large');
+
+ cp.center[0] := (minx + maxx) / 2;
+ cp.center[1] := (miny + maxy) / 2;
+ if ((maxx - minx) > 0.001) and ((maxy - miny) > 0.001) then
+ cp.pixels_per_unit := 0.7 * Min(cp.width / (maxx - minx), cp.height / (maxy - miny))
+ else
+ cp.pixels_per_unit := 10;
+
+ // Calculate magn for UPRs
+ xLength := maxx - minx;
+ yLength := maxy - miny;
+ if xLength >= yLength then
+ begin
+ result := 1 / xLength * 2;
+ end
+ else
+ begin
+ result := 1 / yLength * 2;
+ end;
+
+ except on E: EMathError do
+ begin// default
+ cp.center[0] := 0;
+ cp.center[1] := 0;
+ cp.pixels_per_unit := 10;
+ raise Exception.Create('CalcUPRMagn: ' + e.Message);
+ end;
+ end;
+end;
+
+// AV: this one from mine is used only for scripting, the original method was left for mutants
+procedure TControlPoint.InterpolateAll(cp1, cp2: TControlPoint; Tm: double; it: integer);
+var
+ result: TControlPoint;
+ c0, c1, k: double;
+ i, j: integer;
+ numTX, numTX1, numTX2: word;
+ r, s, t: array[0..2] of double;
+ v1, v2: double;
+
+ function AngOpt(ang0, ang1: double): double;
+ var delta: double;
+ begin
+ delta := ang1 - ang0;
+ if (delta > pi) then Result := ang1 - 2 * pi
+ else if (delta < -pi)then Result := ang1 + 2 * pi
+ else Result := ang1;
+ end;
+
+begin
+ if (it > 3) or (it < 0) then Exit;
+ if (cp2.time - cp1.time) > 1E-6 then
+ begin
+ if (it < 2) then begin // 0 or 1: cosine interpolation
+ k := (cp2.time - tm) / (cp2.time - cp1.time);
+ c0 := (1 - cos(pi*k))* 0.5;
+ end
+ else // 2 or 3: linear interpolation
+ c0:=(cp2.time - tm) / (cp2.time - cp1.time);
+ c1 := 1 - c0;
+ end else begin
+ c0 := 1;
+ c1 := 0;
+ end;
+
+ Result := TControlPoint.Create;
+ Result.time := Tm;
+
+ if Odd(it) then // 1 or 3: hsv interpolation
+ for i := 0 to 255 do
+ begin
+ r[0] := cp1.cmap[i][0] / 255;
+ r[1] := cp1.cmap[i][1] / 255;
+ r[2] := cp1.cmap[i][2] / 255;
+ rgb2hsv(r, s);
+ r[0] := cp2.cmap[i][0] / 255;
+ r[1] := cp2.cmap[i][1] / 255;
+ r[2] := cp2.cmap[i][2] / 255;
+ rgb2hsv(r, t);
+ t[0] := c0 * s[0] + c1 * t[0];
+ t[1] := c0 * s[1] + c1 * t[1];
+ t[2] := c0 * s[2] + c1 * t[2];
+ hsv2rgb(t, r);
+ Result.cmap[i][0] := Round(255 * r[0]);
+ Result.cmap[i][1] := Round(255 * r[1]);
+ Result.cmap[i][2] := Round(255 * r[2]);
+ end
+ else // 0 or 2: rgb interpolation
+ for i := 0 to 255 do
+ begin
+ Result.cmap[i][0] := Round(c0 * cp1.cmap[i][0] + c1 * cp2.cmap[i][0]);
+ Result.cmap[i][1] := Round(c0 * cp1.cmap[i][1] + c1 * cp2.cmap[i][1]);
+ Result.cmap[i][2] := Round(c0 * cp1.cmap[i][2] + c1 * cp2.cmap[i][2]);
+ end;
+
+ Result.cmapindex := -1;
+
+ Result.Fbrightness := c0 * cp1.Fbrightness + c1 * cp2.Fbrightness;
+ Result.contrast := c0 * cp1.contrast + c1 * cp2.contrast;
+ Result.gamma := c0 * cp1.gamma + c1 * cp2.gamma;
+ Result.vibrancy := c0 * cp1.vibrancy + c1 * cp2.vibrancy;
+ Result.gamma_threshold := c0 * cp1.gamma_threshold + c1 * cp2.gamma_threshold;
+ Result.width := cp1.width;
+ Result.height := cp1.height;
+ Result.spatial_oversample := Round(c0 * cp1.spatial_oversample + c1 * cp2.spatial_oversample);
+ Result.center[0] := c0 * cp1.center[0] + c1 * cp2.center[0];
+ Result.center[1] := c0 * cp1.center[1] + c1 * cp2.center[1];
+ Result.FAngle := c0 * cp1.FAngle + c1 * AngOpt(cp1.FAngle, cp2.FAngle);
+ Result.pixels_per_unit := c0 * cp1.pixels_per_unit + c1 * cp2.pixels_per_unit;
+ Result.background[0] := Round(c0 * cp1.background[0] + c1 * cp2.background[0]);
+ Result.background[1] := Round(c0 * cp1.background[1] + c1 * cp2.background[1]);
+ Result.background[2] := Round(c0 * cp1.background[2] + c1 * cp2.background[2]);
+ Result.spatial_filter_radius := c0 * cp1.spatial_filter_radius + c1 * cp2.spatial_filter_radius;
+ Result.sample_density := c0 * cp1.sample_density + c1 * cp2.sample_density;
+ Result.zoom := c0 * cp1.zoom + c1 * cp2.zoom;
+ Result.nbatches := Round(c0 * cp1.nbatches + c1 * cp2.nbatches);
+ Result.white_level := Round(c0 * cp1.white_level + c1 * cp2.white_level);
+ Result.finalXformEnabled := cp1.finalXformEnabled or cp2.finalXformEnabled;
+
+ { AV: global 3D-parameters}
+ Result.cameraPitch := c0 * cp1.cameraPitch + c1 * AngOpt(cp1.cameraPitch, cp2.cameraPitch);
+ Result.cameraYaw := c0 * cp1.cameraYaw + c1 * AngOpt(cp1.cameraYaw, cp2.cameraYaw);
+ Result.cameraRoll := c0 * cp1.cameraRoll + c1 * AngOpt(cp1.cameraRoll, cp2.cameraRoll);
+ Result.cameraPersp := c0 * cp1.cameraPersp + c1 * cp2.cameraPersp;
+ Result.cameraZpos := c0 * cp1.cameraZpos + c1 * cp2.cameraZpos;
+ Result.cameraDOF := c0 * cp1.cameraDOF + c1 * cp2.cameraDOF;
+
+ for i := 0 to 3 do begin
+ // Result.pulse[i div 2][i mod 2] := c0 * cp1.pulse[i div 2][i mod 2] + c1 * cp2.pulse[i div 2][i mod 2];
+ // Result.wiggle[i div 2][i mod 2] := c0 * cp1.wiggle[i div 2][i mod 2] + c1 * cp2.wiggle[i div 2][i mod 2];
+ Result.curvePoints[i][0].x := c0 * cp1.curvePoints[i][0].x + c1 * cp2.curvePoints[i][0].x;
+ Result.curvePoints[i][0].y := c0 * cp1.curvePoints[i][0].y + c1 * cp2.curvePoints[i][0].y;
+ Result.curveWeights[i][0] := c0 * cp1.curveWeights[i][0] + c1 * cp2.curveWeights[i][0];
+ Result.curvePoints[i][1].x := c0 * cp1.curvePoints[i][1].x + c1 * cp2.curvePoints[i][1].x;
+ Result.curvePoints[i][1].y := c0 * cp1.curvePoints[i][1].y + c1 * cp2.curvePoints[i][1].y;
+ Result.curveWeights[i][1] := c0 * cp1.curveWeights[i][1] + c1 * cp2.curveWeights[i][1];
+ Result.curvePoints[i][2].x := c0 * cp1.curvePoints[i][2].x + c1 * cp2.curvePoints[i][2].x;
+ Result.curvePoints[i][2].y := c0 * cp1.curvePoints[i][2].y + c1 * cp2.curvePoints[i][2].y;
+ Result.curveWeights[i][2] := c0 * cp1.curveWeights[i][2] + c1 * cp2.curveWeights[i][2];
+ Result.curvePoints[i][3].x := c0 * cp1.curvePoints[i][2].x + c1 * cp2.curvePoints[i][2].x;
+ Result.curvePoints[i][3].y := c0 * cp1.curvePoints[i][3].y + c1 * cp2.curvePoints[i][3].y;
+ Result.curveWeights[i][3] := c0 * cp1.curveWeights[i][3] + c1 * cp2.curveWeights[i][3];
+ end;
+
+ numTX1 := cp1.NumXForms;
+ numTX2 := cp2.NumXForms;
+ numTX := max(numTX1, numTX2); // actual xforms including final
+
+ if Result.finalXformEnabled then
+ begin
+
+ if cp1.finalXformEnabled then
+ begin
+ if numTX1 < numTX then
+ begin
+ cp1.xform[numTX].Assign(cp1.xform[numTX1]);
+ cp1.xform[numTX1].Clear;
+ end;
+ end
+ else
+ cp1.xform[numTX].symmetry := 1;
+
+ if cp2.finalXformEnabled then
+ begin
+ if numTX2 < numTX then
+ begin
+ cp2.xform[numTX].Assign(cp2.xform[numTX2]);
+ cp2.xform[numTX2].Clear;
+ end;
+ end
+ else
+ cp2.xform[numTX].symmetry := 1;
+
+ // final XForm
+ Result.xform[numTX].color := c0 * cp1.xform[numTX].color + c1 * cp2.xform[numTX].color;
+ Result.xform[numTX].symmetry := c0 * cp1.xform[numTX].symmetry + c1 * cp2.xform[numTX].symmetry;
+ Result.xform[numTX].pluginColor := c0 * cp1.xform[numTX].pluginColor + c1 * cp2.xform[numTX].pluginColor;
+ Result.xform[numTX].ifs.Assign(cp2.xform[numTX].ifs); // AV: target variation order
+ for j := 0 to NrVar-1 do
+ Result.xform[numTX].SetVariation(j, c0 * cp1.xform[numTX].GetVariation(j) + c1 * cp2.xform[numTX].GetVariation(j));
+ for j:= 0 to GetNrVariableNames-1 do begin
+ cp1.xform[numTX].GetVariable(GetVariableNameAt(j), v1);
+ cp2.xform[numTX].GetVariable(GetVariableNameAt(j), v2);
+ v1 := c0 * v1 + c1 * v2;
+ Result.xform[numTX].SetVariable(GetVariableNameAt(j), v1);
+ end;
+ for j := 0 to 2 do begin
+ Result.xform[numTX].c[j, 0] := c0 * cp1.xform[numTX].c[j, 0] + c1 * cp2.xform[numTX].c[j, 0];
+ Result.xform[numTX].c[j, 1] := c0 * cp1.xform[numTX].c[j, 1] + c1 * cp2.xform[numTX].c[j, 1];
+ Result.xform[numTX].p[j, 0] := c0 * cp1.xform[numTX].p[j, 0] + c1 * cp2.xform[numTX].p[j, 0];
+ Result.xform[numTX].p[j, 1] := c0 * cp1.xform[numTX].p[j, 1] + c1 * cp2.xform[numTX].p[j, 1];
+ end;
+ end else
+ Result.xform[numTX].symmetry := 1;
+
+ // regular xforms
+ for i := 0 to numTX-1 do begin
+ Result.xform[i].density := c0 * cp1.xform[i].density + c1 * cp2.xform[i].density;
+ Result.xform[i].color := c0 * cp1.xform[i].color + c1 * cp2.xform[i].color;
+ Result.xform[i].symmetry := c0 * cp1.xform[i].symmetry + c1 * cp2.xform[i].symmetry;
+ Result.xform[i].transOpacity := c0 * cp1.xform[i].transOpacity + c1 * cp2.xform[i].transOpacity;
+ Result.xform[i].pluginColor := c0 * cp1.xform[i].pluginColor + c1 * cp2.xform[i].pluginColor;
+ for j := 0 to numTX - 1 do
+ Result.xform[i].modWeights[j] := c0 * cp1.xform[i].modWeights[j] + c1 * cp2.xform[i].modWeights[j];
+
+ Result.xform[i].ifs.Assign(cp2.xform[i].ifs); // AV: target variation order
+ for j := 0 to NrVar-1 do
+ Result.xform[i].SetVariation(j, c0 * cp1.xform[i].GetVariation(j) + c1 * cp2.xform[i].GetVariation(j));
+ for j:= 0 to GetNrVariableNames-1 do begin
+ cp1.xform[i].GetVariable(GetVariableNameAt(j), v1);
+ cp2.xform[i].GetVariable(GetVariableNameAt(j), v2);
+ v1 := c0 * v1 + c1 * v2;
+ Result.xform[i].SetVariable(GetVariableNameAt(j), v1);
+ end;
+ // interpol matrices
+ for j := 0 to 2 do begin
+ Result.xform[i].c[j, 0] := c0 * cp1.xform[i].c[j, 0] + c1 * cp2.xform[i].c[j, 0];
+ Result.xform[i].c[j, 1] := c0 * cp1.xform[i].c[j, 1] + c1 * cp2.xform[i].c[j, 1];
+ Result.xform[i].p[j, 0] := c0 * cp1.xform[i].p[j, 0] + c1 * cp2.xform[i].p[j, 0];
+ Result.xform[i].p[j, 1] := c0 * cp1.xform[i].p[j, 1] + c1 * cp2.xform[i].p[j, 1];
+ end;
+ end;
+
+ if Result.NumXForms < numTX then
+ begin
+ Result.xform[Result.NumXForms].Assign(Result.xform[numTX]);
+ Result.xform[numTX].Clear;
+ end;
+
+ if numTX1 < numTX then
+ begin
+ cp1.xform[numTX1].Assign(cp1.xform[numTX]);
+ cp1.xform[numTX].Clear;
+ end;
+ if numTX2 < Result.NumXForms then
+ begin
+ cp2.xform[numTX2].Assign(cp2.xform[numTX]);
+ cp2.xform[numTX].Clear;
+ end;
+
+ Copy(Result, false, numTX);
+ cmap := Result.cmap;
+ result.free;
+end;
+
+procedure TControlPoint.InterpolateX(cp1, cp2: TControlPoint; Tm: double);
+var
+ result: TControlPoint;
+ c0, c1: double;
+ i, j: integer;
+ r, s, t: array[0..2] of double;
+ v1, v2: double;
+// totvar: double;
+ {z,rhtime: double;}
+
+ nXforms1, nXforms2: integer;
+begin
+ if (cp2.time - cp1.time) > 1E-6 then begin
+ c0 := (cp2.time - tm) / (cp2.time - cp1.time);
+ c1 := 1 - c0;
+ end else begin
+ c0 := 1;
+ c1 := 0;
+ end;
+
+ Result := TControlPoint.Create;
+ Result.time := Tm;
+
+ { // AV: since from now this is used only for mutants, we can skip it
+ if cp1.cmap_inter = 0 then
+ for i := 0 to 255 do begin
+ r[0] := cp1.cmap[i][0] / 255;
+ r[1] := cp1.cmap[i][1] / 255;
+ r[2] := cp1.cmap[i][2] / 255;
+ rgb2hsv(r, s);
+ r[0] := cp2.cmap[i][0] / 255;
+ r[1] := cp2.cmap[i][1] / 255;
+ r[2] := cp2.cmap[i][2] / 255;
+ rgb2hsv(r, t);
+ t[0] := c0 * s[0] + c1 * t[0];
+ t[1] := c0 * s[1] + c1 * t[1];
+ t[2] := c0 * s[2] + c1 * t[2];
+ hsv2rgb(t, r);
+ Result.cmap[i][0] := Round(255 * r[0]);
+ Result.cmap[i][1] := Round(255 * r[1]);
+ Result.cmap[i][2] := Round(255 * r[2]);
+ end;
+ }
+ Result.cmap := cp1.cmap; // AV
+ Result.cmapindex := -1;
+
+ Result.Fbrightness := c0 * cp1.Fbrightness + c1 * cp2.Fbrightness;
+ Result.contrast := c0 * cp1.contrast + c1 * cp2.contrast;
+ Result.gamma := c0 * cp1.gamma + c1 * cp2.gamma;
+ Result.vibrancy := c0 * cp1.vibrancy + c1 * cp2.vibrancy;
+ Result.gamma_threshold := c0 * cp1.gamma_threshold + c1 * cp2.gamma_threshold;
+ Result.width := cp1.width;
+ Result.height := cp1.height;
+ Result.spatial_oversample := Round(c0 * cp1.spatial_oversample + c1 * cp2.spatial_oversample);
+ Result.center[0] := c0 * cp1.center[0] + c1 * cp2.center[0];
+ Result.center[1] := c0 * cp1.center[1] + c1 * cp2.center[1];
+ Result.FAngle := c0 * cp1.FAngle + c1 * cp2.FAngle;
+ Result.pixels_per_unit := c0 * cp1.pixels_per_unit + c1 * cp2.pixels_per_unit;
+ { // AV: since from now this is used only for mutants, we can skip it
+ Result.background[0] := c0 * cp1.background[0] + c1 * cp2.background[0];
+ Result.background[1] := c0 * cp1.background[1] + c1 * cp2.background[1];
+ Result.background[2] := c0 * cp1.background[2] + c1 * cp2.background[2];
+ }
+ Result.spatial_filter_radius := c0 * cp1.spatial_filter_radius + c1 * cp2.spatial_filter_radius;
+ Result.sample_density := c0 * cp1.sample_density + c1 * cp2.sample_density;
+ Result.zoom := c0 * cp1.zoom + c1 * cp2.zoom;
+ Result.nbatches := Round(c0 * cp1.nbatches + c1 * cp2.nbatches);
+ {
+ Result.white_level := Round(c0 * cp1.white_level + c1 * cp2.white_level);
+ for i := 0 to 3 do begin
+ Result.pulse[i div 2][i mod 2] := c0 * cp1.pulse[i div 2][i mod 2] + c1 * cp2.pulse[i div 2][i mod 2];
+ Result.wiggle[i div 2][i mod 2] := c0 * cp1.wiggle[i div 2][i mod 2] + c1 * cp2.wiggle[i div 2][i mod 2];
+ end;
+ }
+ Result.cameraPitch := c0 * cp1.cameraPitch; // AV
+ Result.cameraYaw := c0 * cp1.cameraYaw; // AV
+ Result.cameraRoll := c0 * cp1.cameraRoll; // AV
+
+ // save finalxform from mut(il)ation ;)
+ nXforms1 := cp1.NumXForms;
+ if cp1.HasFinalXForm then
+ begin
+ if nXforms1 < NXFORMS then
+ begin
+ cp1.xform[NXFORMS].Assign(cp1.xform[nXforms1]);
+ cp1.xform[nXforms1].Clear;
+ end;
+ end
+ else begin
+ cp1.xform[NXFORMS].Clear;
+ cp1.xform[NXFORMS].symmetry := 1;
+ end;
+
+ nXforms2 := cp2.NumXForms;
+ if cp2.HasFinalXForm then
+ begin
+ if nXforms2 < NXFORMS then
+ begin
+ cp2.xform[NXFORMS].Assign(cp2.xform[nXforms2]);
+ cp2.xform[nXforms2].Clear;
+ end;
+ end
+ else begin
+ cp2.xform[NXFORMS].Clear;
+ cp2.xform[NXFORMS].symmetry := 1;
+ end;
+
+ for i := 0 to NXFORMS do
+ begin
+ Result.xform[i].density := c0 * cp1.xform[i].density + c1 * cp2.xform[i].density;
+ // AV: since we don't change final xforms, we can speed up the calculations
+ if Result.xform[i].density = 0.0 then break;
+ Result.xform[i].color := c0 * cp1.xform[i].color + c1 * cp2.xform[i].color;
+ Result.xform[i].symmetry := c0 * cp1.xform[i].symmetry + c1 * cp2.xform[i].symmetry;
+ Result.xform[i].transOpacity := c0 * cp1.xform[i].transOpacity + c1; // AV
+
+ for j := 0 to NrVar-1 do
+ Result.xform[i].SetVariation(j, c0 * cp1.xform[i].GetVariation(j) + c1 * cp2.xform[i].GetVariation(j));
+ for j:= 0 to GetNrVariableNames-1 do begin
+ cp1.xform[i].GetVariable(GetVariableNameAt(j), v1);
+ cp2.xform[i].GetVariable(GetVariableNameAt(j), v2);
+ v1 := c0 * v1 + c1 * v2;
+ Result.xform[i].SetVariable(GetVariableNameAt(j), v1);
+ end;
+ // interpol matrix
+ for j := 0 to 2 do begin
+ Result.xform[i].c[j, 0] := c0 * cp1.xform[i].c[j, 0] + c1 * cp2.xform[i].c[j, 0];
+ Result.xform[i].c[j, 1] := c0 * cp1.xform[i].c[j, 1] + c1 * cp2.xform[i].c[j, 1];
+ // AV
+ Result.xform[i].p[j, 0] := c0 * cp1.xform[i].p[j, 0] + c1 * cp2.xform[i].p[j, 0];
+ Result.xform[i].p[j, 1] := c0 * cp1.xform[i].p[j, 1] + c1 * cp2.xform[i].p[j, 1];
+ end;
+ end;
+
+ // finalxform was supposed to be mutate-able too, but somehow it's always
+ // getting confused by random-generated mutatns :-\
+ if Result.NumXForms < NXFORMS then
+ begin
+ Result.xform[Result.NumXForms].Assign(cp1.xform[NXFORMS]); //result.xform[NXFORMS]);
+ Result.xform[NXFORMS].Clear;
+ end;
+ Result.finalXformEnabled := cp1.finalXformEnabled;
+
+ // restore finalxforms in source CPs
+ if nXforms1 < NXFORMS then
+ begin
+ cp1.xform[nXforms1].Assign(cp1.xform[NXFORMS]);
+ cp1.xform[NXFORMS].Clear;
+ end;
+ if nXforms2 < NXFORMS then
+ begin
+ cp2.xform[nXforms2].Assign(cp2.xform[NXFORMS]);
+ cp2.xform[NXFORMS].Clear;
+ end;
+
+ Copy(Result, false, max(nxForms1, nxForms2)); // AV: added 2 parameters
+ cmap := Result.cmap;
+ result.free;
+end;
+
+procedure TControlPoint.SaveToFile(Filename: string);
+var
+ sl: TStringlist;
+begin
+ sl := TStringlist.Create;
+
+ SaveToStringlist(sl);
+
+ sl.SaveToFile(filename);
+ sl.Free;
+end;
+
+procedure TControlPoint.SaveToStringlist(sl: TStringlist);
+var
+ i, j, k: Integer;
+ s: string;
+ OldDecimalSperator: Char;
+ v: double;
+ str: string;
+ curves: string;
+begin
+ OldDecimalSperator := FormatSettings.DecimalSeparator;
+ FormatSettings.DecimalSeparator := '.';
+
+ sl.add(format('time %f', [time]));
+ if cmapindex >= 0 then
+ sl.add(format('cmap %d', [cmapindex]));
+ sl.add(format('zoom %g', [zoom])); // mt
+ sl.add(format('angle %g', [FAngle]));
+
+ sl.add(format('cam_pitch %g', [cameraPitch]));
+ sl.add(format('cam_yaw %g', [cameraYaw]));
+ sl.add(format('cam_roll %g', [cameraRoll])); // AV
+ sl.add(format('cam_persp %g', [cameraPersp]));
+ sl.add(format('cam_zpos %g', [cameraZpos]));
+ sl.add(format('cam_dof %g', [cameraDOF]));
+
+ for i := 0 to 3 do
+ begin
+ curves := curves + FloatToStr(curvePoints[i][0].x) + ' ';
+ curves := curves + FloatToStr(curvePoints[i][0].y) + ' ';
+ curves := curves + FloatToStr(curveWeights[i][0]) + ' ';
+
+ curves := curves + FloatToStr(curvePoints[i][1].x) + ' ';
+ curves := curves + FloatToStr(curvePoints[i][1].y) + ' ';
+ curves := curves + FloatToStr(curveWeights[i][1]) + ' ';
+
+ curves := curves + FloatToStr(curvePoints[i][2].x) + ' ';
+ curves := curves + FloatToStr(curvePoints[i][2].y) + ' ';
+ curves := curves + FloatToStr(curveWeights[i][2]) + ' ';
+
+ curves := curves + FloatToStr(curvePoints[i][3].x) + ' ';
+ curves := curves + FloatToStr(curvePoints[i][3].y) + ' ';
+ curves := curves + FloatToStr(curveWeights[i][3]) + ' ';
+ end;
+
+ curves := trim(curves);
+ sl.Add(Format('curves %s', [curves]));
+
+ sl.add(format('image_size %d %d center %g %g pixels_per_unit %f',
+ [Width, Height, center[0], center[1], pixels_per_unit]));
+ sl.add(format('spatial_oversample %d spatial_filter_radius %f',
+ [spatial_oversample, spatial_filter_radius]));
+ sl.add(format('sample_density %g', [sample_density]));
+// sl.add(format('nbatches %d white_level %d background %f %f %f', - changed to integers - mt
+ sl.add(format('nbatches %d white_level %d background %d %d %d',
+ [nbatches, white_level, background[0], background[1], background[2]]));
+ sl.add(format('brightness %f gamma %f contrast %f vibrancy %f gamma_threshold %f hue_rotation %f cmap_inter %d',
+ [Fbrightness * BRIGHT_ADJUST, gamma, contrast, vibrancy, gamma_threshold, hue_rotation, cmap_inter])); // AV: added contrast
+ sl.add(format('finalxformenabled %d', [ifthen(finalxformenabled, 1, 0)]));
+ sl.add(format('soloxform %d', [soloXform]));
+
+ (*str := '';
+ for i := 0 to used_plugins.Count-1 do begin
+ str := str + used_plugins[i];
+ if (i = used_plugins.Count-1) then break;
+ str := str + ' ';
+ end;
+ sl.Add(format('plugins %s', [str])); *)
+
+ for i := 0 to Min(NumXForms+1, NXFORMS) do
+ with xform[i] do begin
+ //if density = 0 then continue; - FinalXform has weight=0
+
+ sl.add(format('xform %d density %g color %g symmetry %g', [i, density, color, symmetry]));
+
+ /////// AV: try to write variation order
+ s := 'var_order';
+ for j := 0 to NRVAR - 1 do begin
+ s := format('%s %d', [s, GetVariationIndex(ifs[j])]);
+ end;
+ sl.add(s);
+ //////////////////////////
+
+ s := 'vars';
+ for j := 0 to NRVAR - 1 do begin
+ s := format('%s %g', [s, GetVariation(j)]);
+ end;
+ sl.add(s);
+ s := 'variables';
+ for j:= 0 to GetNrVariableNames-1 do begin
+{$ifndef VAR_STR}
+ GetVariable(GetVariableNameAt(j), v);
+ s := format('%s %g', [s, v]);
+{$else}
+ s := s + ' ' + GetVariableStr(GetVariableNameAt(j));
+{$endif}
+ end;
+ sl.add(s);
+ sl.Add(format('coefs %.6f %.6f %.6f %.6f %.6f %.6f',
+ [c[0][0], c[0][1], c[1][0], c[1][1], c[2][0], c[2][1]]));
+ sl.Add(format('post %.6f %.6f %.6f %.6f %.6f %.6f',
+ [p[0][0], p[0][1], p[1][0], p[1][1], p[2][0], p[2][1]]));
+ if postXswap then
+ sl.Add('postxswap 1')
+ else
+ sl.Add('postxswap 0');
+ if autoZscale then
+ sl.Add('autozscale 1')
+ else
+ sl.Add('autozscale 0');
+ s := 'chaos';
+ for j := 0 to NumXForms+1 do begin
+ s := s + format(' %g', [modWeights[j]]);
+ end;
+ sl.Add(s);
+
+ sl.Add(format('opacity %g', [transOpacity]));
+ sl.Add(format('var_color %g', [pluginColor]));
+
+ end;
+ FormatSettings.DecimalSeparator := OldDecimalSperator;
+end;
+
+procedure WriteDoubles(const handle: File; data: array of double);
+var
+ block: TBlock;
+ i: integer;
+begin
+ for i := 0 to Length(data)-1 do begin
+ DoubleToBlock(block, 0, 0); //pad to blocksize
+ DoubleToBlock(block, 8, data[i]);
+ BlockWrite(handle, block, 1);
+ end;
+end;
+procedure WriteString(const handle: File; data: string);
+var
+ k, l, size, chunks: Integer;
+ raw : THibRawString;
+ block: TBlock;
+begin
+ size := Length(data);
+ SetLength(raw, size);
+ CopyMemory(@raw[0], @data[1], size);
+ chunks := size div HIB_BLOCKSIZE;
+
+ if size mod HIB_BLOCKSIZE > 0 then begin
+ size := (1 + size div HIB_BLOCKSIZE) * HIB_BLOCKSIZE;
+ chunks := chunks + 1;
+ end;
+
+ for k := 0 to chunks - 1 do begin
+ for l := 0 to HIB_MAXOFFSET do
+ if (k * HIB_BLOCKSIZE + l) < size then
+ block[l] := raw[k * HIB_BLOCKSIZE + l]
+ else block[l] := 0;
+ BlockWrite(handle, block, 1);
+ end;
+end;
+
+function CalcBinaryFlameSize(cp: TControlPoint): integer;
+var
+ (*str: string;
+ i, nvariations, nvariables, nchaos: Integer;*)
+ handle: File;
+begin
+ // I'm a bit ashamed but this hack has do to it for now...
+ AssignFile(handle, GetEnvironmentVariable('TEMP') + '\CalcBinaryFlameSizeTemp.bin');
+ ReWrite(handle, HIB_BLOCKSIZE);
+ cp.SaveToBinary(handle);
+ Result := FileSize(handle) * HIB_BLOCKSIZE;
+ CloseFile(handle);
+ DeleteFile(GetEnvironmentVariable('TEMP') + '\CalcBinaryFlameSizeTemp.bin');
+
+ (*// CP data
+ Result := 224;
+
+ // Var list
+ str := '';
+ for i := 0 to NRVAR-1 do
+ str := str + VarNames(i) + #13#10;
+ for i:= 0 to GetNrVariableNames-1 do
+ str := str + GetVariableNameAt(i)+ #13#10;
+ str := trim(str);
+ if Length(str) mod HIB_BLOCKSIZE > 0 then
+ Result := Result + (1 + Length(str) div HIB_BLOCKSIZE) * HIB_BLOCKSIZE
+ else
+ Result := Result + Length(str);
+
+ // XForm data
+ nchaos := Min(cp.NumXForms+1, NXFORMS);
+ nvariations := NRVAR;
+ nvariables := GetNrVariableNames;
+ if nvariations mod 2 > 0 then
+ nvariations := nvariations + 1;
+ if nvariables mod 2 > 0 then
+ nvariables := nvariables + 1;
+ if nchaos mod 2 > 0 then
+ nchaos := nchaos + 1;
+ Result := Result + (144 + (nvariations + nvariables + nchaos) * 8) *
+ Min(cp.NumXForms+1, NXFORMS); *)
+end;
+
+procedure TControlPoint.SaveToBinary(const handle: File);
+var
+ i, j, nvariations, nvariables, nchaos: Integer;
+ v: double;
+ str: string;
+ dbl: array of double;
+ block: TBlock;
+begin
+
+ DoubleToBlock(block, 0, time);
+ DoubleToBlock(block, 8, zoom);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, FAngle);
+ DoubleToBlock(block, 8, pixels_per_unit);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, center[0]);
+ DoubleToBlock(block, 8, center[1]);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, cameraPitch);
+ DoubleToBlock(block, 8, cameraYaw);
+ BlockWrite(handle, block, 1);
+// AV TODO: cam_roll, contrast and var_order
+ DoubleToBlock(block, 0, cameraPersp);
+ DoubleToBlock(block, 8, cameraZpos);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, cameraDOF);
+ DoubleToBlock(block, 8, spatial_filter_radius);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, sample_density);
+ DoubleToBlock(block, 8, gamma_threshold);
+ BlockWrite(handle, block, 1);
+
+ Int32ToBlock(block, 0, cmapindex);
+ Int32ToBlock(block, 4, spatial_oversample);
+ Int32ToBlock(block, 8, Width);
+ Int32ToBlock(block, 12, Height);
+ BlockWrite(handle, block, 1);
+
+ Int32ToBlock(block, 0, nbatches);
+ Int32ToBlock(block, 4, cmap_inter);
+ Int32ToBlock(block, 8, ifthen(finalxformenabled, 1, 0));
+ Int32ToBlock(block, 12, soloXform);
+ BlockWrite(handle, block, 1);
+
+ Int32ToBlock(block, 0, white_level);
+ Int32ToBlock(block, 4, background[0]);
+ Int32ToBlock(block, 8, background[1]);
+ Int32ToBlock(block, 12, background[2]);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, Fbrightness * BRIGHT_ADJUST);
+ DoubleToBlock(block, 8, gamma);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, vibrancy);
+ DoubleToBlock(block, 8, hue_rotation);
+ BlockWrite(handle, block, 1);
+
+ nchaos := Min(NumXForms+1, NXFORMS);
+ nvariations := NRVAR;
+ nvariables := GetNrVariableNames;
+
+ Int32ToBlock(block, 0, nvariations);
+ Int32ToBlock(block, 4, nvariables);
+ Int32ToBlock(block, 8, nchaos);
+
+ str := '';
+ for i := 0 to nvariations-1 do
+ str := str + VarNames(i) + #0;
+ for i:= 0 to nvariables-1 do
+ str := str + GetVariableNameAt(i)+ #0;
+ str := trim(str);
+ if Length(str) mod HIB_BLOCKSIZE > 0 then
+ Int32ToBlock(block, 12, (1 + Length(str) div HIB_BLOCKSIZE) * HIB_BLOCKSIZE)
+ else
+ Int32ToBlock(block, 12, Length(str));
+ BlockWrite(handle, block, 1);
+
+ WriteString(handle, str);
+
+ for i := 0 to nchaos - 1 do
+ with xform[i] do begin
+ DoubleToBlock(block, 0, density);
+ DoubleToBlock(block, 8, color);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, symmetry);
+ DoubleToBlock(block, 8, transOpacity);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, pluginColor);
+ Int32ToBlock(block, 8, IfThen(postXswap, 1, 0));
+ Int32ToBlock(block, 12, IfThen(autozscale, 1, 0));
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, c[0][0]);
+ DoubleToBlock(block, 8, c[0][1]);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, c[1][0]);
+ DoubleToBlock(block, 8, c[1][1]);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, c[2][0]);
+ DoubleToBlock(block, 8, c[2][1]);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, p[0][0]);
+ DoubleToBlock(block, 8, p[0][1]);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, p[1][0]);
+ DoubleToBlock(block, 8, p[1][1]);
+ BlockWrite(handle, block, 1);
+
+ DoubleToBlock(block, 0, p[2][0]);
+ DoubleToBlock(block, 8, p[2][1]);
+ BlockWrite(handle, block, 1);
+
+ SetLength(dbl, nvariations);
+ for j := 0 to nvariations-1 do
+ dbl[j] := GetVariation(j);
+ WriteDoubles(handle, dbl);
+
+ SetLength(dbl, nvariables);
+ for j := 0 to nvariables-1 do
+ GetVariable(GetVariableNameAt(j), dbl[j]);
+ WriteDoubles(handle, dbl);
+
+ SetLength(dbl, nchaos);
+ for j := 0 to nchaos-1 do
+ dbl[j] := xform[i].modWeights[j];
+ WriteDoubles(handle, dbl);
+ end;
+end;
+
+
+function TControlPoint.Clone: TControlPoint;
+var
+ i, j: integer;
+ sl: TStringList;
+begin
+ sl := TStringList.Create;
+ SaveToStringlist(sl);
+ Result := TControlPoint.Create;
+ Result.ParseStringlist(sl);
+ Result.Fangle := FAngle;
+ Result.cmap := cmap;
+ Result.name := name;
+ //Result.nick := nick;
+ //Result.url := url;
+ Result.hue_rotation := hue_rotation; // AV
+ Result.Transparency := Transparency;
+ Result.gamma_threshold := gamma_threshold;
+ Result.estimator := estimator;
+ Result.estimator_min := estimator_min;
+ Result.estimator_curve := estimator_curve;
+ Result.enable_de := enable_de;
+ Result.xdata := xdata;
+
+ Result.Background[0] := background[0];
+ Result.Background[1] := background[1];
+ Result.Background[2] := background[2];
+
+ for i := 0 to 3 do
+ for j := 0 to 3 do begin
+ Result.CurveWeights[i,j] := curveWeights[i,j];
+ Result.curvePoints[i,j].x := curvePoints[i,j].x;
+ Result.curvePoints[i,j].y := curvePoints[i,j].y;
+ end;
+
+ Result.used_plugins.Clear;
+ Result.used_plugins.AddStrings(used_plugins); // AV
+ { for i := 0 to used_plugins.Count-1 do
+ Result.used_plugins.Add(used_plugins[i]); }
+
+ for i := 0 to NXFORMS - 1 do
+ Result.xform[i].assign(xform[i]);
+
+ sl.Free;
+end;
+
+procedure TControlPoint.Copy(cp1: TControlPoint; KeepSizes: boolean = false; nt: byte = NXFORMS);
+var
+ i, j: integer;
+ sl: TStringList;
+ w, h: integer;
+begin
+ w := Width;
+ h := Height;
+
+ Clear;
+ sl := TStringList.Create;
+
+ // --Z-- this is quite a weird and unoptimal way to copy things:
+ cp1.SaveToStringlist(sl);
+ ParseStringlist(sl);
+
+ Fangle := cp1.FAngle;
+ center[0]:= cp1.center[0];
+ center[1]:= cp1.center[1];
+ pixels_per_unit := cp1.pixels_per_unit;
+ cmap := cp1.cmap;
+ name := cp1.name;
+ //nick := cp1.nick;
+ //url := cp1.url;
+ hue_rotation := cp1.hue_rotation; // AV
+ gamma_threshold := cp1.gamma_threshold;
+ estimator := cp1.estimator;
+ estimator_min := cp1.estimator_min;
+ estimator_curve := cp1.estimator_curve;
+ enable_de := cp1.enable_de;
+ // used_plugins := cp1.used_plugins; // <<--- fixed memory leak // AV
+ xdata := cp1.xdata;
+
+ background[0] := cp1.background[0];
+ background[1] := cp1.background[1];
+ background[2] := cp1.background[2];
+
+ for i := 0 to 3 do
+ for j := 0 to 3 do begin
+ CurveWeights[i,j] := cp1.curveWeights[i,j];
+ curvePoints[i,j].x := cp1.curvePoints[i,j].x;
+ curvePoints[i,j].y := cp1.curvePoints[i,j].y;
+ end;
+
+ if KeepSizes then
+ AdjustScale(w, h);
+
+ used_plugins.Clear;
+ // AV: that's how we must copy strings:
+ used_plugins.AddStrings(cp1.used_plugins);
+ { for i := 0 to cp1.used_plugins.Count-1 do
+ used_plugins.Add(cp1.used_plugins[i]); }
+
+ // AV: to speed up the interpolation
+ for i := 0 to nt {NXFORMS} do // was: NXFORMS-1
+ xform[i].assign(cp1.xform[i]);
+ finalXformEnabled := cp1.finalXformEnabled;
+
+ sl.Free;
+end;
+
+procedure TControlPoint.ParseStringList(sl: TStringlist);
+var
+ s: string;
+ i: integer;
+begin
+ finalXformEnabled := false;
+ for i := 0 to sl.Count - 1 do begin
+ s := s + sl[i] + ' ';
+ end;
+ ParseString(s);
+end;
+
+procedure TControlPoint.Clear;
+var
+ i, j: Integer;
+begin
+ symmetry := 0;
+ cmapindex := -1;
+ hue_rotation := 1; // AV
+ zoom := 0;
+ xdata := '';
+ for i := 0 to NXFORMS do xform[i].Clear;
+ FinalXformEnabled := false;
+ soloxform := -1;
+
+ for i := 0 to 3 do
+ begin
+ curvePoints[i][0].x := 0.00; curvePoints[i][0].y := 0.00; curveWeights[i][0] := 1;
+ curvePoints[i][1].x := 0.00; curvePoints[i][1].y := 0.00; curveWeights[i][1] := 1;
+ curvePoints[i][2].x := 1.00; curvePoints[i][2].y := 1.00; curveWeights[i][2] := 1;
+ curvePoints[i][3].x := 1.00; curvePoints[i][3].y := 1.00; curveWeights[i][3] := 1;
+ end;
+
+ try
+ if (used_plugins <> nil) then
+ used_plugins.Clear;
+ // else used_plugins := TStringlist.Create; // AV: now it's not needed
+ except
+ // hack
+ // used_plugins := TStringList.Create; // AV: now it's not needed
+ end;
+end;
+
+function TControlPoint.HasFinalXForm: boolean;
+var
+ i: integer;
+begin
+ with xform[NumXForms] do
+ begin
+ Result := (c[0,0]<>1) or (c[0,1]<>0) or (c[1,0]<>0) or (c[1,1]<>1) or (c[2,0]<>0) or (c[2,1]<>0) or
+ (p[0,0]<>1) or (p[0,1]<>0) or (p[1,0]<>0) or (p[1,1]<>1) or (p[2,0]<>0) or (p[2,1]<>0) or
+ (symmetry <> 1) or (GetVariation(0) <> 1);
+ if Result = false then
+ for i := 1 to NRVAR-1 do Result := Result or (GetVariation(i) <> 0);
+ end;
+end;
+
+function add_symmetry_to_control_point(var cp: TControlPoint; sym: integer): integer;
+const
+ sym_distrib: array[0..14] of integer = (
+ -4, -3,
+ -2, -2, -2,
+ -1, -1, -1,
+ 2, 2, 2,
+ 3, 3,
+ 4, 4
+ );
+var
+ i, j, k: integer;
+ a: double;
+begin
+ result := 0;
+ if (0 = sym) then
+ if (random(1) <> 0) then
+ sym := sym_distrib[random(14)]
+ else if (random(32) <> 0) then // not correct
+ sym := random(13) - 6
+ else
+ sym := random(51) - 25;
+
+ if (1 = sym) or (0 = sym) then
+ begin
+ result := 0;
+ exit;
+ end;
+
+ for i := 0 to NXFORMS - 1 do
+ if (cp.xform[i].density = 0.0) then break;
+
+ if (i = NXFORMS) then
+ begin
+ result := 0;
+ exit;
+ end;
+ cp.symmetry := sym;
+
+ if (sym < 0) then
+ begin
+ cp.xform[i].density := 1.0;
+ cp.xform[i].symmetry := 1;
+ cp.xform[i].SetVariation(0, 1.0);
+ for j := 1 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0.0);
+ cp.xform[i].color := 1.0;
+ cp.xform[i].c[0][0] := -1.0;
+ cp.xform[i].c[0][1] := 0.0;
+ cp.xform[i].c[1][0] := 0.0;
+ cp.xform[i].c[1][1] := 1.0;
+ cp.xform[i].c[2][0] := 0.0;
+ cp.xform[i].c[2][1] := 0.0;
+
+ inc(i);
+ inc(result);
+ sym := -sym;
+ end;
+
+ a := 2 * PI / sym;
+
+// for (k = 1; (k < sym)&&(i < NXFORMS); k + + ) {
+ k := 1;
+// while (k < sym) and (i < NXFORMS) do
+ while (k < sym) and (i < SymmetryNVars) do
+ begin
+ cp.xform[i].density := 1.0;
+ cp.xform[i].SetVariation(0, 1);
+ cp.xform[i].symmetry := 1;
+ for j := 1 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0);
+ if sym < 3 then
+ cp.xform[i].color := 0
+ else
+ cp.xform[i].color := (k - 1) / (sym - 2);
+
+ if cp.xform[i].color > 1 then
+ begin
+// ShowMessage('Color value larger than 1');
+ repeat
+ cp.xform[i].color := cp.xform[i].color - 1
+ until cp.xform[i].color <= 1;
+ end;
+
+ cp.xform[i].c[0][0] := cos(k * a);
+ cp.xform[i].c[0][1] := sin(k * a);
+ cp.xform[i].c[1][0] := -cp.xform[i].c[0][1];
+ cp.xform[i].c[1][1] := cp.xform[i].c[0][0];
+ cp.xform[i].c[2][0] := 0.0;
+ cp.xform[i].c[2][1] := 0.0;
+
+ inc(i);
+ inc(result);
+ inc(k);
+ end;
+end;
+
+procedure tile_control_point(var cp: TControlPoint; sym: integer);
+var k, i, j: integer;
+ t, cost, sint: double;
+begin
+ for k := 0 to NXFORMS - 1 do
+ if (cp.xform[k].density = 0.0) then break;
+ if (k = NXFORMS) then exit;
+
+ case sym of
+ 1:
+ for i := k to (k + 3) do
+ begin
+ cp.xform[i].density := 1.0;
+ cp.xform[i].symmetry := 1;
+ cp.xform[i].SetVariation(0, 1.0);
+ for j := 1 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0.0);
+ cp.xform[i].c[0][0] := 1.0;
+ cp.xform[i].c[0][1] := 0.0;
+ cp.xform[i].c[1][0] := 0.0;
+ cp.xform[i].c[1][1] := 1.0;
+ t := (i - k) * pi * 0.5;
+ SinCos(t, sint, cost);
+ cp.xform[i].c[2][0] := RhombTR * cost;
+ cp.xform[i].c[2][1] := RhombTR * sint;
+ end;
+ 2:
+ for i := k to (k + 3) do
+ begin
+ cp.xform[i].density := 1.0;
+ cp.xform[i].symmetry := 1;
+ cp.xform[i].SetVariation(0, 1.0);
+ for j := 1 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0.0);
+ cp.xform[i].c[0][0] := 1.0;
+ cp.xform[i].c[0][1] := 0.0;
+ cp.xform[i].c[1][0] := 0.0;
+ cp.xform[i].c[1][1] := 1.0;
+ t := pi * ((i - k) * 0.5 + 0.25);
+ SinCos(t, sint, cost);
+ cp.xform[i].c[2][0] := SquareTR * cost;
+ cp.xform[i].c[2][1] := SquareTR * sint;
+ end;
+ 3:
+ for i := k to (k + 5) do
+ begin
+ cp.xform[i].density := 1.0;
+ cp.xform[i].symmetry := 1;
+ cp.xform[i].SetVariation(0, 1.0);
+ for j := 1 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0.0);
+ cp.xform[i].c[0][0] := 1.0;
+ cp.xform[i].c[0][1] := 0.0;
+ cp.xform[i].c[1][0] := 0.0;
+ cp.xform[i].c[1][1] := 1.0;
+ t := (i - k) * pi / 3;
+ SinCos(t, sint, cost);
+ cp.xform[i].c[2][0] := HexTR * cost;
+ cp.xform[i].c[2][1] := HexTR * sint;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TControlPoint.ZoomtoRect(R: TSRect);
+var
+ scale, ppu: double;
+ dx,dy: double;
+begin
+ scale := power(2, zoom);
+ ppu := pixels_per_unit * scale;
+
+ dx := ((r.Left + r.Right)/2 - Width/2) / ppu;
+ dy := ((r.Top + r.Bottom)/2 - Height/2) / ppu;
+
+ center[0] := center[0] + cos(FAngle) * dx - sin(FAngle) * dy;
+ center[1] := center[1] + sin(FAngle) * dx + cos(FAngle) * dy;
+
+ if PreserveQuality then
+ zoom := Log2(scale * ( Width/(abs(r.Right - r.Left) + 1)))
+ else
+ pixels_per_unit := pixels_per_unit * Width / abs(r.Right - r.Left);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TControlPoint.ZoomOuttoRect(R: TSRect);
+var
+ ppu: double;
+ dx, dy: double;
+begin
+
+ if PreserveQuality then
+ zoom := Log2(power(2, zoom) / ( Width/(abs(r.Right - r.Left) + 1)))
+ else
+ pixels_per_unit := pixels_per_unit / Width * abs(r.Right - r.Left);
+ ppu := pixels_per_unit * power(2, zoom);
+
+ dx := ((r.Left + r.Right)/2 - Width/2) / ppu;
+ dy := ((r.Top + r.Bottom)/2 - Height/2) / ppu;
+
+ center[0] := center[0] - cos(FAngle) * dx + sin(FAngle) * dy;
+ center[1] := center[1] - sin(FAngle) * dx - cos(FAngle) * dy;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TControlPoint.ZoomIn(Factor: double);
+var
+ scale: double;
+begin
+ scale := power(2, zoom);
+
+ Scale := Scale / Factor;
+ Zoom := Log2(Scale);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TControlPoint.MoveRect(R: TSRect);
+var
+ scale: double;
+ ppux, ppuy: double;
+ dx,dy: double;
+begin
+ scale := power(2, zoom);
+ ppux := pixels_per_unit * scale;
+ ppuy := pixels_per_unit * scale;
+
+ dx := (r.Left - r.Right)/ppux;
+ dy := (r.Top - r.Bottom)/ppuy;
+
+ center[0] := center[0] + cos(FAngle) * dx - sin(FAngle) * dy;
+ center[1] := center[1] + sin(FAngle) * dx + cos(FAngle) * dy ;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TControlPoint.Rotate(Angle: double);
+begin
+ FAngle := FAngle + Angle;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TControlPoint.getppux: double;
+begin
+ result := pixels_per_unit * power(2, zoom)
+end;
+
+function TControlPoint.getppuy: double;
+begin
+ result := pixels_per_unit * power(2, zoom)
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TControlPoint.GetBrightness: double;
+begin
+ Result := Fbrightness;
+end;
+
+procedure TControlPoint.SetBrightness(br: double);
+begin
+ if br > 0 then begin
+ if Fbrightness <> 0 then gamma_threshold := (gamma_threshold / Fbrightness) * br;
+ Fbrightness := br;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TControlPoint.GetRelativeGammaThreshold: double;
+begin
+ if Fbrightness <> 0 then
+ Result := gamma_threshold / Fbrightness
+ else
+ Result := gamma_threshold;
+end;
+
+procedure TControlPoint.SetRelativeGammaThreshold(gtr: double);
+begin
+ gamma_threshold := gtr * Fbrightness;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+var
+ vdfilled: boolean = False;
+
+procedure FillVarDisturb;
+const
+ startvar_distrib: array[0..26] of integer = (-1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7);
+ startmixed_var_distrib: array[0..16] of integer = (0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7);
+var
+ i: integer;
+begin
+ if vdfilled then
+ Exit;
+
+ setlength(var_distrib, NRVAR + 19);
+ setlength(mixed_var_distrib, NRVAR + 9);
+
+ for i := 0 to High(startvar_distrib) do
+ var_distrib[i] := startvar_distrib[i];
+
+ for i := High(startvar_distrib) + 1 to high(var_distrib) do
+ var_distrib[i] := 8 + i - High(startvar_distrib) - 1;
+
+ for i := 0 to High(startmixed_var_distrib) do
+ mixed_var_distrib[i] := startmixed_var_distrib[i];
+
+ for i := High(startmixed_var_distrib) + 1 to high(mixed_var_distrib) do
+ mixed_var_distrib[i] := 8 + i - High(startmixed_var_distrib) - 1;
+
+ vdfilled := true;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// --Z-- cp-specific functions moved here from MainForm
+//
+
+function TControlPoint.NumXForms: integer;
+var
+ i: integer;
+begin
+//...
+ Result := NXFORMS;
+ for i := 0 to NXFORMS - 1 do
+ begin
+ if xform[i].density = 0 then
+ begin
+ Result := i;
+ Break;
+ end;
+ end;
+end;
+
+function TControlPoint.TrianglesFromCP(var Triangles: TTriangles): integer;
+{ Sets up the triangles from the IFS code }
+var
+ i, j: integer;
+ temp_x, temp_y, xset, yset: double;
+ left, top, bottom, right: double;
+begin
+ top := 0; bottom := 0; right := 0; left := 0;
+ Result := NumXForms;
+{
+ if ReferenceMode > 0 then
+ begin
+ for i := 0 to Result-1 do
+ begin
+ xset := 1.0;
+ yset := 1.0;
+ for j := 0 to 5 do
+ with xform[i] do begin
+ temp_x := xset * c[0][0] + yset * c[1][0] + c[2][0];
+ temp_y := xset * c[0][1] + yset * c[1][1] + c[2][1];
+ xset := temp_x;
+ yset := temp_y;
+ end;
+ if (i = 0) then
+ begin
+ left := xset;
+ right := xset;
+ top := yset;
+ bottom := yset;
+ end
+ else
+ begin
+ if (xset < left) then left := xset;
+ if (xset > right) then right := xset;
+ if (yset > top) then top := yset;
+ if (yset < bottom) then bottom := yset;
+ end;
+ end;
+
+ if ReferenceMode = 1 then
+ begin
+ Triangles[-1].x[0] := right-left;
+ Triangles[-1].y[0] := 0;
+ Triangles[-1].x[1] := 0;
+ Triangles[-1].y[1] := 0;
+ Triangles[-1].x[2] := 0;
+ Triangles[-1].y[2] := -(top-bottom);
+ end
+ else begin
+ Triangles[-1].x[0] := right;
+ Triangles[-1].y[0] := -bottom;
+ Triangles[-1].x[1] := left;
+ Triangles[-1].y[1] := -bottom;
+ Triangles[-1].x[2] := left;
+ Triangles[-1].y[2] := -top;
+ end;
+ end
+ else
+}
+ begin
+ Triangles[-1].x[0] := 1; Triangles[-1].y[0] := 0; // "x"
+ Triangles[-1].x[1] := 0; Triangles[-1].y[1] := 0; // "0"
+ Triangles[-1].x[2] := 0; Triangles[-1].y[2] := -1; // "y"
+ end;
+
+ for j := 0 to Result do
+ begin
+ for i := 0 to 2 do
+ with xform[j] do begin
+ if postXswap then begin
+ Triangles[j].x[i] := Triangles[-1].x[i] * p[0][0] + Triangles[-1].y[i] * p[1][0] + p[2][0];
+ Triangles[j].y[i] := Triangles[-1].x[i] * p[0][1] + Triangles[-1].y[i] * p[1][1] + p[2][1];
+ end
+ else begin
+ Triangles[j].x[i] := Triangles[-1].x[i] * c[0][0] + Triangles[-1].y[i] * c[1][0] + c[2][0];
+ Triangles[j].y[i] := Triangles[-1].x[i] * c[0][1] + Triangles[-1].y[i] * c[1][1] + c[2][1];
+ end;
+ end;
+ end;
+ EnableFinalXform := FinalXformEnabled;
+
+ // I don't like this... :-/
+ for j := -1 to Result do // was: Result-1
+ for i := 0 to 2 do
+ Triangles[j].y[i] := -Triangles[j].y[i];
+end;
+
+procedure TControlPoint.EqualizeWeights;
+var
+ t, i: integer;
+begin
+ t := NumXForms;
+ for i := 0 to t - 1 do
+ xform[i].density := 0.5;
+end;
+
+procedure TControlPoint.NormalizeWeights;
+var
+ i: integer;
+ td: double;
+begin
+ td := 0.0;
+ for i := 0 to NumXForms - 1 do
+ td := td + xform[i].Density;
+ if (td < 0.001) then
+ EqualizeWeights
+ else
+ for i := 0 to NumXForms - 1 do
+ xform[i].Density := xform[i].Density / td;
+end;
+
+procedure TControlPoint.RandomizeWeights;
+var
+ i: integer;
+begin
+ for i := 0 to Transforms - 1 do
+ xform[i].Density := Random;
+end;
+
+procedure TControlPoint.ComputeWeights(Triangles: TTriangles; t: integer);
+// Caclulate transform weight from triangle areas
+var
+ i: integer;
+ total_area: double;
+begin
+ total_area := 0;
+ for i := 0 to t - 1 do
+ begin
+ xform[i].Density := triangle_area(Triangles[i]);
+ total_area := total_area + xform[i].Density;
+ end;
+ for i := 0 to t - 1 do
+ begin
+ xform[i].Density := xform[i].Density / total_area;
+ end;
+ //? cp1.NormalizeWeights;
+end;
+
+ procedure TControlPoint.NormalizeProbabilities;
+ // AV: useful for matematicians, useless for other people :)
+var
+ i: integer;
+ sum, p: double;
+begin
+ sum := 0.0;
+ for i := 0 to NumXForms - 1 do
+ sum := sum + xform[i].Density;
+ if sum = 1.0 then Exit;
+ for i := 0 to NumXForms - 1 do
+ begin
+ p := xform[i].Density / sum;
+ if (p < 1E-6) then p := 1E-6;
+ xform[i].Density := p;
+ end;
+end;
+
+procedure TControlPoint.CalculateWeights;
+// AV: Calculate transform weight from its affine determinants
+var
+ i: integer;
+ deta, detp: double;
+begin
+ for i := 0 to NumXForms - 1 do
+ begin
+ with xform[i] do
+ begin
+ deta := c[0][0] * c[1][1] - c[0][1] * c[1][0];
+ detp := p[0][0] * p[1][1] - p[0][1] * p[1][0];
+ end;
+
+ deta := abs(deta * detp);
+ if (deta < 1E-6) then deta := 1E-6;
+ xform[i].Density := deta;
+ end;
+end;
+
+procedure TControlPoint.CalculateColorSpeed;
+var
+ i: integer;
+ maxw, sumw, w0, d: double;
+ eqw: boolean;
+begin
+ if Transforms = 1 then exit; // single xform
+ eqw := True;
+ w0 := xform[0].density;
+ maxw := w0; sumw := 0;
+ for i := 0 to Transforms - 1 do
+ begin
+ sumw := sumw + xform[i].density;
+ if (xform[i].density > maxw) then maxw := xform[i].density;
+ if eqw then if (xform[i].density <> w0) then eqw := False;
+ end;
+
+ if (not eqw) then
+ for i := 0 to Transforms - 1 do
+ begin
+ with xform[i] do
+ begin
+ if (GetVariation(0) = 1) then // if affine
+ begin
+ d := abs(c[0,0]*c[1,1] - c[0,1]*c[1,0]); // contraction factor
+ symmetry := min(d, 1);
+ end
+ else if (density > 0.01) then
+ symmetry := 0.85 * density / maxw
+ else
+ symmetry := -1;
+ end;
+ end
+ else // equal weights
+ for i := 0 to Transforms - 1 do
+ xform[i].symmetry := 0;
+end;
+
+procedure TControlPoint.GetFromTriangles(const Triangles: TTriangles; const t: integer);
+var
+ i: integer;
+ v: double;
+begin
+ for i := 0 to t do
+ if xform[i].postXswap then
+ begin
+ solve3(Triangles[-1].x[0], -Triangles[-1].y[0], Triangles[i].x[0],
+ Triangles[-1].x[1], -Triangles[-1].y[1], Triangles[i].x[1],
+ Triangles[-1].x[2], -Triangles[-1].y[2], Triangles[i].x[2],
+ xform[i].p[0][0], xform[i].p[1][0], xform[i].p[2][0]);
+
+ solve3(Triangles[-1].x[0], -Triangles[-1].y[0], -Triangles[i].y[0],
+ Triangles[-1].x[1], -Triangles[-1].y[1], -Triangles[i].y[1],
+ Triangles[-1].x[2], -Triangles[-1].y[2], -Triangles[i].y[2],
+ xform[i].p[0][1], xform[i].p[1][1], xform[i].p[2][1]);
+ end
+ else begin
+ solve3(Triangles[-1].x[0], -Triangles[-1].y[0], Triangles[i].x[0],
+ Triangles[-1].x[1], -Triangles[-1].y[1], Triangles[i].x[1],
+ Triangles[-1].x[2], -Triangles[-1].y[2], Triangles[i].x[2],
+ xform[i].c[0][0], xform[i].c[1][0], xform[i].c[2][0]);
+
+ solve3(Triangles[-1].x[0], -Triangles[-1].y[0], -Triangles[i].y[0],
+ Triangles[-1].x[1], -Triangles[-1].y[1], -Triangles[i].y[1],
+ Triangles[-1].x[2], -Triangles[-1].y[2], -Triangles[i].y[2],
+ xform[i].c[0][1], xform[i].c[1][1], xform[i].c[2][1]);
+ if xform[i].autoZscale then with xform[i] do begin
+ v := c[0][0]*c[1][1] - c[0][1]*c[1][0];
+ //n := GetVariationIndex('pre_zscale');
+ if v = 1 then
+ SetVariation(20, 0.0) // pre_zscale not needed
+ else
+ SetVariation(20, sign(v) * sqrt(abs(v)));
+ end;
+ end;
+ FinalXformEnabled := EnableFinalXform;
+end;
+
+procedure TControlPoint.GetTriangle(var Triangle: TTriangle; const n: integer);
+var
+ i, j: integer;
+begin
+ for i := 0 to 2 do
+ with xform[n] do begin
+ Triangle.x[i] := MainTriangles[-1].x[i] * c[0][0] - MainTriangles[-1].y[i] * c[1][0] + c[2][0];
+ Triangle.y[i] := -MainTriangles[-1].x[i] * c[0][1] + MainTriangles[-1].y[i] * c[1][1] - c[2][1];
+ end;
+end;
+
+procedure TControlPoint.GetPostTriangle(var Triangle: TTriangle; const n: integer);
+var
+ i, j: integer;
+begin
+ for i := 0 to 2 do
+ with xform[n] do begin
+ Triangle.x[i] := MainTriangles[-1].x[i] * p[0][0] - MainTriangles[-1].y[i] * p[1][0] + p[2][0];
+ Triangle.y[i] := -MainTriangles[-1].x[i] * p[0][1] + MainTriangles[-1].y[i] * p[1][1] - p[2][1];
+ end;
+end;
+
+////////////////////////////////////////////////////////////////////////////////
+procedure TControlPoint.AdjustScale(w, h: integer);
+begin
+// if width >= height then
+ pixels_per_unit := pixels_per_unit * w/width;
+// else
+// pixels_per_unit := pixels_per_unit * h/height;
+ width := w;
+ height := h;
+end;
+
+end.
+
diff --git a/Flame/RndFlame.pas b/Flame/RndFlame.pas
new file mode 100644
index 0000000..d7a432b
--- /dev/null
+++ b/Flame/RndFlame.pas
@@ -0,0 +1,638 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit RndFlame;
+
+interface
+
+uses
+ ControlPoint, Xform;
+
+function RandomFlame(SourceCP: TControlPoint= nil; algorithm: integer = 0): TControlPoint;
+
+implementation
+
+uses
+ SysUtils, Global, cmap, GradientHlpr, XFormMan, Classes;
+
+///////////////////////////////////////////////////////////////////////////////
+// AV: this procedure repeated in the source code 3 times!
+(* procedure RGBBlend(a, b: integer; var Palette: TColorMap);
+{ Linear blend between to indices of a palette }
+var
+ c, v: real;
+ vrange, range: real;
+ i: integer;
+begin
+ if a = b then
+ begin
+ Exit;
+ end;
+ range := b - a;
+ vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
+ c := Palette[a mod 256][0];
+ v := vrange / range;
+ for i := (a + 1) to (b - 1) do
+ begin
+ c := c + v;
+ Palette[i mod 256][0] := Round(c);
+ end;
+ vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
+ c := Palette[a mod 256][1];
+ v := vrange / range;
+ for i := a + 1 to b - 1 do
+ begin
+ c := c + v;
+ Palette[i mod 256][1] := Round(c);
+ end;
+ vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
+ c := Palette[a mod 256][2];
+ v := vrange / range;
+ for i := a + 1 to b - 1 do
+ begin
+ c := c + v;
+ Palette[i mod 256][2] := Round(c);
+ end;
+end; *)
+
+function CreatePalette(strng: string): TColorMap;
+{ Loads a palette from a gradient string }
+var
+ Strings: TStringList;
+ index, i: integer;
+ Tokens: TStringList;
+ Indices, Colors: TStringList;
+ a, b: integer;
+begin
+ Strings := TStringList.Create;
+ Tokens := TStringList.Create;
+ Indices := TStringList.Create;
+ Colors := TStringList.Create;
+ try
+ try
+ Strings.Text := strng;
+ if Pos('}', Strings.Text) = 0 then raise EFormatInvalid.Create('No closing brace');
+ if Pos('{', Strings[0]) = 0 then raise EFormatInvalid.Create('No opening brace.');
+ GetTokens(ReplaceTabs(strings.text), tokens);
+ Tokens.Text := Trim(Tokens.text);
+ i := 0;
+ while (Pos('}', Tokens[i]) = 0) and (Pos('opacity:', Lowercase(Tokens[i])) = 0) do
+ begin
+ if Pos('index=', LowerCase(Tokens[i])) <> 0 then
+ Indices.Add(GetVal(Tokens[i]))
+ else if Pos('color=', LowerCase(Tokens[i])) <> 0 then
+ Colors.Add(GetVal(Tokens[i]));
+ inc(i)
+ end;
+ for i := 0 to 255 do
+ begin
+ Result[i][0] := 0;
+ Result[i][1] := 0;
+ Result[i][2] := 0;
+ end;
+ if Indices.Count = 0 then raise EFormatInvalid.Create('No color info');
+ for i := 0 to Indices.Count - 1 do
+ begin
+ try
+ index := StrToInt(Indices[i]);
+ while index < 0 do inc(index, 400);
+ index := Round(Index * (255 / 399));
+ indices[i] := IntToStr(index);
+ assert(index>=0);
+ assert(index<256);
+ Result[index][0] := StrToInt(Colors[i]) mod 256;
+ Result[index][1] := trunc(StrToInt(Colors[i]) / 256) mod 256;
+ Result[index][2] := trunc(StrToInt(Colors[i]) / 65536);
+ except
+ end;
+ end;
+ i := 1;
+ repeat
+ a := StrToInt(Trim(Indices[i - 1]));
+ b := StrToInt(Trim(Indices[i]));
+ RGBBlend(a, b, Result);
+ inc(i);
+ until i = Indices.Count;
+ if (Indices[0] <> '0') or (Indices[Indices.Count - 1] <> '255') then
+ begin
+ a := StrToInt(Trim(Indices[Indices.Count - 1]));
+ b := StrToInt(Trim(Indices[0])) + 256;
+ RGBBlend(a, b, Result);
+ end;
+ except on EFormatInvalid do
+ begin
+// Result := False;
+ end;
+ end;
+ finally
+ Tokens.Free;
+ Strings.Free;
+ Indices.Free;
+ Colors.Free;
+ end;
+end;
+
+procedure GetGradientFileGradientsNames(const filename: string; var NamesList: TStringList);
+var
+ i, p: integer;
+ Title: string;
+ FStrings: TStringList;
+begin
+ FStrings := TStringList.Create;
+ FStrings.LoadFromFile(filename);
+ try
+ if (Pos('{', FStrings.Text) <> 0) then
+ begin
+ for i := 0 to FStrings.Count - 1 do
+ begin
+ p := Pos('{', FStrings[i]);
+ if (p <> 0) and (Pos('(3D)', FStrings[i]) = 0) then
+ begin
+ Title := Trim(Copy(FStrings[i], 1, p - 1));
+ if Title <> '' then
+ NamesList.Add(Trim(Copy(FStrings[i], 1, p - 1)));
+ end;
+ end;
+ end;
+ finally
+ FStrings.Free;
+ end;
+end;
+
+procedure RandomGradient(SourceCP, DestCP: TControlPoint);
+var
+ tmpGrad: string;
+ tmpGrdList: TStringList;
+begin
+ case randGradient of
+ 0:
+ begin
+ cmap_index := Random(NRCMAPS);
+ GetCMap(cmap_index, 1, DestCP.cmap);
+// cmap_index := DestCP.cmapindex;
+ DestCP.cmapIndex := cmap_index;
+ end;
+ 1:
+ begin
+ DestCP.cmap := DefaultPalette;
+ DestCP.cmapIndex := cmap_index;
+ end;
+ 2:
+ if assigned(SourceCP) then begin
+ DestCP.cmap := SourceCP.cmap;
+ DestCP.cmapIndex := SourceCP.cmapIndex;
+ end else begin
+ cmap_index := Random(NRCMAPS);
+ GetCMap(cmap_index, 1, DestCP.cmap);
+ DestCP.cmapIndex := cmap_index;
+ end;
+ 3:
+ DestCP.cmap := GradientHelper.RandomGradient;
+ 4:
+ if FileExists(randGradientFile) then
+ begin
+ tmpGrdList := TStringList.Create;
+ GetGradientFileGradientsNames(randGradientFile, tmpGrdList);
+ tmpGrad := GetGradient(randGradientFile, tmpGrdList.Strings[random(tmpGrdList.Count)]);
+ DestCP.cmap := CreatePalette(tmpGrad);
+ tmpGrdList.Free;
+ end else
+ begin
+ cmap_index := Random(NRCMAPS);
+ GetCMap(cmap_index, 1, DestCP.cmap);
+ DestCP.cmapIndex := cmap_index;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure RandomVariation(cp: TControlPoint);
+{ Randomise variation parameters }
+var
+ a, b, i, j: integer;
+ VarPossible: boolean;
+begin
+ inc(MainSeed);
+ RandSeed := MainSeed;
+
+ VarPossible := false;
+ for j := 0 to NRVAR - 1 do begin
+ VarPossible := VarPossible or Variations[j];
+ end;
+
+ for i := 0 to cp.NumXForms - 1 do begin
+ for j := 0 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0);
+
+ if VarPossible then begin
+ repeat
+ a := random(NRVAR);
+ until Variations[a];
+
+ repeat
+ b := random(NRVAR);
+ until Variations[b];
+ end else begin
+ a := 0;
+ b := 0;
+ end;
+
+ if (a = b) then begin
+ cp.xform[i].SetVariation(a, 1);
+ end else begin
+ cp.xform[i].SetVariation(a, random);
+ cp.xform[i].SetVariation(b, 1 - cp.xform[i].GetVariation(a));
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure SetVariation(cp: TControlPoint);
+{ Set the current Variation }
+var
+ i, j: integer;
+begin
+ if Variation = vRandom then begin
+ RandomVariation(cp);
+ end else
+ for i := 0 to cp.NumXForms - 1 do begin
+ for j := 0 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0);
+ cp.xform[i].SetVariation(integer(Variation), 1);
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+(* --Z-- hmm, exactly the same function exists in module Main
+
+function TrianglesFromCP(const cp1: TControlPoint; var Triangles: TTriangles): integer;
+{ Sets up the triangles from the IFS code }
+var
+ xforms: integer;
+ i, j: integer;
+ temp_x, temp_y, xset, yset: double;
+ left, top, bottom, right: double;
+ a, b, c, d, e, f: double;
+begin
+ top := 0; bottom := 0; right := 0; left := 0;
+ xforms := NumXForms(cp1);
+ Result := xforms;
+ if not FixedReference then
+ begin
+ for i := 0 to xforms - 1 do
+ begin
+ a := cp1.xform[i].c[0][0];
+ b := cp1.xform[i].c[0][1];
+ c := cp1.xform[i].c[1][0];
+ d := cp1.xform[i].c[1][1];
+ e := cp1.xform[i].c[2][0];
+ f := cp1.xform[i].c[2][1];
+ xset := 1.0;
+ yset := 1.0;
+ for j := 0 to 5 do
+ begin
+ temp_x := xset * a + yset * c + e;
+ temp_y := xset * b + yset * d + f;
+ xset := temp_x;
+ yset := temp_y;
+ end;
+ if (i = 0) then
+ begin
+ left := xset;
+ right := xset;
+ top := yset;
+ bottom := yset;
+ end
+ else
+ begin
+ if (xset < left) then left := xset;
+ if (xset > right) then right := xset;
+ if (yset < top) then top := yset;
+ if (yset > bottom) then bottom := yset;
+ end;
+ end;
+ Triangles[-1].x[0] := left;
+ Triangles[-1].x[1] := right;
+ Triangles[-1].x[2] := right;
+ Triangles[-1].y[0] := bottom;
+ Triangles[-1].y[1] := bottom;
+ Triangles[-1].y[2] := top;
+ end
+ else
+ begin
+ Triangles[-1].x[0] := 0; Triangles[-1].y[0] := 0;
+ Triangles[-1].x[1] := 1; Triangles[-1].y[1] := 0;
+ Triangles[-1].x[2] := 1; Triangles[-1].y[2] := 1.5;
+ end;
+
+ for j := 0 to xforms - 1 do
+ begin
+ a := cp1.xform[j].c[0][0];
+ b := cp1.xform[j].c[0][1];
+ c := cp1.xform[j].c[1][0];
+ d := cp1.xform[j].c[1][1];
+ e := cp1.xform[j].c[2][0];
+ f := cp1.xform[j].c[2][1];
+ for i := 0 to 2 do
+ begin
+ triangles[j].x[i] := Triangles[-1].x[i] * a + Triangles[-1].y[i] *
+ c + e;
+ triangles[j].y[i] := Triangles[-1].x[i] * b + Triangles[-1].y[i] *
+ d + f;
+ end;
+ end;
+ for i := -1 to xforms - 1 do
+ for j := 0 to 2 do
+ triangles[i].y[j] := -triangles[i].y[j];
+end;
+*)
+
+///////////////////////////////////////////////////////////////////////////////
+procedure EqualizeWeights(var cp: TControlPoint);
+var
+ t, i: integer;
+begin
+ t := cp.NumXForms;
+ for i := 0 to t - 1 do
+ cp.xform[i].density := 1.0 / t;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure NormalizeWeights(var cp: TControlPoint);
+var
+ i: integer;
+ td: double;
+begin
+ td := 0.0;
+ for i := 0 to cp.NumXForms - 1 do
+ td := td + cp.xform[i].Density;
+ if (td < 0.001) then
+ EqualizeWeights(cp)
+ else
+ for i := 0 to cp.NumXForms - 1 do
+ cp.xform[i].Density := cp.xform[i].Density / td;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure ComputeWeights(var cp1: TControlPoint; Triangles: TTriangles; t: integer);
+{ Caclulates transform weight from triangles }
+var
+ i: integer;
+ total_area: double;
+begin
+ total_area := 0.0;
+ for i := 0 to t - 1 do
+ begin
+ cp1.xform[i].Density := triangle_area(Triangles[i]);
+ total_area := total_area + cp1.xform[i].Density;
+ end;
+ for i := 0 to t - 1 do
+ begin
+ cp1.xform[i].Density := cp1.xform[i].Density / total_area;
+ end;
+ NormalizeWeights(cp1);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure RandomWeights(var cp1: TControlPoint);
+{ Randomizes xform weights }
+var
+ i: integer;
+begin
+ for i := 0 to Transforms - 1 do
+ cp1.xform[i].Density := random;
+ NormalizeWeights(cp1);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function RandomFlame(SourceCP: TControlPoint; algorithm: integer): TControlPoint;
+var
+ Min, Max, i, j, rnd: integer;
+ Triangles: TTriangles;
+ r, s, theta, phi: double;
+ cosphi, sintheta, costheta: double;
+ skip: boolean;
+begin
+ if Assigned(SourceCP) then
+ Result := SourceCP.clone
+ else
+ Result := TControlPoint.Create;
+
+ Min := randMinTransforms;
+ Max := randMaxTransforms;
+
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ transforms := random(Max - (Min - 1)) + Min;
+ repeat
+ try
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ Result.clear;
+ Result.RandomCP(transforms, transforms, false);
+ Result.SetVariation(Variation);
+ inc(MainSeed);
+ RandSeed := MainSeed;
+
+ case algorithm of
+ 1: rnd := 0;
+ 2: rnd := 7;
+ 3: rnd := 9;
+ else
+ if (Variation = vLinear) or (Variation = vRandom) then
+ rnd := random(10)
+ else
+ rnd := 9;
+ end;
+ case rnd of
+ 0..6:
+ begin
+ for i := 0 to Transforms - 1 do
+ begin
+ // AV: useless assignments
+ {if Random(10) < 9 then
+ Result.xform[i].c[0, 0] := 1
+ else
+ Result.xform[i].c[0, 0] := -1;
+ Result.xform[i].c[0, 1] := 0;
+ Result.xform[i].c[1, 0] := 0;
+ Result.xform[i].c[1, 1] := 1;
+ Result.xform[i].c[2, 0] := 0;
+ Result.xform[i].c[2, 1] := 0;
+ Result.xform[i].color := 0; }
+ Result.xform[i].symmetry := 0;
+ Result.xform[i].SetVariation(0, 1);
+ for j := 1 to NRVAR - 1 do
+ Result.xform[i].SetVariation(j, 0);
+ // AV: hundred of useless calculations
+ {Result.xform[i].Translate(random * 2 - 1, random * 2 - 1);
+ Result.xform[i].Rotate(random * 360);
+ if i > 0 then
+ Result.xform[i].Scale(random * 0.8 + 0.2)
+ else
+ Result.xform[i].Scale(random * 0.4 + 0.6); }
+ if i > 0 then
+ s := random * 0.8 + 0.2
+ else
+ s := random * 0.4 + 0.6;
+ theta := random * 2 * pi;
+ sintheta := s * sin(theta);
+ costheta := s * cos(theta);
+ if Random(10) < 9 then
+ begin
+ Result.xform[i].c[0, 0] := costheta;
+ Result.xform[i].c[1, 0] := sintheta;
+ end
+ else begin
+ Result.xform[i].c[0, 0] := -costheta;
+ Result.xform[i].c[1, 0] := -sintheta;
+ end;
+ Result.xform[i].c[0, 1] := -sintheta;
+ Result.xform[i].c[1, 1] := costheta;
+ Result.xform[i].c[2, 0] := random * 2 - 1;
+ Result.xform[i].c[2, 1] := random * 2 - 1;
+ if Random(2) = 0 then
+ Result.xform[i].Multiply(1, random - 0.5, random - 0.5, 1);
+
+ if Random(2) = 1 then
+ begin
+ // AV: added post-transforms support!
+ theta := 2 * random * pi;
+ r := 0.3 + random * 0.7;
+ sintheta := r * sin(theta);
+ costheta := r * cos(theta);
+ Result.xform[i].p[0, 0] := costheta;
+ Result.xform[i].p[0, 1] := sintheta;
+ Result.xform[i].p[1, 0] := -sintheta;
+ Result.xform[i].p[1, 1] := costheta;
+ Result.xform[i].p[2,0] := random * 2 - 1;
+ Result.xform[i].p[2,1] := random * 2 - 1;
+ end;
+ end;
+ SetVariation(Result);
+ end;
+ 7, 8:
+ begin
+ { From the source to Chaos: The Software }
+ for i := 0 to Transforms - 1 do begin
+ r := random * 2 - 1;
+ if ((0 <= r) and (r < 0.2)) then
+ r := r + 0.2;
+ if ((r > -0.2) and (r <= 0)) then
+ r := r - 0.2;
+ s := random * 2 - 1;
+ if ((0 <= s) and (s < 0.2)) then
+ s := s + 0.2;
+ if ((s > -0.2) and (s <= 0)) then
+ s := s - -0.2;
+ theta := PI * random;
+ phi := (2 + random) * PI / 4;
+ // AV: we don't need to calculate everything twice!
+ sintheta := sin(theta);
+ costheta := cos(theta);
+ cosphi := cos(phi);
+ Result.xform[i].c[0][0] := r * costheta;
+ Result.xform[i].c[1][0] := s * (costheta * cosphi - sintheta);
+ Result.xform[i].c[0][1] := r * sintheta;
+ Result.xform[i].c[1][1] := s * (sintheta * cosphi + costheta);
+ { the next bit didn't translate so well, so I fudge it}
+ Result.xform[i].c[2][0] := random * 2 - 1;
+ Result.xform[i].c[2][1] := random * 2 - 1;
+ end;
+ for i := 0 to NXFORMS-1 do
+ Result.xform[i].density := 0;
+ for i := 0 to Transforms - 1 do
+ Result.xform[i].density := 1 / Transforms;
+ SetVariation(Result);
+ end;
+ 9: begin
+ for i := 0 to NXFORMS-1 do
+ Result.xform[i].density := 0;
+ for i := 0 to Transforms - 1 do
+ Result.xform[i].density := 1 / Transforms;
+ end;
+ end; // case
+ Result.TrianglesFromCp(Triangles);
+ if Random(2) > 0 then
+ ComputeWeights(Result, Triangles, transforms)
+ else
+ EqualizeWeights(Result);
+ except on E: EmathError do
+ begin
+ Continue;
+ end;
+ end;
+ for i := 0 to Transforms - 1 do
+ Result.xform[i].color := i / (transforms - 1);
+ if Result.xform[0].density = 1 then
+ Continue;
+ case SymmetryType of
+ { Bilateral }
+ 1: add_symmetry_to_control_point(Result, -1);
+ { Rotational }
+ 2: add_symmetry_to_control_point(Result, SymmetryOrder);
+ { Rotational and Reflective }
+ 3: add_symmetry_to_control_point(Result, -SymmetryOrder);
+ end;
+ { elimate flames with transforms that aren't affine }
+ skip := false;
+ for i := 0 to Transforms - 1 do begin
+ if not transform_affine(Triangles[i], Triangles) then
+ skip := True;
+ end;
+ if skip then
+ continue;
+ until not Result.BlowsUP(5000) and (Result.xform[0].density <> 0);
+
+ RandomGradient(SourceCP, Result);
+
+ Result.brightness := defBrightness;
+ Result.gamma := defGamma;
+ Result.gamma_threshold := defGammaThreshold;
+ Result.vibrancy := defVibrancy;
+ Result.sample_density := defSampleDensity;
+ Result.spatial_oversample := defOversample;
+ Result.spatial_filter_radius := defFilterRadius;
+ Result.contrast := defContrast; // AV
+ if KeepBackground and assigned(SourceCP) then begin
+ Result.background[0] := SourceCP.background[0];
+ Result.background[1] := SourceCP.background[1];
+ Result.background[2] := SourceCP.background[2];
+ end else if (RandBackColor <> 0) then begin // AV: to set the user's predefined BG
+ Result.background[0] := RandBackColor and 255;
+ Result.background[1] := RandBackColor shr 8 and 255;
+ Result.background[2] := RandBackColor shr 16 and 255;
+ end else begin
+ Result.background[0] := 0;
+ Result.background[1] := 0;
+ Result.background[2] := 0;
+ end;
+ Result.zoom := 0;
+ //Result.Nick := SheepNick;
+ //Result.URl := SheepURL;
+
+ Result.xform[Result.NumXForms].Clear;
+ Result.xform[Result.NumXForms].symmetry := 1;
+end;
+
+end.
diff --git a/Flame/XForm.pas b/Flame/XForm.pas
new file mode 100644
index 0000000..8576909
--- /dev/null
+++ b/Flame/XForm.pas
@@ -0,0 +1,2084 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+// REMOVE COMMENT TO COMPILE T-500
+//{$define T500}
+//{$define Light}
+
+unit XForm;
+
+interface
+
+uses
+{$ifdef Apo7X64}
+{$else}
+AsmRandom,
+{$endif}
+ XFormMan, BaseVariation, Classes;
+
+const
+ MAX_WEIGHT = 1000.0;
+ {$ifndef Light}
+ {$ifndef T500}
+ NXFORMS = 100;
+ {$else}
+ NXFORMS = 250; // 500; // AV: to use 1-byte type
+ {$endif}
+ {$else}
+ NXFORMS = 50;
+ {$endif}
+
+type
+ TCPpoint = record
+ x, y, z, c: double;
+ end;
+ PCPpoint = ^TCPpoint;
+
+ TXYpoint = record
+ x, y: double;
+ end;
+ PXYpoint = ^TXYpoint;
+
+ T2Cpoint = record
+ x, y, c1, c2: double;
+ end;
+
+ TMatrix = array[0..2, 0..2] of double;
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TXForm = class
+ public
+
+ c: array[0..2, 0..1] of double; // the coefs to the affine part of the function
+ p: array[0..2, 0..1] of double; // post-transform coefs!
+ density: double; // prob is this function is chosen
+ color: double; // color coord for this function. 0 - 1
+ color2: double; // Second color coord for this function. 0 - 1
+ vc: double; // Calculated color to be passed to the plugin
+ symmetry: double;
+ c00, c01, c10, c11, c20, c21: double; // unnecessary duplicated variables
+ p00, p01, p10, p11, p20, p21: double; // :-)
+ postXswap: boolean;
+ TransformName : string;
+
+ autoZscale: boolean; // for 3d editing
+ transOpacity: double;
+ pluginColor: double;
+
+ modWeights: array [0..NXFORMS] of double;
+ PropTable: array of TXForm;
+
+ // Orientationtype: integer;
+ ifs: TStringList; // AV: to keep custom variation order
+ private
+ vars: array of double; // {normalized} interp coefs between variations
+ FNrFunctions: Integer;
+ FFunctionList: array of TCalcFunction;
+ FCalcFunctionList: array of TCalcFunction;
+
+ FTx, FTy: double; // must remain in this order
+ FPx, FPy: double; // some asm code relies on this
+
+ FTz, FPz: double; // 3d hack
+
+ FAngle: double;
+ FSinA: double;
+ FCosA: double;
+ FLength: double;
+ colorC1, colorC2: double;
+
+ // precalculated constants for some variations
+ polar_vpi, disc_vpi: double;
+ polar2_vpi, p2vv2: double;
+
+ gauss_rnd: array [0..3] of double;
+ gauss_N: integer;
+
+ rx_sin, rx_cos, ry_sin, ry_cos: double;
+ px_sin, px_cos, py_sin, py_cos: double;
+
+ FRegVariations: array of TBaseVariation;
+
+ procedure PrecalcAngle;
+ procedure PrecalcSinCos;
+ procedure PrecalcAll;
+ procedure DoPostTransform;
+ procedure DoInvalidOperation;
+
+ procedure Linear3D; // vars[0]
+ procedure PreBlur3D; // vars[2]
+ procedure Spherical; // vars[3]
+ procedure Swirl; // vars[4]
+ procedure Horseshoe; // vars[5]
+ procedure Polar; // vars[6]
+
+ procedure Disc; // vars[7]
+ procedure Spiral; // vars[8]
+ procedure hyperbolic; // vars[9]
+ procedure Diamond; // vars[10]
+
+ procedure Eyefish; // vars[11]
+ procedure Bubble; // vars[12]
+ procedure Cylinder; // vars[13]
+ procedure Noise; // vars[14]
+ procedure Blur; // vars[15]
+ procedure Gaussian; // vars[16]
+ procedure ZBlur; // vars[17]
+ procedure Blur3D; // vars[18]
+
+ procedure PreBlur; // vars[19]
+ procedure PreZScale; // vars[2]
+ procedure PreZTranslate; // vars[21]
+ procedure PreRotateX; // vars[22]
+ procedure PreRotateY; // vars[23]
+
+ procedure Flatten; // vars[1]
+ procedure ZScale; // vars[24]
+ procedure ZTranslate; // vars[25]
+ procedure ZCone; // vars[26]
+
+ procedure PostRotateX; // vars[27]
+ procedure PostRotateY; // vars[28]
+
+ procedure PostMirrorX; // vars[29]
+ procedure PostMirrorY; // vars[30]
+ procedure PostMirrorZ; // vars[31]
+
+ procedure Hemisphere; // vars[32]
+ procedure Cross; // vars[33]
+ procedure Pyramid; // vars[34]
+ procedure Polar2; // vars[35]
+
+ function Mul33(const M1, M2: TMatrix): TMatrix;
+ function Identity: TMatrix;
+
+ procedure BuildFunctionlist;
+ procedure AddRegVariations;
+
+ public
+ constructor Create;
+ destructor Destroy; override;
+ procedure Clear(keepXaos: boolean = false);
+ procedure Prepare;
+ procedure PrepareInvalidXForm;
+
+ procedure Assign(Xform: TXForm);
+
+ procedure NextPoint(var CPpoint: TCPpoint);
+ procedure NextPointTo(var CPpoint, ToPoint: TCPpoint);
+ procedure NextPointXY(var px, py: double);
+ procedure NextPoint2C(var p: T2CPoint);
+
+ procedure Rotate(const degrees: double);
+ procedure Translate(const x, y: double);
+ procedure Multiply(const a, b, c, d: double);
+ procedure Scale(const s: double);
+
+ procedure GetVariable(const name: string; var Value: double);
+ procedure SetVariable(const name: string; var Value: double);
+ procedure ResetVariable(const name: string);
+
+ function GetVariableStr(const name: string): string;
+ procedure SetVariableStr(const name: string; var Value: string);
+
+ function ToXMLString: string;
+ function FinalToXMLString(IsEnabled: boolean): string;
+
+ function GetVariation(index : integer) : double;
+ procedure SetVariation(index : integer; value : double);
+ function NumVariations : integer;
+ end;
+
+implementation
+
+uses
+ SysUtils, Math, StrUtils;
+
+const
+ EPS: double = 1E-300;
+
+function TXForm.NumVariations : integer;
+begin
+ Result := length(vars);
+end;
+
+function TXForm.GetVariation(index : integer) : double;
+begin
+ Result := vars[index];
+end;
+
+procedure TXForm.SetVariation(index : integer; value : double);
+begin
+ {
+ if (vars[index] = 0) and (value <> 0) then begin
+ // Activate var here
+ end else begin
+ // Deactivate var here
+ end;
+ }
+ vars[index] := value;
+end;
+
+
+{ TXForm }
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TXForm.Create;
+var i: Integer;
+begin
+ AddRegVariations;
+ BuildFunctionlist;
+ SetLength(vars, NRLOCVAR + Length(FRegVariations));
+ // AV: set default variations order
+ ifs := TStringList.Create;
+ for i := 0 to NrVar-1 do ifs.Add(Varnames(i));
+
+ Clear;
+end;
+
+procedure TXForm.Clear(keepXaos: boolean = false);
+var
+ i: Integer;
+begin
+ density := 0;
+ color := 0;
+ symmetry := 0;
+ postXswap := false;
+ autoZscale := false;
+
+ c[0, 0] := 1;
+ c[0, 1] := 0;
+ c[1, 0] := 0;
+ c[1, 1] := 1;
+ c[2, 0] := 0;
+ c[2, 1] := 0;
+
+ p[0, 0] := 1;
+ p[0, 1] := 0;
+ p[1, 0] := 0;
+ p[1, 1] := 1;
+ p[2, 0] := 0;
+ p[2, 1] := 0;
+
+ vars[0] := 1;
+ for i := 1 to High(vars) do
+ vars[i] := 0;
+
+ if not keepXaos then // AV: for linked xforms
+ for i := 0 to NXFORMS do
+ modWeights[i] := 1;
+
+ for i := 0 to NrVar-1 do // restore default order
+ ifs.Strings[i] := Varnames(i);
+
+ transOpacity := 1;
+ pluginColor := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Prepare;
+var
+ i, v: integer;
+ CalculateAngle, CalculateSinCos, CalculateLength: boolean;
+ mode: double;
+ vn: string;
+begin
+ c00 := c[0][0];
+ c01 := c[0][1];
+ c10 := c[1][0];
+ c11 := c[1][1];
+ c20 := c[2][0];
+ c21 := c[2][1];
+
+ colorC1 := (1 + symmetry)/2;
+ colorC2 := color*(1 - symmetry)/2;
+
+ FNrFunctions := 0;
+
+ for i := 0 to High(FRegVariations) do begin
+ FRegVariations[i].FPX := @FPX;
+ FRegVariations[i].FPY := @FPY;
+ FRegVariations[i].FPz := @FPz;
+ FRegVariations[i].FTX := @FTX;
+ FRegVariations[i].FTY := @FTY;
+ FRegVariations[i].FTz := @FTz;
+ FRegVariations[i].a := c00;
+ FRegVariations[i].b := c01;
+ FRegVariations[i].c := c10;
+ FRegVariations[i].d := c11;
+ FRegVariations[i].e := c20;
+ FRegVariations[i].f := c21;
+ FRegVariations[i].color := @vc;
+
+ FRegVariations[i].vvar := vars[i + NRLOCVAR];
+ FRegVariations[i].Prepare;
+ FRegVariations[i].GetCalcFunction(FFunctionList[NRLOCVAR + i]);
+ end;
+
+ SetLength(FCalcFunctionList, NrVar + 2);
+
+ CalculateAngle := (vars[6] <> 0.0) or (vars[7] <> 0.0) or (vars[35] <> 0.0);
+// CalculateLength := False;
+ CalculateSinCos := (vars[8] <> 0.0) or (vars[10] <> 0.0);
+
+ // Pre- variations
+ for i := 0 to NrVar - 1 do
+ begin
+ v := GetVariationIndex(ifs[i]);
+ if (vars[v] <> 0.0) then
+ begin
+ vn := ifs[i];
+ if (LeftStr(vn, 4) = 'pre_') or (vn = 'flatten') then // AV: flatten became pre_
+ begin
+ FCalcFunctionList[FNrFunctions] := FFunctionList[v];
+ Inc(FNrFunctions);
+ end
+ // AV: added some universal variations
+ else if (vn = 'affine3D') or (vn = 'trianglecrop')
+ or (vn = 'projective') or (vn = 'spherecrop') then
+ begin
+ GetVariable(vn + '_mode', mode);
+ if (mode = 0) then
+ begin
+ FCalcFunctionList[FNrFunctions] := FFunctionList[v];
+ Inc(FNrFunctions);
+ end;
+ end;
+ end;
+ end;
+
+ // Precalc must be called after pre- vars
+ if CalculateAngle or CalculateSinCos then
+ begin
+ if CalculateAngle and CalculateSinCos then
+ FCalcFunctionList[FNrFunctions] := PrecalcAll
+ else if CalculateAngle then
+ FCalcFunctionList[FNrFunctions] := PrecalcAngle
+ else //if CalculateSinCos then
+ FCalcFunctionList[FNrFunctions] := PrecalcSinCos;
+ Inc(FNrFunctions);
+ end;
+
+ // Normal variations
+ for i := 0 to NrVar - 1 do
+ begin
+ v := GetVariationIndex(ifs[i]);
+ if (vars[v] <> 0.0) then
+ begin
+ vn := ifs[i];
+ if (LeftStr(vn, 4) = 'pre_') or
+ (LeftStr(vn, 5) = 'post_') or
+ (vn = 'flatten') then continue;
+ if (vn = 'affine3D') or (vn = 'trianglecrop')
+ or (vn = 'projective') or (vn = 'spherecrop') then
+ begin
+ GetVariable(vn + '_mode', mode);
+ if (mode <> 1) then continue;
+ end;
+
+ FCalcFunctionList[FNrFunctions] := FFunctionList[v];
+ Inc(FNrFunctions);
+ end;
+ end;
+
+ // Post- variations
+ for i := 0 to NrVar - 1 do
+ begin
+ v := GetVariationIndex(ifs[i]);
+ if (vars[v] <> 0.0) then
+ begin
+ vn := ifs[i];
+ if (LeftStr(vn, 5) = 'post_') then
+ begin
+ FCalcFunctionList[FNrFunctions] := FFunctionList[v];
+ Inc(FNrFunctions);
+ end
+ // AV: added some universal variations
+ else if (vn = 'affine3D') or (vn = 'trianglecrop')
+ or (vn = 'projective') or (vn = 'spherecrop') then
+ begin
+ GetVariable(ifs[i] + '_mode', mode);
+ if (mode = 2) then
+ begin
+ FCalcFunctionList[FNrFunctions] := FFunctionList[v];
+ Inc(FNrFunctions);
+ end;
+ end;
+ end;
+ end;
+
+ polar_vpi := vars[6]/pi;
+ disc_vpi := vars[7]/pi;
+ polar2_vpi := vars[35]/pi;
+ p2vv2 := polar2_vpi * 0.5;
+
+ gauss_rnd[0] := random;
+ gauss_rnd[1] := random;
+ gauss_rnd[2] := random;
+ gauss_rnd[3] := random;
+ gauss_N := 0;
+
+ rx_sin := sin(vars[22] * pi/2);
+ rx_cos := cos(vars[22] * pi/2);
+ ry_sin := sin(vars[23] * pi/2);
+ ry_cos := cos(vars[23] * pi/2);
+
+ px_sin := sin(vars[27] * pi/2);
+ px_cos := cos(vars[27] * pi/2);
+ py_sin := sin(vars[28] * pi/2);
+ py_cos := cos(vars[28] * pi/2);
+
+ if (p[0,0]<>1) or (p[0,1]<>0) or(p[1,0]<>0) or (p[1,1]<>1) or (p[2,0]<>0) or (p[2,1]<>0) then
+ begin
+ p00 := p[0][0];
+ p01 := p[0][1];
+ p10 := p[1][0];
+ p11 := p[1][1];
+ p20 := p[2][0];
+ p21 := p[2][1];
+
+ FCalcFunctionList[FNrFunctions] := DoPostTransform;
+ Inc(FNrFunctions);
+ end;
+
+end;
+
+procedure TXForm.PrepareInvalidXForm;
+begin
+ c00 := 1;
+ c01 := 0;
+ c10 := 0;
+ c11 := 1;
+ c20 := 0;
+ c21 := 0;
+
+ colorC1 := 1;
+ colorC2 := 0;
+
+ FNrFunctions := 1;
+ SetLength(FCalcFunctionList, 1);
+ FCalcFunctionList[0] := DoInvalidOperation;
+end;
+
+procedure TXForm.PrecalcAngle;
+{$ifndef _ASM_}
+begin
+ FAngle := arctan2(FTx, FTy);
+{$else}
+asm
+ fld qword ptr [eax + FTx]
+ fld qword ptr [eax + FTy]
+ fpatan
+ fstp qword ptr [eax + FAngle]
+ //fwait
+{$endif}
+end;
+
+procedure TXForm.PrecalcSinCos;
+{$ifndef _ASM_}
+begin
+ FLength := sqrt(sqr(FTx) + sqr(FTy)) + EPS;
+ FSinA := FTx / FLength;
+ FCosA := FTy / FLength;
+{$else}
+asm
+ fld qword ptr [eax + FTx]
+ fld qword ptr [eax + FTy]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fsqrt
+ fadd qword ptr [EPS] // avoid divide by zero...(?)
+ fdiv st(1), st
+ fdiv st(2), st
+ fstp qword ptr [eax + FLength]
+ fstp qword ptr [eax + FCosA]
+ fstp qword ptr [eax + FSinA]
+ //fwait
+{$endif}
+end;
+
+procedure TXForm.PrecalcAll;
+{$ifndef _ASM_}
+begin
+ FLength := sqrt(sqr(FTx) + sqr(FTy)) + EPS;
+ FSinA := FTx / FLength;
+ FCosA := FTy / FLength;
+ FAngle := arctan2(FTx, FTy);
+{$else}
+asm
+ fld qword ptr [eax + FTx]
+ fld qword ptr [eax + FTy]
+ fld st(1)
+ fld st(1)
+ fpatan
+ fstp qword ptr [eax + FAngle]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fsqrt
+ fadd qword ptr [EPS] // avoid divide by zero...(?)
+ fdiv st(1), st
+ fdiv st(2), st
+ fstp qword ptr [eax + FLength]
+ fstp qword ptr [eax + FCosA]
+ fstp qword ptr [eax + FSinA]
+ //fwait
+{$endif}
+end;
+
+procedure TXForm.DoPostTransform;
+{$ifndef _ASM_}
+var
+ tmp: double;
+begin
+ tmp := FPx;
+ FPx := p00 * FPx + p10 * FPy + p20;
+ FPy := p01 * tmp + p11 * FPy + p21;
+{$else}
+asm
+ fld qword ptr [eax + FPy]
+ fld qword ptr [eax + FPx]
+ fld st(1)
+ fmul qword ptr [eax + p10]
+ fld st(1)
+ fmul qword ptr [eax + p00]
+ faddp
+ fadd qword ptr [eax + p20]
+ fstp qword ptr [eax + FPx]
+ fmul qword ptr [eax + p01]
+ fld qword ptr [eax + p11]
+ fmulp st(2), st
+ faddp
+ fadd qword ptr [eax + p21]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+procedure TXForm.DoInvalidOperation;
+begin
+ raise EMathError.Create('FCalcFunction not initialized!? Probably corrupted flame.');
+end;
+
+//--0--////////////////////////////////////////////////////////////////////////
+procedure TXForm.Linear3D;
+{$ifndef _ASM_}
+begin
+ FPx := FPx + vars[0] * FTx;
+ FPy := FPy + vars[0] * FTy;
+ FPz := FPz + vars[0] * FTz;
+{$else}
+asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx]
+
+ fld qword ptr [eax + FTz]
+ fmul st, st(1)
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+
+ fld qword ptr [eax + FTx]
+ fmul st, st(1)
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fld qword ptr [eax + FTy]
+ fmulp
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Flatten;
+begin
+ // FPz := 0;
+ // AV: changed to pre_mode
+ FTz := 0;
+end;
+
+//--1--////////////////////////////////////////////////////////////////////////
+procedure TXForm.PreBlur3D; // AV
+var
+ r, sina, cosa, sinb, cosb: double;
+begin
+ Randomize;
+ SinCos(random * 2 * pi, sina, cosa);
+ r := vars[2] * (gauss_rnd[0] + gauss_rnd[1] + gauss_rnd[2] + gauss_rnd[3] - 2);
+ gauss_rnd[gauss_N] := random;
+ gauss_N := (gauss_N+1) and $3;
+
+ SinCos(random * pi, sinb, cosb);
+ FTx := FTx + r * sinb * cosa;
+ FTy := FTy + r * sinb * sina;
+ FTz := FTz + r * cosb;
+end;
+
+//--2--////////////////////////////////////////////////////////////////////////
+procedure TXForm.Spherical;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := vars[3] / (sqr(FTx) + sqr(FTy) + EPS);
+ FPx := FPx + FTx * r;
+ FPy := FPy + FTy * r;
+ FPz := FPz + FTz * vars[3];
+{$else}
+asm
+ fld qword ptr [eax + FTy]
+ fld qword ptr [eax + FTx]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fadd qword ptr [EPS]
+ mov edx, [eax + vars]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [edx + 3*8]
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main code
+ fdivr qword ptr [edx + 3*8]
+ fmul st(2), st
+ fmulp
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+//--3--////////////////////////////////////////////////////////////////////////
+procedure TXForm.Swirl;
+{$ifndef _ASM_}
+var
+ sinr, cosr: double;
+begin
+ SinCos(sqr(FTx) + sqr(FTy), sinr, cosr);
+ FPx := FPx + vars[4] * (sinr * FTx - cosr * FTy);
+ FPy := FPy + vars[4] * (cosr * FTx + sinr * FTy);
+ FPz := FPz + FTz * vars[4];
+{$else}
+asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 4*8]
+ // AV: 3D stuff
+ fld st
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main calculations
+ fld qword ptr [eax + FTy]
+ fld qword ptr [eax + FTx]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fsincos
+ fld st(1)
+ fmul st, st(3)
+ fld st(1)
+ fmul st, st(5)
+ fsubp st(1), st
+ fmul st, st(5)
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fmulp st(2), st
+ fmulp st(2), st
+ faddp
+ fmulp
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+//--4--////////////////////////////////////////////////////////////////////////
+procedure TXForm.Horseshoe;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := vars[5] / (sqrt(sqr(FTx) + sqr(FTy)) + EPS);
+ FPx := FPx + (FTx - FTy) * (FTx + FTy) * r;
+ FPy := FPy + (2*FTx*FTy) * r;
+ FPz := FPz + FTz * vars[5];
+{$else}
+asm
+ fld qword ptr [eax + FTx]
+ fld qword ptr [eax + FTy]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fsqrt
+ fadd qword ptr [EPS]
+ mov edx, [eax + vars]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [edx + 5*8]
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main code
+ fdivr qword ptr [edx + 5*8]
+ fld st(2)
+ fadd st, st(2)
+ fld st(3)
+ fsub st, st(3)
+ fmulp
+ fmul st, st(1)
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fmulp
+ fmulp
+ fadd st, st
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+//--5--////////////////////////////////////////////////////////////////////////
+procedure TXForm.Polar;
+{$ifndef _ASM_}
+begin
+ FPx := FPx + polar_vpi * FAngle; //vars[5] * FAngle / PI;
+ FPy := FPy + vars[6] * (sqrt(sqr(FTx) + sqr(FTy)) - 1.0);
+ FPz := FPz + FTz * vars[6];
+ {$else}
+asm
+ fld qword ptr [eax + FAngle]
+ fmul qword ptr [eax + polar_vpi]
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fld qword ptr [eax + FTx]
+ fmul st, st
+ fld qword ptr [eax + FTy]
+ fmul st, st
+ faddp
+ fsqrt
+ fld1
+ fsubp st(1), st
+ mov edx, [eax + vars]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [edx + 6*8]
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main code
+ fmul qword ptr [edx + 6*8]
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+//--6--////////////////////////////////////////////////////////////////////////
+procedure TXForm.Disc;
+{$ifndef _ASM_}
+var
+ r, sinr, cosr: double;
+begin
+ SinCos(PI * sqrt(sqr(FTx) + sqr(FTy)), sinr, cosr);
+ r := disc_vpi * FAngle; //vars[7] * FAngle / PI;
+ FPx := FPx + sinr * r;
+ FPy := FPy + cosr * r;
+ FPz := FPz + FTz * vars[7];
+{$else}
+asm
+ // AV: 3D stuff
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 7*8]
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main calculations
+ fld qword ptr [eax + disc_vpi]
+ fmul qword ptr [eax + FAngle]
+ fld qword ptr [eax + FTx]
+ fmul st, st
+ fld qword ptr [eax + FTy]
+ fmul st, st
+ faddp
+ fsqrt
+ fldpi
+ fmulp
+ fsincos
+ fmul st, st(2)
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fmulp
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fwait
+{$endif}
+end;
+
+//--7--////////////////////////////////////////////////////////////////////////
+procedure TXForm.Spiral;
+{$ifndef _ASM_}
+var
+ r, sinr, cosr: double;
+begin
+ r := Flength + EPS; // 1E-6;
+ SinCos(r, sinr, cosr);
+ r := vars[8] / r;
+ FPx := FPx + (FCosA + sinr) * r;
+ FPy := FPy + (FsinA - cosr) * r;
+ FPz := FPz + FTz * vars[8];
+{$else}
+asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 8*8]
+ // AV: 3D stuff
+ fld st
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main calculations
+ fld qword ptr [eax + FLength]
+ fadd qword ptr [EPS]
+ fdiv st(1), st
+ fsincos
+ fsubr qword ptr [eax + FSinA]
+ fmul st, st(2)
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fadd qword ptr [eax + FCosA]
+ fmulp
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fwait
+{$endif}
+end;
+
+//--10--///////////////////////////////////////////////////////////////////////
+procedure TXForm.Hyperbolic;
+{$ifndef _ASM_}
+begin
+ FPx := FPx + vars[9] * FTx / (sqr(FTx) + sqr(FTy) + EPS);
+ FPy := FPy + vars[9] * FTy;
+ FPz := FPz + FTz * vars[9];
+ {$else}
+ asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 9*8]
+ // AV: 3D stuff
+ fld st
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main calculations
+ fld qword ptr [eax + FTy]
+ fld qword ptr [eax + FTx]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fadd qword ptr [EPS]
+ fdivp st(1), st
+ fmul st, st(2)
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fmulp
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+//--11--///////////////////////////////////////////////////////////////////////
+procedure TXForm.Diamond; // AV: Diamond, i.e. rotated Square
+ {$ifndef _ASM_}
+var
+ sinr, cosr: double;
+begin
+ SinCos(FLength, sinr, cosr);
+ FPx := FPx + vars[10] * FSinA * cosr;
+ FPy := FPy + vars[10] * FCosA * sinr;
+ FPz := FPz + FTz * vars[10];
+{$else}
+asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 10*8]
+ // AV: 3D stuff
+ fld st
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main calculations
+ fld qword ptr [eax + FLength]
+ fsincos
+ fmul qword ptr [eax + FSinA]
+ fmul st, st(2)
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fmul qword ptr [eax + FCosA]
+ fmulp
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+//--12--///////////////////////////////////////////////////////////////////////
+procedure TXForm.Eyefish;
+ {$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := 2 * vars[11] / (sqrt(sqr(FTx) + sqr(FTy)) + 1);
+ FPx := FPx + r * FTx;
+ FPy := FPy + r * FTy;
+ FPz := FPz + FTz * vars[11];
+ {$else}
+asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 11*8]
+ // AV: 3D stuff
+ fld st
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main calculations
+ fadd st, st
+ fld qword ptr [eax + FTy]
+ fld qword ptr [eax + FTx]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fsqrt
+ fld1
+ faddp
+ fdivp st(3), st
+ fmul st, st(2)
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fmulp
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Bubble;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := (sqr(FTx) + sqr(FTy))/4 + 1;
+ FPz := FPz + vars[12] * (2 / r - 1);
+
+ r := vars[12] / r;
+
+ FPx := FPx + r * FTx;
+ FPy := FPy + r * FTy;
+{$else}
+asm
+ fld qword ptr [eax + FTy]
+ fld qword ptr [eax + FTx]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fld1
+ fadd st, st
+ fadd st, st
+ fdivp st(1), st
+
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 12*8]
+
+ fld1
+ fadd st(2), st
+ fdivr st(2), st
+
+ fld st(2)
+ fadd st, st
+ fsubrp st(1), st
+ fmul st, st(1)
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+
+ fmulp
+
+ fmul st(2), st
+ fmulp
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Cylinder;
+{$ifndef _ASM_}
+begin
+ FPx := FPx + vars[13] * sin(FTx);
+ FPy := FPy + vars[13] * FTy;
+ FPz := FPz + vars[13] * cos(FTx);
+{$else}
+asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 13*8]
+ fld qword ptr [eax + FTx]
+ fsincos
+ fmul st, st(2)
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ fld qword ptr [eax + FTy]
+ fmul st, st(2)
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fmulp
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Noise;
+{$ifndef _ASM_}
+var
+ r, s, sinr, cosr: double;
+begin
+ // Randomize here = HACK! Fix me...
+ Randomize; SinCos(random * 2*pi, sinr, cosr);
+ s := vars[14];
+ r := s * random;
+ FPx := FPx + FTx * r * cosr;
+ FPy := FPy + FTy * r * sinr;
+ FPz := FPz + FTz * s;
+{$else}
+asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 14*8]
+ // AV: 3D stuff
+ fld st
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main calculations
+ call AsmRandExt
+ fmulp
+ call AsmRandExt
+ fadd st, st
+ fldpi
+ fmulp
+ fsincos
+ fmul st, st(2)
+ fmul qword ptr [eax + FTx]
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fmulp
+ fmul qword ptr [eax + FTy]
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Blur;
+{$ifndef _ASM_}
+var
+ r, sina, cosa: double;
+begin
+ // Randomize here = HACK! Fix me...
+ Randomize; SinCos(random * 2*pi, sina, cosa);
+ r := vars[15] * random;
+ FPx := FPx + r * cosa;
+ FPy := FPy + r * sina;
+ FPz := FPz + vars[15] * FTz;
+{$else}
+asm
+ mov edx, [eax + vars]
+ fld qword ptr [edx + 15*8]
+ // AV: 3D stuff
+ fld st
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main calculations
+ call AsmRandExt
+ fmulp
+ call AsmRandExt
+ fadd st, st
+ fldpi
+ fmulp
+ fsincos
+ fmul st, st(2)
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fmulp
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Gaussian;
+{$ifndef _ASM_}
+var
+ r, sina, cosa: double;
+begin
+ // Randomize here = HACK! Fix me...
+ Randomize; SinCos(random * 2*pi, sina, cosa);
+ r := vars[16] * (gauss_rnd[0] + gauss_rnd[1] + gauss_rnd[2] + gauss_rnd[3] - 2);
+ gauss_rnd[gauss_N] := random;
+ gauss_N := (gauss_N+1) and $3;
+
+ FPx := FPx + r * cosa;
+ FPy := FPy + r * sina;
+ //FPz := FPz + vars[16] * FTz; // AV removed
+{$else}
+asm
+ fld qword ptr [eax + gauss_rnd]
+ fadd qword ptr [eax + gauss_rnd+8]
+ fadd qword ptr [eax + gauss_rnd+16]
+ fadd qword ptr [eax + gauss_rnd+24]
+ fld1
+ fadd st,st
+ fsubp st(1),st
+ mov edx, [eax + vars]
+ // AV: removed 3D-support since we have zcale and blur3D
+ {
+ fld qword ptr [edx + 16*8]
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ }
+ fmul qword ptr [edx + 16*8]
+ call AsmRandExt
+ mov edx, [eax + gauss_N]
+ fst qword ptr [eax + gauss_rnd + edx*8]
+ inc edx
+ and edx,$03
+ mov [eax + gauss_N], edx
+
+ fadd st, st
+ fldpi
+ fmulp
+ fsincos
+ fmul st, st(2)
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fmulp
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.ZBlur;
+{$ifndef _ASM_}
+begin
+ FPz := FPz + vars[17] * (gauss_rnd[0] + gauss_rnd[1] + gauss_rnd[2] + gauss_rnd[3] - 2);
+ gauss_rnd[gauss_N] := random;
+ gauss_N := (gauss_N+1) and $3;
+{$else}
+asm
+ fld qword ptr [eax + gauss_rnd]
+ fadd qword ptr [eax + gauss_rnd+8]
+ fadd qword ptr [eax + gauss_rnd+16]
+ fadd qword ptr [eax + gauss_rnd+24]
+ fld1
+ fadd st,st
+ fsubp st(1),st
+ mov edx, [eax + vars]
+ fmul qword ptr [edx + 17*8]
+ call AsmRandExt
+ mov edx, [eax + gauss_N]
+ fstp qword ptr [eax + gauss_rnd + edx*8]
+ inc edx
+ and edx,$03
+ mov [eax + gauss_N], edx
+
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Blur3D;
+var
+ r, sina, cosa, sinb, cosb: double;
+begin
+ // Randomize here = HACK! Fix me...
+ Randomize; SinCos(random * 2*pi, sina, cosa);
+ r := vars[18] * (gauss_rnd[0] + gauss_rnd[1] + gauss_rnd[2] + gauss_rnd[3] - 2);
+ gauss_rnd[gauss_N] := random;
+ gauss_N := (gauss_N+1) and $3;
+
+ SinCos(random * pi, sinb, cosb);
+ FPx := FPx + r * sinb * cosa;
+ FPy := FPy + r * sinb * sina;
+ FPz := FPz + r * cosb;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PreBlur;
+{$ifndef _ASM_}
+var
+ r, sina, cosa: double;
+begin
+ // Randomize here = HACK! Fix me...
+ Randomize; SinCos(random * 2*pi, sina, cosa);
+ r := vars[19] * (gauss_rnd[0] + gauss_rnd[1] + gauss_rnd[2] + gauss_rnd[3] - 2);
+ gauss_rnd[gauss_N] := random;
+ gauss_N := (gauss_N+1) and $3;
+
+ FTx := FTx + r * cosa;
+ FTy := FTy + r * sina;
+{$else}
+asm
+ fld qword ptr [eax + gauss_rnd]
+ fadd qword ptr [eax + gauss_rnd+8]
+ fadd qword ptr [eax + gauss_rnd+16]
+ fadd qword ptr [eax + gauss_rnd+24]
+ fld1
+ fadd st,st
+ fsubp st(1),st
+ mov edx, [eax + vars]
+ fmul qword ptr [edx + 19*8]
+ call AsmRandExt
+ mov edx, [eax + gauss_N]
+ fst qword ptr [eax + gauss_rnd + edx*8]
+ inc edx
+ and edx,$03
+ mov [eax + gauss_N], edx
+
+ fadd st, st
+ fldpi
+ fmulp
+ fsincos
+ fmul st, st(2)
+ fadd qword ptr [eax + FTx]
+ fstp qword ptr [eax + FTx]
+ fmulp
+ fadd qword ptr [eax + FTy]
+ fstp qword ptr [eax + FTy]
+ fwait
+{$endif}
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PreZScale;
+begin
+ FTz := FTz * vars[20];
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PreZTranslate;
+begin
+ FTz := FTz + vars[21];
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PreRotateX;
+var
+ z: double;
+begin
+ z := rx_cos * FTz - rx_sin * FTy;
+ FTy := rx_sin * FTz + rx_cos * FTy;
+ FTz := z;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PreRotateY;
+var
+ x: double;
+begin
+ x := ry_cos * FTx - ry_sin * FTz;
+ FTz := ry_sin * FTx + ry_cos * FTz;
+ FTx := x;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.ZScale;
+{$ifndef _ASM_}
+begin
+ FPz := FPz + vars[24] * FTz;
+{$else}
+asm
+ fld qword ptr [eax + FTz]
+ mov edx, [eax + vars]
+ fmul qword ptr [edx + 24*8]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.ZTranslate;
+begin
+ FPz := FPz + vars[25];
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.ZCone;
+{$ifndef _ASM_}
+begin
+ FPz := FPz + vars[26] * sqrt(sqr(FTx) + sqr(FTy));
+{$else}
+asm
+ fld qword ptr [eax + FTx]
+ fmul st,st
+ fld qword ptr [eax + FTy]
+ fmul st,st
+ faddp
+ fsqrt
+ mov edx, [eax + vars]
+ fmul qword ptr [edx + 26*8]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PostRotateX;
+var
+ z: double;
+begin
+ z := px_cos * FPz - px_sin * FPy;
+ FPy := px_sin * FPz + px_cos * FPy;
+ FPz := z;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PostRotateY;
+var
+ x: double;
+begin
+ x := py_cos * FPx - py_sin * FPz;
+ FPz := py_sin * FPx + py_cos * FPz;
+ FPx := x;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PostMirrorX;
+begin
+ FPx := abs(FPx);
+ if (random(2) = 1) then FPx := -FPx;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PostMirrorY;
+begin
+ FPy := abs(FPy);
+ if (random(2) = 1) then FPy := -FPy;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.PostMirrorZ;
+begin
+ FPz := abs(FPz);
+ if (random(2) = 1) then FPz := -FPz;
+end;
+
+/////////////////////////////////
+procedure TXForm.Hemisphere;
+{$ifndef _ASM_}
+var
+ t: double;
+begin
+ t := vars[32] / sqrt(sqr(FTx) + sqr(FTy) + 1);
+
+ FPx := FPx + FTx * t;
+ FPy := FPy + FTy * t;
+ FPz := FPz + t;
+{$else}
+ asm // rewritten by AV
+ fld qword ptr [eax + FTy]
+ fld qword ptr [eax + FTx]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fld1
+ faddp
+ fsqrt
+ mov edx, [eax + vars]
+ fdivr qword ptr [edx + 32*8]
+ fmul st(2), st
+ fmul st(1), st
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+//////////////////////////////
+procedure TXForm.Cross;
+const epsv: double = 1.0e-20;
+ {$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := abs((FTx - FTy) * (FTx + FTy)) + epsv; // AV: fixed
+ // AV: abs cannot be negative, so it's useless
+ //if (r < 0) then r := r * -1.0;
+ r := vars[33] / r;
+
+ FPx := FPx + FTx * r;
+ FPy := FPy + FTy * r;
+ FPz := FPz + vars[33] * FTz;
+{$else}
+ asm //written by AV
+ fld qword ptr [eax + FTy]
+ fld qword ptr [eax + FTx]
+ fld st
+ fsub st, st(2)
+ fld st(1)
+ fadd st, st(3)
+ fmulp
+ fabs
+ fadd epsv
+ mov edx, [eax + vars]
+ // for Apo7X.15C compatibility
+ fld qword ptr [edx + 33*8]
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main code
+ fdivr qword ptr [edx + 33*8]
+ fmul st(2), st
+ fmulp
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+
+/////////////////////////////
+procedure TXForm.Pyramid;
+var
+ x, y, z, r: double;
+begin
+ x := IntPower(FTx, 3);
+ y := IntPower(FTy, 3);
+ z := IntPower(abs(FTz), 3);
+ r := vars[34] / (abs(x) + abs(y) + z + 1E-9);
+ FPx := FPx + x * r;
+ FPy := FPy + y * r;
+ FPz := FPz + z * r;
+end;
+////////////////////////////////////////////////
+
+procedure TXForm.Polar2;
+{$ifndef _ASM_}
+begin
+ FPx := FPx + polar2_vpi * FAngle;
+ FPy := FPy + p2vv2 * Ln(sqr(FTx) + sqr(FTy) + EPS);
+ FPz := FPz + FTz * vars[35];
+ {$else}
+asm // written by AV
+ fld qword ptr [eax + FAngle]
+ fmul qword ptr [eax + polar2_vpi]
+ fadd qword ptr [eax + FPx]
+ fstp qword ptr [eax + FPx]
+
+ fld qword ptr [eax + FTx]
+ fmul st, st
+ fld qword ptr [eax + FTy]
+ fmul st, st
+ faddp
+ fadd qword ptr [EPS]
+ fldln2
+ fxch
+ fyl2x
+ fmul qword ptr [eax + p2vv2]
+ mov edx, [eax + vars]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [edx + 35*8]
+ fmul qword ptr [eax + FTz]
+ fadd qword ptr [eax + FPz]
+ fstp qword ptr [eax + FPz]
+ // main code
+ fmul qword ptr [edx + 35*8]
+ fadd qword ptr [eax + FPy]
+ fstp qword ptr [eax + FPy]
+ fwait
+{$endif}
+end;
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TXForm.NextPoint(var CPpoint: TCPpoint);
+var
+ i: Integer;
+begin
+ // first compute the color coord
+ CPpoint.c := CPpoint.c * colorC1 + colorC2;
+ vc := CPpoint.c;
+
+ FTx := c00 * CPpoint.x + c10 * CPpoint.y + c20;
+ FTy := c01 * CPpoint.x + c11 * CPpoint.y + c21;
+ FTz := CPpoint.z;
+
+ Fpx := 0;
+ Fpy := 0;
+ Fpz := 0;
+
+ for i:= 0 to FNrFunctions-1 do
+ FCalcFunctionList[i];
+
+ CPpoint.c := CPpoint.c + pluginColor * (vc - CPpoint.c);
+ CPpoint.x := FPx;
+ CPpoint.y := FPy;
+ CPPoint.z := FPz;
+end;
+
+procedure TXForm.NextPointTo(var CPpoint, ToPoint: TCPpoint);
+var
+ i: Integer;
+begin
+ ToPoint.c := CPpoint.c * colorC1 + colorC2;
+ vc := ToPoint.c;
+
+ FTx := c00 * CPpoint.x + c10 * CPpoint.y + c20;
+ FTy := c01 * CPpoint.x + c11 * CPpoint.y + c21;
+ FTz := CPpoint.z;
+
+ Fpx := 0;
+ Fpy := 0;
+ Fpz := 0;
+
+ for i:= 0 to FNrFunctions-1 do
+ FCalcFunctionList[i];
+
+ ToPoint.c := ToPoint.c + pluginColor * (vc - ToPoint.c);
+ ToPoint.x := FPx;
+ ToPoint.y := FPy;
+ ToPoint.z := FPz; //?
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.NextPoint2C(var p: T2CPoint);
+var
+ i: Integer;
+begin
+ // first compute the color coord
+ p.c1 := p.c1 * colorC1 + colorC2;
+ p.c2 := p.c2 * colorC1 + colorC2;
+
+ FTx := c00 * p.x + c10 * p.y + c20;
+ FTy := c01 * p.x + c11 * p.y + c21;
+
+ Fpx := 0;
+ Fpy := 0;
+
+ for i:= 0 to FNrFunctions-1 do
+ FCalcFunctionList[i];
+
+ p.x := FPx;
+ p.y := FPy;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.NextPointXY(var px, py: double);
+var
+ i: integer;
+begin
+ FTx := c00 * px + c10 * py + c20;
+ FTy := c01 * px + c11 * py + c21;
+ FTz := 0;
+
+ Fpx := 0;
+ Fpy := 0;
+
+ for i:= 0 to FNrFunctions-1 do
+ FCalcFunctionList[i];
+
+ px := FPx;
+ py := FPy;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+{
+[00 01 02]
+[10 11 12]
+[20 21 22]
+
+[a b e ]
+[c d f ]
+[0 0 1 ]
+}
+
+function TXForm.Mul33(const M1, M2: TMatrix): TMatrix;
+begin
+ result[0, 0] := M1[0][0] * M2[0][0] + M1[0][1] * M2[1][0] + M1[0][2] * M2[2][0];
+ result[0, 1] := M1[0][0] * M2[0][1] + M1[0][1] * M2[1][1] + M1[0][2] * M2[2][1];
+ result[0, 2] := M1[0][0] * M2[0][2] + M1[0][1] * M2[1][2] + M1[0][2] * M2[2][2];
+ result[1, 0] := M1[1][0] * M2[0][0] + M1[1][1] * M2[1][0] + M1[1][2] * M2[2][0];
+ result[1, 1] := M1[1][0] * M2[0][1] + M1[1][1] * M2[1][1] + M1[1][2] * M2[2][1];
+ result[1, 2] := M1[1][0] * M2[0][2] + M1[1][1] * M2[1][2] + M1[1][2] * M2[2][2];
+ result[2, 0] := M1[2][0] * M2[0][0] + M1[2][1] * M2[1][0] + M1[2][2] * M2[2][0];
+ result[2, 1] := M1[2][0] * M2[0][1] + M1[2][1] * M2[1][1] + M1[2][2] * M2[2][1]; // AV: fixed indices
+ result[2, 2] := M1[2][0] * M2[0][2] + M1[2][1] * M2[1][2] + M1[2][2] * M2[2][2]; // AV: fixed indices
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TXForm.Identity: TMatrix;
+var
+ i, j: integer;
+begin
+ for i := 0 to 2 do
+ for j := 0 to 2 do
+ Result[i, j] := 0;
+ Result[0][0] := 1;
+ Result[1][1] := 1;
+ Result[2][2] := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Rotate(const degrees: double);
+var
+ r: double;
+ Matrix, M1: TMatrix;
+begin
+ r := degrees * pi / 180;
+ M1 := Identity;
+ M1[0, 0] := cos(r);
+ M1[0, 1] := -sin(r);
+ M1[1, 0] := sin(r);
+ M1[1, 1] := cos(r);
+ Matrix := Identity;
+
+ Matrix[0][0] := c[0, 0];
+ Matrix[0][1] := c[0, 1];
+ Matrix[1][0] := c[1, 0];
+ Matrix[1][1] := c[1, 1];
+ Matrix[0][2] := c[2, 0];
+ Matrix[1][2] := c[2, 1];
+ Matrix := Mul33(Matrix, M1);
+ c[0, 0] := Matrix[0][0];
+ c[0, 1] := Matrix[0][1];
+ c[1, 0] := Matrix[1][0];
+ c[1, 1] := Matrix[1][1];
+ c[2, 0] := Matrix[0][2];
+ c[2, 1] := Matrix[1][2];
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Translate(const x, y: double);
+var
+ Matrix, M1: TMatrix;
+begin
+ M1 := Identity;
+ M1[0, 2] := x;
+ M1[1, 2] := y;
+ Matrix := Identity;
+
+ Matrix[0][0] := c[0, 0];
+ Matrix[0][1] := c[0, 1];
+ Matrix[1][0] := c[1, 0];
+ Matrix[1][1] := c[1, 1];
+ Matrix[0][2] := c[2, 0];
+ Matrix[1][2] := c[2, 1];
+ Matrix := Mul33(Matrix, M1);
+ c[0, 0] := Matrix[0][0];
+ c[0, 1] := Matrix[0][1];
+ c[1, 0] := Matrix[1][0];
+ c[1, 1] := Matrix[1][1];
+ c[2, 0] := Matrix[0][2];
+ c[2, 1] := Matrix[1][2];
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Multiply(const a, b, c, d: double);
+var
+ Matrix, M1: TMatrix;
+begin
+ M1 := Identity;
+ M1[0, 0] := a;
+ M1[0, 1] := b;
+ M1[1, 0] := c;
+ M1[1, 1] := d;
+ Matrix := Identity;
+ Matrix[0][0] := Self.c[0, 0];
+ Matrix[0][1] := Self.c[0, 1];
+ Matrix[1][0] := Self.c[1, 0];
+ Matrix[1][1] := Self.c[1, 1];
+ Matrix[0][2] := Self.c[2, 0];
+ Matrix[1][2] := Self.c[2, 1];
+ Matrix := Mul33(Matrix, M1);
+ Self.c[0, 0] := Matrix[0][0];
+ Self.c[0, 1] := Matrix[0][1];
+ Self.c[1, 0] := Matrix[1][0];
+ Self.c[1, 1] := Matrix[1][1];
+ Self.c[2, 0] := Matrix[0][2];
+ Self.c[2, 1] := Matrix[1][2];
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Scale(const s: double);
+var
+ Matrix, M1: TMatrix;
+begin
+ M1 := Identity;
+ M1[0, 0] := s;
+ M1[1, 1] := s;
+ Matrix := Identity;
+ Matrix[0][0] := c[0, 0];
+ Matrix[0][1] := c[0, 1];
+ Matrix[1][0] := c[1, 0];
+ Matrix[1][1] := c[1, 1];
+ Matrix[0][2] := c[2, 0];
+ Matrix[1][2] := c[2, 1];
+ Matrix := Mul33(Matrix, M1);
+ c[0, 0] := Matrix[0][0];
+ c[0, 1] := Matrix[0][1];
+ c[1, 0] := Matrix[1][0];
+ c[1, 1] := Matrix[1][1];
+ c[2, 0] := Matrix[0][2];
+ c[2, 1] := Matrix[1][2];
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+destructor TXForm.Destroy;
+var
+ i: integer;
+begin
+
+ for i := 0 to High(FRegVariations) do
+ FRegVariations[i].Free;
+
+ if assigned(ifs) then ifs.Clear;
+ ifs.Free; // AV
+
+ inherited;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.BuildFunctionlist;
+begin
+ SetLength(FFunctionList, NrVar + Length(FRegVariations));
+
+ //fixed
+ FFunctionList[0] := Linear3D;
+ FFunctionList[1] := Flatten; // AV: replased 2D-Linear
+ FFunctionList[2] := PreBlur3D; // AV: replaced Sinusoidal
+ FFunctionList[3] := Spherical;
+ FFunctionList[4] := Swirl;
+ FFunctionList[5] := Horseshoe;
+ FFunctionList[6] := Polar;
+ FFunctionList[7] := Disc;
+ FFunctionList[8] := Spiral;
+ FFunctionList[9] := Hyperbolic;
+ FFunctionList[10] := Diamond; // AV: renamed from Square
+ FFunctionList[11] := Eyefish;
+ FFunctionList[12] := Bubble;
+ FFunctionList[13] := Cylinder;
+ FFunctionList[14] := Noise;
+ FFunctionList[15] := Blur;
+ FFunctionList[16] := Gaussian;
+ FFunctionList[17] := ZBlur;
+ FFunctionList[18] := Blur3D;
+
+ FFunctionList[19] := PreBlur;
+ FFunctionList[20] := PreZScale; // AV: index 20 is used by auto_pre_zscale option
+ FFunctionList[21] := PreZTranslate;
+ FFunctionList[22] := PreRotateX;
+ FFunctionList[23] := PreRotateY;
+
+ FFunctionList[24] := ZScale;
+ FFunctionList[25] := ZTranslate;
+ FFunctionList[26] := ZCone;
+
+ FFunctionList[27] := PostRotateX;
+ FFunctionList[28] := PostRotateY;
+ // AV: new local variations
+ FFunctionList[29] := PostMirrorX;
+ FFunctionList[30] := PostMirrorY;
+ FFunctionList[31] := PostMirrorZ;
+
+ FFunctionList[32] := Hemisphere;
+ FFunctionList[33] := Cross;
+ FFunctionList[34] := Pyramid;
+ FFunctionList[35] := Polar2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.AddRegVariations;
+var
+ i: integer;
+begin
+ SetLength(FRegVariations, GetNrRegisteredVariations);
+ for i := 0 to GetNrRegisteredVariations - 1 do begin
+ FRegVariations[i] := GetRegisteredVariation(i).GetInstance;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.Assign(XForm: TXForm);
+var
+ i,j: integer;
+ Name: string;
+ Value: double;
+begin
+ if Not assigned(XForm) then
+ Exit;
+
+ for i := 0 to High(vars) do
+ vars[i] := XForm.vars[i];
+
+ c := Xform.c;
+ p := Xform.p;
+ density := XForm.density;
+ color := XForm.color;
+ color2 := XForm.color2;
+ symmetry := XForm.symmetry;
+ // Orientationtype := XForm.Orientationtype;
+ TransformName := XForm.TransformName;
+
+ postXswap := Xform.postXswap;
+ autoZscale := Xform.autoZscale;
+
+ for i := 0 to High(FRegVariations) do begin
+ for j := 0 to FRegVariations[i].GetNrVariables - 1 do begin
+ Name := FRegVariations[i].GetVariableNameAt(j);
+ XForm.FRegVariations[i].GetVariable(Name, Value);
+ FRegVariations[i].SetVariable(Name, Value);
+ end;
+ end;
+
+ for i := 0 to High(modWeights) do
+ modWeights[i] := xform.modWeights[i];
+
+ ifs.Assign(xform.ifs); // AV
+
+ transOpacity := xform.transOpacity;
+ pluginColor := xform.pluginColor;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TXForm.ToXMLString: string;
+var
+ i, j: integer;
+ Name: string;
+ Value: double;
+ numChaos: integer;
+ strvar: string;
+begin
+ result := Format(' 0 then result := result + format('symmetry="%g" ', [symmetry]);
+
+ ////// AV: write variation order
+ strvar := '';
+ for i := 0 to nrvar - 1 do begin
+ if vars[GetVariationIndex(ifs[i])] <> 0 then
+ strvar := strvar + ifs[i] + #32;
+ end;
+ if (strvar <> '') and (pos(#32, strvar) < length(strvar)) then
+ Result := Result + format('var_order="%s" ', [strvar]);
+ ///////////////////////
+(*
+ for i := 0 to nrvar - 1 do begin
+ if vars[i] <> 0 then
+ Result := Result + varnames(i) + format('="%g" ', [vars[i]]);
+ end;
+ *)
+ for i := 0 to nrvar - 1 do // AV: write in correct order
+ begin
+ Name := ifs[i];
+ Value := vars[GetVariationIndex(Name)];
+ if Value <> 0 then
+ Result := Result + Name + format('="%g" ', [Value]);
+ end;
+
+ Result := Result + Format('coefs="%g %g %g %g %g %g" ', [c[0,0], c[0,1], c[1,0], c[1,1], c[2,0], c[2,1]]);
+ if (p[0,0]<>1) or (p[0,1]<>0) or(p[1,0]<>0) or (p[1,1]<>1) or (p[2,0]<>0) or (p[2,1]<>0) then
+ Result := Result + Format('post="%g %g %g %g %g %g" ', [p[0,0], p[0,1], p[1,0], p[1,1], p[2,0], p[2,1]]);
+
+ for i := 0 to High(FRegVariations) do begin
+ if vars[i+NRLOCVAR] <> 0 then
+ for j := 0 to FRegVariations[i].GetNrVariables - 1 do begin
+ Name := FRegVariations[i].GetVariableNameAt(j);
+ Result := Result + Format('%s="%s" ', [name, FRegVariations[i].GetVariableStr(Name)]);
+ end;
+ end;
+
+ numChaos := -1;
+ for i := NXFORMS-1 downto 0 do
+ if modWeights[i] <> 1 then begin
+ numChaos := i;
+ break;
+ end;
+ if numChaos >= 0 then begin
+ Result := Result + 'chaos="';
+ for i := 0 to numChaos do
+ Result := Result + Format('%g ', [modWeights[i]]);
+ Result := Result + '" ';
+ end;
+
+ Result := Result + Format('opacity="%g" ', [transOpacity]);
+
+ if TransformName <> '' then
+ Result := Result + 'name="' + TransformName + '"';
+
+ if pluginColor <> 1 then
+ Result := Result + Format('var_color="%g" ', [pluginColor]);
+
+ Result := Result + '/>';
+end;
+
+function TXForm.FinalToXMLString(IsEnabled: boolean): string;
+var
+ i, j: integer;
+ Name: string;
+ Value: double;
+ strvar: string;
+begin
+ // result := Format(' 0 then result := result + format('symmetry="%g" ', [symmetry]);
+
+ ////// AV: write variation order
+ strvar := '';
+ for i := 0 to nrvar - 1 do begin
+ if vars[GetVariationIndex(ifs[i])] <> 0 then
+ strvar := strvar + ifs[i] + #32;
+ end;
+ if (strvar <> '') and (pos(#32, strvar) < length(strvar)) then
+ Result := Result + format('var_order="%s" ', [strvar]);
+ //////////////////////////////////////////
+ (*
+ for i := 0 to nrvar - 1 do begin
+ if vars[i] <> 0 then
+ Result := Result + varnames(i) + format('="%g" ', [vars[i]]);
+ end;
+ *)
+ for i := 0 to nrvar - 1 do // AV: write in correct order
+ begin
+ Name := ifs[i];
+ Value := vars[GetVariationIndex(Name)];
+ if Value <> 0 then
+ Result := Result + Name + format('="%g" ', [Value]);
+ end;
+
+ Result := Result + Format('coefs="%g %g %g %g %g %g" ', [c[0,0], c[0,1], c[1,0], c[1,1], c[2,0], c[2,1]]);
+ if (p[0,0]<>1) or (p[0,1]<>0) or(p[1,0]<>0) or (p[1,1]<>1) or (p[2,0]<>0) or (p[2,1]<>0) then
+ Result := Result + Format('post="%g %g %g %g %g %g" ', [p[0,0], p[0,1], p[1,0], p[1,1], p[2,0], p[2,1]]);
+ if pluginColor <> 1 then
+ Result := Result + Format('var_color="%g" ', [pluginColor]);
+
+ for i := 0 to High(FRegVariations) do begin
+ if vars[i+NRLOCVAR] <> 0 then
+ for j := 0 to FRegVariations[i].GetNrVariables - 1 do begin
+ Name := FRegVariations[i].GetVariableNameAt(j);
+ Result := Result + Format('%s="%s" ', [name, FRegVariations[i].GetVariableStr(Name)]);
+ end;
+ end;
+
+ Result := Result + '/>';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TXForm.GetVariable(const name: string; var Value: double);
+var
+ i: integer;
+begin
+ for i := 0 to High(FRegVariations) do
+ if FRegVariations[i].GetVariable(name, value) then
+ break;
+end;
+
+procedure TXForm.SetVariable(const name: string; var Value: double);
+var
+ i: integer;
+begin
+ for i := 0 to High(FRegVariations) do
+ if FRegVariations[i].SetVariable(name, value) then
+ break;
+end;
+
+procedure TXForm.ResetVariable(const name: string);
+var
+ i: integer;
+begin
+ for i := 0 to High(FRegVariations) do
+ if FRegVariations[i].ResetVariable(name) then
+ break;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TXForm.GetVariableStr(const name: string): string;
+var
+ i: integer;
+begin
+ for i := 0 to High(FRegVariations) do begin
+ Result := FRegVariations[i].GetVariableStr(name);
+ if Result <> '' then break;
+ end;
+end;
+
+procedure TXForm.SetVariableStr(const name: string; var Value: string);
+var
+ i: integer;
+begin
+ for i := 0 to High(FRegVariations) do begin
+ if FRegVariations[i].SetVariableStr(name, value) then break;
+ end;
+end;
+
+end.
diff --git a/Forms/About.dfm b/Forms/About.dfm
new file mode 100644
index 0000000..2b00115
--- /dev/null
+++ b/Forms/About.dfm
@@ -0,0 +1,5367 @@
+object AboutForm: TAboutForm
+ Left = 461
+ Top = 320
+ BorderStyle = bsDialog
+ Caption = 'Apophysis'
+ ClientHeight = 442
+ ClientWidth = 429
+ Color = clWindow
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -12
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Image1: TImage
+ Left = 261
+ Top = 80
+ Width = 160
+ Height = 320
+ Picture.Data = {
+ 07544269746D617036580200424D36580200000000003600000028000000A000
+ 0000400100000100180000000000005802000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000035718235B3FF1970BA157DD718C1FF13BAFF10B3FD0D98FF11BCFF
+ 063C60000000063C6E11AFFF11A9FF10BAFF05376710ABFF12B8FF13C6FF0F9A
+ FF10A1FF1085E9074B890F99FF0B76CF0FA1FC0FB3F50C99D8042B5000000000
+ 0000000000000000000000000000010C160A6BD0043567032A5711ADFF11A9FF
+ 0D7FDD0D99F610A5FF0F8BFF0E9FFF10B2FF0B81DB0A71C00F9BFD1099FE0F98
+ FF054180000000000000010E1D04376A063E770969CD0E9DFF0B72D70E96FF17
+ 9CFF119DFF0D85F51284EA2BA3FF53A8B260B18871D4A97FF5D85FB084000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000002030428493B0B
+ 13063F72605192892F82BC1CAFFF15B1FF1ABBFF10AFFB0D90F611B6FF11ADFF
+ 0539640000000A6CC00FA3FF11A6FF0FABFF0B74D90E9AF212BCFF0FB0FF0E9D
+ FF0E97FB1695FF0217280E98FF0EA0FF0C82DC0973C4010D1800000000000000
+ 00000000000000000000000000000000000324450001050A6BCE10A8FF11A8FF
+ 0F94FF0D8DFF11A9FF0F9CFF0E99FF109DFF0EA7FF0A71C20A6FB90E8DE90D8E
+ FF0A72D70646880209120000000000000000000000001183E0053A710744851E
+ 70BB2975A73BB0F419405928505D4884714380633969523F75576CC3A9000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000066BB9764
+ CCC159E8FF46D7FB20B8FF0FB8FF12C3FF0FA2FC0E8FF510ACFF10A3FF0F91FF
+ 04345C0000000EA6FF0FACFF11AFFF0EA2FF0C76DE06456E11AAFF11B6FF11C0
+ FF16A2FB1F9AFF0E405B085EB40FAAFF0FADFF0EB0FF0B84DD04274600000000
+ 0000000000000000000000000000000000000000123A5F1297E90FA8FF0F9BFF
+ 0F96FF0D7EFA10A1FF10A1FF0E97FF0FA1FF139DFF0E99FA0646870E92F30F98
+ FF0F95FF0C8CFF0F77C611599A12273800000000000006131F00000000000006
+ 0C0F13211951A2A11E39310000000000000000000000000000001A2E2D000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000051977092
+ FFF726C7FF12BBFF13B8FF14BCFF0D8BF80D83E412B5FF11AFFF0F96FF053E7C
+ 0000000A71BD10B6FF0EA3FF11BBFF0F95FF0D9AE5084A951098FF12BFFF11BB
+ FF17C5FF33D1FF0C4764054E920D85FA0FA4FF0FACFF0DAAFF10A9FF042D5400
+ 00000000000000000000000000000000000000001550881191FF0E99FF0FA5FF
+ 1082EE0D81F90D90FF10A2FF0F9CFF0F9DFF1190FF0E97FF0E9CFF03213A0FA0
+ FF1098FF0F9BFF0FACFF119EFF0A4E8A06468600000000000000070E00000000
+ 0000000000070C06020403000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000058A9BA1997FF0D90FF0A6DD30FA3FF11AFFF0FA5FF12B3FF085FBE000000
+ 0000000B74CC10B9FF11A3FC0FB0FF0D7FEC11B4FF096FC10858AB10A7FF11C5
+ FF0FB3FF0EA8FF12B1FF0B0E070888F90D82DB10C2FF0E8FE7085093095AAC01
+ 0814000000000000000000000000000000000000070F160E8CEC10A2FF0F9AFF
+ 0A6ED1108BF30E94FF0E95FF11A8FF129EFF1AB7FF0FA3FF0F9EFF0E9AFF021B
+ 340FA8FF0FA7FF0F9BFF0E9BFF12ADFF10A6FF0F9CFF10A0FF08519B011F3E01
+ 162107396A000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000050A0526442E25
+ 51620650810DA0FF13A9FF13BAFF10A9FF10ABFF0E91FE0B72C50C68BF000002
+ 0960AA10ABFF15ABFF12B6FF0FA3FF0E96FF0F9FFF0F95FB0B6BCE10B0F914D2
+ FF12B1FF16C3FF26B4FF67C3C01FA7EA0A8FED0B87D710C7FF0E9DD9063F590A
+ 63A7042B58021C350000000000000000000000002D7AB0219FFA219EFD0B8BF3
+ 0B70D50D89F90D8BFF0E99FF0F9EFF12A9FF20B4FF1FA6FF1496FF0FA2FF0A64
+ BA0643760F9DFF10AAFF13AAFF14A1FF28ABFB148CD60B99FF0D94FF0E96FF10
+ A5FF0755A9042A51031120121E211E3B3C000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000004E917272E0D440
+ CCFF0FB0FF16B2FF23B5FF0FA3FF12A8FF1AA8FF0C569900010704121F010F21
+ 0E84DD11B4FF128BE711B3FF0F98FF0E96FF0D8FFF1098FF0F99FF0E9DF30D7B
+ B314B6FF1FC4FF38C0FF2686C11F6B780DB8FF0D93E60A75BA0FB8FF12CFFF13
+ C1FF0F9EFF021A35000000000000000000020200132E3E0F283E0F3144043D6D
+ 0C7FE60C80FB108AFF0D99FF0F9EFF0EA3FF1AB0FF30B5FF1BA6FF0F99FF0C89
+ E80537710C81F20E8BFF15AAFF1EADFF24AEFB258FCF279EDA158DE313A5FF0D
+ 91FD0C83EB0E8FFF116ECB289BE33A7D97000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000010100000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000092FFDB88FFEC50D5FF27
+ AEFF33C7FF4CC8FD24B4FF1C9EFF30C6FF3A7488000000000000000000031E41
+ 0F92FE11B7FF074D8B11B5FF10A4FF0D99FF159DFF0E97FF0D98FF0000020EA4
+ FF10BAFF11B9FF1588E60474C600152D0E9AFF10B2FF0C94E4096EC1084D8309
+ 5694010C10000000000000000000000000000000000000000000000000042E4F
+ 0DA3FF0D96FF2493F90D8EFF0F94FF0F94FF11ABFA1296EE11A0FF0E94FF10A7
+ FF084E87074D990E99FF0B69C4129FFF1FB4FF34C2FF45CAF744B1CB09528B0E
+ 93FD1097FF108FFF0E99FF0D71D0104984275C781E372A000000000000000000
+ 0000000000000002030000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000002742448BF7DF93FFDC70DAC160B9B979
+ F8FF76D9C063C3CD3B7D980A050054ABC10000000000000000000854A010ABFF
+ 10A6FF10A0FF0A79D111A7FF1BAAFF0F59A01AA9FF0C8FFE0D90FE1295FF11B9
+ FF10A8FF0FADFF0C99FF0D9CE001172C0C76D411B3FF0EABFF0FB5FF0D96EF02
+ 1D3A00000000000100010200000000000000000000000000000000000004375B
+ 0D9EFF0D90FF0B85EF1F9BFB1E9EFA15A1FF1390FE1CBDFF21C3FF0FB7FF11AB
+ FF0F8BF20222440C7FDF109FFF0860BF0C75DD13A4FF2DA8FC0C95FF0B84F804
+ 32610B73DA0D93FF0E98FF0F97FF19A0FF2EA0FA5AB0C045816457A37D60B28E
+ 2E56450000000202000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000F181A3F6C69376159090F0A59A6877E
+ DBB826492F2D513A0000000000000B14080000000000000000000008110F98FF
+ 10A5FF0E96FD0F8FFF11A9FF21A4FF255E8B14AAFF0E91FC0E8EFB169BFF0C9A
+ FF10ADFF0FB5FF0FAEFF0C8FE102233B0B75C50FA4FF0FAEFF11A3FF0FAAFF10
+ A4FF04294C00000000000000000000000000000000000000000000000004344D
+ 0FB6FE0C7DD90D9AFF26A2F139A4EE16A8FF2DABFC22ABFD21B9F60EB1FD19A4
+ FF14A3FF05478A07417E18A5FF169AFF1782E6108BFE1779D40E98FF0E9EFF0E
+ 97FF063C6D0854A00E85E31396FF2096FF36A6EA43ABDA53BCE16BE0E75FB192
+ 0D170F0000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000345E510F
+ 1D1700000000000000000000000000000000000000000000000007519C0F9EFF
+ 10A5FF0E8BFD0E98FF0EA6FF1AA8FF3F94C117A6FF0F8DFF0E8FFF26A3FF2699
+ F40FBAFF0D9AEF0FB0FF0E9EDE0005110B8ACB0C8AF110BBFF0E94F00E90F010
+ A4FF0E8FFF0320420000000000000000000000000000000000000108100B84D2
+ 0B7FB50A70C70DABFF24A0F13D94BC2C92D234BDFF14ABFD1799F612AAFD2CB2
+ FF0B95FF0C83F600030819A5FF27A2FF2C95E52F9DF23698DE33ACE90B8FFF0C
+ 95FF109DFF0960B204366C0F75DF0B95FF0B88F91182EC218AE62D83BE3A7071
+ 346148172B1F0000000000010000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000001672CA0FA2FF
+ 10A6FF0962BA0FA3FF0DA3FF179DFF35BDFF1E9AF80C59A21B9FFF1CACFF18BD
+ FE0FB9FF0EA3FB11B9FF0D89EE020C1D096CA10EA5FF0975B80FB4FF12B1FF08
+ 508F11A2FF0B72CE000B17000000000000000000000000000000000102010C17
+ 02213A0D9EEE0DA8FF0F84E70C77D037777D3DB9FF0EA6FF2BB9FF28C2FF37CB
+ FF0CA5FF149DFF0000000E8EFF128BF324A0FF57A7A350AAC644ADE450CDEE15
+ 9FFA1297FF0C97FF0D83E50111230A61B717A1FF1A97FD1D92FB3FA3D93D9BD4
+ 55ACB270D1A467B9992138340000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000001A2A223CAFFF15B5FF0D96FF
+ 0FA9FF05356110A5FF14AAFF40CAFF65C6CD223B3F0E63A825BBFF2CC7FF0CA8
+ EF0F9FFF0FA5FF12BAFF0E9CF7032948075E8F10B7FF0B86D90FA9F510B0FF08
+ 5490032A530B76E4031F3D000000000000000000000000000000000000000000
+ 0961A10C9AFF10BBFF0C86E20C92F400112649B7BF0883F829B4FB44D4FE1EB7
+ FF0E9EFF22ADFF1C43580659AA0D87F70A7DEB2CAAFF72C99C38623F66B68433
+ A3EE269BFE0C93FF18A5FF1498FF061523245D7F299AF344BBFC47B3DA77D9A9
+ 7DE5B3559F7764B894508D862E4E4F2A48463C625E4C7B750000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000010200000021485F0E93FF0F9BFF
+ 12B2FF0214250FA8FF11A2FF1CAAFF1F52750000003687B72EA9FF50C9EE045F
+ C20FA8FF0FADFF12C3FF0E9AFF064F820107160F96F00FA5F80A71BD10ADFB13
+ B9FF0E91FC022449042346000408000000000000000000000000000000000000
+ 095D98085FA410B4FF0E98EF0E9DF70A77CC02131712A9FF42C0EA59E2FD1BC4
+ FF1BBDFF1FB1FF0FA7FF16A8FF158EFC107BE80F8CFF57C2DE5EB39D41785A3A
+ 696343B1ED1598FF1C93F725A6FF0B8CFF031F3D0037772EADF30988FE36A6F2
+ 63CDDB74DCBC6FCCA65AA3817BDCC281E6CB7ED8D02A47470000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000001F4A6A15A2FF1CA3FF
+ 11A8FF031E3C10A8FF0DA1FF1DADFF4AB1DF4274543F7B7C4197C76BC4B223BA
+ FF0EA7FF10A8FF11BEFF0FA6FF096DA40000000F92E50FA8FF0E95F50C8CE710
+ AAFF11A7FF0F97F6109DFE00080E000000000000000000000000000000000000
+ 02162B0855A810C4FF0D90F50D9BF40EA1FF00152C2380A56EFFFF4DD8FF1DAB
+ FF32C0FF38CCFF1296F0092D462775B22097FF0A68C835A7FC5FC9DE73D8A95B
+ A17478EBE52784CC3FA7ED28ABFE0A83FF2385D10A1219074E941C94FF1484F0
+ 1E6FB44AA6C55DD4E275E3D07BE7C18CFFD43357570000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000001D32234EB3E833A0E722A9FF
+ 0DA0FF08539D12A1FF14ACFF119DFF42BCFF477E6327493C75CDAD219FE813AD
+ FF0F9DFF10A6FF0FAEFF0FB6FF07609D0109170B7CDE11AAFF10ADFF0960AB0D
+ 88F111B0FF11A9FF11ABFF0C93EA1B97EC1A466B000000000000000000000000
+ 084E8512B6FF0FB2FC0A80CF10B2FF109FFF096ABB0200000E7CBB2BC4FF34C5
+ FF4DD3FF3CC5FB1177D5020D19406F5B4AB4EB198DFB2A6A8E2A96ED51BEEA71
+ DFCE7FEAB87EE8CD61C8E363D8EA0F8EFF1FA3FF449FB603000058BAD6369EEA
+ 30A1EF288BD23E7777417B6C4A86681729250000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000002D533D66B0902EB0FF0E9BFF
+ 12A8FF00000012ACFF2DB5FF27AFFF3FA1D6000000345E3F5DD1D315AEFF0A7C
+ DD11B2FF11BAFF0D93F210B5FF0B6BAB0000000B8ADE0FA2FF10A8FF11ABFF09
+ 69AD0643870C82E30C83E70D87ED10529600000000000000000000000001152A
+ 0C7EE611ABFE0965BA0B8AD50EACFF10ACFF0C84EA02426E152F3862E0EF56E4
+ FE38CFFF0EA4FF0DAAFF10ABFF0577DD3E87945EC4D03BA4E72B66754E8F7863
+ BB9161B18C5595856ECBA872D0AC35ACFF3099E434B7FF0965BF000000467859
+ 57C4D952C7EA56BACF60D1D463C7C777E2B575D7B5508B85345859090E0E0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000040706294A3C64BDA05FD5F6179CFF1194FF
+ 20B5FF090D0D0EA6FF129DFF4ECCFF63D2F0407655000000267EAD169DFF064C
+ 7C11B5FF10ACFC0D92F312AEFF0A62AD000B190C98E30FA2FF11B1FF109CFF0F
+ AAFF0B70CE021127000000000000000000000000000000000000000000010F1D
+ 064683021733021C330FAAFF0FA5FF0FB0FF0B77CB0478C74D90817AFDE75BE4
+ F51DBBFF0DA2FF0F8FF50E99FA0B84EB19A2FF5FCED151A6AD53C3DC32728B0A
+ 110800000000000040755880E9B548B9F941A0CB51CDF725B3FF1361AC1B2A16
+ 2B7B9335B1EE54CDE874DAB075D5AC73CFB070CFAB76D5B46AB9AD558F8C314A
+ 4500000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000101014F917081F6D54CA4B41490FF2AAEFF
+ 26B4FF00142A179DFF0E9DFF39C2FF70DCCF5DAC7B01000018517F0B79ED11B7
+ FF12B2FF0D90F50FA2FF109EFA05285202040B0DA5EB0EA4FF10B1FF0F95FF0F
+ 9DFF0F9AFF0C82E9010F20000000000000000000000000000000000000000000
+ 0000000000000B79E10F9FFF0FA1FF10B2FF0B7ED2099BFF5AC5DB3774711BBA
+ FF1294EC0FB2FF0F99F60FA3F90976E7198CF567D5C645A8D162D6E35DCAE967
+ C2A013221A0000002C4E468AFFCF64CCD14EB5CF6AD6CF2AA4FB26A0FF2D5357
+ 0000001781E82A9DF768D3DB6ECEB670C2AF62ABA36ABBAA589A906DB9B76DB3
+ AA2D433E06080900000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000103010606003F8AAC31AEFF4EC1EC
+ 29BBFF00366D3884A624ADFF1EA2FF52D5FF8DF8CB79E0CC2DB7EC10AFFF12B6
+ FF0F9FFB0E97F711AFFF11A9FF053B7609448213AAFF0B91F70FA8FF0FA0FF0B
+ 7CEA109AFE0E8CFA0B7DE7030F1C000000000102000102000000000000000000
+ 0000000000000960AE0F92FB0F95F210C1FF0A70BD0FADFF0F4F770000000785
+ D90EACFF0B84DC0FAEF911B2FF10ADFF11A2FC19A7F31FBBFF38CEFF4FD2F66B
+ CFB06ABF9A1F353456978C93FFE22E584A75E1CB7FE9C03CADF7218CEA59BED2
+ 1D30191D3F4D2EA0FC288ADA4CB2DB77DFB46BBAA579CFCA1D2F320F16142E47
+ 415471670A0B0B00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000004A89665DC7DF7BE3C536B4F8
+ 0591FF1893FF395C3A50B1D643B7FF2D98F47DF4E04DE4FF19BDFF0FABFF0F91
+ EE0C7CE310A9FF11B6FF0E9CFD032D5C0406061C97E815B0FF0E99FB0FA5FF0A
+ 66C80F9EFF0D8AFC0FA0FF094580000000000000000000000000000000000000
+ 0000000000000FA1FF08559A09559511B1FF086DB310B0FF10B3FF0325410104
+ 0810A9FF0FABFF0D83DF0C85E50E9DF210A6FA0EAAFF10A1FD2DA5EA6ED7C868
+ C09270CEAA2948430000000000001A30278EFFD178D9AF69CFCF389BD968D8D3
+ 46816100000067C5AE4AA7C92F7CAC52ABB575E1BD7AD9B26DBCB385E1DA1623
+ 200E151954604BC8D095000000634F2C87572804000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000101D1A69C29961BDA57FF0CA2DA5FF
+ 1197FF45AEEC00000041745472E4E160DFF665C2BC57B4C00F5E9C0B81F00D85
+ DC10ADFF11ACFF10B6FF0DA4E800020704386E15ABFF16ABFD109DF110A8FF10
+ 84DA10A3FF0C86FF0E95FF178FFF070A06000000000000000000000000000000
+ 000000000000063E790963C3109BFD10BAFF08579810B0FF0F98FF0B82D90110
+ 1D063E760C80E112ACFF0FA4FC0B71C50D85E90D8CF6097AF01C629F74CEBE46
+ 755D75D5A860A79D253D3E000000223D3A83EDC978D8BA81F0CE41A2C662CBC8
+ 74D4B0182A280A110673D8B05BC2C64C99914A989374D9B77CE6CA77D6C074C7
+ C27BC7BF80C6BC70B2AA7EB4A3BCCB9C4B432900000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000026443980EBBE6BC18F7CF3E0259BFF
+ 2DA6FF4FA8BA0000001D352941796083EEB885FDDB86EEB7377F8B0A8EEE10AD
+ FF0EA0FF11B7FF10ABFF0FACF803234702162A0E95F115B6FF12ABFF10ACFF19
+ A8FF1C96EB0430630B75D7159BFF2E6783000000000000000000000000000000
+ 000000000000010F1F04396C109FFA10B3FF074A8910ACFF10A9FF0D99FF0968
+ AE000000074A9410AAFF11ABFF11A7FF0F9FFF0E97F20E8FFE1493FA38B0EF1B
+ 76B858A6B06DB9A531535000000016272677CFC771C5B582F9D459B9B46BD3C7
+ 6DC69F17272403060551947770CEA36AD0BB4A93854480724E948C78DEC478D6
+ B573CAB46FC5B96FC1BA71A69A5E614815100700000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000001010001010000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000192E2B31545376DAA65FCFEB3DACEC
+ 3EA9F087FFD90000000000000000001A2E2A8AF4D477F0E660E8FF14AAFF17AC
+ FF0C98FF11B7FF1CA9FF0E9EEE0111250000040C7BE713B6FF13A5FF0FAAFF15
+ ABFF1188F000081D13457220A4FF1B4055000000000000000000000000000000
+ 000000000000063F7011AEFF11ADFF0D7FE60A7BC80FA0FF10B0FF0E9EFF0FAE
+ FF06457E02162D05406C10B7FF10B2FF109CFF0F9BFF1099FF12A7FF0C8DFF0D
+ 9FFF2FA8FF63C9E831514E000000070D0E3F696B61A99C89FEDD56ACA275E0BE
+ 72CBB2050B0B0000000001003E6C627AE2BA71D6B465BEA85EAF9128483C64B3
+ 9772C7BC69B3AE6FAC9F353E3400000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000203045690927FE2CA92FFD84BB9DF3F92B8
+ 6FE2DB2F573C0000000000000000000000005EA6A730AEFF21AAFF2FBAFF2489
+ DE15BBFF0D90F10DA5FE109FFA03274F000A160B80ED11B2FF0F9ADC0E85D910
+ A4FF10AEFF21C1FF0B2B4437686E47878E000000000000000000000000000000
+ 00000003070C0F98FF10A7FF0C7CDD07418310A8FF0F94FF0FA5FF0B7FCF0FA6
+ FF0B77D3010D1B0215230EA1FF0EA2FF11BBFF0F99FF0D8EF9107FE115A8FE10
+ 85F80F71D2399BDE69C5BA326044111C1669A19889EBDE85F5CC5DAB9578E6CC
+ 7FE0CC2944430000000000000000006EBEB761AE9175CFB86FCFAF6DC9CF427A
+ 6127473B09101000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000395F5E72CAB797FFE278E7C854A4AA65D6D9
+ 84F8CB2646360000000000000000002C523475EDF42D9AE71E92E145C2FF1EAB
+ FF12ADFF0D8EEB0FA2FD0D84F302172C07366D0FABFF0FA6FF11AEFF0C78DC0F
+ A9F710A6FF0C90F21056950D1B20050600000000000000000000000000000000
+ 000000082A4B0963B2074B840000000A61B80F9DFF0F93FA0F9CFA10B0FF0960
+ A30FA9FF0A68C10000000965AB0FA6FF0E94EE10A3FD11ACFF1795F320A0F138
+ BAFF0B22373A73753969611E382E96FFDF85E2C89AFFF468B3A972D6B17CDDC6
+ 599D9247777300000000000004070735585927424371C0BC70C3B369BEAA75CB
+ BD75D0B576CEBE497D7A2F443F00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000042706E6EBFB451917F4D8D675EC1CC76E7C7
+ 89FCCD4071690000000000000000005298727BEDD5447F753E8FB73FD1FF0AAE
+ FF0F9FFB0E9AF811ACFF0A69D4000000063C700EA5FF0FACFF11ADFF0E8DEE0D
+ 82E911ACFF17B1FF2DB5FF50A0B94B8D7A35644D000000000000000000000000
+ 0000000000000000000000000000000B78E10E8EFE0D8BF00C7FEF11ADFF0A6C
+ B810ACFF0E84F100040A0102070D8DF40F9FFB0B7DD70E90EC10A9FF0FA6FF28
+ B7FF16A6FF24ACFD3CAAE869D8EB58DBFE6FDFF474D7B55795917FE8C17FDAD0
+ 33585700000000000000000000000000000004070736585563A6A063ACA36DB8
+ B26CB7AA69BAAE63ACA56EB1A85A73655D593A08070300000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000040709070C0F67BF9374E0CB88F7C6
+ 376552080D0E0000000000001F363517281F14231858CBE52BBDFB19BAFF0FA1
+ F30A71C910A7FF0E8EFE0D8EF800000006528C10ADFF0FADFF12A4FF11ADFF09
+ 5CB511A4FF11A4FF13B2FF29B7FD5ACEEF21331B000000000000000000000000
+ 0000000000000002030000000212220C89EF0E93FF0F9DFF10A4FE10AAFF096E
+ BE0FA2FF0F96FF032753000000063E750C83DD0F98FE0C84EE0A6DC40E9CFE10
+ A4FF0DA1FF10AAFF1DB3FF1AADFF1EA9FF65E5FF274B375088887EE1C977C7C1
+ 4771680305040000000000000000000000000000000B0E0C619D94446F6963A7
+ A26DA9A37BB6AA6AB6AB538C8873B4A7728A72110E0900000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000002640417BE1BF82EFC373C7BF
+ 25413E0000007BD2D056968E71BBBB9AFFE66CEFFF25B8FF0FAEFF0D9CF60C79
+ E710B0FF10A5FF0C86FD00000001152E0C8CE419A1FF1CB9FF0FA6FF0FA5FF11
+ A1FF0B6BC810A5FF13A4FF149EFF2197FF62D0E687FAC3203C30000000000000
+ 0000000000000000000000000000000B6ED70D8EF6085DAD1395FC12A8FF0C85
+ F10C84E711A6FF11ADFF064184000000074D990F9EFF109FFF0F99FF0A69BE08
+ 4E990C8BFF1088EB0D85DE0B8AE73192D516232014140C6FB2AB74C8BD76B3AC
+ 191D1B0000000000000000000000000000000000000502005061530402012835
+ 315F8A8067816D79B1A15B9A9959898591B092978753401D0912070200000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000518B887EE4C484ECCF569492
+ 090F11000000518B83A8FFFF7AFFFF4FDAFF2EC9FF1AB5FF159CF90B70D112AE
+ FF10B8FF16A9FF0A4E91000000052F590EA7FF1E95E12AC2FF0FA1FF0FA2FF18
+ ADFF0D90FF1187FC1AA4FE2CC1FF4EC0F268DBDE63BD9B4A856F000000000000
+ 0000000000000000000000000608081085F40B7FE50522450F86E210A7FF0D82
+ EF0B75C10FA6FF0FA9FF06487E0000000425480645870D8FFF0F9CFF10ACFF10
+ AAFF0D88FA0861B00A4B79105590065297176FB34C8F9B83CABB72C6B486CAAB
+ 39473D1E35380000000000000000000000000000000000000000000000000000
+ 00434A3947472D97956B71AA9F5568576B8F7F8DA889C6934D5C270C00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000070A0756918E77D2BE5EA09A5B9994
+ 00000000000000000033594D68C8A462CFD52D92C51172C71495FB0C98FF19B9
+ FF0FB9FF2DC8FF08141D0008120C7EDF0CA3FF3AAFE327BAFF12A0FF1AAFFF1A
+ AFFF0D95FF0E8DFE0A7FE71E9DFB1EC2FF298EAE0D1004000000000000000000
+ 000000000000000000000000050A0E115C9D1688F60947800E9EFF10A7FF0C84
+ ED0D85F40FA2FF0EA4FF0FA4FF0962AB0215290000000433650B75C610AAFF10
+ AEFF16A4FF0F94FF14A4FF27B2FF0D9DFF0B99FF32A4FF73C5DE75E1DC84EAB6
+ 71BE9984EAD60000000000000000000000000000000000002E1C080C07020000
+ 00000000000000A67E42A1B489473C212D2C1DA69C62A4905656381B03000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000029403B77C5BE74C5C4000000172421
+ 0608080000000000000000000000003F88AB1AA3F92EB2F11DAAFF14A6FF32CA
+ FF17B8FF1F75A00D12090001070A70CC0FA8FF1373C413A6FF16A5FF2CB3FF25
+ BDFF0C9BFF199EFF1A9FFA0D95FF076DB7000000000000000000000000000000
+ 0000000000000000000000000000001E43541D4F7200224710A1FF10A7FF0B75
+ DF0B75DB0F9AFF11ADFF109EFF0FA7FF05356602000000000012528015B8FF10
+ A6FF15B8FF16A8FF0E8BFD249EFF5AC0DA51CAF24DBBFF84BDD5327FA35FCADD
+ 7FF2CC88FCCD72CAB75D9E9B13222113090000000025261EB1C1941718120000
+ 00000000000000200C01DB964A1605000000000C0D05A35624E3702C64200700
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000B100D60998F213532000000000000
+ 0000000000000D1614447F607CF8F32BB8FF1CABFF42C4FE25A5FF37C8FF31C1
+ FF28B9FF023B6900000002193410A6FF11A3FF0764BD10B0FF22AEFC35B6FB3D
+ D3FF0E9AFF179EFF21A1FD0FA2FF0FBCFF0B8EE3021625000000000000000000
+ 0000000000000000000000000000000000001222222EA5FF12A2FF109FFF095D
+ B70C84E20D8DFF0EA3FF1CB2F5138BE010AAFF1388F90313250300000825420C
+ 9CF82AA8FF2EB9FA2ABAFF1797FF399FEA59A99B67B6817CF0CA74E1CD447C51
+ 36644F5BA28F46777B17262900000085CDC261979281DCD187CEC01015100000
+ 000000000000000000000B00000000000000000000000000000D000021080107
+ 0201000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000019201E3F5851030403000000000000
+ 0202001523268EFFDB89FFEB4FC6FA4AC9FD72E5E359C8E82DB5FF58E9FF1CA6
+ FF0B9EFF03274F0703001064A40F9CFF0F9FFF085BA80FA5FF2DACF443C3F037
+ D0FE19A9FF21A7FF40B3F826A0F50CB3FE0EA8FF0A6BB7010816000000000000
+ 0000000000000000000000000000000000006CD7DA28AFFF0D9EFF0FA5FF042C
+ 5B109BFF0E95FF0D8DFF18B0FF2294E50F8BE218A6FF0A3357000000010D1908
+ 55A50CA3FF289EDE50D0F516A3FF20A6FF40C6F64EAAAD65BFB08DFFDF65B48E
+ 11211477CBB5345C4C43776A75C6BE96FFED7DDFCB8DF9E575B0A41718110000
+ 0000000000000000000000000000000100000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 33545382E3D48DFFDA6FE2DA70E5E780ECC883F6CB44C6FA1EB4FF63E7EB0899
+ FF0E94FC032347070300136FB60E9BFF11A4FF0959AB0FA2FF19A5FF20C0FF4C
+ DEFF1FB1FF23ADFF4EBBE738C1F3088EED0FB8FF10BAFF0E94DD074386000000
+ 0000000000000000000000000000000000004DBBEB0E9DFF15A5FF0949820435
+ 691196FF1598FF0E8BFF129AFF0B7ED50C81D815A8FF1193FF07417D02060901
+ 11240E99FF129FFC2798DC1077CB0CA6FF10A0FF26B0FF2FB0FE41B7F67CE8DD
+ 81EEC087FAEA68CBBC93FFD88EFCDA82F4DD82F3D383E4D0233A3A0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000203432
+ 7ED6CF92FFEB7FE8C15FAC9997FFDE7ED6B14ECDFF0FADFF0D9FFF19A2F90FA5
+ FF085EA90000000000001A81E5139FFF11A0FF053C7610AEFF0E9EFF4CE0FF62
+ E4FF2EC9FF23AFFF63CDCC2FB9F60BA6FC0C96F90E9CF9085D9B000812000000
+ 0000000000000000000000000000005FAF884CC5FF3EADF22F8BCA0500000B7D
+ F30A8CFF26A1FF1B8FFF17A9FF0D97FF0D82DE14A0F710A8FF0C81E603172C00
+ 000003274B0E97FF0C9BFE0C89FC0647860D87F80FA5FF12ABFF2FB5FF47C5FF
+ 3ABCFF3EB1F67AEDDC7BF4E86ADAE26CE3E193FFDD62A6A30F191B0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000E0803130A0100000022251F52756C
+ 5A948F5289880000004F887890FFFF54D1FF26BBFF13A5FF0E8FFF10A5FF0F9D
+ FF0D5F9B00000005030048B5F81FA7FF0DA6FF064A9017ADFF159AFF58CBDD51
+ EAF621BEFF32B9FF5FDBD966D5CE04A3FF0FB5FF0EAFFF084C82000000000000
+ 000000000000000000000000182E22478862559775131B0A00000000000017A2
+ FF0B8DFF259EFE2A5C7741ABE40C99FF0D86EE0F9BFA14ABFF0C7EE904264A00
+ 00000003070968C00D93FF0F97FF0F9CFF0A6BC50A47850F6ACB1286E40B83EA
+ 29A5EC3DB9F032BEFF27A3FF52BEDF74D6A5345850000000060A0A101C1B070E
+ 0E33413C2C3631080B0A0F0B034028121D0F0400000000000000000000000000
+ 000000000026080161220F070502000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000005F4A2CB1AA77213938C2F7D25D7B6B
+ 26463F7EE3C497FFF690FFEF59D5FC25BAFF129CFA0C86EF109CFF17ABFF1786
+ F6051931101B0E3C6B593FBBF10FADFF13B2FF052A4E14A6FF2FAEFF53CDFE2A
+ B1F60DBEFF43CEFD52D3E877EDD31EA4FF0DA7FF10ABFF11B3FF0B6BC4010E1C
+ 0000000000000000000000000000000000000000000000000000000000002CA1
+ FF0F8AFC1899FF48929E2993D70B9BFF0D96FF0F94FF11A3FF1097FF1E7DD306
+ 0A09000000020F1E083E791385EF0D97FF15A3FF12A0FF0B8FFF11527E145CA1
+ 2F82AE206FAC2677AE4694993F89900D2E4A34675C6CCBA972CEB581E5CC79CF
+ C57DCFC45D9C967BA798929C73C7BF81685933482C133D17060000000F020000
+ 0000010000B1340AA8310C010000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000048432DBFECC792F6E992FFEF97FAF4
+ 9FFFF296FFDB76F0FC4CD6FF2FC6FF188BE01892FD179BEF11A2FF2FB1FF163E
+ 5D0000001C2F1663D0D527B9FF16B0FF22B7FF06284C149CFF1AA6FF4CC2FA63
+ DFF41EC9FF2DC0FF55E2F42F605523B9FF0B98F111B7FF0B70C90D7DE6074481
+ 0000000000000000000000000000000000000000000000000000000F160657C9
+ FD1285EF1C8DF453C0F138ADEA0792FF10A4FF0B76D212A9FF10A8FF1D9BE730
+ 7CA93C6A57000000000205245A7E19A8FF147BDE31AEFF14AAFF1EB5FF30B2FF
+ 1599FF2798F94DACC346ADC12BA2F346BBFF4ABDF363CFD56FDCC26CCDB27ADD
+ C17CE1D07EDCC879C6BA7AC5BB79B2A4A2B88DD1AE659F3E1100000074270B98
+ 28043D1604FF9141D85A253C0C00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000300004B5E5491F2E797FFF787FFE8
+ 70EBFB61E6FF40DAFF5BCADE2260803594D711A6FF27B0FF2DA2FF68EDFF0000
+ 0000000002132A0D8DEC33BAFF31BCFF28ACFF0873E33FA0D21EAAFF1DB2FF4E
+ EDFF5FEAF00EAFFF54E2FC507C64049CFF0DA1FA0FB1FF10ADF60C7AE3043065
+ 0006100000000000000000000000000000000000000000000000000406004189
+ 9B31A8FF1C629A5DBBC876EFDE25B0FF11A1FF0E8CF3109DFF0FABFF0DA0FF35
+ BEFF294D410000000000002A47373476931640614092BD3DB3F817AEFF36C1FF
+ 49C5F733A5FC2F9AE84CBAE565DADF71E0D273E0D477E8CA7DF0CD78E9CE73D1
+ B766B6A068B7A97BD4CB7FC8BD8BB59FB19961D37631000000000000BD5925FF
+ AD5AA49863E0BB80DC4E191C0400000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000002C363267B4AB82E8C0
+ 77E4C857BDDA4C9F9E3597CB31C4FF40C9FF31B0FC75E3E3386B6C1A2B130B11
+ 06000C200A85E42DC4FF46C9FF44CAFE1697FF1E92FE02387135C1FF43CFF846
+ BFFC0EA9FF11AFFF25B4FB4EB2CF002D5710B9FF0C84DA0E9FE813B7FF14BFFF
+ 0FA1FF0D86FF00000000000000000000000000020401010000000000000062B4
+ 9751B7DF33769500000050A3A726A4FF17A4FF0D8FFF0D78E41CB0FF17ADFF1D
+ A7FF0E9DFF0A6FD200060E0000000000000607003F715A65B28945C7FF31B0FC
+ 47CEFE60E8FE71E4E659C2CF5EBEBC7BE2BC79D7BA74C4BD6EB8AF7CD5C77FDE
+ CE86E9D563A39A000000000000391F063023140000003F3824EFA255E2AC669C
+ DAC18BC1AEDEB8768F441B020000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000453F2728342F375B582B4C4467BBAA4E9B92
+ 2C80B560D6D763DBEF42C2FF68E2EB54C3EC65DFED72D0991B31250000000000
+ 000B6AB90A9FFF54D6E942CEFF4FCCFA159AFF47B0E501162A22B4FF5BD1E473
+ F5F556E5FF26B9FF0AAAFF20A5FD00122610A8FF0FB1FF0A7DCD0D8FE60B75BA
+ 0B72B6011526000000000000000000000000000000000000000000000000529A
+ 756CD5D055A597192D1B52A09E31AEFA0FA6FF179BFF085DB615A1FF31B7FF30
+ B1FF40B5E60D8FFE0964B305396C0000000000000000003867457CF5E0169BFB
+ 45C5F34BCFEE44CEFF59DEFE67D8D058BDC47DE3B67DE0BF4C857A5E96934C74
+ 7083C6BA87DBD46A745C182E2E556E5EAEDFBF2E4947AAE0C0AFC396A3D4B676
+ CAC196D9BFC6BB8354351A000000000000000000000000050000000000000000
+ 000000030808241A140000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000002B0D027C23036B522B9FC3A489D5C88FF8E488FEE180FCE77BF7F6
+ 72F3FB6BEAE862DAEC83F7DE88FCD249928594FFE4477F680000000000000C55
+ 9A10AAFF098EF224A6F550DDFF42B2F12CA1F24ECAFF0A0C042FADFF25A6FF66
+ F0FF4FE4FF3CC7FF13ADFF06A8FF0000000E9AFF11AEFF10ACFF0D8CE4095AA6
+ 00040D0000000000000000000000000000000000000000000000000000004886
+ 6A51997B549F7E4E90636CE2E722A7FF22ADFF17A6FF0C529C0D9FFF26B4FF3F
+ C2FF44C2E9219DE60A9CFF0D89FA07376A000000000000000000396855004791
+ 18A5FF38B9F53594C93FC1FF65EDFF259FFE62C3D875DEDB7DDECD76CCB0639F
+ 8B8BDEC395D0AFAAD0A46CB9B782D2C681DDD080DED085C9BE99D0B882D7C577
+ D4C699CBB4A48953260C02000000000000000000000000942607020000581504
+ 4810017226107B2B10000100301D132F27241A10170000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000047210AF1AF64C7D8A594E6D586EEDB7BE4D38EFFE28EFDDC83E5D1
+ 89FCDD74E2C88CFFD783E9C78CFFD40E191157998A38625C101E134677731A9C
+ FF0C9EFF148CF358E2FD57DEFB45A6D64DBEE741C7FF0A4279539FA034BAFE36
+ B3FF62F2FF75FCFD75F2FF5CCDF40000000E9FFF0FAFFF109FFF10A2FF0F95FF
+ 0B6ED00003080000000000000000000000000000000000000000000000000305
+ 05549C776DC6A0080C054D9A9542B6FF38BEFC10A2FF0A345D20B3FF129DFF2E
+ BDFF3FBFFD36A3D5188DE60C9BFF0F8BFF2A95E2143346000000000000021D38
+ 0972DE0A8CFF1290EA095AAD4EB3E029AEFF159DFF2AA2FF54BFE28AFDBD8CFF
+ D178E9D47FE4BE97DDB985E7D687F3D579DDC67EDCCD88E4CC81E7CB78DBC883
+ E3D882A18A000000000000000000BA7E3D6B441CBF5A1FFF7C30AF5B27DB4712
+ CA3207EA4F16B8320AB5340C9D2E0C432F240000030000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000EA4710FF9F4AD1CD9293C9B26DB6AD79CBC48FF2E483D1C77AC9C288EFDE
+ 66B69E8BF7D47ED5D35C9B9C182A2B0000000000000000001520172EA2F70DA3
+ FF1897F350C4F456E2FF41C2F160BDB86BDCD53CBFFF1478E0283E1B6AE1E14D
+ D0FF32D1FF59E8FB4AD6FE078EFF0000000D9CFF0EA7FE10B1FE0D86FF109FFF
+ 0E97FF053D720000000000000000000000000000000000000000000000000000
+ 00355E55172B251B302884F8CC64DFE11AB2FF13A5FF0E3A5D30B8FF23A9FF22
+ 9CFC4BCCFD56E2FF57BFD51790E90C93FF086BC80B2233060B0D000000000000
+ 000001128EF20C90FF0D98FF2184D61070D21481E630A5E733B6FF31ABFF49BA
+ F162D9E778EFDF74E7DB6FE3D06FE1D675EBF47FEDEE81E6C77EEDCF77CFCA40
+ 615F392D142D45417BB3A79BBB9E98D1B6B1C095C3BC869EBE94DF9251DD8247
+ E1934ED77D3FE2541D9C2A08532D1F09080B0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000008029087E481D3E33198B7948B3EDD1A2B48A88A89180CABE457673
+ 16242880D7CC426B6700000000000000000000000000000035625A3DABF118A6
+ FF108AF30986EF0E99FF42A9D778E0B974DCC235ACFB38A1E83187AF24B6FF40
+ DFFF59E8FC64E8FA45D8FF33C0FF0803030C80D00D9AF70FA6FD11A7FF0C7BCA
+ 0968BC10ABFF031A330000000000000000000000000000000000000000000000
+ 000000000000005EA9917BEABA4DD9F81CA9FF29B2FF04417E27B6FF3EC8FF2A
+ B9FF3BA6E62CACF323A6FF074E99109EFF179CFF3CB0FF427B7325432E13251C
+ 00000013538B0A478326A3FF1098FF1F9EFF0A6ECB1454892177B82873A73B7D
+ 7A3395BB37A4EC4EB4D870DAC55CB9B73881A22E6B7C49876B3B665B406B6123
+ 44326CC7BF78D2C577CFC273BCB36EBAAE79B6A775AC9AA8A87A868F78A4AC7C
+ DE8141AD4014791C043710040000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000F69A4CB39D673329132D372D29342D000000
+ 0000004E6F660000000000000000000000001E36315CA87E70D5C743BDFC0B91
+ F71379D70D98FF2AAEFF7CDFBB75D7B07CE0BC369DE64EBCE845C0EA06A3FF32
+ ABEC4DCEFF56DFFF63E8FF70ECFF6098962D8DD20AA1FF0C85E011B0FF0E89D6
+ 0B6DCC0D71D20F46770000000000000000000000000000000000000000000000
+ 000A1111528D868AEFD47AF1DB3BB5F039BDFF3EC6FD0D6BCF1BABFF42C4F24A
+ DAFF2EBFFA1794F50C94FF0B80E508549F1399FF2298F63FA6DC75E0CC3C6F53
+ 0000000000000405033A86A72EA5FF30A5FE2AA6F81F9CFF3EA3CE176DAA1C5A
+ 8B44878139726E497D6A3D6D545391714276594170603457543A616550938D72
+ D8C59DE3B176E0C375D5C36EC8BA70BBB276B6A98CB19481A189A88F5B8F4C1E
+ 4012020B00000000000101010000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000321306421704000000000000000000000000
+ 00000003020100000000000000000000000015251D84FBD647B9F61AA0FF2799
+ F4136FB821ABFF33AFFF90FFD178D4B882ECC950BDD75CC7DB51956B00051F10
+ 81E213A8FF15A5FF48D3FF3CC7FF6EA9A05696B90D9CFF0D99F90E82E812B0FF
+ 0D97FF0F77E70400001118080000000000000000000000000000000000000100
+ 0000000021393971CAA460C6C153CDF14BD9FF199CFF2694EB1B9EFF32BFFE54
+ D2E45CD8D259CBD11398FF16AAFF04366D1487E41498FF2599FF286382010000
+ 0000000000000000003463554285814A9DB667D3D33EABED3DAAF059D7F12CA5
+ FF4BB0D65DC8CA50C5DE2E8ED94CAED368CABA7AE3C573DFD965D9FE71D5E584
+ E0CB8CD7BE86CEBB8FBEAA89C5B5B5A582B6D09FCACB91DFA668D5B473E16F2F
+ 340C010000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000192B2154A79D50BEF14CD1FF0860
+ BC139AFF43C1F86AC7D367AFA43F6E6882F0CE5AAC9F6ADCCF7AD8A92884C60B
+ 98FF0EA2FF0CA5FF1DA4F70FAEFF004CA3001E4210A9FF12B5FF0C7CE60C85E6
+ 11ABFF10A6FF2CCAFF257ABC0C17150407050000000000000000000000000000
+ 0000000025403E7DE8B879E9D56FEAD636D0F50174D941BEF22E9EF229B4FF61
+ F0FE4DD7EA69D6DF2EA3FD23A1FF0C7FE90A325A29A0F73EADF156B8CC6FD4B3
+ 3C70550000000000000000000000000B130976D79F70D5B759B8BB6CD1BA7EE3
+ B469D2CF61CBC764CABF7AE8DF7CE4D470D9C374DEBF64C2B16EC5AE71CAB871
+ C6B976B2AA9EAD82B09D62D9A55CC66221AD4C17B65A21B8390AF45F20F57631
+ E946122108030000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000006090D82EBC584F3C158CEE92AB7FF1749
+ 692FB2FF56CFEC83F3C3416B7071C5B57FF5DE63B99377E2C869C7BE21A8F70B
+ 9DFF11A2FF11ABFF0DA1FF11B3FF0110250330550FA8FF11B2FF0E90F20962B0
+ 0D82EC0FA3FF0EA7FF30BBFF56B8CD101C140000000000000000000000000000
+ 002B48467EDCCB8EFFD862BBB12FBFED14AAF60789EE41C7EF49B5D830B1FF57
+ E8FF29BAFF50BCDB61BAC644B5F80D90FF1A6CB41374CB139BFF61C3BC7AE0AE
+ 5EAB872D4C490000000102020000000000000E1B1665B79B67BF9450997F82EF
+ C07BD8BA77E2C961BA9A65C0AE7BDAC172C1B680D5C386DDC676D1C168B6A867
+ B2A06BACA578C2B982B8A98EB292AD8D53B65D27872306330B02801F05922808
+ A8300C612B160000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000090F0F44727684F1C577E5D140B6F941B3F81346
+ 6246C9FF56CAF18CFDCE476B687BD8C97EECCA63BEA575DEBF60C3D91B9CFF0D
+ 65BA22BAFF0EA3FF0E9BFF10A1FF0964C203243D0EA1FF10B4FF0F99FF0E9AF4
+ 0D83F30437660F4D7A19455F0811160000000000000000000000000000000407
+ 064B7A7438605C6BAB9B138DF808A1FE0A82DA08A9FF52C9E55CC6C931B8FD57
+ DDF249E1FF21A3F453BABC5ACAEE1A96FF287AB51755851C9EFF21AAFF59CDE3
+ 5FBDAD7CDFBF548F7730504E0000000000000000003B665F39645B020500579B
+ 8A69B8AD66B0A584ECCC5EA8946DC2AC76CDC371B9B43B534D7DC4BB80CCBD73
+ C2BC506F68394E447A815FC29F61CC793BE06023822B0A270801030200020000
+ 13060220150E0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000243A377ACCC690FFE182F6D15DCBD855D0FD3969521E92
+ FB63E6F661C8C584F6C889E5DD86F1D567B99B64BCB37BDEBD79D5CC46A8E91A
+ 9CED13B1FF0F9DFF109CFF11A6FF00000005375B0E9EFF12B8FF0F9EFF0E95FF
+ 0D95FF0A78EB0100000000000000000000000000000000000000000000000000
+ 00080D0C000000080A08000B1B04345B0EA6FF0AACFF30ABF665D4CD33BBF244
+ CBFF6CEEE735C4FF4ADBFF54CBFB349DE531B1FF001D464EA1AC2BBDFF28A6FE
+ 3AC2FF63E2EB41ADE6081A290000000000000000000102030203040000000508
+ 09253F3E598B8381DED163ABA604070758968E7BC9BE68998B656D5479826195
+ D5C187A4881D0E00050200180D041305001C0500050000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000010200000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000010203000000111C2066B6A16BCFB06EE7DE52D9FF15251D47C4
+ FF5BCBE893FFC57EC2B277C8C35B9A9A4B847876DBB379D0C06AC5C137B3F70F
+ ADFF0E9BF50C7FDA11B1FF0FA4FF000000053B6A13AAFF16A4FC0F97FF1298FC
+ 149BFC0D9FFF1584F10503000000000102020000000000000000000000000000
+ 0000000000000000000001050C0C7FD50FA5FF0AB0FF33A4E36BE1D05FCCD32A
+ C5FF56DEF878F0EA86EBC85EAB9765D1D533B2FF207FCC2544333EB9F84ED3FF
+ 42BBF23EB9E21396FF0D94FF15A6FF052340050705070C070205050000000000
+ 000000000000005A8C8658867E00000000000008060C8B96735C583D8C5623A7
+ 8650D3BB7B7B3912000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000002B4C4D76D6B484EECB72E4DE37ACFF2E5D4C67DD
+ E967D6DF8BEEC58DE3D02837310203024A817A89F7CD7BE5E64BDAFF1EB8FF12
+ AAFF0C83FE10A7FF0FB3FF11ABFF030105074F8C10AAFF0C7ADF11ACFF2293E2
+ 2196E20A85FB21A7FF29668B0000000000000000000000000000000000000000
+ 00000000000000000000031A320F93FF0FA1F809ADFF3AB2F662CECF68D5D039
+ C5F427B9FF42C3FF51C0F17CDEC77FEBC23DAFF243B0EC0A0B011D9FFF50C4E3
+ 5CD6EA5BD7E65CCAD333A7F10B8EFF128FFF2B83C6418587131F150000000000
+ 000000000000003A463F00000000000000000000000000000000000000000000
+ 0000E9732E391606000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000002020242646176C9C280DFD17ADBC55AC9E455B9CC3C645371F2
+ EC6DE1D981EACF74C6C10000000A100F59999381E5C779E0E03CA9DD1586DF0D
+ 87FD0FA1FF12A9FF14B8FF0FA6FF00000005345B11A9FF0B6FCA10A4FF1E9AF4
+ 37ACF61A8EFC199FFF3B83A10607010000000000000000000000000000000000
+ 000000000000000000000007110B72D910B0FF0A8BDF16AAFF40B0E070D8CE56
+ D6E924BAFF0D9DFF289CEB58D3F67BDFB654C2E15ECBD70E130447ADDD319DEB
+ 63C9CA57CFF94AC7FB53BCE22F98DE1298FF1295FF248DEA326E843F76590E16
+ 1616262500000000000000000000000000000000000000000000000000000000
+ 00003C0E00000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000080C0A78ADA2436D6B78C6BB7DF3CF65CECA66C09F34708659E0
+ FF78E4C386F5D78CECE13B4A4418252373BAB269B8AF81C3B4567E8F087EDF17
+ A7FF12A4FF14A9FF1AB3FF109EFF0000000B7BDF10A1FF0E92F70FA2FF0D9DFF
+ 3FBEFF3F859E278ADE4DBBED62B79308120E0000000000000000000000000000
+ 000000000000000000000A71D212AEFD0FAEFF0B85E710B1FF3CA1D862BFCC51
+ D9FD46BCE604ACFF149CFF3C95C98AFBCA61C9C954D1F13E786E294C404AADD2
+ 4FB0C67CE9C544B6FB1D9BFF48ADE40E498012A1FF2CA2FF5AC0D16CC39F81EE
+ BD52957A00000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000203000000000000
+ 0100000C0400242016475C547BCEC687F6D869CAB679F0D7406A554DA6B657C8
+ FF87F4D079DBC870C5B97DAD9E44412E5A877E63A09E6FA3906EC3DF18A5FF32
+ ADFD1BA1FF2BBCFF22B1FF0FA1FF0000000220420D92FF11A6FF07509812ACFF
+ 33C5FF24536820342164BFB82D574C0000000000000000000000000000000000
+ 00000000000000095FBD10A5FF0F91E70A74C50E9BF60CB0FF1A96E46CB8B04E
+ BEEA42C1FD229DDF30BAFE6BECFF49DEFF4EC9F057D2F62396FF0C0C0071DCBA
+ 47A7BF5CB2A380EECB51C9FF229DFF41AAFC04274C188EFF1A92FF33A1F352A8
+ B53B6F52254337111E1B00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 3E1D0BB99351A5DBBF8FE3D483E8D271CEB96DDAD666D7ED2439375EBBA56FD8
+ DF88EDCF84E7D5375953000000302B198BA48676A39572E5C338B6FF36B7FC67
+ CBD922AEFF19A6FB1BA4FB0EA7FF000000082D5416A5FF0FA9FF0B70D50D86E5
+ 12A3FF3CC1FF5398881527165CAB840B150F0000000000000000000000000000
+ 000000000000000000000216300213250D8ADF0F9FFF10B1FE39B0F1579BA244
+ A2CD36C0FF1CA5F446B0E742B7EF44CFF55CDCE562D2EA48BAFD151F0A3E7564
+ 5FDBF04F9C8C61B8A175DED36ED7EB6CD6F450B5F66B91913687BB37AAEF53C2
+ DD7AE5C078DDAF72C7BA121E232D4B4A23333101010100000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 1F12076A5D387FB3A46BB3AB6FC8AD77D4BC74E3EC4CA6CD20343073D6B06CDC
+ CF85E2C67BD0C989DCD1000000150E056D866EA2E6AF68DCDE4DBFF272DDCD58
+ CADF0EABFF0C93FD0E9BFF0C7DDA02000029637C1FB0FF0EB0FF128FF50A6FCC
+ 14A8FF1FAAFF4298C1335D4B080F0B0000000000000000000000000000000000
+ 000000000000000000000001050B6ECA11A4FF0D8AFD11ABFA23A2F1084A7555
+ 8F8F4CC3FB21AEFF0796F81285F06FE1E586E2BA69CECD55BED93E6D4917384C
+ 4FC6F671D9C652A0974E907D70C8B961CDF255BBEF3393DD164C741F83CE31A6
+ F35DC2CA6FCFB378DCB568B8A88AEEDE35575400000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000191F1D67ABA27AD3C578D0C47CE2E259B6B44F8B7C7EE0C375E0
+ C18FF3D986B5A082C7BF7E7D540000006A5C37ACFCB762C1A140735478F7EA1C
+ B1FF0C9EFC0C82EC10A6FF0760B90000000B3452129DFD1DB8FF108FFF096FCC
+ 1781D51FACFF65DEFB82EBAF79DEAA79D6C10000000000000000000000000000
+ 000000000000000000000009120D87FF0F9CFF0F9BFF0EADFB0B92F50168C146
+ 696B3CBEFE15A7FF0596FF3AB6FF62D9FE60CFED64C5BA61CECE59A17A081728
+ 3C9DDC6DD1D66FC9B16ABEA477DBB34D8F8059C3DE2DA3FC399FD51F3B3941A2
+ CF3FA5E350A9B162C1B470CEA336605900000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000799E8B7BD1C680BEAF7DD2BA82DEC86ACCB10A140C61A2A683F1
+ D17DDFC383DAD1AEB380A1743D0000004773705FA69C77DAAD78E9CF45C6FD18
+ B5FF0B79F111A0FF0E9DFE2590E7000000044F8C27B7FF3CC3FE0F9BFF1999F5
+ 1566B8118DEE1BA1FF42BEFF7AF4EF1931280F1B160C15150101010000000000
+ 000000000000000000000748860D8CFE0A6CD40F9DFF0F9BF80E98FF045CA73F
+ 362149B4F4049CFF22B0FF63C0DF32B2FF6DE4FF52CBED78E4C554957E223E34
+ 49A8C269CAD972C9AC6BBAB16BBDAD4D817B7BE1B364CCC340B4F636A2D3121B
+ 0E509E8157D2EB68D4C774D7BC79DEB77BD9C671C0BE354E46161A1A00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000008F713A8BC9BB7FB2A193B09488E9CC71DBB575D6C0243634639D957EDC
+ CD74D1BD7EDCD197D2BACB75379C7D5B48827C4A7F6582FBDE4FD5FF20B2FF0E
+ 79D6109EFF16A6FF1A79CC1E496500050F0A81E326A8F83AC1FB199BFF24A4FF
+ 1973B91C58893DA1CD56CBF06ADFE491FFE392FFE2528D8B0306060000000000
+ 00000000000000000000010E1C085CB80E8AE911B1FF0B6EC511ABFF0D90F900
+ 00002D95E008A0FF16A0FF41AAED54D1FE6EDBE84ECCFB7AEADA375B5C1E3525
+ 66C5B361BFBF74D1AD6BAFAA6AB4AA6AB5B079C9AC78E0BE62CAC853CEF12B88
+ D3284634277BAE51C3F373CFBB6FC2B370C1B859978F5F9088313B3530220E00
+ 0000472811000000000000000101000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 57230ACDB26F89A683AEAD7B99C9AB78DBCB75D5BC68B5A91E2B2B35433881C8
+ C17AD4C76EBDB192D1BDD4F1BCD5D79B95FFED8DFFFA57DDFC31B8FB1A8EF521
+ 89D518BFFF30B7FB2F6680010000021A300CA6FF27AAEB4CD3FA27A1FF36AAFD
+ 25A9FF1579D62A432C41765C4885653966534F88800B13130000000000000000
+ 000000000000000000001F69A40E6EBE0F9BFA0F9EFF0B7DE60FA7FF0FA5FF00
+ 0000055BB1079AFF55AFDE6AC9ED5DE1FF50D2F162CFE176CFC1538B770E160D
+ 68C5AC50A1907CE4C6659C9264989160A29979C3BA82DBB46CCAAA78E1C13FA6
+ E151A08E19353349A4C156B5C66ED0B27CD6BD619B9662989253756A979E7566
+ 7B67CA934F000000000000000101000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 90481DED8E42A14F1EA5AA828DDAC568BDAD7EDFC666A9A5182523000000B3C3
+ 997FD0CA7ED2C469998E81D8D19EFFF18AFFED6CEAFE3BB7FF2A87CE2595E51F
+ ABFF28C3FF4ED2F92D4F460000001980D60A9AFF4CCEEF42D4FE36A0E55ECADC
+ 33ABEF1AA1FF3668730000000000000000000305060000000000000000000000
+ 000000000000000000001DA0FF10B1FF10ACFF06407D10A5FF0FA2FF0FAFFF04
+ 5695110A0EAAA5A5A4D8D182D6D44BC7FF32C3FF4CD1FD52CAF54ABDF059B3B4
+ 7FE7BB63BEAF6ED2B07ACCB983B8A94357506CA9A28DAC8F91D59F81E8C65FC9
+ C965D0C926422A27493A76E4C462C1AF68C2A57BDFC17EDCCD7BCABD7DCCC193
+ CBB5453113000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000F0200
+ 641601140000D7D79688D7C96DBEB46EC0B47FD1CA435E57000000000000B097
+ 5E869879B1CEA492D1BE9A7942131C1E579E8466B887207FC349CAFE2EAEFF52
+ DBFF3DC6FF32B6E12C4A310000001EB0FF12A4FF0776E0048FF937B1F675D6B1
+ 62D0DD2088ED6CDDE347815D0000000000000000010000000000000000000000
+ 00000000101A104397C01BA2F30C86E30644850D88F10FA0FF109FFF0F9DF00D
+ 8EFF000000003C7E16A6FF12A6FF62C4DB65D4EA4DC2F71EA8FF21ABFF57B1C4
+ 68B4A178D5B547837679D9C792CAAF2D3932554C2993976E81BDA568B4B47DEC
+ C55ECAC860D7FB050E17599C8568C6B25FC7CE64B59E4F917967B6A958918956
+ 5B41000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000461103
+ E04D16F9A152A4CDA97EC3B362A69C81CEBC7ABBAE6F73580000000000000000
+ 00452F15E49D53B6BF8EDDB671904B20479F8A4EBFF74ED6FF5CD1E852C9F346
+ D9FF3ECAFF0057AB00000000000024B7FF13A8FF0A79DB0B91F838BEFB78DCAC
+ 6ED2BA3D9CD05DC7D658A07B0406080000000000000000000000000000000000
+ 000000000000000000000F120E0000000961B6109CFF0E95FF0F9DFF109BF90F
+ A0FF03244606213232A0E545C8FF66D0F955B6E657AED93498F41A3B4F000000
+ 365A5B73CABC61B3AB5EA99470C6BF88C8B5798063311A0468766067ACAC82F0
+ CD6CCAB45EC8E759BBCD0D170731585A60C5E26CCCCA6EC1B56AB7A75EA59E55
+ 918B4E6053322C1B000000000000000000000000000000000000000000000000
+ 0000000000000000000000010000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000250800912809C16128
+ E5AA67B4C0958ABCA9749F8B6CB2A997C0A87E997E2422150200000000000000
+ 000C0400953008F58A3FB5BF96D3BE867CE3D466DFE97BE9D564D4D65CE7FB45
+ C9FF14A7FF075DAE0202003E6F632AB7FF12AAFF0C82E20D94F944B7FB62AE98
+ 6DC8A059C0D357C0CD7DE6B7345D530000000000000000010001020000000000
+ 000000000000000000000000000220400D86F90E9AFF1590FD11A7FF0C84DA0F
+ 9EFF002351230D0094A7945BCCF96CC7F654ACE2149AFF1D95F70E4E7D0E171A
+ 50786D70C2B86FC3B44F8D7F6BB7A873C1B97B9C87604D2B63422B86B9AD7AE1
+ C96EC5AA79D9C85EBECF58A37F0B0E0C3D7E895CB5C779D1BD6CB5AC7BB09F71
+ B6AC75AB9FA0A87A8F6031752A0B000000000000000000000000000000000000
+ 0000000000000000000000010000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000AF2C08FE5619
+ F08840CFA05F7F7D5678BCAD86C6B1A7BB8FAD83440000000000000000000000
+ 000000004D1304A9795D88ECD5BF9972A3D0A681EBD586F0BC51C7E551E1FF27
+ 95EE0BA6FF0A60A60000004D87772098FE1CAEFF1694FF0999FF37B9F976D1BB
+ 81EABF78E2B65DBFC583EDC1284A3C0000000000000000000000000002020000
+ 0000000000000000000001000014578F1094FF0FA4FF2674B610A2FF0C7CD80B
+ 96FB1881E2B86A3BB0C1A68CC4BC6FC3FF1893F91D9EFF149EFF159BFF48ABD6
+ 3C564951888971B9AD5DA4975C9A8E73C7BC93C1A7BCB680DFB9739EC2AF3B85
+ 8570CDBD7BD6C164C7B67BE2BC38615F1D342861C4AD86C6AA7ACCB87EA99795
+ 9F7986A68B818E6AC9B572B96F33300600000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000004C331388C0ADABB78E9CB08BEDB86E6910000000000000000000000000
+ 003A3F32A1DBC07EE2DB83F3D078EACB81E6D367AEA27AF5FC29B4FF1F98F819
+ 9DFF159EFC0A315A00000014200A4EC5FF26AEFF0E8DFE29B0FF28A4FF5ECCEA
+ 88F5CA44776B75DAAB7BE1C15998950306070000000000000000000000000000
+ 00000000000000000000090E0A307FB01787F61685DE2FBFFF0D9FFF0D85EC0A
+ 96FF2365B8E652006C758D5792D0639BC809A7FF2FA4F648ABE421A3FF3DAFFE
+ 6CDECA7EC9A376A69770C5BC3A595149767171B3A975B3AA8FAD8EBA9656D86B
+ 3390A59476B3AB7FE1C267C4B85B9F8F0000005AA08A6BC9AF63C0A878C4B16F
+ A195CAB2746C4A2252250AA3330A4F14030F0200020000000000060200000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 511A04D49E5993B195D59D5EC78E4C9458285C1904000000000000000000120A
+ 046C795E82C7BB6FB7AE39616287E4DC7BD0BB89F2C743C0FF159AF60F84EC12
+ 9FFF34ADF6243F360000005BA37969D6D01EBBFF2196E11AA2F844C8FE77E4DD
+ 6DBDA800000067B9A378DCB979D2C7263D3B0000000000000000000000000001
+ 020000000000000000001B302650B7DD1F6DAF2848532DB8FF0C95FD0D8BFA0E
+ A1FF1582EC2A0700003F800494FF0589F70C8FED1FABFF40A7C064D3EF418B9D
+ 4CA5AF8FDFA97EAD9965A9A283CBB030534E4E584780825F9C8B5AAD632CC37B
+ 4C77A79F7FB3A680DDC559B0AC68C2CA2F46421B2C2E70C5B266B9A35CA8996C
+ C7BC86A594AFA579C9A06640432E571902B3360C762409551804631B07000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000210600
+ BE4413CAA364C5A568EB63219C481A0000000000000000000000002602000602
+ 006A5E3B778E776F9D9239605F90E7D085F1DB64E0F52DB1FF208BDF1A9CF83F
+ BCFF2C617B111F190000006DBF8E52D7FF24BAFF2699E2259AF924B2FF75EFDD
+ 7ADBB12C4A48365A5B77D0C44376701829260000000000000000000000000000
+ 0000000000000000000008110E60B9AC457E74329CD0099EFF0B7ACF0D7BCF0E
+ ABFF11AAFF0F4A7A00040A0B70DD0F9CFF0C79D90B94F40BA0FF5DD7F15BA27F
+ 5CB480A9C48292AD8D60897D88B69D72BCB42D42400A00001E1005070000B387
+ 5084A88F89AA8F7DD5C762B3A366C9E1588E8C0000004A787376CBBE60B5B650
+ 8A8366ACA680C7B791BB9EC7AF72E48745D68C50D66E31F24D156C1904000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000003B0F02
+ E35B20BF9358E6843FC93407601705000000170701D23B0D4A0600D7702FAE72
+ 3887936F587F7786E0D78FF9E194FED57FFCF241D0FF3C9BBF25A6FF34B5FF6E
+ DACC1E351F000000477A6778F7EF34BCFF3BD1FF25AFFF1578D940CCFF46CBFC
+ 81F8E796FFEF253D4261A39C5E9F9C0305060000000000000000000000000000
+ 00000000000000000000060C0722402827505C22A4FC14A9FF0D7BE00D7AD913
+ ADFF0FA5FF093E730000000A5BB00EA2FF0E94FF0A6BCE0D96F92AB6FF48C8FC
+ 5BC7D5A4B47976C6A88FCCB29AA9866BA9A283B09C5F53320200000000002F27
+ 15B394586E9D9081DBC562A9A076C5BE74D0BF19312A13151643686168BDC664
+ BBC25693853C655E74AE9C7FB4A690B08FC9AE6EE46C2B742005000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000C0502892105
+ E15D23B14113F75518671704000000000000140300EC813CF2E7A0A0D7BBB0F3
+ D698DAC691F8EB8CFDDD79FAEC62DFF846B4EC2B637833BBFF52CCF85EC4D18D
+ FFD2000000000000001A420183F562E5E949DAFF2AB4FF256D9433C7FF5AE6FF
+ 6AE8E2346152020202131D19517F761018160000000000000000000000000000
+ 000000000000000000000D151369BF9D65CAC83DBDFF0F8FF2095BB30C91FF20
+ ABFF22B2FF0A7FCC000208114D880B5CB1119CFF0F9EFF0962C00D8EEE1CA4FF
+ 41C0FF70F0E581F4D3A0F5CBB6ECB097E7D47E9D8583754C0E04000000000000
+ 008D572DB5D2AA6AB1AB70BDAE7FC9B385CFAC8AF4D2000000130D07789C8A63
+ B6C481C2AD66A19B5B654E65755D9E78428338103A0800000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000002C180EB6330C
+ E64511100200B12F095A18050000000000000C01008D310BC1A46BA7F1D685F0
+ E491FFE890FFE087FFF34FC0E45FBDA940929458D8EB45D4FC85F6CF437D5E4C
+ 8C71000000011C3D0B91FF41BFFF55DCF854DEFC38C1FF4BB5C81DA0FF48D6FF
+ 75F4EA8CFBD968ADAA0D15130302040202020000000000000000000000000000
+ 00000000000000000000335F4977F5F63CC1FF1AA7FF0B60A50F63A61095FF1B
+ A8FE30AFFD0D99FF074C8E000000103758229FF812AEFF19A6FF0A5AA8228BE0
+ 1B9AF330B5FF5DCFF790E5CCAACF9DA8BE98748769BA945A7131100000007B2D
+ 0DF8BC729FBD9B61897C85C9B57FB7A6A2C3957FD5B63F6F6E0600005F5F3E6F
+ B7A8A4CF9B7EB3A18CBCA07FA38D608D8564593643230E000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000110401A42B08
+ 6B1B050000001A0600190702000000000000000000000000533C1F61684C79BE
+ B47EDACB6EC9B154998A67C0AC59B3B055D2FF53E2FF69EDF687EEC32E524500
+ 00000910102685C7099BFF48B9EF3DC7FF54E7FD3ED0FF53D3F3217FBF42CBFF
+ 53E8FF7BF2EE73C9C9608C81656B510D0B070000000100000000000000000000
+ 0000000000000055958889FFCA6FE2DF5BCFEF357C980A4D921FA2FF1B93FF1F
+ A6FF46C8FA1795F00973D500000008080144A6C817AEFF2DB4FF0D97FF2191E5
+ 1871C31D5B8B509779263F3193411CCC9858968858BD965E9D45180000007827
+ 0BA65A2A352712739B8A94B79DA3B58A83C7B073CDB268ABA718201C13151368
+ BC9AAAB57C9EBF978FA282C08E528CA68996AC87C9884B8027085112020F0300
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000001D1B1563311D
+ 150C090000000000000000010000000000000000000000000000000B08065282
+ 8070C7AC60B9AD5ABCDC75F0E277E7D36DEDF251D7FF7EFFF850878102020200
+ 000000010D23A6FF0D93FF1192FF52D1FD5FDDEC49D8F738CFFF09457357E8FF
+ 55DEF757E4FE8AF8E28AE9DBADE7CA1316100000000000000000000000000000
+ 0000000000000009110F75D2B3223F33203B2E050000179DFF219AFA3EA9ED29
+ 99F32CB0F71C92DB0DA0FF0B5BA908050044979B28A9FA39C1FF3EBBFF229BFF
+ 3FBAFB2398E742A2C84368539F3F13F0742B412F16CA9452BE41110800000000
+ 0000000048341597B18EB6B480BD8D577EC4B061B0A975BFB55A6C5C00000058
+ A29A7BBE9FBEA26FA1A27BBA9050DC6023BB955B9E9460D37B3BB9380D160300
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000080A0A000000
+ 00000000000000000000000000000000000089320F8A7647ADD2AC89E1D78CFF
+ EA86F6D283EAE37FEFE77BE0BD77EEF05BDAFF2BBCFF62CCF140645E00000009
+ 0F076AD2D02EAEFF1179D459C5F671EFF760DCD74EE9FF3AC3FF47B7E2178CDE
+ 59ECFF6FEFE86BCBC472C6B2223C3D0A0B0A0200000000000000000000000000
+ 000000000000000000000000000000000000004E938E22A1FF3CB2E967C3BE39
+ B1F7058BF4096CCA0F9DFF0B52990000000011310585EE4CC6E63CC7FF42B5F1
+ 54BBD550C7F432A5FA66CFE1B1A97B817E68322922D56825D14F19741C050000
+ 00000000883C13C3AE72D4A05DAD704678C3BC579B8C7BBDB35C796D07000043
+ 737677C3B295836673ADA2A89169BC4513B43209CE7739A56538D2521BAB2A09
+ 4214070F110F0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000001D0701450D00551600FAB869B8D6AC85D4C37ADACD89E7
+ D08EDCC582DCCA76CFB87FF0EE4BC6FF4ABFF714ADFF18364B1F2D2700000056
+ 9E7450C5F81FA0FF3FA1E051C7FA4EBEF25FDFEF5AE5FB57E2FF52C7E335B9F6
+ 1EAFFF4BCBFF71DEEC82DEC983DED490C9BB7F61361E10060000000000000000
+ 000000000000000001010000000000000000005EB3A42E9BF453BEDA72D1A435
+ BAF80A8BF00A66BE0E94FF22A6FF152A2E000000075DA61BA5FF3BBFF34BD2FF
+ 50BAD87DE1A573DDCF5FC8CD61D6CB7EF9D96DABA5AE4621B7471B7D220A0000
+ 000000008C2B0AE78D468B471DD7985F82C8B463A39B83B5A37575540500002D
+ 362E75C3B85BAEA65DA8A077C5B8B97039A32905CE4312A12E099A3E15C73C0F
+ AA2B082E13080000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000521504F65C1FF99850A6CDAB84C2B17FD0C397D9C4B4BE
+ 9087C0B07CD2BF83ECD272DCFC2AA5FF29A7FD1CA6FF0803000000000D18154C
+ 8C7161D0E0249AF71888F241BFFF4FB8D24FD8FF52D4FC4DE6FF54CAE34FD0DE
+ 099EFE17B8FF42B3F8569EBF96BC9CA0B992CFAE67733C170000000000000000
+ 000000000000000001010000000000003D705672D7B93FA3D469D5D568B5873B
+ ABEE0991F90C76DB1096FF1690FB376B730000000954990794FF40A9DE3FCDFF
+ 30ADEF7AECD274CCA880ECC873DEC079E3BE7FE9CB83ABA0AD6E500501000000
+ 0007000099300CDF4F19812305D79F6183B7A375AC997EB29FBF9E6242200B0C
+ 0B076A958572B0A5558B816DAEA399A885BF824ACB4313811D04000000681A05
+ 8D25075E1A05030D0E0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000071312982909EB4D15FF8A3FFDB366A9AC76B4BE90BCCC9DC694549EBB
+ 9893CBB78AEABC8AEFE070C7EC3695E12FB4FF38819C000000000000335A5189
+ F6BA55CCF81774C62E89C03CB8FF87F0BF68C6D25ACFFC5FF1FF4DCDF063D3D1
+ 14AFFF098CE411B9FF10B7FF578DA4513B1C0F0A030D05010000000000000000
+ 0000000000000000000000000000000038684E79E2C348A1B982F1C080F0D92F
+ ADFF0D93F21170C91E9EFF28A2FF1D323100000006264B0E8BFA1190F40F7ADB
+ 0F9FFF32B0FF73C3AB60A49588F4D442766B7CDAC97BD3CB8896875744320000
+ 00000000781F074F0D00E66727BCC891909B7486AC93A3AB7FB6884E89371200
+ 00006E6A4481AB956BA89B3E5B5A9FD2ABB0AD78C17034BB340A280600461505
+ 2419122919101F21210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000692A2257251E130D0D
+ 4E2F2F070607160F0B801E05AC2403000000651B01FFB05CD0692FC67A46BDC9
+ 978EFFE46FEEF24DB2F694A59428B5FF66D5DD36634A0000005E9F998CF8D573
+ E6D841B0EB3992B932A2E35FCCDA8AEBC150BFE83FB8FF64EAFF3EC9F874D9D7
+ 3AC0F80FB2FF0A85E8000C210000000000000000000000000000000000000000
+ 000000000000000000000000000001034E897C7EEABC61B79248806678D9C040
+ AFF5239BEF0A63B50CA0FF4DB4D85CA5860000000602001D87D10F9CFF0C79D7
+ 1376CD25AAFF61D0D982F3CE89EEDD3C65630000004975705F8D847091811F15
+ 060702000000009F2103FA7B35B9A57987845F70A897DD90487A4C2500000000
+ 00002A1406B8AC758EAB8B649C942E362C98A88ABF9461D56428E44A15A12F0B
+ 1002000601000000000505070202020000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000003C2B2BAC4522AC431E
+ BF441B7E2A107E290B772C0CF868288E4017D4773FD1976996DFC980E5DB84FB
+ E569E3F358C8DB3A9EC951D8FF74E9DE335B3F00000000000029474575D5B071
+ DABF52CAED358DB146B3ED7EF0CD89D0B04597D83DBEFC65E9FF39C9F76DCFD0
+ 2DB7F90FA9FF0F9EFF0E94FF031F3A0000000000000000000000000000000000
+ 000000000000000000000000001E32346ABCAB7DE7BD3762541B30277CE1BE52
+ C8EE0B80EA1A5F911FADFF33BFFF63B08B1A2F210B1212101A1D30AEFF19A1FF
+ 0F7CE30C65B42EB8FF59C9E97FE5C688ECCB5A9C9559908B141D191D2F2E5A43
+ 219976498E3111F1591CEF964FA0A172AB8F5E9DAF82E4793686280705000000
+ 000034120477562EC29A5B82A78F8C90674F625492986FBCA46BD17333C64110
+ B62E086D29132B251F5234311311120000001E09060D02000501000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000F0C10AF431FFF6C2D
+ F68D4EEE6C2EFF5B16ECA25EC3C394D6D49EBFD4A693CDBD84F3E282FCF983FA
+ DA60C0B959B6B759CEEE7AEFD58AFFD429483E0000000000004678707ADBC080
+ EBCB41ABED51A6A45ECDD784FBD969B9B62DAAF551CAFB65E6FD32BBF86ECBCC
+ 43B6F50CB4FF0E99FF0E97FF0B71D001070F0000000000000000000000000000
+ 000000000000000000000000000000003F6E687DDCCB1A2C2C78D9B672E0D330
+ ACFF3292CD18619938BCFF29B0FF51D2F647846700000000000048959B30ADFF
+ 2AA1FB1673C52776A638C0FF5BD0E778E6CF87F7D271CDB56AB9B07ABBB2A8C8
+ A39D9A7FBE552BED995BCE531C9A6037AD956BB1915FEC79356A160000000000
+ 00000000003C1506D06727A59C6AA9A7777674597145238D8365BF7247CE622B
+ C13B0FA7330F9F3514822A10401D1132211C4D2B2B34110D0200000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000004B281BFF6726
+ EEB16FCAC992D2C897D6BE87AFDEBB8AE5D688F3E790FEDB8AFDE35DB5C54F94
+ 8156C4E46EE6E285F5D977D8AF3A66612643420000001321206AB2AC78C9B067
+ E2E84AB8CE2C656E60D9EA7CEDCE65E2FF7DC8E66ED0EB49CEFF3CC8FB6ECAC9
+ 6FC1D64FA9DF0BB1FF0E93FD0C83FF0001060000000000000000000000000000
+ 00000000000000000000000000000000467674477A7B000000549F8964CDD555
+ D2FB2D8EC81981E436B0F54BCBFD29ACFE08539D0000000000007BE5B455C1EE
+ 4CB2DD199FFF3990B93270785FCBDC5EE2FE7CF5DF8BF6D28BF0D689E7D984EC
+ D976C4B799CAB3E7C985AE3E0DBA844EC38853D87030B1380EB2300A1A050100
+ 0000000000080000A9370ED0813EB68E599F946FA08252362B19BE9D64BC9056
+ C1743AC3622CBB4419B73B0E9430125F3F2E221E250300000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000100000000000000000000003B0800
+ E16225D2BD8386DECF8EE1CEA6E2B38ACFBC66AEB175CCBD3963636CC2A77FF4
+ E67EE8D888FBD178CDC4487B770000000000000A09046D7C666CBDBC71EFF446
+ D8FF69CAAB326F816DDFEF7CE4C484C0A385C5C15AC3FB1FB1FF4ECDF978BCB7
+ 37A0DB06A4FF0E95FE11A9FC0FA1FF1AB3FF03090A0303020000000000000000
+ 0000000000000000000000000000000002020100000073CAC08FFFCD76E8D543
+ C7FF11426D40ABE540ADEA57DCF85AD4DE098BFF042A500000002C513D1F392D
+ 7EE5B157CEF235C3FF3CAEE60D304F4A917F2F98ED5ECFE876E8D37FF3D281E5
+ CC84DFD680AA94000000C9370DE58640CC4F1DE6441027060000000000000000
+ 00000000001B0600992D0B791F03D86423C2622CACA069C153233E0C01862C09
+ B93D11C64012A62B08842B103A27202118203215130000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000001404003A0A001C0807110E13381F1D280C047C26095A180353341A
+ 8549289E815996A4818B977C5F958B5A7C6E56927F7CD2B677D9E280F2DA87E7
+ D076CFBE81E4D079C3B90000000000000800008FA07C79D9EA5CD5FB56D6F659
+ DEFF4E959D519A7F7AEBD47DE0CEB2B89775B6DA33A8FE1EB6FF58C6EF82BBB9
+ 7CA8B417B0FF0E96FC0E8BEF0F9DFC0DA0FF248CD70B0D090000000000000000
+ 00000000000000000000000000090A082939344B797682E3D27EE7CC4EBCE946
+ B1EC16200B56C8E153B9D346C8FD3CB6EF1896FF0D78D20C1C27000000182B21
+ 4E8D6F74E2C63BC1FE54D8FF4CC0FA65C7B65087605AA2824F8E72518F845188
+ 86465D52131915100100D74513DA6328AD350FAD2D090E020000000000000000
+ 0000000000000000000000000000CE3F0FB53B11BD763CC37C498D6E54423F29
+ 4110013C0B002D10061C19150002030000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000200503471105882A194B2B2E52322BAC3E1AD24C1CF37439F39F5CC9C18D
+ A0C6A784BFB390BB9BB3BD8C85C5B97CE1D598F1D48DE1CC79DACE88E4D17EBA
+ AE58979445696586AC920000000102000B160E3A87C229AFFF51C6F461DCF766
+ D1ED4587865DA7917BEDCA89DFC95BAACF3B9FF10095FB2CB0FF5DC3EE84AEAD
+ 75A6B411B0FF10ABFF0F99FE0C80F8032B5908121B0000000000000000000000
+ 000000000000000000000000000100005480788AEBDC82F0C96BD7CD6AD8D244
+ 795D2479B05AD4E858B5BC65E5EF37B0FC1B8BE40F9FFF236CA0000000000000
+ 1F32317FE9C046C6F95BDBF55ECEE15ABDC56FE4DB3E90B738747E4C8B734677
+ 711628280000005F1C08D64816D045167F270B461D0E00000000000000000000
+ 0000000000000000000000000000932506962707C95520BB612CBC5F32B4834F
+ A552216A1D070000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000094
+ 1D0E9E28115A2D2A6B392D973B1ED24F1ED86C36D36D37DE8545C3CD98C2D8A8
+ ADD1B0D3AF7DCCD0998FD1BB7AD1C785D2C7C5BD8583CBBD7FD0C383C2B4A2B7
+ 9258624D00000010100B0000000F190E49A4BB1FA0FF52B5E055C8FC6AD5E76F
+ CEC565BB903A6B6E76E4DA83EAD379C2C9449FD600A8FF5F9AC75AC1FA86AEA1
+ BDAD8C1BA6FB0CA1FF0E97FF10A0FF0C5EAE0000000000000000000000000000
+ 00000000000000000000000000121D1B63A7A181E9C380F1D77FEFC877D8B433
+ 593D3AACFF6EE1DA58A9966BDDDE5DDCFE2D9AEB0E94FF3FA5DE335C46000000
+ 141F1F81DECE1BA2FF58DAF660DBFB7EE8C963CABB70E0E078E0E26DDAC97CE5
+ C176CDC066ABA6654332C62F019320006A2F1C02070700000000000000000000
+ 00000000000000000000000000000F0603551805CD3E0FBE5421B22E07BF5624
+ BC763AD04C18551403050C0B0001010000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000931F077821114E28265531258B2A0EB7380FEE662AF77236CD4916D34510
+ E43E05F38D48ABB68CA9C299D8AB6FFE913FACCCA08AA3879EBB98DAA258422A
+ 0C000000000000000000467C6D73DEBE43C2FD5FB0E051BEFD6BC2E77EDEC979
+ E2BC60A5953D738075E1E972CEBC63E6FF84D9FD91A1BC0DA0FA7BC3F4577C89
+ 6A61686280BA08ADFF119EFF0E96FF10ADFF1632470000000000000000000000
+ 00000000000000000000A19F6F99D6C381DCD17BCEC86EC0B0406D6E00000065
+ BD9B42A7DD73D2BB7EE4B347AAD638B3FF39A0E61F8BE424ADFF5FC6CE1D4138
+ 0000000000000B81FB3AAFF733ACF554CFFF7FE3C06DC3AD74C9B583E5C373DA
+ BF6ECBB967A59B838373999A789C9A6D4B342D06020300000003000000000000
+ 0000000000000000000000000000020403702D178922079124069E2F0C7D250B
+ BD4317AE4419BC39105C1C090206060000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000300000600000000004B322FAC411E89361C752F1C7B250CE24413
+ FE7530997A4DE38F4CE89959E05016DF7535B57C46292010A8632FB34C1B0000
+ 000000000000021B312A90FFDD5CD7F24A9BE088B3BC68C0E896D4BE6FD2C27B
+ E0CC457571417C6988ECD47CE4E946C2F55CADD72D9CEE07A7FF9EA3B8886E4B
+ 195EA304A7FF0D91F719AFFF1D87DC1282E13CA1E60808000000000000000000
+ 000000000000000000003C331C49594B56736635534F15212300000037615176
+ E2C558B3B07CDBBF74CEB36DC0A938B2FF0B69C31B78C338B9FF47B1C6143535
+ 000000000000126FC6179CFF30A1F132AAFF7AE4E573D1B376CFBA6EAAA588CF
+ C184DBC7639F9659696174C2B89FB994D2924F913A127722080D020000000000
+ 000000000000000000000000000004040437231B0D0704270B049E29086B2813
+ 8E3317A5320C9E3712832A0E3927211913150000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000002705006235336A3328422524332F3090391CA43612
+ 72240A320300FF6E2AC14113852509AB340E1F0500000000320F022B09000006
+ 0937504A436F7177D1B978EAD23EADEA4484BD72C1DD8CDCCD7DD3BD66C7C76F
+ D1DE2C3C3668B7A18EEEC78DCBB38EC9BB51B2EB139BFF09B0FF5B9FD3A9583E
+ 3B4D7B099AFF0D8CFA14A5FF1B98DE2B88D037738117271A0000000000000000
+ 000000000000000000000000000300000200000000000000000D16185FA79678
+ E2BE69C8AE79D3BC6FC1B586EFC639ABFB2082CB1571C824A6FF6CE0D6396F5D
+ 000000000000060E131E9FFF108EFB4C9FD263D7FF68CBCA72CAB26EB6B26C91
+ 7F6B887389C5B867A29C73A89B8EC3ADA5AF84D0A263C2511A01000000000000
+ 0000000000000000000000000000000000000002000000000404542817431F10
+ 432216AA330D8A2F0F8C3312692B172C21220000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000962712000103070202060404130B0C080200
+ 0000000C0D0BC4360D0801000400000800000000000000000000000000000101
+ 025C91888AF2DD80EAC257CFE74FA7B8A19D94BFE5B28CD7BB6DBAAF71C6C069
+ CBDF4E4C36447D787ADFC68CD2B59BBFC67FC5E472A3E315ABFF1EA4FF4D4C73
+ 072C5C0EA2FA0FA0F70D7DDB0EABFF1AA1FF548E7C254229060B090000000000
+ 0000000000000000000000000000000100000100000000000001030555978A76
+ D8B76CCCB56AB8A857949472BEA85BC8DD2D9FEC238DE62CA5FF4BC3F37CE9C7
+ 66B2A0070A0B11211F51CAFF1D9AFF1C7FDC7FC6D554CAF181EBBF90F4CF84AD
+ A073572F908B5C94D1BD718A73464F3ECBBC80CBB575E6863ECE4A1663190500
+ 0000000000000000000000000000000000000000000000000000231C20392B28
+ 242426652C189F280671260F672F1E332C29220E0E0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000002A241E0000000000000000000000000000000000000000001D2B
+ 2970BFB479DABE70E7E260AFB4C9714FBED2A89DF4D074A59868A3978DD6B990
+ E3C02F594D5B888078D2C37CE9DA8EC4DB93AFBD9196AE129EFE0AA1FF084B8F
+ 07346510A9FF12AFFF0C7DE20C7CDA1FB1FF42CBFF64CCCA1D3527070D0C0000
+ 0000000000000000000000000000000000000000000000000028403E75C6BD6B
+ C7AA72CDB379D0C24D757072C7A779E9C839A6F31988F53EBFFF4ABEEB52A291
+ 1728210000000000001B33305DC8DF259FFF4E87973195D94CBCEA6ADCC9A6D3
+ 9A88B39EB47342C7BA82BEA366000000000000972601902405A02B0968190405
+ 00000605050302020000000105070A07060C04030000000000000000000B080B
+ 271D233F3230672610351D1379260C412A2A351A1C1E07020500000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000001C0C044D3119635C3C8CCD
+ BD7DD1C87EE4CD68D3DD49908371D7D290DDB995CFA673ABA194BB9EA0C9A594
+ D3A7579D95292D2582CBB681EBDC8FDBC3A9D7D0809AD15973B82B93E60C4C82
+ 02244816A2F917B1FF0F99FF0F83F40A6DBE33B0FA64DAEF84F6C52A4B440000
+ 00000000000000000000000101000000000000000000050605537A7371C1B772
+ CEBD63B1A07DD1C651706872C0A66DE1D93FB4F02DA0F42AA4FF60D4E66ED9C6
+ 3A66560000000000001A2F206BCAAF4CB1D736ADEE24668748B1D05ECFE279E6
+ CE77DCCA83DBCE98AC93D2884D363626402A11DF63280000000000002C09000E
+ 0604A13E1F3C160A0B00006731244F312C130607000000000000000000000000
+ 31110E46302D3B282615111445281D482E233E2628631E144C11020500000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000045270ECDAF71A4CFB17ED3
+ C47AD8C281F3D73C6D586AD9DC76E8D67ADFCFA59D6D91AD90BBA97392CCB082
+ CBB05598963C230D99A98598D9B16DD9E66FCDF1CBBC9CEC815B885572053058
+ 054F94149CFF2CBFFF189EFF159EFF147BD51B2D2C26483D1B32240000000000
+ 0000000000000000000000010100000000000000000000000034514C70B7B17A
+ D9BE43706F77C9C185CABE81E6BF6BD9CB46CBFD36A8DD36B4F952D2FB6BC0A7
+ 5EA1990D171700000016282672D3AE67C8B469D8D247ADD5468D8855AFB274ED
+ D875EADB7CE6CB79C4B6A2AC94A5B48ECBBF88DDBE80554A2BAD6330D644129F
+ 2907FF6522A82905B84619DF421142271A000000000000000000000000000000
+ 220805462A2B421C1A0100031B12143A28283928272D13131805000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000003C483A70B3A977D3
+ C379E2E53F768246908772E1EC78E7CFAAA27FB9A169C9A161C16C3D7FC5B26D
+ CDC0659892436D609CF5C5B4F9C366DBFF65C1F0659ED14CA2F72E93D1000000
+ 075AA324A7FF31BBFF2DA0F735B0FA16A0FF336F8C0000000000000000000000
+ 000000000000000000000000000000000000000000000202004C5B4C7BB4A876
+ CDC32338365E817494BCA6A0DFA86EE8DF4DD0FF156AB944BFEF3FCAFF6AE3E4
+ 5E9A8D08090700000003050505090763B6947CE1B864CFCC49BCDF3784A01A33
+ 325BCBF671DEE981E8CE86DBC98ADEC97ECEC27FBDAAA4C6A5EA9D56F86A21F8
+ 914AD1B177CE9157F47231A9330E2C2D2C000000000000000000000000000000
+ 3F0E035B1A0E2608000000000B02003C18194622243C19171104000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000491B07C9995AA4CEAC8DC7B185DC
+ CB6BC4B55AA0927BE2C483E4CF7EC5B9B8B18EB6844EF2722AB99D706EBAB373
+ C4B58BCBB99EFFE070F3F974A4DB9DABB6B7A99094BFCF63ABF42D99DA16302A
+ 0866C10D9BFF0A96FF31B3F460C6D62A9EFC55C6EF48815E0000000000000000
+ 000000000000000202020000000000000000000000001106007E744D7CB7A86D
+ B8B32E4039000000517C728FD4BE64DEE74BC8F8296F913EADE648DAFF4ACCFA
+ 6FE1ED81D5CE556A5E0000000000002A474668B6AC7AE8C472D8C165CDE25DCC
+ C82A4B3D56A08275D8B676DECB6BD3D87BD5CA89CCBCC7BB7DADA785ACCCA89F
+ CAA6B4AD7AE99156D94310471305000000000000000000000000000000000000
+ 0000000000000000000000000000000000006618057021125D15060700000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000020101000000130000CE4B15D59855B5AD7E92CAB08BE9
+ C853937D4D86847DEBD28ACEBD92927FE35519551E06DA4D18B2B98E70AF9F7A
+ B8AE9B986B2D4A423F815F878E807088A7A193A3A6A0ADCAA68F963C37120908
+ 0E74C30EA2FF0A80ED24AFFA6DD9C85AC7E14EB8DF57A2840000000000000000
+ 0000000000000000000000000000000000000000000038210DA3996666958B86
+ B5A33027120F15146A9D917ACFC460E8F24CD7FF23657C309BE35AE3FF47CFF7
+ 41B8F845B3F631423A0000000000000000005C9D9A79D7BF6EC8AA79D4B75DD9
+ E05CC7CF33616C477A704675734C848C7AD1BEA8F2C37CDED172D2C97BC2B497
+ C9AADA9F5FE25B1F661B05000000000000000000000000000000000000000000
+ 0000000001010000000000000000000000001A05014810017219041404000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000101000000300D03902F0ED04D1BD5692BC1B17D91BDA673D3CD6CBF
+ B638574F6CBABC73D7CE9ECDB0B09D708D2E0D751800E68E4AA4BD937EA99283
+ BCA8C68C4C2000002F5E4A39A9F035BFFF66B2D89094ADAE7B76BB5144823922
+ 1B81D50FA0FF0A71DA10A3FF59D8EF70CFAD58B1A47DE9BE487F720204050000
+ 000000000000000000000000000000000000000000000000003F30178C9E797F
+ 815A291C0C92AF8E87DBD45FDCF553DFFD46C3FC3B94AD3EBBF15DDEF649CBFE
+ 4BBAEE0F91FF1D68A11E3A3A00000000000071B4A93B645F53928677C7BD76E2
+ DA53D6FD67D3ED529E954B8C7641655D436C5C35695F68B6B07EBAAA9EB891D7
+ 9A5B7733112C0600180500000102000000000000000000000000000000000000
+ 0000000001010000000000000000000000000000000000001704010701000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000020000000000050000AB3009FA8D46B3C29981B5A278C2BA7BD0D55A72
+ 6257958490EAD074CDC2AECBA6884F1D540E00DA4F16DAA062ADA27388967CB3
+ B583C37839928E686AE4DF59D2F585F3C746C7E84FA4CE5876B33069B8622405
+ 3B78AC20ADFF0D8FFE1B9EFF55CAF36ECA980B130E8EFFD33158480000000000
+ 00000000000000000000000000000000000000000000000000412F17C8A865D4
+ 823A000000252D255DA4A467E0EE66E2F52FABED369AC350CAE950DEFE4DBDF8
+ 53BCEA3DA9ED1496FF1F52750000000000000C110F000000416D6863A5A273C8
+ C856D2FA51C7F87FE0CF88DEB272CCC065A9A2474D3E795A2E00020706020045
+ 2E180000000C0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000005000099693485A088A9C1989FD7B2B2B2770B21
+ 2596E5C5A1CAA789C3ACAFC39BC26935B22C08EC551AB6B1809489629FAF86E1
+ 712FAE784D78FAE479EBCF8DFFCC71D3BB29BDFF048DFF06A2FF0E7BD0000000
+ 43848824BEFF21A6F30E72CB2EB3FF73F1F77CDEB13050523F6C680101020000
+ 0000000000000000000000000000000000000000000000000052250C7B381100
+ 0000271E1287B3997CCAC467C9D968EDFF33A9DB3797C057D2F242D8FF70D2E4
+ 46ADF467AABD2FA1FF56C2DC38695309110E00000000000026302C668677709F
+ 8C5CC3E950C1ED51BCF983CEBB70CCB768BEC075D0DB90D6B398E3BB85D5C775
+ C6C0A9C6A1CCB879D27337FF5E1C2807002A06002C1F18030507000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000F0D0B762007F36B2CDC9F5CDB894DB9B987ADDCAF1119177BB5
+ A67DD6C8BAAD7F99B89EAE662BE1501AF15C20EA8642A56637886D4AC0A26DD4
+ 5E268ACDC261B89C64B4948DFBD950C7EE1AA0FF0D92FB1CAEFF172A391C2D16
+ 50C3D530C1FF2DB0FF1981DF3CABEB57CDF170CB9D213A352030300508070000
+ 000000000000000000000000000000000000000000000000001203000E010000
+ 0000DF9E5696B6927FB6B56CE1F356DFFE3AA2BE247EB94ED1FF45D0FA62DAF9
+ 55B8EA53AEE42579C532ABFF6DDAD24D8D74000000000000000000120D03A3AC
+ 7E62BEE049B0EB55BCEE83BEC594C8AD70B1A36FB6A990CCAFB3C08CA7A58170
+ BFB474C1B68FB297AFAC7ECBA467EA6427C94214C03B115419081E120C0C0B0D
+ 120606280C080000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007F3016D33B0DDE551FD1410CC89D6C8BBDAC80C1B3000104A4C6
+ A06FCCC9C9A573CFA56A9A4923982F10C43C10682007A25427AF996ED16D31DB
+ 5D26927764549D9B6BBB9E88FAE331B7FF188AE71597FF44CAFF1E2C18001631
+ 1894EB46D0FF43C2FF2684C33691BE40BAFF87FDDC89F5D57FD6CA0609080000
+ 0000000000000000000000000000000000000000000000000009010000000078
+ 1200C48F4C9DB9A27ED7E04BDEFF60DFF72681AF2E7A9B4FD4FF4ECFF55CC8DC
+ 7AD2CF74BED35D75902295EB63CAC75FB08A1E3433000000000000000000D2A9
+ 5C8CC0BF219EFF60AFCE64BEEC9FC7AA99D1AC7EB8A679A08AACB78CBE9D67B0
+ A37DA3C09893BA9AA2AA8192825FD08A4BE3783FD74D19AD2D08563323372C2C
+ 472C2B6226210000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000151D1F5D2C1A5E1C09AE2F08DC88478CC5AE73BDB276A18B762100B3C9
+ A07DC9C3D39963D66125C643140000000D0200010000E78541C66C32DA6E3795
+ 8F6B828E7F81EAC683FCE648CDFF2393F326A4FC41BDFF468989253E1D00204D
+ 25B0FF41D0FF55CEFA44B5EC2A6A7A56B4BB68DBE774E7DB7FE9CA5EA49E455D
+ 52000000000000000000000000010000000000020100000000470F02DF561FF3
+ A35DC5C58D7DD6E151C9F25DD7F047C4FF2475A63E9BAF5FDCFA41C0FF45B0DE
+ 7ED6BB8FD6CC7C9F9E0E619A50C5EE7FEAC355918A457373101B190000006B29
+ 0A182B283696C740A1EFACAC8A79B4CD98D2B4ADCC9E829F84789B89C69863D9
+ 4911B5451BDD8747CC9F62BC9E6F8A8B65865633C79056D85821B23C149F3211
+ 5D32241C1A1D230A090000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000001002001E0904
+ 3623213F2D2C862508E64D18EF8642AFAF8386B29EC5B984371D09867051C5DD
+ A0A3BC97E0B06CCD3F11761B030000000000009D2304EE863FD1AD7AA1A59191
+ F2E08AFFEA85FFEE5EE0FE60B6A928A7FC4AD6FF70E8D81F341E0000091691F7
+ 0F93FF34BCFF68DCE15AC6D33BBFFF28555969BE927FE5BF7FE1CB89E9DF6599
+ 8F333629000000000000000000000000000000000000000000000000652407D0
+ A25E75B4A96AA7A169C8D85CC9F927A3F92E93C167DBE77BDEE040C6FE58B2D9
+ 63C3C78BDCC1AECFADB47E5557A2AC62CBC083EFC4539187060A0A0000000000
+ 00000000478A7B3DB9F87490AF9989768DAFA7CEC488A5CEA791AE92A79E6FC8
+ 9959E35519A42000C43C0EEF6523E67D3DBC5824881E01B73E13C33D12A43712
+ 8C341867362346313474271C6D19060801000000000701010000000000000200
+ 004E1A2439152000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000001807055D3432
+ 833821B84119DC521CD87F46B79964AAA170BDB38BAD4E173F372966BEB9DB9D
+ 69B4A776D4965CFB60222A0F07000000100A07A32A08C54F1DBD865E8AB4A28A
+ F2D985FCD860CBCF4CA8B545AFE651D8FF54DFFF6EDAC708090212292E1D95F0
+ 1C96F855DBFF50C4EE78DEBB58C2DB6DDDD9101D1015232622393D4365620000
+ 00000000000000000000000000000000000000000000000000280900874F2695
+ A88491BAA180C9CB72BEE132B1FE1F9CF34BBFDF64C9DB60D9F862BAE554BEF3
+ 63B1B181DCAB70CBC9417B852C81A46BDCDB6EC8AA4173671421210000000000
+ 0005090823412F71CEA248BFE6469ABF6B7682BCA888C1CF957CAA98938063CC
+ 6B35CF6D3483300F5015077C2006BB360CE75A207E270D00000040160837221B
+ 282220271A1D65241C3F11082A09010000000F02018C1A0F0000002106008B1C
+ 0DD52D1C3F0C0900000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000010000160D0D
+ 49291D9A3210BB4719B37243BE8E58D0A56FD4844F7110006B7D6387AE9BD68D
+ 5EDC8B4DC8753FF55418A038190D12142B160CA72F0CBB4214AC330E483A3324
+ 3D4275D7B654B8C35CCDD969DBDE61E8FE40CAFF50B4CA090A03264F522BB0FF
+ 1B92F4149CFF5AC3E283E7B874E0D069D2C866BB960305070000000000000000
+ 000000000000000000000000000000000000000000006E1B05D5511CEDA35BD1
+ A164CFA0618BA1A764ABD407A9FF219FF066C1CB51C6E84ACEFF79B0C160BEF0
+ 52ADEC6EC3B973E2CF55B3AB55A7985CBBC37CDDBC6CB8B05A8E8C0307080000
+ 000000000000003E6E5B81F4D14FC0D85AA3A79E6350B79B8071E4D176D2C893
+ AD9AAC9D7EBA3D0A7F2608030607422721C63A0F973819030302000000000000
+ 1F0C0D0400002C0900000000000000040000841F0EA22B18450D037F1F0C972C
+ 19A2231031080600000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000104912507D16830CE6C37D9713EC480585B8F89350B00A6996A7EC1B0D48D
+ 57DE5118EA682A2A0800120705000102201A1683351A942302641B075155516A
+ BDAA73E3CD76E6E372E0CD77F4F13CC1FF2EB8FF053C6A00000048867343BBF8
+ 1185EF189CFC5DCFFB6DBEA168BEAB6BD6C383EAC5233D3F0000000000000000
+ 0001010100000000000000000000000000000022110ACA340AD23E10EE5A1EC5
+ 29005786CE1E95F81CA3FC0795FF17A4F66BB3B14CC1ED50D4FF78A5C799B19E
+ 94A2818EB5A073E4C663D5DB224D5A63BF9D67C9B778D1BF5F989385906F0000
+ 0003000000000058979685F4CC74DABA5BC8C97F7A59648C6E7AF1CE78E1C970
+ CEC172BFB680A796B59C6AA6390DCE4C1DA04320582E22221416130D0811191B
+ 533530210F0F00000015080851231F7118028E2D1F59312B4E22205B342D702D
+ 25CA2B147F181103000100000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000001D1613
+ 8D3517D44917BA4116C53A0CB076527EAD9F67826C4B0B00D9935B9FB28DCD92
+ 54A42907EA491542221300000009040730272B7B230B54402D8CB29470B0A87E
+ E8CB8AF5D37FDDC47DE5C56BE7FA1896FF119DFF08294C00000085FCCA43B9FA
+ 257DB827A0F374DED168AFA378CEBD6CC5AA7BE6CB6AB3AC1623220000000000
+ 000000000000000000000000000000000000000000000000000D00006E170013
+ 87E1029EFF0D9BF90C85E90B9EFD61B3E676B5B243BAE652CEFF94A1B25E9FD5
+ 86AFB39FC4A772D2B36ED4D735727558958264D3DD6ABEA776CFC076C8C0989B
+ 721408000000000B121301000181DFCD73D4B965E6E6448DA33E695F59ADBF77
+ DBD585CDB7AAC498B9AE7BC8C990C9C089B579469C5333DF4715A62A087C3218
+ D241133F1F1271311A793E2A4A2D2A3F282A703D2F87351B82361D7735269D26
+ 0E51100400000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000016030029110F62352C
+ 9935148A3319632C1DC76632978C67A3C19D81592B5E1903E78141B4A472E386
+ 498F3017AB330F6D34220000000B0507452A236C361F899B7B84DBCE7BDDCB84
+ E8DA77B4AB80DCC55DCFEC61D2FC1691FD2C9CE20C1D272B483D79E8C252C7EC
+ 2986C430A3EE6CE1E27BD6B378CEC467B7A480E5CB5A97910E16150000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000032E600B77DF0D95FE16ACFF86B0B477B4A842B6F05AC8EC7FB3D54484D5
+ 868496AC5D3774DBCC71CEBA6FD0B2304F4561C5DC75CEB863AFA765988D0000
+ 00000000000000000000070D0D548C8C70C5B771D0B671D4D45EB4983F6A5B42
+ 7C6884E2C771D3C86ECCCB7DC1B591B797C3AC74DC7336DD521AC54717F27234
+ D0642ED6511CC13F147A321D5C2A209C3D21AF491FA73B17904026582F2C3F12
+ 0B2B080100000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000005E1604522E2E4E332A
+ 5E332643282597361BD78B50A4A982E1A561560E00320A02E3662BBF7C4AED81
+ 3F8B32194E2E264E3A370000000000003112109F7750A3DABC7EC5B880CEC18D
+ B5997AAD9686F1D651CCF73A9EE626B1FF3E7B8400000000000081E9B668DDDC
+ 36A3E12FA6F76CE2DF88E4C284D3C92036377DDDCA7ABCB227332B0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000A72CB0F9BFF0F98FF03ABFF70A7C38FAF9840ABED67C4E175BFE95C8ACB
+ 75566F92927C71BAB179DAC374D5BF0B131275DCC37BCDB875BCAF68ACA84954
+ 45000000000000000000000000283E3B7DCFC46ABEAE75C4B877D8BF6BC3B746
+ 6E69445F5266A19A82C0B49CE1BBBAC18DC0A77AAF9D78BDA575BF9764C99358
+ CC874CDC571EA22C0BA6431FCD592ACF5420B45729A33B1A6F362666302B460D
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000002A0700732113542925261010
+ 3223268C2A14E56227D08D4FCC8A50E0561E000001722F19DC4814D68446C462
+ 38C84A1D481F18482425000000310A00C45422EBAE67969163464732B3D1A8A1
+ C3A58FF7D372EFED3FA4D12CA6F560D1E962BCA30405030201057DDCC15DE1F4
+ 52C5CF44ABD46DDDE194EBC64F7E7600000078C9C174BDB69EB18C15130B0000
+ 000000000000000000000000000000000000000000000000000000000000001C
+ 69B00EA1FF0E8CF80F9AFB0B94FC9F8C8EA2A88632B4F457C0F4A8A39265A0EB
+ 26A0FF8A8D6D81C3B370D2CF6DD1DA00010C6BDDDA71D3B789B0918CB09596B9
+ 997E5E32090100000000000000444F41596C5C59948B72BBB483CAB468CAC56D
+ C9D463AE8E325E5B2F16083856468ADFD07DC2B770C0B781BEB7A2CCAAD09F67
+ D2895AD06B3BBF9662CA975FC17A43CD6D39CE511E7F341D52302F1809091303
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000004D0F05891C014E1104502B2B
+ 6C3020C94214BF7342BB6231E3622B9A2807000000220A0290280CE75D23B84B
+ 1BC4542362352F8624100900003C0C019F29050D0000D5934F768B73B5BE958E
+ F7D572F4ED55B8C953BCD467D9E76FC8980000000000005D989176F2F555DDFF
+ 4AC5F5559B7B65D8E080EED181CFC31D29264962577AA898101A190000000000
+ 000000000000000000000000000000000000000000000000000000000F17141D
+ 88DE1276DC18A4FF0DA0FE487DCCAC8883A0AB8064B3DB43B6FF83B7C5B57A6F
+ 7C7FB482CBF181D5C070C3B06ECBCE2338304F9DAC55CAE75EC8DAB0BD924534
+ 169D622F1F0A0100000000000000000000000021241F8FBA9E86A58D6DB9AE74
+ BFB298D7B092D6B46DC0B8808E6D040000637767948F66AA8349C15D23B48D65
+ 84A08E78B1A19FA47AD0A36AE5783DC8380B7C30182A1B170000000000000000
+ 000000000400000000000000000000000A010101000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000060001000000450D076914097117013C262B69392A
+ A9441FC74C1BB25A2AD45621B1350D541D0B000000100E0D562F23C44419AA56
+ 2DAA340F933D23733930C8360DF46020D76D2DA28A57A5E8CE8FE3D087EDD78C
+ FFE947A3BC54B8C559CAE68AFFDC5DA2940000000F0E02439AC843C7FF62DFF4
+ 5ED1F5274A3F65E1F27BE9D286EFD975A99C000000A7A6744E48320000000000
+ 00000000000000000000000000000000000000000000000000000000365F4C41
+ 809816A3FF0DA3FF1386E94984CAAB7358B5956770AECC25A9FF809EC6AA9894
+ EB6C2E94805865B1AB7AC5B487D7B75FA88B263C3A59BFE547BAF05FC3DBA5B5
+ 92703A1463270B2307010701000000000000000000008A794999916381BFAF6E
+ B1A38DAC938DC4A66BBCB173BBB99E8D5C44342035393234352C311C0C3A1307
+ 31403C5D63478C582B872D087E1C02420B0003090B1B0B0D010404150F0D0408
+ 09220F0F3D150F1806022D0A01330903941D0F0E020200000000000000000000
+ 040A000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000040307891A157018096F1E0E952D1B7A2D206B3427A6421F
+ 8841239F3512B8582BB43E18512417000000000000140A0D5533308E3315A348
+ 268E33147C301AE75824C98D5ED1C58ED5C992BADAB185E1D580F0F080F1E641
+ 78665AB5B868E8EE82EECC6AC0A564A9A70000000F2D420484F452C4F962DCF4
+ 68D2CF6AC29854B1C379E0DD7ED9C75898944645302618083624110000000000
+ 000000000000000000000000000000000000000000000F1B144F97814FAEBD2E
+ AFFC0EA2FF0E8EFF0D95FF00B0FFA35B58C96F4480AAB745ACF8308FEB8880A7
+ B1605BA1370B73AFA790BFA882D2B377CDBB03000081C9C453BCE646A8D65EBE
+ EAA9BDA6E29750D8450F360B010000000000000000000F0000B06C38B3BF9062
+ 8C8099AF8AB8996481B6A467A8A4A3CBA7BDC08A80AD9D6BB5AB9BAB818D663A
+ 933F1464140025000029160A312B156A3F1A882B089C2E0984260B9330134629
+ 1F51302A5A2C254225257E1F0D8B23119E240D5912036D160B6E15103D182860
+ 2335000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000001370807EA3116912C185A312C6634287D381E812A0F
+ 64210DCB42147C351C8232193F2827020101000000210A06210B07432D276B34
+ 299B38172E1A19BA360BFFBC6DADDFBB89DFD289ECD798FED751968553967C58
+ B0BB67EEFF69DFE886E6D2142523070C0D0000002E76A323AAFF58BFEB5DCAEB
+ 6ED9C86DCBBE39695980F5CF86E1CD85C0B2A39F6F1D0B000000000000000000
+ 0000000000000000000000000000000000000000000013231984FEE248D0FF1A
+ B4FF0B7AED0B7DE90FA4FF0AA0FFB53E26AC513684ABBC768DC00FA5FF2B98FF
+ 3F7BCCBD996AA4A373A2A87F6DC4B775C8BF0000006FB0907CC8C863C0E03B95
+ C864A8D1A5A4869D946500000000000000000000000000000096471DD07E3C3D
+ 2713B2BA85D38E4EDD8B4C93BB9D7E9978AAAF83C4986AAE8C7166B0A58CA487
+ CC985FE35F22BA5B338189777AA690AFB286C89F66D88246D97039C85C2BBE45
+ 19AA431D733623642D23682E23532A2457271E872511AF240EA21E13BC261DC4
+ 2A1B000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000010000007619086F1A08421F1F291A1E75341F
+ 9352328E371B3C2F33281B190700000100000000000000000000004E1F1A5F28
+ 22613B2F632D26000000931D00B3814891A88875B3A8355D616DBCB681EACA7D
+ EBE850D3FF73D7DF659C9406080801010050957B4DCFFF2C8EE748B8FF7ADDDA
+ 74D7BF67D7F51F322775D2B87FEBCC81E2D49DCFB9F9C87FDC60251302000000
+ 0000000000000000000000000000000000000000000000000000000011150A0F
+ 2E480E95FF149FFF17ABFF0DB5FF70241CB25F517E98BFA1626107B0FF2F9DC9
+ 6D6572B4B895D37B3792B7A269BFB975B5AA32392B69B299A4CA9772B7CE78BB
+ D059A3C62C9EFD51BABA437C5B0A10100305050000000802006118041A000000
+ 0000C6591FB3622FA82F04D19558A0A683B18950CE8345BF7241B3A879AFA878
+ 939373AF9B71C8935EB578548C7A6080765C8E6145C08551B46235B140149530
+ 0F844021A2401C872B0E5C4335823822792A1979281B9227179A28128E271299
+ 210F000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000002116178C381997361C
+ 6D311F59332C441B19170809000000000000000000000000000000360B019026
+ 11522F2D5C28248F290B42452C789A836BB1AB89DBB388DCD172D5D58BDFC761
+ CFFE46C4FF85D6E2373C2D00000014384556A28945C4FD569BC378D7ED79D4C0
+ 72CAB378D6D761B79A385A5C7DD6CB72CCBF7CD5CA95BCA16A502C0000000000
+ 00000000000000000000000000000000000000000000000000070A0326505818
+ 9AFF20A0FF2299F922B1FF1392F79B3C30BF4F2B8A80967C6389068EF217B3FF
+ 717F91C18348C6B57A83B9A46FBCC098AA8700000071B3A891B7978FB79EAAA2
+ 8D91AEA8908E8E60B4C671DEBD72CCB316252400000000000000000000000000
+ 0000060000C13A0F9B2F0CCB4A15CB9258AC7A4ABB8755CE4513B13308BF642E
+ D08650B16939AF6335CF5A24C84B1BA9350EAA4920B3421BB8451ABC491EB24F
+ 24A63916613223552E22411F196F27156C2A16573029562A246725198625129A
+ 2411000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000130300551E175B3027703523662A20
+ 522D265D2E2B601301000000000000000000000000000000000000000000AE24
+ 0D8F2B15A43618E25E2BB5CEA57DD8CC8BDAC7A7D5AF82CEB987DAC27DD5E36B
+ C6EB28A0FA5471772A221100000065CFCE73ECDD5AAECC8CB9BA80DCD67BDDBA
+ 6EB8B181D9C276D4B23256553248448FBDA489CCB99CC8A7C6BC80AB57255915
+ 030000000000000000000000000000010000010000000000001A2E2351B6D31F
+ 9DFF4BB7E52CA7F81494F82E78C4783A3A6F382C7F80A6498FE00D72DC4780C5
+ 958899D7A966A0DDB27A9B8585CBB8BCB37600000064A29A63B5AC80B3A1B68D
+ 5B99BBA8A59A8A8B666955DCE96FC8A14B817A0C111000000002020200000000
+ 00000000002D0A012808019A2203F16E2D963A13934D25D96429AF340E8B2E12
+ AE3913D95E27B95C309448229F542CA2431D5228203C272A5B1D137929157D2B
+ 1766352B763E2987352172331D3C26234A1C1545180F5E190BA1250FA0200FB8
+ 2419000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000070150D96200B6E2C1E4D2D29812B1D71271B
+ 24121280200C8C1D070000000000000000000000000000001B12130C202A9226
+ 0CE54E16E87E44C05B3C8AD7BDADC69FD9995AADBA967CAE9A9FEDCA87CACD73
+ B5E140B8FA375E430000000000005DDFF66EEDEA3F99BA48A0D688F3C471C2AE
+ 80B6A88ACFB872D4B869B0A70C1818634321948250E3934AF38742EF5F1FA629
+ 0800000000000000000000000000000000000000000009100D68BF9B54C2E249
+ B4EF6ED8C613A4FF0B84ED1298FD0C376C621D097E6682349CFF0F89ED89484B
+ C7797597B5CB7AE5D8A7DCACB5BC8A82C4A70000007D9D8267AB9F6BB2AFB6B1
+ 7BC8935B939B94C15A3170787E63D1CE7CDCC472C0B864918801000000000000
+ 00000000000000000000006A1E0AE548135F1502190400B7350DD04716661E08
+ 211712B0310CC94819C5511E832A0CC03F15B13B1376301C4F2F2A4F2D2C7421
+ 11601E13622A244D2F307B2B1B53302C7C28183208010000001303010E010024
+ 101B000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000A1210E8A281259261F71291D961E0593220B
+ 2F080000000000000000000000000000000000000001000128211DA63A17E54A
+ 15E28044C18E58D3895FF18A45EB5310DA9D5CA4B185A9F6CCB7C5AA7096B24E
+ CAFA5AA4860000000000004B7E7E6EE5F562D9EE469BA95ECECD84EECC86BBA7
+ 99A7818BBFAC6BC5B874BEB12937310000000000000000003D07000000000000
+ 0000000000000000000000000000000000000000000014231D83F5C8457F6272
+ C48831BAFF098FFD0E90FE0A97FF1B6EBC5829206C5E7738A8EE14A1FF0B96FF
+ 227FBFA1C399B5C28DC6B179A1A78075C9C40400009985557EB3A971A08DABA9
+ 80BE875084BE9F8BA0957B492D60CAB569D0BD76D5B72F5252090C0B02020200
+ 000000000000000000000018201E7E290F070F0D0000003F14086A2009853014
+ 422D27181E1C71311BA538177B3017311409722B1474301B662D1A3C2B2B2711
+ 10320801831B075D1606AB260C892715742919C42B1215020200000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000040A16641515C22712822413682419B0280F7B180B661408
+ 04000100000032090700000000000000000000000141242666372C9C3815AB3B
+ 14922B0AE15F24F1591DB03006B9582DC4AF8184DCCB92E6C6A991765CD0DB74
+ EBD65DA48C00000042584C73B9AF6AE1F05DD5E63C9AC363D1DA89E5C1A7B891
+ AF9C6391B6A167B9AB7EC7BA727F650906020000000000000000000000000001
+ 01000000000000000000000000000000000000000000203834386653539A7860
+ C7D426AFFF0E87F00D93F720A4FF0000003439482F76BD4AC4F72AA3FF41B4F2
+ 837C99DA9151DE4B10C095668C978683B6A5000000663914A3B799769077868E
+ 6FCBA56EC2906084C9AD5B9A9D3A79775FBCC677D3BF74BCB77AAB9E494B360A
+ 00000900000000000000000F0E0F0B100F0000000000000000000A0E0E352722
+ 3B2B291408094129277836216B35240C08090006082E22224F2A26612B22602A
+ 22812310831B0A08000178170ABB2611912613BC28115E131300000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000003E1B2FB02622AE260E6D190B751A09CC2912511011020000
+ 000000000000B925126C19090900005A180E3C0B000F090C0B0E10422D240000
+ 00270600C63409E76228B4854BA7A68B87DCCD7CF6F469BFAB6CACB879EED57E
+ E2C115262302000029342B65B4B35FDAFA4DC2F74DBFE47BE9C885D0BFB3804F
+ B4814491C6AF66A99E81BAA9948D5D0D0A030000000000000000010000000001
+ 0100000000000000000000000000000000000000000056939241735E67C5B04A
+ C9FF1C97FA1080E516B0FF4AC0F60000001F426B1C8CE720ABFF2CB0F77F9C8E
+ AC7D77C48E6CB4703FA2A7826BB3AB94B8961000008E421DBABA8095B0908D75
+ 4CA2A783C78755AE8B6A70A48A455F4C45877676DDB973C0B174AB9F8E9E7A92
+ 7D529B4E21000000000001000000000000000000000000000000000000060406
+ 0A080A090506721F0E57312C52332E160B0B000000030000230A06350F08721A
+ 09761C0A7A1A0A83190F000004A72627971D11C5250F86202400050D00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000003F0E13B62414C12516390A085B1111DA2B21000000000000
+ 0000000000009B240E7D362A4426236E372D552928452A250F0907922F12A625
+ 03BF3E12AD7145A2B28F9CDBC28DE7CF88F8D458A4A072DBBC74E8DC88F2D832
+ 555200000000000029443F65C1CB65D8F258CCE547C4F96AE7E081D2C5615042
+ A35722B2C2955E989289C0AAD595551007000000000000000000000000000000
+ 00000000000000000000000000000000192824233A3E96FFE687FFE551CEFA23
+ B2FF155D9F1A9DFF22AFFF52D3FF0D11000632661094FF068BFF1FA4F1987349
+ 89A18C9B7160CBC3818CAA8E83B49CC1A05D0000003E483EB4B081B7986A9A83
+ 54764F2CBAAA75C0895EB58964698281384F5469BAA860C1C56CB7AA74BBB0A9
+ BB94341A05000000000000000000000000000000000000000000000000000000
+ 0000000000000D0200221111762F242C0A040000000000000000000000001002
+ 012407030300001404020000000D0306020000892A3B6D283C00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000510205D2E4B8F2D421C0404000000000000121327000000000000
+ 000000000000851B0979291BA34224D74A18B449229A3C1FFF5113F37531FEAC
+ 63F49C58E2A96DB2DDB587E3D473CECF5C9B916CC9C783EDD177CBBC74C3B823
+ 2C2800000036311E95AA8880BFBC5DE6FF43C4FB38B4FF6EDBE580E0CDBEAD87
+ F19D53ACBD92638473A7BC92BD985DA53B110000000000000000000000000000
+ 000000000000000000000000001A23206AACA992FFEA86FCD66AD8CE4FB5D61C
+ 415539B5FF31B0FF4ACFFF0C82F30000001644661CAEFF0F79E1207EE4559BB5
+ 9AB688D36C34BDDCA498C4A5B0A373D16D2C0000004E7E738B9985D2763FAB88
+ 5A815F44983C10BF8761B88C649D7D627077602A1D1E6DC9D274C3B56EB0A366
+ 9A925A55362F0E02020000000000000000000000000000000000000000000000
+ 000000010101000000370D026817040100000000000000000000000000000000
+ 0000000000000000000000000000000000000000000010254800000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000070D1A191C34151A34000000000000000001000000000000000000
+ 0000000000000000003215116F392BC84D20F37C3DDE854BCD7745E18A56C7BF
+ 8BA9DDBD87D9CD8CC8AE71B0976AB3AC7AD6C56FD3D486D9C973A59717201D00
+ 00000600007A4F26A9AE8368D6F448DDFF43B7F741C2F871EFFB77C0B7B3835D
+ EA8942A15A2581967AB0A278DE702C0D06020000000000000000000000000000
+ 00000000000000000000000000000000111D1B35575B43796649825C3B7F872A
+ A6FF4EBDE749BEEE43C8F913A3FF020E153A57584286C73569AA495579727A96
+ CE9468D28C5492CCABB5BF92D87036070000040E0E86C0A876978AC17B4ECA55
+ 1CC27641AD773C87AC9568827873B8A972C8AD4478723D695885D1B38CBA9F9D
+ 9F76BAB177D2793A792408000000000000000000000000000000000000000000
+ 0000000000000000000E03011003010000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000001000000000000000000
+ 000000000000000000020102120C0E562514E75D25F59451D8D196ACCFB08AA1
+ 8B8C5D39527C728EA37D60B1C96FDAE593D4B579C9BA9CC9AF604B2B00000000
+ 0000AC3B0DE3B36A77C7DD46C7FF57E0FF3B9ACF3DAEDF66EBFF9CC3ABC68C5D
+ 87300A000000CE9F59BE9F67D34C171403000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000052967C4CB8DE5E
+ CBDB65CFCB50D0FA36B1F40D99FF0005152125196C5F504A5979A24329BB6E61
+ AFB09CA7CA9EAF986ED27742C3411408000069391D8BB091798375AB9365C036
+ 09B84C1DD16B2F9D411C6DAB9F83BEAF77CBB674C7BD04070978CAB278C3B088
+ A98FD08649AD5621842B0D3E0D02000000070807000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 3D0B020400000000030F141D2A0B03000000670D004809004718073A1409C892
+ 588BAA8F81B8A0B1D7AF55CBFF9ACBBEAAC6A0647E69D8BF82521A0100000000
+ 0000454F3C56BBEC42ADF545CFFF81E7EB3CAEDD42AADB4CE0FFA5C9B1DB9449
+ 371E0C000000E25C20D2934EE95B201D05000000000000000000000000000000
+ 000101010000000000000000000000000000000000002A4A427AE4C263CCCC86
+ F2CC6FD7B925A6FF26A0FC139DFF152933050900529E8E34ABFC597D9A726470
+ 78C1D2B1D7A9C6A974A96B4E996A4E0000006B3715A7B0827FA68AADAE7CB92D
+ 03982B0BC54F1CAD2300A6986798A57C7CBDA865C8D65E694C23403F71C5BA5F
+ ABA79AB395BEA567D76123E24712B0360E611C09000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0B0C000000000000000000000000000000000000400F13931D1B320902951F09
+ 752819672E2A763D2BB64018E8541DFF803BDFC3819EC8AABB9C7AEF9957A2C9
+ A691BCA5BDBE967CC6E985C9D9D59A58DC934A1007010000000300000000006F
+ C8A56FE9E26FB0CE87C2D280C8E169E1FD35A5D2439AC264E0FF64CBE5C8B281
+ F7611E200700AF310BCF531DA3360F9225070000000000000000000000000000
+ 000000000000000000000000000000000000002D4C4F88F3DA6ED8C07DE7C759
+ 978367DEF10F93FF0E8DFC1B9BFF2E697F1C2F1F69D4C93ABBF872A9BCB86B55
+ B57558A5948D9CC8A58EEBD276DDD4437470CF7032B88957729581BD9A648B3C
+ 1A5E210FA8320CB53A1093431AA49E7475B8AC88C8AE71AF8F1521206E7F6576
+ C0BE6592818BA689ABAD7CC785489926050A0402000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000006
+ 597700122000000000000000000011101F330E1274160DBB2A15A82B157E2D1D
+ 74382883432BB6441BD15B27E56B31E08B50B17D50C26940D88952C1AE78C49F
+ 6FD4A067C0AE9174ADD3D1AF85C949117B2608070000000000131E1D487C7678
+ E3B66CAEC9A7A293AEBEA188C5CE42DBFF479CBE3DA5D08DE6E763C9EA8FBFB9
+ B26731651904411204DB3D0E3A10030000000000000000000000000000000000
+ 00000000000000000000000000000000000000426D6B7CDDC574D3B47BDAC477
+ CDAA50C0EA1E8EE90D83E747BFFF16231100000021386C597F909B887F967666
+ 89594B86644D74957E7DECD084E8D78BDED2CC6C37BF8F59877D58B5965EC741
+ 13592819842A0E9E2B08AC4219D0AC6E85B0958DB498A4C79A407E7D5E391795
+ BA93A4C09899A07697875E7F4D2A330D01000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000001D
+ 3D6B454A7C030C1A061E36000000251F38B52D33CF29119D291278302264332C
+ 6830228A3D22AD431DAB441FA646267B3B29A93A15D75923D77334E19258C594
+ 66BDA982AE9B9373D2DCF66624580E0000000000000000000034565085ECCC6C
+ EFE6817378A9A38DB9B49563CEF14BD0FF4892B5309AC68FD3DC9FBDB4C9A26A
+ 8F4A230000001408037D1F064B19090000000000000000000000000000000000
+ 000000000000000000000000000000003C524971BCB56FC6B64C857C7CD4C67B
+ E7C849BAF12C99E52C9FF44CBAE957956B5D0C00513D4E6B6C75757F8A63857B
+ 6096A25798AD526B57315955294543203631C22D00C56F3B906437A97F56D957
+ 1E742F2037251D6C230CAC3F1A896442989C77C3995F82BEAE6CACA02B261C4D
+ 786DA8B48BBD9A67BB7948CD8E50C659247E21061A0600000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000020332D
+ 518ECA32338D2A3797354A2943780000002B121F5619228E1C0C5814075E1505
+ 5F291F7436266138324925232F20227E2F18C6380CDB6528D67641B7896885AD
+ 9AA47B6284C0B873EFCF8A11003D15090000000000005E73646BB4AC7EE8D549
+ B4D469B9AEA7D0AFA1D2CB49B8F675DEFF5B818D2C84B255D6FF88C2D2CE7B58
+ FC762E8E2A0B00000022120B25150C0000000000000000000000000000000000
+ 0000000000000000000000000000000034514B7ACEC53C625D13202182DCC086
+ F2CA37B1F31D72AD42BCF057C2C36E230B6A29233C548437517D638DA26CBAAB
+ 75CEAE64D8DD6ED3B7345A53000000000000A32705CC632E904B22B27F4BCA4D
+ 1B842713130A070D1115593123513428BB8F58D65C1B79C0B473AFA2857C523A
+ 50447BB9ADA98361C27442C0360BD65A21C4401386260925221E000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 2C56B63641BA2C0FC82C12B43033DA2C21581007661507C027160000003F0D05
+ 852D208D2E1E631A0A6A22148D3723933E22B7885291B69B988C7672BAA65D8F
+ 8378DEC287FCE21D332E000000000000130000BAAE7687C9BA82E4D276DEC15C
+ 9889D77946D7AA708C9D985CBAEF97DCE34C7D8F366B986CD1F158CEFFC59A76
+ C0340EB22D090003070000000000000000000000000000000000000000000000
+ 000000000000000000000000000B0802586C5B63796B5B888185E6D782ECCC5B
+ CEE93C8FB840ABC35CDEEC79DAAD8302007317003582BE53507A5BA6DD54CBF0
+ 78D2B883E2C473DEC683ECD6355B591014149B2D0CD05925A2643E963915D065
+ 2F9A3210472F28200E132C1F29773624DF5E1FE95D1C8BC2A883AC988A6F4700
+ 00008DB69C66B3AA8AAF90AC5F2FA9290682210678240A502A1C000205000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000CA3231B12E188232229F311EB42712942E1A732D1E94321F7B2818892D21
+ 9D301AAE3E208B2E13C3340BDF7034DDB175B7C9A293C5AC6A7B74638D7F79EA
+ E482E6D33F68671928260000000500002A1E0F5F867A79CFC374DAD25C958C90
+ 7C66BAB88CABB79579A0BE6AB9F6A1BDBA4FA7C83092CF7DBADB6CC7E982BDDC
+ D88363A3340D4C2B231E0E0C0804050000000000000000000000000000000000
+ 000000000000000000000000001F0B032B18061E2924345D5B86EFD06DE3DD60
+ CAC93671784CCFFF5BE3FD68BCAC000000163A2C4AB3D33497F32D7FC850C9F3
+ 77D3C26CB0A980E6D173D0B67BCFC4464F477A1900BD3D11C46B33441506BE5F
+ 34BA3B10833218221A1D2307026A2111AD2C07D6531AAAB38796B08BCCA1691D
+ 0000675C3E9CA983779F8AB6A472C5612B82270A421E112E2B251710150D0607
+ 0100000901000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000001272D003D4700000000000000203300000000000000000000
+ 000058181CBD2B17863320793A299338267D2E207337298E3D23883823763023
+ A73718E46429E77A3CDB884FD8A570B7D7AA90C0A86AA8996C968F82E1CB85DC
+ CC95CFB934392D0000000000002E1104B97F46ADBB9385D8C46DC2AC5FB4A27F
+ D6BC81B4A59286788BA5C28B9AC28BB2C466B7D530ABE27B94C89FB5B99EA398
+ D4874AF35D1FB840194328230502040000000000000000000000000000000000
+ 0000000000000000000000000063402399926981B3A488E5D87FE8D45FCCE44A
+ 918254B9D45BD3F045CBFF73E9F41118150B130C4D9C9C42BCFB298CD449C9FB
+ 82EBCA5F90847CCFC574D1BF7ACBBE6D8F7A3D0E02952E0EBF5321872406A257
+ 2AA04822692F1D33292818090B090300862005E96D2C979B78B09E6FBDA6784D
+ 6056150000D682429B9F7D96875EC47A40DC642DB8340B6827114D2A27422824
+ 341A1851160A0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000000F
+ 1701809D025C6D004D5A0C669A00496E1C39643D407037396A681E2A7E1E2400
+ 0004000000510F05A62F1B783728C85222CC5024A55436B65A35D97540DB733F
+ D07844CE7245E8B678D4C38B99C9AD7C987E7EA79494CFAF84D9C79ACFB489A6
+ 8C16110B120B06000001BE3B10D86020CDA46797C2A971D2C767A99B60AEB384
+ DFD089B09E799DD57694D5B8726755D2FF77B3BA4AA1D113ACFF8A77A3BB8B82
+ C29669DC6A2C2B07000000000000000000000000000000000000000000000000
+ 000000000000004E12017C4C1F818C698FCFBE83E1D37FE4C67DEFCE417E6960
+ A9825DCAD467DFE94CC8FE1D95FF000000000000559B715CC9DD42ABDC42A7D7
+ 76ECE085DCC092D3C264A39D61A8A38CCDBA9575486A2A15AF4C26903113671C
+ 06CB471788341C3B2B3060190F6E1E0AB73C15EB8540A56B3FC88A54A3927379
+ B9AA150F03531400CA7D46B5A1719075489A633CD67237CB4B19B83B1279331D
+ 5F322E1B09050000000000000000000102020000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000000D
+ 0E0379910E699A274D885D417066446E6B436DB62E2FCD2C1BC32D1CBB2E14B8
+ 2E15922D1B4E1E19110706441A1756281CB94618BB6E406A695A873B1EE15F26
+ BD8A5390AF92923B1E6A2D17A3592EC0AE7982CFC0AFBD96A6C3A0DDA25C6C47
+ 1F000000000000000000B63D12CBB27886C1A77CC7BB6BA3A148776889E2C976
+ D0C6CA8247D73E098F57679480965CD1FF90B6AE8992AB0C99FF1EA1F28B546B
+ BD503AE65E20CC3F13452C220F090B0000000000000000000000000000000000
+ 00000000210500C35119DFD89399D7C488DECC7DDBCB7AD7C6508B7C44849264
+ D6EA71D5B559CAED33A8FA19A7FF0A0F0D03050661AF926FD8C74DBFD82F7D9B
+ 5ED2DB77EECEA4BF9A524D324B452E98BA9477694D632B1A9F2F0C9B633A3313
+ 087B250C9C300D87331752312F723226B2360EA02200C47F46D7622AA9633F84
+ AF9C66532C090000954D2DC38358C97038A03C158C2C0CA32C08551F0F261B1A
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00001618014C5B07517E464877993547C02715962B27A42B14862D1A7F311F72
+ 3324743D2C934026B948219E3A133F22170A0C11230E0B5A17064E2B16815136
+ 421C11B1350ACBA167ACC6A4C4B385ABC49AD8A166EA803CA27646EB66260000
+ 00000000000000240400904B22B69C69AEB38CA4DCB069775979C7B7A5CFA87F
+ B39FB677467A698B5870ADA093A677BDDAA09D8C838AAD0FA2FF0E9DFF3287CF
+ 716266652615AF3A15753823592E290902020000000000000000000000000000
+ 0000000000000000000098572773633E6D8A78486C662C48454176636AD2D273
+ D6CC72CDB359CBF92899F527A3FF2E53450E161644796E77D9AA6CDAD63D9CB9
+ 4CA4B276E6D491E2CB73AFA38F875A7F471D7A564278331C73250E8A4528A337
+ 10140E0B572F245D2E1F522C243D2C2C2F1511A22A09D35F28B43A0FAC895E82
+ B196B4723D0D000053594E947B64A96A4AC25929B86432A13F16351006070605
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000131C0118281B213A60314BB32618A52815A52C18932E1B7F
+ 2E1D733327933A22BE441FCE592B956D538A5842B64921E56F34CA8552A88E68
+ C17C51DD8A51D99B60C56C3BDB7C3FE19C59E04712AF3E121806003D0C000000
+ 000000002E0B02BB310AE96B29DA753AB0AF847ECDC23A3B297BCEC8B8B385CF
+ AC6F5B382D477EA95976AAA696A45BA9E6BA8B7094748913AAFF0C95FF0CABFF
+ 2ABEFF57ADAD5329224225235228265C18090000000000000000000000000000
+ 00000000000000000000000000000000100B030000004A817C7EE5C67AD9C076
+ CBB979D9BB70D8EE2592F130AAFF417A6C0000000D161A6CBCA971E3DB50CBE7
+ 44827971D5B978EADF80DFCE85CDBB896E5068321D31110E502A217A301EAF37
+ 0F39160C030A0F52251F50252470291C732618B9320FBC37128B3513C08C579C
+ A479CA6F3334020034493A779E8A817761C74715923312B43F16B0340C602D1A
+ 1812151003010000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000012236D4061C03136A4374BCA291F9D303CB2
+ 3134BA2519B32813862B197E3F2C7A3923A04622C54D1FC94C1F934127AA4722
+ CA6231EB662BA53D1DD64411CD4616FE5C1E69210D0E00000000000000000000
+ 000000042F150F9E2300D84B11B1B69668C5DA5DAEC1B87C3E87D8C5C1A774EF
+ 53125566584FA5D87F80B6B089865AA2E6CA71438D6E861DA5F90A9FFF0D72CF
+ 1E56774D9A821B00000001030802021404010000000000000000000000000000
+ 00000000000000000000000000000000090602547A7078D4CC74D8BC74BAA971
+ BBB26AC2AB6FCCD862A7CC54C2EA569C70000000000000436D6C72EDF555D2F8
+ 5BBECC203B3071DFF37EE0D685C8BA9EBF9EEA8634DD5E236F36294D231C9F33
+ 0D4E2618000406120300060302380A00702213A13312902E13994320D27C41A7
+ 8E63D15B215B10004E3518A1AB825E7265AE5F31802C0E4F2B23962E0C7C2F15
+ 4A2F292510100000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000C111762983E4C8321518C033E731D3E74872936BC
+ 230BA32A136C2D236930225728218E3A227035296F2B205426257C3724B43E15
+ B5411771311E512B208D2F13050000622A1A0000060000000000000000004A27
+ 2889361CBA461CDE7748A8BDB567BDE6A8B6A0270E009CC6A8B9BA87CBB078B5
+ A1715BE6FF4C7DB8A25E5C58AFFA838DB3C1522A4B77BA14ADFF29A7FD19A6FF
+ 0D3D660000000000000000000000000000000000000000000000000000000000
+ 0000000002010000000000000000000035312470ADA374CFBB81C9B48AB19971
+ B0A880E2BF4EC0DE34A6E44EBBE079DDB4233C3A00000070A7995BD8FF54CAF4
+ 6FDBD185F2CA3359497ADEC086EED795D9C398E1C9A4A984A9683EC05025A730
+ 0E4E30271410110000000000000501013123245C3023141A1EA94321B06D3FAD
+ 9469C9380C490F01020000C36B318B8B69B1925FC34E213C251F402C29642D1B
+ 512E254D29284B10010601000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000C0F05536E00263C01263A06233942335A8A354EB3
+ 2925801E126A18088322118330228E29188E220F6A251A653329572C21532419
+ 753A2D30191D312321070D11000000050A0F0803020000001E1E171E27234162
+ 5F90A081AF987A9AAAA882A8C2BBB5987C421E6A836EA1AD93CF9862CF8C4FDF
+ 5A1F60535B775B7095718746ACFFA67970AA4C313A63A30BA1FB37B1F737B6FF
+ 51B7CF0B100C0000000000000000000000000000000000000000000000000000
+ 000000000000000000000000003F2610A7A07283C5B460A69F83C5B475846797
+ BD9B7BF3D24EB1C4419FC370E0D662B58E0205081D19104A63581CA4FF59C4F3
+ 75D9D977E1C958A0AB4D847967B1A47ACFC394C9B1AFAA81CF905AC05C316228
+ 16532B233917140500000000000200003A1A1726171C5F3224C24719BF5822BC
+ 7B4DAE6843370D03120302AB4015C07D489E784AC46432952C0E41221E3E2B2C
+ 301F1F42272969241A470F020000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000040400110F00000000000000000000070D0E162A2A
+ 0C13000004340805B42712D22E187B160ABD29139A261051180E0506093E1713
+ 5B23191707050000000000000000000000000000000D0805627B6C7AC0B179E4
+ D183BDA8A19385AD9984C39A769FA2862125239C936598B499DF773ACF531F78
+ 38246A58586E78934B97DA72B0DB985E569D3A233F609A1388FA29B9FE5CBCC9
+ 67CEC4284B3B0000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000473820B0B88882C5B165A198A0B891A68E598E
+ B49778E8D43F91A94898997AE9D362AE9C080D100000002C524C22A8FF4EB4F0
+ 6ECBDF6FC7B973D1D468B9A8518E8957624E4E452FBA63308C2E1069281D4326
+ 1E4E2C2741150D00000000000000000027090329171A7E3820BB5022BA5321B5
+ 5B329D7C62474C42000000591301D75F26A6693BAD5B2DBF451A8E2C1059261F
+ 130708250D097822106818061704010000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000003B0F13C42B28752C450000001D0602180400040000000000400E03
+ 621507000000000000000000000000440400DD803B9F996880BFB182F5E96186
+ 85A76A4BAC916DB58056B0875E6DAC9F7F492CC88D52A6B58BDC5D24D2340888
+ 7253549EC065CCCB3DA6FA857FA1734E5C6A3E37229BDA0F8FFF1AAFFF59C8DA
+ 7CE3B04176600000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000BB571DB5A67574AAA091AD8AB7B180A59A7478
+ D4CC7CF1CD4E96873B8AA66FDFC878CEBD28414000000017251741B7FF5BA8D9
+ 71CEE276C6B573C4B794DBBA87D7B86EAA9D23221D5505008F210B482C2B2F1D
+ 1D5527217623134E0F03000000210701722316593531B538129D330E933918A7
+ 4E2B7B7A66778C6E1310054E1A0BC2360CC55A28814028A762359A3212482C28
+ 3E23247120100300004E11061A05020000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000D11202C2F58000103000000000000000000000000000000000000
+ 000001000000100603070000571100BB6E3196BFA284D8CA81E0CB5F6B5E6F75
+ 608AAD97826852DC7D3D95B08EB8854C851B00D37640C09B6CC3502084694E6A
+ 9E837DF0C44DD7FF3B6FB27673A8572F293F51612AAEF814A4FF2296FD4CCEF8
+ 72D6B828463D0000000000000000000000000000000000000000000000000000
+ 00000000000000000000E0420FD98446A2B48982754D8E5320D19C618BC2B175
+ DBC65BC7DC529B9670DAD378D7BA6CBBAE42676300000042785255C8E9369AE5
+ 8BCCC789DABC75B4AB8FB79E78C7B971D0C89CB590A64819781E1155180D2F24
+ 286324184A120500000058110AA92B145F302A6535275F2A178136179F48219F
+ 4018788C75B38F6052230A000003501708A1401CB8663B7A2A0EB53A10A33A17
+ 6432212F272E63180A400C004E0E096A120C0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000882F14CD4112E05D24D6A3689BC9A981D0BE6D9C916E918966A2
+ 9F757568C85327C38A56CC945A8A2C07503A2CB9956FD87037D464347D624F64
+ 968367EBEF2EA6FC3D6AAB6079AF4C3A37304D8341BCFC22ACFF2895E734A9E7
+ 7AF9F89EFFF327423F0B12120000000000000000000000000000000000000000
+ 00000000000000000000862A0CCE7E40D587430000001E0D04CF824F8BB09F7F
+ E6CF57AEAC316A6C72E9D977CBBA508785000000000000457D6065DAD9629FBB
+ ACB39796F5C77AB2A2A8A678AFAC8575BBB082B6A7C8764DBC30082E07005D1F
+ 176421169820080E02000000005A130645150D1E1013361F1AA837146D301D93
+ 3919856B52C0834C782C0D000000121413663F2DA56D4C97562F631B077D4123
+ 8A391E552E276428208E2511AE2911951F0E310904460E0C1806090000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0A1010421408B04017D8894EC0AA7696BEA678CBBA7C8A738A8E7985B3A3817C
+ 69C25A2CC3501FC28554C84317521500688A6F9E876AD09364AEA883A48D6974
+ 8F814EACE52C8BDA457FBA635D5E4C2A263E5E9C3FD5FF3FBDFF40BCFB2976A7
+ 5BAE967DE4C462A8A3060B0A0000000000000000000000000000000000000000
+ 00000000000000000000922B0BE1541B922809782B0CB8773A9FC4A280CBBB7E
+ E5C763B19656AEC262DEF075BDB467988F0300000000001B2D2E7DF0CC66AAB3
+ 82AAA07AEBD38CB198B6AA72C77E42ADB9917EB29BB0B383DC82427A2307771C
+ 0A6A2011A7230E0B0201000000000000000000110A0D6D38267D2F1B3C2C2DA2
+ 3212B47847BA6737A4330E0A01000000025449437D6753994D2C9B2C0A40190B
+ 862B0E812F14622D205B2B225F281E732010B1260E9E1F1526080B0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000420C00551A10341819
+ 422821AD2F0CDB4410E07237C5BE88BCA46DA839278A7E678380718D7158A244
+ 22B95122B05022D18B5A5E0F00311706B095649A7D59B8704EB3BD9989CFB064
+ 5B50687E8A39B0FF5A9CC35B806A56282E59619233ADF64FC2DC74E7D945B4EA
+ 2F5541070A0A0508090000000000000000000000000000000000000000000000
+ 00000000000000000000B42E094D1303000000C96528B9D8AD82CBB96CD0D17B
+ DAD222393465CCDC55CFF96EC7D36566450000000000004C7E7D87F7CF5DC5CC
+ 52ADB06EE0CA82DFC7B8A57CCD4A11D49955A5B28A97A27EDA8C52CF44108E1D
+ 07831D0AB0230F78150E0000000000002A060059231D5D31255B2A225A251EBF
+ 3B10BE6839C9632D802005000000210A056B64536C7E6C7D543A9B2F0C5D3627
+ 1611103625254D2D2A552A26692619A4260DBB251568130E0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000001600005736347A3925
+ 9C391AB34118CF864EAFB6906F9288757C589FA693AD7652A97A569B49268629
+ 0B843519AE553098877034241D4B1401D6723AD992556A21118B250C73715547
+ C9FE64EEFD70CCDE4E78A54E1920123C40418FF1148AF04ED0FF7EDEAC77EDDB
+ 5BA9970304030000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000007D320EAF9B637DB5A385C8B687DBD115
+ 1C1C78D4B374D2CF4EB9E851C3FCAAB07E1403000000004067666ABCA97ADFCA
+ 5EB09257B3C381E8D189B3A3A36843C73705E78E4CBD874FB8A169DF5F24A123
+ 0A8329151A0A08000000000000000000551204692B224D2A266B2218712310AE
+ 36109E5C2EBD44187D31160202010900009E5D307A715B8D583C592C1F783C25
+ A03A183D13042D0E093509007717040400000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000A0100250A060E0C0D5A291BBC4317
+ E16027DD8649CC9F6AA182566C411FB0AC7EB5B28AE17839C46D3B7A2B16A93A
+ 15924222895B3F96A584291504501607D6662EE17A3B863D2B6B706073837680
+ E2C46BDEDC66B5DE515C98630E024FB1A729ADFF1AA2FF4EC3F782E3BF80F0CA
+ 84F0D31323200000000000000000000000000000000000000000000000000000
+ 0000000000000025110B390E04A42504F06523DEA15DB8BC8E98D5B367AB8C3D
+ 615A7EDEC47FC9BF63BBDA34A6FF809D90572D0E00000000000076C5BE76CEC0
+ 74DCC948836A82EFD47FD4C693B999CB7942F35E208328078F3A14E46B2ED339
+ 10A42511330A070000000000001D06048D1F0B72271B631C0E8628176A2F20AC
+ 471F9D310DB04C2170331E130F12080000A44C20A46B42B77040672B21472823
+ 6B2A1C832F14362C2B240C0A0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 01010000000000000000000000000901006E1A0964292257332C85351CA43B17
+ C15629BA9470A33D1468573BA08867BFAC7CEE7535BE3A10642D2073301C602B
+ 236D33228F5D43D69C5E541302491E11CB5421CA7946A673587D928171877A97
+ B18E43CAFF2FB0FF5E659D6D030061CAA54AC0ED1995FB55D0F983E0C25DA692
+ 7DDFC9609E980000000000000000010000000000000000000000000000000000
+ 00000000000000772710EE571EDF6429DE894BB5AB857AC3B47CCEC02E4A4660
+ 918A68C2BA89C9B77EBFCB59AAE43D9DB204100800000000000061847A79CEBF
+ 75D9D14A8D834C877F75DCDF7FD3C88CAF95CF3A093A0D02000000872508B335
+ 0F9A2713270E0C0000000000003D0B06AB260F87200C280700842A1E723224A3
+ 4922A02D098B361A41261D0F0C0E0A0000B23B11B86C38B4572B7C2B1C4A2721
+ 58241C5D2B1D4E2D254E251F5413070300000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000230B118C2123941B1285180D841B066E1D0C552D2A712A1AA84F2A
+ 9D9C7A7F92727A2405B6A473CA8255D9894DD94A177222154A2B28592E275122
+ 1F943B1EBD6033EA632903000013100FA1421FA2A085AA6F5270756D907B6796
+ 9E8726BBFF2098FF78A0C018000056A1845AE0FF3AA8DE44BAFE8AF6CB558D8E
+ 6FBBB6355B560000000000000000000000000000000000000102010000000000
+ 000F0E1431130A8D1F04DB6225BCA87096B28C79BCAC87C9BA4B665B5548297A
+ BDBF64B5B09ABA988ABEBB88A4AE50C1D839654C000000000000A0C7A676CEC3
+ 73CBBA82E0BC428FA175C3AA91D6BDA9B689D0894AB0360B7013005D2714120C
+ 0A57392E2B2023000002000000510E08B62215A31F0E84210D652C2397351658
+ 20118B4021602D1F3523280101010A01009B2908BF5826B54421A72F0B602113
+ 67201475241847292551261F7F220F490E040000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000001804069E1F139F2C15952E1B752F2267372D9C3414E35A22DD8849
+ D96B2F2F0000F16E31CA945DC94F1CC83E11B93513642A1F62291F7E2110862D
+ 14C04317CB612DBF3E131B0E0B250F0B8B5436BA63358D6F4F8A725B8FB79678
+ A7C43AAAE85EE2F72B51360300006BF6FF50DDFF42A9D753C3D97FF6DD78D5BD
+ 48726F5C8279000000000000000000000000000000000000000000000000482D
+ 2F783823D64312F76727E49655CE9E6ACFA86EC9B37B7B53293C4F4177BEA09D
+ D7AE649790A8D6AA98BCACA0776763E2DF4F8E720000001E0A0187794B395451
+ 85BDAE71CCC157B8CD4162547BD1BB79D3CBCAB27FE89E5BFF7B34A32E0B0000
+ 000000000000000C0200000001240B10000002781905612A23713B2A45322C93
+ 3013764027572A20481D180600000003055D2615B74E248E3814B9491C672B1A
+ 6D2011901C0677231448221E5E2319A2230D911C100000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000003D0B037B1E0D4F2F2A6F3422903619AE552CB8572B9F3613
+ 501D0E7C3B25DE7A41BA5B2F9034179C2C18912614631E117F1D0987271A6C39
+ 28A9491EBA461A8F33175F3216CA733E85674D8F574091CAB990A48D7C6356B3
+ 331D8A889C81CABB2A4E39000E2D1DABFF64E3F968DADD4196AA76EDEB89F2D9
+ 588A8358563C0000000000000000000000000000000000000000000000000402
+ 022A1C1972311C902608A82F0ACD4816863510772A08142D2C73AFA3ADC096A1
+ B790769A85B4C9959AB6A56D82765ED6DB77D3B6243C3A0000000000006A6C50
+ A0AE8571C5D25CC8F1638D7E48716983BBAD87CFBAA8BD92C79A5EE36023B431
+ 0C46251B0D0F146A2B1E12060AA8303CC22818A529136D2E207E2C1645221787
+ 2D115229254C2824812512110200060607572819A03E187F2B0CA74F267E2E17
+ 74271B7A180F8E240E6E221360211587210D70170D1603020000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000350A0B6D160B731E0E4A25216D2F1E6730247B3E288D735A4C2820320D01
+ 826845957F64CF5522A6462351312D8A2A20AB20107C170A821C0B652B289C3F
+ 1E983B18953B1A742B1AFFA756B4DBB29ECDB384AA9989A08A798479696B6988
+ 6D74BC75605F867A162715278FE321A8FF5AD6F474E8DE4AA0AD70D7C085F4D4
+ 8AE6D4A2CAAB0000000000000000000000000000000000000000000001010000
+ 000504040D10111609040F02002F0A010000004F2C109AB49173B1AAA6A079BA
+ 95637F9E85BBC997C7AC814D8A7D69D9D876D0B9243F3F0105070100007C4921
+ C39C577AC4D14EBAEF87CEB4578E7E453D2EBBD8A5BCBB8DDA9C62E16528CD3A
+ 0CA5300F943E27773F478E1E17AD2B199B2B17832B1E502F2B4620184F2D255B
+ 342866221B381815300A02060000000002221D2177301B9033148E321082321B
+ 56252170180C9D20118E210C731F0F80200DB222135D13140000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000004E
+ 223AB7251AA529137C28178B2A1B742619763323A16543B27B4D2F06029F3A14
+ C27C4E9850309B421F8B3A215B27232E09072C090CA8260F762B1F693627752F
+ 17743C256533282E161A392410C2C9949AB29E7D7C716D5041775E4A72ADAB5F
+ E3FF78C4BA091416141F0E38A7ED35A5FD72E3E780E9C766D1E75FA77E79D3C9
+ 8AF1E082DED8B8A973803E160000000000000000000000000000000000000000
+ 00000000000000000000000000000000010000AB7C4394BC9E70A89BB98859D8
+ 7D419A9E7785B29CCB9972A145216CE2C57BD0BF336A740222340000001D0400
+ B2652C88C3CD58B3DD9BC1AF88C3AB6E8C761214118AC9BC86B9A8ABB085D68D
+ 56E07E41D36128A34B3FC638289E3222A12D189F260E35140C6C2A1973312157
+ 2B27871D054B13080000000000000000002818196928198A4E2B2F0C04813419
+ 572F2660261EBE2613AB230F4D0E07801D0C97200BA7211A662D4A06060D0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000070A010A10000000000B131A2E567D
+ 324FA3211AA62011BE26119424167F3421CE471AE65E244E13002E201CC9501F
+ C7522460312895351762332A822C23971E1CC1270F802614752E206132277426
+ 10793C275E2B24350A020000000F2020795D518BC29C8F7970917D6E7F7C7E5B
+ 94DB539093080F086BC4A53BBEFF63B6D46BD6E179CDBB7DE6C871D2B6273A3C
+ 3C524A8585628269400000000000000000000000000000000000000000000000
+ 01000102000000000000000000250800C03C0DDA8C4C77A593ADAC7EC94F1CD2
+ 6829C1733E6DC3C076DDC73A6E5A6ED9E074D4C376C8D12544530000003C0C00
+ E57A3591B4B872B3CBADB19881B39E7CC2B7A8834A2C1E11ADA576C3B37ED39F
+ 62DB8147E6652BC3441450352C552B27350E082608025E302A8C2B165B251C73
+ 26189E1F0A4F11050000000000002A0A025D261F462A2472312082290E462F28
+ 6A39274125239920197114100000004A0E09B324158C1A1024080B0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000011A271251852B1C3035447329243E5A
+ 202C9C2728A5261F8C2C206132289E421FB1401971260F14050666372CC24B1E
+ 98381B692D235C373A702525B22C22B426169C2715762D226C2C1C3D1B187234
+ 215828225E201886220778714C9EDBBF7BE9DA8EE9D09E9A86A28A7D826874AA
+ 53604801000002005BA98956D0F635A3E376E4D875BDB284DEC979DAC2406A69
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000370C01C9531DB99E6C9D8A59CB814AB2370DCE
+ 591FBB885D73CABE79DED037625475D9CF63C2D054A5C53E473D0000002D0700
+ 8D441952ACCB9EA39DB5AC8BB7A97A73A59BCEB77A935E3A6A473074330FA22C
+ 06A72F097B28106B2D1D1A17151706077316067C29195C2B228D26166F211096
+ 2610901C0F020000000000000000000000220A07402222622D205A231137160E
+ 872D155E271C892925831B0E2F09080D0B1864151498262C5C213202060D0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000093F6A77436FAD2E30A9323ABC
+ 2616A92C157D3123632D227639227C38235129211D0A0754150D6D5548924528
+ 8D311D712C216A3645AB2C36BC2512A7270F8228166624185A1D127333225D2D
+ 25852210911F05E87332AECDA584D0C1A7C19C95B79F83D6C0ABA69895566BB3
+ 5B5292222A42767E81EECB5FD1DD4DB6D786EED185AF9183D0C073D0BF649891
+ 0F0D0B0000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000076240CD65822B48852B37F51D9692E671401C3
+ 3D0C9A9C7B71CFC36ECAC4437F8067D3D96EC3D35EA0BF010710000000000000
+ 09221E5DCEB9A68175A9AB92C8A067A5A1739DB38DB4A47E76B1A6597158702D
+ 0B0000000005080E1113000000721918AC27126C24169B2719AE240F701A096E
+ 170AAD22180000060000000000000000002A0B05721F0E5329225E37283A1D19
+ 462419502C257A25169E230CAA2213A9292E00000239213A51345B0B172E0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000443F73B12E2EB7270D88
+ 291A61281F6E23107943307744365C2C2640140C4509009D603F845B4573311F
+ 912F1C7F200B952D223B38699F252AB4251B77180B4F1C15762B1A762A1B7324
+ 16B32609F06A2CDEC17CA7B98CC7B47ED29855B1D4AB7EFCE28993A681A7B093
+ 7B6DAB1E2A4F73837BE4BF5DC9E16AD1BA80EAD58E9F7D8BC7B36AC2B68DC7B2
+ 3C3D2D0000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000592E1FB9380DC87240A3431BD2975AD54411601F0C8B
+ 1D0084A38C8ECCB37FD1AD347E9A59C8F074BDC5A5B69D241B0F000000000000
+ 46797179EAC17A97A4AA8964B5AC83C7A574BC743ECF8A53AE805F8FB195D48F
+ 51A1320C1501000000005C2C47B8261991230F9D2710A41F16B724114D0E0700
+ 00001604040000010000000000000000002B08017E1E0A592820582D236F210A
+ 2B120F5B352B5E2B206521169A2310310804000000000000050B15020F1D0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000003070C00005211107F1F1770
+ 231A8D25117A2F22A15A3CA02F164B0C00020403AA441DDB54236A2E21612F23
+ 972E1BB521139E1D0D0200000000000000007D1C096A281C802A1E7723169027
+ 13CD3512D14815601400FA732FE2894C9BAE9487F4D95ED2DE54C4CA80FFEC20
+ 4C3D1727594A7F9681E5D064E0E153AEC17FEEE0B0D7B09BB5946BA39AB0BE91
+ 3C36220000000000000000000000000000000000000101010000000000000000
+ 00000000000000000000180601B62F08C96B388C3B17DE6B2CA22E0D24100CA5
+ 5926C2B97C8ABFA65DC6D238A3EA6AC9DA55BADFA2A88B934116040000000000
+ 05090C6EC4B373CEB16D8E8297A992D28A57B3662ECB6C3AC95620BFA772AC9C
+ 6DDB7A42B9370C553635962A3DA823169F230FC125147B2431881F2511070E00
+ 00000000000000000000000000000000004E0F07AC260D48211E5E261C792C18
+ 1D1210571103A02F117E26188D2410B2250EAC26243823410002040000000107
+ 0B00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000A0E06233C45345BAF2E30B8260C952A21A6
+ 2A1A982813C83819CF461CAE2312020302592A21C54821BB34156C2E236A291C
+ A02D18A4231E411E3100000000000065120DA027126B291EA124178F2A187822
+ 14921D149C3317C3581FD9884F93C6B37FEEE874DCC363C3BE81F1D969B9A413
+ 202007050076AEA267D9EE5FD5F167C2A688E5CEB8BE95513C1A838B6BBABB89
+ 9A4E200700000000000000000000000000000000000000000000000000000000
+ 00000000000000000104573226953212D45F284F1908D33E0EA73D197A311AD0
+ 652E9FBE9C67C5CF45AFE738BAF899CBB157B7DA86A48DEE853C3C0A00000000
+ 334E4A77C9BD6DD6C656ADA7899477C5916AAC7A50D46629AD300BA34119DB89
+ 4CC17642BE6339724251882F3A972019AA201499324712203F22111E00020400
+ 000000000000000000000000000007010170150C691709561B107D241265291D
+ 4F2A27160502592A1F772A1D942414B524149C2423752C472A3B69222C4D0B3D
+ 6700000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000033C540535563E46758E2F3EB0261A8B3240A12B31A5
+ 2415A33229B13D208730181B05055C1C116A37299A3822882A1A962A1876281B
+ AF2912CE2E22061835000000180810AF2318892511893324BE391BD2471FB536
+ 0CE14918E49C5FC3C3949ADCC18AEAD16ECAC36BC9B47BE7DF80E0CF233A3A00
+ 00007A714C6ECDEB55D5FF70DBE3477F6C7DECE18DD7C4837D58A54D1BD1A562
+ 8748200600000000000000000000000000000000000000000000000000000000
+ 000000000000002C121445332BA73B16CA3C10070000742E17913214B2431ACB
+ 9F638FC0A38BD0C42FABF84ABEE67AC1CD7FBAC6858A6F531F06000000000000
+ 3F504568A9A079DAC75DAF9F78695B94967F7DB09FBE491AB4370E6B2A19B948
+ 21D05A2590544491465079363D5B2B26632E425D3E6F00000100000000000000
+ 0000000000000000000000000000000000010000120303781C0B99230D6B2319
+ 4829257A1C0801090C5F262155241C812515A2261FA326239A2D366F4273000B
+ 1500000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000E538230498064365B843046513F6D433D6BA32E2F77
+ 2C246F42558138211712116612078729166D3827633629AE2713AA2A1D7E2111
+ 921B0FAE3445263C6C030A15732E45AD2617941F0B9F2B1CC43D1EE97C4BE0B1
+ 72D6AF7AD0C18FB6EABB7FC2BB649F9462BFCA75E3DD7CD0C48ED5C434443B00
+ 000072C9B93EB5FF65C7EC83EDCA4E8A867ADAD37BD7CCB5BF91420800F05E1F
+ 4C210E0000000000000000000000000000000000000000000000000000000000
+ 0000000037120E4F32317530189E2D0A822D1206020105080A3E2C308E5132CD
+ 9655B0B6937DCBD848AEE560C1DE4FBBF19F9C8AD796540E0B06000000000000
+ 00000056878382CDC162AA9D59706676C9B5ABBD92B1662FA0270647261B5325
+ 17AB411E6E555A4A50649A4724562F223B2D3813427300000000000000000000
+ 0000000000000000000000000000000000000000000000911E0B9E200E822215
+ 642B1E97270B6610094010067E241372210F791F1093200E9D1E118B1D1C4027
+ 470C335D0A365700010200000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000004346066F900D4F7C073B6100304F1D4D89303F66882E2E7C2D1E5B
+ 2E247036245A251D0502007916087F2B1C6F3020772C1D832D43C62914B22617
+ 2D0908000000000000131425782E48A92517A220148F2B3C4B2D3FA82E08EA90
+ 4DA3B48E80B7A65B897E71AE9C87E2CE61DAFF88C9C3749C8A00000008030138
+ 674D60D2FB75B8D882CFD179D7C463A39C7ED2B0A6D3B0B7C79A963D10120000
+ 2D0A020000000000000000000000000000000000000000000000000000000000
+ 000000000D01001B0F16542B1B6A34251612130000000B0402A4320CDE4A10AF
+ 767564CCF44DBFF74887A663BBE855CBFEBA8361D94E10B9360E000000000000
+ 00000094845281CABA6EC9C5497E7A65B4AB7DC9BDB8C598D57B446134232A13
+ 19533027B040177E270CB2411B7D311F522622961F0112030010030100000000
+ 000000000000000000000000000000000000000024080B9D1F1878160F9D240D
+ 611E1499281045261E1304046B1309A62010A82311A121119F241CA92720982B
+ 365C3B641E457A0C467102243200000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000002183A02285C0000
+ 0000384A014C5102556200354308395B0E355E374A7BCC2717AB27117D28165E
+ 2A21932A155A140800030E9D2017982A166C2D21982A12793C5BB6261EA12F38
+ 201221000000021421173765723452A3252251233F7A3755321D27341602BA62
+ 3573664A9F7A469EC0A288DCC992CECB63CEFEB6B3895D4F2E000000355F5886
+ F8CE50BBE89BBCAD90D0B776CFCA6FA293508F8883D8C9C9B982EE6D2A6D1C04
+ 0E05010000000000000000000000000000000000000000000000000000000000
+ 000000000000002215194F332D291F241A0F100F0D0F3C241B932807C64D20AD
+ AA935FCCED50A6CE607B9083CBDD49C2FFA7A5A1B83A0C611501000000000000
+ 160000CC914F7FBCAA7CC0AC6FB7A15F75648ADEC29FB995A484597D462D4C18
+ 131710146E34257237243912087E351E5E32265E261FB32A1074160A00000000
+ 0000000000000000000000000000000000000000000000350D128B1A139A2311
+ 711F108B23127829224C211B140400500F0B56100E7B25327E2A3B46325C2640
+ 751D457905213700000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000457A1059DF6024D
+ 570390B303789801587A1D36625B426B813853A031329B27187A24158326168A
+ 2C19A51E0B0D010041213AB72A229428147C2B1BA32B17873247542F51783C5F
+ 08182C00000004273F2B3F73743354442540392E396A3A47C25631E29C5BA0CF
+ ACB8B58EB9C59499C8ABC4BD8B90C2CA85BDCCFA904A000000010101538C8179
+ ECD763AFB1B7CCA689C5A98BCAB780C5A148635B88C2AD8ACEB9D8A96CE95B1F
+ 360B010000000000000000000000000000000000000000000000000000000000
+ 000000002A08004F23205B2721390E0619101462362BC24114DD5819B8937876
+ C3E191B8C03B7DA947859F98C1C35DBCFB96A09FC8633071220A000000000000
+ 21080058391E859C7D98BA9981C8B76581716CB099A8B997D79459E84F158D21
+ 075020176832285333312106003D2220532D2A4F2E2A6322184A0E0300000000
+ 0000000000000000000000000000000000000000000000111831B024209F200D
+ 822011981F0F82241A5C25207F1E0D0E0100000000101428151A310A0D190014
+ 2302162401080E00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000004417F03ADD90D71
+ 991B4D7E304F7F225589344B816A3D609B333AAF251B861F18952613A52715BC
+ 260F8B2832000000070914A62115A5281B842719B22912AA333D14437B2A497E
+ 011522000000040305523A53443759333239AD360FD5602DD4874CEBA563C86E
+ 3ADE6831B79D6DD6BD80B4B191A7ADA25BAC9E2414080000005C83797FDFC968
+ E5E5C27954B9DBA785C1B09EBB96A8C49D607E70A47641D0BC7ECBC690E09554
+ 902A090000000000000000000000000000000000000000000000000000000000
+ 00000000420F0188230B0100010800000000000715159F3B268197C885A5C8AD
+ BEA983788D1674AD60ADCB9CA7AE83B1CD7B9EA9D27948D2310133231B000000
+ 000000000000D6944FBFA16A7DAFAB8FBCA8392F2182C6B98AB6A0D29A61F25E
+ 20C44116632D257626190000000000005F190A8726128027148F220E65130B03
+ 000000000000000000000000000000000000000000060C552E50B02A2C7F1C19
+ 7A1A07A1221A9D200E6221147A2110971F110000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000010517022D5E0174
+ 86165989394677723654AF27239E241654242C891F127E2D2BB0291DA82E3649
+ 162000000000000018234377365AB22B1D962512912822A8344507396B00334E
+ 00050B0A00001B30472A3F5C59373296351AC94F1DCC531FDB5521902D11D534
+ 04D0804BC2B48BC7977073A8AC77E5D158A48C0001040101005C8C8383E5D35E
+ B5AF6CE9D38DD0B7BCA671DC7B3B6DD0CB92BCA1182119942601C54A18EB4A13
+ D84614793C250001060000000000000000000000000000000000000000000000
+ 000000000B020000000000000005010130201D983211E0511BC45D34AF7C6F6C
+ B6E42670C47A83775CC1F492ACA981ACCF949E9A74B7AA6D8670000000000000
+ 000000000000CA4210C1683397AE8BA3CFA491976D8A6434B1B482A7A17BC690
+ 58CB5722AB2F0F8D2B1729110F0400000800002305029C1E0EA2220DAD221419
+ 050500000000000000000000000000000000000001122127305C000B191B0100
+ 951B0E9E221F662E4B981E06771E0DAD2312701A1E0002060000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00014251022B44143C6E6B2C414E2A42852934A7291D8C3247972E3A43396300
+ 030900000000000003233E583F6BBA25158E2A29A8241499394D20518B11303F
+ 2603054C0F0B852210732A1F582B223D1C11532D21993B1D582920652815DB7F
+ 4599AE939ABAA08A775F6CECE57FE1CC1C32341C000070623E99CDB17ADBCC64
+ B59971E0E49BC4A9D38348E3682689C7B2A0B48F5D3F23000000000000481306
+ 1D0C060A12130000000000000000000000000000000000000000000000000000
+ 00070100000000000000340C026329235D312587361E694B5A9C787B75A6BC58
+ CBFF182F479C9D9E5EC1F2998E99A2966BAE786587A78F63C3B0000000000000
+ 0000000000006F1802D96B31A4A377B6AA7596A38E507674634732AC9D7BD173
+ 40D05723B735116030213E2C2F5B1F16AA30180D030000000019040317030413
+ 0406000102000000000000000000000000000000000000000000000000140B15
+ 7C232B981E19523A679D24157E1B0A901F0F9C242331192B0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000019
+ 1901121F0F28466A2A40862E29653A50922F3D593D5E4E3E70363A6512385B00
+ 0305000000000D140D436E4542749A2D359230336C2A38753B5B774466424E71
+ AD2D2673160A4C0B004910055C1D150E1216542C29893521B13F19D0682DB0DA
+ B088DFD070BCAD6CBCB081E0CF558C8300090C5C1900B8B8867ACBBE71C8C364
+ B7A482E1CE9BA78FBB4319E76424A2C099B6A7789A4C1E050000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 003209067D1A0D6818087B1D0944222149332D843824A2757A81ACD092B0B44A
+ A5EC312B44989EB367B4E89B8FA093785AA674577D8A7977DFC9568984111211
+ 00000000000082270BF35B1FB48655D0773BA69B7B82BAB2714F3872836CA1A8
+ 84B39162C45F2E9B40218C3A2075392A5928202509055110015611091D050300
+ 00054B2C4917101D000000000000000000000000000000000000000000050911
+ 4F2946722333241626912B318E1B0D8E20128C23283D1E3400060D0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000F090556
+ 77174B7D543C659A2D3D4743695B39595A3B6312487A143E6A00000200070B00
+ 000000000000030500060812335E5D426FA02E32722B3F9439519A3A3335566D
+ 7E3E37A5240A622A234628227033244D2B23C7340CE47136DCAF71ABC8AA8CDE
+ C86AB4A679D0BC79DCCE8DBFAA1E2420000000070000ADBA8E98CAA97FCDB067
+ B7B17ED5CDB59968832C0CDE571BA6AD86CB9759B93E120B0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 002106049A230F7A3428682D246642378C717899849F7898D0A2989C8D8DAB0D
+ 447E6654669B9CA86AB0E5B56A62707867889A7B6C827974D6C360A19C000000
+ 0000000000006E26114A12037F4320DA541CBA784685BBBABA7457070000DC8E
+ 4BD59559CB905AD46530BE481B943816803219562F287B2A1DB32811961910A1
+ 272BC7312D301B30000000000000053A65072842000407000000000000000304
+ 1B30593E3767152E56952B36891D12931C0D972422353665000C180000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000026A8B0392AF1557
+ 85373E6C3C436F095D8C114D7D2F4176125084044C6D00070A00000000000000
+ 000000000000000000000005395C184B816741635C436C000C1DC0230A93321B
+ 8B3D25823E2B763327A34020E0561EF86E31D87D45D69E69BFBB899BAC897994
+ 7C88C3AC99D0B487B6A1917F55000000000000C64A14CFA96890C3B655B7CD7D
+ BAA889D6C1C7AB77BC3C0FE16127C18548D1834ECF47152C0F07000000000000
+ 0000000000000000000000000000000002030000000000000000000000020000
+ 000A01002D0A0252211D783720B44013984F3C79728FB26E64846E8E2076D80B
+ 345678A3C4859FBF728BB67E93CE8B7C645FA49C5274706BC6B47EBBAD626F5A
+ 07000000000000000000000074240ACD3D0DBB4B209AA9A9A0A9A1C15F390001
+ 02A52200B14119B5845FAB56309E41216E3024642C24762819891E0AA82913A4
+ 2F19A0230E7B160CB82824AD3748763F68072746000000000000000000000203
+ 0315240B3D6C0B1A2E6E304E92282A571F2C90221D722C442543790829410000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000207010C2A034E7F0388A70C628A2340
+ 691E487709688A056689104A77032B4208668A01353C00000000000000000000
+ 0000000000000000000000033D5209537B494573414576003B59380400712618
+ 773827B6451BE85F26CA7443BB845AC78152C48A58968A667A6D595FABB6ABC7
+ 9FA2CFAAC8A06AAD79430000000902004B1000C53D0AADB7A264CAF260848283
+ BC9EB2CEA5A1956FC5491AC54113BB4717D47137A32A070D0401000000000000
+ 0000000000000000000000000000000000000000000000001205075615185812
+ 079727145E2B245B32258B3216804E39885B607E6074656890169EFF1E4C7279
+ A7B46598B68A7E976D7CA5B2654A827C746EBAAB4C736C60B2B376C8BDA5AE87
+ 6341210000000000000000004D1B0B882509953819AF8E8397969BA490768AAA
+ 8D6D3B192506016B5E459A9671AE6B41AB47239735188739257A342671322467
+ 2B207E2616932B18BA2812CC2819352D54000000000000000000000000000000
+ 00030302131D062B4A443F708B2731611107752F405230531B2E530002020000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000845B10881E80597EB0680A50B5E850D57
+ 7A0A6D8F027E9004829B02394700000000282D00040500000000000000000000
+ 0000000000000000000000000000056E951B4B821E4C80196182000000100201
+ 3315123D231EA63C17BB58277A5037AB4A20B189579F7250AAA39897C9BDDB89
+ 4CC5AF75E1682C330E00000000290400C6501DC69C7E77BED895CFC967623F71
+ A79BB4B98FD569317C2F141C0400C43E11C94E1C7D2A11080402000000000000
+ 00000000000000000000000000000000000000000000050D6A1F2BD82A1BB429
+ 106B281B692D2375291760443C6767655064813785D3227ED6218FE7AF695175
+ A6C56F7F8B787FAC4C8DDEAD4529986542748C7E585F5777BAA179C0B488A489
+ 2D291A000000000000000000160E0B402923942F0EB57D61939293B68257888A
+ 6DC18A598C2B0A29160AAA6233D96B33DE6027C45221A73D18873A207036246A
+ 30227D2D1EAD2A14BC2C2A603556113763000000000000000000000000000000
+ 000000011C2D13477652386054355E3C17278C25283B39661440710316250000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000068DF1028EA80496AF0124390593
+ AA038AB70489C501587300000000000000000000000000000000000000000000
+ 0000000000000F190003070052760095B0733A473B4E6F40636C511C154C2A23
+ 872C11C14A19A87A4A723B28C33B0FD78F51A09B74BCA185A3BABED3693CEB66
+ 24B84417AD300C0B00000000003E5F5270D0C399ACA1ADB6A6AFB89455624B97
+ A27DA0C4A8EE6323751B03000000972E0EC83E0F6C3424000405000000000000
+ 0000000000000000000000000000000000000000000001030F04061403022F0A
+ 03BF230BA40F007F030059755676504250A1C114AFFF0390FF4C74BABB715065
+ 97C38C767E5D71A0797B9B84503FB972417A857954706668BCAE8AC5AEC2A668
+ 9A5B2C0900000000000000000000000301046B3E2EAD85689D87779C8A62BE6C
+ 3FC2864ED1602B972C0C0000003D11028E3417953A1872372562362A662E2581
+ 2B1BA52912921E0D350D0E00040D000509000000000000000000000000000000
+ 00000000000014386035447A0C2B4C0B18307F2A3E41365B06395E0833530000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000530770C8CFF079EFF068CF201244400000005AF
+ FF0487D401173900000000000000000001162700161D00000000000000000000
+ 000100060B1D1D346348788E2F48D71A039A2E18545257406B728A412AB8461C
+ D9602BB3613B8C7358BB724CD17841D4713BBC7D50B49D86CC815C9E2A08751C
+ 040000000000000B070228424183FBE59DA085BF9679C79C608EC6B04F5E4AB2
+ 8451C5C187DE8E53C244173E2F2C3D23197E2B12462B22241518000000000000
+ 0000000000000000000000000000000000000000000000000000000000001200
+ 007F595668E4C88CFFEE72E6D835AAFC0CA3FF098CFF2779D7A142279C797082
+ AADB694D673B76BF8F6B65C5571E8F9675777E6F7D534081705C6BC0BFAB9F75
+ CD58212B0A0000000000000000000032181D7938217A8D76918B759281647255
+ 45CF501EC16C3AAD441E473834331E1C0500001D131A25181C611B10601A0A7A
+ 1807871A1051100D000000000000000000000000000000000000000000000000
+ 000000053F5D104B7C06325100030300131E303E724A32561F3E6C04263E0015
+ 1B00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000063E840750AE0958B3010F33000000000000075F
+ CE064A9C000000000000000000000000035C7B0395BB000807002B34000E0E03
+ 21351E4D856F3C62BD271ECC270FA42C1B8827145358573B6A7A812D18973B22
+ 8A2D18772F209A3715BC3F14B257318088779F896DA1A58EA368473A1B120000
+ 0000000000000089916C7FD6CC75BFB18A8970AD8563C69C67A9B68D6939186A
+ 988DDE8A53E07437BC42153218101E161A4E352F150D0B000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000C0D3E715F64C2B032A6EB1895F5188EF80AB2FF53658FB4431C7A93B07F
+ 89B75551783B659F75A1B5324A46C7A062B7A17278A293714F3792CFAF8AA98B
+ D18B50E448132C090000000000000052171156413D69CDC07799848A7F666485
+ 7D93462CB2451BB0683A8E6A538C7A5BB05F2E82270717070315090603000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000032A3A05243A0116210000000000000E3F6B2E38641F355E0E49780653
+ 75001D2100000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000005100000000000030000000000000000000000
+ 00021231000000000000000000002022066B8D335C8F074468126999082B3900
+ 090C152E4D313D686A3451A6252053130B8F26158D2E1E8F3B36942311852315
+ 5D2C26742E20993B1DA35B387C9B8D688376779F926AB5AB5841391007080000
+ 000500005C43248AB69E7DDECF66BBAE7CAC95B78A6AC68E55C2A2706521048E
+ A37FB4956DD94A14B439111309081407084022221C0D0E000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000509B862995ED299DF526B7FF2B95E56736268056667885A788
+ 64734773AC464865566163977050D26023A6A6857DB19C3A5C55B0BA8DAFA978
+ BF884F56210A08000000000000000020040028221F75CBBF669D8F6961556B94
+ 8870574AA237147C3718A1422183573FC06B3AD35825A33E1B46292032191909
+ 0100000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000B3C5F143A64113861041B2D021C
+ 29000C0E00000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000201004E6731588F9D34465848781946771E
+ 4073000611111C34161C370000003E1626D22A15C2261683150EAA220D722A1D
+ 782618B84E22AC7A54938A7480907E749B8C80E3D75481780000000000001203
+ 00D8571DD2AC6E91D3BE6CCBBF5D7A78967F64D9753FC67C40CC9062361E18B6
+ 692FB5B483C95E2C742E194E35320000001004030E0403000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 001B302771D3AE51B8D868DAE154C7E44FA5CF3A5D87852C0A6273A06471A36C
+ 758D695B664959744739326B1B0EEE723098BB99B2A26A6C785E8BAA96BD8D5C
+ DD6F2F9B3712000000000000000000000000010402729A8774D6D156413F6FA5
+ 9B7F9D8BA15833A443204B2B206E3F2B863420C54519B94318A23918693A2A50
+ 211C801803971C0E2D0805000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000020E160B436B0F3F670420340000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 06090E0000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000151F2C497EA7373EC02816973A4B91
+ 3854C32E2BAC2211C62F28CF27167B394FA63032822F266A2B2B932D1BD44115
+ EC6428F09452B8815C97735985B3A192E1CB8FA3802F24140000000000002B0E
+ 01AF804E97C7A883D6C762453E7F8F7DC17A4EB14E1EC46439AA8B6B50665295
+ 2805E98040DB7136AC4621462425661807050100000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000004B7E
+ 7987EFD773DBBF85F6CC68CDBB2BBAFF289FF938547F712E196074A65B6CA250
+ 648F7FBAAA51A8BF784930DC3B0BCF9455BA99649E947349341B91BC9EA28C65
+ C54211C1360C442213000000000000000000482F1896B69375C9BC8D896D6C5E
+ 568EA48F6F615395341642231C86331C4B272463271A9B3E1B893A1F792F1A68
+ 3226702C1F7B1F0E53100716030300060E010409000000000000000000000000
+ 000000000203000000000000000000000000000000022C3D0A476D0751750000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 25588F1A4788000000000000000000000000000000000000010E270322590000
+ 00000000000D0C0000000000000000000000000929479C3D55B92B15A42D1A96
+ 373DBC29198E2C188E2F1BA52A15782F265A3637863B218E4026AC512AD17845
+ C79B6BADA4789A9074A49A7EA9CBA5D6BC817A320B000000000001110000E345
+ 11E09251ADC39B719A7A7AC3B8A2B38FA9865ACC5622A1320FAC8D61C4986122
+ 0D03C74215D0612FCD5220813D2671332B751C0B020000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000060A2
+ 9D65B1A46DC2A280E6C936B7FF1289FA3F6CBB5239487D4E31558CBF58709A4D
+ 67908B9D727DAF8F744832A01E03D47035C5744689AA972B1C11C79E649FA27D
+ C05929882408261C16000000000000000000000000493F2D9EBD9D72C6BE8351
+ 379AAE91A9785597462750231F652E1D78291989200E7629205D322867312057
+ 2E25742E1D7E2A1AB62711B621166B3454292442000000000000000000000000
+ 000000000000000000000000000000000000000000001F2504354B055D7C0018
+ 1700000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000030813
+ 1170C91DB1FF02276D000000000000000000000000000000034180079BFF0045
+ 53003A43014C5E003E53031C2E02233C000910000000281C30C0322E992E197A
+ 33229F3525B0341C8B412B884B34A43919A34625A26544C96536EE692EB37C4B
+ A86A3F9F8D6AC1A878C2AC79EC803F673717200100030A0B4C251BA12E0AE666
+ 2EB8A6788FB89C87906796CAB1C99961933E1B882F15733824CF8B4FD96C330A
+ 010034140B943A1CB6481DA63A15372526110000000000000000000000000000
+ 0000000000000000000000000000000000000B060234160333392C536E6566AF
+ A86BBDA67DE5C651D1FB297FDE4E73C26D607C55281C656B6E44A2EB695A6D4B
+ 6F9E7CA79172684D863722C5350BB63D12B68A5EA4AA83050401D57F4AB28B5C
+ CD763EC33F1143271D120D0F000000000000000000663213BFA87381C2AF7D9F
+ 7B7F7567A469529B5E40C643156226194C2A27822614B0220F812821722D2355
+ 312A712310672B1F7F281A9D2411B123154E1C29000308000000000000000000
+ 0000000000000000000000000000000000000000000000000000000268740009
+ 0900000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000A3565
+ 14ABFF0AB5FF0B76FF0C6FE8052D3B0319500C96FF068BD30281A8068AAF018B
+ AB036E941F4E842C5287234C876F3C62742F459523274C0A015A110C961E0E82
+ 2A1A7B3D2EC4491FC0542E683D349C4324DB531FB26432463B42A256269B714F
+ CB8953CEA56CEA7435E96E2E701C02000000000000000001330D04C84715C696
+ 5DCFB2767065488DA087C9B981CB7F4A7C2D184D2F29973618D77138D55A2566
+ 1F090000003A2220603A307C37245D33294C160E050000000000000000000000
+ 00000000000000000000000000000000000017130AA8B18480CBBC8BEADA86EB
+ D486FCDF68E7F63797C93C9FF08D6B7367493C4D2317776A8657B0D05E6C766E
+ 4F678DBCA87DC7AF754B3F5A2111B44820C49D65D2874D06000095927CC36D42
+ AD6437C04113A1361459352D190B0C0000000000007A3614C8A16B9CBD979BAF
+ 8D79856BB27D50BA5E3AD670329526086922175A241A9B230DBB2718AB261365
+ 2D24842A125721199E2B139E2714B32313A4232052345A06233B000000000000
+ 000000000000000000000000000000000000000000000000000000000D0D0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000D1119020102000000000000000000000000000000000000000008
+ 0A6EBB0AA6FF0693C90AB8FF0A85F2010C25021C4908A3FF058EB817638C2F4A
+ 81424E7D5E436681354ABA2A23A82E28B62915A42E16932F1C6E302733262445
+ 1211280400390B041A0F1126110831140E3C211C663C3BD57359A98259BE6C43
+ DA6731A6320FC13E1076230C230E070000000000001A0E0B962F0ED44E19DE7A
+ 427E8070828D6F9FBD9EF0611EAD411D4B26213D2528B63A12CD6029BD401423
+ 18130000001A0501321414551D15722E248F2B19A422120E0202000000000000
+ 0000000000000000000000000000000000000000003D412F7AB7A878D6C47AE5
+ C253B9CA47A2B745BAF048D7FF69B1A9702911573B516F6B8657B9D559829070
+ 413EA1957F90EFCF47706F882F16DC662DBD7C4EAF451D51250D98B28DAE562E
+ C34B19B2370F020F110000000000000000001104009B2907A36333DA793679BB
+ AD8B7768B0392AC08565D7511AB83910882C168A27167E200E28050370140EA4
+ 2710912B1C6D251C531D146D2B279C261882324A413C6D123C681549770B4A72
+ 0218240000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00001937684B8FEC285792072A5C00000005285C010508000000000000000006
+ 066BBC07A1F423648E0D8DBE08A8FF09A0FF00191E0754B90374AC0054650F4B
+ 6F2C2F5367374F743246992D30AA2922AE29169929177A3226813B39B93A23D7
+ 451D9F422B69352A8A3F25CE4114C46F41898776998081B2573B90391CC34114
+ 9836175C3125290F080000000000000000001708074E2D29833016BA4416B0AE
+ 88806C55A86537D5B271C7310699301349140D452724A1401CAA41199D3C1847
+ 2C2C000000000000000000000000911F0B470E017B190B100302000000000000
+ 000000000000000000000001000000000000000000000000101818426E6A63B6
+ A050AEBD5FD1DB5FDCF358C3E7915B4BA21F056155703D71AB5DB7DA839D8269
+ 7376A82F13934F43836351BC4C1FB55329BC794F5E2A1673443FB4A577AD6B3B
+ 863216B437104722160001040000000000000000000000007A2F0FDB450EB3B7
+ 83A78F6A75402A919F7FC1A068B95023A4381986342195281E9C1E115F161B90
+ 1D11BE251392291779190D69190D9C2511AA240FAA26227D34503D4378072E4D
+ 0002040000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000239BFF1395FC1D9FFF1497FF075BA30E8EFF0B59C800000000000000010A
+ 0765D104A3E3315C86255F890796D3088EC40267800050610477A90000000010
+ 0E0542623A487A5F456A63446D64436469425F554065883449AE2920B12C168F
+ 2F1B623F346F352687321EA35840927B63838673845D4D622B215F3125662C1C
+ 5C332B171316000000000000390C04410C01591D164C2C26975035AF897FB397
+ 859E583DAA7E5ADF9050B13B14561E105E1B105C2F28A6401C822D1177392526
+ 18170000000000000000000000001B0504000000000000000000000000000000
+ 0000000000000000000000010000000000000000001F1F18466F6B72D1B879E9
+ C975D9CF7AEAD745C7FF468DE0931A19A0280F586B8C46538152C3F597B59297
+ 77619D4E3465120D621E09AB441AB8421A9D88652E362B6B271EB5937FB47552
+ 6E301C6B2E1B653121131015000000000000000000000000671B05BD2B02CA99
+ 60BA9E6B63624E693C1DD5834CD58249C95825A939107C2A308C2422461E3239
+ 1E35992D3AB52712AF2518190100811911B02823A82319A4251F632F4C092B4C
+ 000B110000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00001F93FF0BA6FF09A4FF0DA6FF0CACFF06A3FF0AA7FF037ECB0471C8000000
+ 0000000080AA235E8B5F4464355E930088AF31518418598A0B759D0257760066
+ 910778A212629600669208365C004573323F7383354FB3291E9928187A241782
+ 2C1B922516BF3D26C46544827D6F728573706F647629186B28204D201B140A08
+ 7B2616100200000000000000460100711B0F744B3BA57452A98171ABA3A2982B
+ 0F444836B99167CE622EC84014852C1C7D291C70332176331B7E3F275F2C253A
+ 150E000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000003030473A89A7AD3C47DE4CA7ED2
+ C374CBBB6EE0E92FACFF218EF99C331F9B563C60839A68526C6EC6CF79D5BC95
+ B094B86954972521842D1975351FA146229C8E664A3E26690E00A7787C907D88
+ A93D1B4521203C2C2A4C211D190500000000000000000000141614A72F0DD485
+ 45C37545999D7F8A6036812E14A48C70B9481E8B2D13663528542F2C712F3552
+ 1311544073C42617AC29271C274702000036294A613C68693A62563C66433F6D
+ 103F6B034E680000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000028508A0D7EF10C96FE0697D60E83D41884C31082BC0E89B10B8AB1068BAD
+ 00242E00667C096E96594169A0313E644F6C32538497334369426B1C4A7F4763
+ 9A38708D575A7E394A6B28597D41466C86394E87364A892C348C2A1FA63021D3
+ 3319EA6D44D28C5DA275608E8C789FA68E9E2D199E1B07821B06000000000000
+ 0000000000000900006E3414738C6F80DDCB71AFA28A8C76A48A689B8D6D5A21
+ 0BCF6D37C07442AD411A7C2B18752B20642E254128286723107E3522552A258D
+ 210C000000000000000000000000000000000101000101000000000000000000
+ 00000000000000000000000000000086471CCCC58881C4B670C5BA7EC6BB6699
+ 8D7BEFE23CABE9239CFFB14342B3140185694C83796F7C647067E5F187ECD265
+ BEAD8686826837385830334E2723DC672DBE6939471A07260B039D62558E828A
+ 9B604B53352A49161043150F090200000000000000000000411D13AA3411AF36
+ 0CCA5821A9784DCE985D390D00918A60A88E62B64F276C2B1D632921642015A3
+ 290F7E3843932E39653D6700040A000000000000001F3602233F083B61104A7C
+ 0F3F6B0B527E013C470000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000020643AA0B88FF0582B00C78B0176D982B5A833A4971335280
+ 364F7D2D386115334D1946788E3649B932205E455D843C4FB1302B853D4D7647
+ 71BC2C26BD2614A52B30CA281382332A763228822E1E663328954338B14948CA
+ 7552997C75B56B59B39177C5C493A25E43A71A0E140302000000000000000000
+ 1C0A04340700723010CAC08594CDB7719A8C6D6B5E847C6B946749BF925F1100
+ 00CD5322D16430693428942F21901E0A571508280904653627652D225E20165F
+ 1608000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000001301008E5D2BA7BC9549655867867496BEA380DF
+ C061D0DB2F99DC6699B57740307C1F1391725B86959F7E737A6CECEA7FE2C975
+ 584E96736166493E622217A03010CB652EC45020350A00261F1D9A7D60857C7B
+ 92756C8C5D3F381E206212002B0802000000000000060203241816090B0A962D
+ 0EA43412B05E32C6844FAC330A2F0C00BA5A2AD86A30CA5626923A1C7234235A
+ 30275F251D3D39604C426D34162008091300000000091101131D00000004344B
+ 011922012B36012C330000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000301001D2F54107CDC0AA5FF09A7FD0B97D21289B50E74A03D486A584062
+ 91304086445BA323213C323A162F4C95201982301E66455AB83D37AC2E168331
+ 2BA13434A730198D3B299130209A301A87402B8F5339C74C21806466724B53A4
+ 8E65A97F67C7A173EF9D5D823F1B140000290C0F000000000000000000000000
+ 691E07D95C24D6A46A9CBDA38C72617274687781768A513BBE5E32DF5F260000
+ 00AB522ECD58266733276529204D110700000052170D502D2A7527198E200A09
+ 0100000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000002C0A007A391547381D837E597E907894E9CB6DE5
+ E251B9CA50BEE27FFCD10000007C2C2796737889ABB5669FB25AD7D980F3E17C
+ 887F925F437A38287C301EA9441DBB522591331604010480583379836C90775C
+ 777870897F63655047852414340C050000000000000000000000000000005E2C
+ 1C762C179A3D1DBB5D2DB6694344281D3B150AA236139755359D4E2D83371C70
+ 3020562B2452353D783231BF281C492A4E0C2142513C641C4D81000000000000
+ 000000000000000000000000024E7700090C0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000007080D3388DF10ABFF0DB1FF0FA2FF0A9BFF099BF80AA2FB0B8DEC1A71BB
+ 524F7962667E7F463C564048054873233563393155040F1E592338BF2A1D8F2D
+ 167C392CBE3B20A73A2166372C9C3F20BA512649302C572617563C3ABF7545C7
+ 7846E8793BDB4D178E29081001000000000000000000003B171323161C5D2716
+ CE3E0DE68A4AB0CC9E9C8062967A68ACB08C8B3E2CA4411BCE4A18872D100E10
+ 159A7456A84B267638266F1C0E2608000000007B1C085526228C26128F1C0B0E
+ 0200000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000003A0A00BC2900B55F266B93828CD3C388E3CD84F8D15ABA
+ B663D3CB71DAC08FFFE225001397374776719C72C1DC69CFBC7E6A75AF8B7BB1
+ 6F5C8D2E156332286A2F1D894D2F874A302C1912270400C8733A906B4B887459
+ 8F7253649C98646157612A23801C09B42313000000000000000000000000492A
+ 2C3D2F2B873219AC461DB95F3586846695542E0600004934328872588B493363
+ 2E23852313AD2710B92512A81E12A82928AB3139C1373F0B132400000000080D
+ 002B41000D14015762006A7E048FB3036293000000000000032D6B067AE70881
+ F007399300000000000000000000000000000000000000000000000000000000
+ 0000090B114A79C61A32582A6ACD00163D0D7EFF0C7EFF077FFD05A2E1039AD4
+ 018AB31556854049775E44639D4249A5373EC1291AB72A148729172B110A231C
+ 353E07006F190A1913166C1A056921144F2923B44016C47043B5683FB549249B
+ 3617A83915341B160000000000000000000000000000003C2522AA421DCA4C1B
+ D78649A8AF8A788B7AA7A487BE946CAB532F7030209E4522883A20211B1CD159
+ 219B72507E37216D34237F31269A200E68130DA1220C702617AC261177181300
+ 0001000000000000000000000000000000000000000000000000000000000000
+ 00000083270DFF5C1DE4914CDFB576CDB77CA4D6B583E2D16CD0D462AE9957BD
+ D865E2F17CD7C20000003025437F5E7F5174C270D6E76EE2D174878DA861488A
+ 92829AA2869A5B357C240C8B5F46604F4513080C3C0D00C95F2A973F23755546
+ 7B85776C543C70CDBE8B9E879F55380400000000000000000000000000000200
+ 00412323632E209F3E169E401D8A5336C37443C04115000000803010D2682FD4
+ 471887381E633028782B22972B179728139B2814991F10901B168F364E5A4576
+ 344B84125387005774146393225A9201364000141C048CA90697B7049CAB0783
+ EE020F2F00000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000063D7F0A72D00DA4FF06A4FF0A89B60F6F94
+ 2154803852754F3C5F6E3750893342AA302BA22A1F7F3430653D499D3B32CB3C
+ 239C3421743121863A29C6431C8D4D3584422DA0391A6F31247F351E64312754
+ 271E131215190E0C0000002306070700003F0F044A2622612A1BB3451BD07E48
+ A67C5CA8684DC4573CCE5735AD422188361E65372480523B5A3E3A000007D547
+ 16B2542D7B2E1E562E28691E106A160C230809A11F118B210C6F160A6F191709
+ 0203000000000000000000000000000000000000000000000000000000000000
+ 000000100000BE4819E2A968AACFAA82D4C87BDCCF68B49F4A7F6E73D1AE65D6
+ F460D3F04E827D0000013E5C825C93BC499FE180E5D978D5C063CFBD7085738E
+ 8E7D88A18DA8764F8F3E2281674F8F5331190503521E0EC04D1FB241187D4634
+ 6E756E64635360807C79D1BE5067540100000000000000010000000000000400
+ 00471610683125602615943B1B6E2F1FB2582EC8511F4E2318180807632009A1
+ 3F1D923D1C833B216F402E672E21722A1C7226198B2616AB2A1CAA2C2A84344C
+ 2E3C681342712F3F6D5048763A4878081E352254862151821355810389AD0009
+ 1400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000010C18053061064A9B0564B5023B52
+ 045A7C0F5584414E793F4A7539598344567B3B486D5B42678C3545A7291E9F30
+ 1996311E862E28AD2C1E802D1D732C1E8E2B197C281B6A2B20742A1C47191113
+ 04030000000000000000009A2014751C0D732315592D27802E19C46533A8855B
+ 9D6140A26C64E76031CA431C6E271A6C26145B33299B5D3F843F2709070DA83F
+ 1AB34A218D2A15622F27751B0900000030121EAD231BA11F0D11020300000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000800006B301368452879815D49857D5EA19464B7B481DCC44BC4
+ FF56C3F73C4F4400000057ACAE57B4CC70CADB79D9BE7BC6B993C0A88F5C4763
+ 382E84463290482BAA4521BA5A309C380E000003472218AA4018AB431A77301D
+ 83614F667C76643D308AAB97AABA8D9D50204D12010000000000000000000F02
+ 008A2816622C24211F21813017542722933717AA3D158F381D301C1C00010413
+ 0B09622F2764332A6D4C3E8A4C328C2A17982A16A82515B529266E395B6C3854
+ 5F3E61803A528E384C8D323D6E2E3E8833444848771D5684097BA204A9E80432
+ 7B00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000001000003002340
+ 0587BB126E920690AE045F7C01637F0D51834F416D9A3543A22623AC271CBD2B
+ 208A354CA92D32AE2813922510A42912BF2510BD2914430F08941F0D3B0C0600
+ 0000000000000000000000751602772E227134268E3419C54E1EE2682D9A3612
+ AF5427D47D47CA3E0F912D0F552D257F2B17623024D152229031103612107839
+ 248E42258D2F1F992813A72711420A070000028019168C232800000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000003B332072A49280CAAB8DD9BC76D0C47FD5D154B8
+ F52983C310150B0000007EECCA60C7CC5BCBDA85E8CB7D999BB27961916E5C90
+ 2E1C9B1E09772616B83A18D759256C210B1D0D0F5A2A1F8F401F8F301275412C
+ A16F52798B8179533F837D6E76C2B3C6A96F7D2203000000000000000000440E
+ 08AA250C380D051A0A0A4C322F63271C6B2819963F1D7850386C55487D2F1A00
+ 00001F08065414059A2810C64D26D5481FB9341F963028852A1E892B20A92C19
+ A52B1EC028138024257C2B386D3A50554065115588086D92017489001E28010D
+ 2000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000043D67
+ 08A7FE07B1FF0344870296BE0973961A56852148770B2F5A493455694570383E
+ 6F3F3E6C9A303E851914962528A32D33541A2524040400000000000000000000
+ 00000000000E0203701808762314522D247A321C92583888503A6A220B72674D
+ C873449E4021742B1881241570281E962411822F1DD542166D331A300E08512D
+ 2B7B331D763026A12314B8251768171700000038284A22182D00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000080201240600B66D36ABC7A36FC6C192BFA38AB1988CD1B58ECBC465AE
+ CE4496A2040500314B4B83E9D862C8B963CDC681BCB4BB3E31B27D64AF7060C0
+ 5A3A80251C813821AD3A168C341A0000001108083D27288A4025663A256C3123
+ 993923B58963856757A95236A5B78DB4A5729B42150000000000000000000000
+ 000000000000000F000072281B60231B8726166F2E225C2A1B824B35A06743E1
+ 531C5A251300080D000000560A0672280F83381D64383A5C332B6A26176D2416
+ 92230F75241BA02B21B12A228A32434B3C68123E68025466001D1B0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000005366B
+ 096BE007369400050901537400535A01364400191F001722285084195E910020
+ 34132C4D0E213F0000001D2D552E254000000000000000000001080C00080C00
+ 0A13241120B5261FA226118B2617752A1D863D24B36B41292624B64619B77347
+ AC461F763A2896241D9A250EA92312A224147236259F381A462B231404048C2C
+ 195F31276A2F21A82D15A925253C2A4D00020500010200000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000651602E76326C6A76F85B79DABB18BCC8C4D91BA9C9EDFBBB6A37F4DCE
+ EE4F937900000049898B6FD5C564C9C258BFBB65BBC69C706ABE916BA8655EAD
+ 65425C2C237E331B76341D452A28000000330A026C372C736655521A0E662B20
+ A13219CAA167936B5EA2452F7E968ABA9161D95118721D070000020000000000
+ 0000000000000006000096210C651B0E7B1A09632C236F34214E271F91361DC9
+ 441BBD40186934283717132505001F070520171960261B7E2A198E2E1C982916
+ A62919B527169A2E3A44467B1B477A1553860248620000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000010F28
+ 010A1C0000000000000000000000000000000000000013160669860232420000
+ 00000000000000000000000001000D1800000000000000000000182D2B345B4C
+ 33577B2439AE1D0DAC220F892C1D8C3D23BB4A277F351C3A1A12D7521D963C1F
+ 65322861373BB72411AF2412AC231A80271E77371F6D35253B1D193609079722
+ 0E7B2C1D742A1B7D2A1ABC2B1B8B364A2A345A00030700000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 1A0701992000DD8C4D98A783C5B57BD04F17D09D6393CDAF85DEBD82A89974E6
+ CE3E7166000000376B6B3B7FA25B859E4C7BA283B0B2C46950C94D2A955442B1
+ 643C752A176E2F1E572F281F0D0D0800008727117F614A85452F431E15613025
+ 982F15CE653BA79D7B9D50408A816694B690C97740C046186D2D180603030000
+ 00000000000000000000981E1097200D8F1C0B7425176F2C1D51251D6F291A81
+ 2B19A0341C7F331B642F227826197818080000001502002809026F1911A12217
+ 8421286C3857503556111321011422021A2501212A0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000C0D0001010000
+ 000000000000000000000000000000000000001D1A1C0000002D110B903B42C0
+ 2F23BC4E38A147347E64546B746C7065744E4E6738232F674337A04A27702F21
+ 4D323B892C3A98201C601D289A2C2B73322457271C7431227E21100C0000510E
+ 08B228138C2D19682517BB2513AC374930497D00080F00000000000000000000
+ 000000000000000000000000000000000000000000000000000000000022100C
+ A13211E45B20D87C3BCC6F35D35B24BC33059C9B8277E2DC64C5B665C7CA81E7
+ C63C65620000007D8B653578A07A5D7FAC4744A95F5CC05F45A931149C3E1FC9
+ 70398937205028247D291D130200150601B64219B15A316D31204326217A2711
+ A12F13B64D27CE9158898678926B51B6A172C88046B95222360C020000000000
+ 000000000000000000001F0503801811871A0FAA230B482B296223157E2B1B89
+ 220F6D2B23693320702B18682C1E9E1F089119125D1E30000004000000030001
+ 00000300020A011A2C0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000100000000000B07
+ 0E0503061203010100009E28136B2216412B2A82290FD84F1CEA652BC9AB74A7
+ A58A918874708B817A85738B8C785D2E26460E01953F1A915E436C2E1F7C2718
+ 782D2C373A691F2F5A83282E9F2A1B7C2B185729207C26184A11070000000A03
+ 07AF2A2ABC2510922B1E921F0E00000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000023B170B
+ B1360FC03C11520E00B43209E5692DADB3877ED9CE74D2B56BC6AE7DE1C868B3
+ A8253A37020000AC96615AD8FF5BA2CBA4514CA3726192A790C68B5A92391CB2
+ 371573261A911F081D050000000050200FC2461CC537125A251F62271A3A1D19
+ 6B281DCD3413C9482C99A485574C35648C80D36531CA4413A23411140A070000
+ 0000000000000000000000000000000269191CAC29157F22116B1D0E5B271EB0
+ 2614A22215682826642A1F4737327A5445C44620C237197934204C28276E1E0C
+ 661306A820130400000908100003060000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000009E39
+ 4F882427A5200A7723135327217F3823963E20C85A29BD8B61998378B0725FAB
+ 5E47936A5B9F6A51B7593BBF421F2F0300542416CD471B7E34226D2B1DA32917
+ 632121012848952B39BF28149329145D22188E2C17A62614390A050000000904
+ 074A19258F1D18A83038BD281371283800030800000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000140E0F553328
+ 4A1D0F4F1B0A2405008F320FB8996890D5BD72D2CC5B9C9066BFBB82DED44C67
+ 5B000000592E1575A6A84AA3E78CB9B98D816E80867EA0A287B1734EA63A1F8C
+ 220DAD250F69140B00000015151C7E371EB0431CAA2F15622215892A13581D11
+ 6A2315952610D94D27AC5E5C371E1B918052A2986FB140157A291049342E0200
+ 00000000000000000000000000050A15792126B4250F8F1D0E3209038826148F
+ 24139C211F86282B91271152251D8427119E3922BD361AA33C305E383753312A
+ 7E2B1C942711B1251B8D3244521E2B10152800131F02283B0010150000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000002253305304A0023361A233E4F1F2E5F130CA323
+ 109F2A168E2816732D207F3824A15A37CE5C288A5E49645D73A66662C6654CBF
+ 6754C352389C3826B43B1C581B0B35110B7C3A2893341B8C2B19722515B32E1E
+ 383755304077A12E3693271A8322115F271FA22511A626193F0F120000000000
+ 00000000261A2E383D70B32D31823A5417386000030500000000000000000000
+ 00000000000000000000000000000000000000000000003F0B0000000303090D
+ 000003942B0AED6428E7924FABB7929AE0C14A827865B8B47FD0B976C0B6887B
+ 4E002B400F4C633372AA917A89BC755DAB5C4A952F2CA98770CD8154EE491AA1
+ 23098A271C3D0C0D2409014426237C361DA53524962C1A79211384291B4C1F18
+ 6E1E0F9D2C14D74A20CE573765444F89442FBE8F57C163328531153F2B273D13
+ 101B0500000000000000000000000B16662A429F374A1F0401080000831B0D92
+ 220EA9231495304197313386281B831F0D751F129325149C2C2468394B483C51
+ 52302E692218A42711AF27159D2D3754406F3443711D48750328400238450000
+ 0000000002244D00060D00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000002C453E4E842A4980313D72982D38C227148A28
+ 176B2D1F663D32A43F1BD54713A54E227B50385A6E76A46F58B65D439F50519B
+ 3A3B822B1967342C59332D1F08077F29186E3525832B1EAD28115C373C373A5D
+ 7D3958A12D32AC281490221190200F8E2711B9251B6A140A0000010000000000
+ 00000000000000023357424A863A3E6B27539000030800000000000000000000
+ 00000000000000000000000000000000000000000000005C272134212142261E
+ A33410E47533C6A16D99BEA08AD1C36193876C9A956CD0E791C8AE7F7C582253
+ 5B075084375F8773607EB6786CA56E6877788DAC3E36B16D56A98B7FC49E78FD
+ 6C2E68210E000000320F0946272785331C652C226A251C9D200F8A23135F2218
+ 652C22983319BC4530AB48448664700C4278CB531FAF6B40BA4C1C83371D5830
+ 2A6C281C2E0A03000000010000041221101E370B081000000000000060181DB3
+ 2316962010150F1D641A22B125138E2917631D15A62613A7220E97241E922B24
+ 882612852B197221147B1F129B2717AA2719902C394E3A6319437609517D0063
+ 6D017E92038DC1000F1700000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000001081602182E00020C
+ 000810015A6102111D0A263F0A0F1862304BC02A20BF291DA3302F8D2A268B2F
+ 1DB83E1C9746282B64780C626F4355578A6857B04A2163465C6C36479D2A2297
+ 2710622A1D6D2C205C170E82160B993921643D31982B25A734266D3F541F4C85
+ 604067813147892023771D1686281FB3240C7B2E49311C300000000000000000
+ 00000000000000000000032E48000507093E6205527300000000000000000000
+ 0000000000000000000000000000AF280D772C22422B2A653424B9451DAF3B15
+ C14317DD5A25CAAB77BCAE7A715C35729E8384DADC73B8CDCC9B5D1A77760064
+ 8D1B587D53A2AC3D779A6B748F7B97917D868994A497504968A66658DB9758ED
+ 8E4BDA4A16793421792615682C1E50271B5C3126882417AA1E1296261E7A2111
+ 6B14082C160FBA370B83472AB785565115006E503CA36546AE3C128A2F11492B
+ 2243140E1604000000000000000000000000000000000000000000000002084F
+ 28459F2C36451C2C352745A52927AC271B7A23196F1C15842B31862F41613457
+ 78344AA9281BA627169525187D1C17672B3E75313C663952334772154F7E1357
+ 840A689202282F000908000B1300040A00000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000641A106A9FF0362A2
+ 0287B30272871253853A487D763E61952C31A022139427158B321C6E33247333
+ 22772B174B160C684A35506E7A57586B51435D583F5C8C3338A8282191231581
+ 3A289D29158C200F21141FA5291DB14A28802817A12F2B8B2A386B374E00243A
+ 06284600162E4E1D269A281B942B2CAB22175F396100162B0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 01010000000000000000000000000D0301722E247A3B28B53F16DF5D26E17B3F
+ E09F5EB4C594859B84354D47648D80A2B79681C2D791B9BAC8612D180000002A
+ 2C2C4C497AE2CB2C688B9C927E89A390A4835FB7AC8276B1A552322F7A1C0080
+ 2004652614882B1C7024186C3020341E1E712A19802A28712130A5261D8A200C
+ A41F12622D23662D1EA14823DB6C32731D05785C388F7A5B823C229335173E24
+ 1D120A0B04000000000000000000000000000000000000000000000000000000
+ 172D4E4274413760052B52602B45813449AE220E6C1B177A2622922A273C3E6C
+ 1C4272223C5E7A344FA62928962C2A97221F5D293485272E7A324859385B2F3E
+ 6D12426D085679057F950389BC065DB4031640000000042C5F00000000000000
+ 000000000000000000000000000000000000000000000002153D05A1C610729B
+ 056E9107668C0A48752350855240668C33429A3032B33725BD3820862311381A
+ 16812E1D6A392C853E2A673A355041506B3B5287314495231B92241C9E2815BB
+ 45279B1F1D2C0905351C18A43B25AE2E1A8A2614B9291E403864293157000000
+ 0000000B1C35B927219327208331466C2B4527407103243E0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0101000000000000000000000000050100300D07221518653121AB4520D24F1D
+ BA5428A150236C41239C714698C3A4A9B4879DB3AD9CB0A5DF5E27120000271B
+ 0E7FAF9B72D7D040939396CCADA0AE8FE56220C59460A2C19A9C592903000000
+ 00000000027E1E117F2212732B1A481D1775291A852A2B3F2D53AE2216901F10
+ 98221D552724472825AD4119C45C2C60240F531A05C3744194422455241E5330
+ 2855262121070200000000000000000000000000000000000000000000000000
+ 0000081B3315386000131E16345D633B61B5251C4227427A252EAF2010882C37
+ 37406B02436F0F53844E4B6D5745689B2B304E385A5B242F2933525A3A4C4546
+ 65125A86017391038EA70168970683EE0A79F90558A20C88FC00000000000000
+ 000000000000000000000000000000000001061701041A000901001F251C5987
+ 4B477359446B723E589636409D2B207A2C22583C445A2F2D591C185A1E169336
+ 1AB93E1D6D3628AE281688230D911F07812A3192201673303CA4271FB33426C2
+ 3B38061C3B140400762C17713F48B02311A02617BA2A1E4B4678003353000000
+ 00070C3A3B6BA4272572354B4041731E3A6A0001020004060000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000160B0B0000000A0000
+ 7A29058A8D6C93967DBDAA7BB2A06FD29056B19F886DAFA83237250000000D0E
+ 0B6EA09182E1CC61B19E75E1DAB2A37DDF4710D6531AB5B17FDD7A4042130200
+ 0000350B0FAE201185241650272173200D84281394281F4F3A68AC22198E1E15
+ 982525492F4C5F3528A7461FA75D3A4936303C0A00CB4D1BC6511E692E1E6325
+ 1E5A231A86210E0B010000000000000000000000000000000000000000000000
+ 0000000000000D1400010200395C64426D8C2F3F282F54000205693A61892A35
+ 702C40364376134E8009628D095382513E695E3B5C7F3138453759240D148A38
+ 4D574663274D77096EA5037D9B0493BE04A0D706ABFF0957D400000000000000
+ 000000000001010200081300060B0EB0FF079CFD069AC00D739C224A7E4B3658
+ 58334E69324B9D2927A42F21A42B1BA02717821A06581008A4251265352CA332
+ 2A932913A92812A92A206B394620457C8D2F3F653B547F334C73374D5F3F4C40
+ 35440C111AB0250F5E343570363D9E2D37962A27862E3D6F4570073F64001217
+ 06406849406B752B41383E6B064778031E300000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000002031F0500D64714
+ C79E66929274D37443C6864FCE875691B69AA0755B72F0DE23403D0000002419
+ 0EB6BC8C85D2BC5C968C89E4CE9AA88D933916C63206D39257D56E3586250801
+ 060962365EA82112852915871D074B25209E251289292662385D5D273C8A2224
+ 992B2B742C2075301C832B107A533DC09059000000843217A4401B9A3B176728
+ 1E6618098F1E0953100A00000100000000000000000000000000000000000000
+ 000000000000000000181C08476B203E6F4C3E6B10385F00000009335B233E71
+ 4C3B6044355A042E49000200003342135D932E4070354772663A5F1247760021
+ 3826416E2C406D233E69154E750E5A7D05738D067ADC000000010D2400000300
+ 0000073C70105AA70438820E85FF078DFB0487B30B739511668D18618B2E507B
+ 4F42697239517141538C3D4B73324B5D1618481E2A9F2F2D982E188A2C1BAB2C
+ 2BA42517A9312F266083204576463D673146731348828032424C3E5268302933
+ 0D022C131EB02615792817A22A18434377A2303A34273F002947073550012B37
+ 093B634B3D6641375E1E4A7B0434500001010000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000001020000000000000000014A281DB43710D0713B
+ BF965FBB6F3AC94919CB7B42C9794C7CAE9B70B0A262B0A20913140300008240
+ 1BAFBB8E7ACDC25C816E88D6C6C5AB777441248D270BE76E31C25B2BAF3D1220
+ 28439721219E210C9326145D1C1476211191251887303D1D3562000710812D40
+ 81323C41303A4D2A2078331E81452DD16F381500002D1A177F4C358D34176934
+ 24722A1D65180A59100838111904060E00010100000000000000000000000000
+ 0000000000000000000000000000154D80164E80001620000000000000052941
+ 124B7B1C47771B4676073A57003944043546094E790B618C324974264777014E
+ 65000B150551711360860865850B67810868900385980597E90A8CFF0851A704
+ 2D570CA3FF0CA4FF096EC10769DC0894FF0485C9039BE7008AC0147299434B72
+ 554E614943505C37410031553D1B2757190D624054B13528A92B18823A4A9A31
+ 455D5C7638668B1651821D426D135780005B865A3C5C9E2A1A5C3C3EA3260E07
+ 00005B3154B326168F2714B62B230F487D713F6526375900000000000000232B
+ 0B567F314273072A46155589021A260000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000008010039110B262021782A15D55D26CB6831
+ B85429892C10CA4717AC764EAA8164648D7872DFD580C9B72C3B33000000C053
+ 20A8AA7EA7C299639D8E8FBAA4B7BD8FC66633963114BF3E11BC461890391B0E
+ 161B7A212BA52014872620581B0FA0200F9F2611982A361F3969000000393D6C
+ 393968253857562D2368261B96371AD254213F160A190F0F7360517E3B234B2E
+ 25622C20752C209D2914B12414682230080A1500000000000000000000000000
+ 00000000000000000000000005020A659205475D001A20000000000000000A0E
+ 0215200455720B547D0B5279026072002634026E85038099175A83244474026C
+ 84001E21000807026B83028EB50490C80495C6068FE40793E4078DF30C90FF0F
+ 96FF0CA3FF0698DF08A6FF029CDA0688AD0385BA1462A5354E82823748863C3B
+ 8B3F34BD29151C0100311620A42819603938773C4DAC271EAA2C2E333F6E5349
+ 790784A801869E044759076E90007294274C7AA12F368D2412982917A0241E05
+ 0000443B6AA32D2C982718BE27200758932C46791A4673000307001010037F98
+ 124D7B104978000401046A8302414E0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000431C17703020AE401AA5481CBC461B
+ 5B2F2281250BAD4319A5B9927D998351676387E3CD557E760000000000001F12
+ 08E2934CA4AA856BB8BF81A98CCDBB82AD724A63372A34211B812A0D95381742
+ 323D842A40802E3C8524147B1A09722524A22412A4241F65437402365C0F3259
+ 2D375E7029205F281E83230E8F381AB23E162A1B1735120496613E813E286032
+ 256021135F1F14A1260EA8211650182200000100000000000000000000000000
+ 000000000000000000000000000001676F000000000202000000000000000000
+ 000000000000028A9E046F85028996004D5C001014018BB309749E1A537D047B
+ 9901526B00000000080900121F0765D10457AB0A72FF0D83FF0D93FF0853BF07
+ 48A60860E90491DB0969861A5E9337597632426F5D3B546238527A2E3F9A313D
+ 782B421F10211B477B903648A4281689373B643D65932F386B3F6309466A0362
+ BB0070B402639800343E028BB3394F81952F3BA22211A1271D9E292C57213500
+ 060C33497B9F2B319527228B394C0A538207476809739700101100000002131B
+ 0761870448610000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000007A200D4B2C2B833D2573371DB7431B682A1B
+ 27262990361CCD965D99CDB264B4AF75C8C185C4AF766B48000000000000AC2B
+ 07D95C218FADB497B8AD5A786BABA887E6632BB3330E000000170E0E69322035
+ 384D4A2A3F8A2B30A5230D8319146F2113812F3C9F27292F2541000000013353
+ 4E38489223109B220B7A2E2272321C86391C272026360A00C1491BBB3E174824
+ 236F2C1D53231B0D020100000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000384D0000000032430476B00000090787FE028EAF076282029E
+ C602436B000000000000000000000000000000000000000000095DE9021B4500
+ 0000057EB907688D106D9D1551700D527935456552445C4A496C3E4A7A153B65
+ 002F44003A55464572A12F309E2D2D364E744942685E324A2D50910A7ABC012C
+ 59012E440668860B7198284A7E713A56722F4288231F8B3241553C63000E1C00
+ 20322642747338507330458C3341264F86026785026F7C000908000204025C6D
+ 02879D0009090000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000002A0803881D0C772516632D21782F1858271A7B34203B1E1B
+ 511A119C4523C2BB8694BE9D619C8F91C8AA96B798A16C3B160000000000751F
+ 06CF6B3E95B6BBB9B29256513AC2B47FD0945CC146175B322A2B100D39232539
+ 313E65385E9D21179B251A34213B9C1D0B892A2769385938457D0016250D080E
+ 772D359F1F0F982311692C216F3E2B63362B3414131F0A049F3E19C235116326
+ 1988221167271C9B26112D070609020100000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000108150654B4010F29037C9E05A0
+ E8064C9F00000000000000000000000000000000000000000000000000000000
+ 0000068EC10B7FD1147DBB10738F26689B3F596C2D5E7505729600334712262C
+ 4C302C2B52716F42568E323D524C7106648B3366D50F70CB0A78CF07A4FE049C
+ F7029EC6056F942C4A774C4167592F44662D408533433C4171102A48000C1200
+ 00000C4F854E40655E344F83334534507F007897038CC5000B1600070A01465C
+ 0028300002030000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000280703821F0D592B25572D282316124422205B322C722718
+ 9F2A08F26B2A9FB3937F9A7D6D9C8CA1B498C59E5F672E0F110300091216A830
+ 09C58660A1ADA4BC8D6876967D9C4D21D8945CE26C33A53512192A350B3D664D
+ 436A722B3E87262A752C364D202386232AAF1F0B7834471F467C033657000A11
+ 581F2EA41E0F8C29166A29196B3C2B744B3B530D01090B0C783620A03313682E
+ 209B201294231184230FAC211429070600000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000884DF0585
+ E2021B3500000000000000000000000000000000000000000000000000000000
+ 00000C96FF0599F2008EBC217EB76067855B656B2090C1001A22000000733246
+ 7C3F3A3B5266773952433D671D6D9A056080106CAE08A8FF059CE00681A40D6B
+ 92145C8936517D6C455F462C3D65334A633851454473063E6700000000000000
+ 000005648231487B6D374C4032513D4B7D1A6894048BC3000202000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000004D10057D241281261458180B0000005D1506762819A03712
+ DB692FB3AA7EA0B48D9E7F4D8DB495C3B07CCD4C153D0C020000000000006589
+ 7A91BDA6BE8865C1A16DA2986C7551349A9A7ECA4D1F9A351464362C39222300
+ 17286F2B436D33505C334497200D0909138E2F3E932423613B61034F7F17557B
+ 8F353DB52612622A214A241E793725B05D3380140401070A512C25662F1B712D
+ 1C6F2019A621149D210CAF241457294500102100000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000C75FE0B74
+ F100000000000000000000000000000000000000000000000000000000000000
+ 0000099DFC0E72CC2072E3605CC18740625D131B00092C02446B3C497C953744
+ 77525633577E2D4470434B70077AA3028BA70493D00B5CDE0788F70698CD096F
+ 8E12588118406D012840314572523F6122457517558A00566100000000000000
+ 141C068BAD12497A3B4D76513E68004B6D067C9F05A4DE0B9EFF000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000004F100BAC2212B32510400B030B0200080000422325A13416D14B1B
+ D37540C6A476883A1D86A997B59E6FDA9C5A971F0200000000000000000078D9
+ CE8DA084998469CA7B47CC8B539B3910866843D7A266AA401F5E322B78241283
+ 312F833442293D68812723AA251D0008122A3C6C623558662E482D457A664363
+ AA2A1D95220E6C1E0F7F27159A2F16CE451B5F1D0920040060241A702D1D402C
+ 286F2E22A12A2665181C841B178B2D3A1A142400000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000042B
+ 7000000000000000000000000000000000000000000000000000000000000000
+ 0000146D9D3845624254A5613E63393C62001E320040490A4E7978395D635486
+ 1A729E20658C3B415D1867980282B00595FF023658000000011E44033F870077
+ 7E05597540355044516B31416B0F5F8A08577B033C52003C4300000000000001
+ 273A00545A045D78106993344A7D034E6B002E3C044794000003000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000100000000000000000000000000000000000000000000000000
+ 0000000000410D0C1B0504320808010000A62D19712C1F562C2588381EB15E32
+ C099675C725E917967A3A68AD4763ECB5B22AC37111309050000005F7E6F7BD7
+ CA6C94827A8371D05F2EC282509352345B230FD05B26DF672DB8471D793C2D5D
+ 373A453B583A3A5E922220902A37000F21000B121640703A416B303D6B123E67
+ 61212F7E150870261A8E26159D2F19B939144221161503005F1C0E6C291C533F
+ 38692517852D26981F162A1B3231284A18284800010200000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000013577931486B36436914619000060D00212406769E304F78633550494A72
+ 0788C21275A51B4E720783A1099DE10A76FF000000000000021B40003C50056C
+ 832242742A5F8622597D12537D027D9503748F00040600000000000000000000
+ 000000080E038FB9028AA71D5382087495002635000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000152445000000370B0758110445150E552B237E3823AA431ED16832E18449
+ B067356F1E00B7A194A08975D54B13B0320A17050107030215020086907275CC
+ C463998E749C8EC76736B14A22A4836276684A360F01973D1E9341217A423356
+ 3B3F483A45843741A82625683557001F3A00000003273C08466F0F5484065080
+ 2F51649227149E271B9922148C2D208336233A2321000000540E048C3C297C45
+ 2F4E2017892612A9250F92242521203A00142700040500000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000256189176385057A9402819A000000037AB40483A6444C7130416B0E78BA
+ 05A4FF0E6795037FA10692FF08B6FF043773000000000000025A980494BB1352
+ 761358860486AF0A587B077B9D0281B400203000000000000000000000000000
+ 0000000000013863049BDE09688A0B89B2005B7F000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 162EBE36418C2023A41C1098250E5D2E28612F2688381EA84D25BB6E478D280C
+ 48271690664AB1A398A96F5B9E2905712C16000000000000683D1B8EAF9879C8
+ B96EA7977F8574BF4D1FA14A23A0542FBB865498330D130D15451C1A513D416E
+ 372E853633973134782D41433E6F00263C000000000102000507003540206887
+ 5E51616E56539D232B92251D5D302576311F53261E20060065110AB74320983D
+ 22611F17682317952719AB26255B365F1E40760A416900000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000293C7049EE9034A880000000D8EFF0799E918688F1046702D688B0694E6
+ 0998F30699CF0477C70000090B63CA0C7CFF00040C0D9BFF069CF4086D920673
+ 950598EC0491CA0172850387C7045E9E00000000000000000000000000000000
+ 0000000000042562099EFF028BBE0599CF066CBC000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000001162416497C353F714E30520E
+ 0606C2260FA72B14A22C18972713852C1B872F19A14A28A085624F5747501904
+ B89160A68B5FA68E81AF725157312511191C000000000000592F13CBA46480C4
+ B26E76688A826CA76034A331107B3520CA6330DE4F1C321D17000E132D433B09
+ 3C541645784B33573A355B223E6A052C46000000000000000000000F183A4B74
+ 8F2530A329334C365A892A1C5C281D5B2F2468190A000004571615B93615B72F
+ 137D24146E1C0C6C1F109F240FB82516982D3B4037650F4977064464000F1200
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000088DFF054EA10218390000000A87FF0390C6206D9F1858780A8CCE0A98FF
+ 0892F309A8FF08469F000000000000000000073F7F0993FF0685BF0576970698
+ DE0786FA0794FA022D5201031504367200000000000000000000000000000000
+ 0000000000031B3C085DB5020D3208ACFF0A8FFC032047000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000001C2F558B2A3ACA2919BC
+ 2B136F2417752D1E693325743726953D1DC54D1DD15825904018220200CB5322
+ BB6F409C6D49A88869917B5E562C250000010000000A0000A6380FD09C6480B8
+ A68F6047A09977C56C37682919592A22A73E1ACA511E73250F142D3402798D05
+ 5E861E426F2F33582C3B670D48740003040000000000000000000E4069424172
+ 29213B423A69AF29197E29176A281962281D9A1E0A0000001F17129A2F1AA730
+ 1D9326148825177A1B0D79170F8B272E7A344B473D6813467602152000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000042354000000000000010D290C90FF0896E60B71A31C73A30897D10A89FF
+ 0A80FD10AFFF0000000000000622420953B60F96FF0797F3057DCF0495DD0B8E
+ FF0D82FF0968E900020D00000000000000000000000000000000000000000000
+ 0000000000000000000000000000074F9B0D8FFF031A42000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000206403A669C303FBA
+ 2617902A166F2C1E6A2C206933247735237F3B24511A0C0500037A371ED15E29
+ B5431A6D7C6E9D7D5C6CA89A6D423A410F03000000421104D65A21B6A36EA4B4
+ 8B789278C4AE7EC9491A3D2629592C248A331C9F36117C4C3E2564710A69860B
+ 5281113B5E27375C223E680B54800030360000000000000000000A40670F3B64
+ 1D2F5674324C9C2510742B1D6F33259926115C12091504013B1E196D34247C33
+ 349B231694221774262072160E3917250B152704142300131E00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000033FA10E96FF0E95DA0A85BC116EC408A5FD0C86FF
+ 0E8BFF0F9BFF0000000000000947A11193FF0A8FFF098DFF0B81FF0899FF0F90
+ F402215400050D00000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000004326F02204E000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000100000100000000000000010209111E101C62
+ 1518B22312BF2A11852513802B1B3915110000014F220C71614E9D6B4CAE481E
+ 904D326B7E766B75646ECCC02332300A00000000000800009C451AE768277DAA
+ 9C908F66C7A66FED7233832E1A54201A6B291D7439248D3219514A4C1D555B00
+ 4A540A29481B44700D4671043E5402525B00000000000000525B00344C213A65
+ 873042B5281999240E7825169D462BBB27163A0A0B0000003418165A2D196A3A
+ 5391251C8B262C9927229D2210521D2600020500000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000001842771999FF0A9FFF0B93FF0E6ECF0588BF0BA8FF118BEB
+ 176CDE010000000000000000052E670C7FFB0E92FF0745920000000E87EC095A
+ EA00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000410E100000000000000C00001D0F0EAA3812CB663585634A9335167C3017
+ 875F4873A0925E605D8FCDB8443F2D000000000000270D05A82D0AD4642CA5A7
+ 7FA5764AB88F67D9672CA21F06891E096B241983301E372A2A733322A01C0764
+ 1F1501527C0D4E73046D8A00222600000001627A014D58104F7B295289484472
+ 903545762725841D148D291CC73C1896344100040F2C06007D210F5C2F264233
+ 3E7F241B72304C5B365AA51E0D932D38241D3300000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000D24420944890C93FF0B9BFF0785C80A8EFF08A3FF1AA2FF
+ 2950860300000000000E29491783FD1190FF053890011636000000053D8E0743
+ 8E00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000280904361F2085381FBF461AAB411E6F30216C321E8C4025
+ 998467847C6C848A7598CAAA6A5739050000000000130E0C893116D4652CC387
+ 53A35831C49F66BC52267B2F1B5A191475190A6A312559261D7E2E1C971E0A1C
+ 464903557A09537603798A00272B00000001536208739A1E4E8363416A982F3A
+ 9921196A1C16A72511982C24AF341F74313900132933070089211168281B5F22
+ 1489291A5E334C103D728D2B3C79293639406D04243D00000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000007244E0FA0FF0D9AFE09A1FF053E8D15ABFF0FA5FF
+ 387DCA09080C0000000B1A2E0E3260072B580000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00004B0E08601106601F147436267F3519903B1C6E28196F2E1F57281C853721
+ 9F8C6D8F7B6687B9A2BAA372381D0E0000000B0403532A22A83816C75A25B87E
+ 53816647B3592BDB7138893A20742A26AB2916812C1B5C190E6D2D21AD210C6A
+ 4A48006A860461780285A100090D000000000A0A00242C04324D0B182B42263C
+ 792221772E39A02519793442733A3A482B260000002806049E1F0E70281B6A1E
+ 0E8F2515782F380630504A3D6B742838453A5F0E457400000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000002C6BBD1887FF139AFF0CA5FF08489007182A3996FF
+ 67AFFF10151F0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00005210089226155C2F27612D1F693A276D27208C2312582F28892F15AB4F2B
+ BD6242726350A2CBA3C4A26EA83D11050000020001130B0D6C200AAF3810BE76
+ 448E6B4F76483AC0663CAE421A762E1EA22814C629100B01008B29159F240D9E
+ 363900798F006D79049CDE021C350000000000000000000000000A26457E2D3D
+ 952A2779344B8627324B3A554F36385F22150000003D131AA7251B902611421B
+ 16922510A3241F3540662145793338633B3B6610457000161F00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000003C537F348FF80A9EFF0E9AFF1363C0000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000001020400040A87
+ 1C1BB92711822916662618782B18632C28A8210D7F2415682419A12D08D55F2E
+ C2633E81967EB7A177C95D2553130000000000000004090B612D1E512A20D867
+ 3795656494614097805B9236197933289F2E31330807000000A01F0C9A2B277A
+ 51673F628900344E000000000000000000000000000504053E654E4372833042
+ 38416C50375F8232393B3C52542A2398240D000004351C3190201DA320127234
+ 26821E15A22313703146004571001E3314385F15406E075E8300353B00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000809105771B03BA2FF0E90FE1998FF41659D000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000111324743451A9
+ 241B9226135D271F5A261C722B1E9B231A9C200F8121117F2415B43910D07441
+ A46145B37D55BF9C68D03B0A3710040000000000001A0C0C4D282351251DC271
+ 578A6363641A03C05828BB4C22632E277C2A1B9F200A1A070E371724A72015A7
+ 2B2B0078C900000000000000000000000000141504607F1F4C7C51365A294775
+ 12497B4C3A6192271643343D71281C8A1D0B0000000E0A1666273F9E2C259240
+ 296116139727226C4059084574000C0E0228370D4B7505385000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000202947698ADC163B6E2288F93F99FF233656000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000170A12962624AF
+ 230D8428176723177D29199F2811A4211D7F1A118D2A1A8D311DC25625D38C51
+ 7C6441AC7F59CC8349B53D161C0A050000000000002C0B04571C165E392B9C81
+ 7092826D3E2D217B2A13BE4B1D8E402479301F9F2813B92B22551C2930223C88
+ 3D6827458A00000000000000000002537A0267760A5F8623406C274674044F75
+ 1E4A6D9C2A27962611682315942715A8231D000000030E1B34325FAC3929A038
+ 26661C1FA5200F8A2B343F406D114F7A01212D02596C055F7900272900000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000202050A0C1408080B4E93F567A8FF0D0D10000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000020C1657355B932934A3
+ 261B71261D751D0C9A2716B5210A441C2FA8201B782929993C1CD2602D994E33
+ 8C6740AE825AD55D25A93914502C280303040000003609018727167E5C457E86
+ 75937F5FB566391207045C3C3588573F6E2C1C672C23901B090000000000030A
+ 0810194072000000000000000000024162067C980B59840757760B588700668C
+ 484069A32B286820138B210FA8210D541C2900000002172A4C3D69AD3A28972E
+ 2A4D19164F1E2D892E3A6D314E2D3F6B000E19000000002427013F4300000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000B0E187296F36180CC1D356A000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000004060318280F31563F3C6B932C328B
+ 240F931D0CA12211AE2A1F7F324F1313227330365F32287E2F19A67B52825E3B
+ A14B20CF733B8C2B0F4F17060000000000000200006113077C382B658F87836C
+ 557D604FCE45177B2F16531D11AB623D8B3B25772F218E2917BF281A461E2C00
+ 060D00000000010000000004337E039ED4038FAB003E41000200058BAE503C67
+ A5292A9C2010731E1AA5271B852D400402040003050C2F4F413B467E343B5B34
+ 499926205415126B2720503D631F4578125082046F88000403000B1400040900
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000405094974D41F386D000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000042A3F144D804A41709C282CA92110AA
+ 29233B0D0E94282FC025164D4371871B05642A21692E20BF491DBE623080250A
+ AF582FD55421452C273D201A0100000000000C000084220E90846A73AFA36A71
+ 65875642AE3D1583391F1B0C0CB74115BB411A8F2E1CB12513B7281F87365119
+ 3F730B1D2C052029021635032B6A0458A0025E89037C93075F8A21578D6E3753
+ 812D346B1816862B26A12526513B63000710010000410D014E2D2F4D3C544B35
+ 4C9E23233426426F1E218D2A2F503C5D134E790661820492AD0494D101294800
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000010D2205122A000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000030400244069304F97272B7C324A34
+ 162400000040233A87354E982B267D2C1D703322964123B34C21762910554631
+ A3623FBA4A1D412C28331615020000000000000000231E0E9BAD86887764757C
+ 6F9D5E417F351D843C243F1C1B25140E8A3A237D38227E2E23A32C24A32D2B7D
+ 3A545A62BA082C64055CA4056BB60279B0045E71125481334475673957852C3A
+ 532B3F9E221884303C5F2D4B28365B000B13050000851F0D43333B403844443E
+ 60792A395037520D0E19513B61653250423B63224171085A7D01677C013D5600
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000010E1716386358386333457B18305200
+ 000000000000172B394A815A2C305D2E217534217F5D4655413C2A0E04BD7240
+ 8F4B2C99331269322A461207000000000000130300CC622AA9C1999A604C9B90
+ 73A8482F6F27196D57477336293B07013217166E312655342B792B19912715BD
+ 1F043A71F00098F00084AC0693C3068AB1037FA719588657405B3B3B5B402839
+ 6A2D398A292F3F406F1A3662000F1900000086201F93210C46303058302C513D
+ 5956305054384E851B120011231544712345772E3D681351810A5275047D9905
+ 8FDF0555C4000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000011D290955811A45780B477600172400000000
+ 060C121526AD2A2EA228157D2F257F28198C3923C75F30290C02945453B84A20
+ 752F20602B1E4E2722882717370B030000000000007E3E1DC2B07CB05841B287
+ 68C75D2D67281E69291AB55A349D3915551709631708AC2912962B19AA2A149F
+ 27169B43656267B82B72AC1068991A5E873C406F593D5D79252E0F1E397F3140
+ 5F3A535D325212477B032D450001020000005512119D231158322A414C5A473D
+ 6229365F393E647C3134492E51000C1302374E036687035D720293AA0393BE03
+ 72AB063A97000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000002293506436003253B042D410000001C365C54
+ 436D5E34539E2321B024129828187C3421BC40187A2509301D1B89595D954127
+ 68281B53302C2002005A11051C0502000000260E06D44916BCA071975D4BC69B
+ 71CB421E872B1760281D992E19BE401C5B2D231F0B07811B17811B12A12F37A4
+ 2C305F3C663C45741E6FAC024F67036A8206304E1E385B0A3555503C63583857
+ 2D416C243A650D5281002D39000000000E1C9C28309720104647464F48547330
+ 3B1B3F6D1446755E344F4D365B052743000000004246000F0C01405504509C00
+ 0006000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000001619000E0F0000000000000000000F1C35A7
+ 2E36B62B1CA32A177B291C62362A7C38205B2E22230A05452921827A777D4D41
+ 7A24156A271D410C0000000000000000000073311BCF5924C89D688C5336AD8F
+ 78C733147D241579281A8926149E32207A36287227193C0E0B0000041B101D27
+ 365E12111F00152402121D002E360356732F26405942553D44653C3A60105681
+ 0E4D7C031A2D075C76003C45000000243461A0231F8C231765352E893129712E
+ 42094775035475353F683F355C164571000F1900000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000010C2F00000000000003273B07335329325B6D273B9C
+ 211176231274231471312173554668271B34110D521605876B52827B67775E4E
+ 51100987210C7E180D000000000000000000230C05D0410FB78156845F35B95F
+ 55CA3D1982271764261EB22311862A1D622F245D2C25A3220C420B0700000000
+ 000000000000202C017C9D07628833396437517923577F1B3F68214976026180
+ 066283000A0C0009090007070000001E2B4F8D2A3883241E821C12AB1D0C4D40
+ 67005076056A860D537E3D3459233F67055B79000A0C00000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000004B4E3007685026F88064E7D37467B8B3449AE2923A3
+ 2A24AA2719A12A14C34520B932152D0600331710C14217A5462C6486787D6153
+ 922A18B1210F0800020000000000000000005530289C3916D6783A573F43A45B
+ 5DC43C21772E238A220FA42A27962728702D25732A179E2714911B0C15000008
+ 66F9099EFF049FEB0F708C154A70105D8B007EA30B67880C4469047393007786
+ 00636800080700000000000000070A11386355395AA11D0F6D232787282D6E36
+ 5108648901677304668923396117456F055C7C00121600000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000014240C77A021598D10517D1C456E143D6E4A406C6B3A5D8D
+ 2F398F2C229D37299C381B5410082E130E753424B1301189624F7C7160766D5F
+ A8321D7B1F260000000000000000000F00004B2C2B953C1DD0612E323345A969
+ 54A2451F622A24A12419A72418833046982B20812310852B1B973A55495CBA08
+ 81FF0497D806738E0967830780A7048BD70389AC05627C03728C038CAE025987
+ 000000000000000000000A0D042D441D4172812A39662736741F1F892B333344
+ 720176990075850465811F446B0D42640A668101798D01193400000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000042B6B054B9F0463
+ A70054650048540028390022353A48796C40607B3C59863746953334972B207F
+ 2A195F302C623431231713440D0468291D6C332287311EA2664E716E6290806A
+ B63B2099272F000000000001130302721E0E61342B9F36129B67467F5128C744
+ 13AC4E27572E288B2C359A25255D395E8634419B27118B1E0669529B3877F30A
+ 95EC0391CF067BB0048BBD0590F00485D50393C301465D00212406A4FF04397F
+ 00000000000000000000171F0744673038625F3049622C366924309725262046
+ 7806487502618902839B0B446C0D49670D5F7D01869B022F5E00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000021237099AFF04A2
+ C80A7AA115608C264B7D4A3354782D3D82242A702A31A6201389200D75241775
+ 291A8A2B185C190D000000731A0A6D291B512B248D2D1CC9603F796858989980
+ B66249AB313F0F315E0000000400000F0403301A17793019905135C2501E4430
+ 29A658347A321D77322EA42E312C2C525F2F4CB229144164D2576DE43F77F50C
+ 7DFB06517E069CFF098EFF0A73FF0998FF0653B900000000000001162D010D21
+ 0000000000000000000000000323361F3F6C363C62882524362F4C5A334D4E38
+ 5D0E538A0491D5057C9804667A084163067394018DA500000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000367
+ 9F03758A135885245180494873673C5779374DAD291E972C28A6291BAC2716B7
+ 2916611008000002751714B72F165A40387A2411AD3A26C36246A65E45B29872
+ B46932020300000000000000000000000000642D265A2922B0461EAB3A144220
+ 16A66C46752F1F4C2C292A437A0E3F6F463960884164614D87495EBE89395A64
+ 375B0853910C9BFF0B77F00953CE000000000209000000000000000000000000
+ 00000000000000000000101008445F024F7A443A5E6A2C42561F285F323A283D
+ 6C14406D0475A70490BD01678A03596A0574990485C1075DCD00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000000C
+ 1105A0ED0282A201738E0B4C7E303F6C503F6744447276334E7C31455B1B2157
+ 161B0000004E1C1AC63620A9482B72231284271AA83833C76F4EA34C3FB18B6A
+ D65D271101000000000000000000004B0E05882513732819934628723B2A2009
+ 03CB4B1C832E1C7C2B1F7D302D0E253A14223B524472B31F0A632B3783323C51
+ 395E0B467C0C88FF031C4B000000000000000000000000000000000000000000
+ 000000000000000000002225035C730651774C355933385A252D50782E3A2445
+ 700C5DA10788F3035AA000091B025F7C027A8D0490C80862DE01143400000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000005
+ 0B022C5900243200282E021E2E0A5B8505406508253F1315260E29470000023B
+ 0B0050241E743833AC34238A2718771E0F9B291BAE3E2FB775578B4C56B69468
+ D25B24502011000000000000000000500F06901F0D6F2B1D783D287D5B481B02
+ 007E361F86371E972A18B224123E273C00416A4D4673823045493150A4272736
+ 48750B4A78054E8B000815000000000000000000000000000000000000000000
+ 00000000000000000000282C047490174A76303459403B54132539463153433E
+ 6205668C037FA1025479000000023156048ACA037DA80A87FF084CBE00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000141800050700000000000000000169160C8C
+ 25135A2E26583B49992923A7240F61211BA62C1EA1453B9A796F524464AC8059
+ CF3D0D200903000000000000000000781C1CA729145F2C23602A20B658308728
+ 09411D19674537663528A42814A8363549517D52406B2A406F0F243E60375A60
+ 3A5D0E4F80026F82002324000000000000000000000000000000000000000000
+ 000000000000045DA30397BC076A8A183D6622416B5E3B4F2F202F0739623439
+ 61154F7B037A8D0489DC052876021A3D0775EB058AE802103200050E00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000263A6A852E42AA26147C
+ 250F4B3C528C2F389A26216D2325A222108B3039A8422B91765C654036D5753B
+ 87361B2A1D1C0000000000003A1A2EB5292388220D6E241465291FAE2F10753C
+ 29292637AA431F7A35246E271AA5200E463E580A598D0235540010170B3B6439
+ 406D363E690C5B860499BE002738000000000000000000000000000000000000
+ 00000000000000000000000001303F0E4E75075C7A4051731E162900485C4640
+ 5B19446D0E5980048E9F078DFC063893084EAA0A88FF095EE400000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000012226F3150AE26197B23137E
+ 2412A2271867344E78324687211190272983303568515FA661416E4729C3673A
+ 953A1A431F1B1B040000000000000024101E1D0400842615922412832D19674C
+ 4C4028378D2D0FBC38199627159F2D1E674D59177098001A270000000020290D
+ 5884264A770A5172013446000000000000000000000000000000000000000000
+ 00000000000000000000161604617503748F0B64843734601A3F68002F385F45
+ 5A1B617F095978038096021D3B0000000427550858D40C6EF100000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000001121C06355620457C912E3B932313842010B2
+ 24135C3851234176832D32B322116B2F317C394575525F44383BB96F3C965030
+ 8032175220171A0400000000000000000000691511AF260FA622166D33266364
+ 6A51241C38191286372A802B21963138863A4E54446C073C6600000100000000
+ 1820067C9B0B6288015967000100000000000000000000000000000000000000
+ 00000000000000000002426603819C0291B10D537B2239630F4D7600070A3B47
+ 741A6B96037CA00487A1048ACE06409B0000060107130850BF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000080C2638637C30449927257B2224A3231496
+ 3041003F6A36406B94293344355E531C0F52404C525B7217475DD04612943E22
+ 532D28290F0B00000000000000000000000084252FAF231495242783513E7184
+ 7A8232206D140566281F612E23962A1A8A34424B417300447403537804728F00
+ 04030048570393AB0293B404498E000000000000000000000000000000000000
+ 000000000000000713056CC60265970381B40B5A851F3D5F125E77000000154B
+ 79263E690C6A9C0591FD0589D20B8FFF04285600000000030900000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000145520C4E7C2E43736939556E292E8F232089313E38
+ 507D095282473B644A386161313D67281C7B2E1D8D4D380664818A3D1F9A4120
+ 5A262089220E000001000000000000000000573D6B7225379826208B6D5B8A6B
+ 52C94E30330C0B7B1506942D187D3324A32612BA291B833C5C48477C0E5F8200
+ 060500040C025C8F026A990654B4000000000000000000000000000000000000
+ 0000000000000106120852CE0678E30286A50F50701C4867306A7F064563013F
+ 520F4D751346680580A50989FF0B7AFF0B68EC0851AA01090D00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000202D002E380369840E4C78493F63922B305425347C334A3C487200
+ 64830E355A2D3C6930416B952B1F87261384371E9939163E0700835F47773520
+ 712819A5220F000000000000000000000000112B4F3F2E52AD3F368A6A599073
+ 5EB84228622B1F4B120C801B0FC13822A6311F90241B952B2E503A5B0C213B00
+ 202B001213000000000004032457000000000000000000000000000000000000
+ 000000000000000000064895068EEE0482A5074B63115F803A5F801529490022
+ 2304728A0B5B790955710688B20693EF0C9DFF0F9FFF0E80FF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000015A75048AAC0D507C303F6A54395B2D2E4D672C34593C62214F7F00
+ 1B1E06365343426D803842942C1D6F30206F433133221D7F2608A8512F5B2A20
+ 6F2B1CA929144D100F000000000000000000043154573C61B74D3F877561A46A
+ 569B3F366434336D1F0D380E137D37458A3A3898313874364E693C5A4744741E
+ 5787036E89036290000B15000000053B96000000000000000000000000000000
+ 000000021436095CBB0A96FF0496D7037A9B07567B057A971F67A4214272001B
+ 22014E690585A6076C8A067492047CB70682F40C7BFF02132D00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000004475E1C3E6C373F654D3B4F2D2E518135422D406F19548500
+ 666F0551781653797D382F75241467312598472C381C16793016A733135B2923
+ 561F13911D0E631413000000000000000000193C67833752B35D5098634AA96A
+ 5DAD3F2C503139862C1A6D1309140C0C61312E4D3F52843646264B7E0C58890D
+ 527D0276930388CF087BE00779E60D91F1000000000000000000000000000000
+ 00000001183D0E8BFF0C89FF0549A500698006709C0382AF0F6FC41F457D014B
+ 59032C5B0586E4058FE50484AF0681C00588D10A80FF0740AC00112900000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000101010000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00001C2D017A9108638606678B414B6B5B27361E3C6B60395A05609003344500
+ 1B1F057D9443516382382A9C2413972F19AF39123E140E5D302476321E8D2616
+ 9D27120B010000000000000000000003425E1345776D4850B3A377AF5842B265
+ 548F434A862617732516B8281D42192A6212027D30268F2816B12D265E476C1D
+ 779C0D68900A7A9F0997C306A7D4075BC4000000000000000000000000000000
+ 0000000000000000000000000321540381B70484C20782F80C5B820F43670266
+ 7A000B11000000074DBC0992FF088BFD0A90FF098EFF0D96FF1089FF1A6BCB06
+ 0F1C000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000003
+ 0B077FE90284A9008CAC1C4F76473C650C2431083F65354470096E9100778B00
+ 49612B668EA1262AB226209C271A88352245251A43161067382D602B21952318
+ B124106B191B0000000000000000000000000D0C0EAF390ABE865B9B4F4EA664
+ 5B813E40932820892919A62B1F42203718070A9B2117A6291FA42414982B2E72
+ 344E3D426E3B4C74135783057DA500375502375B04346106386204275D041120
+ 0000000000000000000001070751B60680D50789FD087AF409719B0C4A64047F
+ 9D0259870000030000000C79FF0748A90C74F60E8DFF0B87F90A75E51187FF29
+ 5DA2000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000955
+ BF057DE50180A40A6C98233D681C497701283604576E2044730C72980181B600
+ 395E1A3E6C83324C9D2D28662A20692F2036120F6E1607914A325E251A9A271A
+ 9E25256C273B000000000000000000000000000000923515A76D4B685269A360
+ 536546599A2E2F832415B33B2B6A3C5B00315817070B633D6491334383324379
+ 34476136554A3F5E3655781D49710B79A10894D509A5FF10B3FF1094FF0A3468
+ 0000000000000000000000060956BD0680EE0B87FF0889E9057B99074D650483
+ AD035C9100000700000002183F000000021B4107306C1387FF05265306275114
+ 2C4B000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000007419E0B7CF0079A
+ FF0493D507789A11486916517C03435A0000000082970C5F83096388187FCB3C
+ 50897C344EB32A1A8525136B3F328823115B150C832A10B136185F2118A42916
+ 772128182345000000000000000000000000542B28A63E19B064413E51709B61
+ 4E4C3F4D64405C9B1D138832318D3C405F2F302C04000027481329462F4A7D43
+ 4271205688274C7D20567F0B84AD0796DE06A7F60892FF053472010E1700040A
+ 0000000000000000000007150A5FC80A82FF0850BD0A92FF0579B2026D80087D
+ A10677F102123700000000000000000000000000000004102200000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000A5AC2047B
+ D40379930860780E5C7F00889F01424C00000001133103A0CC0284A60D527D79
+ 2E48AC230F7721199E2F18C5371C63110A251A198835299B28188C2513962311
+ A3313A3C44740000000000000000000000001006048E3217A9673B234E6D8A5B
+ 4E68413C6937506F31449126246038503A4056972A168A1A1600000000364802
+ 49660453720188A4047FA601778F0788F50C6EDF0F94FF010E16000000000000
+ 0000000000000000000326570C7EFF0C77FF010E140B8FFF048AC2054D730585
+ D00784E4095DCF00071300000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000012E
+ 50036B89067B9F0495BE035692000000000000000000087FFF029BF0245DA593
+ 22237A2D34A02925A53526892D2E00040B673C456930329F241990261F7A190B
+ 7F232A543F6D05365A0000000000000000005C251D693225AD4C252E4B567869
+ 5A564147523F5E8A2C2C4234597633484B43595D3A37A02E2556325407233000
+ 0000000000004557046FB900030A000006000000000611000205000000000000
+ 000000000000000000000000095ABF04347B0D8CFF098CF70772C20373940689
+ E6096CE1020C2300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000006327F0693
+ FA048CC10590E8056CBC073C9D000000000000002F2B0A6DC01D5EAE4658AF4D
+ 3E6775375576353F5C363912101654191778434764302695282B942C327D1E19
+ 17132505182C02131F0000000000001502029226116F31219949282D423FAF56
+ 2B5145484645646B375761272F4B3D61543E5F5F4C559727138E314122345B01
+ 354F000000000000000415000106000000000000000000000000000000000000
+ 00000000000000000000070F021E430438840D7FFF0A8CFA0473A40775D30782
+ CD0D86FF042F6B00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000010B260C7AFB058F
+ F3098DFF0A70FB000C2300000600000001283E028FA6075978103E6708548A3A
+ 42679D291E58303278291A000000AA2B208263528D3F28552D43813249852D3C
+ 131425000000000000000000020104A5210F7C2B1D5C2C209A57385018065A6B
+ 79376477623B531D4473622C4344466809497A6E3C58A321168F27276E3B5C1D
+ 4977000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000A101A194C890D73F90D8FFF078DFA0463BC0869CE077F
+ ED0B88FF085ECC00020700000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000010B1A0A6DD90C90FF085B
+ D80C7BFA010D2B0000000CB0FF05A6FC0596E600697C096488184F76664865AE
+ 28228D231199271281190C00020BA43638977A64A0553E7E3445443C695F385A
+ 091A2F000000000000000000000000000000621A0B5B2A24A53616872505425C
+ 60415C6A45485AB72A16423A663C466C01678B0C6B9675345487292D61354D24
+ 4B7D046B8A00383F000407000000000000000000000000000000000000000000
+ 000000000000000000000000094EA70E94FF0C85FF0A7BFF0668C60586D40C7F
+ FF0A70F50B7AF708326500000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000010E1E0A66DC0954C30000
+ 00053781000103000000055EB60792B4136C90205F8C4D3F676538597E2D3BA0
+ 2F219D261D8F222023050411325FB141369F705BA1624E67415F00335A28406F
+ 07304C0002020000000000000000000C0205A92710842819823018502727407E
+ 924C68704B4D50A51F09144C732441710E6989008FA61B4C816138584A345347
+ 416B1453820686AF012C39000000000000000000000000000000000000000000
+ 0000000000000302031A477F0E79F80D89FF0D81FF063C8D0761CF0783F90D80
+ FF0964D8010C2200000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000010D1B03295E0000000000
+ 00000000000000000000000000003138084465213F6F4A3656712E3F8A2F3298
+ 3C3B7134521D203B180300412E3A954543936C6195675A974854063D690A466D
+ 072C45000101000000000000000000671515B42416922716613C2B593751236F
+ B56D4F50992717BE1E04474D650E537E11557C0286AC0B6FAB404067393B605E
+ 364C1E5881046C85026586000505000000000000000000000000000000000000
+ 0000000000000A0E163462A22076D80E4990021D44010A1F0A6CE3097DFF0E7F
+ FF0C7CFF03275A00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 0603215D032264047AD201798C0F4669364168633D51433D636737537539443F
+ 446E06284A200603881F0B493239684552A96F5D916C63914F550D3F7401394C
+ 00191F0000000000000000000000000F0A169E25238A2714743624B33F220002
+ 0B653026832A1BA426284B48710077990A56730481A0069EFF1368A42B4C751A
+ 33523A46740B729F029DEA0662DB051F5E000000000000000000000000000000
+ 000000000000000000040405050A1001000000000003265B0C80FF0A77FF0E82
+ F80C6CE608326500000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000C172602060E02040A000000063B
+ 810E9AFF09ACFF068AB1115D7C185B860E658E134F804840643A465D4F353D11
+ 4568000000671A1C8D2717463B4483445295675D7F7371B160542F4C74007B9B
+ 002B3100000000000000000000030864395FBB26137923138F2613B33617140C
+ 0D8D2E197A3322A8260E983A4D2A649907799D025F8100202A0491B326577B44
+ 4A5E084B701F557908799406A1F30B9EFF084292000000000000000000000000
+ 0000000000000000000000000000000000000000000323510D7CFF0A75FF0C81
+ FF1A64C20C182500000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000003A97FF1474D5156BC00A57BF0C79
+ F70A7DF1045FA20385B5058ED5018FC10672993F4D7055545E783428751E0F04
+ 0000171C339D2C3276312672363D7E3D46935953936D6086645E38406B085D8B
+ 02485C000000010000000000081D3340253C841B159923129A261A8233294820
+ 1B681A0DB6351C932514A723127046740584C10493ED0332700595CD0877962A
+ 5C8D063E4E2B688A0B71990287A00766DF00010F000000000000000000000000
+ 0000000000000001020000000000000000000000000B305E0E7CFF0A73FF0C77
+ F91E84FF203E6601000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000D3D6D0DA4FF0CA6FF0D91FF0778
+ DF067EF10469BF0794FF057CCD0F63A151476D8E3130684F54AD241E340B0C00
+ 1E30403C689D2623931F0F9D282A344964805F617D5B64B970445D4344116885
+ 029CC90131590000000000000000000000006B2431A9271E8B2A2D6B2C217722
+ 134214107A342EA62D258A2A31783E671071D2068EFD0A64FA0367A5039CD818
+ 598D06607A1C4A800F7CBD0692DD0791FF0B6FEB01122D000000000000000000
+ 0000000000000000000000000000000000000000000B2A4F1470E00D7EFF0747
+ 96246FCA4779C10A0C1300000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000030D0E9AFF089DF00A9BF306A7
+ FF058AB30888B80577B03048725C3A5B7C273195242095313F33244000000001
+ 2E4E69365684272B8F24246347622D4C5C705A5C4E55709C6147A9350C232B30
+ 001B2700071000000000000000000000000073395B8E2F3D8E2F34722C1A9622
+ 116B170D5428206D32337338543C40703942730D81FF0210420A79FF089EFF0C
+ 6B93028AAD065D800E5C7F068FD30E91FF0C82FF0652AB000000000000000000
+ 000000000000000000000000000000000000000000101E32286FC50A7AFF134C
+ 8F0301000A0F1800000100000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 07080D0D0C1049649C011023165EB1041C31053F8B021F4F0787FF0388AE1153
+ 7924699723537334406656334840355069334A3B427129355E02192D00161B09
+ 45704E3F62882E31732F462747763C555564555F3E5168996E4D60291D2C1613
+ 0000000000000000000000000000000224393144782C38658B2F33872C1AB937
+ 235517237A18098626109F271961415F0A466F065A7C027AAC0C77FA0998EC03
+ 8DB0077EE40242760586B3057A93099BFF0B89FF1374EE0F447D050910000000
+ 0000000000000000000000000000000000000000001D25363C76C31A75E42C56
+ 8C00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000141A29
+ 5775B5507DCA2898FF1A93FF0C98FF0D9CFF099CFF0791DD0672970D649E1269
+ 840A54711548713F4259204473304B752447780A557D000000000A0A00556B1C
+ 4C72763D4B62374660334C29578A2474805E55593460726B6A5C872D165D221A
+ 370B040000000000000000000000000000000A4371413A619C2D2D862014AF37
+ 2B392532461820AF2518A12E1B942D2F6041652A46730E79A60C9DF4069CF407
+ 9AF30B76EB0000000776CD0892E40585C80A95FE0E9FFF1098FF2A6DC2000000
+ 000000000000000000000000000000000000000000111724364B6F3672C23F56
+ 7E00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000090A11
+ 465D90417DD41A8EFF0D8AFF0C8CFF0996FF0898F3088FD70A86E6117ECF1675
+ 910F648813739E1A597F12608402708A044D6800606D00000051272A4E49513E
+ 415A5C394956283E40436A1864974F48456D483B1C71847C6D587A2E1868291C
+ 851D0E0E0201000000000000000000003840064973543B5F89282C98231B7637
+ 445C2C273D141353273D953C44A02B267A2F3F523A61104D760774B30995FF0E
+ 9FFF021A410000000215290B86F70792F4088BFF096CDF052D5C08192C000000
+ 00000000000000000000000000000000000000000000000012141E4D70AB222A
+ 3E00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 04040607090E050B170B4B8D0D9DFF0C98FF0C88FF0D96FF079EFF0384C70489
+ BB0593E00290B8027D8D0397CB00495F000000000E0F411F399D2A1C49424931
+ 52695938572536592B4472226482653C385958520C89A68B666664261959271F
+ 2C0A030000000000000000000000000042492B4E83673C6281272A822E3B6738
+ 515B363C871C0D0400003C4F7D633E515F395A6F374F433A600E69B10C9DFF0D
+ 87FF000000000000000000095AD40F9DFF0C92FF0C8AFB0958C5000000000000
+ 000000000000000000000000000000000000000000000000000000536CA70000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000A0D153E8DF42676E11958AC0C87FF0B76DA0A64EA0895FF0C8C
+ FF0A78FA04569E0458B20458A8000000000304243864A627266B4645476D7734
+ 486C1A3D6926374D5E455D66444C2F7188674F5820709F4E4B68842E159B2410
+ 6B150C050000000000000000004D59067C9E0B456C0033595D293C4C3E617235
+ 49822C21AC2A1D2716270600006F342F4A455D28497A0B69911E67AA0A83B408
+ 9AEE086FF500000000000007356F0542970F84FF0E8DFF0E99FF1B5FB4040000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000006080D3141620B0808000000072C59000000000D290E8BFF0538
+ 8B010D27000000000000000000021C2713507D56385D733F665B567130628016
+ 4A7328455C142C431B5C871D708D69403D814143315DB45D3939623525972512
+ 9A2626070201000000000000000000002A2B00000001111F4A3C642249783A45
+ 6AA721149C241C593A62090708A41F0D7A40398635441366910084A80487B403
+ 8ED50B84FF0A5BD2032850134D880000001443822388FA0D7AED2E8AFE294065
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000003275E0000
+ 0000000000000000000000292D024864314570662C3A575AAA2C73AC0B618509
+ 668946465E00435C31476D3B73916957796F2E26251E32913D2474301F7E2614
+ A72B2455243600080D000000000000000000000302033A4E284574144C7E1D59
+ 7B93293296292750416E001D3047151D933740A4241B6E39562559920784C403
+ 8BD40788ED0B9CFF0BA4FF12B0FF0000000E10172B4B7B051933467ED0385383
+ 0100000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000036BA2047F9B1558844A3C632F34565D385C0D577E027F9D06
+ 7698244D8700536B186788555565357FBE287FED2922408D3310982A15792416
+ 8B1C10503966000000000000000000000000000000022834124F7C0A5B84186C
+ 927030479334325F4262003F5F000000262D4F763856853136503E6034497526
+ 65870A88B8098DBF0BA9FF021A2D0000000000000200000000000B0D11090C12
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000050D00545A0E567D31416625365A5A364B1E4C830083C50491E60D
+ 6AA60D486A194F755A58815C5F7034739486516E651B14512922832A1FB12516
+ 9F231B0B000000000000000000000000000000060A02627E067A95000F0E1166
+ 964C39616230465E3B50374960193134002131104672245180624154353E601A
+ 4870154D700579A5046AAD0B7FFF042340074DA8040C17000000000000000000
+ 0307110007130000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000423630677E00293C41064872F45642C385A1D587E0A64A80884F2078CFD08
+ 6A910666851E4D6F7230545D5B7E4778CB4F72CB493D6C6824176C291C922A2D
+ 992D3B23244000000000000000000000000000050A025D7F0287AA0081981653
+ 82463A5A54334E38476B5642488C20112B2C3D001013025B76255E7A41586D1E
+ 5E882070911175BA0888C3069DF40CA6FF0E9CFF1EA2FF1646801E212E1C1F2E
+ 496FC33864C00000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000B69
+ D80A83FD058DE7057DAC1A48701649672743621168870481D20A63E9088BE105
+ 68860286AC0D5EA577222D912B367546752479FC2170EF8E34317C301C962B2A
+ 54345921457B00000000000000000000000000000002294B013E69006C7D1068
+ 8E423C5F3739592745735B545C9036306E314B020D17002E383B70906F4E504F
+ 6A92097DAD038DD5089AFF0B91FB0B9BFF097FEE1178E63765A94D7BC74C92EE
+ 569CFD6A8DE70000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000318
+ 340681F004769314677F2163781537532061840573830891FF0C85FF0689D106
+ 7690038DE32A4E9066385B6B375188260F6D2A2A4D2C4BAB3328952B179C2318
+ 6F33500A365C0000000000000000000000000000000214330850CA0298D91361
+ 8B193E683B455F21456E265D81556987743D5F2C44700000002217277E34469F
+ 2D322B80F41B6AB80785E00895FF0EA0FF1087FD1190FA1284E62197FD14A5FF
+ 37A3FF11182A0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000001020C88
+ FF058CE2038BC91A71B70F3A620C587D0B7CB20486C60C9AFF0993FF0475B906
+ 80D00984FF0A468023406AA92A208225149D1F0C4216157731259729269B2215
+ 8B2F38414B81044E72000D0D000000000000000000031D540892FF058AAE0E6A
+ 8903547223446E087897105A7E5F395C86282E3F436F025476000100021F3B3B
+ 426B5B427D4D344E2C516E0D759B0988B20BA2FB0A9DFF0AA3FF08A2FF0E9BFF
+ 0F437F33568735507E6991E35C8BF95AADFF1D91FF0A60BA0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000C1B0C78FF0B7E
+ FF0991FF0A74BD0D61930246710E768B0887D60A9CFF0A5BB80951BF0780E708
+ 95FF0678E51D5EB773384F8A231EB436225F1C2857170F47373E7F314489292A
+ 6A293B2C3156083F5C012A3400000000000000030907479E078FE80795E80276
+ AD00343C154C740977AF008CB425599156314E573551105C8A03668300050400
+ 1B2919628E274F77204C73195576166E980E6E9B0E7DC60984F00886FC0C83F1
+ 0B90FF0D9CFF1D9AFF3194FF5794F8779EFF3981DC032C5D0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000060B141158B80D79FF0B83
+ FF0A8CD7096F830282B00C55AB167DA5068CD50D8FFF000000031E440995FF06
+ 8DF0205B975C3A587F2C38812B319439391725486F120262312E7E303A523A5D
+ 613554071C2F000000000000000000000000010D210858C60A74EB0440840116
+ 360036460A6D8D087CA10489F20C6EBE334468413A5724557F007B9E00375800
+ 00000038460383A514718F0E77B00E76941376BC057EB70A89DF0E80FE0B99F1
+ 1598FF219AFF1F97FF3796FF5586E12D3B6300071E0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000314D7B1884FE0F8FFF0C91FF068E
+ FA1275AA138BE1001D35105C950C81E9068BE80EA3FF0A55CB0862CB0C89FF0B
+ 89FF0E4F7F542F447F303E5F3B5750333C33100C7318148B220F9D2A22224472
+ 433D681647720000000100000000000000000000010002060006150000000000
+ 000134530789BC0672870796FF067DD4235572363B5C3B4A621F6C860790E300
+ 7EFF0000000244740492EF049BF30A96F70894F00B98FF0E9FFA0C9BFF0A94FF
+ 1298FF2590FF618AD76C95F17BB6FF0A10160000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000203031C5AA90A7AF80A7DFF087A
+ E80F81E8116AE80375B70779A60A93FF098BFF0A73FF0B56BE0B63C00B77FF0A
+ 80FE284C7B41426D43416C484457791D0708122670304994261D992B2A29507E
+ 104A76104F7F0034390000000000000000000000000000000000000000000000
+ 01064B9E0692F20378A10792F20A92EF087EAB164D7A235569375D745A596181
+ 34470A3459000000000000042B7D0A64EB0C8FFF0A70E00C82FF1489FD188FFF
+ 195EBC355E974A5E910D070900338D000F270000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000051C35075BC70A89FF0B8D
+ FF0C81EA044151056BC50585B10A92F10E94FF0A71FD0100001669CC0789EF0D
+ 6585184F790662896B384A7139359E20130F090D2C2D51A4373278293543496E
+ 005473085E800169770000000000000000000000000000000000000000000000
+ 00042A6D0A88FF0691DE0953DE0972E6068FDE19638103557E2067993A74A862
+ 5DA154417713527B013E4C011F37011129063C8500000006326C11325E366CBC
+ 1B29410000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000C1F381681FF0C8BFF0C82FF0A8C
+ FD0788CA0030380A69E10690EE0A8FF40F85FC138BFF0000001145770B99D605
+ 66790280A32C537A862E3AA3251A692538001E3427466E743B4A73262D4A3F65
+ 12557C035E6C015F760000000000000000000000000000000000000000000000
+ 00021B460C7FFB098FFF0A61ED097AE20492CD1D7CA20B4D7307718A1180C335
+ 6FDC5A478B3C3D61115D7F048CC70230660000000000000000000000000B0B0D
+ 0B0D140000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000002C3448347AD40B7EFF137CFF1681FF058E
+ E50588DA03356F0C76EB098DFF0989FA0C91FF2C77D40000000C65EF077EDC00
+ 889D0A72B54F395E772D3B80354D032E511B0A0551353D4B3D576D2B42613145
+ 1C5882007F92085FE3031C470000000000000000000000000000000000000000
+ 000324570B7BFF0D8CFF0A69FF0C81FF068FED0B88EC0D5378107ECE0E7DA007
+ 8BE8207CFA276BE12D56870D7994038DD70A65E30A62E7000815000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000303F5E3975C62B62A9257EE20D92FF057B
+ DF0B8EFF0427550112380F97FF0B89FF0C8FFF249CFF2F9EFF058CFE0580AF18
+ 60853F3F656D32465C3D562F406F002C4A4B08007237343D4A653E385B2E3759
+ 2A467410658B049AC803367200060C0000000000000000000000000000000000
+ 000000000000000C73E80747A1032C520D9DFF0883B6037CA50C50A80D82E705
+ 8AF20585D614619718476B16496F0D7EAF06A0F8097BFA02183A000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000E12204F619240649E1F86FE0B8DFF0881FE0A85
+ FF0B7BF9021A410004071798FF0C8BFF0D81FF108FFF1EA4FF0797C60B729E2A
+ 4F752C3D5D5539502F4D7001405E070000872A37784036434E6A264269413D5B
+ 043D5B0A6B8C058DBE0795FF042D610000000000000000000000000000000000
+ 000000000000000B418600040A1580FF0D98FF0589C2068EED0563910984CF0C
+ 90FF0B8BFF058AC31874950B5D78196C950883D40998FF0E93FF093A8410305A
+ 08101B0000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000B1F4435477A50669F5683D03385F2108AFF0A7EFF0A7EFD0D8C
+ FF0B5FBA0100000200001347881988FF108BFF277DEF003A77014A6514517627
+ 4B692246723C4E66305D7000313D0C1E3575314976484D3F4C6E056184234C77
+ 0D415B002F36012F490220440000000000000000000000000000000000000000
+ 000000000000000000002A58921996FD0B94FF0795F70B72EA024369058ECA0B
+ 8EF50E8BFF0C8DFA0796EC0C72960B72A7067CB30A8FD20B91FD1295FF217CE1
+ 0F151F0000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000E172B7298F75C90E32D89FF1188FF0F7AF70A73F61088FF0D79
+ FA14355C04080C0000000504053E69AA2E86F33B87F50D6BB507637A185C8B13
+ 63862460806854528A312D0F01000729465F37578B282D3F476F007D980F6291
+ 1061860037430000000000000000000000000000000000000000000000000000
+ 000000000000000000002C50851079ED0A92FF0EA0FF063DA2064DA2088EF508
+ 92FA1486FB1B75EE178DFF0593E0107BC30562A31183FF0B8DFF0A8DFF0E7CFD
+ 123A740000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000273760475B90475C872260B00D72FB1083FF1589FF2C59
+ 95000000000000000000000000202B434A88F02A96FF3C92D20377A20395D400
+ 70993E74A890313E3A1D2F0006080D577D43395F6D30433043750088CF047EA2
+ 076E870598EA0000000000000000000000000000000000000000000000000000
+ 0000000000000000000009162A1591FF1395FF0C67E6070705032A570D95FF08
+ 81FF0992FF187AE3207EE10E97FF0794FF0782CC056BB40A85EE0D94FF118EFF
+ 248EFF5D8DE1050101090E1902050B0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000E0D0F1A7CF31984FF207AF23188FC4A5A
+ 8200000000000000000000050B197AF50D8FFF048CF92D97F10894FF0588E122
+ 50834C60AB6B334E1A243F0031330B547F3A3F6354354E24446E0278B40593DE
+ 047D9B0597EA0209280000000000000000000000000000000000000000000000
+ 000000000000000000005B92E92C90FF2562AD0000000000000217380C75EC0D
+ 8DFF0981FF128DFF2995FF3D8FFF0E97FE0B96FE0D79F50980EA0892F9178FFF
+ 2688EA4479C5618EE96790F42335610000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000181C2C5178B91A7BF7387FE14579C61D34541920
+ 310000000000000000001859A90B90FF0B83FF0A75FF079EFF0590F40F6FA745
+ 3B5A64365C2E43700014210005080376912C5174493550254D700686E10565BA
+ 026286089AFF0952BB0000000000000000000000000000000000000000000000
+ 0000000000000000000026395B172A44090B10000000000000000000104C980F
+ 8FFF0C89FF0F66CD1A3B683074D5118DFF0E96FF0E84FD065BA60E8DFF0E86FF
+ 098AFF1387FF3F85E94257860304070000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000101034658894683E02F78DB5880C5627EC108090E0000
+ 00000000161520454D721933541869CF0A6BFF0C81FF0896FA0F6F9122487226
+ 3C5E35466F07517700151400569217788C3D435B21415E203D660493CC04549E
+ 074CB20A8FFF0A5ADC0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000025497B1A
+ 78EF1A8DFF1180F80417300607083195FF0998FF0D92FE078DF4062C6C1790FF
+ 0E8BFF178CFF1880F64366A430395E0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000002537656B8ADC4578C55D85CE607AC30C101E0000002935
+ 576EABFF3986E7309DFF1887FF0B87FF0B9CFF0A9EF80988C11C62842D4A6536
+ 4D6F046B9200434B000003206EC6545653325D7611426A245870086C8D07A4F4
+ 05478F0A6BD30A5DE70000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000002C
+ 44694580D31987FF447FD74F5B873891FF1585FE1594FF1194FF0B7AF80858A6
+ 2398FC2B8AFF4D8BEB4989EB6D90E33F8EFF0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000020B1D427DF76B8CDE4A61974C64A3466CC400020B0000000404
+ 05386EB61998FF0A9DFF0C98FF0B9BF6098EE71778B407627C175371235C7E04
+ 7A97036D9101497200060D7F1B204B6B862D66910855771B4E6C0E79B00590E6
+ 065193031D500330710000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00006788D23C83E44C80D12933522935522F83ED2F92FF0F91FF1086EE1363C4
+ 148EFF0D8EFF418CF3638ADE6186DA5992FF0241A30000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000006113A6BD5648FFA141D3503060D1325490000000000000000
+ 000203061C66B71087FF0A97FF0592ED0570AC0679BB0C618E2C678D21729505
+ 9FF700050D01254119375C7832524969B91574AC15708A06507D0B6D97078BDB
+ 0C9DFF0B75D9103E7B0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000556FB43C52825E84CC5C77C00000006491E6478EF1118DFF198FFD265093
+ 095EC00B8EFF1286FF4390FC618EEC4F7EE61381FE0B59990760AD01111C0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000110241F8DFF163E880000000000000000000000000000000000
+ 000000000000000B58E00776E5066C9D1475D90A7FA00F84C74C6A91258AD806
+ 56BF000000020E1726446D55375E4360C00080B01375AD0F466E0286BB068BB8
+ 068EEC0D9AFF0846A70000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000007090F000000465C966B8BE80000006A85D65090EF1288FF318EFF263959
+ 1E3F6A2F88FA1185FF267DF54791FE6597FB629DFF53A9FF1FBCFF02182A0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000202000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000020000527A
+ C21D83F60F98FF0B99FF0691D90C8DFF0887F30293FF3673FB5A57973569C600
+ 0710001619027E9B334062335DCF0D81FA047CC40789E70C65A1025C7F0875F8
+ 0B96FF0B9BFF0F97FF2481FD14253D0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000011331051E405CA3FF5699FF2B87FF4C90F6465688
+ 000000505F8C4A92FB3C88F33274D1487DD0688EE52D78E901133A0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000090D1844578B587BBD2890
+ FF0F8DFF098EFF1193FF0E90FF0C8EFF0794FF167AEB4159C04348860A1A2E00
+ 00000242660870902D4364334B930966A00888F2088FFF08708F047AC003164C
+ 07479E064F971B89F71E62B9111E320000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000C54B13A77C6546AA34591FA678AD725355B
+ 0000002D395C4658896B96F4548FF14287F35572B524386A0105100000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000E33764D66A55C95F7358EFF1085
+ FF0F89FF1493FF1D7CE70E86FF098AE80A89F12367C24142781B436300111800
+ 00000471C30977991641642E445E06749F0A93FF0B8DFF0681B6078EF4074CA9
+ 00000000000010254204060A0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000133E436ABE719FFF4577D6000000
+ 0000000000000000013F69B96A98F86095FD5F95F16097FF217EDE0007110000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000B6ACB043884000000000000000000479CFF7497F7638ADA4677BE3766
+ AB2B90FF486BA63672D50C9DFF0686CA1A79C8294A851B5475015D7C0006040A
+ 67CD049AEB15657C124C6A1959800386AA0B7CFF0C80FB0883EE0892FF074B9D
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000001D4F468DFF6EAAFF1978E5000000
+ 0000000000000000000939791349993481E62C96FF5994FB3DA0FF1095EF0B68
+ BE00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000A73EE25CAFF1559AE267CB1158EFF050000204690556DAF0704065E84
+ D44393F61D91FF0E97FF058AD3126B89165B721C526F008BAB00283200000001
+ 0B2A048DD30D75A90A63870C5773059AFD0E79F60F7FF40886F80B88FF0D77ED
+ 02183B0000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000004366626B1FF02285B065CCC000000
+ 000000000000000000000000000000013D950978EA17A8FF1E86F81BA6FF0E94
+ EA00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000013A7E39B4FF67A3FF659EFF54A2FF7C9EFF5381D04191F74193F12693
+ FF1F95FF0895FF0B92FE0775AC0D5B890B75A3047C9A0684EA00000000091D0A
+ 75FF068FF714719F1060881A6B940492D61386FD118BFA0A76FF0A8DFF0D84FF
+ 0629550000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000003213B0861BA00050B000000000000
+ 000000000000000000000000000000000000010B120E91FC01254D074E7F13B7
+ FF0A5FBA00000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000104A80679FFF4C92FD3B93FF4D95F33B91FF198FFF0C94FF1392
+ FF0697F4097CCD0972C5096EA00F7CBB088CD90788FA02224700000006337B09
+ 84FF217FD5266A830D57770D70C40A91EE218FFF1587FF0962EF0D8BFF1378F3
+ 0720410000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000060E0217340000000000000536
+ 71031E3B00000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000105124F91FF6795F42D92FF1091FF1998FF1C9AFD0D92FF0D81
+ FF0873F0076EE60483C20988F00791EF0B8EFF084AB300000007244E0C8CFF26
+ 85FF3F648F286ABD0371B303788E0E9AFF238CFF0D2954064BA70B87FF2C86F0
+ 1622340000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000303
+ 001125060A140C0F190000002D3C60506EAE1878FA0F76F70E70F809377E087E
+ FD0882D71185FF0B91FF0C8DFF0B87FF0D88FF000812000000022436284C9458
+ 509C3975DD0779C90568BC1082E20891FF0E88FF062C5D30466A1883FF1E75E8
+ 466BAA0A0C110000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000429370540650436571A5EA5
+ 359DFF5B84EB689DFF4C8CEB2881ED117FFF157CFB2578D1177DEF0A92FF1191
+ F90D8DFF098BFF0E8AFF0E82FF063D8F06367800000000282F0E5F7B34529E35
+ 6EF2127BFF038DD00552A10F6AE1098EFF0C93FF2891FF1B24384C87DA1D4E8C
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000063F98084D990E92E61AB9FF22AEFF46A0FF
+ 5F9BFF5E91EC3D84EC2787FE128BFF2292FF3293FE188CFE0D86FF168FFF2987
+ F10C83FF0B8CFF2281EF0E46890000000000000441840379941D517B2A62C719
+ 6DE00B8AFA0A88E505489C066B9F0C95FF0B8BFF1E7AE30000004056855276B8
+ 181F2E0000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000005010114B3FF14C2FF19B4FF32A2FF5D9FFF6691EC
+ 5880CE4788EF5191F74C93FF538FF8668EE23089FF1B7FFA1F8EFF4379C51A81
+ FF1769CD2375D8457BCB000000000000000000026EA3096D882B597E2B5A940D
+ 82EC0B88FD1183FE042C650573CE0B8EF41889FF1C87FF4169A90300013E4E7C
+ 06080E0000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000040D81F30C83DF0B8ADE0862DB1C6EEC
+ 5C9AFF619FFF5593FF5185FF6E93EA4E8AE73071C94589EC5981CE5A7DC34E76
+ B9151921262D41495C8A0000000217340869DC0797F80F61862856842283CF0D
+ 95FF097CFF0A8AFF08437C0C72EE088CFF1890FF3A7FD8658BD50F111D000104
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000080C21A6FF
+ 38B4FF1782ED1191FF4D92FF5F91FF405484323C6271A0FF4A62A53442672129
+ 3F0000000000000000000105100B7DFF0796FF0E78A72771A33C82CB1699F80C
+ 7EFF0C85FF0E8BE80879CD073C910E8FFF0987FF138DFF3F8AE778A8FF425FA7
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000002172016C3FF
+ 0C6FAC0016310941741452A41329570000000818304C98FF06183A0000000000
+ 000000000000000000000845970A74EC0988FB0C69AC1278A01683C61485F40D
+ 7CFE1D85FF1585F11290FF0128602584F80F85FF1488FF1D86FF4868A20B0C15
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000110230956AA
+ 00000000000000000000000200000000000000040A0314290000000000000000
+ 0000000012151E2A4D7D0F77F50C8EFF0788D4026E970E7FDA0689D71D83FF14
+ 7EFF417CCF1386FF0C8AFF0862D30B0A0C3F76C83384EE3087FF4581D84B6AB2
+ 0E1B350000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000}
+ Proportional = True
+ end
+ object Label3: TLabel
+ Left = 16
+ Top = 312
+ Width = 202
+ Height = 13
+ Caption = 'This application was created using:'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Label4: TLabel
+ Left = 18
+ Top = 270
+ Width = 95
+ Height = 16
+ Cursor = crHandPoint
+ Hint = 'http://sourceforge.net/projects/apophysis7x/'
+ Caption = 'Apophysis 7X'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlue
+ Font.Height = -14
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label10: TLabel
+ Left = 16
+ Top = 352
+ Width = 221
+ Height = 13
+ Caption = 'Flam3 - cosmic recursive fractal flames'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Label11: TLabel
+ Left = 16
+ Top = 370
+ Width = 187
+ Height = 13
+ Caption = 'Copyright '#169' 1992-2015 Scott Draves'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object lblFlamecom: TLabel
+ Left = 16
+ Top = 386
+ Width = 79
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'http://code.google.com/archive/p/flam3/downloads'
+ Caption = 'http://flam3.com'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Bevel1: TBevel
+ Left = 16
+ Top = 398
+ Width = 410
+ Height = 9
+ Shape = bsBottomLine
+ end
+ object Label6: TLabel
+ Left = 145
+ Top = 130
+ Width = 110
+ Height = 13
+ Caption = 'Copyright '#169' 2005-2009'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label7: TLabel
+ Left = 145
+ Top = 150
+ Width = 71
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'https://www.deviantart.com/zueuk'
+ Caption = 'Peter Sdobnov'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label8: TLabel
+ Left = 145
+ Top = 165
+ Width = 53
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'https://www.deviantart.com/utak3r'
+ Caption = 'Piotr Borys '
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label9: TLabel
+ Left = 16
+ Top = 165
+ Width = 70
+ Height = 13
+ Caption = 'Ronald Hordijk'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label12: TLabel
+ Left = 16
+ Top = 130
+ Width = 110
+ Height = 13
+ Caption = 'Copyright '#169' 2001-2004'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label13: TLabel
+ Left = 16
+ Top = 330
+ Width = 69
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'https://www.tmssoftware.com/site/scriptstudiopro.asp'
+ Caption = 'Scripter Studio'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label14: TLabel
+ Left = 96
+ Top = 330
+ Width = 55
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'http://www.destructor.de/'
+ Caption = 'XML Parser'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Bevel3: TBevel
+ Left = 16
+ Top = 138
+ Width = 240
+ Height = 11
+ Shape = bsBottomLine
+ end
+ object Label17: TLabel
+ Left = 145
+ Top = 290
+ Width = 65
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'http://www.nuget.org/profiles/gkiehne'
+ Caption = 'Georg Kiehne'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label18: TLabel
+ Left = 16
+ Top = 290
+ Width = 110
+ Height = 13
+ Caption = 'Copyright '#169' 2009-2014'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label16: TLabel
+ Left = 8
+ Top = 408
+ Width = 5
+ Height = 13
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Label2: TLabel
+ Left = 16
+ Top = 150
+ Width = 77
+ Height = 13
+ Caption = 'Mark Townsend'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Bevel2: TBevel
+ Left = 16
+ Top = 340
+ Width = 240
+ Height = 11
+ Shape = bsBottomLine
+ end
+ object Label19: TLabel
+ Left = 160
+ Top = 330
+ Width = 77
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'http://www.regular-expressions.info'
+ Caption = 'PCRE for Delphi'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label20: TLabel
+ Left = 16
+ Top = 416
+ Width = 297
+ Height = 13
+ AutoSize = False
+ Visible = False
+ end
+ object Label5: TLabel
+ Left = 18
+ Top = 110
+ Width = 105
+ Height = 22
+ Cursor = crHandPoint
+ Hint = 'http://sourceforge.net/projects/apophysis/'
+ Alignment = taCenter
+ AutoSize = False
+ Caption = 'Apophysis 2.0'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlue
+ Font.Height = -14
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Bevel4: TBevel
+ Left = 16
+ Top = 300
+ Width = 240
+ Height = 11
+ Shape = bsBottomLine
+ end
+ object Label1: TLabel
+ Left = 18
+ Top = 190
+ Width = 159
+ Height = 22
+ Cursor = crHandPoint
+ Hint =
+ 'https://sourceforge.net/projects/apophysis/files/Apophysis%203D%' +
+ '20%28experimental%29/'
+ Alignment = taCenter
+ AutoSize = False
+ Caption = 'Apophysis "3D Hack"'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlue
+ Font.Height = -14
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label15: TLabel
+ Left = 18
+ Top = 250
+ Width = 110
+ Height = 13
+ Caption = 'Copyright '#169' 2008-2009'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Bevel5: TBevel
+ Left = 16
+ Top = 258
+ Width = 240
+ Height = 11
+ Shape = bsBottomLine
+ end
+ object Label21: TLabel
+ Left = 145
+ Top = 250
+ Width = 51
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'http://lu-kout.deviantart.com/'
+ Caption = 'Jed Kelsey'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object lbApoTitle: TLabel
+ Left = 18
+ Top = 8
+ Width = 214
+ Height = 40
+ Cursor = crHandPoint
+ Hint = 'https://sourceforge.net/projects/apophysis-av/'
+ AutoSize = False
+ Caption = 'Apophysis AV'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clMaroon
+ Font.Height = 40
+ Font.Name = 'Harlow Solid Italic'
+ Font.Style = []
+ ParentFont = False
+ StyleElements = [seClient, seBorder]
+ OnClick = DevelopersClick
+ end
+ object lbApoVers: TLabel
+ AlignWithMargins = True
+ Left = 235
+ Top = 12
+ Width = 186
+ Height = 29
+ Alignment = taCenter
+ Caption = '"Phoenix Edition"'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clMaroon
+ Font.Height = 30
+ Font.Name = 'Times New Roman'
+ Font.Style = []
+ ParentFont = False
+ StyleElements = [seClient, seBorder]
+ end
+ object Label24: TLabel
+ Left = 24
+ Top = 55
+ Width = 100
+ Height = 13
+ Caption = 'Copyright '#169' 2021'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Bevel6: TBevel
+ Left = 18
+ Top = 65
+ Width = 410
+ Height = 11
+ Shape = bsBottomLine
+ end
+ object lblAuthor: TLabel
+ Left = 145
+ Top = 54
+ Width = 86
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'https://www.donationalerts.com/r/fract_alice'
+ Caption = 'Alice V. Koryagina'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label26: TLabel
+ Left = 18
+ Top = 230
+ Width = 143
+ Height = 22
+ Cursor = crHandPoint
+ Hint = 'http://sourceforge.net/projects/apo-mods-jk/'
+ Alignment = taCenter
+ AutoSize = False
+ Caption = 'Apophysis JK Mods'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlue
+ Font.Height = -14
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Label27: TLabel
+ Left = 18
+ Top = 210
+ Width = 110
+ Height = 13
+ Caption = 'Copyright '#169' 2007-2008'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label28: TLabel
+ Left = 145
+ Top = 210
+ Width = 71
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'http://zueuk.deviantart.com'
+ Caption = 'Peter Sdobnov'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = DevelopersClick
+ end
+ object Bevel7: TBevel
+ Left = 16
+ Top = 218
+ Width = 240
+ Height = 11
+ Shape = bsBottomLine
+ end
+ object Bevel8: TBevel
+ Left = 16
+ Top = 178
+ Width = 240
+ Height = 11
+ Shape = bsBottomLine
+ end
+ object lblPlugins: TLabel
+ Left = 18
+ Top = 82
+ Width = 230
+ Height = 22
+ Cursor = crHandPoint
+ Hint = 'https://sourceforge.net/projects/apo-plugins/'
+ AutoSize = False
+ Caption = 'Apophysis Plugins (download)'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlue
+ Font.Height = -14
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ OnClick = lblPluginsClick
+ end
+ object Bevel9: TBevel
+ Left = 15
+ Top = 93
+ Width = 240
+ Height = 11
+ Shape = bsBottomLine
+ end
+ object lblVersion: TLabel
+ Left = 360
+ Top = 50
+ Width = 57
+ Height = 16
+ Caption = 'v 1.0.1.0'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -15
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object btnOK: TButton
+ Left = 320
+ Top = 410
+ Width = 91
+ Height = 25
+ Caption = 'OK'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnClick = btnOKClick
+ end
+end
diff --git a/Forms/About.pas b/Forms/About.pas
new file mode 100644
index 0000000..069266e
--- /dev/null
+++ b/Forms/About.pas
@@ -0,0 +1,163 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit About;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ExtCtrls, Global, Translation;
+
+type
+ TAboutForm = class(TForm)
+ btnOK: TButton;
+ Label3: TLabel;
+ Label4: TLabel;
+ Label10: TLabel;
+ Label11: TLabel;
+ lblFlamecom: TLabel;
+ Bevel1: TBevel;
+ Label6: TLabel;
+ Label7: TLabel;
+ Label8: TLabel;
+ Label9: TLabel;
+ Label12: TLabel;
+ Label13: TLabel;
+ Label14: TLabel;
+ Bevel3: TBevel;
+ Label17: TLabel;
+ Label18: TLabel;
+ Label16: TLabel;
+ Label2: TLabel;
+ Bevel2: TBevel;
+ Label19: TLabel;
+ Label20: TLabel;
+ Image1: TImage;
+ Label5: TLabel;
+ Bevel4: TBevel;
+ Label1: TLabel;
+ Label15: TLabel;
+ Bevel5: TBevel;
+ Label21: TLabel;
+ lbApoTitle: TLabel;
+ lbApoVers: TLabel;
+ Label24: TLabel;
+ Bevel6: TBevel;
+ lblAuthor: TLabel;
+ Label26: TLabel;
+ Label27: TLabel;
+ Label28: TLabel;
+ Bevel7: TBevel;
+ Bevel8: TBevel;
+ lblPlugins: TLabel;
+ Bevel9: TBevel;
+ lblVersion: TLabel;
+ procedure btnOKClick(Sender: TObject);
+ procedure lblPluginsClick(Sender: TObject);
+ procedure DevelopersClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ procedure SetTitleColor;
+ end;
+
+var
+ AboutForm: TAboutForm;
+
+implementation
+
+uses Main, ShellAPI;
+
+{$R *.DFM}
+
+procedure TAboutForm.btnOKClick(Sender: TObject);
+begin
+ ModalResult := mrOK;
+end;
+
+procedure TAboutForm.lblPluginsClick(Sender: TObject);
+var URL : String;
+begin
+ URL := lblPlugins.Hint;
+ ShellExecute(ValidParentForm(Self).Handle, 'open', PChar(URL), nil, nil, SW_SHOWNORMAL);
+ URL := 'https://onedrive.live.com/?authkey=%21AEhvN24LOQKCzBY&cid=828A1C23C17CA4C9&id=828A1C23C17CA4C9%211037&parId=root&action=locate';
+ ShellExecute(ValidParentForm(Self).Handle, 'open', PChar(URL), nil, nil, SW_SHOWNORMAL);
+end;
+
+procedure TAboutForm.SetTitleColor;
+var clr: TColor;
+begin
+ if IsDarkTheme or (CurrentStyle = 'Cyan Night') or (CurrentStyle = 'Calypso SLE')
+ or (CurrentStyle = 'Obsidian') or (CurrentStyle = 'Metropolis UI Green') then
+ clr := BrightColor
+ else
+ clr := clMaroon;
+
+ lbApoTitle.Font.Color := clr;
+ lbApoVers.Font.Color := clr;
+end;
+
+procedure TAboutForm.DevelopersClick(Sender: TObject);
+begin
+ ShellExecute(ValidParentForm(Self).Handle, 'open', PChar(TLabel(Sender).Hint),
+ nil, nil, SW_SHOWNORMAL);
+end;
+
+procedure TAboutForm.FormCreate(Sender: TObject);
+var s1, s2, s3: string;
+ AVFont: TResourceStream;
+begin
+ btnOK.Caption := TextByKey('common-close');
+ if (LanguageFile <> AvailableLanguages.Strings[0]) and (LanguageFile <> '') then
+ begin
+ LanguageInfo(LanguageFile, s1, s2);
+ s3 := LanguageAuthor(LanguageFile);
+ Label20.Visible := (s2 <> '') and (s3 <> '');
+ Label20.Caption := s2 + #32 + TextByKey('common-translation') + #32#32 + s3;
+ end;
+ lblPlugins.Caption := TextByKey('common-pluginlink');
+ Label3.Caption := TextByKey('common-thirdparty');
+ SetTitleColor;
+ if (pos(LowerCase(s1), 'russian') > 0) or (pos(LowerCase(s1), 'ðóññê') > 0) then
+ lblAuthor.Caption := 'Àëèñà Âèòàëüåâíà Êîðÿãèíà';
+ if Screen.Fonts.IndexOf('Harlow Solid Italic') = -1 then
+ begin // shouldn't happen on modern OS
+ AVFont := TResourceStream.Create(hInstance, 'HARLOWSI', RT_FONT);
+ try
+ s3 := GetEnvVarValue('WINDIR') + '\Fonts\Harlow Solid Italic.ttf';
+ AVFont.SavetoFile(s3);
+ except
+ s3 := AppPath + 'Harlow Solid Italic.ttf';
+ AVFont.SavetoFile(s3);
+ end;
+ AddFontResource(PChar(s3));
+ SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
+ AVFont.Free;
+ end;
+
+end;
+
+end.
diff --git a/Forms/Adjust.dfm b/Forms/Adjust.dfm
new file mode 100644
index 0000000..5cfa560
--- /dev/null
+++ b/Forms/Adjust.dfm
@@ -0,0 +1,2113 @@
+object AdjustForm: TAdjustForm
+ Left = 164
+ Top = 279
+ BorderIcons = [biSystemMenu, biMinimize]
+ BorderStyle = bsSingle
+ Caption = 'Adjustment'
+ ClientHeight = 341
+ ClientWidth = 467
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001010000001002000680400001600000028000000100000002000
+ 0000010020000000000040040000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000B7A2
+ 93FF604632FF634935FF634935FF634935FF634935FF634935FF634935FF6349
+ 35FF634935FF634935FF684E3AFF00000000000000000000000000000000BDA8
+ 99FFFCFEFCFFE7E6E4FFE7E2DCFFE6DCD4FFE5D6CBFFE4CFC1FFE3CAB8FFE3C5
+ B1FFE2C2ACFFC7AA98FF684E3AFF00000000000000000000000000000000C6B0
+ A1FFFCFEFCFFD8C4B9FFD6C0B5FFD3BCAFFFFAEFE6FFCFB3A5FFCCAF9FFFCCAF
+ 9FFFF6DBC8FFC7AA98FF684E3AFF00000000000000000000000000000000CCB6
+ A7FFFCFEFCFFFCFEFCFFFCFEFCFFFBFAF7FFFBF5EFFF75716EFF575451FF0000
+ 00FFD2C2B5FFCBB2A1FF684E3AFF00000000000000000000000000000000CCB6
+ A7FFFCFEFCFFDBCAC0FFDAC8BDFFD8C4B9FFFBFAF7FFA39D98FFFDFEFEFF5193
+ A9FF0E1216FFB8B1A8FF78604DFF00000000000000000000000000000000CCB6
+ A7FFFCFEFCFFFCFEFCFFFCFEFCFFFCFEFCFFFCFEFCFFA39D98FF88B7C7FF74CE
+ E2FF499AB2FF0E1216FF7C7266FFE5D6CB01000000000000000000000000CCB6
+ A7FFFCFEFCFFDBCAC0FFDBCAC0FFDBCAC0FFFCFEFCFFC1B9B4FF4D9CB3FF8CE0
+ EEFF62BFD7FF499AB2FF0E1216FF2D62753B000000000000000000000000CCB6
+ A7FFFCFEFCFFFCFEFCFFFCFEFCFFFCFEFCFFFCFEFCFFFBF8F3FFD5CEC8FF57A0
+ B5FF8CE0EEFF62BFD7FF499AB2FF0E1216FF2D62753B0000000000000000EBAC
+ 8DFFEAAA8CFFEAA989FFE9A27EFFE89971FFE68F63FFE58758FFE69265FFCDA9
+ 95FF65A6B7FF8CE0EEFF62BFD7FF499AB2FF0E1216FF2855663000000000EBAC
+ 8DFFFFC3A2FFFEBF9DFFFCBB98FFFBB692FFFAB08BFFF8AB84FFF8A67CFFF3A6
+ 80FFD2B09EFF73ACB9FF8CE0EEFF6CC4D9FF7D8686FF353590FF2F39834EEBAC
+ 8DFFEAAA8BFFEAAA8BFFEAA889FFE9A281FFE89C77FFE7946BFFE68C60FFE586
+ 55FFE68D5FFFCA997FFF7DB0BBFFCAB8ACFF7385D1FF5E6CADFF353590FF0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000EBAC8D037F9FAD465E6CADFF708FDFFF5E76D0FF5E6CADFF0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000687EC2495E6CADFF5E6CADFF6579BC300000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ 0000FFFF0000000F0000000F0000000F0000000F0000000F0000000700000007
+ 000000030000000100000000000000000000FFC00000FFF00000FFFF0000}
+ OldCreateOrder = False
+ OnActivate = FormActivate
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ DesignSize = (
+ 467
+ 341)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object btnUndo: TSpeedButton
+ Left = 413
+ Top = 10
+ Width = 23
+ Height = 21
+ Hint = 'Undo'
+ Anchors = [akTop, akRight]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFBD7C5F8D5C3FF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFF8DCCFF38A57E19571FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFEECBBAF08550DA86
+ 5EFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFCA805CF08855EAC8B7FF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFE1CDC3DB78
+ 47EF9367FF00FFFF00FFFF00FFFF00FFFF00FF8A4625954C28A4542EB65F34C7
+ 693AD67240FF00FFFF00FFFF00FFAE5C36EC8652F2CFBDFF00FFFF00FFFF00FF
+ FF00FF954C28DF7336EA8249F39A6AF5B594FF00FFFF00FFFF00FFFF00FFA366
+ 48E98452F7C2A7FF00FFFF00FFFF00FFFF00FFA3552EEC824BF38D5BEC9C76B6
+ 866FE9D5CBFF00FFFF00FFFF00FFA97459E18254F7BE9EFF00FFFF00FFFF00FF
+ FF00FFB55F34F39A6AF49C71F294659D5330AA613BDAB8A7FF00FFF6C5AE9D64
+ 46DE8051F7BDA1FF00FFFF00FFFF00FFFF00FFC7693BF7CAAEFBDDCBF4A376F3
+ 9464B46239B0643EBF8162BB8460A15E39EE8B5AF6C8B0FF00FFFF00FFFF00FF
+ FF00FFD67240FF00FFFF00FFFBDECFF5A57EF49D72C97347B7663CB6653DE281
+ 53F6BCA1F6CBB7FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFB
+ DACAF5A67EF6B696F5B28FF6B091F6C1A8F6C5AEFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFBE0D2F6C3A9F7CFBBF9DB
+ CDFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentShowHint = False
+ ShowHint = True
+ Transparent = False
+ OnClick = btnUndoClick
+ end
+ object btnRedo: TSpeedButton
+ Left = 435
+ Top = 10
+ Width = 23
+ Height = 21
+ Hint = 'Redo'
+ Anchors = [akTop, akRight]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFF8D5C3FBD7C5FF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFE19571F38A57F8DCCFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFDA865EF08550EECBBAFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFEAC8B7F08855CA805CFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ EF9367DB7847E1CDC3FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFF2CFBDEC8652AE5C36FF00FFFF00FFFF00FFD6
+ 7240C7693AB65F34A4542E954C288A4625FF00FFFF00FFFF00FFFF00FFF7C2A7
+ E98452A36648FF00FFFF00FFFF00FFFF00FFF5B594F39A6AEA8249DF7336954C
+ 28FF00FFFF00FFFF00FFFF00FFF7BE9EE18254A97459FF00FFFF00FFFF00FFE9
+ D5CBB6866FEC9C76F38D5BEC824BA3552EFF00FFFF00FFFF00FFFF00FFF7BDA1
+ DE80519D6446F6C5AEFF00FFDAB8A7AA613B9D5330F29465F49C71F39A6AB55F
+ 34FF00FFFF00FFFF00FFFF00FFF6C8B0EE8B5AA15E39BB8460BF8162B0643EB4
+ 6239F39464F4A376FBDDCBF7CAAEC7693BFF00FFFF00FFFF00FFFF00FFF6CBB7
+ F6BCA1E28153B6653DB7663CC97347F49D72F5A57EFBDECFFF00FFFF00FFD672
+ 40FF00FFFF00FFFF00FFFF00FFFF00FFF6C5AEF6C1A8F6B091F5B28FF6B696F5
+ A67EFBDACAFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFF9DBCDF7CFBBF6C3A9FBE0D2FF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentShowHint = False
+ ShowHint = True
+ Transparent = False
+ OnClick = btnRedoClick
+ end
+ object PrevPnl: TPanel
+ Left = 8
+ Top = 8
+ Width = 216
+ Height = 170
+ Cursor = crCross
+ BevelOuter = bvLowered
+ Color = clAppWorkSpace
+ TabOrder = 0
+ OnDblClick = PreviewImageDblClick
+ OnMouseDown = PreviewImageMouseDown
+ OnMouseMove = PreviewImageMouseMove
+ OnMouseUp = PreviewImageMouseUp
+ object PreviewImage: TImage
+ Left = 1
+ Top = 1
+ Width = 210
+ Height = 166
+ IncrementalDisplay = True
+ PopupMenu = QualityPopup
+ Proportional = True
+ OnDblClick = PreviewImageDblClick
+ OnMouseDown = PreviewImageMouseDown
+ OnMouseMove = PreviewImageMouseMove
+ OnMouseUp = PreviewImageMouseUp
+ end
+ end
+ object PageControl: TPageControl
+ Left = 8
+ Top = 181
+ Width = 451
+ Height = 155
+ ActivePage = TabGradient
+ Anchors = [akLeft, akRight, akBottom]
+ Images = MainForm.Buttons
+ TabOrder = 1
+ object TabCamera: TTabSheet
+ Caption = 'Camera'
+ ImageIndex = 18
+ DesignSize = (
+ 443
+ 126)
+ object scrollZoom: TScrollBar
+ Left = 112
+ Top = 10
+ Width = 259
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 100
+ Max = 3000
+ Min = -3000
+ PageSize = 0
+ SmallChange = 10
+ TabOrder = 0
+ OnChange = scrollZoomChange
+ OnScroll = scrollCameraScroll
+ end
+ object txtZoom: TEdit
+ Left = 380
+ Top = 4
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 1
+ Text = '0'
+ OnEnter = txtZoomEnter
+ OnExit = txtZoomExit
+ OnKeyPress = txtZoomKeyPress
+ end
+ object scrollCenterX: TScrollBar
+ Left = 112
+ Top = 31
+ Width = 259
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 100
+ Max = 10000
+ Min = -10000
+ PageSize = 0
+ SmallChange = 10
+ TabOrder = 2
+ OnChange = scrollCenterXChange
+ OnScroll = scrollCameraScroll
+ end
+ object txtCenterX: TEdit
+ Left = 380
+ Top = 28
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 3
+ Text = '0'
+ OnEnter = txtCenterXEnter
+ OnExit = txtCenterXExit
+ OnKeyPress = txtCenterXKeyPress
+ end
+ object scrollCenterY: TScrollBar
+ Left = 112
+ Top = 55
+ Width = 259
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 100
+ Max = 10000
+ Min = -10000
+ PageSize = 0
+ SmallChange = 10
+ TabOrder = 4
+ OnChange = scrollCenterYChange
+ OnScroll = scrollCameraScroll
+ end
+ object txtCenterY: TEdit
+ Left = 380
+ Top = 52
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 5
+ Text = '0'
+ OnEnter = txtCenterYEnter
+ OnExit = txtCenterYExit
+ OnKeyPress = txtCenterYKeyPress
+ end
+ object scrollAngle: TScrollBar
+ Left = 112
+ Top = 79
+ Width = 259
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 1500
+ Max = 36000
+ Min = -36000
+ PageSize = 0
+ SmallChange = 100
+ TabOrder = 6
+ OnChange = scrollAngleChange
+ OnScroll = scrollCameraScroll
+ end
+ object txtAngle: TEdit
+ Left = 380
+ Top = 76
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 7
+ Text = '0'
+ OnEnter = txtAngleEnter
+ OnExit = txtAngleExit
+ OnKeyPress = txtAngleKeyPress
+ end
+ object pnlZoom: TPanel
+ Left = 4
+ Top = 4
+ Width = 101
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = 'Zoom'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 8
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlXpos: TPanel
+ Left = 4
+ Top = 28
+ Width = 101
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = 'X position'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlYpos: TPanel
+ Left = 4
+ Top = 52
+ Width = 101
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = 'Y position'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 10
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlAngle: TPanel
+ Left = 4
+ Top = 76
+ Width = 101
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = 'Rotation'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 11
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object btResetZoom: TButton
+ Left = 4
+ Top = 102
+ Width = 108
+ Height = 22
+ Caption = 'Reset zoom'
+ TabOrder = 12
+ OnClick = btResetZoomClick
+ end
+ end
+ object TabRendering: TTabSheet
+ Caption = 'Rendering'
+ ImageIndex = 35
+ DesignSize = (
+ 443
+ 126)
+ object chkTransparent: TCheckBox
+ Left = 112
+ Top = 102
+ Width = 81
+ Height = 17
+ Caption = 'Transparent'
+ Enabled = False
+ TabOrder = 13
+ Visible = False
+ end
+ object pnlGamma: TPanel
+ Left = 4
+ Top = 4
+ Width = 101
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = 'Gamma'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 7
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object scrollGamma: TScrollBar
+ Left = 112
+ Top = 7
+ Width = 259
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 10
+ Max = 500
+ Min = 100
+ PageSize = 0
+ Position = 500
+ TabOrder = 0
+ OnChange = scrollGammaChange
+ OnScroll = scrollCameraScroll
+ end
+ object txtGamma: TEdit
+ Left = 372
+ Top = 4
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 1
+ Text = '0'
+ OnEnter = txtGammaEnter
+ OnExit = txtGammaExit
+ OnKeyPress = txtGammaKeyPress
+ end
+ object scrollBrightness: TScrollBar
+ Left = 112
+ Top = 31
+ Width = 259
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 100
+ Max = 10000
+ Min = 1
+ PageSize = 0
+ Position = 1
+ TabOrder = 2
+ OnChange = scrollBrightnessChange
+ OnScroll = scrollCameraScroll
+ end
+ object txtBrightness: TEdit
+ Left = 372
+ Top = 28
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 3
+ Text = '0'
+ OnEnter = txtBrightnessEnter
+ OnExit = txtBrightnessExit
+ OnKeyPress = txtBrightnessKeyPress
+ end
+ object scrollVibrancy: TScrollBar
+ Left = 112
+ Top = 55
+ Width = 259
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 10
+ Max = 1000
+ PageSize = 0
+ TabOrder = 4
+ OnChange = scrollVibrancyScroll
+ OnScroll = scrollCameraScroll
+ end
+ object txtVibrancy: TEdit
+ Left = 372
+ Top = 52
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 5
+ Text = '0'
+ OnEnter = txtVibrancyEnter
+ OnExit = txtVibrancyExit
+ OnKeyPress = txtVibrancyKeyPress
+ end
+ object pnlBrightness: TPanel
+ Left = 4
+ Top = 28
+ Width = 101
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = 'Brightness'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 8
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlVibrancy: TPanel
+ Left = 4
+ Top = 52
+ Width = 101
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = 'Vibrancy'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlGammaThreshold: TPanel
+ Left = 250
+ Top = 100
+ Width = 121
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ Anchors = [akTop, akRight]
+ BevelOuter = bvLowered
+ Caption = ' Gamma threshold'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 10
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtGammaThreshold: TEdit
+ Left = 372
+ Top = 100
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 11
+ Text = '0'
+ OnEnter = txtGammaThresholdEnter
+ OnExit = txtGammaThresholdExit
+ OnKeyPress = txtGammaThresholdKeyPress
+ end
+ object ColorPanel: TPanel
+ Left = 112
+ Top = 100
+ Width = 131
+ Height = 21
+ Cursor = crHandPoint
+ Anchors = [akLeft, akTop, akRight]
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clBlack
+ TabOrder = 6
+ OnClick = ColorPanelClick
+ object Shape1: TShape
+ Left = 2
+ Top = 2
+ Width = 123
+ Height = 13
+ Align = alClient
+ Brush.Color = clBlack
+ Pen.Style = psClear
+ OnMouseUp = Shape1MouseUp
+ end
+ end
+ object pnlBackground: TPanel
+ Left = 4
+ Top = 100
+ Width = 101
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Background'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 12
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlContrast: TPanel
+ Left = 4
+ Top = 76
+ Width = 101
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = 'Contrast'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 14
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object scrollContrast: TScrollBar
+ Left = 112
+ Top = 76
+ Width = 259
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 10
+ Max = 1000
+ Min = 1
+ PageSize = 0
+ Position = 100
+ TabOrder = 15
+ OnChange = scrollContrastChange
+ OnScroll = scrollCameraScroll
+ end
+ object txtContrast: TEdit
+ Left = 372
+ Top = 76
+ Width = 63
+ Height = 21
+ Anchors = [akTop, akRight]
+ TabOrder = 16
+ Text = '0'
+ OnEnter = txtContrastEnter
+ OnExit = txtContrastExit
+ OnKeyPress = txtContrastKeyPress
+ end
+ end
+ object TabGradient: TTabSheet
+ Caption = 'Gradient'
+ ImageIndex = 11
+ DesignSize = (
+ 443
+ 126)
+ object btnOpen: TSpeedButton
+ Left = 396
+ Top = 82
+ Width = 23
+ Height = 22
+ Hint = 'Open Gradient Browser'
+ Anchors = [akTop, akRight]
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000000000000000000000000000000000000FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00292929000000
+ 000029313100FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FF00FF00FF00
+ FF00FF00FF0000000000ADEFFF0084DEFF0084DEFF0000000000000000000842
+ 73001894FF0000000000C6A5F700AD7BF700AD7BF70000000000FF00FF00FF00
+ FF00FF00FF0000000000ADEFFF0084DEFF0084DEFF0000000000000000001894
+ FF001894FF0000000000C6A5F700AD7BF700AD7BF70000000000FF00FF00FF00
+ FF00FF00FF0000000000ADEFFF00ADEFFF0031424A0000000000105A7B0021BD
+ FF0021BDFF0000000000C6A5F700C6A5F700C6A5F70000000000FF00FF00FF00
+ FF00FF00FF003110000018080000180800000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FF00FF00846B
+ 5A0029080000B57B5A00EFE7DE00E7CEC600AD735200290800006B73730052BD
+ FF0052BDFF0000000000EF842100DE631800DE63180000000000FF00FF003108
+ 0000EFDECE00EFE7D600FFEFE700F7EFE700FFF7EF00E7D6CE0039100800637B
+ 940052BDFF0000000000EF842100DE631800DE6318000000000039292100D6AD
+ 9400FFEFD600CEAD9C00EFD6C600EFDECE00F7E7D600EFE7D600D6B5A5001818
+ 10006BD6FF0000000000EF842100EF842100EF8421000000000000000000F7E7
+ D600F7CEB500AD7B6300A5735A00A57B6300B5947B00DEC6AD00FFF7DE000000
+ 000000000000000000000000000000000000000000000000000000000000FFEF
+ DE00EFB59C009C5A4200E7A58C00EFAD9400EFBD9C00CEA58C00FFEFD6000808
+ 0000FFFFFF0000000000FFDEC600FFCEAD00FFCEAD000000000000000000FFE7
+ D600F7B59C00A5523100E7948400E79C8400EFAD8C00D69C8400EFCEB5000808
+ 0800FFFFFF0000000000FFDEC600FFCEAD00FFCEAD000000000063525200B57B
+ 5A00FFCEBD00CE846B00F79C7B00F79C8400F7B59400EFB59400945239007B63
+ 5A00FFFFFF0000000000FFDEC600FFDEC600FFDEC60000000000FF00FF006342
+ 3900BD8C7300FFDEC600F7CEB500EFB59C00F7BDA5008C4A3100080000000000
+ 0000000000000000000000000000000000000000000000000000FF00FF00FF00
+ FF0052424200000000005A392100422918000000000042393100FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
+ ParentShowHint = False
+ ShowHint = True
+ Transparent = False
+ OnClick = btnOpenClick
+ end
+ object btnSmoothPalette: TSpeedButton
+ Left = 419
+ Top = 82
+ Width = 23
+ Height = 22
+ Hint = 'Smooth Palette'
+ Anchors = [akTop, akRight]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 1800000000000003000000000000000000000000000000000000ABBDBCABBDBC
+ ABBDBCABBDBCABBDBCABBDBCABBDBCABBDBCABBDBCABBDBCABBDBCABBDBCABBD
+ BCABBDBCABBDBCABBDBCA7B3B24A00004D000046000148000B4A00174C00254D
+ 003150003C5102475305524C0955440A573B03593300600C002EABBDBCA60004
+ A01021961430981A409C1D509F2466A12878A42D87A63398AA37A89F3CAD943E
+ AE8634B27A2BBC411472ABBDBC9F00039A102090132E92193D961C4D9923629A
+ 26739E2C81A03192A334A2993AA68E3CA78132AB752AB53E136DABBDBC9F0003
+ 9A102090132E92193D961C4D9923629A26739E2C81A03192A334A2993AA68E3C
+ A78132AB752AB53E136DABBDBC9F00039A102090132E92193D961C4D9923629A
+ 26739E2C81A03192A334A2993AA68E3CA78132AB752AB53E136DABBDBC9F0003
+ 9A102090132E92193D961C4D9923629A26739E2C81A03192A334A2993AA68E3C
+ A78132AB752AB53E136DABBDBC9F00039A102090132E92193D961C4D9923629A
+ 26739E2C81A03192A334A2993AA68E3CA78132AB752AB53E136DABBDBC9F0003
+ 9A102090132E92193D961C4D9923629A26739E2C81A03192A334A2993AA68E3C
+ A78132AB752AB53E136DABBDBC9F00039A102090132E92193D961C4D9923629A
+ 26739E2C81A03192A334A2993AA68E3CA78132AB752AB53E136DABBDBC9F0003
+ 9A102090132E92193D961C4D9923629A26739E2C81A03192A334A2993AA68E3C
+ A78132AB752AB53E136DABBDBC9F00039A102090132E92193D961C4D9923629A
+ 26739E2C81A03192A334A2993AA68E3CA78132AB752AB53E136DABBDBC9F0003
+ 9A102090132E92193D961C4D9923629A26739E2C81A03192A334A2993AA68E3C
+ A78132AB752AB53E136DABBDBC9F00039A102090132E92193D961C4D9923629A
+ 26739E2C81A03192A334A2993AA68E3CA78132AB752AB53E136DABBDBCA60004
+ A01021961430981A409C1D509F2466A12878A42D87A63398AA37A89F3CAD943E
+ AE8634B27A2BBC411472B1BEBD5C0000600A145A0C1D5B0F265D11305F163D60
+ 1848621B51641E5B6621655F2468582568501F6A491A71260C44}
+ ParentShowHint = False
+ ShowHint = True
+ Transparent = False
+ OnClick = mnuSmoothPaletteClick
+ end
+ object btnPaste: TSpeedButton
+ Left = 373
+ Top = 82
+ Width = 23
+ Height = 22
+ Hint = 'Paste gradient from clipboard'
+ Anchors = [akTop, akRight]
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000000000000000000000000000000000000FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFF0EF00FFF0E000FFF0
+ EF00FFF0EF00FFF0EF00FFF0F000FFFFF00000000000FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFF0E000D0703F00D070
+ 3F00D0703000D0601000D0602000FFF0EF0000000000FF00FF00FF00FF00FF00
+ FF000000000000000000000000000000000000000000FFEFE000D0703F00FFA7
+ 7000C2E9FF0040AEF700E0AF8000FFEFDF0000000000FF00FF00FF00FF000000
+ 000056B9F50056B9F50056B9F50056B9F50000000000FFE0DF00D0703F00FFA7
+ 7000C2E9FF0040AEF700E08F4F00FFE0D00000000000FF00FF00FF00FF000000
+ 000056B9F50056B9F50056B9F50056B9F50000000000FFE0D000D0703F00FFA7
+ 7000C2E9FF0040AEF700E08F5000FFE0CF0000000000FF00FF00FF00FF000000
+ 000056B9F50056B9F50056B9F50056B9F50000000000FFDFCF00D0703F00FFA7
+ 7000C2E9FF0040AEF700F0B08F00FFDFCF0000000000FF00FF00FF00FF000000
+ 000056B9F50056B9F50056B9F50056B9F50000000000FFDFC000D0703F00FFA7
+ 7000C2E9FF0000000000000000000000000000000000FF00FF00FF00FF000000
+ 000056B9F50056B9F50056B9F50056B9F50000000000FFDFC000D0601F00D070
+ 3F00E07F3F0000000000F0A07F0000000000FF00FF00FF00FF00FF00FF000000
+ 000056B9F50056B9F50056B9F50056B9F50000000000FFE0D000FFDFC000FFD0
+ C000FFD0C0000000000000000000FF00FF00FF00FF00FF00FF00FF00FF000000
+ 000056B9F5000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF000000
+ 000056B9F50000000000BBE5F900BBE5F900BBE5F900BBE5F900BBE5F900BBE5
+ F9000000000056B9F50000000000FF00FF00FF00FF00FF00FF00FF00FF000000
+ 000056B9F50056B9F50000000000BBE5F9000000000000000000BBE5F9000000
+ 000056B9F50056B9F50000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF0000000000000000000000000000000000BBE5F900BBE5F900000000000000
+ 00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF0000000000000000000000000000000000FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
+ ParentShowHint = False
+ ShowHint = True
+ Transparent = False
+ OnClick = btnPasteClick
+ end
+ object btnCopy: TSpeedButton
+ Left = 350
+ Top = 82
+ Width = 23
+ Height = 22
+ Hint = 'Copy gradient to clipboard'
+ Anchors = [akTop, akRight]
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000000000000000000000000000000000000FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+ 0000FFF0EF00FFF0E000FFF0EF00FFF0EF00FFF0EF00FFF0F000FFFFF0000000
+ 0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+ 0000FFF0E000D0602000D0703000D0703000D0601000D0602000FFF0EF000000
+ 0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
+ 0000FFEFE000D0703F00C2E9FF00000000000000000000000000000000000000
+ 000000000000000000000000000000000000FF00FF00FF00FF00FF00FF000000
+ 0000FFE0DF00D0703F00C2E9FF0000000000FFF0EF00FFF0E000FFF0EF00FFF0
+ EF00FFF0EF00FFF0F000FFFFF00000000000FF00FF00FF00FF00FF00FF000000
+ 0000FFE0D000D0703F00C2E9FF0000000000FFF0E000D0703F00D0703F00D070
+ 3000D0601000D0602000FFF0EF0000000000FF00FF00FF00FF00FF00FF000000
+ 0000FFDFCF00D0703F00C2E9FF0000000000FFEFE000D0703F00FFA77000C2E9
+ FF0040AEF700E0AF8000FFEFDF0000000000FF00FF00FF00FF00FF00FF000000
+ 0000FFDFC000D0703F00C2E9FF0000000000FFE0DF00D0703F00FFA77000C2E9
+ FF0040AEF700E08F4F00FFE0D00000000000FF00FF00FF00FF00FF00FF000000
+ 0000FFDFC000D0703F00D0703F0000000000FFE0D000D0703F00FFA77000C2E9
+ FF0040AEF700E08F5000FFE0CF0000000000FF00FF00FF00FF00FF00FF000000
+ 0000FFE0D000FFDFC000FFD0C00000000000FFDFCF00D0703F00FFA77000C2E9
+ FF0040AEF700F0B08F00FFDFCF0000000000FF00FF00FF00FF00FF00FF000000
+ 000000000000000000000000000000000000FFDFC000D0703F00FFA77000C2E9
+ FF0000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF0000000000FFDFC000D0601F00D0703F00E07F
+ 3F0000000000F0A07F0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF0000000000FFE0D000FFDFC000FFD0C000FFD0
+ C0000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00000000000000000000000000000000000000
+ 000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
+ ParentShowHint = False
+ ShowHint = True
+ Transparent = False
+ OnClick = btnCopyClick
+ end
+ object btnColorPreset: TSpeedButton
+ Left = 4
+ Top = 82
+ Width = 109
+ Height = 22
+ Hint = 'Click to choose random preset'
+ Caption = 'Preset'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFF9F9F99E9E9EA3A7A69F9F9FC4C3C3EFEEEEFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A0C6C6C5EAFAF9D7
+ EAE8BEC7C59B9D9DAFAFAEDAD9DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFA7A7A7B9B9B9E7E6E7E3F8F7B5C1BE838784D9E9E6C6D0CDA6ACAA9F9F
+ A0BBBBBBF5F5F5FFFFFFFFFFFFFFFFFFB0B0B0A8A8A8DEDDDDDCDCDCE3F9F7BA
+ C9C7403D3CC2D3D1EDFFFCCAD3CFC0C5C1B8BDBA959595FFFFFFFFFFFFBDBDBD
+ 9A9A9AD5D5D5D4D5D5DDDDDDDBEFEEE1FDFBDFF3F2C2D1CECBD9D69B9B993932
+ 31D5DDD9939594FFFFFFFFFFFF878787C7C7C7BEBDBDCCCACADDDDDDE1F7F6C7
+ DBDACBDDDCA2A7A6352F2EBFCDC99AA19DD0D9D5949594FFFFFFFFFFFF8C8D8D
+ CCCDCD544C4C9F9D9DE3E3E3E5FDFDA9B4B4332C2CBCCBCB9BA5A4CFE0DDECFE
+ FAE1EEE98F908FFFFFFFFFFFFF8A8A8AC3C3C38C8A8AC0C1C1E2E1E1F0FCFCE1
+ F8F79FAEAECBE3E1EFFFFFABB0AF6F6E6DDBEAE7949997FFFFFFFFFFFF888888
+ C1C1C1CDCDCDD6D6D6F3F3F3FAF8F8FAF9FAFDFFFFE6F8F7DEF6F4B6C1C04644
+ 44C7D5D29DA2A1FFFFFFFFFFFF898989C0C0C0C2C2C2F2F2F2EDECEC67626274
+ 6D6EFDFBFBF6F6F6EEF2F2EAF5F4DBEBE8E2F4EFA1A6A5FFFFFFFFFFFF868686
+ BEBEBEE3E3E3FFFFFFF6F5F5A5A5A5A7A5A5F3F2F2F0EFEFEDEBEBEBE9E9EFEF
+ EFF8FDFB9A9D9BFFFFFFFFFFFF8D8D8DEDEDEDFFFFFFFAFAFAFFFFFFE8E7E765
+ 5F5F817C7CF4F4F4ECECECE6E6E6F1F0F0AFAEAEA3A3A3FFFFFFFFFFFF858585
+ E9E9E9FEFEFEFFFFFFFFFFFFEFEEEEA09E9E999595E0DFDFEAEBEBF0F0F0ABAB
+ ABA3A3A3FEFEFEFFFFFFFFFFFFD2D2D2969696979797BBBBBBE9E9E9FFFFFFCE
+ CCCC423E3E999696FBFBFBA4A4A4A9A9A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFF1F1F1B5B5B5999999979797BDBDBDC7C7C7E5E5E5A0A0A0B1B1B1FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE1E1E1B3
+ B3B39797978E8E8EB4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ Layout = blGlyphRight
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnColorPresetClick
+ end
+ object btnSelected: TSpeedButton
+ Left = 327
+ Top = 82
+ Width = 23
+ Height = 22
+ Hint = 'Change selected area'
+ Anchors = [akTop, akRight]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000A4CABA8AAE9C
+ 8DA5958F9B8C92928596887D977F749279768B767C877686857991817A9B9290
+ B2EFEFEFF8F8F8FDFDFDE3FBEFE6F7EBEAF2E8EEEEE5F3EAE1F7E5DEF5E3E1F1
+ E2E6EDE1ECE8E0F1E4DFF6767A9A647081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC909EA3346574D4D6
+ D6FFFFFFFFFFFFFFFFFFFFFFFFE0FFF3F4FFFBFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFE0E2E29DAAAF66AFC6658C98FFFFFFFBFBFFD1D1FFF7F7FFBCFFE44CFFB7
+ 6EFFC5FFFFFFFFFFFFFFFFFFFFFFFFF2F2F23B3C3C4C5F66348FABE2E4E5FFFF
+ FF8F8FFF4C4CFF8F8FFFB8FFE34CFFB768FFC3FFFFFFFFFFFFFFFFFFFDFDFD58
+ 58583C3C3C3A3A3A656D6FFFFFFFFFFFFF9696FF4C4CFF9696FFFFFFFFD8FFEF
+ F0FFF9FFFFFFFFFFFFFFFFFF7F7F7F4A4A4A393939515151FBFBFBFFFFFFFFFF
+ FFFBFBFFDEDEFFFEFEFFE4FAE47BE57BAEEFAEFFFFFFFFFFFFAAAAAA4C4C4C2F
+ 2F2F4A4A4AEBEBEBFFFFFFFFFFFFFFFFFFE8C5F3C46CE2E6C1F3A9EEA94CDB4C
+ 56DD56FFFFFFCDCDCD5A5A5A2727274B4B4BD2D2D2FFFFFFFFFFFFFFFFFFFFFF
+ FFCD83E6B74CDBCA7AE4EDFBED8BE88BBCF2BCE7E7E78E8E8E2B2B2B474747B2
+ B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2DFF9D493E9F0DAF8FFFFFFFFFFFF
+ DEDEBA5C5C4C3333314A4A4A959595FFFFFFFFFFFFFFFFFFFFFFFFF5E6F0C46C
+ A7D391BDFFFFFFFFFFFFFFFFFFFFFFFF53533736362637372B737373FBF1EDFF
+ FFFFFFFFFFF7EDF1FBF6F8E4BAD6B74C94B84F96FBF5F9FFFFFFFFFFFF949494
+ 4A4A4531312A41413CE1A490DB704CEDB9A7F0DAE1B95174C06282F9F0F5D89E
+ C5E6C0D9FFFFFFFFFFFFBABABA9898986C6C6C323232E3E3E3E6997FDB704CEA
+ AB96ECCFD9B74C70B95275FDF9FAFFFFFFFFFFFFFFFFFFFFFFFF4949492F2F2F
+ 898989C3C3C3FFFFFFFCF3F0F3D1C6FEFBFAFFFFFFECD1DAF4E2E8FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFD7D7D75050509A9A9AFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentShowHint = False
+ ShowHint = True
+ Transparent = False
+ OnClick = btnSelectedClick
+ OnMouseDown = btnSelectedMouseDown
+ end
+ object GradSelection: TPaintBox
+ Left = 1
+ Top = 43
+ Width = 438
+ Height = 7
+ OnPaint = GradSelectionPaint
+ end
+ object GradientPnl: TPanel
+ Left = 0
+ Top = 0
+ Width = 443
+ Height = 40
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clAppWorkSpace
+ TabOrder = 0
+ object GradientImage: TImage
+ Left = 1
+ Top = 1
+ Width = 435
+ Height = 33
+ Cursor = crHandPoint
+ Hint =
+ 'Right-click for context menu, Double click to randomize, Drag to' +
+ ' rotate gradient, Ctrl + Drag to stretch the palette'
+ Center = True
+ Constraints.MinHeight = 14
+ ParentShowHint = False
+ PopupMenu = GradientPopup
+ ShowHint = True
+ Stretch = True
+ OnDblClick = GradientImageDblClick
+ OnMouseDown = GradImageMouseDown
+ OnMouseLeave = GradientImageMouseLeave
+ OnMouseMove = GradImageMouseMove
+ OnMouseUp = GradImageMouseUp
+ end
+ end
+ object ScrollBar: TScrollBar
+ Left = 120
+ Top = 61
+ Width = 179
+ Height = 15
+ LargeChange = 16
+ Max = 128
+ Min = -128
+ PageSize = 0
+ TabOrder = 1
+ OnChange = ScrollBarChange
+ OnScroll = ScrollBarScroll
+ end
+ object cmbPalette: TComboBox
+ Left = 115
+ Top = 83
+ Width = 210
+ Height = 21
+ BevelInner = bvLowered
+ BevelOuter = bvRaised
+ Style = csOwnerDrawFixed
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Color = clBlack
+ DropDownCount = 20
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWhite
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ItemHeight = 15
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 2
+ OnChange = cmbPaletteChange
+ OnDrawItem = cmbPaletteDrawItem
+ Items.Strings = (
+ 'south-sea-bather'
+ 'sky-flesh'
+ 'blue-bather'
+ 'no-name'
+ 'pillows'
+ 'mauve-splat'
+ 'facial-treescape 6'
+ 'fasion-bug'
+ 'leafy-face'
+ 'mouldy-sun'
+ 'sunny-harvest'
+ 'peach-tree'
+ 'fire-dragon'
+ 'ice-dragon'
+ 'german-landscape'
+ 'no-name'
+ 'living-mud-bomb'
+ 'cars'
+ 'unhealthy-tan'
+ 'daffodil'
+ 'rose'
+ 'healthy-skin'
+ 'orange'
+ 'white-ivy'
+ 'summer-makeup'
+ 'glow-buzz'
+ 'deep-water'
+ 'afternoon-beach'
+ 'dim-beach'
+ 'cloudy-brick'
+ 'burning-wood'
+ 'aquatic-garden'
+ 'no-name'
+ 'fall-quilt'
+ 'night-blue-sky'
+ 'shadow-iris'
+ 'solid-sky'
+ 'misty-field'
+ 'wooden-highlight'
+ 'jet-tundra'
+ 'pastel-lime'
+ 'hell'
+ 'indian-coast'
+ 'dentist-decor'
+ 'greenland'
+ 'purple-dress'
+ 'no-name'
+ 'spring-flora'
+ 'andi'
+ 'gig-o835'
+ 'rie02'
+ 'rie05'
+ 'rie11'
+ 'etretat.ppm'
+ 'the-hollow-needle-at-etretat.ppm'
+ 'rouen-cathedral-sunset.ppm'
+ 'the-houses-of-parliament.ppm'
+ 'starry-night.ppm'
+ 'water-lilies-sunset.ppm'
+ 'gogh.chambre-arles.ppm'
+ 'gogh.entrance.ppm'
+ 'gogh.the-night-cafe.ppm'
+ 'gogh.vegetable-montmartre.ppm'
+ 'matisse.bonheur-vivre.ppm'
+ 'matisse.flowers.ppm'
+ 'matisse.lecon-musique.ppm'
+ 'modigliani.nude-caryatid.ppm'
+ 'braque.instruments.ppm'
+ 'calcoast09.ppm'
+ 'dodge102.ppm'
+ 'ernst.anti-pope.ppm'
+ 'ernst.ubu-imperator.ppm'
+ 'fighting-forms.ppm'
+ 'fog25.ppm'
+ 'geyser27.ppm'
+ 'gris.josette.ppm'
+ 'gris.landscape-ceret.ppm'
+ 'kandinsky.comp-9.ppm'
+ 'kandinsky.yellow-red-blue.ppm'
+ 'klee.insula-dulcamara.ppm'
+ 'nile.ppm'
+ 'picasso.jfille-chevre.ppm'
+ 'pollock.lavender-mist.ppm'
+ 'yngpaint.ppm')
+ end
+ object txtVal: TEdit
+ Left = 306
+ Top = 59
+ Width = 49
+ Height = 18
+ Anchors = [akTop, akRight]
+ AutoSize = False
+ TabOrder = 3
+ Text = '0'
+ OnExit = txtValExit
+ OnKeyPress = txtValKeyPress
+ end
+ object btnReset: TButton
+ Left = 363
+ Top = 57
+ Width = 79
+ Height = 22
+ Anchors = [akTop, akRight]
+ Caption = 'Reset'
+ TabOrder = 4
+ OnClick = btnResetClick
+ end
+ object GradStatusBar: TStatusBar
+ Left = 0
+ Top = 108
+ Width = 443
+ Height = 18
+ Panels = <
+ item
+ Alignment = taRightJustify
+ Width = 75
+ end
+ item
+ Style = psOwnerDraw
+ Width = 40
+ end
+ item
+ Alignment = taRightJustify
+ Width = 75
+ end
+ item
+ Alignment = taCenter
+ Style = psOwnerDraw
+ Width = 40
+ end
+ item
+ Alignment = taRightJustify
+ Width = 75
+ end
+ item
+ Alignment = taCenter
+ Style = psOwnerDraw
+ Width = 40
+ end
+ item
+ Width = 40
+ end>
+ OnDblClick = GradStatusBarDblClick
+ OnDrawPanel = GradStatusBarDrawPanel
+ end
+ object btnMenu: TButton
+ Left = 4
+ Top = 57
+ Width = 109
+ Height = 22
+ Caption = 'Rotate'
+ DropDownMenu = scrollModePopup
+ Style = bsSplitButton
+ TabOrder = 6
+ OnClick = btnMenuClick
+ end
+ end
+ object TabSize: TTabSheet
+ Caption = 'Image Size'
+ ImageIndex = 14
+ object gbSize: TGroupBox
+ Left = 1
+ Top = 5
+ Width = 188
+ Height = 105
+ Caption = 'Size in pixels'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 0
+ DesignSize = (
+ 188
+ 105)
+ object lblRatio: TLabel
+ Left = 5
+ Top = 78
+ Width = 56
+ Height = 13
+ Caption = 'Aspect ratio'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object pnlWidth: TPanel
+ Left = 4
+ Top = 19
+ Width = 88
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Width'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlHeight: TPanel
+ Left = 4
+ Top = 45
+ Width = 88
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Height'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtHeight: TComboBox
+ Left = 91
+ Top = 45
+ Width = 78
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ Text = '384'
+ OnChange = txtHeightChange
+ OnKeyPress = txtSizeKeyPress
+ Items.Strings = (
+ '384'
+ '400'
+ '480'
+ '512'
+ '600'
+ '768'
+ '960'
+ '1024')
+ end
+ object txtWidth: TComboBox
+ Left = 91
+ Top = 19
+ Width = 78
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 4
+ Text = '512'
+ OnChange = txtWidthChange
+ OnKeyPress = txtSizeKeyPress
+ Items.Strings = (
+ '512'
+ '640'
+ '800'
+ '1024'
+ '1280')
+ end
+ object cbAspectRatio: TComboBox
+ Left = 70
+ Top = 75
+ Width = 113
+ Height = 21
+ Style = csDropDownList
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ItemIndex = 0
+ ParentFont = False
+ TabOrder = 3
+ Text = 'Custom'
+ OnChange = cbAspectRatioChange
+ Items.Strings = (
+ 'Custom'
+ 'Maintain aspect ratio'
+ '3 : 2 '
+ '4 : 3 '
+ '5 : 4 '
+ '16 : 9'
+ '16 : 10'
+ '21 : 9 ')
+ end
+ end
+ object gbPresets: TGroupBox
+ Left = 194
+ Top = 5
+ Width = 132
+ Height = 105
+ Caption = 'Presets'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ object btnSet1: TSpeedButton
+ Left = 102
+ Top = 18
+ Width = 25
+ Height = 22
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFEFCECFC36465AA5556A452539F4F509A4D4D94
+ 4A4A8F4747894444834141783B3C783B3C7239396E3637FF00FFFF00FFCF6B6C
+ F38E8FE68081AA4424473221C3B4ABC6BBB3CAC1BCCEC8C4564D489E3E339C3D
+ 36983931723939FF00FFFF00FFD16F70FF999AEC8687E68081715B4B473C348D
+ 7868EDE0D8F1E7E08F7F73A34135A2423C9C3D35783B3CFF00FFFF00FFD47576
+ FF9FA0F59091EC8687715B4B000000473C34E9D9CEECDDD4857467AE4B43AA49
+ 44A3423C7D3E3EFF00FFFF00FFD77B7CFFA9AAFB9FA0F59394715B4B715B4B71
+ 5B4B715B4B7662527D6A5BBA5654B24F4CAA4944834141FF00FFFF00FFDB8384
+ FFB3B4FFADAEFCA3A4F48E8FEC8687E68081DF797AD77172D16B6CC15D5CBA56
+ 54B2504C894444FF00FFFF00FFDF8A8BFFBBBCFFB6B7C96360C45E56BE584BB8
+ 523FB34D34AD4728A7411CA13B11C15D5CBA56548F4747FF00FFFF00FFE29192
+ FFBDBECC6667FFFFFFFFFFFFFBF8F6F6EEEAF0E5DEEADBD2E5D1C6E1CABDA13B
+ 11C25D5C944A4AFF00FFFF00FFE59798FFBDBED36D6EFFFFFFFFFFFFFFFFFFFB
+ F8F6F6EEEAF0E5DEEADBD2E5D1C6A7411CCC67679A4D4DFF00FFFF00FFE99E9F
+ FFBDBEDC7677FFFFFFFFFFFFFFFFFFFFFFFFFBF8F6F6EEEAF0E5DEEADBD2AD47
+ 28D771729F4F50FF00FFFF00FFEDA6A7FFBDBEE68081FFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFBF8F6F6EEEAF0E5DEB34D34DF797AA45253FF00FFFF00FFF0ACAD
+ FFBDBEEF898AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8F6F6EEEAB852
+ 3F673333AA5556FF00FFFF00FFF3B2B3FFBDBEF89293FFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFBF8F6BE584BB05859B05859FF00FFFF00FFF5B6B7
+ F5B6B7F3B2B3F1ADAEEEA7A8EAA1A2E79A9BE49394E08E8FDD8788DA8081D67A
+ 7BD37475D16F70FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnSet1Click
+ end
+ object btnSet2: TSpeedButton
+ Left = 102
+ Top = 47
+ Width = 25
+ Height = 22
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFEFCECFC36465AA5556A452539F4F509A4D4D94
+ 4A4A8F4747894444834141783B3C783B3C7239396E3637FF00FFFF00FFCF6B6C
+ F38E8FE68081AA4424473221C3B4ABC6BBB3CAC1BCCEC8C4564D489E3E339C3D
+ 36983931723939FF00FFFF00FFD16F70FF999AEC8687E68081715B4B473C348D
+ 7868EDE0D8F1E7E08F7F73A34135A2423C9C3D35783B3CFF00FFFF00FFD47576
+ FF9FA0F59091EC8687715B4B000000473C34E9D9CEECDDD4857467AE4B43AA49
+ 44A3423C7D3E3EFF00FFFF00FFD77B7CFFA9AAFB9FA0F59394715B4B715B4B71
+ 5B4B715B4B7662527D6A5BBA5654B24F4CAA4944834141FF00FFFF00FFDB8384
+ FFB3B4FFADAEFCA3A4F48E8FEC8687E68081DF797AD77172D16B6CC15D5CBA56
+ 54B2504C894444FF00FFFF00FFDF8A8BFFBBBCFFB6B7C96360C45E56BE584BB8
+ 523FB34D34AD4728A7411CA13B11C15D5CBA56548F4747FF00FFFF00FFE29192
+ FFBDBECC6667FFFFFFFFFFFFFBF8F6F6EEEAF0E5DEEADBD2E5D1C6E1CABDA13B
+ 11C25D5C944A4AFF00FFFF00FFE59798FFBDBED36D6EFFFFFFFFFFFFFFFFFFFB
+ F8F6F6EEEAF0E5DEEADBD2E5D1C6A7411CCC67679A4D4DFF00FFFF00FFE99E9F
+ FFBDBEDC7677FFFFFFFFFFFFFFFFFFFFFFFFFBF8F6F6EEEAF0E5DEEADBD2AD47
+ 28D771729F4F50FF00FFFF00FFEDA6A7FFBDBEE68081FFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFBF8F6F6EEEAF0E5DEB34D34DF797AA45253FF00FFFF00FFF0ACAD
+ FFBDBEEF898AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8F6F6EEEAB852
+ 3F673333AA5556FF00FFFF00FFF3B2B3FFBDBEF89293FFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFBF8F6BE584BB05859B05859FF00FFFF00FFF5B6B7
+ F5B6B7F3B2B3F1ADAEEEA7A8EAA1A2E79A9BE49394E08E8FDD8788DA8081D67A
+ 7BD37475D16F70FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnSet2Click
+ end
+ object btnSet3: TSpeedButton
+ Left = 102
+ Top = 76
+ Width = 25
+ Height = 22
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFEFCECFC36465AA5556A452539F4F509A4D4D94
+ 4A4A8F4747894444834141783B3C783B3C7239396E3637FF00FFFF00FFCF6B6C
+ F38E8FE68081AA4424473221C3B4ABC6BBB3CAC1BCCEC8C4564D489E3E339C3D
+ 36983931723939FF00FFFF00FFD16F70FF999AEC8687E68081715B4B473C348D
+ 7868EDE0D8F1E7E08F7F73A34135A2423C9C3D35783B3CFF00FFFF00FFD47576
+ FF9FA0F59091EC8687715B4B000000473C34E9D9CEECDDD4857467AE4B43AA49
+ 44A3423C7D3E3EFF00FFFF00FFD77B7CFFA9AAFB9FA0F59394715B4B715B4B71
+ 5B4B715B4B7662527D6A5BBA5654B24F4CAA4944834141FF00FFFF00FFDB8384
+ FFB3B4FFADAEFCA3A4F48E8FEC8687E68081DF797AD77172D16B6CC15D5CBA56
+ 54B2504C894444FF00FFFF00FFDF8A8BFFBBBCFFB6B7C96360C45E56BE584BB8
+ 523FB34D34AD4728A7411CA13B11C15D5CBA56548F4747FF00FFFF00FFE29192
+ FFBDBECC6667FFFFFFFFFFFFFBF8F6F6EEEAF0E5DEEADBD2E5D1C6E1CABDA13B
+ 11C25D5C944A4AFF00FFFF00FFE59798FFBDBED36D6EFFFFFFFFFFFFFFFFFFFB
+ F8F6F6EEEAF0E5DEEADBD2E5D1C6A7411CCC67679A4D4DFF00FFFF00FFE99E9F
+ FFBDBEDC7677FFFFFFFFFFFFFFFFFFFFFFFFFBF8F6F6EEEAF0E5DEEADBD2AD47
+ 28D771729F4F50FF00FFFF00FFEDA6A7FFBDBEE68081FFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFBF8F6F6EEEAF0E5DEB34D34DF797AA45253FF00FFFF00FFF0ACAD
+ FFBDBEEF898AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8F6F6EEEAB852
+ 3F673333AA5556FF00FFFF00FFF3B2B3FFBDBEF89293FFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFBF8F6BE584BB05859B05859FF00FFFF00FFF5B6B7
+ F5B6B7F3B2B3F1ADAEEEA7A8EAA1A2E79A9BE49394E08E8FDD8788DA8081D67A
+ 7BD37475D16F70FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnSet3Click
+ end
+ object btnPreset1: TButton
+ Left = 6
+ Top = 19
+ Width = 95
+ Height = 20
+ Caption = 'Preset 1'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ OnClick = btnPreset1Click
+ end
+ object btnPreset2: TButton
+ Left = 6
+ Top = 48
+ Width = 95
+ Height = 20
+ Caption = 'Preset 2'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ OnClick = btnPreset2Click
+ end
+ object btnPreset3: TButton
+ Left = 6
+ Top = 77
+ Width = 95
+ Height = 20
+ Caption = 'Preset 3'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 2
+ OnClick = btnPreset3Click
+ end
+ end
+ object gbChange: TGroupBox
+ Left = 330
+ Top = 5
+ Width = 110
+ Height = 105
+ Caption = 'Output '
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ DesignSize = (
+ 110
+ 105)
+ object btnApplySize: TBitBtn
+ Left = 6
+ Top = 66
+ Width = 99
+ Height = 25
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Apply'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnClick = btnApplySizeClick
+ end
+ object chkResizeMain: TCheckBox
+ AlignWithMargins = True
+ Left = 8
+ Top = 19
+ Width = 95
+ Height = 40
+ Alignment = taLeftJustify
+ Caption = 'Resize Main Window'
+ Checked = True
+ Constraints.MinHeight = 11
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 0
+ WordWrap = True
+ end
+ end
+ end
+ object TabCurves: TTabSheet
+ Caption = 'Curves'
+ ImageIndex = 69
+ object CurvesPanel: TPanel
+ Left = 3
+ Top = 1
+ Width = 323
+ Height = 97
+ BevelOuter = bvLowered
+ Color = clBlack
+ ParentBackground = False
+ TabOrder = 0
+ end
+ object tbWeightLeft: TScrollBar
+ Left = 111
+ Top = 67
+ Width = 75
+ Height = 15
+ Max = 160
+ PageSize = 0
+ Position = 10
+ TabOrder = 1
+ Visible = False
+ OnChange = WeightChange
+ OnScroll = WeightScroll
+ end
+ object tbWeightRight: TScrollBar
+ Left = 111
+ Top = 83
+ Width = 129
+ Height = 15
+ Max = 160
+ PageSize = 0
+ Position = 10
+ TabOrder = 2
+ Visible = False
+ OnChange = WeightChange
+ OnScroll = WeightScroll
+ end
+ object Panel5: TPanel
+ Left = 332
+ Top = 3
+ Width = 108
+ Height = 21
+ Cursor = crHandPoint
+ Alignment = taLeftJustify
+ BevelOuter = bvNone
+ Caption = ' Selected curve:'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object cbChannel: TComboBox
+ Left = 332
+ Top = 30
+ Width = 107
+ Height = 21
+ Style = csDropDownList
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ItemIndex = 0
+ ParentFont = False
+ TabOrder = 4
+ Text = 'Overall'
+ OnChange = curveChange
+ Items.Strings = (
+ 'Overall'
+ 'Red'
+ 'Green'
+ 'Blue')
+ end
+ object btnResetCurves: TButton
+ Left = 332
+ Top = 75
+ Width = 107
+ Height = 21
+ Caption = 'Reset'
+ TabOrder = 5
+ OnClick = btnResetCurvesClick
+ end
+ object CurvesStatusBar: TStatusBar
+ Left = 0
+ Top = 107
+ Width = 443
+ Height = 19
+ Panels = <>
+ SimplePanel = True
+ end
+ end
+ end
+ object pnlPitch: TPanel
+ Left = 232
+ Top = 34
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ Hint =
+ 'Click and drag to change value | | Angle (in degrees) of rotat' +
+ 'ion around X-axis'
+ BevelOuter = bvLowered
+ Caption = ' Pitch'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 2
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlYaw: TPanel
+ Left = 232
+ Top = 58
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ Hint =
+ 'Click and drag to change value | | Angle (in degrees) of rotati' +
+ 'on around Z-axis'
+ BevelOuter = bvLowered
+ Caption = ' Yaw'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlPersp: TPanel
+ Left = 232
+ Top = 130
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ Hint =
+ 'Click and drag to change value | Strength of perspective distor' +
+ 'tion'
+ BevelOuter = bvLowered
+ Caption = ' Perspective'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtPitch: TEdit
+ Left = 336
+ Top = 34
+ Width = 120
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 6
+ Text = '0'
+ OnEnter = txtCamEnter
+ OnExit = txtCamPitchExit
+ OnKeyPress = txtCamPitchKeyPress
+ end
+ object txtYaw: TEdit
+ Left = 336
+ Top = 58
+ Width = 120
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 7
+ Text = '0'
+ OnEnter = txtCamEnter
+ OnExit = txtCamYawExit
+ OnKeyPress = txtCamYawKeyPress
+ end
+ object txtPersp: TEdit
+ Left = 336
+ Top = 130
+ Width = 120
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 8
+ Text = '0'
+ OnEnter = txtCamEnter
+ OnExit = txtCamDistExit
+ OnKeyPress = txtCamDistKeyPress
+ end
+ object pnlMasterScale: TPanel
+ Left = 232
+ Top = 154
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value | Scale factor for the flame'
+ BevelOuter = bvLowered
+ Caption = ' Scale'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 10
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object editPPU: TEdit
+ Left = 336
+ Top = 154
+ Width = 120
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 5
+ Text = '0'
+ OnExit = editPPUValidate
+ OnKeyPress = editPPUKeyPress
+ end
+ object pnlZpos: TPanel
+ Left = 232
+ Top = 106
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value | Height of the 3D-camera'
+ BevelOuter = bvLowered
+ Caption = ' Height'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 11
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtZpos: TEdit
+ Left = 336
+ Top = 106
+ Width = 120
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 9
+ Text = '0'
+ OnEnter = txtCamEnter
+ OnExit = txtCamZposExit
+ OnKeyPress = txtCamZposKeyPress
+ end
+ object pnlDOF: TPanel
+ Left = 232
+ Top = 10
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value | Strength of blurring from edges'
+ BevelOuter = bvLowered
+ Caption = ' Depth blur'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 12
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtDOF: TEdit
+ Left = 336
+ Top = 10
+ Width = 76
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 13
+ Text = '0'
+ OnEnter = txtCamEnter
+ OnExit = txtCamDofExit
+ OnKeyPress = txtCamDofKeyPress
+ end
+ object pnlRoll: TPanel
+ Left = 232
+ Top = 82
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ Hint =
+ 'Click and drag to change value | | Angle (in degrees) of rotati' +
+ 'on around Y-axis'
+ BevelOuter = bvLowered
+ Caption = ' Roll'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 14
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtRoll: TEdit
+ Left = 336
+ Top = 82
+ Width = 120
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 15
+ Text = '0'
+ OnEnter = txtCamEnter
+ OnExit = txtCamRollExit
+ OnKeyPress = txtCamRollKeyPress
+ end
+ object QualityPopup: TPopupMenu
+ Images = MainForm.Buttons
+ Left = 40
+ Top = 16
+ object mnuLowQuality: TMenuItem
+ Caption = 'Low Quality'
+ RadioItem = True
+ OnClick = mnuLowQualityClick
+ end
+ object mnuMediumQuality: TMenuItem
+ Caption = 'Medium Quality'
+ Checked = True
+ RadioItem = True
+ OnClick = mnuMediumQualityClick
+ end
+ object mnuHighQuality: TMenuItem
+ Caption = 'High Quality'
+ RadioItem = True
+ OnClick = mnuHighQualityClick
+ end
+ object N8: TMenuItem
+ Caption = '-'
+ end
+ object mnuInstantPreview: TMenuItem
+ Caption = 'Instant Preview'
+ Checked = True
+ OnClick = mnuInstantPreviewClick
+ end
+ end
+ object ColorDialog: TColorDialog
+ Options = [cdFullOpen]
+ Left = 176
+ Top = 16
+ end
+ object GradientPopup: TPopupMenu
+ Images = MainForm.Buttons
+ Left = 112
+ Top = 16
+ object mnuRandomize: TMenuItem
+ Caption = 'Randomize'
+ OnClick = mnuRandomizeClick
+ end
+ object Smoothize1: TMenuItem
+ Caption = 'Smoothize'
+ OnClick = Smoothize1Click
+ end
+ object N7: TMenuItem
+ Caption = '-'
+ end
+ object mnuInvert: TMenuItem
+ Caption = 'Invert'
+ OnClick = mnuInvertClick
+ end
+ object mnuReverse: TMenuItem
+ Caption = '&Reverse'
+ OnClick = mnuReverseClick
+ end
+ object N15: TMenuItem
+ Caption = '-'
+ end
+ object mnuGreyscale: TMenuItem
+ Caption = 'Greyscale'
+ OnClick = mnuGreyscaleClick
+ end
+ object mnuSepia: TMenuItem
+ Caption = 'Sepia'
+ OnClick = mnuSepiaClick
+ end
+ object N3: TMenuItem
+ Caption = '-'
+ end
+ object Removedarkareas1: TMenuItem
+ Caption = 'Remove dark areas'
+ OnClick = DarkRemoverClick
+ end
+ object SymmetricGradient1: TMenuItem
+ Caption = 'Add symmetry...'
+ object Fliplefthalf1: TMenuItem
+ Caption = 'Flip the left half to the right'
+ OnClick = Fliplefthalf1Click
+ end
+ object Fliprighthalf1: TMenuItem
+ Caption = 'Flip the right half to the left'
+ OnClick = Fliprighthalf1Click
+ end
+ end
+ object N14: TMenuItem
+ Caption = '-'
+ end
+ object AdjustColorFragment: TMenuItem
+ Caption = 'Adjust color fragment...'
+ ImageIndex = 11
+ OnClick = AdjustColorFragmentClick
+ end
+ object N10: TMenuItem
+ Caption = '-'
+ end
+ object mnuSmoothPalette: TMenuItem
+ Caption = 'Smooth Palette...'
+ ImageIndex = 34
+ OnClick = mnuSmoothPaletteClick
+ end
+ object mnuGradientBrowser: TMenuItem
+ Caption = 'Gradient Browser...'
+ ImageIndex = 22
+ OnClick = btnOpenClick
+ end
+ object N4: TMenuItem
+ Caption = '-'
+ end
+ object SaveGradient1: TMenuItem
+ Caption = 'Save Gradient...'
+ ImageIndex = 2
+ OnClick = SaveGradient1Click
+ end
+ object SaveasMapfile1: TMenuItem
+ Caption = 'Save as Map file...'
+ OnClick = SaveasMapfile1Click
+ end
+ object N6: TMenuItem
+ Caption = '-'
+ end
+ object mnuSaveasDefault: TMenuItem
+ Caption = 'Save as Default'
+ OnClick = mnuSaveasDefaultClick
+ end
+ object N5: TMenuItem
+ Caption = '-'
+ end
+ object mnuCopy: TMenuItem
+ Caption = 'Copy'
+ ImageIndex = 10
+ OnClick = btnCopyClick
+ end
+ object mnuPaste: TMenuItem
+ Caption = 'Paste'
+ ImageIndex = 61
+ OnClick = btnPasteClick
+ end
+ end
+ object scrollModePopup: TPopupMenu
+ AutoHotkeys = maManual
+ AutoPopup = False
+ Left = 32
+ Top = 72
+ object mnuRotate: TMenuItem
+ Caption = 'Rotate'
+ OnClick = mnuRotateClick
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object mnuHue: TMenuItem
+ Caption = 'Hue'
+ OnClick = mnuHueClick
+ end
+ object mnuSaturation: TMenuItem
+ Caption = 'Saturation'
+ OnClick = mnuSaturationClick
+ end
+ object mnuLuminance: TMenuItem
+ Caption = 'Luminance'
+ OnClick = mnuLuminanceClick
+ end
+ object mnuBrightness: TMenuItem
+ Caption = 'Brightness'
+ OnClick = mnuBrightnessClick
+ end
+ object Contrast1: TMenuItem
+ Caption = 'Contrast'
+ OnClick = mnuContrastClick
+ end
+ object N2: TMenuItem
+ Caption = '-'
+ end
+ object mnuBlur: TMenuItem
+ Caption = 'Blur'
+ OnClick = mnuBlurClick
+ end
+ object mnuFrequency: TMenuItem
+ Caption = 'Frequency'
+ OnClick = mnuFrequencyClick
+ end
+ object N9: TMenuItem
+ Caption = '-'
+ end
+ object Red1: TMenuItem
+ Caption = 'Red'
+ OnClick = mnuRedClick
+ end
+ object Green1: TMenuItem
+ Caption = 'Green'
+ OnClick = mnuGreenClick
+ end
+ object Blue1: TMenuItem
+ Caption = 'Blue'
+ OnClick = mnuBlueClick
+ end
+ end
+ object SaveDialog: TSaveDialog
+ DefaultExt = 'map'
+ Filter = 'Map files|*.map'
+ Left = 176
+ Top = 64
+ end
+ object SelectedPopup: TPopupMenu
+ Left = 116
+ Top = 70
+ object AdjustSelected: TMenuItem
+ AutoCheck = True
+ Caption = 'Adjust colors using slider'
+ end
+ object N13: TMenuItem
+ Caption = '-'
+ end
+ object LerpRGB: TMenuItem
+ Caption = 'Interpolate RGB values between end points'
+ OnClick = LerpRGBClick
+ end
+ object LerpHSV: TMenuItem
+ Caption = 'Interpolate HSV values between end points'
+ OnClick = LerpHSVClick
+ end
+ object RandomizeSelected: TMenuItem
+ Caption = 'Randomize the selected color area'
+ OnClick = RandomizeSelectedClick
+ end
+ object SmoothizeSelected: TMenuItem
+ Caption = 'Smoothize the selected color area'
+ OnClick = SmoothizeSelectedClick
+ end
+ object mnuSetColor: TMenuItem
+ Caption = 'Set color...'
+ OnClick = mnuSetColorClick
+ end
+ object N11: TMenuItem
+ Caption = '-'
+ end
+ object mnuRGB2BGR: TMenuItem
+ Caption = 'Swap RGB values...'
+ object BGR1: TMenuItem
+ Caption = '> BGR'
+ OnClick = mnuRGB2BGRClick
+ end
+ object BRG1: TMenuItem
+ Tag = 1
+ Caption = '> BRG'
+ OnClick = mnuRGB2BGRClick
+ end
+ object RBG1: TMenuItem
+ Tag = 2
+ Caption = '> RBG'
+ OnClick = mnuRGB2BGRClick
+ end
+ object GRB1: TMenuItem
+ Tag = 3
+ Caption = '> GRB'
+ OnClick = mnuRGB2BGRClick
+ end
+ object GBR1: TMenuItem
+ Tag = 4
+ Caption = '> GBR'
+ OnClick = mnuRGB2BGRClick
+ end
+ end
+ object InvertColors: TMenuItem
+ Caption = 'Invert colors'
+ OnClick = InvertColorsClick
+ end
+ object ReverseFragment: TMenuItem
+ Caption = 'Reverse fragment'
+ OnClick = ReverseFragmentClick
+ end
+ object N12: TMenuItem
+ Caption = '-'
+ end
+ object Copyfragment1: TMenuItem
+ Caption = 'Copy color fragment'
+ OnClick = Copyfragment1Click
+ end
+ object Pastefragment1: TMenuItem
+ Caption = 'Paste color fragment'
+ Enabled = False
+ OnClick = Pastefragment1Click
+ end
+ object Mixcolors: TMenuItem
+ Caption = 'Mix colors of copied and selected fragments '
+ Enabled = False
+ OnClick = MixcolorsClick
+ end
+ end
+end
diff --git a/Forms/Adjust.pas b/Forms/Adjust.pas
new file mode 100644
index 0000000..7608862
--- /dev/null
+++ b/Forms/Adjust.pas
@@ -0,0 +1,3526 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit Adjust;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ExtCtrls, ComCtrls, Buttons, Menus, AppEvnts, CurvesControl,
+ ControlPoint, Cmap, RenderingInterface, Translation;
+
+const
+ WM_UPDATE_PARAMS = WM_APP + 5439;
+
+const
+ PixelCountMax = 32768;
+
+type
+ pRGBTripleArray = ^TRGBTripleArray;
+ TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple;
+
+type
+ TAdjustForm = class(TForm)
+ QualityPopup: TPopupMenu;
+ mnuLowQuality: TMenuItem;
+ mnuMediumQuality: TMenuItem;
+ mnuHighQuality: TMenuItem;
+ ColorDialog: TColorDialog;
+ PrevPnl: TPanel;
+ PreviewImage: TImage;
+ PageControl: TPageControl;
+ TabCamera: TTabSheet;
+ scrollZoom: TScrollBar;
+ txtZoom: TEdit;
+ scrollCenterX: TScrollBar;
+ txtCenterX: TEdit;
+ scrollCenterY: TScrollBar;
+ txtCenterY: TEdit;
+ TabRendering: TTabSheet;
+ scrollGamma: TScrollBar;
+ txtGamma: TEdit;
+ scrollBrightness: TScrollBar;
+ txtBrightness: TEdit;
+ scrollVibrancy: TScrollBar;
+ txtVibrancy: TEdit;
+ ColorPanel: TPanel;
+ TabGradient: TTabSheet;
+ scrollAngle: TScrollBar;
+ txtAngle: TEdit;
+ GradientPnl: TPanel;
+ GradientImage: TImage;
+ ScrollBar: TScrollBar;
+ btnOpen: TSpeedButton;
+ btnSmoothPalette: TSpeedButton;
+ btnPaste: TSpeedButton;
+ btnCopy: TSpeedButton;
+ cmbPalette: TComboBox;
+ GradientPopup: TPopupMenu;
+ mnuRandomize: TMenuItem;
+ N7: TMenuItem;
+ mnuInvert: TMenuItem;
+ mnuReverse: TMenuItem;
+ N3: TMenuItem;
+ mnuSmoothPalette: TMenuItem;
+ mnuGradientBrowser: TMenuItem;
+ N4: TMenuItem;
+ SaveGradient1: TMenuItem;
+ SaveasMapfile1: TMenuItem;
+ N6: TMenuItem;
+ mnuSaveasDefault: TMenuItem;
+ N5: TMenuItem;
+ mnuCopy: TMenuItem;
+ mnuPaste: TMenuItem;
+ scrollModePopup: TPopupMenu;
+ mnuRotate: TMenuItem;
+ N1: TMenuItem;
+ mnuHue: TMenuItem;
+ mnuSaturation: TMenuItem;
+ mnuBrightness: TMenuItem;
+ Contrast1: TMenuItem;
+ N2: TMenuItem;
+ mnuBlur: TMenuItem;
+ mnuFrequency: TMenuItem;
+ SaveDialog: TSaveDialog;
+ TabSize: TTabSheet;
+ btnPreset1: TButton;
+ btnPreset2: TButton;
+ btnPreset3: TButton;
+ btnColorPreset: TSpeedButton;
+ btnApplySize: TBitBtn;
+ txtWidth: TComboBox;
+ txtHeight: TComboBox;
+ N8: TMenuItem;
+ mnuInstantPreview: TMenuItem;
+ pnlZoom: TPanel;
+ pnlXpos: TPanel;
+ pnlYpos: TPanel;
+ pnlAngle: TPanel;
+ pnlGamma: TPanel;
+ pnlBrightness: TPanel;
+ pnlVibrancy: TPanel;
+ chkResizeMain: TCheckBox;
+ pnlPitch: TPanel;
+ pnlYaw: TPanel;
+ pnlPersp: TPanel;
+ txtPitch: TEdit;
+ txtYaw: TEdit;
+ txtPersp: TEdit;
+ pnlMasterScale: TPanel;
+ editPPU: TEdit;
+ pnlZpos: TPanel;
+ txtZpos: TEdit;
+ pnlGammaThreshold: TPanel;
+ txtGammaThreshold: TEdit;
+ btnUndo: TSpeedButton;
+ btnRedo: TSpeedButton;
+ pnlDOF: TPanel;
+ txtDOF: TEdit;
+ btnSet1: TSpeedButton;
+ btnSet2: TSpeedButton;
+ btnSet3: TSpeedButton;
+ Shape1: TShape;
+ txtVal: TEdit;
+ btnReset: TButton;
+ pnlWidth: TPanel;
+ pnlHeight: TPanel;
+ pnlBackground: TPanel;
+ TabCurves: TTabSheet;
+ CurvesPanel: TPanel;
+ tbWeightLeft: TScrollBar;
+ tbWeightRight: TScrollBar;
+ Panel5: TPanel;
+ cbChannel: TComboBox;
+ btnResetCurves: TButton;
+ N9: TMenuItem;
+ Red1: TMenuItem;
+ Green1: TMenuItem;
+ Blue1: TMenuItem;
+ mnuGreyscale: TMenuItem;
+ mnuRGB2BGR: TMenuItem;
+ Smoothize1: TMenuItem;
+ BGR1: TMenuItem;
+ BRG1: TMenuItem;
+ RBG1: TMenuItem;
+ GRB1: TMenuItem;
+ GBR1: TMenuItem;
+ Removedarkareas1: TMenuItem;
+ N10: TMenuItem;
+ SymmetricGradient1: TMenuItem;
+ Fliplefthalf1: TMenuItem;
+ Fliprighthalf1: TMenuItem;
+ GradStatusBar: TStatusBar;
+ btnSelected: TSpeedButton;
+ SelectedPopup: TPopupMenu;
+ LerpRGB: TMenuItem;
+ LerpHSV: TMenuItem;
+ RandomizeSelected: TMenuItem;
+ Copyfragment1: TMenuItem;
+ Pastefragment1: TMenuItem;
+ N11: TMenuItem;
+ Mixcolors: TMenuItem;
+ N12: TMenuItem;
+ InvertColors: TMenuItem;
+ ReverseFragment: TMenuItem;
+ mnuSetColor: TMenuItem;
+ pnlRoll: TPanel;
+ txtRoll: TEdit;
+ AdjustSelected: TMenuItem;
+ N13: TMenuItem;
+ mnuLuminance: TMenuItem;
+ cbAspectRatio: TComboBox;
+ lblRatio: TLabel;
+ AdjustColorFragment: TMenuItem;
+ N14: TMenuItem;
+ mnuSepia: TMenuItem;
+ N15: TMenuItem;
+ gbSize: TGroupBox;
+ gbPresets: TGroupBox;
+ gbChange: TGroupBox;
+ GradSelection: TPaintBox;
+ chkTransparent: TCheckBox;
+ pnlContrast: TPanel;
+ scrollContrast: TScrollBar;
+ txtContrast: TEdit;
+ CurvesStatusBar: TStatusBar;
+ SmoothizeSelected: TMenuItem;
+ btResetZoom: TButton;
+ btnMenu: TButton; // AV: changed from TSpeedButton for auto-drawing the arrow
+ procedure FormCreate(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormDestroy(Sender: TObject);
+ procedure DrawPreview;
+// procedure btnOKClick(Sender: TObject);
+// procedure btnCancelClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure mnuLowQualityClick(Sender: TObject);
+ procedure mnuMediumQualityClick(Sender: TObject);
+ procedure mnuHighQualityClick(Sender: TObject);
+ procedure txtZoomKeyPress(Sender: TObject; var Key: Char);
+ procedure txtZoomExit(Sender: TObject);
+ procedure txtCenterXKeyPress(Sender: TObject; var Key: Char);
+ procedure txtCenterXExit(Sender: TObject);
+ procedure txtCenterYKeyPress(Sender: TObject; var Key: Char);
+ procedure txtCenterYExit(Sender: TObject);
+ procedure txtGammaKeyPress(Sender: TObject; var Key: Char);
+ procedure txtGammaExit(Sender: TObject);
+ procedure txtBrightnessKeyPress(Sender: TObject; var Key: Char);
+ procedure txtBrightnessExit(Sender: TObject);
+ procedure txtVibrancyKeyPress(Sender: TObject; var Key: Char);
+ procedure txtVibrancyExit(Sender: TObject);
+ procedure scrollCameraScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+(*
+ procedure scrollCenterXScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+ procedure scrollCenterYScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+ procedure scrollGammaScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+ procedure scrollBrightnessScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+ procedure scrollVibrancyScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+ procedure scrollAngleScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+*)
+ procedure scrollVibrancyScroll(Sender: TObject);
+ procedure scrollGammaChange(Sender: TObject);
+ procedure scrollBrightnessChange(Sender: TObject);
+ procedure scrollZoomChange(Sender: TObject);
+ procedure scrollCenterXChange(Sender: TObject);
+ procedure scrollCenterYChange(Sender: TObject);
+ procedure ColorPanelClick(Sender: TObject);
+ procedure txtGammaEnter(Sender: TObject);
+ procedure txtBrightnessEnter(Sender: TObject);
+ procedure txtVibrancyEnter(Sender: TObject);
+ procedure txtZoomEnter(Sender: TObject);
+ procedure txtCenterXEnter(Sender: TObject);
+ procedure txtCenterYEnter(Sender: TObject);
+ procedure scrollAngleChange(Sender: TObject);
+ procedure txtAngleEnter(Sender: TObject);
+ procedure txtAngleExit(Sender: TObject);
+ procedure txtAngleKeyPress(Sender: TObject; var Key: Char);
+
+ // --Z-- // gradient functions
+ procedure cmbPaletteChange(Sender: TObject);
+// procedure DrawPalette;
+ procedure btnMenuClick(Sender: TObject);
+ procedure mnuReverseClick(Sender: TObject);
+ procedure mnuInvertClick(Sender: TObject);
+
+ procedure mnuRotateClick(Sender: TObject);
+ procedure mnuHueClick(Sender: TObject);
+ procedure mnuSaturationClick(Sender: TObject);
+ procedure ScrollBarChange(Sender: TObject);
+ procedure mnuBrightnessClick(Sender: TObject);
+ procedure mnuBlurClick(Sender: TObject);
+ procedure btnOpenClick(Sender: TObject);
+ procedure mnuSmoothPaletteClick(Sender: TObject);
+ procedure SaveGradient1Click(Sender: TObject);
+ procedure SaveasMapfile1Click(Sender: TObject);
+ procedure cmbPaletteDrawItem(Control: TWinControl; Index: Integer;
+ Rect: TRect; State: TOwnerDrawState);
+ procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+ procedure btnCopyClick(Sender: TObject);
+ procedure btnPasteClick(Sender: TObject);
+ // procedure ApplicationEventsActivate(Sender: TObject);
+ procedure mnuSaveasDefaultClick(Sender: TObject);
+ procedure mnuRandomizeClick(Sender: TObject);
+ procedure mnuFrequencyClick(Sender: TObject);
+ procedure mnuContrastClick(Sender: TObject);
+
+ procedure GradImageMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure GradImageMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure GradImageMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+
+ procedure btnSet1Click(Sender: TObject);
+ procedure btnSet2Click(Sender: TObject);
+ procedure btnSet3Click(Sender: TObject);
+ procedure btnPreset1Click(Sender: TObject);
+ procedure btnPreset2Click(Sender: TObject);
+ procedure btnPreset3Click(Sender: TObject);
+ procedure txtWidthChange(Sender: TObject);
+ procedure txtHeightChange(Sender: TObject);
+ procedure txtSizeKeyPress(Sender: TObject; var Key: Char);
+ // procedure chkMaintainClick(Sender: TObject);
+ procedure SetMainWindowSize;
+ procedure GetMainWindowSize;
+ procedure btnUndoClick(Sender: TObject);
+ procedure btnRedoClick(Sender: TObject);
+ procedure GradientImageDblClick(Sender: TObject);
+ procedure btnColorPresetClick(Sender: TObject);
+ procedure btnApplySizeClick(Sender: TObject);
+ procedure mnuInstantPreviewClick(Sender: TObject);
+ procedure editPPUKeyPress(Sender: TObject; var Key: Char);
+ procedure editPPUValidate(Sender: TObject);
+
+ procedure DragPanelMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure DragPanelMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure DragPanelMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure DragPanelDblClick(Sender: TObject);
+ procedure FormActivate(Sender: TObject);
+ procedure txtCamEnter(Sender: TObject);
+ procedure txtCamPitchExit(Sender: TObject);
+ procedure txtCamPitchKeyPress(Sender: TObject; var Key: Char);
+ procedure txtCamYawExit(Sender: TObject);
+ procedure txtCamYawKeyPress(Sender: TObject; var Key: Char);
+ procedure txtCamDistExit(Sender: TObject);
+ procedure txtCamDistKeyPress(Sender: TObject; var Key: Char);
+ procedure txtCamZposExit(Sender: TObject);
+ procedure txtCamZposKeyPress(Sender: TObject; var Key: Char);
+ procedure txtCamDofExit(Sender: TObject);
+ procedure txtCamDofKeyPress(Sender: TObject; var Key: Char);
+ procedure PreviewImageMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure PreviewImageMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure PreviewImageMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure PreviewImageDblClick(Sender: TObject);
+ procedure txtGammaThresholdKeyPress(Sender: TObject; var Key: Char);
+ procedure txtGammaThresholdEnter(Sender: TObject);
+ procedure txtGammaThresholdExit(Sender: TObject);
+ procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure btnResetClick(Sender: TObject);
+ procedure txtValKeyPress(Sender: TObject; var Key: Char);
+ procedure txtValExit(Sender: TObject);
+ procedure WeightScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+ procedure WeightChange(Sender: TObject);
+ procedure curveChange(Sender: TObject);
+ procedure btnResetCurvesClick(Sender: TObject);
+ procedure mnuRedClick(Sender: TObject);
+ procedure mnuGreenClick(Sender: TObject);
+ procedure mnuBlueClick(Sender: TObject);
+ procedure mnuGreyscaleClick(Sender: TObject);
+ procedure mnuRGB2BGRClick(Sender: TObject);
+ procedure Smoothize1Click(Sender: TObject);
+ procedure DarkRemoverClick(Sender: TObject);
+ procedure Fliplefthalf1Click(Sender: TObject);
+ procedure Fliprighthalf1Click(Sender: TObject);
+ procedure GradStatusBarDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
+ const Rect: TRect);
+ procedure GradientImageMouseLeave(Sender: TObject);
+ procedure LerpRGBClick(Sender: TObject);
+ procedure LerpHSVClick(Sender: TObject);
+ procedure RandomizeSelectedClick(Sender: TObject);
+ procedure Copyfragment1Click(Sender: TObject);
+ procedure Pastefragment1Click(Sender: TObject);
+ procedure MixcolorsClick(Sender: TObject);
+ procedure InvertColorsClick(Sender: TObject);
+ procedure ReverseFragmentClick(Sender: TObject);
+ procedure mnuSetColorClick(Sender: TObject);
+ procedure txtCamRollExit(Sender: TObject);
+ procedure txtCamRollKeyPress(Sender: TObject; var Key: Char);
+ procedure GradStatusBarDblClick(Sender: TObject);
+ procedure mnuLuminanceClick(Sender: TObject);
+ procedure mnuSepiaClick(Sender: TObject);
+ procedure cbAspectRatioChange(Sender: TObject);
+ procedure ExtSysMenu(var Msg: TMessage); message WM_SysCommand;
+ procedure AdjustColorFragmentClick(Sender: TObject);
+ procedure btnSelectedClick(Sender: TObject);
+ procedure btnSelectedMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure GradSelectionPaint(Sender: TObject);
+ procedure scrollContrastChange(Sender: TObject);
+ procedure txtContrastEnter(Sender: TObject);
+ procedure txtContrastExit(Sender: TObject);
+ procedure txtContrastKeyPress(Sender: TObject; var Key: Char);
+ procedure SmoothizeSelectedClick(Sender: TObject);
+ procedure btResetZoomClick(Sender: TObject);
+ private
+ CurvesControl: TCurvesControl;
+ Resetting: boolean;
+ Render: TRenderer;
+ bm: TBitmap;
+ EditBoxValue: string;
+
+ cp: TControlPoint;
+
+ pnlDragMode, pnlDragged, pnlMM: boolean;
+ pnlDragPos, pnlDragOld: integer;
+ pnlDragValue: double;
+ mousepos: TPoint;
+
+ camDragMode, camDragged, camMM: boolean;
+ camDragPos, camDragOld: TPoint;
+ camDragValueX, camDragValueY: double;
+
+ private // gradient stuff
+ {Palette,} BackupPal: TColorMap;
+ tmpBackupPal: TColorMap;
+ tmpColors: array of array of byte; //integer; // AV
+
+ scrollMode: (modeRotate,
+ modeHue, modeSaturation, modeLuminance,
+ modeBrightness, modeContrast, modeBlur, modeFrequency,
+ modeRed, modeGreen, modeBlue);
+ GradientChanged: boolean;
+ imgDragMode: (imgDragNone, imgDragRotate, imgDragStretch, imgDragSelect);
+ startX: integer; // AV
+ dragX, oldX: integer;
+ oldpos, offset: integer; // for display...? :-\
+
+ const space = ': ';
+
+ procedure Apply;
+ procedure SetCurvesCp(ccp: TControlPoint);
+ function Blur(const radius: integer; const pal: TColorMap; start, last: byte): TColorMap;
+ function Frequency(const times: Integer; const pal: TColorMap): TColorMap;
+ function FrequencySel(const times: Integer; const pal: TColorMap): TColorMap;
+ procedure SaveMap(FileName: string);
+
+ procedure UpdateGradient(Pal: TColorMap);
+
+ private // image size stuff
+ ImageHeight, ImageWidth: integer;
+ Preset: array[1..3] of record
+ Left, Top, Width, Height: integer;
+ end;
+ ratio: double;
+
+ procedure ReadPreset(n: integer);
+ procedure WritePreset(n: integer);
+ function PresetToStr(n: integer): string;
+
+ public
+ PreviewDensity: double;
+ Palette: TColorMap; // AV: moved from private section for some interactive stuff
+ selA, selB: integer; // AV
+ procedure UpdateDisplay(PreviewOnly: boolean = false);
+ procedure UpdateFlame(bBgOnly: boolean = false);
+ procedure CreateScreenShot; // AV
+ end;
+
+var
+ AdjustForm: TAdjustForm;
+
+function GradientInClipboard: boolean;
+procedure RGBToHSV(R, G, B: byte; var H, S, V: real);
+procedure HSVToRGB(H, S, V: real; var Rb, Gb, Bb: integer);
+
+implementation
+
+uses
+ RndFlame, Main, cmapdata, Math, Browser, Editor, Global,
+ Save, Mutate, ClipBrd, GradientHlpr, Registry, Curves, ColorRangeForm;
+
+{$R *.DFM}
+
+procedure TAdjustForm.SetCurvesCp(ccp: TControlPoint);
+begin
+ if CurvesControl = nil then Exit;
+ CurvesControl.SetCp(ccp);
+end;
+
+procedure TAdjustForm.UpdateDisplay(PreviewOnly: boolean = false);
+var
+ pw, ph: integer;
+ r: double;
+begin
+ cp.copy(MainCp);
+ SetCurvesCp(MainCp);
+
+ tbWeightLeft.Position := Round(CurvesControl.WeightLeft * 10);
+ tbWeightRight.Position := Round(CurvesControl.WeightRight * 10);
+
+ pw := PrevPnl.Width -2;
+ ph := PrevPnl.Height -2;
+ if (cp.width / cp.height) > (PrevPnl.Width / PrevPnl.Height) then
+ begin
+ PreviewImage.Width := pw;
+ r := cp.width / PreviewImage.Width;
+ PreviewImage.height := round(cp.height / r);
+ PreviewImage.Left := 1;
+ PreviewImage.Top := (ph - PreviewImage.Height) div 2;
+ end
+ else begin
+ PreviewImage.Height := ph;
+ r := cp.height / PreviewImage.height;
+ PreviewImage.Width := round(cp.Width / r);
+ PreviewImage.Top := 1;
+ PreviewImage.Left := (pw - PreviewImage.Width) div 2;
+ end;
+ cp.AdjustScale(PreviewImage.Width, PreviewImage.Height);
+
+ cp.cmap := MainCp.cmap;
+
+ if not PreviewOnly then begin //***
+
+ Resetting := True; // So the preview doesn't get drawn with these changes..
+ scrollGamma.Position := trunc(cp.Gamma * 100);
+ scrollBrightness.Position := trunc(cp.Brightness * 100);
+ scrollVibrancy.Position := trunc(cp.vibrancy * 100);
+ scrollContrast.Position := trunc(cp.contrast * 100); // AV
+ scrollZoom.Position := trunc(cp.zoom * 1000);
+ scrollAngle.Position := Trunc(cp.FAngle * 18000.0 / PI) mod 36000; // scrollAngle.Max;
+
+ if (abs(cp.Center[0]) < 1000) and (abs(cp.Center[1]) < 1000) then begin
+ scrollCenterX.Position := trunc(cp.Center[0] * 1000);
+ scrollCenterY.Position := trunc(cp.Center[1] * 1000);
+ end else begin
+ scrollCenterX.Position := 0;
+ scrollCenterY.Position := 0;
+ end;
+
+ ColorPanel.color := cp.background[2] shl 16 + cp.background[1] shl 8 + cp.background[0];
+ Shape1.Brush.Color := ColorPanel.Color;
+ //cbColor.text := IntToHex(integer(ColorPanel.Color), 6);
+
+ GetMainWindowSize;
+
+ // gradient
+ if cp.cmapindex >= 0 then
+ cmbPalette.ItemIndex := cp.cmapindex;
+ ScrollBar.Position := 0;
+ Palette := cp.cmap;
+ BackupPal := cp.cmap;
+
+ Resetting := False;
+ editPPU.Text := Format('%.6g', [100*cp.pixels_per_unit/PreviewImage.Width]);
+
+ txtGammaThreshold.Text := Format('%.3g', [cp.gammaThreshRelative]);
+
+ // 3d camera
+ txtPitch.Text := Format('%.6g', [cp.cameraPitch * 180 / PI]);
+ txtYaw.Text := Format('%.6g', [cp.cameraYaw * 180 / PI]);
+ txtRoll.Text := Format('%.6g', [cp.cameraRoll * 180 / PI]); // AV
+ txtPersp.Text := Format('%.6g', [cp.cameraPersp]);
+ txtZpos.Text := Format('%.6g', [cp.cameraZpos]);
+ txtDOF.Text := Format('%.6g', [cp.cameraDof]);
+ end; //***
+ DrawPreview;
+end;
+
+procedure TAdjustForm.UpdateFlame(bBgOnly: boolean = false);
+begin
+ if not bBgOnly then
+ MainForm.StopThread;
+ MainForm.UpdateUndo;
+ MainCp.Copy(cp, true);
+ SetCurvesCp(cp);
+
+ if EditForm.Visible then EditForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+ if CurvesForm.Visible then CurvesForm.SetCp(cp);
+
+ if bBgOnly then
+ MainForm.tbShowAlphaClick(Self)
+ else
+ MainForm.RedrawTimer.enabled := true;
+end;
+
+procedure TAdjustForm.DrawPreview;
+var
+ i: integer;
+ Row: pRGBTripleArray;
+ BitMap: TBitMap;
+begin
+ if Resetting then exit;
+
+ Render.Stop;
+// AdjustScale(cp, PreviewImage.Width, PreviewImage.Height);
+ cp.sample_density := PreviewDensity;
+ cp.spatial_oversample := defOversample;
+ cp.spatial_filter_radius := defFilterRadius;
+ Render.SetCP(cp);
+ Render.Render;
+ BM.Assign(Render.GetImage);
+ PreviewImage.Picture.Graphic := bm;
+
+ if mnuInstantPreview.Checked then PreviewImage.Refresh;
+
+//--begin DrawPalette
+ BitMap := TBitMap.Create;
+ try
+ Bitmap.PixelFormat := pf24bit;
+ BitMap.Width := 256;
+ BitMap.Height := 1;
+ Row := Bitmap.Scanline[0];
+ for i := 0 to 255 do
+ with Row[i] do
+ begin
+ rgbtRed := cp.cmap[i][0];
+ rgbtGreen := cp.cmap[i][1];
+ rgbtBlue := cp.cmap[i][2];
+ end;
+
+ GradientImage.Picture.Graphic := Bitmap;
+ GradientImage.Refresh;
+ finally
+ BitMap.Free;
+ end;
+//--end DrawPalette
+end;
+
+procedure TAdjustForm.FormCreate(Sender: TObject);
+var ExtSM: HMenu;
+begin
+ mnuCopy.Caption := TextByKey('common-copy');
+ mnuPaste.Caption := TextByKey('common-paste');
+ btnApplySize.Caption := TextByKey('common-apply');
+ mnuLowQuality.Caption := TextByKey('common-lowquality');
+ mnuMediumQuality.Caption := TextByKey('common-mediumquality');
+ mnuHighQuality.Caption := TextByKey('common-highquality');
+ btnCopy.Hint := TextByKey('adjustment-tab-gradient-copyhint');
+ btnPaste.Hint := TextByKey('adjustment-tab-gradient-pastehint');
+ btnSelected.Hint := TextByKey('adjustment-tab-gradient-selectedhint');
+ btnUndo.Hint := TextByKey('common-undo');
+ btnRedo.Hint := TextByKey('common-redo');
+ pnlWidth.Caption := TextByKey('common-width');
+ pnlHeight.Caption := TextByKey('common-height');
+ //chkMaintain.Caption := TextByKey('common-keepaspect');
+ cbAspectRatio.Items[0] := TextByKey('adjustment-tab-size-custom'); // AV
+ cbAspectRatio.Items[1] := TextByKey('common-keepaspect'); // AV
+ lblRatio.Caption := TextByKey('adjustment-tab-size-ratio');
+ pnlGamma.Caption := TextByKey('common-gamma');
+ pnlBrightness.Caption := TextByKey('common-brightness');
+ pnlVibrancy.Caption := TextByKey('common-vibrancy');
+ pnlContrast.Caption := TextByKey('common-contrast'); // AV
+ pnlBackground.Caption := TextByKey('common-background');
+ pnlGammaThreshold.Caption := TextByKey('common-gammathreshold');
+ pnlDOF.Hint := TextByKey('common-dragpanelhint') + ' | ' + TextByKey('adjustment-hint-depthblur');
+ pnlPitch.Hint := TextByKey('common-dragpanelhint') + ' | ' + TextByKey('adjustment-hint-pitch');
+ pnlYaw.Hint := TextByKey('common-dragpanelhint') + ' | ' + TextByKey('adjustment-hint-yaw');
+ pnlRoll.Hint := TextByKey('common-dragpanelhint') + ' | ' + TextByKey('adjustment-hint-roll');
+ pnlZpos.Hint := TextByKey('common-dragpanelhint') + ' | ' + TextByKey('adjustment-hint-height');
+ pnlPersp.Hint := TextByKey('common-dragpanelhint') + ' | ' + TextByKey('adjustment-hint-perspective');
+ pnlMasterScale.Hint := TextByKey('common-dragpanelhint') + ' | ' + TextByKey('adjustment-hint-scale');
+ pnlZoom.Hint := TextByKey('common-dragpanelhint');
+ pnlXpos.Hint := TextByKey('common-dragpanelhint');
+ pnlYpos.Hint := TextByKey('common-dragpanelhint');
+ pnlAngle.Hint := TextByKey('common-dragpanelhint');
+ pnlGamma.Hint := TextByKey('common-dragpanelhint');
+ pnlBrightness.Hint := TextByKey('common-dragpanelhint');
+ pnlVibrancy.Hint := TextByKey('common-dragpanelhint');
+ pnlGammaThreshold.Hint := TextByKey('common-dragpanelhint');
+ self.Caption := TextByKey('adjustment-title');
+ pnlDOF.Caption := TextByKey('adjustment-common-depthblur');
+ pnlPitch.Caption := TextByKey('adjustment-common-pitch');
+ pnlYaw.Caption := TextByKey('adjustment-common-yaw');
+ pnlRoll.Caption := TextByKey('adjustment-common-roll');
+ pnlZpos.Caption := TextByKey('adjustment-common-height');
+ pnlPersp.Caption := TextByKey('adjustment-common-perspective');
+ pnlMasterScale.Caption := TextByKey('adjustment-common-scale');
+ TabCamera.Caption := TextByKey('adjustment-tab-camera-title');
+ pnlZoom.Caption := TextByKey('adjustment-tab-camera-zoom');
+ pnlXPos.Caption := TextByKey('adjustment-tab-camera-xpos');
+ pnlYPos.Caption := TextByKey('adjustment-tab-camera-ypos');
+ pnlAngle.Caption := TextByKey('adjustment-tab-camera-rotation');
+ btResetZoom.Caption := TextByKey('adjustment-tab-camera-resetzoom');
+ btResetZoom.Hint := TextByKey('adjustment-hint-resetzoom');
+ TabRendering.Caption := TextByKey('adjustment-tab-rendering-title');
+ //chkTransparent.Caption := TextByKey('adjustment-tab-rendering-istransparent');
+ TabGradient.Caption := TextByKey('adjustment-tab-gradient-title');
+ mnuRotate.Caption := TextByKey('adjustment-tab-gradient-moderotate');
+ mnuHue.Caption := TextByKey('adjustment-tab-gradient-modehue');
+ mnuSaturation.Caption := TextByKey('adjustment-tab-gradient-modesaturation');
+ mnuBrightness.Caption := TextByKey('adjustment-tab-gradient-modebrightness');
+ mnuLuminance.Caption := TextByKey('adjustment-tab-gradient-modeluminance');
+ Contrast1.Caption := TextByKey('adjustment-tab-gradient-modecontrast');
+ mnuBlur.Caption := TextByKey('adjustment-tab-gradient-modeblur');
+ mnuFrequency.Caption := TextByKey('adjustment-tab-gradient-modefrequency');
+ btnColorPreset.Caption := TextByKey('adjustment-tab-gradient-preset');
+ btnColorPreset.Hint := TextByKey('adjustment-tab-gradient-presethint');
+ btnReset.Caption := TextByKey('adjustment-tab-gradient-reset');
+ btnMenu.Hint := TextByKey('adjustment-tab-gradient-modehint');
+ GradientImage.Hint := StringReplace(TextByKey('adjustment-tab-gradient-palettehint'),
+ ',', ','#13, [rfReplaceAll]);
+ btnSet1.Hint := TextByKey('adjustment-tab-size-savepreset');
+ btnSet2.Hint := TextByKey('adjustment-tab-size-savepreset');
+ btnSet3.Hint := TextByKey('adjustment-tab-size-savepreset');
+ TabSize.Caption := TextByKey('adjustment-tab-size-title');
+ btnPreset1.Hint := TextByKey('adjustment-tab-size-preset');
+ btnPreset2.Hint := TextByKey('adjustment-tab-size-preset');
+ btnPreset3.Hint := TextByKey('adjustment-tab-size-preset');
+ TabCurves.Caption := TextByKey('adjustment-tab-curves-title');
+ btnResetCurves.Caption := TextByKey('adjustment-tab-curves-reset');
+ Panel5.Caption := TextByKey('adjustment-tab-curves-selected');
+ cbChannel.Items[0] := TextByKey('adjustment-tab-curves-overall');
+ cbChannel.Items[1] := TextByKey('adjustment-tab-curves-red');
+ cbChannel.Items[2] := TextByKey('adjustment-tab-curves-green');
+ cbChannel.Items[3] := TextByKey('adjustment-tab-curves-blue');
+ chkResizeMain.Caption := TextByKey('adjustment-tab-size-resizemain');
+ mnuInstantPreview.Caption := TextByKey('adjustment-popup-quality-instantpreview');
+ mnuRandomize.Caption := TextByKey('adjustment-popup-gradient-randomize');
+ mnuInvert.Caption := TextByKey('adjustment-popup-gradient-invert');
+ mnuReverse.Caption := TextByKey('adjustment-popup-gradient-reverse');
+ mnuSepia.Caption := TextByKey('adjustment-popup-gradient-sepia');
+ mnuSmoothPalette.Caption := TextByKey('adjustment-popup-gradient-smooth');
+ btnSmoothPalette.Hint := TextByKey('main-menu-file-smoothpalettehint');
+ mnuGradientBrowser.Caption := TextByKey('adjustment-popup-gradient-browser');
+ btnOpen.Hint := TextByKey('adjustment-popup-gradient-browser');
+ SaveGradient1.Caption := TextByKey('adjustment-popup-gradient-saveasugr');
+ SaveasMapfile1.Caption := TextByKey('adjustment-popup-gradient-saveasmap');
+ mnuSaveAsDefault.Caption := TextByKey('adjustment-popup-gradient-saveasdefault');
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-moderotate');
+ Red1.Caption := TextByKey('adjustment-tab-curves-red');
+ Green1.Caption := TextByKey('adjustment-tab-curves-green');
+ Blue1.Caption := TextByKey('adjustment-tab-curves-blue');
+ Smoothize1.Caption := TextByKey('adjustment-popup-gradient-smoothize');
+ SmoothizeSelected.Caption := TextByKey('adjustment-popup-gradient-smoothizesel');
+ LerpRGB.Caption := TextByKey('adjustment-popup-gradient-interprgb');
+ LerpHSV.Caption := TextByKey('adjustment-popup-gradient-interphsv');
+ mnuRGB2BGR.Caption := TextByKey('adjustment-popup-gradient-swaprgb');
+ mnuSetColor.Caption := TextByKey('adjustment-popup-gradient-setcolor');
+ RandomizeSelected.Caption := TextByKey('adjustment-popup-gradient-randomizesel');
+ InvertColors.Caption := TextByKey('adjustment-popup-gradient-invertsel');
+ ReverseFragment.Caption := TextByKey('adjustment-popup-gradient-reversesel');
+ MixColors.Caption := TextByKey('adjustment-popup-gradient-mixcolors');
+ CopyFragment1.Caption := TextByKey('adjustment-popup-gradient-copysel');
+ PasteFragment1.Caption := TextByKey('adjustment-popup-gradient-pastesel');
+ mnuGreyscale.Caption := TextByKey('adjustment-popup-gradient-grayscale');
+ RemoveDarkAreas1.Caption := TextByKey('adjustment-popup-gradient-removedark');
+ SymmetricGradient1.Caption := TextByKey('adjustment-popup-gradient-symmetry');
+ FlipLeftHalf1.Caption := TextByKey('adjustment-popup-gradient-flipleft');
+ FlipRightHalf1.Caption := TextByKey('adjustment-popup-gradient-flipright');
+ AdjustSelected.Caption := TextByKey('adjustment-popup-gradient-adjustbyslider');
+ AdjustColorFragment.Caption := TextByKey('adjustment-popup-gradient-adjustfragment');
+ gbSize.Caption := TextByKey('common-pixels');
+ gbPresets.Caption := TextByKey('adjustment-tab-size-presets');
+ gbChange.Caption := TextByKey('adjustment-tab-size-output');
+
+ ExtSM := GetSystemMenu(Handle, False); // AV
+ InsertMenu(ExtSM, UINT(5), MF_ByPosition or MF_Separator, 0, nil);
+ InsertMenu(ExtSM, UINT(6), MF_ByPosition, $C0, PChar(TextByKey('main-menu-screenshot')));
+
+ cbChannel.ItemIndex := 0;
+ cbAspectRatio.ItemIndex := 0;
+
+ if not (assigned(curvesControl)) then
+ begin
+ CurvesControl := TCurvesControl.Create(self);
+ CurvesControl.Align := alClient;
+ CurvesControl.Parent := CurvesPanel;
+ end;
+
+ tbWeightLeft.Position := Round(CurvesControl.WeightLeft * 10);
+ tbWeightRight.Position := Round(CurvesControl.WeightRight * 10);
+
+ bm := TbitMap.Create;
+ cp := TControlPoint.Create;
+ Render := TRenderer.Create;
+ case AdjustPrevQual of
+ 0: begin
+ mnuLowQuality.Checked := true;
+ PreviewDensity := prevLowQuality;
+ end;
+ 1: begin
+ mnuMediumQuality.Checked := true;
+ PreviewDensity := prevMediumQuality;
+ end;
+ 2: begin
+ mnuHighQuality.Checked := true;
+ PreviewDensity := prevHighQuality;
+ end;
+ end;
+
+ Sendmessage(cmbPalette.Handle, CB_SETDROPPEDWIDTH , cmbPalette.width * 2, 0);
+ SetCurvesCp(MainCp);
+
+ selA := 0; selB := 255; // AV
+end;
+
+procedure TAdjustForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ Render.Stop;
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Adjust', True) then
+ begin
+ Registry.WriteInteger('Top', AdjustForm.Top);
+ Registry.WriteInteger('Left', AdjustForm.Left);
+ Registry.WriteBool('InstantPreview', mnuInstantPreview.Checked);
+ Registry.WriteBool('ResizeMain', chkResizeMain.Checked);
+ end;
+ finally
+ Registry.Free;
+ end;
+end;
+
+procedure TAdjustForm.FormDestroy(Sender: TObject);
+begin
+ bm.free;
+ cp.free;
+ Render.free;
+end;
+
+procedure TAdjustForm.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+ i: integer;
+ strx, stry, strw, strh: string;
+begin
+ if LimitVibrancy then scrollVibrancy.Max := 100
+ else scrollVibrancy.Max := 3000;
+ { Read position from registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Adjust', False) then
+ begin
+ if Registry.ValueExists('Left') then
+ AdjustForm.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ AdjustForm.Top := Registry.ReadInteger('Top');
+ if Registry.ValueExists('InstantPreview') then
+ mnuInstantPreview.Checked := Registry.ReadBool('InstantPreview');
+ if Registry.ValueExists('ResizeMain') then
+ chkResizeMain.Checked := Registry.ReadBool('ResizeMain');
+ Registry.CloseKey;
+ end;
+
+ if Registry.OpenKey('Software\' + APP_NAME + '\ImageSizePresets', False) then
+ begin
+ for i:=1 to 3 do begin
+ strx:='Preset' + IntToStr(i) + 'Left';
+ stry:='Preset' + IntToStr(i) + 'Top';
+ strw:='Preset' + IntToStr(i) + 'Width';
+ strh:='Preset' + IntToStr(i) + 'Height';
+ if Registry.ValueExists(strw) and Registry.ValueExists(strh)
+ then begin
+ Preset[i].Left := Registry.ReadInteger(strx);
+ Preset[i].Top := Registry.ReadInteger(stry);
+ Preset[i].Width := Registry.ReadInteger(strw);
+ Preset[i].Height := Registry.ReadInteger(strh);
+ if (Preset[1].Width > 0) and (Preset[1].Height > 0) then continue;
+ end;
+ Preset[i].Left := MainForm.Left;
+ Preset[i].Top := MainForm.Top;
+ // Preset[i].Width := 512;
+ // Preset[i].Height := 384;
+ // AV: them different by default
+ case i of
+ 1: begin
+ Preset[1].Width := 512;
+ Preset[1].Height := 384;
+ end;
+ 2: begin
+ Preset[2].Width := 640;
+ Preset[2].Height := 480;
+ end;
+ 3: begin
+ Preset[3].Width := 800;
+ Preset[3].Height := 600;
+ end;
+ end; // end case
+ end;
+ end
+ else begin
+ for i:=1 to 3 do begin
+ Preset[i].Left := MainForm.Left;
+ Preset[i].Top := MainForm.Top;
+ end;
+ // AV: make them different by default
+ Preset[1].Width := 512;
+ Preset[1].Height := 384;
+ Preset[2].Width := 640;
+ Preset[2].Height := 480;
+ Preset[3].Width := 800;
+ Preset[3].Height := 600;
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+ GetMainWindowSize;
+
+ btnPreset1.Caption := PresetToStr(1);
+ btnPreset2.Caption := PresetToStr(2);
+ btnPreset3.Caption := PresetToStr(3);
+end;
+
+///////////////////////////////////////////////////
+
+procedure TAdjustForm.CreateScreenShot;
+begin
+ SaveScreenShot('Apophysis Adjustment Window');
+end;
+
+procedure TAdjustForm.ExtSysMenu(var Msg: TMessage);
+begin
+ if Msg.WParam = $C0 then CreateScreenShot;
+ inherited;
+end;
+
+//////////////////////////////////////////////////
+
+procedure TAdjustForm.mnuLowQualityClick(Sender: TObject);
+begin
+ mnuLowQuality.Checked := True;
+ PreviewDensity := prevLowQuality;
+ AdjustPrevQual := 0;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.mnuMediumQualityClick(Sender: TObject);
+begin
+ mnuMediumQuality.Checked := True;
+ PreviewDensity := prevMediumQuality;
+ AdjustPrevQual := 1;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.mnuHighQualityClick(Sender: TObject);
+begin
+ mnuHighQuality.Checked := True;
+ PreviewDensity := prevHighQuality;
+ AdjustPrevQual := 2;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.txtZoomEnter(Sender: TObject);
+begin
+ EditBoxValue := txtZoom.Text;
+end;
+
+procedure TAdjustForm.txtZoomKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (EditBoxValue <> txtZoom.Text)) then
+ begin
+ key := #0;
+ txtZoomExit(sender);
+ end;
+end;
+
+procedure TAdjustForm.txtZoomExit(Sender: TObject);
+var
+ v: integer;
+begin
+ if (EditBoxValue <> txtZoom.Text) then
+ try
+ v := Trunc(StrToFloat(txtZoom.Text) * 1000);
+ if v > scrollZoom.Max then v := scrollZoom.Max;
+ if v < scrollZoom.Min then v := scrollZoom.Min;
+ if v <> ScrollZoom.Position then begin
+ ScrollZoom.Position := v;
+ UpdateFlame;
+ end;
+ except on EConvertError do
+ txtZoom.Text := FloatToStr(cp.zoom)
+ end;
+end;
+
+procedure TAdjustForm.txtCenterXEnter(Sender: TObject);
+begin
+ EditBoxValue := txtCenterX.Text;
+end;
+
+procedure TAdjustForm.txtCenterXKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (EditBoxValue <> txtCenterX.Text)) then
+ begin
+ key := #0;
+ txtCenterXExit(sender);
+ end;
+end;
+
+procedure TAdjustForm.txtCenterXExit(Sender: TObject);
+var
+ v: integer;
+begin
+ if (EditBoxValue <> txtCenterX.Text) then
+ try
+ v := Trunc(StrToFloat(txtCenterX.Text) * 1000);
+ if v > scrollCenterX.Max then v := scrollCenterX.Max;
+ if v < scrollCenterX.Min then v := scrollCenterX.Min;
+ ScrollCenterX.Position := v;
+ UpdateFlame;
+ except on EConvertError do
+ txtCenterX.Text := FloatToStr(cp.center[0]);
+ end;
+end;
+
+procedure TAdjustForm.txtCenterYEnter(Sender: TObject);
+begin
+ EditBoxValue := txtCenterY.Text;
+end;
+
+procedure TAdjustForm.txtCenterYKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (EditBoxValue <> txtCenterY.Text)) then
+ begin
+ key := #0;
+ txtCenterYExit(sender);
+ end;
+end;
+
+procedure TAdjustForm.txtContrastEnter(Sender: TObject);
+begin
+ EditBoxValue := txtContrast.Text;
+end;
+
+procedure TAdjustForm.txtContrastExit(Sender: TObject);
+var
+ v: integer;
+begin
+ if (txtContrast.Text <> EditBoxValue) then
+ try
+ v := Trunc(StrToFloat(txtContrast.Text) * 100);
+ if v > scrollContrast.Max then v := scrollContrast.Max;
+ if v < scrollContrast.Min then v := scrollContrast.Min;
+ ScrollContrast.Position := v;
+ UpdateFlame;
+ except on EConvertError do
+ txtContrast.Text := FloatToStr(cp.Contrast);
+ end;
+end;
+
+procedure TAdjustForm.txtContrastKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.'; //FormatSettings.DecimalSeparator;
+ if not CharinSet(Key,['0'..'9', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (txtContrast.Text <> EditBoxValue)) then
+ begin
+ key := #0;
+ txtContrastExit(sender);
+ end;
+end;
+
+procedure TAdjustForm.txtCenterYExit(Sender: TObject);
+var
+ v: integer;
+begin
+ if (EditBoxValue <> txtCenterY.Text) then
+ try
+ v := Trunc(StrToFloat(txtCenterY.Text) * 1000);
+ if v > ScrollCenterY.Max then v := ScrollCenterY.Max;
+ if v < ScrollCenterY.Min then v := ScrollCenterY.Min;
+ ScrollCenterY.Position := v;
+ UpdateFlame;
+ except on EConvertError do
+ txtCenterY.Text := FloatToStr(cp.center[1]);
+ end;
+end;
+
+procedure TAdjustForm.txtGammaEnter(Sender: TObject);
+begin
+ EditBoxValue := txtGamma.Text;
+end;
+
+procedure TAdjustForm.txtGammaExit(Sender: TObject);
+var
+ v: integer;
+begin
+ if (txtGamma.Text <> EditBoxValue) then
+ try
+ v := Trunc(StrToFloat(txtGamma.Text) * 100);
+ if v > scrollGamma.Max then v := scrollGamma.Max;
+ if v < scrollGamma.Min then v := scrollGamma.Min;
+ ScrollGamma.Position := v;
+ UpdateFlame;
+ except on EConvertError do
+ txtGamma.Text := FloatToStr(cp.gamma);
+ end;
+end;
+
+procedure TAdjustForm.txtGammaKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.'; //FormatSettings.DecimalSeparator;
+ if not CharinSet(Key,['0'..'9', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (txtGamma.Text <> EditBoxValue)) then
+ begin
+ key := #0;
+ txtGammaExit(sender);
+ end;
+end;
+
+procedure TAdjustForm.txtBrightnessEnter(Sender: TObject);
+begin
+ EditBoxValue := txtBrightness.Text;
+end;
+
+procedure TAdjustForm.txtBrightnessExit(Sender: TObject);
+var
+ v: integer;
+begin
+ if (txtBrightness.Text <> EditBoxValue) then
+ try
+ v := Trunc(StrToFloat(txtBrightness.Text) * 100);
+ if v > scrollBrightness.Max then v := scrollBrightness.Max;
+ if v < scrollBrightness.Min then v := scrollBrightness.Min;
+ ScrollBrightness.Position := v;
+ UpdateFlame;
+ except on EConvertError do
+ txtBrightness.Text := FloatToStr(cp.brightness);
+ end;
+end;
+
+procedure TAdjustForm.txtBrightnessKeyPress(Sender: TObject;
+ var Key: Char);
+begin
+ if (Key = ',') then Key := '.'; //FormatSettings.DecimalSeparator;
+ if not CharinSet(Key,['0'..'9', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (txtBrightness.Text <> EditBoxValue)) then
+ begin
+ key := #0;
+ txtBrightnessExit(sender);
+ end;
+end;
+
+procedure TAdjustForm.txtVibrancyEnter(Sender: TObject);
+begin
+ EditBoxValue := txtVibrancy.Text;
+end;
+
+procedure TAdjustForm.txtVibrancyKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (txtVibrancy.Text <> EditBoxValue)) then
+ begin
+ key := #0;
+ txtVibrancyExit(sender);
+ end;
+end;
+
+procedure TAdjustForm.txtVibrancyExit(Sender: TObject);
+var
+ v: integer;
+begin
+ if (txtVibrancy.Text <> EditBoxValue) then
+ try
+ v := Trunc(StrToFloat(txtVibrancy.Text) * 100);
+ if v > scrollVibrancy.Max then v := scrollVibrancy.Max;
+ if v < scrollVibrancy.Min then v := scrollVibrancy.Min;
+ ScrollVibrancy.Position := v;
+ UpdateFlame;
+ except on EConvertError do
+ txtVibrancy.Text := FloatToStr(cp.Vibrancy);
+ end;
+end;
+
+procedure TAdjustForm.scrollCameraScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+begin
+ if ScrollCode = scEndScroll then UpdateFlame;
+end;
+
+(*
+procedure TAdjustForm.scrollCenterXScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+begin
+ if ScrollCode = scEndScroll then UpdateFlame;
+end;
+
+procedure TAdjustForm.scrollCenterYScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+begin
+ if ScrollCode = scEndScroll then UpdateFlame;
+end;
+
+procedure TAdjustForm.scrollGammaScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+begin
+ if ScrollCode = scEndScroll then UpdateFlame;
+end;
+
+procedure TAdjustForm.scrollBrightnessScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+begin
+ if ScrollCode = scEndScroll then UpdateFlame;
+end;
+
+procedure TAdjustForm.scrollVibrancyScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+begin
+ if ScrollCode = scEndScroll then UpdateFlame;
+end;
+ *)
+
+procedure TAdjustForm.scrollVibrancyScroll(Sender: TObject);
+begin
+ cp.Vibrancy := ScrollVibrancy.Position / 100;
+ txtVibrancy.text := FloatToStr(cp.Vibrancy);
+ txtVibrancy.Refresh;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.scrollGammaChange(Sender: TObject);
+begin
+ cp.Gamma := scrollGamma.Position / 100;
+ txtGamma.text := FloatToStr(cp.Gamma);
+ txtGamma.Refresh;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.scrollBrightnessChange(Sender: TObject);
+begin
+ cp.Brightness := ScrollBrightness.Position / 100;
+ txtBrightness.text := FloatToStr(cp.Brightness);
+ txtBrightness.Refresh;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.scrollZoomChange(Sender: TObject);
+begin
+ cp.zoom := scrollZoom.Position / 1000;
+ txtZoom.text := FloatToStr(cp.zoom);
+ txtZoom.Refresh;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.scrollCenterXChange(Sender: TObject);
+begin
+ cp.center[0] := scrollCenterX.Position / 1000;
+ txtCenterX.text := FloatToStr(cp.center[0]);
+ txtCenterX.Refresh;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.scrollCenterYChange(Sender: TObject);
+begin
+ cp.center[1] := scrollCenterY.Position / 1000;
+ txtCenterY.text := FloatToStr(cp.center[1]);
+ txtCenterY.Refresh;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.scrollContrastChange(Sender: TObject);
+begin
+ cp.Contrast := ScrollContrast.Position / 100;
+ txtContrast.text := FloatToStr(cp.Contrast);
+ txtContrast.Refresh;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.ColorPanelClick(Sender: TObject);
+var
+ col: Longint;
+begin
+ ColorDialog.Color := ColorPanel.Color;
+ if ColorDialog.Execute then
+ begin
+ ColorPanel.Color := ColorDialog.Color;
+ Shape1.Brush.Color := ColorPanel.Color;
+ //cbColor.text := IntToHex(integer(ColorDialog.Color), 6);
+ col := ColorToRGB(ColorDialog.Color);
+ cp.background[0] := col and 255;
+ cp.background[1] := col shr 8 and 255;
+ cp.background[2] := col shr 16 and 255;
+ DrawPreview;
+ UpdateFlame(true);
+ end;
+end;
+
+procedure TAdjustForm.Copyfragment1Click(Sender: TObject);
+var i, j: integer;
+begin
+ SetLength(tmpColors, selB - selA + 1, 3);
+ for i := 0 to selB - selA do
+ for j := 0 to 2 do
+ tmpColors[i, j] := palette[i + selA, j];
+ PasteFragment1.Enabled := true;
+ MixColors.Enabled := true;
+end;
+
+procedure TAdjustForm.curveChange(Sender: TObject);
+begin
+ if CurvesControl = nil then Exit;
+ CurvesControl.ActiveChannel := TCurvesChannel(cbChannel.ItemIndex);
+ tbWeightLeft.Position := Round(cp.curveWeights[cbChannel.ItemIndex][1] * 10); //Round(CurvesControl.WeightLeft * 10);
+ tbWeightRight.Position := Round(cp.curveWeights[cbChannel.ItemIndex][2] * 10); //Round(CurvesControl.WeightRight * 10);
+end;
+
+procedure TAdjustForm.scrollAngleChange(Sender: TObject);
+begin
+ cp.FAngle := scrollAngle.Position * PI / 18000.0;
+ txtAngle.text := FloatToStr(cp.FAngle * 180 / PI);
+ txtAngle.Refresh;
+ DrawPreview;
+end;
+
+(*
+ procedure TAdjustForm.scrollAngleScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+ begin
+ if ScrollCode = scEndScroll then UpdateFlame;
+ end;
+*)
+
+procedure TAdjustForm.txtAngleEnter(Sender: TObject);
+begin
+ EditBoxValue := txtAngle.Text;
+end;
+
+procedure TAdjustForm.txtAngleKeyPress(Sender: TObject; var Key: Char);
+var
+ v: integer;
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (txtAngle.Text <> EditBoxValue)) then
+ begin
+ key := #0;
+ try
+ v := Trunc(StrToFloat(txtAngle.Text) * 100) mod scrollAngle.Max;
+ //if v > scrollAngle.Max then v := v - scrollAngle.Max*2
+ if v < scrollAngle.Min then v := v + scrollAngle.Max;
+ ScrollAngle.Position := v;
+ UpdateFlame;
+ EditBoxValue := txtAngle.Text;
+ except on EConvertError do
+ end;
+ end;
+end;
+
+procedure TAdjustForm.txtAngleExit(Sender: TObject);
+var
+ v: integer;
+begin
+ if (txtAngle.Text <> EditBoxValue) then
+ try
+ v := Trunc(StrToFloat(txtAngle.Text) * 100) mod scrollAngle.Max;
+// if v > scrollAngle.Max then v := v - scrollAngle.Max*2
+// else if v < scrollAngle.Min then v := v + scrollAngle.Max*2;
+ ScrollAngle.Position := v;
+ UpdateFlame;
+ except on EConvertError do
+ txtAngle.Text := FloatToStr(cp.FAngle * 180 / PI);
+ end;
+end;
+
+// --Z-- // gradient stuff implementation --------------------------------------
+
+procedure TAdjustForm.Apply;
+begin
+ MainForm.StopThread;
+ MainForm.UpdateUndo;
+
+ MainCp.CmapIndex := cmbPalette.ItemIndex;
+ MainCp.cmap := Palette;
+ SetCurvesCp(MainCp);
+
+ if EditForm.visible then EditForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+ if CurvesForm.Visible then CurvesForm.SetCp(MainCp);
+
+ if mnuInstantPreview.Checked then DrawPreview;
+
+ if GradStatusBar.Panels[2].Text <> '' then GradStatusBar.Refresh; // AV
+
+ MainForm.RedrawTimer.enabled := true;
+end;
+
+procedure TAdjustForm.SaveMap(FileName: string);
+var
+ i: Integer;
+ l: string;
+ MapFile: TextFile;
+begin
+{ Save a map file }
+ AssignFile(MapFile, FileName);
+ try
+ ReWrite(MapFile);
+ { first line with comment }
+ l := Format(' %3d %3d %3d Exported from Apophysis 2.0', [Palette[0][0], palette[0][1],
+ palette[0][2]]);
+ Writeln(MapFile, l);
+ { now the rest }
+ for i := 1 to 255 do
+ begin
+ l := Format(' %3d %3d %3d', [Palette[i][0], palette[i][1],
+ palette[i][2]]);
+ Writeln(MapFile, l);
+ end;
+ CloseFile(MapFile);
+ except
+ on EInOutError do Application.MessageBox(PChar(Format(TextByKey('common-genericopenerror'), [FileName])), 'Apophysis', 16);
+ end;
+end;
+
+procedure TAdjustForm.UpdateGradient(Pal: TColorMap);
+begin
+ ScrollBar.Position := 0;
+
+ Palette := Pal;
+ BackupPal := Pal;
+// DrawPalette;
+
+ cp.cmap := pal;
+// cp.copy(MainCp);
+
+ if mnuInstantPreview.Checked then DrawPreview;
+end;
+
+procedure HSVToRGB(H, S, V: real; var Rb, Gb, Bb: integer);
+var
+ R, G, B, Sa, Va, Hue, i, f, p, q, t: real;
+begin
+ R := 0;
+ G := 0;
+ B := 0;
+ Sa := S / 100;
+ Va := V / 100;
+ if S = 0 then
+ begin
+ R := Va;
+ G := Va;
+ B := Va;
+ end
+ else
+ begin
+ Hue := H / 60;
+ if Hue = 6 then Hue := 0;
+ i := Int(Hue);
+ f := Hue - i;
+ p := Va * (1 - Sa);
+ q := Va * (1 - (Sa * f));
+ t := Va * (1 - (Sa * (1 - f)));
+ case Round(i) of
+ 0: begin
+ R := Va;
+ G := t;
+ B := p;
+ end;
+ 1: begin
+ R := q;
+ G := Va;
+ B := p;
+ end;
+ 2: begin
+ R := p;
+ G := Va;
+ B := t;
+ end;
+ 3: begin
+ R := p;
+ G := q;
+ B := Va;
+ end;
+ 4: begin
+ R := t;
+ G := p;
+ B := Va;
+ end;
+ 5: begin
+ R := Va;
+ G := p;
+ B := q;
+ end;
+ end;
+ end;
+ Rb := Round(Int(255.9999 * R));
+ Gb := Round(Int(255.9999 * G));
+ Bb := Round(Int(255.9999 * B));
+end;
+
+procedure RGBToHSV(R, G, B: byte; var H, S, V: real);
+var
+ vRed, vGreen, vBlue, Mx, Mn, Va, Sa, rc, gc, bc: real;
+begin
+ vRed := R / 255;
+ vGreen := G / 255;
+ vBlue := B / 255;
+ Mx := vRed;
+ if vGreen > Mx then Mx := vGreen;
+ if vBlue > Mx then Mx := vBlue;
+ Mn := vRed;
+ if vGreen < Mn then Mn := vGreen;
+ if vBlue < Mn then Mn := vBlue;
+ Va := Mx;
+ if Mx <> 0 then
+ Sa := (Mx - Mn) / Mx
+ else
+ Sa := 0;
+ if Sa = 0 then
+ H := 0
+ else
+ begin
+ rc := (Mx - vRed) / (Mx - Mn);
+ gc := (Mx - vGreen) / (Mx - Mn);
+ bc := (Mx - vBlue) / (Mx - Mn);
+ if Mx = vRed then
+ H := bc - gc
+ else if Mx = vGreen then
+ H := 2 + rc - bc
+ else if Mx = vBlue then
+ H := 4 + gc - rc;
+ H := H * 60;
+ if H < 0 then H := H + 360;
+ end;
+ S := Sa * 100;
+ V := Va * 100;
+end;
+
+function TAdjustForm.Blur(const Radius: Integer; const pal: TColorMap; start, last: byte): TColorMap;
+var
+ r, g, b, n, i, j, k: Integer;
+begin
+ Result := Pal;
+ if Radius <> 0 then
+ for i := start to last do // AV: changed from 0 - 255
+ begin
+ n := -1;
+ r := 0;
+ g := 0;
+ b := 0;
+ for j := i - radius to i + radius do
+ begin
+ inc(n);
+ k := (256 + j) mod 256;
+ if k <> i then begin
+ r := r + Pal[k][0];
+ g := g + Pal[k][1];
+ b := b + Pal[k][2];
+ end;
+ end;
+ if n <> 0 then begin
+ Result[i][0] := r div n;
+ Result[i][1] := g div n;
+ Result[i][2] := b div n;
+ end;
+ end;
+end;
+
+function TAdjustForm.Frequency(const times: Integer; const pal: TColorMap): TColorMap;
+{ This can be improved }
+var
+ n, i, j: Integer;
+begin
+ Result := Pal;
+ if times <> 1 then
+ begin
+ n := 256 div times;
+ for j := 0 to times do
+ for i := 0 to n do
+ begin
+ if ((i + j * n) < 256) and ((i * times) < 256) then
+ begin
+ Result[i + j * n][0] := pal[i * times][0];
+ Result[i + j * n][1] := pal[i * times][1];
+ Result[i + j * n][2] := pal[i * times][2];
+ end;
+ end;
+ end;
+end;
+
+function TAdjustForm.FrequencySel(const times: Integer; const pal: TColorMap): TColorMap;
+var n, i, j, k: Integer;
+begin
+ Result := Pal;
+ if times <> 1 then
+ begin
+ n := (selB - selA + 1) div times;
+ for j := 0 to times do
+ for i := 0 to n-1 do
+ begin
+ k := selA + i + j * n;
+ if k > selB then break;
+ Result[k][0] := pal[selA + i * times][0];
+ Result[k][1] := pal[selA + i * times][1];
+ Result[k][2] := pal[selA + i * times][2];
+ end;
+ end;
+end;
+
+procedure TAdjustForm.cmbPaletteChange(Sender: TObject);
+var
+ i: integer;
+begin
+ if Resetting then exit;
+
+ i := cmbPalette.ItemIndex;
+ GetCmap(i, 1, Palette);
+ BackupPal := Palette;
+ ScrollBar.Position := 0;
+ //DrawPalette;
+// MainForm.UpdateUndo;
+ Apply;
+ GradStatusBar.Refresh;
+end;
+
+procedure TAdjustForm.mnuRedClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-curves-red');
+ scrollMode := modeRed;
+ BackupPal := Palette;
+ ScrollBar.Min := -255;
+ ScrollBar.Max := 255;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuGreenClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-curves-green');
+ scrollMode := modeGreen;
+ BackupPal := Palette;
+ ScrollBar.Min := -255;
+ ScrollBar.Max := 255;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuGreyscaleClick(Sender: TObject);
+var
+ i, j, grey: integer;
+begin
+ for i := 0 to 255 do
+ begin
+ grey := Round(0.3 * Palette[i,0] + 0.59 * Palette[i,1]
+ + 0.11 * Palette[i,2]);
+ for j := 0 to 2 do
+ Palette[i][j] := grey;
+ end;
+ UpdateGradient(palette);
+// MainForm.UpdateUndo;
+ Apply;
+end;
+
+procedure TAdjustForm.mnuBlueClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-curves-blue');
+ scrollMode := modeBlue;
+ BackupPal := Palette;
+ ScrollBar.Min := -255;
+ ScrollBar.Max := 255;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuReverseClick(Sender: TObject);
+var
+ i: integer;
+ pal: TColorMap;
+begin
+ for i := 0 to 255 do begin
+ pal[i][0] := Palette[255 - i][0];
+ pal[i][1] := Palette[255 - i][1];
+ pal[i][2] := Palette[255 - i][2];
+ end;
+ UpdateGradient(pal);
+// MainForm.UpdateUndo;
+ Apply;
+end;
+
+procedure TAdjustForm.mnuRGB2BGRClick(Sender: TObject);
+var
+ i, j, r, g, b: integer;
+ pal: array of array of byte;
+begin
+ case TMenuItem(Sender).Tag of
+ 0: begin r := 2; g := 1; b := 0; end;
+ 1: begin r := 1; g := 2; b := 0; end;
+ 2: begin r := 0; g := 2; b := 1; end;
+ 3: begin r := 1; g := 0; b := 2; end;
+ 4: begin r := 2; g := 0; b := 1; end;
+ else begin r := 0; g := 1; b := 2; end;
+ end;
+
+ SetLength(pal, selB - selA + 1, 3);
+ for i := 0 to selB - selA do begin
+ pal[i][0] := Palette[i + selA][r];
+ pal[i][1] := Palette[i + selA][g];
+ pal[i][2] := Palette[i + selA][b];
+ end;
+ for i := 0 to selB - selA do
+ for j := 0 to 2 do
+ Palette[i + selA][j] := Pal[i][j];
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.mnuInvertClick(Sender: TObject);
+var
+ i: integer;
+begin
+ for i := 0 to 255 do
+ begin
+ Palette[i][0] := 255 - Palette[i][0];
+ Palette[i][1] := 255 - Palette[i][1];
+ Palette[i][2] := 255 - Palette[i][2];
+ end;
+ UpdateGradient(palette);
+// MainForm.UpdateUndo;
+ Apply;
+end;
+
+procedure TAdjustForm.btnMenuClick(Sender: TObject);
+begin
+ scrollModePopup.Popup(btnMenu.ClientOrigin.x, btnMenu.ClientOrigin.y + btnMenu.Height);
+end;
+
+procedure TAdjustForm.ScrollBarChange(Sender: TObject);
+var
+ intens, i, r, g, b, lab: integer;
+ na, nb: byte;
+ h, s, v: real;
+begin
+ txtVal.Text := IntToStr(ScrollBar.Position);
+ txtVal.Refresh;
+
+ if Resetting then exit;
+
+ GradientChanged:=true; // hmm
+
+ // AV: allow user to manipulate the palette's segment
+ if not AdjustSelected.Checked then begin
+ na := 0; nb := 255;
+ end else begin
+ na := selA; nb := selB;
+ end;
+
+ case scrollMode of
+ modeHue:
+ for i := na to nb do
+ begin
+ RGBToHSV(BackupPal[i][0], BackupPal[i][1], BackupPal[i][2], h, s, v);
+ if s <> 0 then // --Z-- (?)
+ // AV: when saturation = 0, hue doesn't matter
+ begin
+ h := Round(360 + h + ScrollBar.Position) mod 360;
+ HSVToRGB(h, s, v, Palette[i][0], Palette[i][1], Palette[i][2]);
+ end;
+ end;
+ modeSaturation:
+ for i := na to nb do
+ begin
+ RGBToHSV(BackupPal[i][0], BackupPal[i][1], BackupPal[i][2], h, s, v);
+ if s <> 0 then // --Z-- //(?)
+ begin
+ s := s + ScrollBar.Position;
+ if s > 100 then s := 100;
+ if s < 0 then s := 0;
+ HSVToRGB(h, s, v, Palette[i][0], Palette[i][1], Palette[i][2]);
+ end;
+ end;
+ modeLuminance: // AV
+ for i := na to nb do
+ begin
+ RGBToHSV(BackupPal[i][0], BackupPal[i][1], BackupPal[i][2], h, s, v);
+ v := v + ScrollBar.Position;
+ if v > 100 then v := 100;
+ if v < 0 then v := 0;
+ HSVToRGB(h, s, v, Palette[i][0], Palette[i][1], Palette[i][2]);
+ end;
+ modeContrast:
+ begin
+ intens := scrollBar.Position;
+ if intens > 0 then intens := intens * 2;
+ for i := na to nb do
+ begin
+ r := BackupPal[i][0];
+ g := BackupPal[i][1];
+ b := BackupPal[i][2];
+ r := round(r + intens / 100 * (r - 127));
+ g := round(g + intens / 100 * (g - 127));
+ b := round(b + intens / 100 * (b - 127));
+ if R > 255 then R := 255 else if R < 0 then R := 0;
+ if G > 255 then G := 255 else if G < 0 then G := 0;
+ if B > 255 then B := 255 else if B < 0 then B := 0;
+ Palette[i][0] := r;
+ Palette[i][1] := g;
+ Palette[i][2] := b;
+ end;
+ end;
+ modeBrightness:
+ for i := na to nb do
+ begin
+ Palette[i][0] := BackupPal[i][0] + ScrollBar.Position;
+ if Palette[i][0] > 255 then Palette[i][0] := 255;
+ if Palette[i][0] < 0 then Palette[i][0] := 0;
+ Palette[i][1] := BackupPal[i][1] + ScrollBar.Position;
+ if Palette[i][1] > 255 then Palette[i][1] := 255;
+ if Palette[i][1] < 0 then Palette[i][1] := 0;
+ Palette[i][2] := BackupPal[i][2] + ScrollBar.Position;
+ if Palette[i][2] > 255 then Palette[i][2] := 255;
+ if Palette[i][2] < 0 then Palette[i][2] := 0;
+ end;
+ modeRotate:
+ if not AdjustSelected.Checked then
+ begin
+ ScrollBar.Min := -128;
+ ScrollBar.Max := 128;
+ ScrollBar.LargeChange := 16;
+ for i := 0 to 255 do
+ begin
+ Palette[i][0] := BackupPal[(256 + i - ScrollBar.Position) mod 256][0];
+ Palette[i][1] := BackupPal[(256 + i - ScrollBar.Position) mod 256][1];
+ Palette[i][2] := BackupPal[(256 + i - ScrollBar.Position) mod 256][2];
+ end;
+ end
+ else begin
+ lab := selB - selA + 1;
+ if lab > 255 then lab := 255;
+ ScrollBar.Max := lab;
+ ScrollBar.Min := -lab;
+ ScrollBar.LargeChange := 2;
+ if ScrollBar.Position > 0 then
+ for i := na to nb do
+ begin
+ lab := i - ScrollBar.Position;
+ if lab < selA then lab := lab + nb - na + 1;
+ Palette[i][0] := BackupPal[lab][0];
+ Palette[i][1] := BackupPal[lab][1];
+ Palette[i][2] := BackupPal[lab][2];
+ end else
+ for i := na to nb do
+ begin
+ lab := i - ScrollBar.Position;
+ if lab > selB then lab := lab - nb + na - 1;
+ Palette[i][0] := BackupPal[lab][0];
+ Palette[i][1] := BackupPal[lab][1];
+ Palette[i][2] := BackupPal[lab][2];
+ end;
+ end;
+ modeBlur:
+ begin
+ if not AdjustSelected.Checked then
+ begin
+ ScrollBar.Max := 127;
+ ScrollBar.LargeChange := 15;
+ end else begin
+ ScrollBar.Max := (selB - selA) div 2;
+ ScrollBar.LargeChange := 2;
+ end;
+ Palette := Blur(ScrollBar.Position, BackupPal, na, nb);
+ end;
+ modeFrequency:
+ if not AdjustSelected.Checked then
+ Palette := Frequency(ScrollBar.Position, BackupPal)
+ else Palette := FrequencySel(ScrollBar.Position, BackupPal);
+ modeRed: // AV
+ for i := na to nb do
+ begin
+ Palette[i][0] := BackupPal[i][0] + ScrollBar.Position;
+ if Palette[i][0] > 255 then Palette[i][0] := 255;
+ if Palette[i][0] < 0 then Palette[i][0] := 0;
+ end;
+ modeGreen: // AV
+ for i := na to nb do
+ begin
+ Palette[i][1] := BackupPal[i][1] + ScrollBar.Position;
+ if Palette[i][1] > 255 then Palette[i][1] := 255;
+ if Palette[i][1] < 0 then Palette[i][1] := 0;
+ end;
+ modeBlue: // AV
+ for i := na to nb do
+ begin
+ Palette[i][2] := BackupPal[i][2] + ScrollBar.Position;
+ if Palette[i][2] > 255 then Palette[i][2] := 255;
+ if Palette[i][2] < 0 then Palette[i][2] := 0;
+ end;
+ end;
+
+ cp.cmap:=Palette;
+ DrawPreview;
+end;
+
+procedure TAdjustForm.ScrollBarScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+begin
+ if ScrollCode = scEndScroll then
+ begin
+ GradientChanged:=false;
+ Apply;
+ end;
+end;
+
+{ ***************************** Adjust menu ********************************* }
+
+procedure TAdjustForm.mnuRotateClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-moderotate');
+ scrollMode:=modeRotate;
+
+ BackupPal := Palette;
+ ScrollBar.Min := -128;
+ ScrollBar.Max := 128;
+ ScrollBar.LargeChange := 16;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuHueClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-modehue');
+ scrollMode:=modeHue;
+
+ BackupPal := Palette;
+ ScrollBar.Min := -180;
+ ScrollBar.Max := 180;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuSaturationClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-modesaturation');
+ scrollMode:=modeSaturation;
+
+ BackupPal := Palette;
+ ScrollBar.Min := -100;
+ ScrollBar.Max := 100;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuLuminanceClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-modeluminance');
+ scrollMode := modeLuminance;
+ BackupPal := Palette;
+
+ ScrollBar.Min := -100;
+ ScrollBar.Max := 100;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuBrightnessClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-modebrightness');
+ scrollMode := modeBrightness;
+
+ BackupPal := Palette;
+ ScrollBar.Min := -255;
+ ScrollBar.Max := 255;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuContrastClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-modecontrast');
+ scrollMode := modeContrast;
+ BackupPal := Palette;
+
+ ScrollBar.Min := -100;
+ ScrollBar.Max := 100;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuBlurClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-modeblur');
+ scrollMode := modeBlur;
+
+ BackupPal := Palette;
+ ScrollBar.Min := 0;
+ ScrollBar.Max := 127;
+ ScrollBar.LargeChange := 15;
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.mnuFrequencyClick(Sender: TObject);
+begin
+ btnMenu.Caption := TextByKey('adjustment-tab-gradient-modefrequency');
+ scrollMode := modeFrequency;
+
+ BackupPal := Palette;
+ ScrollBar.Min := 1;
+ ScrollBar.Max := 10;
+ ScrollBar.LargeChange := 1;
+ ScrollBar.Position := 1;
+end;
+
+// -----------------------------------------------------------------------------
+
+procedure TAdjustForm.btnOpenClick(Sender: TObject);
+begin
+ GradientBrowser.Filename := GradientFile;
+ GradientBrowser.Show;
+end;
+
+procedure TAdjustForm.mnuSmoothPaletteClick(Sender: TObject);
+begin
+ MainForm.SmoothPalette;
+end;
+
+procedure TAdjustForm.SaveGradient1Click(Sender: TObject);
+var
+ gradstr: TStringList;
+begin
+ gradstr := TStringList.Create;
+ try
+ SaveForm.SaveType := stSaveGradient;
+ SaveForm.Filename := GradientFile;
+ SaveForm.Title := MainCp.name;
+ if SaveForm.ShowModal = mrOK then
+ begin
+ gradstr.add(CleanIdentifier(SaveForm.Title) + ' {');
+ gradstr.add(MainForm.GradientFromPalette(Palette, SaveForm.Title));
+ gradstr.add('}');
+ if MainForm.SaveGradient(gradstr.text, SaveForm.Title, SaveForm.Filename) then
+ GradientFile := SaveForm.FileName;
+ end;
+ finally
+ gradstr.free
+ end;
+end;
+
+procedure TAdjustForm.SaveasMapfile1Click(Sender: TObject);
+begin
+ SaveDialog.Filename := MainCp.name + '.map';
+ SaveDialog.Filter := Format('%s|*.map|%s|*.*', [
+ TextByKey('common-filter-fractintfiles'),
+ TextByKey('common-filter-allfiles')]);
+ if SaveDialog.execute then
+ SaveMap(SaveDialog.Filename);
+end;
+
+procedure TAdjustForm.cmbPaletteDrawItem(Control: TWinControl;
+ Index: Integer; Rect: TRect; State: TOwnerDrawState);
+var
+ i, j: integer;
+ Row: pRGBTripleArray;
+ Bitmap: TBitmap;
+ pal: TColorMap;
+ PalName: string;
+begin
+{ Draw the preset palettes on the combo box items }
+ GetCMap(index, 1, pal);
+ GetCmapName(index, PalName);
+
+ BitMap := TBitMap.create;
+ Bitmap.PixelFormat := pf24bit;
+ BitMap.Width := 256;
+ BitMap.Height := 100;
+
+ for j := 0 to Bitmap.Height - 1 do
+ begin
+ Row := Bitmap.Scanline[j];
+ for i := 0 to Bitmap.Width - 1 do
+ begin
+ with Row[i] do
+ begin
+ rgbtRed := Pal[i][0];
+ rgbtGreen := Pal[i][1];
+ rgbtBlue := Pal[i][2];
+ end
+ end
+ end;
+ with Control as TComboBox do
+ begin
+ Canvas.Rectangle(Rect);
+
+ Canvas.TextOut(4, Rect.Top, PalName);
+ Rect.Left := (Rect.Left + rect.Right) div 2;
+ Canvas.StretchDraw(Rect, Bitmap);
+ end;
+ BitMap.Free;
+end;
+
+procedure TAdjustForm.btnCopyClick(Sender: TObject);
+var
+ gradstr: TStringList;
+begin
+ gradstr := TStringList.Create;
+ try
+ gradstr.add(CleanIdentifier(MainCp.name) + ' {');
+ gradstr.add('gradient:');
+ gradstr.add(' title="' + MainCp.name + '" smooth=no');
+ gradstr.add(GradientString(Palette));
+ gradstr.add('}');
+ Clipboard.SetTextBuf(PChar(gradstr.text));
+ btnPaste.enabled := true;
+ mnuPaste.enabled := true;
+ MainForm.mnuPaste.enabled := False;
+ finally
+ gradstr.free
+ end;
+end;
+
+procedure TAdjustForm.btnPasteClick(Sender: TObject);
+begin
+ //if Clipboard.HasFormat(CF_TEXT) then // AV: sometimes it isn't enough...
+ if GradientInClipboard then // AV
+ begin
+ UpdateGradient(CreatePalette(Clipboard.AsText));
+ Apply;
+ end
+ else begin
+ btnPaste.Enabled := False; // AV
+ mnuPaste.Enabled := False; // AV
+ end;
+end;
+
+function GradientInClipboard: boolean;
+var
+ gradstr: TStringList;
+begin
+ { returns true if gradient in clipboard - can be tricked }
+ result := true;
+ if Clipboard.HasFormat(CF_TEXT) then
+ begin
+ gradstr := TStringList.Create;
+ try
+ gradstr.text := '';
+ try
+ gradstr.text := Clipboard.AsText;
+ finally
+ end;
+ if (Pos('}', gradstr.text) = 0) or (Pos('{', gradstr.text) = 0) or
+ (Pos('gradient:', gradstr.text) = 0) or (Pos('fractal:', gradstr.text) <> 0) then
+ begin
+ result := false;
+ exit;
+ end;
+ finally
+ gradstr.free;
+ end;
+ end
+ else
+ result := false;
+end;
+
+procedure TAdjustForm.AdjustColorFragmentClick(Sender: TObject);
+begin
+ if ColorSelection.ShowModal = mrOK then
+ begin
+ GradStatusBar.Panels[2].Text := TextByKey('adjustment-tab-gradient-start') + space + IntToStr(selA);
+ GradStatusBar.Panels[4].Text := TextByKey('adjustment-tab-gradient-last') + space + IntToStr(selB);
+ GradStatusBar.Refresh;
+ GradSelection.Refresh;
+ AdjustSelected.Checked := True;
+ //btnSelected.Visible := True;
+ end;
+end;
+
+(*
+procedure TAdjustForm.ApplicationEventsActivate(Sender: TObject);
+begin
+ if GradientInClipboard then begin
+ mnuPaste.enabled := true;
+ btnPaste.enabled := true;
+ end
+ else
+ begin
+ mnuPaste.enabled := false;
+ btnPaste.enabled := false;
+ end;
+end;
+*)
+
+procedure TAdjustForm.mnuSaveasDefaultClick(Sender: TObject);
+begin
+ DefaultPalette := Palette;
+ if not DirectoryExists(AppPath + 'Gradients\') then
+ CreateDir(AppPath + 'Gradients\'); // AV
+ SaveMap(AppPath + 'Gradients\default.map');
+end;
+
+procedure TAdjustForm.mnuSepiaClick(Sender: TObject);
+var i, sep: integer;
+begin
+ for i := 0 to 255 do
+ begin
+ sep := Round(0.299 * Palette[i,0] + 0.587 * Palette[i,1] + 0.114 * Palette[i,2]);
+ Palette[i,0] := IfThen(sep > 206, 255, sep + 49);
+ Palette[i,1] := IfThen(sep < 14, 0, sep - 14);
+ Palette[i,2] := IfThen(sep < 56, 0, sep - 56);
+ end;
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.mnuSetColorClick(Sender: TObject);
+var
+ i: integer;
+ col: Longint;
+begin
+ ColorDialog.Color := RGB(Palette[selA,0], Palette[selA,1], Palette[selA,2]);
+ if ColorDialog.Execute then
+ begin
+ col := ColorToRGB(ColorDialog.Color);
+ for i := selA to selB do
+ begin
+ Palette[i, 0] := col and 255;
+ Palette[i, 1] := col shr 8 and 255;
+ Palette[i, 2] := col shr 16 and 255;
+ end;
+ UpdateGradient(Palette);
+ Apply;
+ end;
+end;
+
+procedure TAdjustForm.mnuRandomizeClick(Sender: TObject);
+begin
+ UpdateGradient(GradientHelper.RandomGradient);
+ Apply;
+end;
+
+procedure TAdjustForm.GradientImageDblClick(Sender: TObject);
+begin
+ mnuRandomizeClick(Sender);
+end;
+
+procedure TAdjustForm.GradientImageMouseLeave(Sender: TObject);
+begin
+ GradStatusBar.Panels[0].Text := '';
+ GradStatusBar.Refresh;
+end;
+
+procedure TAdjustForm.GradImageMouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ if Button = mbLeft then
+ begin
+ dragX:=x;
+ oldX:=x; // hmmm
+ oldpos := (((x) shl 8) div GradientImage.Width) mod 256;
+ if oldpos = 0 then oldpos := 1;
+ startX := Round(x / (GradientImage.Width-1) * 255); // AV
+ if startX < 0 then startX := 0
+ else if startX > 255 then startX := 255;
+ tmpBackupPal := BackupPal;
+ if ssCtrl in Shift then
+ imgDragMode := imgDragStretch
+ else if ssAlt in Shift then // AV
+ imgDragMode := imgDragSelect
+ else
+ imgDragMode := imgDragRotate;
+ GradientChanged:=false;
+ end;
+end;
+
+procedure TAdjustForm.GradImageMouseMove(Sender: TObject;
+ Shift: TShiftState; X, Y: Integer);
+ procedure StretchGradient(i0, i1, j0, j1: integer);
+ var
+ k, f: double;
+ i, j, jj, n: integer;
+ begin
+ k := (j1 - j0) / (i1 - i0);
+
+ if k >= 1 then
+ begin
+ for i := i0 to i1-1 do
+ begin
+ j := j0 + round((i - i0) * k);
+
+assert(j >= 0);
+assert(j < 256);
+
+ cp.cmap[i] := Palette[j];
+ BackupPal[i] := tmpBackupPal[j]; //?
+ end;
+ end
+ else begin
+ for i := i0 to i1-1 do
+ begin
+ f := (i - i0) * k;
+ j := j0 + trunc(f);
+ f := frac(f);
+
+assert(j >= 0);
+assert(j < 256);
+
+ if j < 255 then jj := j + 1
+ else jj := 0;
+ for n := 0 to 2 do begin
+ cp.cmap[i][n] := round( Palette[j][n]*(1-f) + Palette[jj][n]*f );
+ BackupPal[i][n] := round( tmpBackupPal[j][n]*(1-f) + tmpBackupPal[jj][n]*f ); //?
+ end;
+ end;
+ end;
+ end;
+var
+ i, j, t: integer;
+ k: double;
+begin
+ t := Round(x / (GradientImage.Width-1) * 255) ;
+ if (t < 0) then t := 0
+ else if (t > 255) then t := 255;
+ GradStatusBar.Panels[0].Text := TextByKey('adjustment-tab-gradient-current') + space + IntToStr(t);
+ GradStatusBar.Refresh;
+ if (imgDragMode <> imgDragNone) and (oldX<>x) then
+ begin
+ oldX:=x;
+ offset := (((x - dragX) shl 8) div GradientImage.Width) mod 256;
+ txtVal.Text:=IntToStr(offset);
+ txtVal.Refresh;
+ //ScrollBar.Position := offset;
+ GradientChanged := true;
+
+ if imgDragmode = imgDragRotate then begin
+ for i := 0 to 255 do
+ begin
+ cp.cmap[i] := Palette[(256 + i - offset) and $FF];
+
+ BackupPal[i] := tmpBackupPal[(256 + i - offset) and $FF];
+ end;
+ end
+ else if imgDragMode = imgDragSelect then
+ begin
+ selA := startX;
+ selB := Round(x / (GradientImage.Width-1) * 255);
+ if (selA > selB) then begin
+ t := selA;
+ selA := selB;
+ selB := t;
+ end;
+ if (selA < 0) then selA := 0
+ else if (selA > 255) then selA := 255;
+ if (selB < 0) then selB := 0
+ else if (selB > 255) then selB := 255;
+ if (selB - selA > 1) then begin
+ //btnSelected.Visible := True;
+ AdjustSelected.Checked := True;
+ end;
+ GradStatusBar.Panels[2].Text := TextByKey('adjustment-tab-gradient-start') + space + IntToStr(selA);
+ GradStatusBar.Panels[4].Text := TextByKey('adjustment-tab-gradient-last') + space + IntToStr(selB);
+ GradStatusBar.Refresh;
+ GradSelection.Refresh;
+ end
+ else begin
+ offset := ((x shl 8) div GradientImage.Width);
+ if offset <= 0 then offset := 1
+ else if offset > 255 then offset := 255;
+
+ StretchGradient(0, offset, 0, oldpos);
+ StretchGradient(offset, 256, oldpos, 256);
+ end;
+
+ DrawPreview;
+ end;
+end;
+
+procedure TAdjustForm.GradImageMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ if imgDragMode <> imgDragNone then
+ begin
+ imgDragMode := imgDragNone;
+ txtVal.Text := '0';
+ Palette := cp.cmap;
+ if GradientChanged then Apply;
+ end;
+end;
+
+procedure TAdjustForm.GradSelectionPaint(Sender: TObject);
+var
+ w: double;
+begin
+ w := GradSelection.Width / 255;
+ GradSelection.Canvas.Brush.Color := BrightColor;
+ GradSelection.Canvas.FillRect(Rect(Round(w * selA), 0, Round(w * selB), 7));
+end;
+
+procedure TAdjustForm.GradStatusBarDblClick(Sender: TObject);
+begin
+ // AV: resetting color selection
+ AdjustSelected.Checked := False;
+ GradStatusBar.Panels[2].Text := '';
+ GradStatusBar.Panels[4].Text := '';
+ GradStatusBar.Refresh;
+ //btnSelected.Visible := False;
+ selA := 0; selB := 255;
+ GradSelection.Refresh;
+end;
+
+procedure TAdjustForm.GradStatusBarDrawPanel(StatusBar: TStatusBar;
+ Panel: TStatusPanel; const Rect: TRect);
+var i, n: integer;
+ s: string;
+begin
+ n := Panel.Index;
+ if Odd(n) then
+ if (StatusBar.Panels[n-1].Text <> '') then
+ begin
+ s := StatusBar.Panels[n-1].Text;
+ n := pos(space, s);
+ s := copy(s, n + 4, length(s) - n + 1);
+ i := StrToInt(s);
+ i := RGB(palette[i, 0], palette[i, 1], palette[i, 2]);
+ StatusBar.Canvas.Brush.Color := i;
+ StatusBar.Canvas.FillRect(Rect);
+ end;
+end;
+
+// AV: operations with selected color fragments
+
+procedure TAdjustForm.InvertColorsClick(Sender: TObject);
+var
+ i: integer;
+begin
+ for i := selA to selB do
+ begin
+ Palette[i][0] := 255 - Palette[i][0];
+ Palette[i][1] := 255 - Palette[i][1];
+ Palette[i][2] := 255 - Palette[i][2];
+ end;
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.LerpHSVClick(Sender: TObject);
+begin
+ cmap.HSVBlend(selA, selB, palette);
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.LerpRGBClick(Sender: TObject);
+begin
+ cmap.RGBBlend(selA, selB, palette);
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.MixcolorsClick(Sender: TObject);
+var i, j, l: integer;
+begin
+ l := High(tmpColors);
+ l := Min(selA + l, selB);
+ for i := selA to l do
+ for j := 0 to 2 do
+ Palette[i][j] := Round((Palette[i][j] + tmpColors[i - selA][j])/2);
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.Pastefragment1Click(Sender: TObject);
+var i, j, l: integer;
+begin
+ l := High(tmpColors);
+ l := Min(selA + l, selB);
+ for i := selA to l do
+ for j := 0 to 2 do Palette[i][j] := tmpColors[i - selA][j];
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.ReverseFragmentClick(Sender: TObject);
+ var
+ i, j: integer;
+ pal: array of array of byte;
+begin
+ SetLength(pal, selB - selA + 1, 3);
+ for i := selA to selB do
+ for j := 0 to 2 do
+ pal[i - selA][j] := Palette[i][j];
+ for i := 0 to selB - selA do
+ for j := 0 to 2 do
+ Palette[selB - i][j] := Pal[i][j];
+ UpdateGradient(palette);
+ Apply;
+end;
+
+// --Z-- // image size functions -----------------------------------------------
+
+function TAdjustForm.PresetToStr(n: integer): string;
+begin
+ Result:=IntToStr(Preset[n].Width) + ' x ' + IntToStr(Preset[n].Height)
+end;
+
+procedure TAdjustForm.RandomizeSelectedClick(Sender: TObject);
+var i, j: integer;
+ tempPal: TColorMap;
+begin
+ tempPal := GradientHelper.RandomGradient;
+ for i := selA to selB do
+ for j := 0 to 2 do
+ Palette[i, j] := tempPal[i, j];
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.ReadPreset(n: integer);
+begin
+ ImageWidth := Preset[n].Width;
+ ImageHeight := Preset[n].Height;
+ txtWidth.Text := IntToStr(ImageWidth);
+ txtHeight.Text := IntToStr(ImageHeight);
+
+ if chkResizeMain.Checked then begin
+ MainForm.Left:=Preset[n].Left;
+ MainForm.Top:=Preset[n].Top;
+ end;
+
+ SetMainWindowSize;
+end;
+
+procedure TAdjustForm.WeightChange(Sender: TObject);
+begin
+ CurvesControl.WeightLeft := tbWeightLeft.Position / 10.0;
+ CurvesControl.WeightRight := tbWeightRight.Position / 10.0;
+
+ cp.curveWeights[cbChannel.ItemIndex][1] := tbWeightLeft.Position / 10.0;
+ cp.curveWeights[cbChannel.ItemIndex][2] := tbWeightRight.Position / 10.0;
+
+ DrawPreview;
+end;
+
+procedure TAdjustForm.WeightScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+begin
+ if ScrollCode <> scEndScroll then Exit;
+
+ MainForm.StopThread;
+ MainForm.UpdateUndo;
+ MainCp.Copy(cp, true);
+
+ if EditForm.Visible then EditForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+ if CurvesForm.Visible then CurvesForm.SetCp(cp);
+
+ MainForm.RedrawTimer.enabled := true;
+{ if ScrollCode = scEndScroll then
+ CurvesControl.UpdateFlame; }
+end;
+
+procedure TAdjustForm.WritePreset(n: integer);
+var
+ Registry: TRegistry;
+ w,h: integer;
+begin
+ // Write preset to registry
+ Registry := TRegistry.Create;
+ try
+ w:=StrToInt(txtWidth.text);
+ h:=StrToInt(txtHeight.text);
+ if (w>0) and (h>0) then begin
+ Preset[n].Left:=MainForm.Left;
+ Preset[n].Top:=MainForm.Top;
+ Preset[n].Width:=w;
+ Preset[n].Height:=h;
+ end
+ else exit;
+
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\ImageSizePresets', True) then
+ begin
+ Registry.WriteInteger('Preset'+IntToStr(n)+'Left', Preset[n].Left);
+ Registry.WriteInteger('Preset'+IntToStr(n)+'Top', Preset[n].Top);
+ Registry.WriteInteger('Preset'+IntToStr(n)+'Width', Preset[n].Width);
+ Registry.WriteInteger('Preset'+IntToStr(n)+'Height', Preset[n].Height);
+ end;
+ except
+ end;
+end;
+
+function IsNumeric(s: string): boolean;
+var
+ i: integer;
+ start:integer;
+begin
+ Result := True;
+ s := trim(s);
+ if Length(s) = 0 then begin
+ result := false;
+ exit;
+ end;
+
+ start := 1;
+ if (s[1] = '-') then
+ start := 2;
+
+ for i:=start to length(s) do
+ if not (CharInSet(s[i],['0'..'9'])) then
+ begin
+ Result := False;
+ exit;
+ end;
+end;
+
+procedure TAdjustForm.txtValExit(Sender: TObject);
+begin
+ if (not IsNumeric(txtVal.Text)) then begin
+ { It's not, so we restore the old value }
+ txtVal.Text := IntToStr(ScrollBar.Position);
+ exit;
+ end;
+
+ ScrollBar.Position := StrToInt(Trim(txtVal.Text));
+ txtVal.Text := Trim(txtVal.Text);
+
+ UpdateFlame;
+end;
+
+procedure TAdjustForm.txtSizeKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key = #13 then
+ begin
+ key := #0;
+ SetMainWindowSize;
+ end;
+end;
+
+procedure TAdjustForm.cbAspectRatioChange(Sender: TObject);
+begin
+ case cbAspectRatio.ItemIndex of
+ 1: Ratio := ImageWidth / ImageHeight;
+ 2: Ratio := 1.5;
+ 3: Ratio := 4 / 3;
+ 4: Ratio := 1.25;
+ 5: Ratio := 16 / 9;
+ 6: Ratio := 1.6;
+ 7: Ratio := 21 / 9;
+ end;
+end;
+
+//procedure TAdjustForm.chkMaintainClick(Sender: TObject);
+//begin
+// Ratio := ImageWidth / ImageHeight;
+//end;
+
+procedure TAdjustForm.SetMainWindowSize;
+var
+ l, t, w, h: integer;
+begin
+ MainCp.AdjustScale(ImageWidth, ImageHeight);
+ MainForm.ResizeImage; //?
+
+ if chkResizeMain.Checked then begin
+ l := MainForm.Left;
+ t := MainForm.Top;
+ w := ImageWidth + MainForm.Width - (MainForm.BackPanel.Width - 2);
+ h := ImageHeight + MainForm.Height - (MainForm.BackPanel.Height - 2);
+ if w > Screen.Width then
+ begin
+ l := 0;
+ w := Screen.width;
+ end;
+ if h > Screen.height then
+ begin
+ t := 0;
+ h := Screen.height;
+ end;
+
+ MainForm.SetBounds(l, t, w, h);
+ end;
+ MainForm.RedrawTimer.Enabled := true;
+end;
+
+procedure TAdjustForm.GetMainWindowSize;
+begin
+ ImageWidth := MainCP.Width;
+ ImageHeight := MainCP.Height;
+ txtWidth.text := IntToStr(ImageWidth);
+ txtHeight.text := IntToStr(ImageHeight);
+end;
+
+procedure TAdjustForm.btnSelectedClick(Sender: TObject);
+begin
+ SelectedPopup.Popup(btnSelected.ClientOrigin.x, btnSelected.ClientOrigin.y + btnSelected.Height);
+end;
+
+procedure TAdjustForm.btnSelectedMouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ if Button = mbRight then AdjustColorFragmentClick(Sender);
+end;
+
+procedure TAdjustForm.btnSet1Click(Sender: TObject);
+begin
+ WritePreset(1);
+ btnPreset1.Caption := PresetToStr(1);
+ SetMainWindowSize;
+end;
+
+procedure TAdjustForm.btnSet2Click(Sender: TObject);
+begin
+ WritePreset(2);
+ btnPreset2.Caption := PresetToStr(2);
+ SetMainWindowSize;
+end;
+
+procedure TAdjustForm.btnSet3Click(Sender: TObject);
+begin
+ WritePreset(3);
+ btnPreset3.Caption := PresetToStr(3);
+ SetMainWindowSize;
+end;
+
+procedure TAdjustForm.btnPreset1Click(Sender: TObject);
+begin
+ ReadPreset(1);
+end;
+
+procedure TAdjustForm.btnPreset2Click(Sender: TObject);
+begin
+ ReadPreset(2);
+end;
+
+procedure TAdjustForm.btnPreset3Click(Sender: TObject);
+begin
+ ReadPreset(3);
+end;
+
+procedure TAdjustForm.txtWidthChange(Sender: TObject);
+begin
+ try
+ ImageWidth := StrToInt(txtWidth.Text);
+ if (cbAspectRatio.ItemIndex > 0) and txtWidth.Focused then
+ begin
+ ImageHeight := Round(ImageWidth / ratio);
+ txtHeight.Text := IntToStr(ImageHeight)
+ end;
+ except
+ end;
+end;
+
+procedure TAdjustForm.txtHeightChange(Sender: TObject);
+begin
+ try
+ ImageHeight := StrToInt(txtHeight.Text);
+ if (cbAspectRatio.ItemIndex > 0) and txtHeight.Focused then
+ begin
+ ImageWidth := Round(ImageHeight * ratio);
+ txtWidth.Text := IntToStr(ImageWidth)
+ end;
+ except
+ end;
+end;
+
+procedure TAdjustForm.btnUndoClick(Sender: TObject);
+begin
+ MainForm.Undo;
+end;
+
+procedure TAdjustForm.btResetZoomClick(Sender: TObject);
+var v: double;
+begin
+ if cp.zoom = 0 then exit; // prevent useless updates
+ v := cp.pixels_per_unit * power(2, cp.zoom);
+ cp.pixels_per_unit := v;
+ editPPU.Text := Format('%.6g', [100 * v / PreviewImage.Width]);
+ cp.zoom := 0;
+ txtZoom.Text := '0';
+ scrollZoom.Position := 0;
+ UpdateFlame;
+end;
+
+procedure TAdjustForm.btnRedoClick(Sender: TObject);
+begin
+ MainForm.Redo;
+end;
+
+procedure TAdjustForm.btnColorPresetClick(Sender: TObject);
+begin
+ cmbPalette.ItemIndex := Random(NRCMAPS);
+ cmbPaletteChange(Sender);
+end;
+
+procedure TAdjustForm.btnApplySizeClick(Sender: TObject);
+begin
+ SetMainWindowSize;
+end;
+
+procedure TAdjustForm.mnuInstantPreviewClick(Sender: TObject);
+begin
+ mnuInstantPreview.Checked := not mnuInstantPreview.Checked;
+end;
+
+procedure TAdjustForm.editPPUKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9', #8, #13, '.'])
+ then Key:= #0;
+ if key=#13 then
+ begin
+ key := #0;
+ editPPUValidate(Sender);
+ end;
+end;
+
+procedure TAdjustForm.editPPUValidate(Sender: TObject);
+var
+ v: double;
+begin
+ try
+ v := strtofloat(editPPU.Text);
+ except
+ exit;
+ end;
+ v := v/100*PreviewImage.Width;
+ if (v > 0) and (cp.pixels_per_unit <> v) then begin
+ MainForm.UpdateUndo;
+ cp.pixels_per_unit := v;
+ UpdateFlame;
+ end;
+end;
+
+// -----------------------------------------------------------------------------
+
+procedure TAdjustForm.DragPanelMouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+var enableDrag : boolean ;
+begin
+ if Button <> mbLeft then exit;
+
+ enableDrag := true;
+ if (Sender = pnlMasterScale) then
+ pnlDragValue := cp.pixels_per_unit / PreviewImage.Width
+ else if (Sender = pnlZoom) then
+ pnlDragValue := cp.zoom
+ else if (Sender = pnlXpos) then
+ pnlDragValue := cp.Center[0]
+ else if (Sender = pnlYpos) then
+ pnlDragValue := cp.Center[1]
+ else if (Sender = pnlAngle) then
+ pnlDragValue := cp.FAngle
+ else if (Sender = pnlGamma) then
+ pnlDragValue := cp.gamma
+ else if (Sender = pnlBrightness) then
+ pnlDragValue := cp.brightness
+ else if (Sender = pnlVibrancy) then
+ pnlDragValue := cp.vibrancy
+ // 3d camera controls
+ else if (Sender = pnlPitch) then
+ pnlDragValue := cp.cameraPitch * 180.0 / PI
+ else if (Sender = pnlYaw) then
+ pnlDragValue := cp.cameraYaw * 180.0 / PI
+ else if (Sender = pnlRoll) then // AV
+ pnlDragValue := cp.cameraRoll * 180.0 / PI
+ else if (Sender = pnlPersp) then
+ pnlDragValue := cp.cameraPersp
+ else if (Sender = pnlZpos) then
+ pnlDragValue := cp.cameraZpos
+ else if (Sender = pnlDOF) then
+ pnlDragValue := cp.cameraDOF
+ else if (Sender = pnlGammaThreshold) then
+ pnlDragValue := cp.gammaThreshRelative
+ else if (Sender = pnlContrast) then // AV
+ pnlDragValue := cp.contrast // AV
+ else enableDrag := false; //assert(false)};
+
+ if enableDrag then begin
+ pnlDragMode := true;
+ pnlDragPos := 0;
+ pnlDragOld := x;
+ pnlMM := false;
+ //SetCaptureControl(TControl(Sender));
+
+ Screen.Cursor := crHSplit;
+ //GetCursorPos(mousepos); // hmmm
+ mousePos := (Sender as TControl).ClientToScreen(Point(x, y));
+ pnlDragged := false;
+ end;
+end;
+
+procedure TAdjustForm.DragPanelMouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+var
+ sc, v: double;
+begin
+ if pnlMM then // hack: to skip MouseMove event
+ begin
+ pnlMM:=false;
+ end
+ else
+ if pnlDragMode and (x <> pnlDragOld) then
+ begin
+ Inc(pnlDragPos, x - pnlDragOld);
+
+ if GetKeyState(VK_MENU) < 0 then sc := 100000
+ else if GetKeyState(VK_CONTROL) < 0 then sc := 10000
+ else if GetKeyState(VK_SHIFT) < 0 then sc := 100
+ else sc := 1000;
+
+ if (Sender = pnlPitch) or (Sender = pnlYaw) or (Sender = pnlRoll) then
+ sc := sc / 50
+ else if Sender = pnlPersp then sc := sc * 10;
+
+ v := Round6(pnlDragValue + pnlDragPos / sc);
+
+ SetCursorPos(MousePos.x, MousePos.y); // hmmm
+ pnlMM:=true;
+
+ if (Sender = pnlMasterScale) then
+ begin
+ v := Round6(pnlDragValue * power(2, pnlDragPos / sc / 2));
+ if v <= 0.0001 then v := 0.0001;
+ cp.pixels_per_unit := v*PreviewImage.Width;
+ editPPU.Text := FloatToStr(v*100);
+ end
+ else if (Sender = pnlZoom) then
+ begin
+ scrollZoom.Position := trunc(v * 1000);
+ end
+ else if (Sender = pnlXpos) then
+ begin
+ scrollCenterX.Position := trunc(v * 1000);
+ end
+ else if (Sender = pnlYpos) then
+ begin
+ scrollCenterY.Position := trunc(v * 1000);
+ end
+ else if (Sender = pnlAngle) then
+ begin
+ scrollAngle.Position := Trunc(v * 18000.0 / PI) mod 36000;
+ end
+ else if (Sender = pnlGamma) then
+ begin
+ scrollGamma.Position := trunc(v * 100);
+ end
+ else if (Sender = pnlBrightness) then
+ begin
+ scrollBrightness.Position := trunc(v * 100);
+ end
+ else if (Sender = pnlVibrancy) then
+ begin
+ scrollVibrancy.Position := trunc(v * 100);
+ end
+ else if (Sender = pnlContrast) then // AV
+ begin
+ scrollContrast.Position := trunc(v * 100);
+ end
+ else if (Sender = pnlPitch) then // 3d camera controls
+ begin
+ v := v - 360*Trunc(v/360);
+ cp.cameraPitch := v * PI / 180.0;
+ txtPitch.Text := FloatToStr(v);
+ end
+ else if (Sender = pnlYaw) then
+ begin
+ v := v - 360*Trunc(v/360);
+ cp.cameraYaw := v * PI / 180.0;
+ txtYaw.Text := FloatToStr(v);
+ end
+ else if (Sender = pnlRoll) then // AV
+ begin
+ v := v - 360*Trunc(v/360);
+ cp.cameraRoll := v * PI / 180.0;
+ txtRoll.Text := FloatToStr(v);
+ end
+ else if (Sender = pnlPersp) then
+ begin
+ cp.cameraPersp := v;
+ txtPersp.Text := FloatToStr(v);
+ end
+ else if (Sender = pnlZpos) then
+ begin
+ cp.cameraZpos := v;
+ txtZpos.Text := FloatToStr(v);
+ end
+ else if (Sender = pnlDOF) then
+ begin
+ if v < 0 then v := 0;
+ cp.cameraDOF := v;
+ txtDOF.Text := FloatToStr(v);
+ end
+ else if (Sender = pnlGammaThreshold) then
+ begin
+ if v < 0 then v := 0;
+ cp.gammaThreshRelative := v;
+ txtGammaThreshold.Text := FloattoStr(cp.gammaThreshRelative);
+ end else exit;
+ //pEdit^.Text := FloatToStr(v);
+ //pEdit.Refresh;
+ pnlDragged := True;
+ DrawPreview;
+ end;
+end;
+
+procedure TAdjustForm.DragPanelMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ if Button <> mbLeft then exit;
+
+ if pnlDragMode then
+ begin
+ //SetCaptureControl(nil);
+ pnlDragMode := false;
+ Screen.Cursor := crDefault;
+
+ if pnlDragged then
+ begin
+ UpdateFlame;
+ pnlDragged := False;
+ end;
+ end;
+end;
+
+procedure TAdjustForm.DarkRemoverClick(Sender: TObject);
+const level = 45;
+var isDark: boolean;
+ i, r, g, b: byte;
+begin
+ isDark := False;
+ for i := 0 to 255 do
+ begin
+ r := Palette[i,0];
+ g := Palette[i,1];
+ b := Palette[i,2];
+ if (r < level) and (g < level) and (b < level) then
+ begin
+ isDark := True;
+ Brighten(level, r, g, b);
+ Palette[i,0] := r;
+ Palette[i,1] := g;
+ Palette[i,2] := b;
+ end;
+ end;
+ if isDark then begin
+ UpdateGradient(palette);
+ Apply;
+ end;
+end;
+
+procedure TAdjustForm.DragPanelDblClick(Sender: TObject);
+var
+ pValue: ^double;
+begin
+ if (Sender = pnlMasterScale) then
+ begin
+ pValue := @cp.pixels_per_unit;
+ if pValue^ = PreviewImage.Width/4 then exit;
+ pValue^ := PreviewImage.Width/4;
+ editPPU.Text := FloatToStr(100*pValue^/PreviewImage.Width);
+ end
+ else if (Sender = pnlZoom) then
+ begin
+ scrollZoom.Position := 0;
+ txtZoom.Text := '0'; // AV
+ end
+ else if (Sender = pnlXpos) then
+ begin
+ scrollCenterX.Position := 0;
+ txtCenterX.Text := '0'; // AV
+ end
+ else if (Sender = pnlYpos) then
+ begin
+ scrollCenterY.Position := 0;
+ txtCenterY.Text := '0'; // AV
+ end
+ else if (Sender = pnlAngle) then
+ begin
+ scrollAngle.Position := 0;
+ txtAngle.Text := '0'; // AV
+ end
+ else if (Sender = pnlGamma) then
+ begin
+ scrollGamma.Position := Round(defGamma * 100);
+ txtGamma.Text := FloatToStr(defGamma); // AV
+ end
+ else if (Sender = pnlBrightness) then
+ begin
+ scrollBrightness.Position := Round(defBrightness * 100);
+ txtBrightness.Text := FloatToStr(defBrightness); // AV
+ end
+ else if (Sender = pnlVibrancy) then
+ begin
+ scrollVibrancy.Position := Round(defVibrancy * 100);
+ txtVibrancy.Text := FloatToStr(defVibrancy); // AV
+ end
+ else if (Sender = pnlContrast) then // AV
+ begin
+ scrollContrast.Position := Round(defContrast * 100); // AV
+ txtContrast.Text := FloatToStr(defContrast); // AV
+ end
+ // 3d camera controls
+ else if (Sender = pnlPitch) then
+ begin
+ cp.cameraPitch := 0;
+ txtPitch.Text := '0';
+ end
+ else if (Sender = pnlYaw) then
+ begin
+ cp.cameraYaw := 0;
+ txtYaw.Text := '0';
+ end
+ else if (Sender = pnlRoll) then // AV
+ begin
+ cp.cameraRoll := 0;
+ txtRoll.Text := '0';
+ end
+ else if (Sender = pnlPersp) then
+ begin
+ if cp.cameraPersp = 0 then cp.cameraPersp := 0.125
+ else cp.cameraPersp := 0;
+ txtPersp.Text := FloatToStr(cp.cameraPersp);
+ end
+ else if (Sender = pnlZpos) then
+ begin
+ cp.cameraZpos := 0;
+ txtZpos.Text := '0';
+ end
+ else if (Sender = pnlDOF) then
+ begin
+ cp.cameraDOF := 0;
+ txtDOF.Text := '0';
+ end
+ else if (Sender = pnlGammaThreshold) then
+ begin
+ // AV: commented out to reset user's input text properly
+ // if cp.gammaThreshRelative = defGammaThreshold then exit;
+ cp.gammaThreshRelative := defGammaThreshold;
+ txtGammaThreshold.Text := FloatToStr(defGammaThreshold);
+ end
+ else exit; //assert(false);
+
+ UpdateFlame;
+end;
+
+procedure TAdjustForm.Fliplefthalf1Click(Sender: TObject);
+var i: byte;
+begin
+ for i := 0 to 127 do
+ begin
+ Palette[255-i,0] := Palette[i,0];
+ Palette[255-i,1] := Palette[i,1];
+ Palette[255-i,2] := Palette[i,2];
+ end;
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.Fliprighthalf1Click(Sender: TObject);
+var i: byte;
+begin
+ for i := 0 to 127 do
+ begin
+ Palette[i,0] := Palette[255-i,0];
+ Palette[i,1] := Palette[255-i,1];
+ Palette[i,2] := Palette[255-i,2];
+ end;
+ UpdateGradient(palette);
+ Apply;
+end;
+
+procedure TAdjustForm.FormActivate(Sender: TObject);
+begin
+ txtVibrancy.text := FloatToStr(cp.Vibrancy);
+ txtGamma.text := FloatToStr(cp.Gamma);
+ txtBrightness.text := FloatToStr(cp.Brightness);
+ txtContrast.text := FloatToStr(cp.Contrast); // AV
+ txtGammaThreshold.text := FloatToStr(cp.gammaThreshRelative); // AV
+ txtZoom.text := FloatToStr(cp.zoom);
+ txtCenterX.text := FloatToStr(cp.center[0]);
+ txtCentery.text := FloatToStr(cp.center[1]);
+ txtAngle.text := FloatToStr(cp.FAngle * 180 / PI);
+ btnPaste.Enabled := GradientInClipboard; // AV
+ mnuPaste.Enabled := btnPaste.Enabled; // AV
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TAdjustForm.txtCamEnter(Sender: TObject);
+begin
+ EditBoxValue := (Sender as TEdit).Text;
+end;
+
+procedure TAdjustForm.txtCamPitchExit(Sender: TObject);
+var
+ v: double;
+begin
+ if (EditBoxValue <> txtPitch.Text) then
+ try
+ v := StrToFloat(txtPitch.Text);
+ v := v - 360*Trunc(v/360);
+ txtPitch.Text := FloatToStr(v);
+ cp.cameraPitch := v * PI / 180;
+ UpdateFlame;
+ except on EConvertError do
+ txtPitch.Text := FloatToStr(cp.cameraPitch / PI * 180);
+ end;
+end;
+
+procedure TAdjustForm.txtCamPitchKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (EditBoxValue <> (Sender as TEdit).Text)) then
+ begin
+ key := #0;
+ txtCamPitchExit(Sender);
+ end;
+end;
+
+procedure TAdjustForm.txtCamRollExit(Sender: TObject);
+var
+ v: double;
+begin
+ if (EditBoxValue <> txtRoll.Text) then
+ try
+ v := StrToFloat(txtRoll.Text);
+ v := v - 360*Trunc(v/360);
+ txtRoll.Text := FloatToStr(v);
+ cp.cameraRoll := v * PI / 180;
+ UpdateFlame;
+ except on EConvertError do
+ txtRoll.Text := FloatToStr(cp.cameraRoll / PI * 180);
+ end;
+end;
+
+procedure TAdjustForm.txtCamRollKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (EditBoxValue <> (Sender as TEdit).Text)) then
+ begin
+ key := #0;
+ txtCamRollExit(Sender);
+ end;
+end;
+
+procedure TAdjustForm.txtCamYawExit(Sender: TObject);
+var
+ v: double;
+begin
+ if (EditBoxValue <> txtYaw.Text) then
+ try
+ v := StrToFloat(txtYaw.Text);
+ v := v - 360*Trunc(v/360);
+ txtYaw.Text := FloatToStr(v);
+ cp.cameraYaw := v * PI / 180;
+ UpdateFlame;
+ except on EConvertError do
+ txtYaw.Text := FloatToStr(cp.cameraYaw / PI * 180);
+ end;
+end;
+
+procedure TAdjustForm.txtCamYawKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (EditBoxValue <> (Sender as TEdit).Text)) then
+ begin
+ key := #0;
+ txtCamYawExit(Sender);
+ end;
+end;
+
+procedure TAdjustForm.txtCamDistExit(Sender: TObject);
+begin
+ if (EditBoxValue <> txtPersp.Text) then
+ try
+ cp.cameraPersp := StrToFloat(txtPersp.Text);
+ UpdateFlame;
+ except on EConvertError do
+ txtPersp.Text := FloatToStr(cp.cameraPersp);
+ end;
+end;
+
+procedure TAdjustForm.txtCamDistKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0; // AV
+ if ((key = #13) and (EditBoxValue <> (Sender as TEdit).Text)) then
+ begin
+ key := #0;
+ txtCamDistExit(Sender);
+ end;
+end;
+
+procedure TAdjustForm.txtCamZposExit(Sender: TObject);
+begin
+ if (EditBoxValue <> txtZpos.Text) then
+ try
+ cp.cameraZpos := StrToFloat(txtZpos.Text);
+ txtZpos.Text := FloatToStr(cp.cameraZpos);
+ UpdateFlame;
+ except on EConvertError do
+ txtZpos.Text := FloatToStr(cp.cameraZpos);
+ end;
+end;
+
+procedure TAdjustForm.txtCamZposKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0; // AV
+ if ((key = #13) and (EditBoxValue <> (Sender as TEdit).Text)) then
+ begin
+ key := #0;
+ txtCamZposExit(Sender);
+ end;
+end;
+
+procedure TAdjustForm.txtCamDofExit(Sender: TObject);
+begin
+ if (EditBoxValue <> txtDof.Text) then
+ try
+ cp.cameraDOF := StrToFloat(txtDof.Text);
+ txtDof.Text := FloatToStr(cp.cameraDOF);
+ UpdateFlame;
+ except on EConvertError do
+ txtDof.Text := FloatToStr(cp.cameraDOF);
+ end;
+end;
+
+procedure TAdjustForm.txtCamDofKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0;
+ if ((key = #13) and (EditBoxValue <> (Sender as TEdit).Text)) then
+ begin
+ key := #0;
+ txtCamDofExit(Sender);
+ end;
+end;
+
+procedure TAdjustForm.PreviewImageMouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ if Button <> mbLeft then exit;
+
+ camDragValueY := cp.cameraPitch * 180.0 / PI;
+ camDragValueX := cp.cameraYaw * 180.0 / PI;
+
+ camDragMode := true;
+ camDragPos.x := 0;
+ camDragPos.y := 0;
+ camDragOld.x := x;
+ camDragOld.y := y;
+ camMM := false;
+ //SetCaptureControl(TControl(Sender));
+
+ Screen.Cursor := crNone;
+ //GetCursorPos(mousepos); // hmmm
+ mousePos := (Sender as TControl).ClientToScreen(Point(x, y));
+ camDragged := false;
+end;
+
+procedure TAdjustForm.PreviewImageMouseMove(Sender: TObject;
+ Shift: TShiftState; X, Y: Integer);
+var
+ sc, vx, vy: double;
+begin
+ if camMM then // hack: to skip MouseMove event
+ begin
+ camMM:=false;
+ end
+ else
+ if camDragMode and ( (x <> camDragOld.x) or (y <> camDragOld.y) ) then
+ begin
+ Inc(camDragPos.x, x - camDragOld.x);
+ Inc(camDragPos.y, y - camDragOld.y);
+
+ vx := Round6(camDragValueX + camDragPos.x / 10);
+ vy := Round6(camDragValueY - camDragPos.y / 10);
+
+ cp.cameraPitch := vy * PI / 180.0;
+ txtPitch.Text := FloatToStr(vy);
+ txtPitch.Refresh;
+ cp.cameraYaw := vx * PI / 180.0;
+ txtYaw.Text := FloatToStr(vx);
+ txtYaw.Refresh;
+
+ SetCursorPos(MousePos.x, MousePos.y); // hmmm
+ pnlMM:=true;
+
+ camDragged := True;
+ DrawPreview;
+ end;
+end;
+
+procedure TAdjustForm.PreviewImageMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ if Button <> mbLeft then exit;
+
+ if camDragMode then
+ begin
+ camDragMode := false;
+ Screen.Cursor := crDefault;
+
+ if camDragged then
+ begin
+ UpdateFlame;
+ camDragged := False;
+ end;
+ end;
+end;
+
+procedure TAdjustForm.PreviewImageDblClick(Sender: TObject);
+begin
+ cp.cameraPitch := 0;
+ txtPitch.Text := '0';
+ cp.cameraYaw := 0;
+ txtYaw.Text := '0';
+ cp.cameraRoll := 0; // AV
+ txtRoll.Text := '0';
+ cp.cameraZpos := 0; // AV
+ txtZpos.Text := '0';
+ cp.cameraPersp := 0; // AV
+ txtPersp.Text := '0';
+ cp.cameraDOF := 0; // AV
+ txtDOF.Text := '0';
+ scrollCenterX.Position := 0;
+ scrollCenterY.Position := 0;
+
+ UpdateFlame;
+end;
+
+procedure TAdjustForm.txtGammaThresholdEnter(Sender: TObject);
+begin
+ EditBoxValue := txtGammaThreshold.Text;
+end;
+
+procedure TAdjustForm.txtGammaThresholdExit(Sender: TObject);
+var
+ v: double;
+begin
+ try
+ v := strtofloat(txtGammaThreshold.Text);
+ except
+ exit;
+ end;
+ if v < 0 then v := 0;
+ if v <> cp.gammaThreshRelative then begin
+ MainForm.UpdateUndo;
+ cp.gammaThreshRelative := v;
+ txtGammaThreshold.Text := FloatToStr(cp.gammaThreshRelative);
+ UpdateFlame;
+ EditBoxValue := txtGammaThreshold.Text;
+ end;
+end;
+
+procedure TAdjustForm.txtGammaThresholdKeyPress(Sender: TObject;
+ var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9', #8, #13, '.'])
+ then Key:= #0;
+ if key=#13 then
+ begin
+ key := #0;
+ txtGammaThresholdExit(Sender);
+ end;
+end;
+
+procedure TAdjustForm.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ ColorPanelClick(nil);
+end;
+
+procedure TAdjustForm.Smoothize1Click(Sender: TObject);
+begin
+ MainForm.Smoothize(Palette, 0, 255);
+end;
+
+procedure TAdjustForm.SmoothizeSelectedClick(Sender: TObject);
+begin
+ MainForm.Smoothize(Palette, selA, selB);
+end;
+
+procedure TAdjustForm.btnResetClick(Sender: TObject);
+begin
+ ScrollBar.Position := 0;
+end;
+
+procedure TAdjustForm.btnResetCurvesClick(Sender: TObject);
+var i: integer;
+begin
+ tbWeightLeft.Position := 10;
+ tbWeightRight.Position := 10;
+
+ with cp do for i := 0 to 3 do
+ begin
+ curvePoints[i][0].x := 0.00; curvePoints[i][0].y := 0.00; curveWeights[i][0] := 1;
+ curvePoints[i][1].x := 0.00; curvePoints[i][1].y := 0.00; curveWeights[i][1] := 1;
+ curvePoints[i][2].x := 1.00; curvePoints[i][2].y := 1.00; curveWeights[i][2] := 1;
+ curvePoints[i][3].x := 1.00; curvePoints[i][3].y := 1.00; curveWeights[i][3] := 1;
+ end;
+ MainCp.Copy(cp, true);
+ SetCurvesCp(MainCp);
+
+ Apply;
+end;
+
+procedure TAdjustForm.txtValKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.';
+ if not CharinSet(Key,['0'..'9','-', #8, #13, '.'])
+ then Key:= #0;
+ if Key=#13 then begin
+ Key := #0;
+ txtValExit(sender);
+ end;
+end;
+
+{procedure TAdjustForm.TemplateRandomizeGradient;
+begin
+ mnuRandomizeClick(nil);
+end; }
+
+end.
+
diff --git a/Forms/Browser.dfm b/Forms/Browser.dfm
new file mode 100644
index 0000000..d699304
--- /dev/null
+++ b/Forms/Browser.dfm
@@ -0,0 +1,374 @@
+object GradientBrowser: TGradientBrowser
+ Left = 494
+ Top = 299
+ BorderIcons = [biSystemMenu, biMinimize]
+ Caption = 'Gradient Browser'
+ ClientHeight = 297
+ ClientWidth = 528
+ Color = clBtnFace
+ Constraints.MinHeight = 120
+ Constraints.MinWidth = 380
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001010000001002000680400001600000028000000100000002000
+ 0000010020000000000040040000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000045C6F00100000000000000002DA5D654247EACE51F89B8FD1F7D
+ A8FC2385AFFA209DD2A01DA9DF53000000000000000000000000000000000000
+ 00000000000000000000000000003AB6E247228CC1F143C2EAFF48C3E7FF4EC9
+ ECFF44C1E2F538A3C7FB1A7CABF9199BD1830000000000000000000000000000
+ 000063D2F201000000000000000020B5E9FF34B0DBCE59D2F0FF5CD4F0FF5CD7
+ F2FF5AD6F2FD51CFECFB37AED7F4187BA9FD1A94C98F00000000000000000000
+ 000070D8F302000000000000000022B3E7FE1C97C9E751CAE9FF5FD7F2FF0AB3
+ 67FF006F00FF008825FF53D1EEFA2E9FCCEE187DACFE0B87BD020000000082DF
+ F4027CDCF40700000000000000006AD4F36C1181B2FD52CAE8FE62DAF3FF23D9
+ 71FF00912BFF006000FF62D9F3FF49C3E5EF1280B0FE1B9BCE73000000000000
+ 000089E2F42084DFF4421D99C2FD37A4C9FF46C2EBFF65D4F0FB66DAF3FE3EDB
+ 8CFF00BA50FF00AB67FF63D9F3FF51CBEBF41E8BB9F81D95C8A7000000000000
+ 000076DCF4693BB4DCF78BE2F4B59AE7F7E895E6F6FE95E8F6FE8CE3F5FF85E3
+ F4FF70DEF4FF68DCF4FF6ADBF4FF5CD4EFF4208BB9F72297C9AB000000000000
+ 000054CBF3F98EE3F5CFB6F1F8FFB6F1F8FF9EEAF6FE93E9F6FF94E8F6FFB359
+ 23FFB30F00FFAB2B00FF73DEF4FB63D7EFEE1D84B4F8279DCE94000000000000
+ 000070D4F5FFA4EDF6E6B6F1F8FF2959F3FF00007AFF001FDBFF93E9F6FFB08C
+ 64FFB03A00FF610000FF73DEF4F45CC3E3DE2781AEEF64D3F23E000000000000
+ 000070D4F5FFACF0F7EBB6F1F8FF5490FFFF0022D9FF000058FFB2F0F8FFB4B6
+ 97FFB38D64FFB6AB8CFF78D3ECE8359AC9EC51B6DB8F00000000000000000000
+ 00007AD8F5F89EEAF6E6B6F1F8FF6DAFFFFF5590FFFF6DB0FFFFB6F1F8FFA5EC
+ F7FEA7ECF7FE98E7F5F14DB0D9F55DBBDDAB84DFF44000000000000000000000
+ 0000A9EFF7786BD4F4FB9DEAF6EEAFF1F7F4B6F1F8FFB6F1F8FFB6F1F8FFA6EE
+ F6F9A0EAF6EF70D2EDE354C6EDF895E7F5580000000000000000000000000000
+ 000000000000AAEFF78F5ACFF3F998E8F6E0B6F1F8FFB6F1F8FFB6F1F8FF92E7
+ F6E46CD4F4FA65D2F4E984D4E874000000000000000000000000000000000000
+ 00000000000000000000A9EFF7737CD9F6F476D6F5FA72D4F5FD75D6F5FB5ECF
+ F4F190E6F5930000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ 0000D80F0000F0070000B0030000B00100003001000080010000800100008001
+ 000080010000800300008003000080070000C00F0000E03F0000FFFF0000}
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnResize = FormResize
+ OnShow = FormShow
+ DesignSize = (
+ 528
+ 297)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object btnDefGradient: TSpeedButton
+ Left = 411
+ Top = 7
+ Width = 23
+ Height = 21
+ Hint = 'Open...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnDefGradientClick
+ end
+ object btnRandom: TSpeedButton
+ Left = 464
+ Top = 263
+ Width = 23
+ Height = 21
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFF9F9F99E9E9EA3A7A69F9F9FC4C3C3EFEEEEFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A0C6C6C5EAFAF9D7
+ EAE8BEC7C59B9D9DAFAFAEDAD9DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFA7A7A7B9B9B9E7E6E7E3F8F7B5C1BE838784D9E9E6C6D0CDA6ACAA9F9F
+ A0BBBBBBF5F5F5FFFFFFFFFFFFFFFFFFB0B0B0A8A8A8DEDDDDDCDCDCE3F9F7BA
+ C9C7403D3CC2D3D1EDFFFCCAD3CFC0C5C1B8BDBA959595FFFFFFFFFFFFBDBDBD
+ 9A9A9AD5D5D5D4D5D5DDDDDDDBEFEEE1FDFBDFF3F2C2D1CECBD9D69B9B993932
+ 31D5DDD9939594FFFFFFFFFFFF878787C7C7C7BEBDBDCCCACADDDDDDE1F7F6C7
+ DBDACBDDDCA2A7A6352F2EBFCDC99AA19DD0D9D5949594FFFFFFFFFFFF8C8D8D
+ CCCDCD544C4C9F9D9DE3E3E3E5FDFDA9B4B4332C2CBCCBCB9BA5A4CFE0DDECFE
+ FAE1EEE98F908FFFFFFFFFFFFF8A8A8AC3C3C38C8A8AC0C1C1E2E1E1F0FCFCE1
+ F8F79FAEAECBE3E1EFFFFFABB0AF6F6E6DDBEAE7949997FFFFFFFFFFFF888888
+ C1C1C1CDCDCDD6D6D6F3F3F3FAF8F8FAF9FAFDFFFFE6F8F7DEF6F4B6C1C04644
+ 44C7D5D29DA2A1FFFFFFFFFFFF898989C0C0C0C2C2C2F2F2F2EDECEC67626274
+ 6D6EFDFBFBF6F6F6EEF2F2EAF5F4DBEBE8E2F4EFA1A6A5FFFFFFFFFFFF868686
+ BEBEBEE3E3E3FFFFFFF6F5F5A5A5A5A7A5A5F3F2F2F0EFEFEDEBEBEBE9E9EFEF
+ EFF8FDFB9A9D9BFFFFFFFFFFFF8D8D8DEDEDEDFFFFFFFAFAFAFFFFFFE8E7E765
+ 5F5F817C7CF4F4F4ECECECE6E6E6F1F0F0AFAEAEA3A3A3FFFFFFFFFFFF858585
+ E9E9E9FEFEFEFFFFFFFFFFFFEFEEEEA09E9E999595E0DFDFEAEBEBF0F0F0ABAB
+ ABA3A3A3FEFEFEFFFFFFFFFFFFD2D2D2969696979797BBBBBBE9E9E9FFFFFFCE
+ CCCC423E3E999696FBFBFBA4A4A4A9A9A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFF1F1F1B5B5B5999999979797BDBDBDC7C7C7E5E5E5A0A0A0B1B1B1FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE1E1E1B3
+ B3B39797978E8E8EB4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnRandomClick
+ end
+ object ListView: TListView
+ Left = 7
+ Top = 7
+ Width = 398
+ Height = 234
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Columns = <
+ item
+ Caption = 'Title'
+ Width = 150
+ end>
+ HideSelection = False
+ RowSelect = True
+ ParentShowHint = False
+ PopupMenu = PopupMenu
+ ShowHint = True
+ SmallImages = SmallImages
+ SortType = stText
+ TabOrder = 1
+ ViewStyle = vsList
+ OnChange = ListViewChange
+ OnDblClick = ListViewDblClick
+ OnEdited = ListViewEdited
+ OnInfoTip = ListViewInfoTip
+ OnKeyPress = ListViewKeyPress
+ end
+ object pnlMain: TPanel
+ Left = 0
+ Top = 0
+ Width = 528
+ Height = 4
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ end
+ object pnlPreview: TPanel
+ Left = 0
+ Top = 256
+ Width = 457
+ Height = 37
+ Anchors = [akLeft, akRight, akBottom]
+ BevelOuter = bvLowered
+ TabOrder = 2
+ object Image: TImage
+ Left = 1
+ Top = 1
+ Width = 455
+ Height = 35
+ Align = alClient
+ Stretch = True
+ ExplicitWidth = 485
+ ExplicitHeight = 23
+ end
+ end
+ object SmallImages: TImageList
+ Left = 192
+ Top = 24
+ Bitmap = {
+ 494C010101000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000001000000001002000000000000010
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFF5F000FFF1
+ E900FFEFE600FFEFE600FFF0E700FFF1E800FFF1E900FFF3EB00FFF3EC00FFF4
+ ED00FFF6F0000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFF4ED00FFEE
+ E400FFEBDF00FFEBDF00FFEBE000FFECE200FFEDE200FFEEE400FFEFE500FFEF
+ E600FFF1EA000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFF1E900CD52
+ 0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52
+ 0800FFEDE3000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFEFE600CD52
+ 0800E2651800EB7A3700FFA77200FFD1B200FFF7ED00C2E9FF0042ADF700CD52
+ 0800FFE9DC000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFEDE200CD52
+ 0800E1651900E9783500FFA77000FFD1B200FFF7EC00C2E9FF0040ADF700CD52
+ 0800FFE5D6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFEBDF00CD52
+ 0800E1651800EB783600FFA77000FFD1B200FFF7EC00C2E9FF0042ADF700CD52
+ 0800FFE1D0000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE9DB00CD52
+ 0800E1651900EC793500FFA77000FFD0B200FFF7EC00C2E9FF0040AEF700CD52
+ 0800FFDFCD000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE7D800CD52
+ 0800E1651900EB793500FFA57000FFD1B200FFF7EC00C2E9FF0040ADF700CD52
+ 0800FFE1D0000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE4D500CD52
+ 0800E3651A00EB7A3900FFA87400FFD1B300FFF7EC00C4E9FF0044AEF700CD52
+ 0800FFE9DC000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE3D100CD52
+ 0800ED793500F9945700FFBC8D00FFE1C500FFFFF90000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE1CF00CD52
+ 0800CD520800CD520800CD520800CD520800CD52080000000000E17D4100EB92
+ 5E00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE2D100FFD7
+ BF00FFD0B400FFCEB100FFCFB300FFD0B400FFD3B80000000000F5A779000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE7DA00FFE2
+ D000FFDECB00FFDECA00FFDDC900FFDECA00FFDFCD0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000100000000100010000000000800000000000000000000000
+ 000000000000000000000000FFFFFF00FFFF0000000000008003000000000000
+ 8003000000000000800300000000000080030000000000008003000000000000
+ 8003000000000000800300000000000080030000000000008003000000000000
+ 800300000000000080030000000000008007000000000000800F000000000000
+ 801F000000000000803F00000000000000000000000000000000000000000000
+ 000000000000}
+ end
+ object PopupMenu: TPopupMenu
+ Left = 32
+ Top = 24
+ object DeleteItem: TMenuItem
+ Caption = 'Delete'
+ ShortCut = 16430
+ OnClick = DeleteItemClick
+ end
+ object RenameItem: TMenuItem
+ Caption = 'Rename'
+ ShortCut = 113
+ OnClick = RenameItemClick
+ end
+ end
+ object OpenDialog: TOpenDialog
+ DefaultExt = 'ugr'
+ Filter = 'Gradient files (*.ugr)|*.ugr|Fractint map files (*.map)|*.map'
+ Left = 136
+ Top = 24
+ end
+ object TooltipTimer: TTimer
+ OnTimer = TooltipTimerTimer
+ Left = 88
+ Top = 20
+ end
+end
diff --git a/Forms/Browser.pas b/Forms/Browser.pas
new file mode 100644
index 0000000..cf339aa
--- /dev/null
+++ b/Forms/Browser.pas
@@ -0,0 +1,602 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit Browser;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ExtCtrls, ComCtrls, ToolWin, ImgList, StdCtrls, System.ImageList,
+ Cmap, Menus, Global, Buttons, Translation;
+
+const
+ PixelCountMax = 32768;
+ PaletteTooltipTimeout = 1500;
+
+type
+ TGradientBrowser = class(TForm)
+ SmallImages: TImageList;
+ pnlMain: TPanel;
+ PopupMenu: TPopupMenu;
+ DeleteItem: TMenuItem;
+ RenameItem: TMenuItem;
+ OpenDialog: TOpenDialog;
+ TooltipTimer: TTimer;
+ ListView: TListView;
+ pnlPreview: TPanel;
+ Image: TImage;
+ btnDefGradient: TSpeedButton;
+ btnRandom: TSpeedButton;
+ procedure FormResize(Sender: TObject);
+ procedure ListViewChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+ procedure FormCreate(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure DeleteItemClick(Sender: TObject);
+ procedure RenameItemClick(Sender: TObject);
+ procedure ListViewEdited(Sender: TObject; Item: TListItem;
+ var S: string);
+ procedure btnDefGradientClick(Sender: TObject);
+ procedure ListViewDblClick(Sender: TObject);
+ procedure ListViewKeyPress(Sender: TObject; var Key: Char);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure ListViewInfoTip(Sender: TObject; Item: TListItem;
+ var InfoTip: String);
+ procedure TooltipTimerTimer(Sender: TObject);
+ // AV: now you really can rename it :-)
+ function RenameGradient(OldIdent: string; var NewIdent: string): boolean;
+ procedure btnRandomClick(Sender: TObject); // AV
+ private
+ procedure DrawPalette;
+ procedure Apply;
+ public
+ // AV: deleted all unused identifiers: cp, Renderer, integers etc.
+ Extension, Identifier, Filename: string;
+ Palette: TColorMap;
+ procedure ListFileContents;
+ function LoadFractintMap(filen: string): TColorMap;
+ end;
+
+type
+ EFormatInvalid = class(Exception);
+ pRGBTripleArray = ^TRGBTripleArray;
+ TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple;
+
+var
+ GradientBrowser: TGradientBrowser;
+
+function CreatePalette(strng: string): TColorMap;
+
+implementation
+
+uses Main, Options, Editor, Registry, Adjust, Mutate;
+
+{$R *.DFM}
+
+function GetVal(token: string): string;
+var
+ p: integer;
+begin
+ p := Pos('=', token);
+ Delete(Token, 1, p);
+ Result := Token;
+end;
+
+function ReplaceTabs(str: string): string;
+{Changes tab characters in a string to spaces}
+var
+ i: integer;
+begin
+ for i := 1 to Length(str) do
+ begin
+ if str[i] = #9 then
+ begin
+ Delete(str, i, 1);
+ Insert(#32, str, i);
+ end;
+ end;
+ Result := str;
+end;
+
+function TGradientBrowser.LoadFractintMap(filen: string): TColorMap;
+var
+ i: integer;
+ s: string;
+ pal: TColorMap;
+ MapFile: TextFile;
+begin
+{ Load a map file }
+ AssignFile(MapFile, Filen);
+ try
+ Reset(MapFile);
+ for i := 0 to 255 do
+ begin
+ Read(MapFile, Pal[i][0]);
+ Read(MapFile, Pal[i][1]);
+ Read(MapFile, Pal[i][2]);
+ Read(MapFile, s);
+ end;
+ CloseFile(MapFile);
+ Result := Pal;
+ except
+ on EInOutError do Application.MessageBox(PChar(Format(TextByKey('common-genericopenfailure'), [FileName])), PCHAR('Apophysis'), 16);
+ end;
+end;
+
+function CreatePalette(strng: string): TColorMap;
+{ Loads a palette from a gradient string }
+var
+ Strings: TStringList;
+ index, i: integer;
+ Tokens: TStringList;
+ Indices, Colors: TStringList;
+ a, b: integer;
+begin
+ Strings := TStringList.Create;
+ Tokens := TStringList.Create;
+ Indices := TStringList.Create;
+ Colors := TStringList.Create;
+ try
+ try
+ Strings.Text := strng;
+ if Pos('}', Strings.Text) = 0 then raise EFormatInvalid.Create('No closing brace');
+ if Pos('{', Strings[0]) = 0 then raise EFormatInvalid.Create('No opening brace.');
+ GetTokens(ReplaceTabs(strings.text), tokens);
+ Tokens.Text := Trim(Tokens.text);
+ i := 0;
+ while (Pos('}', Tokens[i]) = 0) and (Pos('opacity:', Lowercase(Tokens[i])) = 0) do
+ begin
+ if Pos('index=', LowerCase(Tokens[i])) <> 0 then
+ Indices.Add(GetVal(Tokens[i]))
+ else if Pos('color=', LowerCase(Tokens[i])) <> 0 then
+ Colors.Add(GetVal(Tokens[i]));
+ inc(i)
+ end;
+ for i := 0 to 255 do
+ begin
+ Result[i][0] := 0;
+ Result[i][1] := 0;
+ Result[i][2] := 0;
+ end;
+ if Indices.Count = 0 then raise EFormatInvalid.Create('No color info');
+ for i := 0 to Indices.Count - 1 do
+ begin
+ try
+ index := StrToInt(Indices[i]);
+ while index < 0 do inc(index, 400);
+ index := Round(Index * (255 / 399));
+ indices[i] := IntToStr(index);
+ assert(index>=0);
+ assert(index<256);
+ Result[index][0] := StrToInt(Colors[i]) mod 256;
+ Result[index][1] := trunc(StrToInt(Colors[i]) / 256) mod 256;
+ Result[index][2] := trunc(StrToInt(Colors[i]) / 65536);
+ except
+ end;
+ end;
+ i := 1;
+ repeat
+ a := StrToInt(Trim(Indices[i - 1]));
+ b := StrToInt(Trim(Indices[i]));
+ RGBBlend(a, b, Result);
+ inc(i);
+ until i = Indices.Count;
+ if (Indices[0] <> '0') or (Indices[Indices.Count - 1] <> '255') then
+ begin
+ a := StrToInt(Trim(Indices[Indices.Count - 1]));
+ b := StrToInt(Trim(Indices[0])) + 256;
+ RGBBlend(a, b, Result);
+ end;
+ except on EFormatInvalid do
+ // Result := False;
+ end;
+ finally
+ Tokens.Free;
+ Strings.Free;
+ Indices.Free;
+ Colors.Free;
+ end;
+end;
+
+procedure TGradientBrowser.DrawPalette;
+var
+ i, j: integer;
+ Row: pRGBTripleArray;
+ BitMap: TBitMap;
+begin
+ BitMap := TBitMap.Create;
+ try
+ Bitmap.PixelFormat := pf24bit;
+ BitMap.Width := 256;
+ BitMap.Height := 1;
+ for j := 0 to Bitmap.Height - 1 do
+ begin
+ Row := Bitmap.Scanline[j];
+ for i := 0 to Bitmap.Width - 1 do
+ begin
+ with Row[i] do
+ begin
+ rgbtRed := Palette[i][0];
+ rgbtGreen := Palette[i][1];
+ rgbtBlue := Palette[i][2];
+ end
+ end
+ end;
+ Image.Picture.Graphic := Bitmap;
+ Image.Refresh;
+ finally
+ BitMap.Free;
+ end;
+end;
+
+procedure TGradientBrowser.ListFileContents;
+{ List identifiers in file }
+var
+ i, p: integer;
+ Title: string;
+ ListItem: TListItem;
+ FStrings: TStringList;
+begin
+ FStrings := TStringList.Create;
+ FStrings.LoadFromFile(filename);
+ try
+ ListView.Items.BeginUpdate;
+ ListView.Items.Clear;
+ if Lowercase(ExtractFileExt(filename)) = '.map' then
+ begin
+ ListItem := ListView.Items.Add;
+ Listitem.Caption := Trim(filename);
+ end
+ else
+ if (Pos('{', FStrings.Text) <> 0) then
+ begin
+ for i := 0 to FStrings.Count - 1 do
+ begin
+ p := Pos('{', FStrings[i]);
+ if (p <> 0) and (Pos('(3D)', FStrings[i]) = 0) then
+ begin
+ Title := Trim(Copy(FStrings[i], 1, p - 1));
+ if Title <> '' then
+ begin { Otherwise bad format }
+ ListItem := ListView.Items.Add;
+ Listitem.Caption := Trim(Copy(FStrings[i], 1, p - 1));
+ end;
+ end;
+ end;
+ end;
+ ListView.Items.EndUpdate;
+ ListView.Selected := ListView.Items[0];
+ finally
+ FStrings.Free;
+ end;
+end;
+
+procedure TGradientBrowser.ListViewChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+var
+ Tokens, FStrings: TStringList;
+ EntryStrings: TStringList;
+ i: integer;
+begin
+ Application.ProcessMessages;
+ FStrings := TStringList.Create;
+ EntryStrings := TStringList.Create;
+ Tokens := TStringList.Create;
+ try
+ if Lowercase(ExtractFileExt(filename)) = '.map' then
+ begin
+ Palette := LoadFractintMap(filename);
+ DrawPalette;
+ end
+ else
+ if (ListView.SelCount <> 0) and (ListView.Selected.Caption <> Identifier) then
+ begin
+ Identifier := ListView.Selected.Caption;
+ FStrings.LoadFromFile(Filename);
+ for i := 0 to FStrings.count - 1 do
+ if Pos(Lowercase(ListView.Selected.Caption) + ' ', Trim(Lowercase(FStrings[i]))) = 1 then break;
+ EntryStrings.Add(FStrings[i]);
+ repeat
+ inc(i);
+ EntryStrings.Add(FStrings[i]);
+ until Pos('}', FStrings[i]) <> 0;
+ Palette := CreatePalette(EntryStrings.Text);
+ DrawPalette;
+ end;
+ finally
+ EntryStrings.Free;
+ FStrings.Free;
+ Tokens.Free;
+ end;
+end;
+
+procedure TGradientBrowser.FormCreate(Sender: TObject);
+begin
+ self.Caption := TextByKey('gradientbrowser-title');
+ btnDefGradient.Hint := TextByKey('common-browse');
+ DeleteItem.Caption := TextByKey('common-delete');
+ RenameItem.Caption := TextByKey('common-rename');
+ btnRandom.Hint := TextByKey('adjustment-tab-gradient-presethint');
+end;
+
+procedure TGradientBrowser.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+begin
+ { Read posution from registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Browser', False) then
+ begin
+ if Registry.ValueExists('Left') then
+ GradientBrowser.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ GradientBrowser.Top := Registry.ReadInteger('Top');
+ if Registry.ValueExists('Width') then
+ GradientBrowser.Width := Registry.ReadInteger('Width');
+ if Registry.ValueExists('Height') then
+ GradientBrowser.Height := Registry.ReadInteger('Height');
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+ if FileExists(filename) then ListFileContents;
+end;
+
+procedure TGradientBrowser.DeleteItemClick(Sender: TObject);
+var
+ c: boolean;
+begin
+ if ListView.SelCount <> 0 then
+ begin
+ if ConfirmDelete then
+ c := Application.MessageBox(
+ PChar(Format(TextByKey('common-confirmdelete'), [ListView.Selected.Caption])), 'Apophysis', 36) = IDYES
+ else
+ c := True;
+ if c then
+ if ListView.Focused and (ListView.SelCount <> 0) then
+ begin
+ Application.ProcessMessages;
+ if DeleteEntry(ListView.Selected.Caption, Filename) then
+ begin
+ ListView.Items.Delete(ListView.Selected.Index);
+ ListView.Selected := ListView.ItemFocused;
+ end;
+ end;
+ end;
+end;
+
+function TGradientBrowser.RenameGradient(OldIdent: string; var NewIdent: string): boolean;
+var
+ Strings: TStringList;
+ p, i: integer;
+ s: string;
+begin
+ Result := True;
+ Strings := TStringList.Create;
+ try
+ try
+ i := 0;
+ Strings.LoadFromFile(Filename);
+ if Pos(OldIdent + ' ', Trim(Strings.Text)) <> 0 then
+ begin
+ while Pos(OldIdent + ' ', Trim(Strings[i])) <> 1 do
+ begin
+ inc(i);
+ end;
+ p := Pos('{', Strings[i]);
+ s := Copy(Strings[i], p, Length(Strings[i]) - p + 1);
+ Strings[i] := NewIdent + ' ' + s;
+ Strings.SaveToFile(Filename);
+ end
+ else
+ Result := False;
+ except on Exception do Result := False;
+ end;
+ finally
+ Strings.Free;
+ end;
+end;
+
+procedure TGradientBrowser.RenameItemClick(Sender: TObject);
+begin
+ if ListView.SelCount <> 0 then
+ ListView.Items[ListView.Selected.Index].EditCaption;
+end;
+
+procedure TGradientBrowser.ListViewEdited(Sender: TObject; Item: TListItem;
+ var S: string);
+begin
+ if s <> Item.Caption then
+ if not RenameGradient(Item.Caption, s) then // AV
+ s := Item.Caption;
+end;
+
+procedure TGradientBrowser.btnDefGradientClick(Sender: TObject);
+var
+ fn:string;
+begin
+ OpenDialog.InitialDir := BrowserPath;
+ OpenDialog.Filter := Format('%s|*.gradient;*.ugr|%s|*.map|%s|*.*',
+ [TextByKey('common-filter-gradientfiles'),
+ TextByKey('common-filter-fractintfiles'),
+ TextByKey('common-filter-allfiles')]);
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(GradientBrowser, OpenDialog.DefaultExt, OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ Filename := fn; //OpenDialog.FileName;
+ GradientFile := Filename;
+ BrowserPath := ExtractFilePath(fn); //ExtractFilePath(OpenDialog.FileName);
+ ListFileContents;
+ end;
+end;
+
+procedure TGradientBrowser.btnRandomClick(Sender: TObject);
+var i: integer;
+begin
+ if ListView.Items.Count < 2 then exit;
+ i := random(ListView.Items.Count);
+ ListView.Selected := ListView.Items[i];
+ Apply;
+end;
+
+procedure TGradientBrowser.Apply;
+begin
+ MainForm.StopThread;
+ MainForm.UpdateUndo;
+ MainCp.cmap := Palette;
+ MainCP.cmapindex := -1;
+ if EditForm.Visible then EditForm.UpdateDisplay;
+ if AdjustForm.Visible then AdjustForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+ MainForm.RedrawTimer.enabled := true;
+end;
+
+procedure TGradientBrowser.ListViewDblClick(Sender: TObject);
+begin
+ Apply;
+end;
+
+procedure TGradientBrowser.ListViewKeyPress(Sender: TObject;
+ var Key: Char);
+begin
+ if Key = #13 then Apply;
+end;
+
+procedure TGradientBrowser.FormClose(Sender: TObject;
+ var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ { Defaults }
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Browser', True) then
+ begin
+ Registry.WriteInteger('Top', GradientBrowser.Top);
+ Registry.WriteInteger('Left', GradientBrowser.Left);
+ Registry.WriteInteger('Width', GradientBrowser.Width);
+ Registry.WriteInteger('Height', GradientBrowser.Height);
+ end;
+ finally
+ Registry.Free;
+ end;
+end;
+
+procedure TGradientBrowser.ListViewInfoTip(Sender: TObject;
+ Item: TListItem; var InfoTip: String);
+var
+ i, j: integer;
+ Row: pRGBTripleArray;
+ Bitmap: TBitmap;
+ pal: TColorMap;
+ EntryStrings, FStrings: TStringList;
+ rect: TRect;
+begin
+ BitMap := TBitMap.create;
+ Bitmap.PixelFormat := pf24bit;
+ BitMap.Width := 256;
+ BitMap.Height := 100;
+
+ FStrings := TStringList.Create;
+ EntryStrings := TStringList.Create;
+ try
+ if Lowercase(ExtractFileExt(filename)) = '.map' then
+ begin
+ pal := LoadFractintMap(filename);
+ end
+ else
+ begin
+ Identifier := Item.Caption;
+ FStrings.LoadFromFile(Filename);
+ for i := 0 to FStrings.count - 1 do
+ if Pos(Lowercase(Item.Caption) + ' ', Trim(Lowercase(FStrings[i]))) = 1 then break;
+ EntryStrings.Add(FStrings[i]);
+ repeat
+ inc(i);
+ EntryStrings.Add(FStrings[i]);
+ until Pos('}', FStrings[i]) <> 0;
+ pal := CreatePalette(EntryStrings.Text);
+ end;
+ finally
+ EntryStrings.Free;
+ FStrings.Free;
+ end;
+
+ for j := 0 to Bitmap.Height - 1 do
+ begin
+ Row := Bitmap.Scanline[j];
+ for i := 0 to Bitmap.Width - 1 do
+ begin
+ with Row[i] do
+ begin
+ rgbtRed := pal[i][0];
+ rgbtGreen := pal[i][1];
+ rgbtBlue := pal[i][2];
+ end
+ end
+ end;
+ rect.TopLeft := Item.Position;
+ rect.BottomRight.X := rect.TopLeft.X + 100;
+ rect.BottomRight.Y := rect.TopLeft.Y + 16;
+ with ListView do
+ begin
+ Canvas.Rectangle(Rect);
+ Canvas.StretchDraw(Rect, Bitmap);
+ end;
+ BitMap.Free;
+ InfoTip := '';
+ TooltipTimer.Interval := PaletteTooltipTimeout;
+ TooltipTimer.Enabled := true;
+end;
+
+procedure TGradientBrowser.TooltipTimerTimer(Sender: TObject);
+begin
+ ListView.Repaint;
+ TooltipTimer.Enabled := false;
+end;
+
+procedure TGradientBrowser.FormResize(Sender: TObject);
+begin
+ Listview.Width := self.ClientWidth - 4;
+ btnDefGradient.Left := self.ClientWidth - 2 - btnDefGradient.Width;
+ ListView.Height := self.ClientHeight - pnlPreview.Height - 6;
+ btnDefGradient.Top := self.ClientHeight - pnlPreview.Height - 2 + pnlPreview.Height div 2 - btnDefGradient.Height div 2;
+ btnRandom.Left := btnDefGradient.Left - btnRandom.Width - 2;
+ btnRandom.Top := btnDefGradient.Top;
+ ListView.Top := 2;
+ ListView.Left := 2;
+ pnlPreview.Top := self.ClientHeight - pnlPreview.Height - 2;
+ pnlPreview.Left := 2;
+ pnlPreview.Width := self.ClientWidth - btnDefGradient.Width - 6 - btnRandom.Width;
+end;
+
+end.
+
diff --git a/Forms/Chaos.dfm b/Forms/Chaos.dfm
new file mode 100644
index 0000000..0e8d39a
--- /dev/null
+++ b/Forms/Chaos.dfm
@@ -0,0 +1,131 @@
+object ChaosForm: TChaosForm
+ Left = 0
+ Top = 0
+ Caption = 'Transform Transitions'
+ ClientHeight = 324
+ ClientWidth = 494
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001010200000000000680400001600000028000000100000002000
+ 0000010020000000000000040000000000000000000000000000000000000501
+ 01002A0E0D00250D0B00250D0B00260D0B0026090700000000007B7B7B00E6E6
+ E600000000000000000000000000000000000000000000000000000000002A0F
+ 0C00F1554A00DE4E4400DF4E4400F653480057181400D7DEDF001A1A1A000000
+ 0000D8D8D800000000000000000000000000000000000000000000000000250D
+ 0B00DE4E4400CD483F00D9483E003A020000D6E1E20000000000000000000000
+ 000000000000E6E6E6000000000000000000000000000000000000000000250D
+ 0B00DF4E4500D8483E004C1C1800CAD8D900000000000000000000000000F4F4
+ F40010101000000000000000000000000000000000000000000000000000260D
+ 0B00F65348003A020000CAD8D900000000000000000000000000000000000000
+ 0000848484000000000000000000000000000000000000000000000000002609
+ 060056171300D6E1E20000000000000000000000000000000000000000000000
+ 000000000000000000006D6D6D00000000000000000000000000000000000000
+ 0000DAE1E100000000000000000000000000000000000000000000000000F7F7
+ F7000A0A0A005B5B5B000000000000000000000000000000000000000000F1F1
+ F10099999900F7F7F70000000000000000000000000000000000000000000000
+ 0000E9E9E9000000000000000000000000000000000000000000000000009292
+ 92000000000000000000E9E9E900DFDFDF00C2C3B600C5C6B700C5C6B700C5C6
+ B700CACABC00C4C4C100CECECE00000000000000000000000000000000006262
+ 62000000000078787800BBBBBB004C4D40000000620000006E0000006C000000
+ 6D000000850000000000B3B4B10000000000000000000000000000000000DADA
+ DA0000000000F1F1F10000000000505139001B11EF00261DFD00261DFB00251C
+ FF0000006F00C9C9C3000000000000000000000000000000000000000000D0D0
+ D00000000000F5F5F50000000000505139001910E300241CEF00261DFF000906
+ 6400CDCEB800000000000000000000000000000000000000000000000000C8C8
+ C800000000003F3F3F009F9F9F005D5E46001910E400261DFF0000005E007A7A
+ 6A00393A3C00000000000000000000000000E8E8E8009C9C9C00000000000000
+ 00007F7F7F00000000007373730060614B00160DF00004006700D1D2BF00DBDB
+ DB0000000000000000004B4B4B00F8F8F800C8C8C80000000000ADADAD000000
+ 00000000000000000000000000004F50460000005900C3C4AD00000000000000
+ 0000BDBDBD006666660000000000000000000000000000000000424242000000
+ 00000000000000000000000000003D3D3D00C9C9BF0000000000000000000000
+ 00000000000000000000C8C8C800D4D4D400AFAFAF004343430000000000007F
+ 0000003F0000031F0000071F00000F9F00001F0F00003F1F00001FBF0000000F
+ 0000000F0000101F0000103F00000039000080000000F1800000F3E10000}
+ OldCreateOrder = False
+ OnActivate = FormActivate
+ OnCreate = FormCreate
+ OnResize = FormResize
+ DesignSize = (
+ 494
+ 324)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object PageControl1: TPageControl
+ Left = 0
+ Top = 8
+ Width = 496
+ Height = 277
+ ActivePage = TabMatrix
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ TabOrder = 0
+ object TabMatrix: TTabSheet
+ Caption = 'Probability Matrix'
+ DesignSize = (
+ 488
+ 249)
+ object ChaosMatrix: TStringGrid
+ Left = 0
+ Top = 80
+ Width = 488
+ Height = 145
+ Anchors = [akLeft, akTop, akRight]
+ Color = clBtnFace
+ ColCount = 2
+ RowCount = 2
+ Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goThumbTracking]
+ TabOrder = 0
+ OnDrawCell = ChaosMatrixDrawCell
+ end
+ object chkPercents: TCheckBox
+ Left = 10
+ Top = 229
+ Width = 350
+ Height = 17
+ Caption = ' Show values in percents'
+ TabOrder = 1
+ OnClick = chkPercentsClick
+ end
+ object WeightVector: TStringGrid
+ Left = 0
+ Top = 0
+ Width = 488
+ Height = 70
+ Align = alTop
+ Color = clBtnFace
+ ColCount = 2
+ RowCount = 2
+ Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goThumbTracking]
+ ScrollBars = ssHorizontal
+ TabOrder = 2
+ OnDrawCell = ChaosMatrixDrawCell
+ end
+ end
+ object TabDiagram: TTabSheet
+ Caption = 'Xaos Diagram'
+ ImageIndex = 1
+ TabVisible = False
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ end
+ end
+ object btnClose: TButton
+ Left = 400
+ Top = 291
+ Width = 86
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'Close'
+ Default = True
+ ModalResult = 8
+ TabOrder = 1
+ OnClick = btnCloseClick
+ end
+end
diff --git a/Forms/Chaos.pas b/Forms/Chaos.pas
new file mode 100644
index 0000000..25a41e4
--- /dev/null
+++ b/Forms/Chaos.pas
@@ -0,0 +1,168 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit Chaos;
+
+interface
+
+uses
+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
+ Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.ComCtrls, Editor, Translation,
+ Vcl.StdCtrls, Math;
+
+type
+ TChaosForm = class(TForm)
+ PageControl1: TPageControl;
+ TabMatrix: TTabSheet;
+ ChaosMatrix: TStringGrid;
+ btnClose: TButton;
+ TabDiagram: TTabSheet;
+ chkPercents: TCheckBox;
+ WeightVector: TStringGrid;
+ procedure ChaosMatrixDrawCell(Sender: TObject; ACol, ARow: Integer;
+ Rect: TRect; State: TGridDrawState);
+ procedure FormActivate(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure btnCloseClick(Sender: TObject);
+ procedure chkPercentsClick(Sender: TObject);
+ procedure FormResize(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ ChaosForm: TChaosForm;
+
+implementation
+
+{$R *.dfm}
+
+
+procedure TChaosForm.btnCloseClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TChaosForm.ChaosMatrixDrawCell(Sender: TObject; ACol, ARow: Integer;
+ Rect: TRect; State: TGridDrawState);
+var
+ h, ax, ay, bx, by: integer;
+ val: double;
+ trgColor : TColor;
+ newRect: TRect;
+ begin
+ if (ARow = 0) and (ACol = 0) then exit;
+ if not (gdFixed in State) then
+ begin
+ trgColor := EditForm.GetTriangleColor(ACol - 1);
+ with TStringGrid(Sender).Canvas do begin
+ Brush.Color := trgColor;
+ FillRect(Rect);
+ Font.Color := clBlack; //clWindowText;
+ if Sender = ChaosMatrix then
+ begin
+ val := EditForm.cp.xform[ACol - 1].modWeights[ARow - 1];
+ if not chkPercents.Checked then
+ TextOut(Rect.Left + 4, Rect.Top + 4, FloatToStr(RoundTo(val, -4)))
+ else begin
+ if ChaosMatrix.Cells[ACol, 1] = '0' then
+ TextOut(Rect.Left + 4, Rect.Top + 4, '0%')
+ else
+ TextOut(Rect.Left + 4, Rect.Top + 4, Format('%g%%',
+ [RoundTo(val / StrToFloat(ChaosMatrix.Cells[ACol, 1]), -4)]));
+ end;
+ end else // if Sender = WeightVector then
+ begin
+ val := EditForm.cp.xform[ACol - 1].density;
+ if not chkPercents.Checked then
+ TextOut(Rect.Left + 4, Rect.Top + 4, FloatToStr(RoundTo(val, -4)))
+ else // weight sum is always not zero
+ TextOut(Rect.Left + 4, Rect.Top + 4, Format('%g%%',
+ [RoundTo(val / StrToFloat(WeightVector.Cells[1,1]), -4)]));
+ end;
+ end;
+ end else
+ begin
+ if (ACol = 0) then
+ trgColor := EditForm.GetTriangleColor(ARow - 1)
+ else
+ trgColor := EditForm.GetTriangleColor(ACol - 1);
+ if (Sender = WeightVector) and (ARow = 1) then exit;
+ with TStringGrid(Sender).Canvas do begin
+ h := Rect.Bottom - Rect.Top - 2;
+ ax := Rect.Right - 3;
+ ay := Rect.Top + 2;
+ bx := Rect.Right - h;
+ by := Rect.Bottom - 3;
+
+ pen.Color := clBlack;
+ Polyline([Point(ax+1, ay-2), Point(ax+1, by+1), Point(bx-2, by+1), Point(ax+1, ay-2)]);
+
+ pen.Color := trgColor;
+ brush.Color := pen.Color shr 1 and $7f7f7f;
+ Polygon([Point(ax, ay), Point(ax, by), Point(bx, by)]);
+ end;
+ end;
+end;
+
+procedure TChaosForm.chkPercentsClick(Sender: TObject);
+begin
+ WeightVector.Invalidate;
+ ChaosMatrix.Invalidate;
+end;
+
+procedure TChaosForm.FormActivate(Sender: TObject);
+var
+ i, j, n: integer;
+ sum: double;
+begin
+ n := EditForm.cp.NumXForms + 1;
+ sum := 0;
+ with WeightVector do begin
+ ColCount := n;
+ for i := 1 to n do
+ Cells[i,0] := ' ' + IntToStr(i);
+ for j := 0 to n-2 do
+ sum := sum + EditForm.cp.xform[j].density;
+ Cells[1, 1] := FloatToStr(sum * 0.01);
+ end;
+ with ChaosMatrix do begin
+ ColCount := n;
+ RowCount := n;
+ for i := 1 to n do
+ begin
+ Cells[0,i] := Format(TextByKey('editor-common-toprefix'), [i]);
+ Cells[i,0] := Format(TextByKey('editor-common-fromprefix'), [i]);
+ sum := 0;
+ for j := 0 to n-2 do
+ sum := sum + EditForm.cp.xform[i-1].modWeights[j];
+ Cells[i, 1] := FloatToStr(sum * 0.01);
+ end;
+ Height := TabMatrix.Height - Top - 24;
+ Invalidate;
+ end;
+ chkPercents.Top := TabMatrix.Height - 20;
+end;
+
+procedure TChaosForm.FormCreate(Sender: TObject);
+begin
+ self.Caption := TextByKey('transitions-title');
+ TabMatrix.Caption := TextByKey('transitions-matrix');
+ btnClose.Caption := TextByKey('common-close');
+ ChaosMatrix.Cells[0,0] := TextByKey('editor-tab-chaos-path');
+ chkPercents.Caption := TextByKey('transitions-inpercents');
+ WeightVector.Cells[0,0] := TextByKey('transitions-transform');
+ WeightVector.Cells[0,1] := TextByKey('editor-common-weight');
+ // AV: TODO: visualize Markov chain transitions using arrows
+ // TabDiagram.Caption := TextByKey('transitions-diagram');
+end;
+
+procedure TChaosForm.FormResize(Sender: TObject);
+begin
+ ChaosMatrix.Height := TabMatrix.Height - ChaosMatrix.Top - 24;
+ chkPercents.Top := TabMatrix.Height - 20;
+ TabMatrix.Invalidate;
+end;
+
+end.
diff --git a/Forms/ColorRangeForm.dfm b/Forms/ColorRangeForm.dfm
new file mode 100644
index 0000000..c3633de
--- /dev/null
+++ b/Forms/ColorRangeForm.dfm
@@ -0,0 +1,133 @@
+object ColorSelection: TColorSelection
+ Left = 0
+ Top = 0
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsSingle
+ Caption = 'Palette Interval Selection'
+ ClientHeight = 114
+ ClientWidth = 287
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001010000000000000680400001600000028000000100000002000
+ 000001002000000000000004000000000000000000000000000000000000020C
+ 16000C283700051D2900051C260001121A2703131C780A2937C611374AE11038
+ 4CE7061B27A1020D150C030F19000617230011384B000E2E3E0006131F00020C
+ 16000C2736000218222E0F2E3E9B285C7AE03E7DA4FF468FBDFF4994C0FF4C9C
+ CBFF317295FF1D4E692D1B4A630016476100123E52000D2D3D0006131F00010A
+ 1300092331522A617EE84D99C5FF4F9FD0FF408CB9FF3884AFFF3783AFFF3C8D
+ BCFF245775CC0F30410C16435A0016486200123D51000D2D3D0006131F00010B
+ 1637316584EE51A3D1FF257AB1FF2A77A3FF3684ADFF3584AFFF3586B1FF3482
+ ADFF153A4E900A2B3C380F35473D12435B3E0E374A3E0B2A390F061320002142
+ 55B552ACD7FF2391C7FF3FB5E1FF2485C0FF2D7CADFF388AB7FF347AA6FF337D
+ A6FF2E7499FA27688AF02D7293F139799EF4346E91F51B4960C6020D17344075
+ 93F656B6DEFF31CBF0FF21E4FEFF26B4E2FF2D7FB9FF4096C1FF336E94FF3056
+ 71FF2774A0FF286A90F130749891387EA8E64CA4D8FF55ABDDFF224D67D74380
+ A1F576BADCFF76BCDCFF7FD1FAFF62B6F0FF61ABD9FF64AFD4FF4699C2FF98AF
+ BDFF5A839EFF1A638BFD225A7AF52B81AFFC3FA1D2FF4DAAD8FF3A85ABFA3464
+ 7CC774BFE6FF70B0CEFF439186FF367A4FFF4A9D8EFF79BCE6FF77BBDEFF6CAA
+ CDFFC0CED3FF4C819FFF4D7B98FF61686EFF6B7072FF55A4CAFF2E769AEA1532
+ 3F44599DC7F661BAB3FF18BB0EFF009400FF278543FF7EC4E9FF8ECDE8FF5CAC
+ D0FF75B1CEFFA1BBC2FF955438FFD4580BFFBA6E34FF5A99B4FF0F31466E0B1E
+ 2700214D626569BCE3F979CBBBFF67DD98FF82CEE0FF77B8E4FF365DC9FF254C
+ B5FF1D58A9FF3991BCFF4FAEC6FF809DA6FF79B7CCFF2E617EA405111D0F0E23
+ 2E00173B4D0055AAD23D6ABCF0CD82C4FDFB92D4F2FF7EC1E5FF3B6ADDFF1930
+ DBFF295FD1FF4DA0CEFF3FBDE4FF3EB7EAFF368BBC8F204A6304020913000E23
+ 2D00193E510057AAD30056B4DF0055B8E35459B9E58E63C1E9AB6FC8EDCD64C0
+ EDD160C2EBC264BFEA8E3E9DCEAF4AC1E0FF49ACDAD73A87AD0A1D425A000E23
+ 2D00193E510057AAD30058B5E00057B9E40057B8E5004FB7E6005CC0E81962C4
+ E81D57BDE7105AB9E700249BCF0F38ADD3C056C6E6FF4198C66F49C3EB000E23
+ 2D00193E510057AAD30058B5E00057B9E40057B8E50051B8E6005EC0E80062C3
+ E80058BEE70058B8E50018A2D50023A5D71B4BC4E6DA44A7C9FB41C1E32E0E23
+ 2D00193E510057AAD30058B5E00057B9E40057B8E50051B8E6005EC0E80062C3
+ E80058BEE70058B8E5001AA1D40024A9D90032B9E32D3CA7CFEE45C8E9540E23
+ 2D00193E510057AAD30058B5E00057B9E40057B8E50051B8E6005EC0E80062C3
+ E80058BEE70058B8E5001AA1D40025A8D80030B6E2003CC5EB5C50DDFA4FFC3F
+ 0000E03F0000C03F0000803F0000000100000000000000000000000000008001
+ 0000C0010000E0030000F8030000FFF30000FFF90000FFFD0000FFFF0000}
+ OldCreateOrder = False
+ Position = poDefault
+ OnCreate = FormCreate
+ OnShow = FormShow
+ DesignSize = (
+ 287
+ 114)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object StartColor: TShape
+ Left = 10
+ Top = 40
+ Width = 30
+ Height = 22
+ end
+ object LastColor: TShape
+ Left = 140
+ Top = 40
+ Width = 30
+ Height = 22
+ end
+ object lbStart: TLabel
+ Left = 8
+ Top = 16
+ Width = 94
+ Height = 13
+ Caption = 'Start palette index:'
+ end
+ object lbLast: TLabel
+ Left = 140
+ Top = 16
+ Width = 90
+ Height = 13
+ Caption = 'Last palette index:'
+ end
+ object btOK: TButton
+ Left = 101
+ Top = 82
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ OnClick = btOKClick
+ end
+ object btCancel: TButton
+ Left = 186
+ Top = 82
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ object SpinStart: TSpinEdit
+ Left = 40
+ Top = 40
+ Width = 70
+ Height = 22
+ MaxValue = 253
+ MinValue = 0
+ TabOrder = 2
+ Value = 0
+ OnChange = SpinStartChange
+ OnKeyPress = SpinValueKeyPress
+ end
+ object SpinLast: TSpinEdit
+ Left = 170
+ Top = 40
+ Width = 70
+ Height = 22
+ MaxValue = 255
+ MinValue = 2
+ TabOrder = 3
+ Value = 255
+ OnChange = SpinLastChange
+ OnKeyPress = SpinValueKeyPress
+ end
+end
diff --git a/Forms/ColorRangeForm.pas b/Forms/ColorRangeForm.pas
new file mode 100644
index 0000000..201859e
--- /dev/null
+++ b/Forms/ColorRangeForm.pas
@@ -0,0 +1,91 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit ColorRangeForm;
+
+interface
+
+uses
+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
+ Vcl.Controls, ComCtrls, StdCtrls, ExtCtrls, Vcl.Forms, Vcl.Dialogs, Adjust, Translation,
+ Vcl.Samples.Spin;
+type
+ TColorSelection = class(TForm)
+ btOK: TButton;
+ btCancel: TButton;
+ SpinStart: TSpinEdit;
+ SpinLast: TSpinEdit;
+ StartColor: TShape;
+ LastColor: TShape;
+ lbStart: TLabel;
+ lbLast: TLabel;
+ procedure FormCreate(Sender: TObject);
+ procedure btOKClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure SpinLastChange(Sender: TObject);
+ procedure SpinValueKeyPress(Sender: TObject; var Key: Char);
+ procedure SpinStartChange(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ ColorSelection: TColorSelection;
+
+implementation
+
+{$R *.dfm}
+
+procedure TColorSelection.btOKClick(Sender: TObject);
+begin
+ AdjustForm.selA := SpinStart.Value;
+ AdjustForm.selB := SpinLast.Value;
+end;
+
+procedure TColorSelection.FormCreate(Sender: TObject);
+begin
+ self.Caption := TextBykey('selectcolors-title');
+ lbStart.Caption := TextBykey('selectcolors-start');
+ lbLast.Caption := TextBykey('selectcolors-last');
+ btOK.Caption := TextByKey('common-ok');
+ btCancel.Caption := TextByKey('common-cancel');
+end;
+
+procedure TColorSelection.SpinValueKeyPress(Sender: TObject; var Key: Char);
+begin
+ if Key = '-' then Key := #0; // AV: non-negative indices only
+end;
+
+procedure TColorSelection.FormShow(Sender: TObject);
+var a, b: byte;
+begin
+ self.Left := AdjustForm.Left + ((AdjustForm.Width - self.Width) shr 1);
+ self.Top := AdjustForm.Top + 55;
+ a := AdjustForm.selA;
+ b := AdjustForm.selB;
+ SpinStart.Value := a;
+ SpinLast.Value := b;
+ StartColor.Brush.Color := RGB(AdjustForm.palette[a,0], AdjustForm.palette[a,1], AdjustForm.palette[a,2]);
+ LastColor.Brush.Color := RGB(AdjustForm.palette[b,0], AdjustForm.palette[b,1], AdjustForm.palette[b,2]);
+end;
+
+procedure TColorSelection.SpinStartChange(Sender: TObject);
+begin
+ if SpinStart.Value > 253 then SpinStart.Value := 253;
+ if (SpinLast.Value - SpinStart.Value < 2) then
+ SpinStart.Value := SpinLast.Value - 2;
+ StartColor.Brush.Color := RGB(AdjustForm.palette[SpinStart.Value,0],
+ AdjustForm.palette[SpinStart.Value,1], AdjustForm.palette[SpinStart.Value,2]);
+end;
+
+procedure TColorSelection.SpinLastChange(Sender: TObject);
+begin
+ if SpinLast.Value > 255 then SpinLast.Value := 255;
+ if (SpinLast.Value - SpinStart.Value < 2) then
+ SpinLast.Value := SpinStart.Value + 2;
+ LastColor.Brush.Color := RGB(AdjustForm.palette[SpinLast.Value,0],
+ AdjustForm.palette[SpinLast.Value,1], AdjustForm.palette[SpinLast.Value,2]);
+end;
+
+end.
diff --git a/Forms/Curves.dfm b/Forms/Curves.dfm
new file mode 100644
index 0000000..3b97403
--- /dev/null
+++ b/Forms/Curves.dfm
@@ -0,0 +1,125 @@
+object CurvesForm: TCurvesForm
+ Left = 197
+ Top = 111
+ BorderStyle = bsDialog
+ Caption = 'Curves'
+ ClientHeight = 492
+ ClientWidth = 489
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -13
+ Font.Name = 'System'
+ Font.Style = []
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 16
+ object Label1: TLabel
+ Left = 8
+ Top = 16
+ Width = 75
+ Height = 13
+ Caption = 'Selected curve:'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object CurvesPanel: TPanel
+ Left = 8
+ Top = 68
+ Width = 473
+ Height = 414
+ BevelOuter = bvNone
+ Color = clBlack
+ ParentBackground = False
+ TabOrder = 0
+ end
+ object cbChannel: TComboBox
+ Left = 8
+ Top = 35
+ Width = 185
+ Height = 21
+ Style = csDropDownList
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ItemIndex = 0
+ ParentFont = False
+ TabOrder = 1
+ Text = 'Overall'
+ OnChange = cbChannelChange
+ Items.Strings = (
+ 'Overall'
+ 'Red'
+ 'Green'
+ 'Blue')
+ end
+ object tbWeightLeft: TScrollBar
+ Left = 326
+ Top = 8
+ Width = 155
+ Height = 21
+ Max = 160
+ PageSize = 0
+ Position = 80
+ TabOrder = 2
+ OnChange = tbWeightChange
+ OnScroll = tbWeightScroll
+ end
+ object tbWeightRight: TScrollBar
+ Left = 326
+ Top = 35
+ Width = 155
+ Height = 21
+ Max = 160
+ PageSize = 0
+ Position = 80
+ TabOrder = 3
+ OnChange = tbWeightChange
+ OnScroll = tbWeightScroll
+ end
+ object Panel2: TPanel
+ Left = 199
+ Top = 8
+ Width = 121
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = ' First CP weight:'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object Panel1: TPanel
+ Left = 199
+ Top = 35
+ Width = 121
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = ' Second CP weight:'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+end
diff --git a/Forms/Curves.pas b/Forms/Curves.pas
new file mode 100644
index 0000000..959d238
--- /dev/null
+++ b/Forms/Curves.pas
@@ -0,0 +1,123 @@
+unit Curves;
+
+interface
+
+uses Windows, Classes, Graphics, Forms, Controls, CurvesControl, Vcl.ExtCtrls,
+ Vcl.StdCtrls, Vcl.ComCtrls, ControlPoint, Registry, Global;
+
+type
+ TCurvesForm = class(TForm)
+ CurvesPanel: TPanel;
+ cbChannel: TComboBox;
+ tbWeightLeft: TScrollBar;
+ tbWeightRight: TScrollBar;
+ Panel2: TPanel;
+ Panel1: TPanel;
+ Label1: TLabel;
+ procedure FormShow(Sender: TObject);
+ procedure cbChannelChange(Sender: TObject);
+ procedure tbWeightChange(Sender: TObject);
+ procedure tbWeightScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+ procedure FormCreate(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ private
+ { Private declarations }
+ published
+ CurvesControl: TCurvesControl;
+ public
+ procedure SetCp(cp: TControlPoint);
+ end;
+
+var
+ CurvesForm: TCurvesForm;
+
+implementation
+
+uses Main;
+
+{$R *.DFM}
+
+procedure TCurvesForm.tbWeightScroll(Sender: TObject; ScrollCode: TScrollCode;
+ var ScrollPos: Integer);
+begin
+ if ScrollCode = scEndScroll then
+ CurvesControl.UpdateFlame;
+end;
+
+procedure TCurvesForm.SetCp(cp: TControlPoint);
+begin
+ if CurvesControl = nil then Exit;
+ CurvesControl.SetCp(cp);
+end;
+
+procedure TCurvesForm.cbChannelChange(Sender: TObject);
+begin
+ if CurvesControl = nil then Exit;
+ CurvesControl.ActiveChannel := TCurvesChannel(cbChannel.ItemIndex);
+ tbWeightLeft.Position := Round(CurvesControl.WeightLeft * 10);
+ tbWeightRight.Position := Round(CurvesControl.WeightRight * 10);
+end;
+
+procedure TCurvesForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Curves', True) then
+ begin
+ Registry.WriteInteger('Top', self.Top);
+ Registry.WriteInteger('Left', self.Left);
+ end;
+ finally
+ Registry.Free;
+ end;
+// bStop := True;
+end;
+
+procedure TCurvesForm.FormCreate(Sender: TObject);
+begin
+ //
+end;
+
+procedure TCurvesForm.FormShow(Sender: TObject);
+var Registry: TRegistry;
+begin
+ if not (assigned(curvesControl)) then
+ begin
+ CurvesControl := TCurvesControl.Create(self);
+ CurvesControl.Align := alClient;
+ CurvesControl.Parent := CurvesPanel;
+ end;
+
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Curves', False) then
+ begin
+ if Registry.ValueExists('Left') then
+ self.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ self.Top := Registry.ReadInteger('Top');
+ Registry.CloseKey;
+ end;
+ finally
+ Registry.Free;
+ end;
+
+ tbWeightLeft.Position := Round(CurvesControl.WeightLeft * 10);
+ tbWeightRight.Position := Round(CurvesControl.WeightRight * 10);
+
+ SetCp(MainCp);
+end;
+
+procedure TCurvesForm.tbWeightChange(Sender: TObject);
+begin
+ CurvesControl.WeightLeft := tbWeightLeft.Position / 10.0;
+ CurvesControl.WeightRight := tbWeightRight.Position / 10.0;
+end;
+
+end.
diff --git a/Forms/Editor.dfm b/Forms/Editor.dfm
new file mode 100644
index 0000000..cc20def
--- /dev/null
+++ b/Forms/Editor.dfm
@@ -0,0 +1,5937 @@
+object EditForm: TEditForm
+ Left = 509
+ Top = 87
+ Caption = 'Transform Editor'
+ ClientHeight = 722
+ ClientWidth = 764
+ Color = clBtnFace
+ Constraints.MinHeight = 400
+ Constraints.MinWidth = 200
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001010000001002000680400001600000028000000100000002000
+ 0000010020000000000040040000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000282728AC010101BC020202880000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000979697FA5E5B5E57010101EF02020286000000000000001E0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000005B5B5BBF010101F200000000131313DC0605
+ 06D002000269010101E4020102F5090707E30000000000000000000000000000
+ 000000000000000000000000000073737385020102FF02020281000000000000
+ 00002B292BC0020102FF010101AC1212091D0000000000000000000000000000
+ 000000000000000000000000000080808022504E50FF010101BF000000006059
+ 5928575557A2242324FF010101EA000000000000000000000000000000000000
+ 000000000000000000000000000000000000717171F2010101E9000000007B77
+ 76D0919090EB565656832D2D2D7D010101DD010101C300000000000000000000
+ 000000000000000000000000000000000000646464CC020102FF0000000D0000
+ 0000747474216767673E00000000505050201717173700000000000000000000
+ 0000000000000000000000000000000000006C6C6C95181718FF020202810000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000898887C7B1AFAEFF817F7EFF0E0B0AFF0A08
+ 07F8000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000969496ED060506DA0000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000009090908E646364FF0000
+ 001D090606CF0A0707AB00000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000009D9C9DCB6E6B
+ 6BF50A0707F3070505BB00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008080
+ 80224D4D4D3C0000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ 0000FFFF0000C7FF0000C2FF0000F2070000F1870000F10F0000F9030000F893
+ 0000F8FF0000F07F0000FCFF0000FC1F0000FE1F0000FF3F0000FFFF0000}
+ KeyPreview = True
+ OldCreateOrder = True
+ Position = poDefault
+ OnActivate = FormActivate
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnKeyDown = EditKeyDown
+ OnKeyPress = EditKeyPress
+ OnResize = FormResize
+ OnShortCut = FormShortCut
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 704
+ Width = 764
+ Height = 18
+ Panels = <
+ item
+ Width = 60
+ end
+ item
+ Width = 60
+ end
+ item
+ Width = 150
+ end>
+ end
+ object topPnl: TPanel
+ Left = 0
+ Top = 0
+ Width = 764
+ Height = 24
+ Align = alTop
+ BevelOuter = bvSpace
+ Ctl3D = True
+ ParentCtl3D = False
+ TabOrder = 0
+ object EditorToolBar: TToolBar
+ Left = 1
+ Top = 1
+ Width = 762
+ Height = 22
+ Align = alClient
+ ButtonHeight = 23
+ ButtonWidth = 24
+ Caption = 'EditorToolBar'
+ Color = clBtnFace
+ Images = EditorTB
+ ParentColor = False
+ TabOrder = 0
+ object tbResetAll: TToolButton
+ Left = 0
+ Top = 0
+ Hint = 'New blank flame'
+ Caption = 'New blank flame'
+ ImageIndex = 0
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuResetAllClick
+ end
+ object tbAdd: TToolButton
+ Left = 24
+ Top = 0
+ Hint = 'Adds a new triangle'
+ Caption = 'Add'
+ ImageIndex = 1
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuAddClick
+ end
+ object tbDuplicate: TToolButton
+ Left = 48
+ Top = 0
+ Hint = 'Duplicates the selected triangle'
+ Caption = 'Duplicate'
+ ImageIndex = 2
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuDupClick
+ end
+ object tbDelete: TToolButton
+ Left = 72
+ Top = 0
+ Hint = 'Deletes the selected triangle'
+ Caption = 'Delete'
+ ImageIndex = 3
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuDeleteClick
+ end
+ object ToolButton4: TToolButton
+ Left = 96
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton4'
+ ImageIndex = 3
+ Style = tbsSeparator
+ end
+ object tbUndo: TToolButton
+ Left = 104
+ Top = 0
+ Hint = 'Undo (Ctrl+Z)'
+ Caption = 'Undo'
+ ImageIndex = 4
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuUndoClick
+ end
+ object tbRedo: TToolButton
+ Left = 128
+ Top = 0
+ Hint = 'Redo (Ctrl+Y)'
+ Caption = 'Redo'
+ ImageIndex = 5
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuRedoClick
+ end
+ object ToolButton11: TToolButton
+ Left = 152
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton11'
+ ImageIndex = 32
+ Style = tbsSeparator
+ end
+ object tbCopy: TToolButton
+ Left = 160
+ Top = 0
+ Hint = 'Copy triangle'
+ Caption = 'tbCopy'
+ DropdownMenu = CopyMenu
+ ImageIndex = 26
+ ParentShowHint = False
+ ShowHint = True
+ end
+ object tbPaste: TToolButton
+ Left = 184
+ Top = 0
+ Hint = 'Paste triangle'
+ Caption = 'tbPaste'
+ DropdownMenu = PasteMenu
+ ImageIndex = 27
+ ParentShowHint = False
+ ShowHint = True
+ end
+ object ToolButton1: TToolButton
+ Left = 208
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton1'
+ ImageIndex = 5
+ Style = tbsSeparator
+ end
+ object tbSelect: TToolButton
+ Left = 216
+ Top = 0
+ Hint = 'Select mode'
+ Caption = 'Select'
+ Down = True
+ ImageIndex = 6
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = tbSelectClick
+ end
+ object tbMove: TToolButton
+ Left = 240
+ Top = 0
+ Hint = 'Move triangle'
+ Caption = 'Move'
+ Down = True
+ Grouped = True
+ ImageIndex = 7
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbEditModeClick
+ end
+ object tbRotate: TToolButton
+ Left = 264
+ Top = 0
+ Hint = 'Rotate triangle'
+ Caption = 'Rotate'
+ Grouped = True
+ ImageIndex = 8
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbEditModeClick
+ end
+ object tbScale: TToolButton
+ Left = 288
+ Top = 0
+ Hint = 'Scale triangle'
+ Caption = 'Scale'
+ Grouped = True
+ ImageIndex = 9
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbEditModeClick
+ end
+ object tbPivotMode: TToolButton
+ Left = 312
+ Top = 0
+ Hint = 'Toggle world pivot mode'
+ Caption = 'tbPivotMode'
+ ImageIndex = 15
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = btnPivotModeClick
+ end
+ object ToolButton6: TToolButton
+ Left = 336
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton6'
+ ImageIndex = 16
+ Style = tbsSeparator
+ end
+ object tbRotate90CCW: TToolButton
+ Left = 344
+ Top = 0
+ Hint = 'Rotate triangle 90'#176' counter-clockwise'
+ Caption = 'tbRotate90CCW'
+ ImageIndex = 17
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgRotateLeft90Click
+ end
+ object tbRotate90CW: TToolButton
+ Left = 368
+ Top = 0
+ Hint = 'Rotate triangle 90'#176' clockwise'
+ Caption = 'tbRotate90CW'
+ ImageIndex = 18
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgRotateRight90Click
+ end
+ object tbFlipHorz: TToolButton
+ Left = 392
+ Top = 0
+ Hint = 'Flip triangle horizontal'
+ Caption = 'Flip Horizontal'
+ ImageIndex = 10
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuFlipHorizontalClick
+ end
+ object tbFlipVert: TToolButton
+ Left = 416
+ Top = 0
+ Hint = 'Flip triangle vertical'
+ Caption = 'Flip Vertical'
+ ImageIndex = 11
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuFlipVerticalClick
+ end
+ object ToolButton2: TToolButton
+ Left = 440
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton2'
+ ImageIndex = 14
+ Style = tbsSeparator
+ end
+ object tbVarPreview: TToolButton
+ Left = 448
+ Top = 0
+ Hint = 'Show/hide variation preview'
+ Caption = 'Variation Preview'
+ ImageIndex = 14
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbVarPreviewClick
+ end
+ object ToolButton3: TToolButton
+ Left = 472
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton3'
+ ImageIndex = 16
+ Style = tbsSeparator
+ end
+ object tbPostXswap: TToolButton
+ Left = 480
+ Top = 0
+ Hint = 'Enable post-triangle editing'
+ Caption = 'tbPostXswap'
+ ImageIndex = 29
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbPostXswapClick
+ end
+ object tbEnableFinalXform: TToolButton
+ Left = 504
+ Top = 0
+ Hint = 'Enable final transform'
+ Caption = 'Show Final Xform'
+ ImageIndex = 24
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbEnableFinalXformClick
+ end
+ object ToolButton8: TToolButton
+ Left = 528
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton8'
+ ImageIndex = 32
+ Style = tbsSeparator
+ end
+ object tbPostLink: TToolButton
+ Left = 536
+ Top = 0
+ Hint = 'Adds a new linked triangle'
+ Caption = 'tbPostLink'
+ ImageIndex = 31
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuLinkPostxformClick
+ end
+ object tbPreLink: TToolButton
+ Left = 560
+ Top = 0
+ Hint = 'Add linked pre-transform'
+ Caption = 'tbPreLink'
+ ImageIndex = 33
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = mnuLinkPrexformClick
+ end
+ object btnFullChaos: TToolButton
+ Left = 584
+ Top = 0
+ Caption = 'Show Chaos'
+ ImageIndex = 41
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnFullChaosClick
+ end
+ object ToolButton5: TToolButton
+ Left = 608
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton5'
+ ImageIndex = 32
+ Style = tbsSeparator
+ end
+ object btnMathPopup: TToolButton
+ Left = 616
+ Top = 0
+ Hint = 'Insert math constant into the selected text field'
+ Caption = 'Math menu'
+ DropdownMenu = MathPopup
+ ImageIndex = 32
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsDropDown
+ OnClick = InsertPi1Click
+ end
+ end
+ end
+ object EditPnl: TPanel
+ Left = 0
+ Top = 24
+ Width = 764
+ Height = 680
+ Align = alClient
+ TabOrder = 2
+ OnClick = btnCopyTriangleClick
+ object Splitter1: TSplitter
+ Left = 453
+ Top = 1
+ Width = 10
+ Height = 678
+ Align = alRight
+ AutoSnap = False
+ Beveled = True
+ MinSize = 300
+ OnMoved = splitterMoved
+ ExplicitLeft = 454
+ ExplicitHeight = 731
+ end
+ object GrphPnl: TPanel
+ Left = 1
+ Top = 1
+ Width = 452
+ Height = 678
+ Align = alClient
+ BevelOuter = bvNone
+ Color = clAppWorkSpace
+ TabOrder = 0
+ object ImgTemp: TImage
+ Left = 0
+ Top = 0
+ Width = 273
+ Height = 233
+ Proportional = True
+ end
+ end
+ object RightPanel: TPanel
+ Left = 463
+ Top = 1
+ Width = 300
+ Height = 678
+ Align = alRight
+ Alignment = taLeftJustify
+ BevelOuter = bvNone
+ TabOrder = 1
+ object Splitter2: TSplitter
+ Left = 0
+ Top = 177
+ Width = 300
+ Height = 8
+ Cursor = crVSplit
+ Align = alTop
+ AutoSnap = False
+ Beveled = True
+ MinSize = 177
+ Visible = False
+ OnMoved = splitterMoved
+ end
+ object ControlPanel: TPanel
+ Left = 0
+ Top = 185
+ Width = 300
+ Height = 493
+ Align = alClient
+ TabOrder = 0
+ OnResize = ControlPanelResize
+ DesignSize = (
+ 300
+ 493)
+ object PageControl: TPageControl
+ Left = 1
+ Top = 79
+ Width = 298
+ Height = 413
+ ActivePage = TabVariables
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ MultiLine = True
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 3
+ TabStop = False
+ object TriangleTab: TTabSheet
+ Caption = 'Triangle'
+ ImageIndex = 34
+ object TriangleScrollBox: TScrollBox
+ Left = 0
+ Top = 0
+ Width = 290
+ Height = 367
+ HorzScrollBar.Visible = False
+ VertScrollBar.Position = 58
+ VertScrollBar.Smooth = True
+ VertScrollBar.Style = ssFlat
+ VertScrollBar.Tracking = True
+ Align = alClient
+ BevelInner = bvNone
+ BevelOuter = bvNone
+ BorderStyle = bsNone
+ TabOrder = 0
+ DesignSize = (
+ 273
+ 367)
+ object TrianglePanel: TPanel
+ Left = 3
+ Top = -48
+ Width = 249
+ Height = 415
+ Anchors = [akLeft, akTop, akRight]
+ BevelOuter = bvNone
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnResize = TrianglePanelResize
+ object TriangleToolBar: TToolBar
+ Left = 28
+ Top = 218
+ Width = 163
+ Height = 28
+ ParentCustomHint = False
+ Align = alNone
+ EdgeInner = esNone
+ EdgeOuter = esNone
+ Images = EditorTB
+ List = True
+ TabOrder = 3
+ object tbCopyTriangle: TToolButton
+ Left = 0
+ Top = 0
+ Hint = 'Copy triangle coordinates'
+ ImageIndex = 26
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnCopyTriangleClick
+ end
+ object tbPasteTriangle: TToolButton
+ Left = 23
+ Top = 0
+ Hint = 'Paste triangle coordinates'
+ Enabled = False
+ ImageIndex = 27
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnPasteTriangleClick
+ end
+ object tbExtendedEdit: TToolButton
+ Left = 46
+ Top = 0
+ Hint = 'Enable extended edit mode'
+ Caption = 'tbExtendedEdit'
+ ImageIndex = 25
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbExtendedEditClick
+ end
+ object tbAxisLock: TToolButton
+ Left = 69
+ Top = 0
+ Hint = 'Lock transform axes'
+ Caption = 'tbAxisLock'
+ ImageIndex = 16
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbAxisLockClick
+ end
+ object tbAutoWeights: TToolButton
+ Left = 92
+ Top = 0
+ Hint = 'Auto-balance weights'
+ Caption = 'tbAutoWeights'
+ ImageIndex = 28
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ end
+ object tb2PostXswap: TToolButton
+ Left = 115
+ Top = 0
+ Hint = 'Enable post-triangle editing'
+ Caption = 'tb2PostXswap'
+ ImageIndex = 29
+ ParentShowHint = False
+ ShowHint = True
+ Style = tbsCheck
+ OnClick = tbPostXswapClick
+ end
+ object tbTriangle: TToolButton
+ Left = 138
+ Top = 0
+ DropdownMenu = TriangleOperations
+ ImageIndex = 34
+ ParentShowHint = False
+ ShowHint = True
+ end
+ end
+ object GroupBox5: TGroupBox
+ Left = 20
+ Top = 112
+ Width = 177
+ Height = 97
+ Caption = 'Transformations'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ParentShowHint = False
+ PopupMenu = TriangleOperations
+ ShowHint = True
+ TabOrder = 4
+ OnDblClick = ResetToolsDblClick
+ object btTrgRotateLeft90: TSpeedButton
+ Left = 8
+ Top = 17
+ Width = 23
+ Height = 24
+ Hint = 'Rotate triangle 90'#176' counter-clockwise'
+ Flat = True
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 08000000000000010000C40E0000C40E00000001000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000003300
+ 00006600000099000000CC000000FF0000000033000033330000663300009933
+ 0000CC330000FF33000000660000336600006666000099660000CC660000FF66
+ 000000990000339900006699000099990000CC990000FF99000000CC000033CC
+ 000066CC000099CC0000CCCC0000FFCC000000FF000033FF000066FF000099FF
+ 0000CCFF0000FFFF000000003300330033006600330099003300CC003300FF00
+ 330000333300333333006633330099333300CC333300FF333300006633003366
+ 33006666330099663300CC663300FF6633000099330033993300669933009999
+ 3300CC993300FF99330000CC330033CC330066CC330099CC3300CCCC3300FFCC
+ 330000FF330033FF330066FF330099FF3300CCFF3300FFFF3300000066003300
+ 66006600660099006600CC006600FF0066000033660033336600663366009933
+ 6600CC336600FF33660000666600336666006666660099666600CC666600FF66
+ 660000996600339966006699660099996600CC996600FF99660000CC660033CC
+ 660066CC660099CC6600CCCC6600FFCC660000FF660033FF660066FF660099FF
+ 6600CCFF6600FFFF660000009900330099006600990099009900CC009900FF00
+ 990000339900333399006633990099339900CC339900FF339900006699003366
+ 99006666990099669900CC669900FF6699000099990033999900669999009999
+ 9900CC999900FF99990000CC990033CC990066CC990099CC9900CCCC9900FFCC
+ 990000FF990033FF990066FF990099FF9900CCFF9900FFFF99000000CC003300
+ CC006600CC009900CC00CC00CC00FF00CC000033CC003333CC006633CC009933
+ CC00CC33CC00FF33CC000066CC003366CC006666CC009966CC00CC66CC00FF66
+ CC000099CC003399CC006699CC009999CC00CC99CC00FF99CC0000CCCC0033CC
+ CC0066CCCC0099CCCC00CCCCCC00FFCCCC0000FFCC0033FFCC0066FFCC0099FF
+ CC00CCFFCC00FFFFCC000000FF003300FF006600FF009900FF00CC00FF00FF00
+ FF000033FF003333FF006633FF009933FF00CC33FF00FF33FF000066FF003366
+ FF006666FF009966FF00CC66FF00FF66FF000099FF003399FF006699FF009999
+ FF00CC99FF00FF99FF0000CCFF0033CCFF0066CCFF0099CCFF00CCCCFF00FFCC
+ FF0000FFFF0033FFFF0066FFFF0099FFFF00CCFFFF00FFFFFF000F0F0F0F0F0F
+ 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F
+ 0F0F0F0F070000070F0F0F0F0F0F0F0F0F0F0F0F070000070F0F0F0F0F0F0F0F
+ 0F0F0F0F070000070F0F0F0F0F0F0FD40F0F0F0F070000070F0F0F0F0F0FD47E
+ 0F0F0F0F070000070F0F0F0F0FD453530F0F0F0F070000070F0F0F0FD4530053
+ 0F0F0F0F070000070F0F0FD45300000007070707070000070F0F0F5300000000
+ 00000000000000070F0F08070000000000000000000000070F0F0F0807000000
+ 07070707070707070F0F0F0F080700000F0F0F0F0F0F0F0F0F0F0F0F0F080700
+ 0F0F0F0F0F0F0F0F0F0F0F0F0F0F08000F0F0F0F0F0F0F0F0F0F}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgRotateLeft90Click
+ end
+ object btTrgRotateRight90: TSpeedButton
+ Left = 146
+ Top = 17
+ Width = 23
+ Height = 24
+ Hint = 'Rotate triangle 90'#176' clockwise'
+ Flat = True
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 08000000000000010000C40E0000C40E00000001000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000003300
+ 00006600000099000000CC000000FF0000000033000033330000663300009933
+ 0000CC330000FF33000000660000336600006666000099660000CC660000FF66
+ 000000990000339900006699000099990000CC990000FF99000000CC000033CC
+ 000066CC000099CC0000CCCC0000FFCC000000FF000033FF000066FF000099FF
+ 0000CCFF0000FFFF000000003300330033006600330099003300CC003300FF00
+ 330000333300333333006633330099333300CC333300FF333300006633003366
+ 33006666330099663300CC663300FF6633000099330033993300669933009999
+ 3300CC993300FF99330000CC330033CC330066CC330099CC3300CCCC3300FFCC
+ 330000FF330033FF330066FF330099FF3300CCFF3300FFFF3300000066003300
+ 66006600660099006600CC006600FF0066000033660033336600663366009933
+ 6600CC336600FF33660000666600336666006666660099666600CC666600FF66
+ 660000996600339966006699660099996600CC996600FF99660000CC660033CC
+ 660066CC660099CC6600CCCC6600FFCC660000FF660033FF660066FF660099FF
+ 6600CCFF6600FFFF660000009900330099006600990099009900CC009900FF00
+ 990000339900333399006633990099339900CC339900FF339900006699003366
+ 99006666990099669900CC669900FF6699000099990033999900669999009999
+ 9900CC999900FF99990000CC990033CC990066CC990099CC9900CCCC9900FFCC
+ 990000FF990033FF990066FF990099FF9900CCFF9900FFFF99000000CC003300
+ CC006600CC009900CC00CC00CC00FF00CC000033CC003333CC006633CC009933
+ CC00CC33CC00FF33CC000066CC003366CC006666CC009966CC00CC66CC00FF66
+ CC000099CC003399CC006699CC009999CC00CC99CC00FF99CC0000CCCC0033CC
+ CC0066CCCC0099CCCC00CCCCCC00FFCCCC0000FFCC0033FFCC0066FFCC0099FF
+ CC00CCFFCC00FFFFCC000000FF003300FF006600FF009900FF00CC00FF00FF00
+ FF000033FF003333FF006633FF009933FF00CC33FF00FF33FF000066FF003366
+ FF006666FF009966FF00CC66FF00FF66FF000099FF003399FF006699FF009999
+ FF00CC99FF00FF99FF0000CCFF0033CCFF0066CCFF0099CCFF00CCCCFF00FFCC
+ FF0000FFFF0033FFFF0066FFFF0099FFFF00CCFFFF00FFFFFF000F0F0F0F0F0F
+ 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F07000007
+ 0F0F0F0F0F0F0F0F0F0F0F0F070000070F0F0F0F0F0F0F0F0F0F0F0F07000007
+ 0F0F0F0F0F0F0F0F0F0F0F0F070000070F0F0F0FD40F0F0F0F0F0F0F07000007
+ 0F0F0F0F7ED40F0F0F0F0F0F070000070F0F0F0F5353D40F0F0F0F0F07000007
+ 0F0F0F0F530053D40F0F0F0F070000070707070700000053D40F0F0F07000000
+ 0000000000000000530F0F0F07000000000000000000000007080F0F07070707
+ 0707070700000007080F0F0F0F0F0F0F0F0F0F0F000007080F0F0F0F0F0F0F0F
+ 0F0F0F0F0007080F0F0F0F0F0F0F0F0F0F0F0F0F00080F0F0F0F}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgRotateRight90Click
+ end
+ object btTrgScaleDown: TSpeedButton
+ Left = 32
+ Top = 65
+ Width = 23
+ Height = 24
+ Hint = 'Scale triangle down'
+ Flat = True
+ Glyph.Data = {
+ F6000000424DF600000000000000760000002800000010000000100000000100
+ 0400000000008000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000
+ 0FFFF000000000000FFFFF0000FFFFF00FFFFFF0000FFFF00FFFFFFFF000FFF0
+ 0FFFFFFFFF000FF00FFFFFFFFFF000000FFFFFFFFFFF00000FFFFFFFFFFFFF00
+ 0FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgScaleDownClick
+ end
+ object btTrgScaleUp: TSpeedButton
+ Left = 122
+ Top = 65
+ Width = 23
+ Height = 24
+ Hint = 'Scale triangle up'
+ Flat = True
+ Glyph.Data = {
+ F6000000424DF600000000000000760000002800000010000000100000000100
+ 0400000000008000000000000000000000001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFFF00000000000000FF00000000000000FFF000FFFFFFFF00FFFF000FFFFFF
+ F00FFFFF000FFFFFF00FFFFFF000FFFFF00FFFFFFF000FFFF00FFFFFFFF000FF
+ F00FFFFFFFFF000FF00FFFFFFFFFF000F00FFFFFFFFFFF00000FFFFFFFFFFFF0
+ 000FFFFFFFFFFFFF000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgScaleUpClick
+ end
+ object btTrgMoveDown: TSpeedButton
+ Left = 32
+ Top = 41
+ Width = 23
+ Height = 24
+ Hint = 'Move triangle down'
+ Flat = True
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+ 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000
+ 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF808080000000000000000000000000FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000
+ 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF808080000000000000000000000000000000000000FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000
+ 0000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFF808080000000808080808080000000000000C0C0C0404040000000FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040FFFFFFFFFFFF80808000
+ 0000000000FFFFFFFFFFFFC0C0C0808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000
+ 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000
+ 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C000
+ 0000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgMoveDownClick
+ end
+ object btTrgMoveLeft: TSpeedButton
+ Left = 122
+ Top = 41
+ Width = 23
+ Height = 24
+ Hint = 'Move triangle left'
+ Flat = True
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFF808080404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000000000000000
+ 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 8080800000000000000000000000000000008080808080808080808080808080
+ 80808080808080C0C0C080808000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF808080
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000404040FFFFFFFFFFFFFFFFFF80808000000000000000000000
+ 0000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF808080000000000000404040FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
+ 8080000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgMoveLeftClick
+ end
+ object btTrgMoveRight: TSpeedButton
+ Left = 146
+ Top = 41
+ Width = 23
+ Height = 24
+ Hint = 'Move triangle right'
+ Flat = True
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40404080
+ 8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
+ 8080000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080
+ 8080808080808080808080808080808080800000000000000000000000000000
+ 00808080FFFFFFFFFFFF00000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000808080404040000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
+ C0C0000000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000000000808080FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C000
+ 0000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgMoveRightClick
+ end
+ object btTrgMoveUp: TSpeedButton
+ Left = 8
+ Top = 41
+ Width = 23
+ Height = 24
+ Hint = 'Move triangle up'
+ Flat = True
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000C0C0C0FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+ 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+ 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+ 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFF808080C0C0C0FFFFFFFFFFFF000000000000808080FFFFFFFFFFFF4040
+ 40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000404040C0C0C000
+ 0000000000808080808080000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF808080000000000000000000000000000000000000000000FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000
+ 0000000000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFF808080000000000000000000000000000000FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000
+ 0000000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000000000FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+ 0000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000FFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgMoveUpClick
+ end
+ object btTrgRotateLeft: TSpeedButton
+ Left = 32
+ Top = 17
+ Width = 23
+ Height = 24
+ Hint = 'Rotate triangle counter clockwise'
+ Flat = True
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000130B0000130B00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080808080FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFF000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000404040FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FF404040000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0FFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000000000808080FFFFFFFFFFFF
+ FFFFFFFFFFFFE0E0E0606060FFFFFFFFFFFFFFFFFFFFFFFFE0E0E08080800000
+ 00000000000000E0E0E0FFFFFFFFFFFFFFFFFFE0E0E0202020404040FFFFFFE0
+ E0E0C0C0C0A0A0A0404040000000000000000000404040FFFFFFFFFFFFFFFFFF
+ E0E0E02020200000004040408080804040404040400000000000000000000000
+ 00000000C0C0C0FFFFFFFFFFFFE0E0E020202000000000000000000000000000
+ 0000000000000000000000000000404040404040FFFFFFFFFFFFFFFFFF202020
+ 0000000000000000000000000000000000000000000000000000004040408080
+ 80FFFFFFFFFFFFFFFFFFC0C0C080808000000000000000000000000000000000
+ 0000000000404040808080808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0
+ 808080000000000000404040808080808080808080808080C0C0C0FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080000000202020808080C0
+ C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFC0C0C0808080404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0808080FFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgRotateLeftClick
+ end
+ object btTrgRotateRight: TSpeedButton
+ Left = 122
+ Top = 17
+ Width = 23
+ Height = 24
+ Hint = 'Rotate triangle clockwise'
+ Flat = True
+ Glyph.Data = {
+ F6000000424DF600000000000000760000002800000010000000100000000100
+ 04000000000080000000130B0000130B00001000000000000000000000000000
+ 8000008000000080800080000000800080008080000080808000C0C0C0000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFF
+ FFFF77FFFFFFFFFFFFFF70FFFFFFFFFFFFFF708FFFFFFFFFFFFF707FFFFFFFFF
+ FFFF7007FFFFFFFFFFFFF0007FFFFF7FFFFFF7000788FF70FFFFF80000077770
+ 0FFFFF770000000000FFFFF770000000000FFFFF777000000078FFFFF8777770
+ 078FFFFFFFFF870078FFFFFFFFFFFF778FFFFFFFFFFFFF78FFFF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btTrgRotateRightClick
+ end
+ object txtTrgScaleValue: TComboBox
+ Left = 56
+ Top = 66
+ Width = 65
+ Height = 21
+ AutoComplete = False
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ItemIndex = 1
+ ParentFont = False
+ TabOrder = 2
+ Text = '125'
+ OnExit = txtValidateValue
+ OnKeyPress = txtValKeyPress
+ OnSelect = txtValidateValue
+ Items.Strings = (
+ '110'
+ '125'
+ '150'
+ '175'
+ '200')
+ end
+ object txtTrgRotateValue: TComboBox
+ Left = 56
+ Top = 18
+ Width = 65
+ Height = 21
+ AutoComplete = False
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = '15'
+ OnExit = txtValidateValue
+ OnKeyPress = txtValKeyPress
+ OnSelect = txtValidateValue
+ Items.Strings = (
+ '5'
+ '15'
+ '30'
+ '45'
+ '60'
+ '90'
+ '120'
+ '180')
+ end
+ object txtTrgMoveValue: TComboBox
+ Left = 56
+ Top = 42
+ Width = 65
+ Height = 21
+ AutoComplete = False
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ItemIndex = 3
+ ParentFont = False
+ TabOrder = 1
+ Text = '0.1'
+ OnExit = txtValidateValue
+ OnKeyPress = txtValKeyPress
+ OnSelect = txtValidateValue
+ Items.Strings = (
+ '1'
+ '0.5'
+ '0.25'
+ '0.1'
+ '0.05'
+ '0.025'
+ '0.01')
+ end
+ end
+ object GroupBox6: TGroupBox
+ Left = 6
+ Top = 0
+ Width = 209
+ Height = 105
+ Caption = 'Coordinates'
+ Ctl3D = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentCtl3D = False
+ ParentFont = False
+ TabOrder = 0
+ DesignSize = (
+ 209
+ 105)
+ object LabelC: TLabel
+ Left = 8
+ Top = 48
+ Width = 10
+ Height = 13
+ Caption = 'Y:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object LabelA: TLabel
+ Left = 8
+ Top = 24
+ Width = 10
+ Height = 13
+ Caption = 'X:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object LabelB: TLabel
+ Left = 8
+ Top = 72
+ Width = 12
+ Height = 13
+ Caption = 'O:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object txtAx: TEdit
+ Tag = 1
+ Left = 28
+ Top = 20
+ Width = 70
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CornerEditExit
+ OnKeyPress = CornerEditKeyPress
+ end
+ object txtAy: TEdit
+ Left = 117
+ Top = 20
+ Width = 70
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CornerEditExit
+ OnKeyPress = CornerEditKeyPress
+ end
+ object txtBx: TEdit
+ Left = 28
+ Top = 68
+ Width = 70
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 4
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CornerEditExit
+ OnKeyPress = CornerEditKeyPress
+ end
+ object txtBy: TEdit
+ Left = 117
+ Top = 68
+ Width = 70
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CornerEditExit
+ OnKeyPress = CornerEditKeyPress
+ end
+ object txtCx: TEdit
+ Left = 28
+ Top = 44
+ Width = 70
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CornerEditExit
+ OnKeyPress = CornerEditKeyPress
+ end
+ object txtCy: TEdit
+ Tag = 1
+ Left = 117
+ Top = 44
+ Width = 70
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CornerEditExit
+ OnKeyPress = CornerEditKeyPress
+ end
+ object SpinXx: TSpinButton
+ Left = 98
+ Top = 19
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtAx
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 6
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object SpinYx: TSpinButton
+ Left = 98
+ Top = 43
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtCx
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 7
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object SpinOx: TSpinButton
+ Left = 98
+ Top = 67
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtBx
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 8
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object SpinXy: TSpinButton
+ Left = 187
+ Top = 19
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtAy
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 9
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object SpinYy: TSpinButton
+ Left = 187
+ Top = 43
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtCy
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 10
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object SpinOy: TSpinButton
+ Left = 187
+ Top = 67
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtBy
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 11
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ end
+ object GroupBox3: TGroupBox
+ Left = 6
+ Top = 248
+ Width = 209
+ Height = 65
+ Caption = 'Pivot Point'
+ TabOrder = 2
+ object btnResetPivot: TSpeedButton
+ Left = 2
+ Top = 40
+ Width = 22
+ Height = 22
+ Hint = 'Reset pivot point to (0, 0)'
+ Margins.Top = 0
+ Caption = 'r'
+ Font.Charset = SYMBOL_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Marlett'
+ Font.Style = [fsItalic]
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnResetPivotClick
+ end
+ object btnPickPivot: TSpeedButton
+ Left = 184
+ Top = 40
+ Width = 22
+ Height = 22
+ Hint = 'Pick pivot point using mouse'
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000000000000000000000000000000000000FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00745A4600694F
+ 3B00CAC2BB00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00BBADA10081685400CAB2
+ A400684E3A00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00967C6900FF00FF00FF00FF00FF00FF008C735F00DFCABE00BDA7
+ 980070574300FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF009C8370007F655200CEC6BF00CABEB50091796600E9D7CE007C63
+ 4F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00A38A7700DCD1CB006D533F0091796600DDCEC500D6C5BB00856C
+ 5900FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00AA917F00F9F4F100DDD4CD00856C5800F3EAE500947C6900DCD4
+ CE00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00B0988600FCFAF900FBF7F600F9F5F200F7F2EE00896F5C00664C
+ 38006A503C00765C4900FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00B79F8D00FFFFFE00FEFDFC00FDFBFA00FBF8F700FAF6F300DFD5
+ CE00886E5B00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00BDA69400FFFFFF00FFFFFF00FFFFFF00FEFDFD00E2DAD5009A82
+ 6F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00C3AC9900FFFFFF00FFFFFF00FFFFFF00ECE7E300AB938100FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00C8B09E00FFFFFF00FFFFFF00F6F2F000BDA59300FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00CBB4A200FFFFFF00F7F4F100CAB3A100FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00CBB4A200F6F3F000CBB4A200FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00CBB4A200CBB4A200FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00CBB4A200FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnPickPivotClick
+ end
+ object btnPivotMode: TSpeedButton
+ Left = 24
+ Top = 40
+ Width = 160
+ Height = 22
+ Caption = 'Local Pivot'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnPivotModeClick
+ end
+ object Label5: TLabel
+ Left = 110
+ Top = 20
+ Width = 10
+ Height = 13
+ Caption = 'Y:'
+ end
+ object Label6: TLabel
+ Left = 8
+ Top = 20
+ Width = 10
+ Height = 13
+ Caption = 'X:'
+ end
+ object editPivotY: TEdit
+ Left = 121
+ Top = 16
+ Width = 70
+ Height = 21
+ Hint = 'Pivot point ordinate in chosen coordinate system'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ Text = '0'
+ OnExit = PivotValidate
+ OnKeyPress = PivotKeyPress
+ end
+ object editPivotX: TEdit
+ Left = 20
+ Top = 16
+ Width = 70
+ Height = 21
+ Hint = 'Pivot point abscissa in chosen coordinate system'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ Text = '0'
+ OnExit = PivotValidate
+ OnKeyPress = PivotKeyPress
+ end
+ object SpinPivotX: TSpinButton
+ Left = 90
+ Top = 15
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = editPivotX
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 2
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object SpinPivotY: TSpinButton
+ Left = 191
+ Top = 15
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = editPivotY
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 3
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ end
+ object GroupBox10: TGroupBox
+ Left = 6
+ Top = 319
+ Width = 209
+ Height = 90
+ Caption = 'Reflection Axis'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ object btnShowLine: TSpeedButton
+ Left = 4
+ Top = 40
+ Width = 62
+ Height = 22
+ Caption = 'Show line'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnShowLineClick
+ end
+ object btnResetFlip: TSpeedButton
+ Left = 183
+ Top = 40
+ Width = 22
+ Height = 22
+ Hint = 'Reset point coordinates'
+ Caption = 'r'
+ Font.Charset = SYMBOL_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Marlett'
+ Font.Style = [fsItalic]
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnResetFlipClick
+ end
+ object btnFlip: TSpeedButton
+ Left = 67
+ Top = 40
+ Width = 115
+ Height = 22
+ Hint = 'Flip triangle through a line'
+ Caption = 'Flip Triangle'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 1800000000000003000000000000000000000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFBD4A00BD4A00BD4A00BD
+ 4A00BD4A00BD4A00BD4A08BD4A08BD4A00BD4A00BD4A00FF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFB54200CE5208CE5208CE5208CE5208CE5208CE5208CE52
+ 08CE5208AD4200FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA54200E7
+ 7B42E77B42E77B42E77B42E77B42E77B42E77B42A54200FF00FFFF00FF943900
+ FF00FFFF00FFFF00FFFF00FFFF00FF943900F7AD7BF7AD7BF7AD7BF7AD7BF7AD
+ 7BF7AD7B943900FF00FFFF00FF843100843100FF00FFFF00FFFF00FFFF00FFFF
+ 00FF843100FFCEB5FFCEB5FFCEB5FFCEB5FFCEB5843100FF00FFFF00FF732900
+ CE5208732900FF00FFFF00FFFF00FFFF00FF732900732900FFF7EFFFF7EFFFF7
+ EFFFF7EF732900FF00FFFF00FF632900CE5208E77B42632900FF00FFFF00FF63
+ 2900632900632900632900BDE7FFBDE7FFBDE7FF632900FF00FFFF00FF522100
+ CE5208E77B42F7AD7B5A21005A21005A21005A2100FF00FFFF00FF5A21004AAD
+ F74AADF75A2100FF00FFFF00FF4A1800CE5208E77B42F7AD7BFFCEB54A18004A
+ 1800FF00FFFF00FFFF00FFFF00FF4A18000884EF4A1800FF00FFFF00FF391800
+ CE5208E77B42F7AD7BFFD6B5FFF7EF391800FF00FFFF00FFFF00FFFF00FFFF00
+ FF391000391800FF00FFFF00FF291000CE5208E77B42F7AD7BFFD6B5FFF7EFBD
+ E7FF291000FF00FFFF00FFFF00FFFF00FFFF00FF291000FF00FFFF00FF180800
+ CE5208E77B42F7AD7BFFCEB5FFF7EFBDE7FF4AADF7180800FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FF080000CE5208E77B42F7AD7BFFCEB5FFF7EFBD
+ E7FF4AADF70884EF080000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000
+ 000000000000000000000000000000000000000000000000000000000000FF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnFlipClick
+ end
+ object Label7: TLabel
+ Left = 8
+ Top = 20
+ Width = 10
+ Height = 13
+ Caption = 'X:'
+ end
+ object Label8: TLabel
+ Left = 110
+ Top = 20
+ Width = 10
+ Height = 13
+ Caption = 'Y:'
+ end
+ object lblFlipAngle: TLabel
+ Left = 8
+ Top = 68
+ Width = 110
+ Height = 15
+ AutoSize = False
+ end
+ object editFlipY: TEdit
+ Left = 121
+ Top = 16
+ Width = 70
+ Height = 21
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ Text = '1'
+ OnExit = FlipPointValidate
+ OnKeyPress = FlipPointKeyPress
+ end
+ object editFlipX: TEdit
+ Left = 20
+ Top = 16
+ Width = 70
+ Height = 21
+ Hint = 'Second point abscissa in the chosen coordinate system'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ Text = '0'
+ OnExit = FlipPointValidate
+ OnKeyPress = FlipPointKeyPress
+ end
+ object SpinFlipX: TSpinButton
+ Left = 90
+ Top = 15
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = editFlipX
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 2
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object SpinFlipY: TSpinButton
+ Left = 191
+ Top = 15
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = editFlipY
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 3
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object btFlipX: TButton
+ Left = 130
+ Top = 65
+ Width = 22
+ Height = 22
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ImageIndex = 38
+ Images = EditorTB
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ OnClick = btFlipXYClick
+ end
+ object btFlipY: TButton
+ Left = 155
+ Top = 65
+ Width = 22
+ Height = 22
+ ImageIndex = 39
+ Images = EditorTB
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ OnClick = btFlipXYClick
+ end
+ object btFlipDiag: TButton
+ Left = 180
+ Top = 65
+ Width = 22
+ Height = 22
+ ImageIndex = 37
+ Images = EditorTB
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ OnClick = btFlipXYClick
+ end
+ end
+ end
+ end
+ end
+ object tabXForm: TTabSheet
+ Caption = 'Transform'
+ ParentShowHint = False
+ ShowHint = True
+ object ScrollBox1: TScrollBox
+ Left = 0
+ Top = 0
+ Width = 290
+ Height = 367
+ HorzScrollBar.Visible = False
+ Align = alClient
+ BorderStyle = bsNone
+ TabOrder = 0
+ OnResize = ScrollBox1Resize
+ DesignSize = (
+ 290
+ 367)
+ object GroupBox9: TGroupBox
+ Left = 8
+ Top = 4
+ Width = 225
+ Height = 118
+ Caption = 'Affine coefficients'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ object btnXcoefs: TSpeedButton
+ Left = 8
+ Top = 17
+ Width = 25
+ Height = 21
+ Hint = 'Reset vector X'
+ Caption = 'X'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnXcoefsClick
+ end
+ object btnYcoefs: TSpeedButton
+ Left = 8
+ Top = 41
+ Width = 25
+ Height = 21
+ Hint = 'Reset vector Y'
+ Caption = 'Y'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnYcoefsClick
+ end
+ object btnOcoefs: TSpeedButton
+ Left = 8
+ Top = 65
+ Width = 25
+ Height = 21
+ Hint = 'Reset vector O'
+ Caption = 'O'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnOcoefsClick
+ end
+ object btnResetCoefs: TSpeedButton
+ Left = 8
+ Top = 89
+ Width = 209
+ Height = 22
+ Hint = 'Reset all vectors to default position'
+ Caption = 'Reset transform'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnResetCoefsClick
+ end
+ object txtA: TEdit
+ Tag = 1
+ Left = 36
+ Top = 17
+ Width = 70
+ Height = 21
+ Hint = 'A'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CoefValidate
+ OnKeyPress = CoefKeyPress
+ end
+ object txtB: TEdit
+ Left = 128
+ Top = 17
+ Width = 70
+ Height = 21
+ Hint = 'C '
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CoefValidate
+ OnKeyPress = CoefKeyPress
+ end
+ object txtC: TEdit
+ Left = 36
+ Top = 41
+ Width = 70
+ Height = 21
+ Hint = 'B'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 2
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CoefValidate
+ OnKeyPress = CoefKeyPress
+ end
+ object txtD: TEdit
+ Tag = 1
+ Left = 128
+ Top = 41
+ Width = 70
+ Height = 21
+ Hint = 'D '
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CoefValidate
+ OnKeyPress = CoefKeyPress
+ end
+ object txtE: TEdit
+ Left = 36
+ Top = 65
+ Width = 70
+ Height = 21
+ Hint = 'E '
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CoefValidate
+ OnKeyPress = CoefKeyPress
+ end
+ object txtF: TEdit
+ Left = 128
+ Top = 65
+ Width = 70
+ Height = 21
+ Hint = 'F '
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = CoefValidate
+ OnKeyPress = CoefKeyPress
+ end
+ object spinA: TSpinButton
+ Left = 106
+ Top = 16
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtA
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 6
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinB: TSpinButton
+ Left = 198
+ Top = 16
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtB
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 7
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinC: TSpinButton
+ Left = 106
+ Top = 40
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtC
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 8
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinD: TSpinButton
+ Left = 198
+ Top = 40
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtD
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 9
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinE: TSpinButton
+ Left = 106
+ Top = 64
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtE
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 10
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinF: TSpinButton
+ Left = 198
+ Top = 64
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtF
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 11
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ end
+ object GroupBox7: TGroupBox
+ Left = 8
+ Top = 245
+ Width = 225
+ Height = 42
+ Caption = 'Coordinate system'
+ TabOrder = 1
+ object btnCoefsPolar: TSpeedButton
+ Left = 112
+ Top = 16
+ Width = 105
+ Height = 20
+ Hint = 'Show vectors in polar coordinates'
+ GroupIndex = 1
+ Caption = 'Polar (deg)'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnCoefsModeClick
+ end
+ object btnCoefsRect: TSpeedButton
+ Left = 10
+ Top = 16
+ Width = 103
+ Height = 20
+ Hint = 'Show vectors in rectangular (cartesian) coordinates'
+ GroupIndex = 1
+ Down = True
+ Caption = 'Rectangular'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnCoefsModeClick
+ end
+ end
+ object GroupBox8: TGroupBox
+ Left = 8
+ Top = 126
+ Width = 225
+ Height = 118
+ Caption = 'Post-affine coefficients'
+ TabOrder = 2
+ object btnXpost: TSpeedButton
+ Left = 8
+ Top = 17
+ Width = 25
+ Height = 21
+ Hint = 'Reset vector X'
+ Caption = 'X'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnXpostClick
+ end
+ object btnYpost: TSpeedButton
+ Left = 8
+ Top = 41
+ Width = 25
+ Height = 21
+ Hint = 'Reset vector Y'
+ Caption = 'Y'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnYpostClick
+ end
+ object btnOpost: TSpeedButton
+ Left = 8
+ Top = 65
+ Width = 25
+ Height = 21
+ Hint = 'Reset vector O'
+ Caption = 'O'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnOpostClick
+ end
+ object btnResetPostCoefs: TSpeedButton
+ Left = 8
+ Top = 89
+ Width = 213
+ Height = 22
+ Hint = 'Reset post-transform vectors to defaults'
+ Caption = 'Reset post-transform'
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnResetPostCoefsClick
+ end
+ object txtPost00: TEdit
+ Tag = 1
+ Left = 36
+ Top = 17
+ Width = 70
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = PostCoefValidate
+ OnKeyPress = PostCoefKeypress
+ end
+ object txtPost01: TEdit
+ Left = 128
+ Top = 17
+ Width = 70
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = PostCoefValidate
+ OnKeyPress = PostCoefKeypress
+ end
+ object txtPost10: TEdit
+ Left = 36
+ Top = 41
+ Width = 70
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = PostCoefValidate
+ OnKeyPress = PostCoefKeypress
+ end
+ object txtPost11: TEdit
+ Tag = 1
+ Left = 128
+ Top = 41
+ Width = 70
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = PostCoefValidate
+ OnKeyPress = PostCoefKeypress
+ end
+ object txtPost20: TEdit
+ Left = 36
+ Top = 65
+ Width = 70
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 4
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = PostCoefValidate
+ OnKeyPress = PostCoefKeypress
+ end
+ object txtPost21: TEdit
+ Left = 128
+ Top = 65
+ Width = 70
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ Text = '0'
+ OnDblClick = AffineCoefsDblClick
+ OnExit = PostCoefValidate
+ OnKeyPress = PostCoefKeypress
+ end
+ object spinPost00: TSpinButton
+ Left = 106
+ Top = 16
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtPost00
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 6
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinPost01: TSpinButton
+ Left = 198
+ Top = 16
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtPost01
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 7
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinPost10: TSpinButton
+ Left = 106
+ Top = 40
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtPost10
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 8
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinPost11: TSpinButton
+ Left = 198
+ Top = 40
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtPost11
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 9
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinPost20: TSpinButton
+ Left = 106
+ Top = 64
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtPost20
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 10
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ object spinPost21: TSpinButton
+ Left = 198
+ Top = 64
+ Width = 15
+ Height = 23
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtPost21
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 11
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = SpinButtonDownClick
+ OnUpClick = SpinButtonUpClick
+ end
+ end
+ object chkAutoZscale: TCheckBox
+ Left = 8
+ Top = 293
+ Width = 275
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Auto calculate pre_zscale'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ OnClick = chkAutoZscaleClick
+ end
+ object btSwapCoefs: TButton
+ Left = 8
+ Top = 318
+ Width = 110
+ Height = 22
+ Caption = 'Swap matrices'
+ ImageIndex = 36
+ ImageMargins.Left = 2
+ Images = EditorTB
+ TabOrder = 4
+ OnClick = btSwapCoefsClick
+ end
+ object btConjugate: TButton
+ Left = 124
+ Top = 318
+ Width = 110
+ Height = 22
+ Caption = 'Conjugate '
+ ImageMargins.Left = 2
+ TabOrder = 5
+ OnClick = btConjugateClick
+ end
+ end
+ end
+ object tabColors: TTabSheet
+ Caption = 'Colors'
+ ImageIndex = 3
+ object ScrollBox2: TScrollBox
+ Left = 0
+ Top = 0
+ Width = 290
+ Height = 367
+ HorzScrollBar.Visible = False
+ Align = alClient
+ BorderStyle = bsNone
+ TabOrder = 0
+ OnResize = ScrollBox2Resize
+ DesignSize = (
+ 290
+ 367)
+ object GroupBox1: TGroupBox
+ Left = 2
+ Top = 2
+ Width = 285
+ Height = 199
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Transform color'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 0
+ DesignSize = (
+ 285
+ 199)
+ object pnlSymmetry: TPanel
+ Left = 8
+ Top = 78
+ Width = 112
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = ' Color speed:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 7
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlXFormColor: TPanel
+ Left = 8
+ Top = 16
+ Width = 73
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ object shColor: TShape
+ Left = -1
+ Top = -1
+ Width = 75
+ Height = 25
+ OnMouseDown = shColorMouseDown
+ OnMouseMove = shColorMouseMove
+ OnMouseUp = shColorMouseUp
+ end
+ end
+ object txtXFormColor: TEdit
+ Left = 80
+ Top = 16
+ Width = 196
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnExit = txtXFormColorExit
+ OnKeyPress = txtXFormColorKeyPress
+ end
+ object txtSymmetry: TEdit
+ Left = 119
+ Top = 78
+ Width = 157
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ Text = '0'
+ OnExit = txtSymmetrySet
+ OnKeyPress = txtSymmetrKeyPress
+ end
+ object ColorBar: TPanel
+ Left = 8
+ Top = 40
+ Width = 269
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clAppWorkSpace
+ TabOrder = 8
+ object ColorBarPicture: TImage
+ Left = 1
+ Top = 1
+ Width = 263
+ Height = 11
+ Align = alClient
+ Stretch = True
+ OnMouseUp = ColorBarMouseUp
+ ExplicitWidth = 267
+ end
+ end
+ object scrlXFormColor: TScrollBar
+ Left = 9
+ Top = 54
+ Width = 267
+ Height = 15
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 10
+ Max = 1000
+ PageSize = 0
+ TabOrder = 1
+ OnChange = scrlXFormColorChange
+ OnScroll = scrlXFormColorScroll
+ end
+ object pnlOpacity: TPanel
+ Left = 8
+ Top = 108
+ Width = 112
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = ' Opacity:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtOpacity: TEdit
+ Left = 119
+ Top = 108
+ Width = 157
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '1'
+ OnExit = txtOpacitySet
+ OnKeyPress = txtOpacityKeyPress
+ end
+ object chkXformSolo: TCheckBox
+ Left = 8
+ Top = 176
+ Width = 268
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Solo'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ OnClick = chkXformSoloClick
+ end
+ object pnlDC: TPanel
+ Left = 8
+ Top = 140
+ Width = 112
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = ' Direct color:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 10
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtDC: TEdit
+ Left = 119
+ Top = 140
+ Width = 157
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 4
+ Text = '1'
+ OnExit = txtDCSet
+ OnKeyPress = txtDCKeyPress
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 2
+ Top = 207
+ Width = 285
+ Height = 145
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Variation preview'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ DesignSize = (
+ 285
+ 145)
+ object Label1: TLabel
+ Left = 8
+ Top = 24
+ Width = 31
+ Height = 13
+ Hint = 'Area to which variations are applied'
+ Caption = 'Range'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ end
+ object Label2: TLabel
+ Left = 8
+ Top = 56
+ Width = 29
+ Height = 13
+ Hint = 'Number of recursive calculations'
+ Caption = 'Depth'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ end
+ object Label3: TLabel
+ Left = 8
+ Top = 88
+ Width = 36
+ Height = 13
+ Hint = 'Frequency of the grid points'
+ Caption = 'Density'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ end
+ object lblGridType: TLabel
+ Left = 8
+ Top = 120
+ Width = 46
+ Height = 13
+ Hint = 'Coordinate system for the grid'
+ Caption = 'Grid Type'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ end
+ object trkVarPreviewDensity: TTrackBar
+ Left = 98
+ Top = 88
+ Width = 185
+ Height = 25
+ Anchors = [akLeft, akTop, akRight]
+ Max = 5
+ Min = 1
+ ParentShowHint = False
+ PageSize = 1
+ Position = 2
+ ShowHint = True
+ TabOrder = 2
+ ThumbLength = 15
+ OnChange = trkVarPreviewDensityChange
+ end
+ object trkVarPreviewRange: TTrackBar
+ Left = 98
+ Top = 24
+ Width = 185
+ Height = 25
+ Anchors = [akLeft, akTop, akRight]
+ Min = 1
+ ParentShowHint = False
+ PageSize = 1
+ Position = 2
+ ShowHint = True
+ TabOrder = 0
+ ThumbLength = 15
+ OnChange = trkVarPreviewRangeChange
+ end
+ object trkVarPreviewDepth: TTrackBar
+ Left = 98
+ Top = 56
+ Width = 185
+ Height = 25
+ Anchors = [akLeft, akTop, akRight]
+ Max = 5
+ Min = 1
+ ParentShowHint = False
+ PageSize = 1
+ Position = 1
+ ShowHint = True
+ TabOrder = 1
+ ThumbLength = 15
+ OnChange = trkVarPreviewDepthChange
+ end
+ object GridComboBox: TComboBox
+ Left = 101
+ Top = 116
+ Width = 120
+ Height = 21
+ Style = csDropDownList
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ItemIndex = 0
+ ParentFont = False
+ TabOrder = 3
+ Text = 'Rectangular'
+ OnChange = GridComboBoxChange
+ Items.Strings = (
+ 'Rectangular'
+ 'Polar'
+ 'Bipolar'
+ 'Elliptic')
+ end
+ end
+ end
+ end
+ object tabVariations: TTabSheet
+ Caption = 'Variations'
+ DesignSize = (
+ 290
+ 367)
+ object Label4: TLabel
+ Left = 2
+ Top = 8
+ Width = 37
+ Height = 13
+ Caption = 'Search:'
+ end
+ object btnResetSearch: TSpeedButton
+ Left = 268
+ Top = 7
+ Width = 17
+ Height = 17
+ Caption = 'r'
+ Flat = True
+ Font.Charset = SYMBOL_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Marlett'
+ Font.Style = []
+ ParentFont = False
+ OnClick = btnResetSearchClick
+ end
+ object VEVars: TValueListEditor
+ Left = 0
+ Top = 32
+ Width = 290
+ Height = 280
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ DefaultColWidth = 90
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ScrollBars = ssVertical
+ TabOrder = 1
+ TitleCaptions.Strings = (
+ 'Variation'
+ 'Value')
+ OnDblClick = VEVarsDblClick
+ OnDrawCell = VEVarsDrawCell
+ OnExit = VEVarsChange
+ OnKeyPress = VEVarsKeyPress
+ OnMouseDown = VEVarsMouseDown
+ OnMouseMove = VEVarsMouseMove
+ OnMouseUp = VEVarsMouseUp
+ OnValidate = VEVarsValidate
+ ColWidths = (
+ 90
+ 194)
+ end
+ object bClear: TBitBtn
+ Left = 0
+ Top = 337
+ Width = 140
+ Height = 27
+ Anchors = [akLeft, akBottom]
+ Caption = 'Clear'
+ TabOrder = 2
+ OnClick = bClearClick
+ end
+ object txtSearchBox: TEdit
+ Left = 45
+ Top = 5
+ Width = 217
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ OnChange = chkCollapseVariationsClick
+ end
+ object btnVarOrder: TBitBtn
+ Left = 145
+ Top = 337
+ Width = 140
+ Height = 27
+ Anchors = [akRight, akBottom]
+ Caption = 'Edit order...'
+ Glyph.Data = {
+ 0E060000424D0E06000000000000360000002800000016000000160000000100
+ 180000000000D8050000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFF8F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFFD9C0FF7920FF6B09FF791FFFDCC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 0000FFFEFEFF7920FFB17EFFC299FFB584FF8332FFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFF0000FFFCFAFF771DFF934CFF751AFFCDACFF781FFFFFFF8383834F4F
+ 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F83
+ 8383FFFFFFFFFFFF0000FFFFFFFFD3B5FF7D26FFC69FFFAA71FF9D5BFFFFFF63
+ 6363FCFCFCFCFCFCFCFCFCFCFCFCF9F9F9F3F3F3EDEDEDE6E6E6E0E0E0E0E0E0
+ E0E0E0636363FFFFFFFFFFFF0000FFFFFFFF9148FFA568FF893BFFCBA9FF9752
+ FFFFFF9F9F9F7777777777777777777777777777777777777777777777777777
+ 777777777777779F9F9FFFFFFFFFFFFF0000FFFFFFFFAA71FFB17DFFCCA9FFB4
+ 81FFB27FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFF1E8FFB787FF
+ A568FFB98AFFF5EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFF8F4
+ FFD9BFFFD9BFFFDAC2FFFBF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFD
+ FCFF8B3EFF6600FF6600FF6600FF934BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 0000FFFDFBFF7215FFD2B3FFB585FFA365FF924BFFFFFF8383834F4F4F4F4F4F
+ 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F838383FFFF
+ FFFFFFFF0000FFFFFFFFB584FF924AFFB98AFF7B25FFC198FFFFFF636363FCFC
+ FCFCFCFCFCFCFCFCFCFCF9F9F9F3F3F3EDEDEDE6E6E6E0E0E0E0E0E0E0E0E063
+ 6363FFFFFFFFFFFF0000FFFFFFFF8D41FF8D41FF9D5BFFB482FFA76CFFFFFF9F
+ 9F9F777777777777777777777777777777777777777777777777777777777777
+ 7777779F9F9FFFFFFFFFFFFF0000FFFFFFFFAB72FFBD91FFC49CFFB07BFFC49C
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFF6F0FFC49CFFB685FFCD
+ ACFFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFAF7FFD9BFFF
+ D9BFFFDBC3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF9046
+ FF6600FF6600FF6600FFAA71FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF
+ FFFF8635FFA569FFCFAFFF9853FFA061FFFFFF8383834F4F4F4F4F4F4F4F4F4F
+ 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F838383FFFFFFFFFFFF
+ 0000FFFFFFFFD2B3FF7113FFC29AFF7E28FFFDFBFFFFFF636363FCFCFCFCFCFC
+ FCFCFCFCFCFCF9F9F9F3F3F3EDEDEDE6E6E6E0E0E0E0E0E0E0E0E0636363FFFF
+ FFFFFFFF0000FFFFFFFF8635FF8433FFC59EFF8D40FFFFFFFFFFFF9F9F9F7777
+ 777777777777777777777777777777777777777777777777777777777777779F
+ 9F9FFFFFFFFFFFFF0000FFFFFFFFA66AFFAE78FFC7A2FF9A57FFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFF9F6FFC69FFFAF79FFEBDDFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000}
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ OnClick = btnVarOrderClick
+ end
+ object cbCollapseVariations: TComboBox
+ Left = 1
+ Top = 315
+ Width = 283
+ Height = 21
+ Style = csDropDownList
+ Anchors = [akLeft, akRight, akBottom]
+ ItemIndex = 0
+ TabOrder = 4
+ Text = 'Show all variations'
+ OnChange = chkCollapseVariationsClick
+ Items.Strings = (
+ 'Show all variations'
+ 'Hide unused variations'
+ 'Favourite variations')
+ end
+ end
+ object TabVariables: TTabSheet
+ Caption = 'Variables'
+ ImageIndex = 4
+ DesignSize = (
+ 290
+ 367)
+ object vleVariables: TValueListEditor
+ Left = 0
+ Top = 0
+ Width = 290
+ Height = 312
+ Align = alTop
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ ScrollBars = ssVertical
+ TabOrder = 0
+ TitleCaptions.Strings = (
+ 'Variable'
+ 'Value')
+ OnDblClick = VEVarsDblClick
+ OnExit = vleVariablesExit
+ OnKeyPress = vleVariablesKeyPress
+ OnMouseDown = VEVarsMouseDown
+ OnMouseMove = VEVarsMouseMove
+ OnMouseUp = VEVarsMouseUp
+ OnValidate = vleVariablesValidate
+ ColWidths = (
+ 93
+ 191)
+ end
+ object chkCollapseVariables: TCheckBox
+ Left = 0
+ Top = 319
+ Width = 291
+ Height = 17
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = 'Show all variables'
+ TabOrder = 1
+ OnClick = chkCollapseVariablesClick
+ end
+ object btResetParams: TButton
+ Left = 0
+ Top = 340
+ Width = 290
+ Height = 27
+ Align = alBottom
+ Caption = 'Reset'
+ TabOrder = 2
+ OnClick = btResetparamsClick
+ end
+ end
+ object TabChaos: TTabSheet
+ Caption = 'Xaos'
+ ImageIndex = -1
+ DesignSize = (
+ 290
+ 367)
+ object vleChaos: TValueListEditor
+ Left = 0
+ Top = 0
+ Width = 290
+ Height = 320
+ Align = alCustom
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ PopupMenu = ChaosPopup
+ ScrollBars = ssVertical
+ TabOrder = 0
+ TitleCaptions.Strings = (
+ 'Path'
+ 'Weight modifier')
+ OnDblClick = VEVarsDblClick
+ OnDrawCell = VleChaosDrawCell
+ OnExit = vleChaosExit
+ OnKeyPress = vleChaosKeyPress
+ OnMouseDown = VEVarsMouseDown
+ OnMouseMove = VEVarsMouseMove
+ OnMouseUp = VEVarsMouseUp
+ OnValidate = vleChaosValidate
+ ColWidths = (
+ 93
+ 191)
+ end
+ object optFrom: TRadioButton
+ Left = 0
+ Top = 343
+ Width = 291
+ Height = 17
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = 'View links as "from"'
+ TabOrder = 2
+ TabStop = True
+ OnClick = mnuChaosViewFromClick
+ end
+ object optTo: TRadioButton
+ Left = 0
+ Top = 327
+ Width = 291
+ Height = 17
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = 'View links as "to"'
+ Checked = True
+ TabOrder = 1
+ TabStop = True
+ OnClick = mnuChaosViewToClick
+ end
+ object btResetChaos: TButton
+ Left = 263
+ Top = 326
+ Width = 22
+ Height = 20
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = '1'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -15
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ImageAlignment = iaCenter
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ OnClick = mnuChaosSetAllClick
+ end
+ object btClearChaos: TButton
+ Left = 233
+ Top = 326
+ Width = 22
+ Height = 20
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = '0'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -15
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ImageAlignment = iaCenter
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ OnClick = mnuChaosClearAllClick
+ end
+ object btChaos: TButton
+ Left = 233
+ Top = 347
+ Width = 52
+ Height = 19
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = 'More...'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ImageAlignment = iaCenter
+ ParentFont = False
+ TabOrder = 5
+ OnClick = btChaosClick
+ end
+ end
+ end
+ object pnlWeight: TPanel
+ Left = 8
+ Top = 47
+ Width = 121
+ Height = 21
+ Cursor = crHandPoint
+ Hint = 'Click and drag to change value'
+ BevelOuter = bvLowered
+ Caption = ' Weight:'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object Panel1: TPanel
+ Left = 8
+ Top = 6
+ Width = 121
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = ' Transform:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object Panel2: TPanel
+ Left = 8
+ Top = 26
+ Width = 121
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = ' Name:'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ end
+ object txtName: TEdit
+ Left = 128
+ Top = 26
+ Width = 163
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 1
+ OnExit = txtNameExit
+ OnKeyPress = txtNameKeyPress
+ end
+ object txtP: TEdit
+ Left = 128
+ Top = 47
+ Width = 163
+ Height = 21
+ Hint = '"Weight" is the probability of this transform to be applied'
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 2
+ Text = '0'
+ OnExit = txtPExit
+ OnKeyPress = txtPKeyPress
+ end
+ object cbTransforms: TComboBox
+ Left = 128
+ Top = 6
+ Width = 163
+ Height = 19
+ BevelEdges = []
+ BevelOuter = bvNone
+ Style = csOwnerDrawFixed
+ Anchors = [akLeft, akTop, akRight]
+ Color = clBlack
+ Ctl3D = False
+ DropDownCount = 12
+ ItemHeight = 13
+ ParentCtl3D = False
+ TabOrder = 0
+ OnChange = cbTransformsChange
+ OnDrawItem = cbTransformsDrawItem
+ end
+ end
+ object PrevPnl: TPanel
+ Left = 0
+ Top = 0
+ Width = 300
+ Height = 177
+ Align = alTop
+ BevelOuter = bvLowered
+ Color = clAppWorkSpace
+ TabOrder = 1
+ Visible = False
+ object PreviewImage: TImage
+ Left = 1
+ Top = 1
+ Width = 298
+ Height = 175
+ PopupMenu = QualityPopup
+ Proportional = True
+ end
+ end
+ end
+ end
+ object EditPopup: TPopupMenu
+ Images = EditorTB
+ Left = 392
+ Top = 112
+ object mnuUndo: TMenuItem
+ Caption = 'Undo'
+ Enabled = False
+ Hint = 'Undo'
+ ImageIndex = 4
+ ShortCut = 16474
+ OnClick = mnuUndoClick
+ end
+ object mnuRedo: TMenuItem
+ Caption = 'Redo'
+ Enabled = False
+ Hint = 'Redo'
+ ImageIndex = 5
+ ShortCut = 16473
+ OnClick = mnuRedoClick
+ end
+ object N4: TMenuItem
+ Caption = '-'
+ end
+ object mnuAdd: TMenuItem
+ Caption = 'Add transform'
+ Hint = 'Add new triangle'
+ ImageIndex = 1
+ OnClick = mnuAddClick
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object mnuAutoZoom: TMenuItem
+ Caption = 'Auto Zoom'
+ Hint = 'Zoom to fit all triangles'
+ ImageIndex = 19
+ OnClick = mnuAutoZoomClick
+ end
+ object mnuShowVarPreview: TMenuItem
+ Caption = 'Show Variation Preview'
+ Hint = 'Show/hide variation preview'
+ ImageIndex = 14
+ OnClick = tbVarPreviewClick
+ end
+ object N8: TMenuItem
+ Caption = '-'
+ end
+ object mnuSelectmode: TMenuItem
+ Caption = 'Select mode'
+ ImageIndex = 6
+ OnClick = tbSelectClick
+ end
+ object mnuExtendedEdit: TMenuItem
+ Caption = 'Extended edit mode'
+ Hint = 'Toggle extended edit mode'
+ ImageIndex = 25
+ OnClick = tbExtendedEditClick
+ end
+ object mnuAxisLock: TMenuItem
+ Caption = 'Lock transform axes'
+ ImageIndex = 16
+ OnClick = tbAxisLockClick
+ end
+ object oggleposttriangleediting1: TMenuItem
+ Caption = 'Toggle post-triangle editing'
+ ImageIndex = 29
+ OnClick = tbPostXswapClick
+ end
+ object N5: TMenuItem
+ Caption = '-'
+ end
+ object mnuFlipAllV: TMenuItem
+ Caption = 'Flip All Vertical '
+ Hint = 'Flip all triangles vertical'
+ ImageIndex = 13
+ OnClick = mnuFlipAllVClick
+ end
+ object mnuFlipAllH: TMenuItem
+ Caption = 'Flip All Horizontal'
+ Hint = 'Flip all triangles horizontal'
+ ImageIndex = 12
+ OnClick = mnuFlipAllHClick
+ end
+ object mnuFlipAllLine: TMenuItem
+ Caption = 'Flip All Line'
+ ImageIndex = 35
+ OnClick = mnuFlipAllLineClick
+ end
+ object N11: TMenuItem
+ Caption = '-'
+ end
+ object mnuEHighQuality: TMenuItem
+ Caption = 'High quality'
+ RadioItem = True
+ OnClick = mnuHighQualityClick
+ end
+ object mnuEMediumQuality: TMenuItem
+ Caption = 'Medium quality'
+ Checked = True
+ RadioItem = True
+ OnClick = mnuMediumQualityClick
+ end
+ object mnuELowQuality: TMenuItem
+ Caption = 'Low quality'
+ RadioItem = True
+ OnClick = mnuLowQualityClick
+ end
+ end
+ object QualityPopup: TPopupMenu
+ Left = 384
+ Top = 40
+ object mnuLowQuality: TMenuItem
+ Caption = 'Low Quality'
+ RadioItem = True
+ OnClick = mnuLowQualityClick
+ end
+ object mnuMediumQuality: TMenuItem
+ Caption = 'Medium Quality'
+ Checked = True
+ RadioItem = True
+ OnClick = mnuMediumQualityClick
+ end
+ object mnuHighQuality: TMenuItem
+ Caption = 'High Quality'
+ RadioItem = True
+ OnClick = mnuHighQualityClick
+ end
+ object N3: TMenuItem
+ Caption = '-'
+ end
+ object mnuResetLoc: TMenuItem
+ Caption = 'Auto reset location'
+ OnClick = mnuResetLocClick
+ end
+ end
+ object EditorTB: TImageList
+ Left = 313
+ Top = 40
+ Bitmap = {
+ 494C01012B003000040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 000000000000360000002800000040000000B0000000010020000000000000B0
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000050101002A0E0D00250D0B00250D
+ 0B00260D0B0026090700000000007B7B7B00E6E6E60000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000002A0F0C00F1554A00DE4E4400DF4E
+ 4400F653480057181400D7DEDF001A1A1A0000000000D8D8D800000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000250D0B00DE4E4400CD483F00D948
+ 3E003A020000D6E1E20000000000000000000000000000000000E6E6E6000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000250D0B00DF4E4500D8483E004C1C
+ 1800CAD8D900000000000000000000000000F4F4F40010101000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF00D7D7D7000000000000000000D7D7D700FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000260D0B00F65348003A020000CAD8
+ D900000000000000000000000000000000000000000084848400000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF009191
+ 9100C3C3C3000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000002609060056171300D6E1E2000000
+ 0000000000000000000000000000000000000000000000000000000000006D6D
+ 6D00000000000000000000000000000000000000000000000000000000009191
+ 9100FFFFFF00FFFFFF000000000000000000FFFFFF00FFFFFF00FFFFFF000000
+ 0000FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000052525200000000000000
+ 00000000000000000000000000000000000000000000DAE1E100000000000000
+ 000000000000000000000000000000000000F7F7F7000A0A0A005B5B5B000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000FFFFFF00FFFFFF009191910000000000C3C3C300FFFFFF00FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000005252520000000000000000000000
+ 000000000000000000000000000000000000F1F1F10099999900F7F7F7000000
+ 00000000000000000000000000000000000000000000E9E9E900000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000091919100FFFFFF009191910000000000C3C3C300FFFFFF00FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000525252000000000000000000000000000000
+ 000000000000000000000000000000000000929292000000000000000000E9E9
+ E900DFDFDF00C2C3B600C5C6B700C5C6B700C5C6B700CACABC00C4C4C100CECE
+ CE00000000000000000000000000000000000000000000000000000000000000
+ 000000000000C3C3C300C3C3C3000000000091919100FFFFFF00FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000052525200000000000000000000000000000000000000
+ 000000000000000000000000000000000000626262000000000078787800BBBB
+ BB004C4D40000000620000006E0000006C0000006D000000850000000000B3B4
+ B100000000000000000000000000000000000000000000000000D7D7D7000000
+ 00000000000091919100C3C3C3000000000091919100FFFFFF00FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000DADADA0000000000F1F1F1000000
+ 0000505139001B11EF00261DFD00261DFB00251CFF0000006F00C9C9C3000000
+ 000000000000000000000000000000000000000000000000000091919100FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000D0D0D00000000000F5F5F5000000
+ 0000505139001910E300241CEF00261DFF0009066400CDCEB800000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000C8C8C800000000003F3F3F009F9F
+ 9F005D5E46001910E400261DFF0000005E007A7A6A00393A3C00000000000000
+ 000000000000E8E8E8009C9C9C00000000000000000000000000000000009191
+ 9100D7D7D700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007F7F7F00000000007373
+ 730060614B00160DF00004006700D1D2BF00DBDBDB0000000000000000004B4B
+ 4B00F8F8F800C8C8C80000000000ADADAD000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00004F50460000005900C3C4AD000000000000000000BDBDBD00666666000000
+ 0000000000000000000000000000424242000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00003D3D3D00C9C9BF000000000000000000000000000000000000000000C8C8
+ C800D4D4D400AFAFAF0043434300000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000414140003B3C3B00363636003132
+ 31002C2D2C0028282800232423001F1F1F001B1B1A0017171600121312000F0F
+ 0F000C0B0B000808080005060500000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000775B
+ 54B8FAF9F9060000000000000000000000004C4C4C00454445003E3D3E00CC48
+ 3F0031313100CC483F0024252500CC483F00191A1900CC483F000F101000CC48
+ 3F0007070700CC483F000000000000000000404140003B3B3B00363636003132
+ 31002C2D2C0028272800232323001E1F1F001B1B1A0017171700121213000F0F
+ 0F000B0B0B000808080006050500000000002C2C2B0025262500CC483F001A1A
+ 1A00CC483F0010101000CC483F0008070700CC483F0000000000CC483F000000
+ 0000CC483F0000000000CC483F00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000D7CECC384D26
+ 1DF75F3E37D90000000000000000000000004C4C4C00444545003D3E3E00E8A2
+ 0000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000E8A2
+ 0000E8A20000CC483F00CC483F0000000000CC483F00E8A20000E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000E8A2
+ 0000E8A20000CC483F00CC483F00000000002B2B2C0025252500E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000E8A2
+ 0000E8A20000CC483F00CC483F0000000000955744FF905340FF8A4F3CFF844A
+ 38FF7F4535FF976A5FC6DBCECA40A68C8590755044D8572C20FF6C4135FF9B6F
+ 62FF7C5246FF674840CF00000000000000004B4B4B00454445003D3E3D003737
+ 3700E8A20000E8A20000E8A200001E1E1E00E8A20000E8A20000E8A20000E8A2
+ 0000CC483F00CC483F00000000000000000041414000E8A20000E8A20000E8A2
+ 0000E8A20000E8A20000E8A200001F1F1F00E8A20000E8A20000E8A20000E8A2
+ 0000CC483F00CC483F0005050500000000002C2B2C0025262500E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A2000004030300E8A20000E8A20000E8A2
+ 0000CC483F00CC483F0000000000000000009C5D49FFC99988FFC79685FFC593
+ 82FFC3907FFFA97362FF784536FF976A5DFFBD9384FFCDA193FFCB9F91FFCA9C
+ 8FFFC99A8DFF7D5247FF70524BC400000000CC483F00E8A200003E3D3E003737
+ 370030303100E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000CC48
+ 3F00CC483F00000000000000000000000000CC483F00E8A20000E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000CC48
+ 3F00CC483F000000000000000000000000002B2B2C0025252600E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000E8A20000CC48
+ 3F00CC483F00000000000000000000000000A2634EFFCB9D8DFFCA9A8AFFC898
+ 86FFC69483FFB38070FF8D5D4DFFD1A99BFFCEA597FFCEA497FFCDA295FFCBA0
+ 92FFCB9E90FF81564BFF705048C9000000004C4C4C00E8A20000E8A200003737
+ 3700313030002A2A2A00E8A200001E1F1E00E8A20000E8A20000CC483F00CC48
+ 3F000000000000000000000000000000000040414100E8A20000E8A20000E8A2
+ 0000E8A20000E8A20000E8A200001F1F1E00E8A20000E8A20000CC483F00CC48
+ 3F00000000000000000005060500000000002B2C2C0025262500E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A2000003030300E8A20000CC483F00CC48
+ 3F0000000000000000000000000000000000A86853FFA3644FFF9E5F4BFF9A5E
+ 49FFAC7562FF9B6655FFB58B7BFFD3AC9FFFB68C7CFF8A5B4EFF66372AFF8D62
+ 53FF895E51FF735047D10000000000000000CC483F00E8A20000E8A20000E8A2
+ 0000313031002A2A2A0025252400E8A20000E8A20000CC483F00CC483F000000
+ 000000000000000000000000000000000000CC483F00E8A20000E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A20000E8A20000CC483F00CC483F000000
+ 0000000000000000000000000000000000002C2B2B0026262500E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A20000E8A20000CC483F00CC483F000000
+ 000000000000000000000000000000000000000000000000000000000000FAF7
+ F60CC9A99F858D5643FFD2AE9FFFD3AFA1FF7A4838FCD5C7C24B000000006839
+ 2BFD764F44DC0000000000000000000000004B4B4B00E8A20000E8A20000E8A2
+ 0000E8A200002A2A2B00252524001F1F1E00CC483F00CC483F00000000000000
+ 00000000000000000000000000000000000041404100E8A20000E8A20000E8A2
+ 0000E8A20000E8A20000E8A200001F1F1F00CC483F00CC483F00000000000000
+ 0000000000000000000005060500000000002C2B2C0026252500E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000E8A2000003030400CC483F00000000000000
+ 000000000000000000000000000000000000000000000000000000000000FAF7
+ F60CC9A99F85B28472FFD9B7A9FFB58978FF864F3CFCDAC9C44B000000007240
+ 31FD87574ADC000000000000000000000000CC483F00E8A200003D3D3E00E8A2
+ 000031313000E8A20000242524001F1F1F00191919000000000010100F000000
+ 000007070700000000000000000000000000CC483F00E8A2000036363600E8A2
+ 00002C2C2D00E8A2000023242300CC483F001B1B1A0000000000131312000000
+ 00000B0B0C000000000000000000000000002C2C2C0026252600E8A200001A1A
+ 1A00E8A2000010101000E8A2000007070700CC483F0000000000000000000000
+ 000000000000000000000000000000000000AF7056FFAC6C54FFA86951FFA66A
+ 55FFBB8D7AFFD6B5A6FFDBBAACFF9B6655FFB07D6BFF9D6553FF854B39FF9C64
+ 55FF986151FF8E5F52D100000000000000004C4C4C00E8A20000E8A20000E8A2
+ 0000E8A20000CC483F00CC483F001F1E1F001919190014151400000000000000
+ 00000000000000000000000000000000000041414100E8A20000E8A20000E8A2
+ 0000E8A20000CC483F00CC483F001E1E1F000000000000000000000000000000
+ 0000000000000000000005050500000000002C2C2C0025262600E8A20000E8A2
+ 0000E8A20000E8A20000E8A20000CC483F000303030000000000000000000000
+ 000000000000000000000000000000000000B37158FFE2C6B8FFE1C5B6FFE0C4
+ B5FFDFC1B3FFDEC0B2FFCEAA99FF9C6350FFCC9E8DFFCA9C8BFFC99988FFC796
+ 85FFC59382FF996353FF93665AC900000000CC483F00E8A20000E8A20000E8A2
+ 0000CC483F00CC483F00000000000000000019191900141414000F0F10000000
+ 000000000000000000000000000000000000CC483F00E8A20000E8A20000E8A2
+ 0000CC483F00CC483F0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000002C2B2B0025262500E8A20000E8A2
+ 0000E8A20000E8A20000CC483F00CC483F000000000000000000000000000000
+ 000000000000000000000000000000000000B47259FFE2C7B9FFE2C6B8FFE1C5
+ B7FFE0C3B6FFCAA190FFAE7864FFAC7560FFC89A88FFCEA18FFFCB9D8DFFCA9A
+ 8AFFC89886FF9E6757FF9B6E62C4000000004B4C4C00E8A20000E8A20000CC48
+ 3F00CC483F0000000000000000001F1F1E0000000000141514000F100F000B0B
+ 0B000000000000000000000000000000000041414100E8A20000E8A20000CC48
+ 3F00CC483F0000000000000000001E1F1E000000000000000000000000000000
+ 0000000000000000000006050600000000002C2B2C0026262500E8A20000E8A2
+ 0000E8A20000CC483F00CC483F00000000000303040000000000000000000000
+ 000000000000000000000000000000000000B47259FFB47259FFB47259FFB171
+ 57FFAE6F55FFBD8C79C6E8D9D340CEAA9E90B17C6AD89F604CFFA56B57FFB784
+ 72FFA7715EFF9F6F5FCF0000000000000000CC483F00E8A20000CC483F00CC48
+ 3F000000000000000000000000000000000000000000000000000F0F10000B0B
+ 0B0007070700000000000000000000000000CC483F00E8A20000CC483F00CC48
+ 3F00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000002C2C2B0026262600E8A20000E8A2
+ 0000CC483F00CC483F0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000EADCD7389E61
+ 4EF7A4705FD90000000000000000000000004C4C4B00CC483F00CC483F000000
+ 00000000000000000000000000001E1F1F000000000000000000000000000B0B
+ 0B000707070003030300000000000000000040414100CC483F00CC483F000000
+ 00000000000000000000000000001F1E1F000000000000000000000000000000
+ 0000000000000000000005060500000000002B2C2C0025262600E8A20000CC48
+ 3F00CC483F000000000000000000000000000404030000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000BB8D
+ 7FB8FCFBFA06000000000000000000000000CC483F00CC483F00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000007060700030403000000000000000000CC483F00CC483F00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000002C2C2C0026262500CC483F00CC48
+ 3F00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000004B4C4B00000000003E3D3D000000
+ 0000303031000000000024252500000000001A191A000000000010100F000000
+ 0000070706000304040000000000000000004041410000000000363636000000
+ 00002D2C2D000000000023232300000000001B1B1B0000000000121212000000
+ 00000B0B0B000000000005050500000000002C2C2C0025252500CC483F001A1A
+ 1A00000000001010100000000000070707000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000005F6E2C006777520063792F00FFE9
+ 39007488410068785200829D4C00FFB63D007C99470066765100677C3700FFF3
+ 3B005B72290064734F0055682600000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000A449A3000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000707070007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000003D3324003B332300FFED3A00FFED
+ 3A006B6E48007A855500FFB73E00FFB93E006F774D005D5F3E00FFF03B00FFF0
+ 3B00362D1F003B2F210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000A449A300A449A3000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007070700070707000707070007070700070707000707070007070
+ 70007070700070707000707070000000000039322200FFEF3A00FFF03B00FFED
+ 3A0066744900FFB83E00FFB63D00FFB93E006B754B00FFF03B00FFF03B00FFEF
+ 3A0032271C000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000A449A300A449A300000000000000000000000000000000000000
+ 0000000000004D4D4D000000000000000000A7A7A70000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007070700070707000FEFEFE00EDF5E900E3EFDC00D9EA
+ D100D9EAD1007070700070707000000000003C382500504E3300525738006471
+ 4700FFB73E00FFB63D00FFB93E00FFB73E00758152005F67420053503400372E
+ 2000000000000000000000000000C6C6C6000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000A449A300A449A30000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000D9D9
+ D900686868000000000000000000000000000000000070707000707070007070
+ 70007070700070707000707070007070700070707000FCFDFB00EDF5E900E3EF
+ DC00DFEDD80070707000707070000000000057533700667651006C794D00FFB8
+ 3E00FFB43D00FFB63D00FFB73E00FFB83E006C7A4D0066765100535034000000
+ 00000000000000000000C6C6C600676161000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000A449A300000000000000000000000000000000000000000000000000BDBD
+ BD00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000707070007070
+ 7000707070007070700070707000707070007070700070707000F8FBF700EFF6
+ EB00E5F0DF007070700070707000000000005A5E3D005B674100FFB83E00FFB8
+ 3E00FFB83E00FFBA3E00FFB73E00FFB53D0071824F00626A4400000000000000
+ 000000000000B4B3B30088818100FFFBFB000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000E1E1E100000000008C8C8C0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007070
+ 70007070700092BE700092BE700092BE700092BE70007070700070707000F5F9
+ F200E5F0DF007070700070707000000000006B744A00FFB83E00FFB93E00FFB8
+ 3E00FFB53D00FFB73E00FFB43C00FFB73E006E7D4F0000000000000000000000
+ 0000B7B8B800877D7D00F9EFEF00E0D4D4000000000000000000000000000000
+ 00000000000000000000000000000000000000000000A449A300A449A3000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000A7A7A70000000000C7C7C700000000008C8C8C0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000707070007070700092BE700092BE700092BE700092BE7000707070007070
+ 7000F1F7EE0070707000707070000000000080925C00889F640090B16D0094BB
+ 720098C1760095C1750092B16C008AA16500000000000000000000000000BCBC
+ BC00857F7F00FFFFFF00F0E8E800FFFFFF000000000000000000000000000000
+ 000000000000000000000000000000000000A449A300A449A300000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007C7C7C008C8C8C0000000000D0D0D00000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000707070007070700092BE700092BE700092BE7000707070007070
+ 7000707070007070700070707000000000007B895700667651008AA76700FFEF
+ 3A0091B36E006574500065745000000000000000000000000000BCBCBC009089
+ 8900FFFFFF00FFFFFF00FFFFFF00969292000000000000000000000000000000
+ 0000000000000000000000000000A449A300A449A30000000000000000000000
+ 00000000000000000000000000000000000000000000000000008C8C8C000000
+ 000000000000C7C7C7008C8C8C0000000000E1E1E10000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000707070007070700092BE700092BE7000707070007070
+ 7000707070007070700070707000000000007A8957007A895700FFEE3A00FFF0
+ 3B0087A06200809A600000000000BCBEBE007C787800847C7C0099909000FBF9
+ F900FFFFFF00FFFFFF008F8B8B00BFBFBF000000000000000000000000000000
+ 00000000000000000000A449A300A449A3000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000E9E9E9000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000007A8E1700536B
+ 1700000000000000000000000000707070007070700092BE7000707070007070
+ 7000000000007070700070707000000000006D764B00FFF03B00FFF33B00FFEF
+ 3A007685540000000000BCBBBB00968A8A00F9EAEA00FFFFFF00FEF8F800EAE2
+ E200FEFCFC009A959500BEBEBE00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000010001001700170000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000BC8F49006D7E
+ 1200000000000000000000000000000000007070700070707000707070007070
+ 700000000000000000007070700000000000616642005E6340005C673F006167
+ 4200000000000000000086808000E6D4D400DCCECE00CDC3C300F4F0F000FDF8
+ F800A79F9F00B8B7B70000000000000000000000000000000000000000000000
+ 0000A449A300A449A30000000000000000000000000000000000000000000D00
+ 0D0000000000000000000000000000000000000000000000000000000000F0F0
+ F0004D4D4D000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000C6966200D1A67C00E1BBA200C491
+ 5200778914004D62170000000000000000000000000070707000707070007070
+ 7000000000000000000000000000000000005150350066765100504E34000000
+ 00000000000000000000998D8D00EDD8D800888383009A989800CFC6C600FFFF
+ FF00908A8A00C3C3C30000000000000000000000000000000000000000000000
+ 0000A449A3000000000000000000000000000F000F0000000000000000001500
+ 1500000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000D8B08900E9CFBB00EFD6CD00E4C0
+ AA00BE8F4B007D8E140000000000000000000000000000000000707070007070
+ 7000000000000000000000000000000000003E35230040332400000000000000
+ 000000000000000000008D878700A59F9F00D2D5D5008F878700DCCECE00F6EA
+ EA008C878700C3C3C3000000000000000000000000000000000000000000A449
+ A300A449A3000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000E9CEBB00D7B1
+ 8D00000000000000000000000000000000000000000000000000000000007070
+ 7000000000000000000000000000000000003B2E210000000000000000000000
+ 00000000000000000000D8D8D800C4C3C300A39D9D00ECD7D700E6D4D400A196
+ 9600C6C8C8000000000000000000000000000000000000000000A449A300A449
+ A300000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000D9B18B00CDA0
+ 7500000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000D8D8D8008D878700998D8D0086808000C6C8
+ C8000000000000000000000000000000000000000000A449A300A449A3000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000707070007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000707070007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007070700070707000FED2B900FED1B800FDD0B700FCCF
+ B500FCCEB4007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007070700070707000FED2B900FED1B800FDD0B700FCCF
+ B500FCCEB4007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000007070700070707000FED2B900FDD1B800FDD0
+ B600FCCEB5007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000070707000707070007070
+ 7000707070007070700070707000707070007070700070707000707070007070
+ 7000FCCEB5007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000007070700070707000FED1B900FDD0
+ B700FCCFB6007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000707070007070
+ 7000707070007070700070707000707070007070700070707000707070007070
+ 7000FCCFB6007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007070700070707000FDD1
+ B800FDD0B7007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007070
+ 700070707000FEFEFE00FAF7F500F5EDE900EFE3DC00EAD9D100707070007070
+ 7000FDD0B7007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000707070007070
+ 7000FDD0B8007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00007070700070707000FDFCFB00F8F3F000F2E9E300EDDFD800707070007070
+ 7000FDD0B8007070700070707000000000005A5A5A0000000000000000000000
+ 00005A5A5A0000000000000000000000000000000000000000005A5A5A000000
+ 000000000000000000005A5A5A000000000000000000B9530000000000000000
+ 0000BA520200B9530000000000000000000000000000B9530000000000007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007070700070707000FBF8F700F6EFEB00F0E5DF00707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000B9530000000000000000
+ 000000000000B95300000000000000000000B953000000000000000000000000
+ 0000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000A5A5A5000000000000000000000000000000000000000000000000000000
+ 000000000000000000007070700070707000F9F5F200F4EBE600707070007070
+ 700070707000707070007070700000000000000000005A5A5A00000000005A5A
+ 5A00000000000000000000000000000000000000000000000000000000005A5A
+ 5A00000000005A5A5A00000000000000000000000000B9530000000000000000
+ 00000000000000000000B9530000B95300000000000000000000000000000000
+ 0000000000007070700070707000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000A5A5
+ A5000000000000000000000000000000000000000000000000008E7A17006B53
+ 17000000000000000000000000007070700070707000F7F1EE00707070007070
+ 7000000000007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000B9530000B9530000B953
+ 0000B953000000000000B9530000B95300000000000000000000000000000000
+ 0000000000000000000070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000A5A5A5000000
+ 00000000000000000000000000000000000000000000000000008FBC49007E6D
+ 1200000000000000000000000000000000007070700070707000707070007070
+ 70000000000000000000707070000000000000000000000000005A5A5A000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00005A5A5A0000000000000000000000000000000000B9530000000000000000
+ 0000B9530000000000000000000000000000B953000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000A5A5A500000000000000
+ 00000000000000000000000000000000000096C66200A6D17C00BBE1A20091C4
+ 520089771400624D170000000000000000000000000070707000707070007070
+ 7000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000B9530000B9530000B953
+ 0000B953000000000000000000000000000000000000B9530000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000A5A5A50000000000000000000000
+ 000000000000000000000000000000000000B0D88900CFE9BB00D6EFCD00C0E4
+ AA008FBE4B008E7D140000000000000000000000000000000000707070007070
+ 7000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CEE9BB00B1D7
+ 8D00000000000000000000000000000000000000000000000000000000007070
+ 7000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B1D98B00A0CD
+ 7500000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000707070007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
+ 0000000000000000000070707000707070001FDC6F001EDB6E001EDA6C001DD8
+ 6B001CD769007070700070707000000000000000000000000000000000000000
+ 0000000000000000000042636300000000004263630000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF00E39A
+ 6F00FFFFFF00E3996C00E2996D00E3996D00FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF00E39A6F00FFFFFF00E3996C00E299
+ 6D00E3996D00FFFFFF0000000000000000000000000000000000000000000000
+ 000000000000000000000000000070707000707070001FDB6E001EDA6D001DD9
+ 6C001DD86A007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000070707000707070001FDB6E001EDA
+ 6D001DD96B007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF00E295
+ 6600E393630000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFFFFF00E2956600E3936300FFFFFF00E392
+ 6200E2936300FFFFFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000070707000707070001EDB
+ 6D001ED96C007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF0000000000FFFFFF00E39A6F00FFFFFF00E3996C00E2996D00E399
+ 6D00FFFFFF00000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000707070007070
+ 70001EDA6D007070700070707000000000000000000000000000426363000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000426363000000000000000000000000000000000000000000FFFFFF00E391
+ 5F00E28C580000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFFFFF00E3915F00E28C5800FFFFFF00FFFF
+ FF00E2936400FFFFFF0000000000000000000000000000B93400000000000000
+ 000002B8360000B9340000000000000000000000000000B93400000000007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF0000000000FFFFFF00E2956600E3936300FFFFFF00E3926200E293
+ 6300FFFFFF00000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 0000000000000000000000000000000000000000000000B93400000000000000
+ 00000000000000B93400000000000000000000B9340000000000000000000000
+ 0000707070007070700070707000000000000000000000000000426363000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000426363000000000000000000000000000000000000000000FFFFFF00E291
+ 6000FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFFFFF00E2916000FFFFFF00FFFFFF000000
+ 0000FFFFFF000000000000000000000000000000000000B93400000000000000
+ 0000000000000000000000B9340000B934000000000000000000000000000000
+ 0000000000007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF0000000000FFFFFF00E3915F00E28C5800FFFFFF00FFFFFF00E293
+ 6400FFFFFF00000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 0000000000000000000000000000000000000000000000B9340000B9340000B9
+ 340000B934000000000000B9340000B934000000000000000000000000000000
+ 0000000000000000000070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
+ 000000000000000000000000000000000000000000000000000056B9F5000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000B93400000000000000
+ 00000000000000000000000000000000000000B9340000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFFFFF00E2916000FFFFFF00FFFFFF0000000000FFFF
+ FF0000000000000000000000000000000000000000000000000056B9F5000000
+ 0000BBE5F900BBE5F900BBE5F900BBE5F900BBE5F900BBE5F9000000000056B9
+ F500000000000000000000000000000000000000000000B9340000B9340000B9
+ 340000B9340000B9340000000000000000000000000000B93400000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000042636300000000004263630000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000
+ 000000000000000000000000000000000000000000000000000056B9F50056B9
+ F50000000000BBE5F9000000000000000000BBE5F9000000000056B9F50056B9
+ F500000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000BBE5F900BBE5F9000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000006300000000000000630000000000000063000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000063000000630000006300000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000630000000000
+ 0000630000000000000063000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000006300
+ 0000000000000000000000000000630000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000006300
+ 0000630000006300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000006300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000063000000630000006300000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000063000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000006300000063000000630000006300
+ 0000630000006300000063000000FFFFFF006300000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000006300000063000000630000006300
+ 0000630000006300000063000000630000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000005252
+ 5200000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000063000000630000006300000000000000000000005252
+ 5200000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000005252
+ 5200000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000000000000000000000000000005252
+ 5200000000000000000063000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000525252000000
+ 0000000000000000000000000000000000000000000000000000000000006300
+ 0000000000000000000000000000000000000000000000000000525252000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000525252000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000000000000000000000525252000000
+ 0000000000006300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000052525200000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000052525200000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000000000000000000000000000052525200000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000000000000052525200000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000005252520000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000005252520000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000006300000000000000000000005252520000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000005252520000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000006300000063000000630000006300
+ 0000630000006300000063000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000006300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000006300000000000000630000000000000063000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000630000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000063000000630000006300000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000630000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000063000000630000006300
+ 0000630000006300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000063000000FFFFFF00FFFF
+ FF00FFFFFF006300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000063000000FFFFFF00FFFF
+ FF00FFFFFF0063000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000BE724D00C77B5500CC80
+ 5B00D78B6500D68A650000000000000000000000000000000000D68A6500D78B
+ 6500CC805B00C77B5500BE724D00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000063000000FFFFFF00FFFF
+ FF00FFFFFF006300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000B0694700BC724E00BA66
+ 3C00C47D5E00DE926C0000000000000000000000000000000000DE926C00FBC3
+ A600FBC3A600FDBE9E00B0694700000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000063000000630000006300
+ 0000630000006300000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000D1B3CA0096492400000000000000000000000000A75F3C00BC724E00BA66
+ 3C00C47D5E00DE926C0000000000000000000000000000000000DE926C00FBC3
+ A600FBC3A600FDBE9E00A75F3C0000000000000000000000000096492400ECC5
+ D700000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000D1B3
+ CA009D4E28009D4D25000000000000000000000000009D543000BC724E00BA66
+ 3C00C47D5E00E296700000000000000000000000000000000000E2967000FBC3
+ A600FBC3A600FDBE9E009D5430000000000000000000000000009D4D25009D4E
+ 2800ECC5D7000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000052525200000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000D1B3CA00A050
+ 2A00D2754700AB542900A24F27009A4B25009247230092472300BC724E00BA66
+ 3C00C47D5E00E296700000000000000000000000000000000000E2967000FBC3
+ A600FBC3A600FDBE9E0092472300924723009A4B2500A24F2700AB542900BF6A
+ 3F00A0502A00ECC5D70000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000005252520000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000D1B3CA00A2563100E186
+ 5800F68F5B00E9865500D97B4D00C8704400B7653B00AA5B3300BD704A00B667
+ 4000BE775500E296700000000000000000000000000000000000E2967000FBC3
+ A600FBC3A600FDBE9E00FCB99700FDB08900F7905C00EC885600DE7F4F00D176
+ 4800C46E4200A2563100ECC5D700000000000000000000000000000000000000
+ 0000000000000000000000000000525252000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000E2956E00FBC0A100FFB3
+ 8C00FF9E6D00F68F5B00E9865500D97B4D00C8704400C8704400CF7F5700CB79
+ 5000C47A5700E296700000000000000000000000000000000000E2967000FBC3
+ A600FBC3A600FDBE9E00FDBE9E00FCB99700FDA57800FC935E00F28C5900E584
+ 5300D87B4C00C66E4100AE582B00000000000000000000000000000000000000
+ 0000000000000000000052525200000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000E0BDCC00E89C7600FBC0
+ A100FFB38B00FFB38D00F8A87F00EEA17A00E1987400E1987400E1987400D98B
+ 6500D1896500E296700000000000000000000000000000000000E2967000FBC3
+ A600FBC3A600FBC3A600FBC3A600FDBE9E00FDBE9E00FEAE8500FFA87D00F89D
+ 6F00E5835100AE582B00F5CEE400000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000DFBFCF00E89C
+ 7600FBBFA000CE673300E7946C00E68E6200E5875800E28B5E00E28B6100E28F
+ 6500E2916800E296700000000000000000000000000000000000E2967000E296
+ 7000E2967000E2967000E2967000E2967000DA8E6800D1855F00DB906A00F79A
+ 6B00AE582B00F5CEE40000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000DFBF
+ CF00E79A7300D2703E0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000E5997300C576
+ 4E00F4CFE2000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000DFBFCF00E79A730000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000E89C7600F9D3
+ EB00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000B971
+ 44000000000000000000AD6538000000000000000000A55C2E00000000000000
+ 0000A1582A00000000000000000000000000000000000000000000000000BB74
+ 460000000000000000000000000000000000000000000000000000000000A158
+ 2A00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000BB75
+ 48000000000000000000B16B3C000000000000000000A75F3200000000000000
+ 0000A1582A00000000000000000000000000000000000000000000000000BB74
+ 460000000000000000000000000000000000000000000000000000000000A158
+ 2A00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C7815400C37D5000BF79
+ 4C00BD754800B9714200B56D4000B1693C00AE663700AB623400A85F3100A65B
+ 2E00A35A2C00A1582A00A1582A0000000000000000000000000000000000C079
+ 4C0000000000000000000000000000000000000000000000000000000000A158
+ 2A00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C37D
+ 52000000000000000000B97144000000000000000000AE663900000000000000
+ 0000A55C2E00000000000000000000000000CD875A00CD875A00C9835600C57E
+ 5100C07A4C00BC754800B8714300B46C3F00B0683A00A9603300A65D2F00A35A
+ 2C00A1582A00A1582A00A1582A00000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C783
+ 54000000000000000000BD7546000000000000000000B1693C00000000000000
+ 0000A85F3100000000000000000000000000000000000000000000000000C983
+ 560000000000000000000000000000000000000000000000000000000000A65E
+ 3000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000D48C5F00CF895C00CB85
+ 5800C7815400C37D5000C1794C00BB754800B9714400B56B4000B2693B00AE65
+ 3700AA623500A85F3100A55B3000000000000000000000000000000000003E39
+ 370048403B0039322F0028231F001B171400070605000000000000000000AA61
+ 3300000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000CE8A
+ 5D000000000000000000C37D50000000000000000000B9714200000000000000
+ 0000AD6738000000000000000000000000000000000000000000000000008976
+ 6C00D1B9AC00CAAD9B00C8A89500C7A39000C7A08D000706050000000000B26A
+ 3C00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000008400840084008400840084008400
+ 8400000000000000000084008400840084008400840084008400840084008400
+ 840084008400840084008400840084008400000000000000000000000000D28E
+ 61000000000000000000C78154000000000000000000BB754800000000000000
+ 0000B1693C000000000000000000000000008A4625000000000000000000897D
+ 7600F8E9E000F6E3D900F4DED100F2D9CC00C7A391001814120000000000B66F
+ 4100000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000DB976800D8946800D591
+ 6400D28E6100CF895C00CB875800C7815400C37D5000C1794C00BD754600B770
+ 4400B56D3E00B1693C00AE66390000000000975433008A462500000000008980
+ 7900FAEEE700F8E8DF00F5E3D800F4DED100C8A89800231E1B0000000000BB74
+ 4600000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000D894
+ 67000000000000000000CF895C000000000000000000C47D5100000000000000
+ 0000B97144000000000000000000000000009754330000000000000000008980
+ 7C00FCF2EC00FAEDE600F8E9DF00F5E3D800CBAE9F00322C290000000000C079
+ 4C00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000DB95
+ 6A000000000000000000D28E61000000000000000000C7835400000000000000
+ 0000BB7548000000000000000000000000000000000000000000000000008880
+ 7C00FCF4EE00FCF2EC00FAEFE800F9EAE100D6BFB3003F38350000000000C57E
+ 5100000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000DF9B6E00DF9B6E00DE98
+ 6B00DB976800D8946700D5916400D28E6100CE8A5D00CB855800C9815400C57D
+ 5000C1794C00BD754800B771440000000000DF9B6E00DF9B6E00DF9B6E00887F
+ 7A0089807C0089807C0089807900887D770089766C0035312E00CD885B00C983
+ 5600C57F5200C17A4D00C17A4D00000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000DF9B
+ 6E000000000000000000D99366000000000000000000CF895C00000000000000
+ 0000C57D5000000000000000000000000000000000000000000000000000DF9B
+ 6E0000000000000000000000000000000000000000000000000000000000CE88
+ 5B00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000DF9B
+ 6E000000000000000000DB976A000000000000000000D28E5F00000000000000
+ 0000C9815400000000000000000000000000000000000000000000000000DF9B
+ 6E0000000000000000008A46250000000000000000000000000000000000D28D
+ 6000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008400840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000DF9B
+ 6E000000000097543300975433008A462500000000000000000000000000D28D
+ 6000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000A27760006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 3500634935005C42300062483400000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000F0E1D900CB9E8700AE7050009956330099563300B1725200D1A28A00F4E5
+ DE00000000000000000000000000000000000000000000000000A3786200EDED
+ ED00E0E0E000D9D9D900D1D1D100C9C9C900C2C2C200B9B9B900B4B4B400B1B1
+ B100928884003A1C0E0060473300000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000F8F1F100D5B2BB008A3C
+ 5A0078344C00000000000000000000000000000000000000000000000000E2C8
+ BB00B5785700A7562D00B45C2E00B65C2E00B55C2D00B55C2D00BB5F3300D38D
+ 6A00F1D5C7000000000000000000000000000000000000000000A3796300EEEE
+ EE00EEEEEE00ECECEC00EBEBEB00E9E9E900E8E8E800E5E5E500DFDFDF00B6AB
+ A7002F160C0094888200634935000000000000000000B29E90007C6F63006D5D
+ 520068574A00635143005E4C3E000000000000000000C05D8000A94065008B2B
+ 5100872B4F0079254300701F3D00000000000000000000000000000000000000
+ 0000000000000000000000000000F9F4F400D3B6BD008E445F008B445D008940
+ 5B00853954000000000000000000000000000000000000000000F1E2DA00B778
+ 5700B35B2E00DF835300F29A6C00F1996E00EE966900E78D5E00DC7D4D00D476
+ 4800E09C7900F9EAE30000000000000000000000000000000000A37A6500EEEE
+ EE00EDEDED00EDEDED00EBEBEB00EAEAEA00EAEAEA0043211000BCB2AE002A14
+ 0A00B5A9A300ADADAD00634935000000000000000000C1B3AA00D3D2D100BAB4
+ B1009C948C0092877F00605042000000000000000000C2628300B9748900A44B
+ 68009F416200943758009D315800000000000000000000000000000000000000
+ 000000000000F7EFEF00D8BCC30090466000924E6500A1607500A35D75009E54
+ 6F0092405E000000000000000000000000000000000000000000CE9F8700AA57
+ 2D00DF835300FBAD8700FECBB000FDE9DF00FBE7DD00F1BCA100DC885D00D87A
+ 4A00E58D5F00F3C4AD0000000000000000000000000000000000AE8A7700EDED
+ ED00EDEDED00ECECEC00EBEBEB00E9E9E900E9E9E900361A0D002D160B00BCB0
+ A900DEDEDE00B1B1B10063493500000000000000000000000000BAA59600C7C3
+ C100A69F9800988E8800604F42000000000000000000C4678600BD809200AD5D
+ 7600A54B6A00A3436600CE8F9B00000000000000000000000000FFFEFE00F3E6
+ E800CEA8AF00A1597400A4647A00B9839400C18D9A00BD829300B7778A00AD6B
+ 80009B4564000000000000000000000000000000000000000000B5745300B85C
+ 2F00F0966800FDC8AE0000000000000000000000000000000000DCA58900CB6D
+ 3F00ED946500F4B29100000000000000000000000000A48F8000E4DBD5008871
+ 5F00D2CCC800765D4B00D1CBC6006F564300CFC9C4003D241700381B0D004220
+ 1000E2E2E200B8B8B800634935000000000000000000FEFEFE00C1B3AA00D1D0
+ CE00B7B1AC00A0989100635244000000000000000000C66E8A00C28B9B00B570
+ 8400AC5F7800A8436800F9F0F100000000000000000000000000E9D5DC00BC85
+ 9700BF8C9A00D0A5AF00D5A9B600D3A8B300D2A3AF00CD9EAA00C692A000BC82
+ 9300AF5072000000000000000000000000000000000000000000A0583400BA5E
+ 3100EC946600FBE7DC0000000000000000000000000000000000EFDAD000BF65
+ 3600EE956600F3A9850000000000000000000000000000000000A38E80009680
+ 6F0087705E007A614F006F56430069503D00674D3A00D2CDC900E9E9E900E8E8
+ E800E5E5E500C1C1C10063493500000000000000000000000000FEFEFE00BAA5
+ 9600C5C0BE00ADA6A30067554A000000000000000000C9748E00C7949F00BB7D
+ 8F00AB5B7600CE919A0000000000000000000000000000000000D3909F00D291
+ A100D18FA000D0899B00CE819600CB7A9200C8738E00C56C8900C2638400C05C
+ 8000BE577C000000000000000000000000000000000000000000A0583400B65C
+ 2E00DE825300F7E3D80000000000D4886200FEFCFC0000000000EFDAD000BD60
+ 3300ED956700F3AB8700000000000000000000000000B7A39600AE9A8C00F9F3
+ EE00F2E5DC00F1E1D800EFDDD100EDD8CC006A513E006E554100EAEAEA00E9E9
+ E900E8E8E800CBCBCB0063493500000000000000000000000000FEFEFE00C1B3
+ AA00D1D0CF00C1BEBC006D5C50000000000000000000CB7B9100CB9DA900C38D
+ 9D00AA4C6E00F9F2F20000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B6765500B65C
+ 2E00CE6E3D00E5AE9100E9C2AE00DC926D000000000000000000CE997E00BF63
+ 3500EF976C00F5B6940000000000000000000000000000000000B7A39600FCFD
+ FB00FCF8F600F7F2EC00F5E7DE00EFDED20070564300D5D0CC00EDEDED00ECEC
+ EC00EAEAEA00D0D0D0006349350000000000000000000000000000000000FEFE
+ FE00BAA59600C9C7C60075675D000000000000000000CE819500D4B0B900C177
+ 9200D2949D000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000D5A58C00BE62
+ 3300D06B3800DB7C4D00DE855600E8A17D000000000000000000A65E3A00CB6F
+ 4300F6A37800FACCB300000000000000000000000000C3B0A300BEAA9D00FDFE
+ FC00FCFDFB00FCFAF900F9F4EF00F0E1D70079604E00745C4900EEEEEE00EEEE
+ EE00ECECEC00DADADA006349350000000000000000000000000000000000FFFF
+ FF00C1B3AA00D2CFCE00807267000000000000000000D0889900D4AAB500C062
+ 8400F5E9E9000000000000000000000000000000000000000000BFB2AB00A598
+ 8E0091847A0084766B00796B61006D5C500067554A0063524400604F42006050
+ 42005E4C3E000000000000000000000000000000000000000000F5E6DF00D48F
+ 6A00DB784600F18E5C00F69E7000F4AF8C000000000000000000BE7A5500E48F
+ 6500FDBC9E00FEEFE80000000000000000000000000000000000C3B0A300FDFE
+ FD00FDFEFD00FCFDFB00FCFBF900F2E5DD00856E5C00D6D1CC00EEEEEE00EEEE
+ EE00EEEEEE00E0E0E00063493500000000000000000000000000000000000000
+ 000000000000BAA59600877A70000000000000000000D28D9C00CA849A00E1BA
+ BE00000000000000000000000000000000000000000000000000F9F8F700CEC3
+ BC00BCA99C00CFCAC800C7C5C400C1BEBC00ADA6A300A0989100988E88009287
+ 7F0063514300000000000000000000000000000000000000000000000000E2AF
+ 9400E68E6100FAA27600FFB08800FCB997000000000000000000FBF2ED00F6BF
+ A400FEE3D50000000000000000000000000000000000C9B7AB00C6B4A800FDFE
+ FD00FDFEFD00FDFEFD00FCFDFB00F7EEE900937D6D00866E5C00EEEEEE00EEEE
+ EE00EEEEEE00EDEDED0063493500000000000000000000000000000000000000
+ 000000000000C1B3AA0092867C000000000000000000D4929F00D28B9E00FBF6
+ F600000000000000000000000000000000000000000000000000000000000000
+ 0000FAF9F900CEC3BC00BCA99C00CFCDCA00C5C0BE00B7B1AC00A69F98009C94
+ 8C006A5A4D000000000000000000000000000000000000000000DA8F6A00E39A
+ 7600EDA78300F6B28F00FCB99700FCB997000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C9B7AB00C6B4
+ A800C3B0A300BEAA9D00B6A39500AC988A00A18B7C00DED3CC00BCA19200A37A
+ 6500A3796300A3786200A2776000000000000000000000000000000000000000
+ 000000000000FEFEFE00AC9D96000000000000000000D595A100E1BECB000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000FEFEFE00F8F6F500CABEB600BCA99C00CFCDCB00C7C3C100BAB4
+ B10075665B000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000CCBAAE0000000000C9B7
+ AB0000000000C3B0A30000000000B6A2950000000000A08A7C00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FEFEFD00F4F2F100D3C9C200BCA99C00D2CF
+ CE00817468000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FEFDFD00F4F1EF00CEC3
+ BC00B2A195000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000745A4600694F3B00CAC2BB000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FBD7C500F8D5C3000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000F8D5C300FBD7C500000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000BBADA10081685400CAB2A400684E3A000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000F8DCCF00F38A5700E195
+ 7100000000000000000000000000000000000000000000000000000000000000
+ 0000E1957100F38A5700F8DCCF00000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000967C
+ 69000000000000000000000000008C735F00DFCABE00BDA79800705743000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000005A5A5A00000000005A5A5A0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000EECBBA00F085
+ 5000DA865E00000000000000000000000000000000000000000000000000DA86
+ 5E00F0855000EECBBA0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000009C83
+ 70007F655200CEC6BF00CABEB50091796600E9D7CE007C634F00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000CA80
+ 5C00F0885500EAC8B70000000000000000000000000000000000EAC8B700F088
+ 5500CA805C000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000A38A
+ 7700DCD1CB006D533F0091796600DDCEC500D6C5BB00856C5900000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000E1CD
+ C300DB784700EF93670000000000000000000000000000000000EF936700DB78
+ 4700E1CDC3000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000AA91
+ 7F00F9F4F100DDD4CD00856C5800F3EAE500947C6900DCD4CE00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008A46
+ 2500954C2800A4542E00B65F3400C7693A00D672400000000000000000000000
+ 0000AE5C3600EC865200F2CFBD000000000000000000F2CFBD00EC865200AE5C
+ 3600000000000000000000000000D6724000C7693A00B65F3400A4542E00954C
+ 28008A462500000000000000000000000000000000000000000000000000B098
+ 8600FCFAF900FBF7F600F9F5F200F7F2EE00896F5C00664C38006A503C00765C
+ 49000000000000000000000000000000000000000000000000005A5A5A000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00005A5A5A00000000000000000000000000000000000000000000000000954C
+ 2800DF733600EA824900F39A6A00F5B594000000000000000000000000000000
+ 0000A3664800E9845200F7C2A7000000000000000000F7C2A700E9845200A366
+ 480000000000000000000000000000000000F5B59400F39A6A00EA824900DF73
+ 3600954C2800000000000000000000000000000000000000000000000000B79F
+ 8D00FFFFFE00FEFDFC00FDFBFA00FBF8F700FAF6F300DFD5CE00886E5B000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000A355
+ 2E00EC824B00F38D5B00EC9C7600B6866F00E9D5CB0000000000000000000000
+ 0000A9745900E1825400F7BE9E000000000000000000F7BE9E00E1825400A974
+ 5900000000000000000000000000E9D5CB00B6866F00EC9C7600F38D5B00EC82
+ 4B00A3552E00000000000000000000000000000000000000000000000000BDA6
+ 9400FFFFFF00FFFFFF00FFFFFF00FEFDFD00E2DAD5009A826F00000000000000
+ 00000000000000000000000000000000000000000000000000005A5A5A000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00005A5A5A00000000000000000000000000000000000000000000000000B55F
+ 3400F39A6A00F49C7100F29465009D533000AA613B00DAB8A70000000000F6C5
+ AE009D644600DE805100F7BDA1000000000000000000F7BDA100DE8051009D64
+ 4600F6C5AE0000000000DAB8A700AA613B009D533000F2946500F49C7100F39A
+ 6A00B55F3400000000000000000000000000000000000000000000000000C3AC
+ 9900FFFFFF00FFFFFF00FFFFFF00ECE7E300AB93810000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C769
+ 3B00F7CAAE00FBDDCB00F4A37600F3946400B4623900B0643E00BF816200BB84
+ 6000A15E3900EE8B5A00F6C8B0000000000000000000F6C8B000EE8B5A00A15E
+ 3900BB846000BF816200B0643E00B4623900F3946400F4A37600FBDDCB00F7CA
+ AE00C7693B00000000000000000000000000000000000000000000000000C8B0
+ 9E00FFFFFF00FFFFFF00F6F2F000BDA593000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000D672
+ 40000000000000000000FBDECF00F5A57E00F49D7200C9734700B7663C00B665
+ 3D00E2815300F6BCA100F6CBB7000000000000000000F6CBB700F6BCA100E281
+ 5300B6653D00B7663C00C9734700F49D7200F5A57E00FBDECF00000000000000
+ 0000D6724000000000000000000000000000000000000000000000000000CBB4
+ A200FFFFFF00F7F4F100CAB3A100000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FBDACA00F5A67E00F6B69600F5B28F00F6B0
+ 9100F6C1A800F6C5AE0000000000000000000000000000000000F6C5AE00F6C1
+ A800F6B09100F5B28F00F6B69600F5A67E00FBDACA0000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000CBB4
+ A200F6F3F000CBB4A20000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000005A5A5A00000000005A5A5A0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FBE0D200F6C3A900F7CF
+ BB00F9DBCD00000000000000000000000000000000000000000000000000F9DB
+ CD00F7CFBB00F6C3A900FBE0D200000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000CBB4
+ A200CBB4A2000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000CBB4
+ A200000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B7A293006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 3500634935000000000000000000000000000000000000000000000000000000
+ 0000707070007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000707070007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000707070007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000B7A29300FFFF
+ FF00B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300634935000000000000000000000000000000000000000000000000000000
+ 0000000000007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000007070700070707000707070007070700070707000707070007070
+ 7000707070007070700070707000000000000000000000000000B7A29300FFFF
+ FF00FFFFFF00FCFAF900F7F1EE00F1E7E100ECDDD500E6D3C900E1CABD00B7A2
+ 9300634935000000000000000000000000000000000000000000000000000000
+ 000000000000000000007070700070707000FEFEFE00FAF7F500F5EDE900EFE3
+ DC00EAD9D1007070700070707000000000000000000000000000000000000000
+ 000000000000000000007070700070707000FEFEFE00FAF7F500F5EDE900EFE3
+ DC00EAD9D1007070700070707000000000000000000000000000000000000000
+ 000000000000000000007070700070707000FEFEFE00FAF7F500F5EDE900EFE3
+ DC00EAD9D1007070700070707000000000000000000000000000B7A29300FFFF
+ FF00FFFFFF00F5F5F500F1EEEC00ECE4E000E6DBD400E1D1C900E4CFC400B7A2
+ 9300634935000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000007070700070707000FDFCFB00F8F3F000F2E9
+ E300EDDFD8007070700070707000000000000000000070707000707070007070
+ 7000707070007070700070707000707070007070700070707000707070007070
+ 7000EDDFD8007070700070707000000000000000000000000000000000000000
+ 00000000000000000000000000007070700070707000FDFCFB00F8F3F000F2E9
+ E300EDDFD8007070700070707000000000000000000000000000B7A29300FFFF
+ FF00C1C1C100ACACAC00ABAAA900A7A4A200A39D9900A0969200B4A69F00B7A2
+ 9300634935000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000007070700070707000FBF8F700F6EF
+ EB00F0E5DF007070700070707000000000000000000000000000707070007070
+ 7000707070007070700070707000707070007070700070707000707070007070
+ 7000F0E5DF007070700070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000007070700070707000FBF8F700F6EF
+ EB00F0E5DF007070700070707000000000000000000000000000BAA59600FFFF
+ FF00B6B6B600ECECEC00FFFFFF00FBF8F700EEE7E4009C959100E8D8D000B7A2
+ 9300634935000000000000000000000000000000000000000000000000000000
+ 0000088A450008623200095B2E0000000000000000007070700070707000F9F5
+ F200F4EBE6007070700070707000000000000000000000000000000000007070
+ 700070707000FEFEFE00FAF7F500F5EDE900EFE3DC00EAD9D100707070007070
+ 7000F4EBE60070707000707070000000000000000000000000005656FF000A0A
+ FF00000000000000000000000000000000007D7DFF009F9FFF0070707000F9F5
+ F200F4EBE6007070700070707000000000000000000000000000BEA99A00FFFF
+ FF00B6B6B600ECECEC00FFFFFF00F8F7F600ACAAA700E7DEDA00EEE1DA00B7A2
+ 9300634935000000000000000000000000000000000000000000000000000000
+ 00000CA650000BB05600074D2600000000000000000000000000707070007070
+ 7000F7F1EE007070700070707000000000000000000000000000000000000000
+ 00007070700070707000FDFCFB00F8F3F000F2E9E300EDDFD800707070007070
+ 7000F7F1EE0070707000707070000000000000000000000000006363FF000101
+ 75004C4CFF0000000000000000008484FF003333FF0000000000707070007070
+ 7000F7F1EE007070700070707000000000000000000000000000C3AE9E00FFFF
+ FF00B6B6B600ECECEC00FCFCFC00B9B9B900CCCBCA00F7F1EE00F1E7E100B7A2
+ 9300634935000000000000000000000000000000000000000000000000000000
+ 00000EC15D0048E8A800075B2D00000000000000000000000000000000007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 0000000000007070700070707000FBF8F700F6EFEB00F0E5DF00707070007070
+ 7000707070007070700070707000000000000000000000000000000000000101
+ DD000101C3008383FF009797FF001616FF007070FF0000000000000000007070
+ 7000707070007070700070707000000000000000000000000000C8B2A300FFFF
+ FF00B5B5B500EDEDED00C1C1C100CBCBCB00FEFEFE00FAF7F500F5EDE900B7A2
+ 930063493500000000000000000000000000000000000CD06A0016D66D001BD6
+ 670027DB78006AEFC00010AF5600096B360008562C0007512B00000000000000
+ 0000707070007070700070707000000000000000000000000000000000000000
+ 000000000000000000007070700070707000F9F5F200F4EBE600707070007070
+ 7000707070007070700070707000000000000000000000000000000000000000
+ 00000101EB000101F8000101F5002323FF000000000000000000000000000000
+ 0000707070007070700070707000000000000000000000000000CCB6A700FFFF
+ FF00B0B0B000C7C7C700C7C7C700FFFFFF00FFFFFF00FDFCFB00B7A29300B7A2
+ 9300644A3600000000000000000000000000000000002DDB7F0082EDBC00C3FA
+ EC00A0F6DA008DF6D70070F0C50058EBB3000FB35600085D2E00000000000000
+ 0000000000007070700070707000000000000000000000000000000000000000
+ 00000000000000000000000000007070700070707000F7F1EE00707070007070
+ 7000000000007070700070707000000000000000000000000000000000000000
+ 00007979FF000101BC000101BC007C7CFF000000000000000000000000000000
+ 0000000000007070700070707000000000000000000000000000D1BBAB00FFFF
+ FF00B6B6B600C1C1C100FFFFFF00FFFFFF00FFFFFF00B7A29300644A3600644A
+ 3600644A3600000000000000000000000000000000004ADF950066E4A50069E8
+ A70062EAA8009CF6DB0039E088000EC55C000AA44F00098F4700000000000000
+ 0000000000000000000070707000000000000000000000000000000000000000
+ 0000000000000000000000000000000000007070700070707000707070007070
+ 7000000000000000000070707000000000000000000000000000000000006868
+ FF000000FF004747FF004F4FFF001515FF008787FF0000000000000000000000
+ 0000000000000000000070707000000000000000000000000000D5BFAF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B9A49500D4C5BA00644A
+ 3600E1D5CD000000000000000000000000000000000000000000000000000000
+ 000060E6A100C6FCEF003ADE8500000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000070707000707070007070
+ 70000000000000000000000000000000000000000000000000004141FF000101
+ D7005151FF0000000000000000006D6DFF003939FF006363FF00000000000000
+ 0000000000000000000000000000000000000000000000000000D8C2B200FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0AB9C00644A3600E2D6
+ CD00000000000000000000000000000000000000000000000000000000000000
+ 000064E4A30089EDBF0032DD8400000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000707070007070
+ 70000000000000000000000000000000000000000000000000002A2AFF006060
+ FF00000000000000000000000000000000008787FF005656FF00000000000000
+ 0000000000000000000000000000000000000000000000000000D8C2B200D8C2
+ B200D8C2B200D8C2B200D8C2B200D4BEAE00CFB9A900C9B3A400E2D6CD000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000052E099002FDB7F0017D77200000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007070
+ 7000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000B00000000100010000000000800500000000000000000000
+ 000000000000000000000000FFFFFF007FFF007FFFFF0000BBFF003FFFFF0000
+ DFFF031FFFFF0000EBFF071FE30F0000F7FF0F9FE3070000A80A1F0FE3170000
+ F99F3F1FF11F0000FA3F1FBFF11F0000FA71000FF91F0000F8B9000FD91F0000
+ F9D5101FC0070000FBEF103FE0070000FFD70039E0070000FABB8000FFFF0000
+ FE7DF180FFFF0000FA3EF3E1FFFF0000FFFFFFFF0001FFFFFFE7000100010000
+ FFC7000100010001000300010001000200010007000700070001000D000D000E
+ 0003001F001F001FE027003D003D003EE02700570057002B0003003D00FD007E
+ 0001031F03FF00FF0001068D06FD017E00030FC70FFF03FFFFC71EE11EFD077E
+ FFE73FF13FFF0FFFFFFF555155550AAAFFFFFFFF0001FFFEFFFFF0010003FE7C
+ FFFFF8010007FE39E30FFC01000EFF93E3078001001CFF87E317C0010038FFC7
+ F11FE0010070C183F11FF00100E0C733F91FF80101C0C273D91FFC010200D0F3
+ C007CE090401D8E3E007CF0D0C03F007E007038F1C03F60FFFFF03CF3C03E7FF
+ FFFFCFEF7C07CFFFFFFFCFFFFE0F9FFFFFFFFFFFFFFFFFFFFFFFF0012AA9F001
+ F01FF8017EFDF801F83FFC01FEFFFC01FEFFFE017EFD80018EE3FF01FEFFC001
+ 06C1FF817EFDE001FEFFFFC1FEFFF00176DDB3A10001F801FEFFBB71FEF3FC01
+ AEEBBCF97EE5CE09FEFF84FDFECFCF0DDEF7B77F7E9D038FE00F87BFFE3F03CF
+ FEFFFFFF7E7DCFEFFFFFFFFF2AA9CFFFFFFFFFFFFFFFFFFFF0010EE1803FFC01
+ F8017C7D803FFC01FC01783D803FFC01FE017EFD8003C001FF01FEFF80038001
+ FF81DEF780038001FFC19EF380038001B3A1000180038001BB719EF380038003
+ BCF9DEF78003800784FDFEFF80038007BF7F7EFDF807800783BF783DF80F8007
+ FFFF7C7DF81FC00FFFFF0EE1FFFFF87FFFFFFEFFFFF7FFFFFEFFFEFFFEF7FEFF
+ FFFFFEFFFFF7FFFFFEFFFABFFEF7FEFFFFFFFC7FFFD5FFFFFEFFEEFFFEE3FEFB
+ FFFFF47FFFF7FFFDAA020002AA02AA00FEE7F467FEE7FEE5FECFEECFFECFFECB
+ FE9FFE9FF69FFE9FFE3FFE3FFA3FFE3FFE7FFE7F007FFE7FFEFFFEFFFAFFFABF
+ FFFFFFFFF7FFFC7FFEFFFEFFFEFFFEFFFFFFFFFFFFFFFFFF83FFFFFFFFFFAAAB
+ 8001FFFFFFFFFFFD8001FF83C1FFBFFF8001FF83C1FFFFFD83FBF383C1CFB80F
+ C7F7E383C1C7FB9DC7EFC003C003BB3FC7DF8003C001FA7DC7BF8003C001B8FF
+ C77F8003C001F9FDC6FFC003C003BBFFC5FFE3FFFFC7FFFDC3FFF3FFFFCFBFFF
+ C7FFFFFFFFFFD555FFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF7FFFFFEDB7EFEF
+ FF7FFFFFEDB7EFEFE00FF3E78001EFEFE007E1E7EDB70001FF63C0E7EDB7EFEF
+ FF73F3E78001E02FFF73F3E7EDB7E02FFB730000EDB7602FF363F3E78001202F
+ E007F3E7EDB7602FE00FF1C7EDB7E02FF37FF80F80010001FB7FFC1FEDB7EFEF
+ FF7FFFFFEDB7EDEFFF7FFFFFFFFFE8EFFFFFFFFFFFFFFFFFFFFFC001FFFFFFFF
+ F00FC001FFFFFF87E007C0018181FE07C003C0018181F807C003C001C181C007
+ C3C380018181C007C3C3C001C183C007C2438001C183FFFFC0C3C001E187FFFF
+ C0C38001E187C007C0C3C001F98FC007E0C78001F98FF007C0FFC001F99FF807
+ FFFFAABFFFFFFE07FFFFFFFFFFFFFF87FFFFFFFFFFFFFFFFFFFFFFFFFF1FFEFF
+ FF9FF9FFFE1FFC7FFF8FF1FFEE1FF83FFFC7E3FFE03FFEFFFFE3C7FFE03FFEFF
+ FFE3C7FFE03FDEF7E0718E07E00F9EF3E0F18F07E01F0001E0718E07E03F9EF3
+ E0218407E07FDEF7E0018007E0FFFEFFEC018037E1FFFEFFFE03C07FE3FFF83F
+ FF87E1FFE7FFFC7FFFFFFFFFEFFFFEFFFFFFFFFFFFFFFFFFC007F001F001F001
+ C007F801F801F801C007FC01FC01FC01C007FE018001FE01C007FF01C001FF01
+ C007F181E001CF01C007F1C1F001C641C007F1E1F801E061C0078031FC01F0F1
+ C0078039FE09F0F9C007803DFF0DE07DC007F1FFFF8FC63FC00FF1FFFFCFCF3F
+ C01FF1FFFFEFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
+ 000000000000}
+ end
+ object TrianglePopup: TPopupMenu
+ AutoPopup = False
+ Images = EditorTB
+ Left = 313
+ Top = 113
+ object mnuReset: TMenuItem
+ Caption = 'Reset triangle'
+ Hint = 'Reset triangle'
+ ImageIndex = 20
+ OnClick = mnuResetTriangleClick
+ end
+ object N6: TMenuItem
+ Caption = '-'
+ end
+ object mnuDuplicate: TMenuItem
+ Caption = 'Duplicate'
+ Hint = 'Duplicate selected triangle'
+ ImageIndex = 2
+ OnClick = mnuDupClick
+ end
+ object mnuDelete: TMenuItem
+ Caption = 'Delete'
+ Hint = 'Delete selected triangle'
+ ImageIndex = 3
+ OnClick = mnuDeleteClick
+ end
+ object mnuAdd1: TMenuItem
+ Caption = 'Add'
+ Hint = 'Add new triangle'
+ ImageIndex = 1
+ OnClick = mnuAddClick
+ end
+ object N21: TMenuItem
+ Caption = '-'
+ end
+ object mnuCopyTriangle: TMenuItem
+ Caption = 'Copy triangle coordinates'
+ ImageIndex = 26
+ OnClick = btnCopyTriangleClick
+ end
+ object mnuPasteTriangle: TMenuItem
+ Caption = 'Paste triangle coordinates'
+ ImageIndex = 27
+ OnClick = btnPasteTriangleClick
+ end
+ object N2: TMenuItem
+ Caption = '-'
+ end
+ object Rotatetriangle90CCW1: TMenuItem
+ Caption = 'Rotate triangle 90'#176' CCW'
+ ImageIndex = 17
+ OnClick = btTrgRotateLeft90Click
+ end
+ object Rotatetriangle90CCW2: TMenuItem
+ Caption = 'Rotate triangle 90'#176' CW'
+ ImageIndex = 18
+ OnClick = btTrgRotateRight90Click
+ end
+ object mnuFlipHorizontal: TMenuItem
+ Caption = 'Flip Horizontal'
+ Hint = 'Flip triangle horizontal'
+ ImageIndex = 10
+ OnClick = mnuFlipHorizontalClick
+ end
+ object mnuFlipVertical: TMenuItem
+ Caption = 'Flip Vertical'
+ Hint = 'Flip triangle vertical'
+ ImageIndex = 11
+ OnClick = mnuFlipVerticalClick
+ end
+ object N7: TMenuItem
+ Caption = '-'
+ end
+ object mnuResetTrgPosition: TMenuItem
+ Caption = 'Reset position'
+ ImageIndex = 21
+ OnClick = btnOcoefsClick
+ end
+ object mnuResetTrgRotation: TMenuItem
+ Caption = 'Reset rotation'
+ ImageIndex = 22
+ OnClick = mnuResetTrgRotationClick
+ end
+ object mnuResetTrgScale: TMenuItem
+ Caption = 'Reset scale'
+ ImageIndex = 23
+ OnClick = mnuResetTrgScaleClick
+ end
+ object mnuResetTrgFlip: TMenuItem
+ Caption = 'Reset reflection'
+ ImageIndex = 40
+ OnClick = mnuResetTrgFlipClick
+ end
+ end
+ object ChaosPopup: TPopupMenu
+ Left = 305
+ Top = 177
+ object mnuChaosViewTo: TMenuItem
+ Caption = 'View as "&to"'
+ Checked = True
+ RadioItem = True
+ OnClick = mnuChaosViewToClick
+ end
+ object mnuChaosViewFrom: TMenuItem
+ Caption = 'View as "&from"'
+ RadioItem = True
+ OnClick = mnuChaosViewFromClick
+ end
+ object N9: TMenuItem
+ Caption = '-'
+ end
+ object mnuChaosClearAll: TMenuItem
+ Caption = '&Clear all'
+ OnClick = mnuChaosClearAllClick
+ end
+ object mnuChaosSetAll: TMenuItem
+ Caption = '&Set all'
+ OnClick = mnuChaosSetAllClick
+ end
+ object ChaosClearBelow: TMenuItem
+ Caption = 'Clear all below selected'
+ OnClick = ChaosClearBelowClick
+ end
+ object ClearAllAbove: TMenuItem
+ Caption = 'Clear all above selected'
+ OnClick = ClearAllAboveClick
+ end
+ object InvertXaos: TMenuItem
+ Caption = 'Invert current settings'
+ OnClick = InvertXaosClick
+ end
+ object RandomizeChaos: TMenuItem
+ Caption = 'Randomize all'
+ OnClick = RandomizeMatrixClick
+ end
+ object N17: TMenuItem
+ Caption = '-'
+ end
+ object RandomizeMatrix: TMenuItem
+ Caption = 'Randomize matrix'
+ OnClick = RandomizeMatrixClick
+ end
+ object NormChaos: TMenuItem
+ Caption = 'Normalize transition matrix'
+ OnClick = NormChaosClick
+ end
+ object ResetChaos: TMenuItem
+ Caption = 'Reset transition matrix '
+ OnClick = ResetChaosClick
+ end
+ object N10: TMenuItem
+ Caption = '-'
+ end
+ object mnuLinkPostxform: TMenuItem
+ Caption = 'Add linked post-transform'
+ OnClick = mnuLinkPostxformClick
+ end
+ object mnuLinkPrexform: TMenuItem
+ Caption = 'Add linked pre-transform'
+ OnClick = mnuLinkPrexformClick
+ end
+ object AddContainer: TMenuItem
+ Caption = 'Add container transform'
+ OnClick = AddContainerClick
+ end
+ object InheritWeights: TMenuItem
+ AutoCheck = True
+ Caption = 'Inherit weights'
+ Checked = True
+ end
+ object mnuChaosRebuild: TMenuItem
+ Caption = 'Rebuild xaos links'
+ Checked = True
+ Hint = 'Rebuild xaos links when deleting transforms'
+ OnClick = mnuChaosRebuildClick
+ end
+ object N19: TMenuItem
+ Caption = '-'
+ end
+ object ShowChaosMatrix: TMenuItem
+ Caption = 'Show chaos matrix...'
+ OnClick = btnFullChaosClick
+ end
+ end
+ object MathPopup: TPopupMenu
+ TrackButton = tbLeftButton
+ Left = 384
+ Top = 176
+ object Pifractions: TMenuItem
+ AutoHotkeys = maManual
+ Caption = 'Insert Pi fraction...'
+ object InsertPi1: TMenuItem
+ Caption = 'Insert Pi'
+ OnClick = InsertPi1Click
+ end
+ object Insert2Pi1: TMenuItem
+ Tag = 1
+ Caption = 'Insert 2Pi'
+ OnClick = InsertPi1Click
+ end
+ object InsertPi21: TMenuItem
+ Tag = 2
+ Caption = 'Insert Pi/2'
+ OnClick = InsertPi1Click
+ end
+ object InsertPi31: TMenuItem
+ Tag = 3
+ Caption = 'Insert Pi/3'
+ OnClick = InsertPi1Click
+ end
+ object InsertPi41: TMenuItem
+ Tag = 4
+ Caption = 'Insert Pi/4'
+ OnClick = InsertPi1Click
+ end
+ object InsertPi61: TMenuItem
+ Tag = 5
+ Caption = 'Insert Pi/6'
+ OnClick = InsertPi1Click
+ end
+ end
+ object Squareroots1: TMenuItem
+ AutoHotkeys = maManual
+ Caption = 'Insert Square root...'
+ object Insert1sqrt21: TMenuItem
+ Tag = 7
+ Caption = 'Insert 1/sqrt(2)'
+ OnClick = InsertPi1Click
+ end
+ object Insertsqrt321: TMenuItem
+ Tag = 8
+ Caption = 'Insert sqrt(3)/2 '
+ OnClick = InsertPi1Click
+ end
+ object Insertsqrt331: TMenuItem
+ Tag = 9
+ Caption = 'Insert sqrt(3)/3'
+ OnClick = InsertPi1Click
+ end
+ object Insertsqrt361: TMenuItem
+ Tag = 6
+ Caption = 'Insert sqrt(3)/6'
+ OnClick = InsertPi1Click
+ end
+ object Insertsqrt31: TMenuItem
+ Tag = 10
+ Caption = 'Insert sqrt(3)'
+ OnClick = InsertPi1Click
+ end
+ end
+ object InsertGoldenratio1: TMenuItem
+ Tag = 11
+ Caption = 'Insert Golden ratio'
+ OnClick = InsertPi1Click
+ end
+ object N12: TMenuItem
+ Caption = '-'
+ end
+ object InvCurrentNum: TMenuItem
+ Caption = 'Invert the number'
+ OnClick = InvCurrentNumClick
+ end
+ object Squarethenumber1: TMenuItem
+ Caption = 'Square the number'
+ OnClick = MulDiv2Click
+ end
+ object SquareRoot: TMenuItem
+ Tag = 3
+ Caption = 'Square root of the number'
+ OnClick = MulDiv2Click
+ end
+ object Mul2: TMenuItem
+ Tag = 1
+ Caption = 'Multiply by 2'
+ OnClick = MulDiv2Click
+ end
+ object Div2: TMenuItem
+ Tag = 2
+ Caption = 'Divide by 2'
+ OnClick = MulDiv2Click
+ end
+ object N18: TMenuItem
+ Caption = '-'
+ end
+ object CalcCos: TMenuItem
+ Caption = 'Calculate cosine of the value'
+ OnClick = CalcCosClick
+ end
+ object CalcSin: TMenuItem
+ Tag = 1
+ Caption = 'Calculate sine of the value'
+ OnClick = CalcCosClick
+ end
+ object CalcTan: TMenuItem
+ Tag = 2
+ Caption = 'Calculate tangent of the value'
+ OnClick = CalcCosClick
+ end
+ object UseDegrees: TMenuItem
+ AutoCheck = True
+ Caption = 'Use degrees'
+ Checked = True
+ end
+ end
+ object CopyMenu: TPopupMenu
+ Left = 305
+ Top = 241
+ object Copytrianglecoordinates1: TMenuItem
+ Caption = 'Copy Triangle Coordinates'
+ OnClick = btnCopyTriangleClick
+ end
+ object Copytransform1: TMenuItem
+ Caption = 'Copy Whole Transform'
+ OnClick = Copytransform1Click
+ end
+ end
+ object PasteMenu: TPopupMenu
+ Left = 385
+ Top = 233
+ object Pastetrianglecoordinates1: TMenuItem
+ Caption = 'Paste Triangle Coordinates'
+ Enabled = False
+ OnClick = btnPasteTriangleClick
+ end
+ object Pastetransform1: TMenuItem
+ Caption = 'Paste Transform(s)'
+ Enabled = False
+ OnClick = Pastetransform1Click
+ end
+ end
+ object TriangleOperations: TPopupMenu
+ Left = 385
+ Top = 305
+ object RotateXYO: TMenuItem
+ AutoCheck = True
+ Caption = 'Rotate all vectors'
+ Checked = True
+ GroupIndex = 1
+ RadioItem = True
+ OnClick = TriangleOperationsClick
+ end
+ object RotateX: TMenuItem
+ Tag = 1
+ AutoCheck = True
+ Caption = 'Rotate only X-axis'
+ GroupIndex = 1
+ RadioItem = True
+ OnClick = TriangleOperationsClick
+ end
+ object RotateY: TMenuItem
+ Tag = 2
+ AutoCheck = True
+ Caption = 'Rotate only Y-axis'
+ GroupIndex = 1
+ RadioItem = True
+ OnClick = TriangleOperationsClick
+ end
+ object RotateO: TMenuItem
+ AutoCheck = True
+ Caption = 'Rotate only O-vector'
+ GroupIndex = 1
+ RadioItem = True
+ OnClick = TriangleOperationsClick
+ end
+ object N14: TMenuItem
+ Caption = '-'
+ GroupIndex = 2
+ end
+ object ScaleXYO: TMenuItem
+ AutoCheck = True
+ Caption = 'Scale all vectors'
+ Checked = True
+ GroupIndex = 2
+ RadioItem = True
+ OnClick = TriangleOperationsClick
+ end
+ object ScaleX: TMenuItem
+ Tag = 1
+ AutoCheck = True
+ Caption = 'Scale only X-axis'
+ GroupIndex = 2
+ RadioItem = True
+ OnClick = TriangleOperationsClick
+ end
+ object ScaleY: TMenuItem
+ Tag = 2
+ AutoCheck = True
+ Caption = 'Scale only Y-axis'
+ GroupIndex = 2
+ RadioItem = True
+ OnClick = TriangleOperationsClick
+ end
+ object ScaleO: TMenuItem
+ AutoCheck = True
+ Caption = 'Scale only O-vector'
+ GroupIndex = 2
+ RadioItem = True
+ OnClick = TriangleOperationsClick
+ end
+ object N13: TMenuItem
+ Caption = '-'
+ GroupIndex = 2
+ end
+ object RectGrid: TMenuItem
+ Caption = 'Move along a square lattice'
+ Checked = True
+ GroupIndex = 3
+ RadioItem = True
+ OnClick = mnuChangeGridClick
+ end
+ object TriGrid: TMenuItem
+ Caption = 'Move along a triangular lattice'
+ GroupIndex = 3
+ RadioItem = True
+ OnClick = mnuChangeGridClick
+ end
+ object N16: TMenuItem
+ Caption = '-'
+ GroupIndex = 5
+ end
+ object InvertMovevalue1: TMenuItem
+ Caption = 'Invert current Move step'
+ GroupIndex = 5
+ OnClick = InvertMovevalue1Click
+ end
+ object CalcArcsinScale: TMenuItem
+ Caption = 'Calculate arcsin of the scale factor'
+ GroupIndex = 5
+ OnClick = CalcArcsinScaleClick
+ end
+ object N15: TMenuItem
+ Caption = '-'
+ GroupIndex = 5
+ end
+ object ShowModVals: TMenuItem
+ AutoCheck = True
+ Caption = 'Display internally modified values'
+ GroupIndex = 5
+ end
+ end
+ object IconsAV: TImageList
+ BkColor = clWhite
+ Left = 305
+ Top = 304
+ Bitmap = {
+ 494C01010A003000040010001000FFFFFF00FF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000003000000001002000000000000030
+ 000000000000000000000000000000000000FFFFFF00FBFBFF00C7C7FF00A7A7
+ FF00A4A4FF00A4A4FF00A6A6FF00D5D5FF00FDFDFF00FFFFFF00C8C8C8002828
+ 280098989800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00F6F6FF006A6AFF001010
+ FF001D1DFF003434FF003C3CFF00A3A3FF00FCFCFF00F9F9F900848484001717
+ 17005C5C5C00E4E4E400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FCFCFF00A2A2FF001D1D
+ FF002A2AFF00A2A2FF00D1D1FF00E9E9FF00FFFFFF00D8D8D8003E3E3E001010
+ 100026262600B0B0B000FCFCFC00FFFFFF00FFFFFF00C0864C00B0681F00A654
+ 0000FFFFFF00A6540000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00EBEBFF007373
+ FF001616FF006F6FFF00EFEFFF00FFFFFF00FFFFFF0090909000262526001A19
+ 19001F1F1F0063636300F3F3F300FFFFFF00FFFFFF00C0874B00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00D9D9
+ FF004D4DFF001B1BFF009A9AFF00F9F9FF00FFFFFF00CECDCD00898888003737
+ 370070707000BABABA00FAFAFA00FFFFFF00FFFFFF00FFFFFF00B1691F00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FEFEFF00DFDFFF00BFBF
+ FF007777FF001010FF003232FF00CECEFF00FFFFFF00FFFFFF00D3D3D3004E4E
+ 4E00ABABAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A654
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FBFBFF009C9CFF003B3B
+ FF002D2DFF002525FF002C2CFF00BABAFF00FFFFFF00FFFFFF00D4D4D4005757
+ 5700AFAFAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0864B00B0681E00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FEFEFF00E4E4FF00C6C6
+ FF00C2C2FF00C2C2FF00C6C6FF00EEEEFF00FFFFFF00FFFFFF00D7D6D6006262
+ 6200B4B4B400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FEFCFB00F6E1D100F8E4
+ D500FFFDFB00FFFFFD00F9E8DA00F4DDCB00FDFAF700FFFFFF00D9D9D9006D6D
+ 6D00B9B9B900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FCF8F400DC9B6700D68A
+ 4C00F2DAC600F5E3D400D9925900D78C4F00FAEFE700FFFFFF00DDDDDC007979
+ 7900BFBFBF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C1864C00B1691F00A654
+ 0000FFFFFF00A6540000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FEFCFA00E4B18800CA67
+ 1700D0793200D27D3800C9621000DD9D6A00FCF6F200FFFFFF00E0E0DF008585
+ 8400C4C5C400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B1691F00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00F1D6C000CD70
+ 2400CE722800CF752D00C9641200EBC4A500FFFEFE00FFFFFF00E3E3E2009191
+ 9000CACACA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B1681E00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00F9EDE300D88F
+ 5400CF752C00D0773000D27F3B00F5E2D300FFFFFF00FFFFFF00E6E6E6009D9D
+ 9D00D0D0D000FFFFFF00FFFFFF00FFFFFF00FFFFFF00C1874B00B0681E00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00FEFCFA00E5B4
+ 8C00C8600C00C65B0500DD9D6A00FCF8F400FFFFFF00FFFFFF00E9E9E900A9A9
+ A900D6D6D600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B1691F00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00F0D4
+ BD00CF752D00CC6B1D00EAC3A300FFFFFF00FFFFFF00FFFFFF00ECECEC00B8B8
+ B800DCDCDC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FBF5
+ EF00EFD2BA00EDCCB100FAF0E800FFFFFF00FFFFFF00FFFFFF00F9F9F900E7E7
+ E700F3F3F300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007A9DB8001D5887007A9D
+ B800F2F5F800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007A9DB8001D5887007A9D
+ B800F2F5F800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007A9DB8001D5887007A9D
+ B800F2F5F800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007A9DB8001D5887007A9D
+ B800F2F5F800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D58870056A2D600387B
+ AC0095B0C700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D58870056A2D600387B
+ AC0095B0C700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D58870056A2D600387B
+ AC0095B0C700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D58870056A2D600387B
+ AC0095B0C700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D58870056A2D600458C
+ BE00608AAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D58870056A2D600458C
+ BE00608AAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D58870056A2D600458C
+ BE00608AAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D58870056A2D600458C
+ BE00608AAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00407299004D97CA0056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00407299004D97CA0056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00407299004D97CA0056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00407299004D97CA0056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0086A5BF003C80B10056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007EA0BB003C80B10056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0086A5BF003C80B10056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0086A5BF003C80B10056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00CCA97D00D7821F00EC860B00EA85
+ 0B00D9861800BD925800FFFFFF00FFFFFF00FFFFFF00C4D3DF002C6B9C0056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF006F955B003CA3450033B2470033B1
+ 470038A54700558B4C00FFFFFF00FFFFFF00FFFFFF00B4C7D7002C6B9C0056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00DA9CC200E354AD00F444AF00F244
+ AE00E64EA700CF80AE00FFFFFF00FFFFFF00FFFFFF00C4D3DF002C6B9C0056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF007D86CC001F36D7000B25EC000B25
+ EA00182AD9005861BD00FFFFFF00FFFFFF00FFFFFF00C4D3DF002C6B9C0056A2
+ D6001D588700FFFFFF00FFFFFF00FFFFFF00F9A43F00FED49400FFDBA300FFDA
+ A200FEE1B200F9AA3500EC8D0D00D8AC6E00FEEFD800EFCD9C00161D3200539E
+ D4002B6A9A00C8D6E200FFFFFF00FFFFFF00829D4B009BDEA500A3E0AA00A3E0
+ AA00ABE3B1006ACD7B0035B34C006FAA6800D3E7C100C5CC9800161D3200539E
+ D4002B6A9A00C8D6E200FFFFFF00FFFFFF00FD6BC500FFADDC00FFBAE000FFB9
+ E000FFC4E500FD64BB00F445AA00E390C000FEE1F200F4B3D900281C2B007998
+ D2002B6A9A00C8D6E200FFFFFF00FFFFFF003F56F900949BFE00A3A8FF00A2A8
+ FF00B2B6FE003543F9000D21EC006E76D800D8DBFE009CA3EF00161D3200539E
+ D4002B6A9A00C8D6E200FFFFFF00FFFFFF00F1A85500FFD79B00FFBA5000FFB8
+ 4900FFCC7C00FFDDA900FFE6C000FCD6A000F2B75A00F9B65000ABB2AD0056A2
+ D6003A7EB0008BA9C100FFFFFF00FFFFFF00B49D5900AAE3B00063CE77005FCD
+ 740080D68E00A7E3AF00B4E7B900A3E0AB0068C5750078C77100ACB3AC0056A2
+ D6003A7EB0008BA9C100FFFFFF00FFFFFF00F77CC900FFB4DE00FF7BC500FF76
+ C100FF9CD300FFBEE200FFD0EA00FEB6DF00F780C300FC78C200EF82BF00A396
+ D1003A7EB0008BA9C100FFFFFF00FFFFFF00556AF1009BA1FF00505BFF004953
+ FF007C83FF00A9AEFF00C0C4FF00A0A7FC005A63F200505BF9005E67C00056A2
+ D6003A7EB0008BA9C100FFFFFF00FFFFFF00E5B98700FED49500FFCC7D00FFBE
+ 5C00FFBF5E00FFCF8500FFDDAA00FFF3DF00FFE5BD00FFE2B500ADA78F0056A2
+ D6004692C70043749B00FFFFFF00FFFFFF00C4AD8500A0D3A90090DB9B006AD0
+ 7D006CD17E0086D994009EE0A700C5ECC700B4E6B900B0E6B7008DAB900056A2
+ D6004692C70043749B00FFFFFF00FFFFFF00ECA3D100FFAFDB00FF9DD400FF84
+ CA00FF86CA00FFA3D600FFBFE300FFE7F400FFCDE900FFD3EC00E1B7CE007A9D
+ D3004692C70043749B00FFFFFF00FFFFFF008793E500959CFE007D85FF005C67
+ FF005E68FF00858CFF00AAB0FF00DFE0FF00BDC1FF00B5B9FF009898D10056A2
+ D6004692C70043749B00FFFFFF00FFFFFF00E7D2BA00FBAB3100FFD99D00FFBC
+ 5400FFBE5700FFCD8200FFDCA500FFEBCD00FFE3B700FFD79A00D9C39900428C
+ C0007DB7DF001D588700FFFFFF00FFFFFF00CBC2B100479A5C00A2E1AB0066CF
+ 7A0068CF7C0084D892009BDFA500B6E7BA00A8E3B00095DEA1009DC9A200428C
+ C0007DB7DF001D588700FFFFFF00FFFFFF00EDCBE000FF61BA00FFB5DE00FF7E
+ C700FF81C700FFA1D600FFBBE100FFD9EE00FFC9E700FFC3E500F4BCDB00438C
+ C0007DB7DF001D588700FFFFFF00FFFFFF00BAC0E700313FFB009DA2FF00545E
+ FF005760FF00828AFF00A5AAFF00CDD0FF00B7BBFF009AA0FF00999AD900428C
+ C0007DB7DF001D588700FFFFFF00FFFFFF00F0E9E000FAA93700FFD79B00FFBA
+ 5100FFBA5000FFCD8100FFDA9F00FFE8C400FFE8C500FFD89D00F0C173003579
+ AC006EAFDB001D588700FFFFFF00FFFFFF00F0E9E0004B965600A1E0A90064CF
+ 780064CF780084D8920097DEA300B0E6B700B2E6B70098DFA3008ECF96003579
+ AC006EAFDB001D588700FFFFFF00FFFFFF00F4E7EF00FD65BD00FFB4DF00FF7C
+ C600FF7BC500FFA0D600FFB7DF00FFD3EB00FFD3EC00FFC5E500FDA4D6003579
+ AC006EAFDB001D588700FFFFFF00FFFFFF00E0E1F0003747FA009BA2FF00515C
+ FF00505BFF008189FF009FA4FF00C4C7FF00C5C9FF009DA3FF007378F0003579
+ AC006EAFDB001D588700FFFFFF00FFFFFF00FAF8F600F9A74300FFD79B00FFD9
+ 9F00FFD89B00FFE3B800FFE9C800FFE2B600FFEDD100FFD99F00FFD59500356E
+ 97008FC1E400215F8F00E8EEF300FFFFFF00FAF8F60062925500BDE9C000B8E7
+ BC00B7E7BC00C1EBC300C6ECC800A8E3B000BAE8BE0099DFA400A7DC9E00356E
+ 97008FC1E400215F8F00E8EEF300FFFFFF00FBF8FA00FD6EC600FFB4DF00FFB7
+ DF00FFB4DD00FFCAE800FFD6ED00FFC8E700FFDCF000FFC6E600FFBFE300356E
+ 97008FC1E400215F8F00E8EEF300FFFFFF00F6F7FA004358F9009BA2FF009FA5
+ FF009BA0FF00B8BCFF00C8CCFF00B6BBFF00D1D4FF009FA5FF00959CFF00356E
+ 97008FC1E400215F8F00E8EEF300FFFFFF00FEFEFD00F8AC5600F5860A00F585
+ 0400F5870400F5890300FCD19300FFEFD700FFF6E700FFECCD00FFE9C700A0B4
+ C00086BCE2002E72A400A8BFD100FFFFFF00FEFEFD009A9A640034A54C0031A6
+ 4C0031A64D0030A64D0082C29600C3EBC600C9EDCB00B9E9BF00B7E7BC00A0B4
+ C00086BCE2002E72A400A8BFD100FFFFFF00FEFEFE00FC7DCE00FA43B700FA3E
+ B500FA3EB300FA3DB100FEACDA00FFE1F200FFEDF700FFE2F200FFDEF000A0B4
+ C00086BCE2002E72A400A8BFD100FFFFFF00FDFDFE00566CF8000A2AF5000424
+ F5000421F500031EF500939BFC00D7DAFF00E7E8FF00CDCFFF00C7CAFF00A0B4
+ C00086BCE2002E72A400A8BFD100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00E98C0C00FAB75100FEE9CB00FEDDAC00FCAB3100D794
+ 2E00EFF7FB003684BB00608AAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0035A052005EB77900BFE9C200AEE4B6006DD180004794
+ 5300EFF7FB003684BB00608AAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00F144A900FD79C400FED7EE00FFCFEA00FF78C700D265
+ A800EFF7FB003684BB00608AAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF000C1FE900515CFA00CBCFFE00ACB2FE00313EFC002E39
+ D700EFF7FB003684BB00608AAB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00F3F0EB00C39F6F00CB924000CA8E4000C39C690082A0
+ B6001D588700608AAB00BDCFDC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00DFE3D9005D835C004B8E56004E994E0062905400698D
+ A7001D588700608AAB00BDCFDC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00F6F0F300D391B800DA6DAB00F273BE00E374A60082A0
+ B6001D588700608AAB00BDCFDC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00EBECF3006F76C300404BCB00404ECA006972C30082A0
+ B6001D588700608AAB00BDCFDC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF004040400000000000C0C0C000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000080808000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002D2D2D005F5F5F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00808080000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004A4A4A00000000009A9A9A00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0017171700000000003E3E3E00A0A0A000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000000000000000000000000080808000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF009C9C9C000404040029292900C0C0C000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00353535000000000000000000161616006D6D6D00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF008080800000000000000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00363636000000000070707000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0036363600000000000202020000000000020202003535350097979700FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00000000000000000000000000000000000000000080808000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF009A9A9A000000000023232300ADADAD00FFFFFF00FFFF
+ FF00A1A1A100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00414141000000000000000000010101000E0E0E00191919003D3D3D007C7C
+ 7C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080
+ 8000C0C0C000FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
+ FF0040404000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0080808000000000000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF004A4A4A00000000005E5E5E00FFFFFF009494
+ 940064646400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF004B4B4B000000000001010100020202003A3A3A0090909000B8B8B800A5A5
+ A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF000000000040404000C0C0C000000000000000000080808000808080000000
+ 000080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00000000000000000000000000000000000000000000000000000000008080
+ 8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BDBDBD00000000001F1F1F00797979003535
+ 350045454500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0050505000121212004343430014141400282828009B9B9B00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00808080000000000000000000000000000000000000000000000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080
+ 80000000000080808000808080000000000000000000C0C0C000404040000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005C5C5C0000000000090909000000
+ 000041414100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005959590051515100BCBCBC0054545400030303004C4C4C00C5C5C500FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000008080
+ 8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004040
+ 4000FFFFFF00FFFFFF00808080000000000000000000FFFFFF00FFFFFF00C0C0
+ C00080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00AAAAAA005C5C5C004C4C4C003030300000000000000000000000
+ 00003A3A3A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0086868600ACACAC00FFFFFF00A8A8A8001E1E1E001515150085858500FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00808080000000000000000000000000000000000000000000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00808080000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0089898900383838000000000000000000010101000000
+ 000034343400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0063636300030303003A3A3A00B7B7
+ B700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF000000000000000000000000000000000080808000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00808080000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00606060001C1C1C00000000000000
+ 00002D2D2D00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BBBBBB002B2B2B00080808007878
+ 7800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0080808000000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00808080000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00999999003B3B3B000202
+ 020021212100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0079797900050505004A4A
+ 4A00A1A1A100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00000000000000000080808000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00808080000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C1C1C1005F5F
+ 5F0034343400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005B5B5B000202
+ 020000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF008080800000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00808080000000000000000000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00A6A6A600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0045454500B1B1
+ B100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0080808000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00C0C0C0000000000040404000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00424D3E000000000000003E000000
+ 2800000040000000300000000100010000000000800100000000000000000000
+ 000000000000000000000000FFFFFF008047FFFF000000008003FFFF00000000
+ 80818BFF00000000C181BFFF00000000E081DE000000000080C7EFFF00000000
+ 80C79FFF0000000080C7FFFF000000008047FFFF0000000080478BFF00000000
+ 8047DFFF00000000C047DE0000000000C0C79FFF00000000C0C7DFFF00000000
+ E1C7FFFF00000000E1C7FFFF00000000FF87FF87FF87FF87FF87FF87FF87FF87
+ FF87FF87FF87FF87FF87FF87FF87FF87FF87FF87FF87FF870387038703870387
+ 0003000300030003000300030003000300030003000300030003000300030003
+ 000300030003000300010001000100010001000100010001FC01FC01FC01FC01
+ FC01FC01FC01FC01FFFFFFFFFFFFFFFFFE3FFEFFFFFFFFFFFE3FFE7FFFFFF3FF
+ FE3FFC7FF8FFF0FFFE3FFC3FF87FF07FFE3FF83FFC7FF01FFE3FF81FFC37F00F
+ E637F01FFE27F00FF007F00FFE07F03FF00FE00FFF07F01FF80FEC67F807F21F
+ F81FFC7FFC07FF0FFC1FFC7FFF07FF0FFC3FFC7FFF87FF87FE3FFC7FFFC7FFC7
+ FE7FFC7FFFF7FFCFFF7FFC7FFFFFFFFF00000000000000000000000000000000
+ 000000000000}
+ end
+end
diff --git a/Forms/Editor.pas b/Forms/Editor.pas
new file mode 100644
index 0000000..9050180
--- /dev/null
+++ b/Forms/Editor.pas
@@ -0,0 +1,7659 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+//{$D-,L-,O+,Q-,R-,Y-,S-}
+
+unit Editor;
+
+//{$define VAR_STR}
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ExtCtrls, StdCtrls, ComCtrls, Math, Menus, ToolWin, Registry,
+ Grids, ValEdit, Buttons, ImgList, Types, StrUtils , Curves,
+ ControlPoint, XForm, cmap, CustomDrawControl, ClipBrd,
+ RenderingInterface, Translation, RenderThread, System.ImageList,
+ Vcl.Samples.Spin;
+
+type
+ TEditForm = class(TForm)
+ StatusBar: TStatusBar;
+ EditPopup: TPopupMenu;
+ mnuAdd: TMenuItem;
+ mnuAutoZoom: TMenuItem;
+ N1: TMenuItem;
+ mnuUndo: TMenuItem;
+ mnuRedo: TMenuItem;
+ QualityPopup: TPopupMenu;
+ mnuLowQuality: TMenuItem;
+ mnuMediumQuality: TMenuItem;
+ mnuHighQuality: TMenuItem;
+ N3: TMenuItem;
+ mnuResetLoc: TMenuItem;
+ N4: TMenuItem;
+ mnuFlipVertical: TMenuItem;
+ mnuFlipHorizontal: TMenuItem;
+ mnuFlipAllV: TMenuItem; //AV
+ mnuFlipAllH: TMenuItem; // AV
+ EditorToolBar: TToolBar;
+ tbAdd: TToolButton;
+ tbDuplicate: TToolButton;
+ tbDelete: TToolButton;
+ ToolButton4: TToolButton;
+ tbMove: TToolButton;
+ tbRotate: TToolButton;
+ ToolButton1: TToolButton;
+ tbUndo: TToolButton;
+ tbRedo: TToolButton;
+ tbScale: TToolButton;
+ tbFlipHorz: TToolButton;
+ tbFlipVert: TToolButton;
+ tbSelect: TToolButton;
+ EditorTB: TImageList;
+ tbResetAll: TToolButton;
+ ToolButton2: TToolButton;
+ tbVarPreview: TToolButton;
+ tbEnableFinalXform: TToolButton;
+ ToolButton3: TToolButton;
+ TrianglePopup: TPopupMenu;
+ mnuDuplicate: TMenuItem;
+ mnuDelete: TMenuItem;
+ mnuAdd1: TMenuItem;
+ N2: TMenuItem;
+ mnuShowVarPreview: TMenuItem;
+ mnuReset: TMenuItem;
+ N6: TMenuItem;
+ Rotatetriangle90CCW1: TMenuItem;
+ Rotatetriangle90CCW2: TMenuItem;
+ mnuResetTrgRotation: TMenuItem;
+ mnuResetTrgPosition: TMenuItem;
+ mnuResetTrgScale: TMenuItem;
+ N7: TMenuItem;
+ mnuExtendedEdit: TMenuItem;
+ N8: TMenuItem;
+ mnuAxisLock: TMenuItem;
+ mnuSelectmode: TMenuItem;
+ ToolButton6: TToolButton;
+ tbPivotMode: TToolButton;
+ tbRotate90CCW: TToolButton;
+ tbRotate90CW: TToolButton;
+ tbPostXswap: TToolButton;
+ oggleposttriangleediting1: TMenuItem;
+ mnuCopyTriangle: TMenuItem;
+ mnuPasteTriangle: TMenuItem;
+ ChaosPopup: TPopupMenu;
+ mnuChaosViewTo: TMenuItem;
+ mnuChaosViewFrom: TMenuItem;
+ N9: TMenuItem;
+ mnuChaosClearAll: TMenuItem;
+ mnuChaosSetAll: TMenuItem;
+ N10: TMenuItem;
+ mnuLinkPostxform: TMenuItem;
+ mnuLinkPrexform: TMenuItem;
+ mnuChaosRebuild: TMenuItem;
+ tbPostLink: TToolButton;
+ ToolButton8: TToolButton;
+ tbCopy: TToolButton;
+ tbPaste: TToolButton;
+ ToolButton11: TToolButton;
+ EditPnl: TPanel;
+ Splitter1: TSplitter;
+ GrphPnl: TPanel;
+ RightPanel: TPanel;
+ Splitter2: TSplitter;
+ ControlPanel: TPanel;
+ cbTransforms: TComboBox;
+ PageControl: TPageControl;
+ TriangleTab: TTabSheet;
+ TriangleScrollBox: TScrollBox;
+ TrianglePanel: TPanel;
+ TriangleToolBar: TToolBar;
+ tbCopyTriangle: TToolButton;
+ tbPasteTriangle: TToolButton;
+ tbExtendedEdit: TToolButton;
+ tbAxisLock: TToolButton;
+ tbAutoWeights: TToolButton;
+ tb2PostXswap: TToolButton;
+ tabXForm: TTabSheet;
+ tabColors: TTabSheet;
+ tabVariations: TTabSheet;
+ VEVars: TValueListEditor;
+ bClear: TBitBtn;
+ TabVariables: TTabSheet;
+ vleVariables: TValueListEditor;
+ chkCollapseVariables: TCheckBox;
+ TabChaos: TTabSheet;
+ vleChaos: TValueListEditor;
+ optFrom: TRadioButton;
+ optTo: TRadioButton;
+ txtP: TEdit;
+ pnlWeight: TPanel;
+ Panel1: TPanel;
+ txtName: TEdit;
+ Panel2: TPanel;
+ PrevPnl: TPanel;
+ PreviewImage: TImage;
+ GroupBox5: TGroupBox;
+ btTrgRotateLeft90: TSpeedButton;
+ btTrgRotateRight90: TSpeedButton;
+ btTrgScaleDown: TSpeedButton;
+ btTrgScaleUp: TSpeedButton;
+ btTrgMoveDown: TSpeedButton;
+ btTrgMoveLeft: TSpeedButton;
+ btTrgMoveRight: TSpeedButton;
+ btTrgMoveUp: TSpeedButton;
+ btTrgRotateLeft: TSpeedButton;
+ btTrgRotateRight: TSpeedButton;
+ txtTrgScaleValue: TComboBox;
+ txtTrgRotateValue: TComboBox;
+ txtTrgMoveValue: TComboBox;
+ GroupBox6: TGroupBox;
+ LabelC: TLabel;
+ LabelA: TLabel;
+ LabelB: TLabel;
+ txtAx: TEdit;
+ txtAy: TEdit;
+ txtBx: TEdit;
+ txtBy: TEdit;
+ txtCx: TEdit;
+ txtCy: TEdit;
+ ScrollBox1: TScrollBox;
+ GroupBox9: TGroupBox;
+ btnXcoefs: TSpeedButton;
+ btnYcoefs: TSpeedButton;
+ btnOcoefs: TSpeedButton;
+ btnResetCoefs: TSpeedButton;
+ txtA: TEdit;
+ txtB: TEdit;
+ txtC: TEdit;
+ txtD: TEdit;
+ txtE: TEdit;
+ txtF: TEdit;
+ spinA: TSpinButton;
+ spinB: TSpinButton;
+ spinC: TSpinButton;
+ spinD: TSpinButton;
+ spinE: TSpinButton;
+ spinF: TSpinButton;
+ GroupBox7: TGroupBox;
+ btnCoefsPolar: TSpeedButton;
+ btnCoefsRect: TSpeedButton;
+ GroupBox8: TGroupBox;
+ btnXpost: TSpeedButton;
+ btnYpost: TSpeedButton;
+ btnOpost: TSpeedButton;
+ btnResetPostCoefs: TSpeedButton;
+ txtPost00: TEdit;
+ txtPost01: TEdit;
+ txtPost10: TEdit;
+ txtPost11: TEdit;
+ txtPost20: TEdit;
+ txtPost21: TEdit;
+ spinPost00: TSpinButton;
+ spinPost01: TSpinButton;
+ spinPost10: TSpinButton;
+ spinPost11: TSpinButton;
+ spinPost20: TSpinButton;
+ spinPost21: TSpinButton;
+ chkAutoZscale: TCheckBox;
+ ScrollBox2: TScrollBox;
+ GroupBox1: TGroupBox;
+ pnlSymmetry: TPanel;
+ pnlXFormColor: TPanel;
+ shColor: TShape;
+ txtXFormColor: TEdit;
+ txtSymmetry: TEdit;
+ ColorBar: TPanel;
+ ColorBarPicture: TImage;
+ scrlXFormColor: TScrollBar;
+ pnlOpacity: TPanel;
+ txtOpacity: TEdit;
+ chkXformSolo: TCheckBox;
+ pnlDC: TPanel;
+ txtDC: TEdit;
+ GroupBox2: TGroupBox;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ trkVarPreviewDensity: TTrackBar;
+ trkVarPreviewRange: TTrackBar;
+ trkVarPreviewDepth: TTrackBar;
+ ImgTemp: TImage;
+ N11: TMenuItem;
+ mnuEHighQuality: TMenuItem;
+ mnuEMediumQuality: TMenuItem;
+ mnuELowQuality: TMenuItem;
+ Label4: TLabel;
+ txtSearchBox: TEdit;
+ ToolButton5: TToolButton;
+ btnMathPopup: TToolButton;
+ tbPreLink: TToolButton;
+ btnFullChaos: TToolButton;
+ btnResetSearch: TSpeedButton;
+ GroupBox3: TGroupBox;
+ btnResetPivot: TSpeedButton;
+ btnPickPivot: TSpeedButton;
+ btnPivotMode: TSpeedButton;
+ editPivotY: TEdit;
+ editPivotX: TEdit;
+ MathPopup: TPopupMenu;
+ InsertPi1: TMenuItem;
+ Insert2Pi1: TMenuItem;
+ InsertPi21: TMenuItem;
+ InsertPi31: TMenuItem;
+ InsertGoldenratio1: TMenuItem;
+ InsertPi41: TMenuItem;
+ InsertPi61: TMenuItem;
+ Insertsqrt321: TMenuItem;
+ Insertsqrt331: TMenuItem;
+ Pifractions: TMenuItem;
+ Insert1sqrt21: TMenuItem;
+ CopyMenu: TPopupMenu;
+ PasteMenu: TPopupMenu;
+ Copytrianglecoordinates1: TMenuItem;
+ Copytransform1: TMenuItem;
+ Pastetrianglecoordinates1: TMenuItem;
+ Pastetransform1: TMenuItem;
+ Squareroots1: TMenuItem;
+ Insertsqrt361: TMenuItem;
+ Insertsqrt31: TMenuItem;
+ TriangleOperations: TPopupMenu;
+ InvertMovevalue1: TMenuItem;
+ ShowModVals: TMenuItem;
+ tbTriangle: TToolButton;
+ InvCurrentNum: TMenuItem;
+ N12: TMenuItem;
+ ScaleX: TMenuItem;
+ ScaleY: TMenuItem;
+ N13: TMenuItem;
+ ScaleXYO: TMenuItem;
+ N14: TMenuItem;
+ RotateXYO: TMenuItem;
+ RotateX: TMenuItem;
+ RotateY: TMenuItem;
+ ScaleO: TMenuItem;
+ RotateO: TMenuItem;
+ GroupBox10: TGroupBox;
+ btnShowLine: TSpeedButton;
+ btnResetFlip: TSpeedButton;
+ btnFlip: TSpeedButton;
+ editFlipY: TEdit;
+ editFlipX: TEdit;
+ Label5: TLabel;
+ Label6: TLabel;
+ Label7: TLabel;
+ Label8: TLabel;
+ lblGridType: TLabel;
+ GridComboBox: TComboBox;
+ Mul2: TMenuItem;
+ Div2: TMenuItem;
+ Squarethenumber1: TMenuItem;
+ RectGrid: TMenuItem;
+ TriGrid: TMenuItem;
+ N15: TMenuItem;
+ NormChaos: TMenuItem;
+ SpinPivotX: TSpinButton;
+ SpinPivotY: TSpinButton;
+ SpinFlipX: TSpinButton;
+ SpinFlipY: TSpinButton;
+ lblFlipAngle: TLabel;
+ RandomizeMatrix: TMenuItem;
+ btSwapCoefs: TButton;
+ CalcArcsinScale: TMenuItem;
+ N16: TMenuItem;
+ mnuFlipAllLine: TMenuItem;
+ btResetChaos: TButton;
+ ResetChaos: TMenuItem;
+ btClearChaos: TButton;
+ RandomizeChaos: TMenuItem;
+ N17: TMenuItem;
+ ChaosClearBelow: TMenuItem;
+ ClearAllAbove: TMenuItem;
+ btConjugate: TButton;
+ AddContainer: TMenuItem;
+ N18: TMenuItem;
+ CalcCos: TMenuItem;
+ CalcSin: TMenuItem;
+ CalcTan: TMenuItem;
+ UseDegrees: TMenuItem;
+ InheritWeights: TMenuItem;
+ InvertXaos: TMenuItem;
+ SquareRoot: TMenuItem;
+ btFlipX: TButton;
+ btFlipY: TButton;
+ btFlipDiag: TButton;
+ mnuResetTrgFlip: TMenuItem;
+ btChaos: TButton;
+ SpinXx: TSpinButton;
+ SpinYx: TSpinButton;
+ SpinOx: TSpinButton;
+ SpinXy: TSpinButton;
+ SpinYy: TSpinButton;
+ SpinOy: TSpinButton;
+ IconsAV: TImageList;
+ N19: TMenuItem;
+ ShowChaosMatrix: TMenuItem;
+ btnVarOrder: TBitBtn;
+ cbCollapseVariations: TComboBox;
+ btResetParams: TButton;
+ procedure btnResetSearchClick(Sender: TObject);
+ procedure txtSearchBoxKeyPress(Sender: TObject; var Key: Char);
+ // procedure txtSearchBoxChange(Sender: TObject);
+ procedure FormActivate(Sender: TObject);
+ procedure ScrollBox1Resize(Sender: TObject);
+ procedure ScrollBox2Resize(Sender: TObject);
+ procedure ControlPanelResize(Sender: TObject);
+ procedure TrianglePanelResize(Sender: TObject);
+
+ procedure ValidateVariable;
+ procedure vleVariablesValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: string);
+ procedure vleVariablesKeyPress(Sender: TObject; var Key: Char);
+ procedure vleVariablesExit(Sender: TObject);
+
+ procedure FormCreate(Sender: TObject);
+
+ procedure TriangleViewMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: integer);
+ procedure TriangleViewMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: integer);
+ procedure TriangleViewMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: integer);
+ procedure TriangleViewMouseWheel(Sender: TObject; Shift: TShiftState;
+ WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
+ procedure TriangleViewDblClick(Sender: TObject);
+ procedure TriangleViewKeyDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ procedure TriangleViewKeyUp(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ procedure TriangleViewExit(Sender: TObject);
+ procedure TriangleViewMouseLeave(Sender: TObject);
+ procedure TriangleViewInvalidate(Sender: TObject);
+
+ procedure FormShow(Sender: TObject);
+ procedure mnuDeleteClick(Sender: TObject);
+ procedure mnuAddClick(Sender: TObject);
+ procedure mnuDupClick(Sender: TObject);
+ procedure mnuAutoZoomClick(Sender: TObject);
+ procedure btnCloseClick(Sender: TObject);
+ procedure FormResize(Sender: TObject);
+ procedure txtPKeyPress(Sender: TObject; var Key: Char);
+ procedure CornerEditKeyPress(Sender: TObject; var Key: Char);
+ procedure CornerEditExit(Sender: TObject);
+ procedure txtPExit(Sender: TObject);
+ procedure DrawPreview;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure mnuUndoClick(Sender: TObject);
+ procedure mnuRedoClick(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure mnuLowQualityClick(Sender: TObject);
+ procedure mnuHighQualityClick(Sender: TObject);
+ procedure mnuMediumQualityClick(Sender: TObject);
+ procedure mnuResetLocClick(Sender: TObject);
+ procedure mnuFlipAllVClick(Sender: TObject);
+ procedure mnuFlipAllHClick(Sender: TObject);
+ procedure mnuFlipVerticalClick(Sender: TObject);
+ procedure mnuFlipHorizontalClick(Sender: TObject);
+ procedure cbTransformsChange(Sender: TObject);
+ procedure CoefKeyPress(Sender: TObject; var Key: Char);
+ procedure CoefValidate(Sender: TObject);
+ procedure scrlXFormColorScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+ procedure scrlXFormColorChange(Sender: TObject);
+// procedure chkUseXFormColorClick(Sender: TObject);
+// procedure chkHelpersClick(Sender: TObject);
+ procedure txtXFormColorExit(Sender: TObject);
+ procedure txtXFormColorKeyPress(Sender: TObject; var Key: Char);
+ procedure txtSymmetrySet(Sender: TObject);
+ procedure txtSymmetrKeyPress(Sender: TObject; var Key: Char);
+ procedure txtDCSet(Sender: TObject);
+ procedure txtDCKeyPress(Sender: TObject; var Key: Char);
+ procedure txtOpacitySet(Sender: TObject);
+ procedure txtOpacityKeyPress(Sender: TObject; var Key: Char);
+
+ procedure btTrgRotateLeftClick(Sender: TObject);
+ procedure btTrgRotateRightClick(Sender: TObject);
+ procedure btTrgRotateLeft90Click(Sender: TObject);
+ procedure btTrgRotateRight90Click(Sender: TObject);
+ procedure TrgMove(dx, dy: double);
+ procedure btTrgMoveLeftClick(Sender: TObject);
+ procedure btTrgMoveRightClick(Sender: TObject);
+ procedure btTrgMoveUpClick(Sender: TObject);
+ procedure btTrgMoveDownClick(Sender: TObject);
+ procedure btTrgScaleUpClick(Sender: TObject);
+ procedure btTrgScaleDownClick(Sender: TObject);
+ procedure splitterMoved(Sender: TObject);
+ procedure tbSelectClick(Sender: TObject);
+ procedure EditKeyPress(Sender: TObject; var Key: Char);
+ procedure tbEditModeClick(Sender: TObject);
+
+ procedure ValidateVariation;
+// procedure ValidateValue(Sender: TObject);
+ procedure VEVarsKeyPress(Sender: TObject; var Key: Char);
+ procedure VEVarsChange(Sender: TObject);
+ procedure VEVarsValidate(Sender: TObject; ACol, ARow: Integer;
+ const KeyName, KeyValue: String);
+ procedure VEVarsMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure VEVarsMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure VEVarsMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure VEVarsDblClick(Sender: TObject);
+
+ procedure cbTransformsDrawItem(Control: TWinControl; Index: Integer;
+ Rect: TRect; State: TOwnerDrawState);
+
+ procedure tbFullViewClick(Sender: TObject);
+
+ procedure EditKeyDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ procedure txtValidateValue(Sender: TObject);
+ procedure txtValKeyPress(Sender: TObject; var Key: Char);
+ procedure mnuResetTriangleClick(Sender: TObject);
+ procedure mnuResetAllClick(Sender: TObject);
+ procedure btnXcoefsClick(Sender: TObject);
+ procedure btnYcoefsClick(Sender: TObject);
+ procedure btnOcoefsClick(Sender: TObject);
+ procedure btnCoefsModeClick(Sender: TObject);
+ procedure tbVarPreviewClick(Sender: TObject);
+ procedure trkVarPreviewRangeChange(Sender: TObject);
+ procedure trkVarPreviewDensityChange(Sender: TObject);
+ procedure trkVarPreviewDepthChange(Sender: TObject);
+ procedure btnXpostClick(Sender: TObject);
+ procedure btnYpostClick(Sender: TObject);
+ procedure btnOpostClick(Sender: TObject);
+ procedure PostCoefValidate(Sender: TObject);
+ procedure PostCoefKeypress(Sender: TObject; var Key: Char);
+ procedure btnResetCoefsClick(Sender: TObject);
+ procedure btnResetPostCoefsClick(Sender: TObject);
+ procedure btnPivotModeClick(Sender: TObject);
+ procedure PivotValidate(Sender: TObject);
+ procedure PivotKeyPress(Sender: TObject; var Key: Char);
+ procedure btnResetPivotClick(Sender: TObject);
+ procedure btnPickPivotClick(Sender: TObject);
+ procedure VEVarsDrawCell(Sender: TObject; ACol, ARow: Integer;
+ Rect: TRect; State: TGridDrawState);
+ procedure tbEnableFinalXformClick(Sender: TObject);
+ procedure DragPanelMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure DragPanelMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure DragPanelMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure DragPanelDblClick(Sender: TObject);
+ procedure mnuResetTrgRotationClick(Sender: TObject);
+ procedure mnuResetTrgScaleClick(Sender: TObject);
+ procedure ResetAxisRotation(n: integer);
+ procedure ResetAxisScale(n: integer);
+ procedure tbExtendedEditClick(Sender: TObject);
+ procedure tbAxisLockClick(Sender: TObject);
+ procedure tbPostXswapClick(Sender: TObject);
+ procedure btnCopyTriangleClick(Sender: TObject);
+ procedure btnPasteTriangleClick(Sender: TObject);
+ procedure chkAutoZscaleClick(Sender: TObject);
+ procedure ValidateChaos;
+ procedure vleChaosExit(Sender: TObject);
+ procedure vleChaosKeyPress(Sender: TObject; var Key: Char);
+ procedure vleChaosValidate(Sender: TObject; ACol, ARow: Integer;
+ const KeyName, KeyValue: String);
+ procedure VleChaosDrawCell(Sender: TObject; ACol, ARow: Integer;
+ Rect: TRect; State: TGridDrawState);
+ procedure mnuChaosViewToClick(Sender: TObject);
+ procedure mnuChaosViewFromClick(Sender: TObject);
+ // procedure chkPlotModeClick(Sender: TObject);
+ procedure mnuChaosClearAllClick(Sender: TObject);
+ procedure mnuChaosSetAllClick(Sender: TObject);
+ procedure mnuLinkPostxformClick(Sender: TObject);
+ procedure mnuLinkPrexformClick(Sender: TObject);
+ procedure chkXformSoloClick(Sender: TObject);
+ procedure mnuChaosRebuildClick(Sender: TObject);
+ procedure chkCollapseVariationsClick(Sender: TObject);
+ procedure chkCollapseVariablesClick(Sender: TObject);
+ procedure shColorMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure shColorMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure shColorMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure bClearClick(Sender: TObject);
+ procedure ColorBarMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ // procedure btnLoadVVARClick(Sender: TObject);
+ procedure txtNameKeyPress(Sender: TObject; var Key: Char);
+ procedure txtNameExit(Sender: TObject);
+ procedure InsertPi1Click(Sender: TObject);
+ procedure Copytransform1Click(Sender: TObject);
+ procedure Pastetransform1Click(Sender: TObject);
+ procedure btResetparamsClick(Sender: TObject);
+ procedure SpinButtonDownClick(Sender: TObject);
+ procedure SpinButtonUpClick(Sender: TObject);
+ procedure InvertMovevalue1Click(Sender: TObject);
+ procedure InvCurrentNumClick(Sender: TObject);
+ procedure btnFlipClick(Sender: TObject);
+ procedure btnResetFlipClick(Sender: TObject);
+ procedure FlipPointKeyPress(Sender: TObject; var Key: Char);
+ procedure FlipPointValidate(Sender: TObject);
+ procedure btnShowLineClick(Sender: TObject);
+ procedure GridComboBoxChange(Sender: TObject);
+ procedure MulDiv2Click(Sender: TObject);
+ procedure NormChaosClick(Sender: TObject);
+ procedure RandomizeMatrixClick(Sender: TObject);
+ procedure btSwapCoefsClick(Sender: TObject);
+ procedure CalcArcsinScaleClick(Sender: TObject);
+ procedure mnuFlipAllLineClick(Sender: TObject);
+ procedure ResetChaosClick(Sender: TObject);
+ procedure ChaosClearBelowClick(Sender: TObject);
+ procedure ClearAllAboveClick(Sender: TObject);
+ procedure btConjugateClick(Sender: TObject);
+ procedure AddContainerClick(Sender: TObject);
+ procedure ResetToolsDblClick(Sender: TObject);
+ procedure CalcCosClick(Sender: TObject);
+ procedure InvertXaosClick(Sender: TObject);
+ procedure btFlipXYClick(Sender: TObject);
+ procedure AffineCoefsDblClick(Sender: TObject);
+ procedure mnuResetTrgFlipClick(Sender: TObject);
+ procedure btChaosClick(Sender: TObject);
+ procedure mnuChangeGridClick(Sender: TObject);
+// procedure btnInvisibleClick(Sender: TObject);
+// procedure btnSoloClick(Sender: TObject);
+ procedure ExtSysMenu(var Msg: TMessage); message WM_SysCommand;
+ procedure TriangleOperationsClick(Sender: TObject);
+ procedure btnFullChaosClick(Sender: TObject);
+ procedure btnVarOrderClick(Sender: TObject);
+ procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean); // AV
+ private
+ TriangleView: TCustomDrawControl;
+ cmap: TColorMap;
+ PreviewDensity: double;
+
+ viewDragMode, viewDragged: boolean;
+ editMode, oldMode, widgetMode: (modeNone, modeMove, modeRotate, modeScale, modePick);
+ modeHack: boolean; // for mouseOverEdge...
+ modeKey: word;
+ key_handled: boolean;
+ updating: boolean;
+
+ MousePos: TPoint; // in screen coordinates
+ mouseOverTriangle, mouseOverEdge, mouseOverCorner, mouseOverWidget: integer;
+ mouseOverPos: TSPoint;
+
+ Widgets: array[0..3] of array [0..2] of TSPoint;
+ xx, xy, yx, yy: double;
+
+ varDragMode: boolean;
+ varDragIndex: integer;
+ varDragValue: double;
+ varDragPos, varDragOld: integer;
+ varMM: boolean; //hack?
+ pDragValue: ^double;
+
+ SelectMode, ExtendedEdit, AxisLock: boolean;
+ showVarPreview: boolean;
+ ShowFlipLine: boolean; // AV
+ hasLinkX: boolean; // AV
+
+ GraphZoom: double;
+ TriangleCaught, CornerCaught, EdgeCaught: boolean;
+ LocalAxisLocked: boolean;
+ oldSelected: integer;
+ SelectedCorner: integer;
+ HasChanged: boolean;
+
+ oldTriangle: TTriangle;
+ gCenterX: double;
+ gCenterY: double;
+
+ MemTriangle: TTriangle;
+
+ oldx, oldy, olddist: double;
+ Pivot, FlipPoint, fl: TSPoint;
+
+ VarsCache: array of double; // AV: now length is sets dynamically
+ // hack: to prevent slow valuelist redraw
+ // -JF- 64 wasn't big enough... buffer overrun
+
+ BackgroundBmp : TBitmap;
+ Renderer : TRenderThread;
+
+ pnlDragMode: boolean;
+ pnlDragPos, pnlDragOld: integer;
+ pnlDragValue: double;
+
+ LastFocus: TEdit;
+
+ procedure UpdateFlameX;
+ procedure UpdateFlame(DrawMain: boolean);
+ procedure UpdateWidgets;
+ procedure UpdateXformsList;
+ procedure UpdateVariationList; // AV
+
+ procedure DeleteTriangle(t: integer);
+
+ function GetPivot: TSPoint; overload;
+ function GetPivot(n: integer): TSPoint; overload;
+
+ procedure ShowSelectedInfo;
+ procedure Scale(var fx, fy: double; x, y: integer);
+
+ procedure TriangleViewPaint(Sender: TObject);
+ procedure AutoZoom;
+
+ procedure KeyInput(str: string);
+ procedure CalcFlip;
+ function ValidNumField: boolean; inline; // AV: check active edit
+ public
+ cp: TControlPoint;
+ Render: TRenderer;
+
+ // Accessible from scripter
+ SelectedTriangle: integer; // outside only for scripting
+ PivotMode: (pivotLocal, pivotWorld);
+ LocalPivot, WorldPivot: TSPoint;
+
+ procedure UpdatePreview;
+ procedure UpdateDisplay(PreviewOnly: boolean = false); //(?)
+
+ function GetTriangleColor(n: integer): TColor;
+ function LastTriangle: integer;
+ function InsideTriangle(x, y: double): integer;
+
+ procedure ScriptGetPivot(var px, py: double);
+ // procedure InvokeResetAll;
+ procedure UpdateColorBar;
+
+ procedure PaintBackground;
+ procedure CreateScreenShot;
+ procedure RedrawButtons;
+ end;
+
+const
+ {TrgColors: array[-1..13] of TColor = (clGray,
+ $0000ff, $00ffff, $00ff00, $ffff00, $ff0000, $ff00ff, $007fff,
+ $7f00ff, $55ffff, $ccffcc, $ffffaa, $ff7f7f, $ffaaff, $55ccff );}
+ TrgColors: array[-1..13] of TColor = (clGray,
+ $0000ff, $00cccc, $00cc00, $cccc00, $ff4040, $cc00cc, $0080cc,
+ $4f0080, $228080, $608060, $808050, $804f4f, $805080, $226080 );
+
+var
+ EditForm: TEditForm;
+
+function ColorValToColor(c: TColorMap; index: double): TColor;
+function FlipTriangleVertical(t: TTriangle): TTriangle;
+function FlipTriangleHorizontal(t: TTriangle): TTriangle;
+function RotateTriangle(t: TTriangle; rad: double): TTriangle;
+function OffsetTriangle(t: TTriangle; range: double): TTriangle;
+function ScaleTriangle(t: TTriangle; scale: double): TTriangle;
+function RotateTriangleCenter(t: TTriangle; rad: double): TTriangle;
+function RotateTrianglePoint(t: TTriangle; xr, yr: double; rad: double): TTriangle;
+function Centroid(t: TTriangle): TSPoint;
+function OffsetTriangleRandom(t: TTriangle): TTriangle;
+function ScaleTriangleCenter(t: TTriangle; scale: double): TTriangle;
+function ScaleTrianglePoint(t: TTriangle; x, y, scale: double): TTriangle;
+// AV: new operations
+function ScaleTriangleXY(t: TTriangle; axis: integer; scale: double): TTriangle;
+function ScaleTriangleO(t: TTriangle; x, y, scale: double): TTriangle;
+function RotateTriangleO(t: TTriangle; x, y, rad: double): TTriangle;
+function RotateTriangleXY(t: TTriangle; axis: integer; rad: double): TTriangle;
+function FlipTriangleLine(t: TTriangle; x, y, fx, fy: double): TTriangle;
+
+implementation
+
+uses
+ Main, Global, Adjust, Mutate, XformMan, Chaos, VarOrderForm;
+
+{$R *.DFM}
+
+{ Triangle transformations }
+
+function OffsetTriangleRandom(t: TTriangle): TTriangle;
+var
+ r: integer;
+begin
+ r := random(3);
+ Result.x[r] := t.x[r] + random - 0.5;
+ Result.y[r] := t.y[r] + random - 0.5;
+end;
+
+function FlipTriangleVertical(t: TTriangle): TTriangle;
+begin
+ Result := t;
+ Result.y[0] := -t.y[0];
+ Result.y[1] := -t.y[1];
+ Result.y[2] := -t.y[2];
+end;
+
+function FlipTriangleHorizontal(t: TTriangle): TTriangle;
+begin
+ Result := t;
+ Result.x[0] := -t.x[0];
+ Result.x[1] := -t.x[1];
+ Result.x[2] := -t.x[2];
+end;
+
+function FlipTriangleLine(t: TTriangle; x, y, fx, fy: double): TTriangle; // AV
+var
+ N: TSpoint;
+ N2: double;
+begin
+ N.x := fy - y;
+ N.y := -(fx - x);
+ N2 := 2 / (N.x * N.x + N.y * N.y);
+
+ Result.x[0] := t.x[0] - N2 *((t.x[0] - x) * N.x + (t.y[0] - y) * N.y)* N.x;
+ Result.y[0] := t.y[0] - N2 *((t.x[0] - x) * N.x + (t.y[0] - y) * N.y)* N.y;
+ Result.x[1] := t.x[1] - N2 *((t.x[1] - x) * N.x + (t.y[1] - y) * N.y)* N.x;
+ Result.y[1] := t.y[1] - N2 *((t.x[1] - x) * N.x + (t.y[1] - y) * N.y)* N.y;
+ Result.x[2] := t.x[2] - N2 *((t.x[2] - x) * N.x + (t.y[2] - y) * N.y)* N.x;
+ Result.y[2] := t.y[2] - N2 *((t.x[2] - x) * N.x + (t.y[2] - y) * N.y)* N.y;
+end;
+
+function ScaleTriangle(t: TTriangle; scale: double): TTriangle;
+begin
+ Result.y[0] := scale * t.y[0];
+ Result.y[1] := scale * t.y[1];
+ Result.y[2] := scale * t.y[2];
+ Result.x[0] := scale * t.x[0];
+ Result.x[1] := scale * t.x[1];
+ Result.x[2] := scale * t.x[2];
+end;
+
+function ScaleTriangleXY(t: TTriangle; axis: integer; scale: double): TTriangle; // AV
+begin
+ Result := t;
+ if scale < 1e-64 then Exit;
+ Result.x[axis] := scale * (t.x[axis] - t.x[1]) + t.x[1];
+ Result.y[axis] := scale * (t.y[axis] - t.y[1]) + t.y[1];
+end;
+
+function ScaleTriangleO(t: TTriangle; x, y, scale: double): TTriangle; // AV
+begin
+ Result.x[1] := scale * (t.x[1] - x) + x;
+ Result.y[1] := scale * (t.y[1] - y) + y;
+ Result.x[0] := t.x[0] - t.x[1] + Result.x[1];
+ Result.y[0] := t.y[0] - t.y[1] + Result.y[1];
+ Result.x[2] := t.x[2] - t.x[1] + Result.x[1];
+ Result.y[2] := t.y[2] - t.y[1] + Result.y[1];
+end;
+
+function RotateTriangleO(t: TTriangle; x, y, rad: double): TTriangle;
+begin
+ Result.x[1] := x + (t.x[1] - x) * cos(rad) - (t.y[1] - y) * sin(rad);
+ Result.y[1] := y + (t.x[1] - x) * sin(rad) + (t.y[1] - y) * cos(rad);
+ Result.x[0] := t.x[0] - t.x[1] + Result.x[1];
+ Result.y[0] := t.y[0] - t.y[1] + Result.y[1];
+ Result.x[2] := t.x[2] - t.x[1] + Result.x[1];
+ Result.y[2] := t.y[2] - t.y[1] + Result.y[1];
+end;
+
+function RotateTriangleXY(t: TTriangle; axis: integer; rad: double): TTriangle; // AV
+begin
+ Result := t;
+ Result.x[axis] := t.x[1] + (t.x[axis] - t.x[1]) * cos(rad) - (t.y[axis] - t.y[1]) * sin(rad);
+ Result.y[axis] := t.y[1] + (t.x[axis] - t.x[1]) * sin(rad) + (t.y[axis] - t.y[1]) * cos(rad);
+end;
+
+function Centroid(t: TTriangle): TSPoint;
+begin
+ Result.x := (t.x[0] + t.x[1] + t.x[2]) / 3;
+ Result.y := (t.y[0] + t.y[1] + t.y[2]) / 3;
+end;
+
+function ScaleTriangleCenter(t: TTriangle; scale: double): TTriangle;
+var
+ xr, yr: double;
+ z: TSPoint;
+begin
+ assert(scale <> 0);
+
+ z := Centroid(t);
+ xr := z.x;
+ yr := z.y;
+ Result.y[0] := scale * (t.y[0] - yr) + yr;
+ Result.y[1] := scale * (t.y[1] - yr) + yr;
+ Result.y[2] := scale * (t.y[2] - yr) + yr;
+ Result.x[0] := scale * (t.x[0] - xr) + xr;
+ Result.x[1] := scale * (t.x[1] - xr) + xr;
+ Result.x[2] := scale * (t.x[2] - xr) + xr;
+end;
+
+function ScaleTrianglePoint(t: TTriangle; x, y, scale: double): TTriangle;
+begin
+ //assert(scale <> 0);
+ if scale = 0 then scale := 1e-64;
+
+ Result.y[0] := scale * (t.y[0] - y) + y;
+ Result.y[1] := scale * (t.y[1] - y) + y;
+ Result.y[2] := scale * (t.y[2] - y) + y;
+ Result.x[0] := scale * (t.x[0] - x) + x;
+ Result.x[1] := scale * (t.x[1] - x) + x;
+ Result.x[2] := scale * (t.x[2] - x) + x;
+end;
+
+function RotateTriangle(t: TTriangle; rad: double): TTriangle; //rad in Radians
+var
+ i: integer;
+begin
+ for i := 0 to 2 do
+ begin
+ Result.x[i] := t.x[i] * cos(rad) - t.y[i] * sin(rad);
+ Result.y[i] := t.x[i] * sin(rad) + t.y[i] * cos(rad);
+ end;
+end;
+
+function OffsetTriangle(t: TTriangle; range: double): TTriangle;
+var
+ i: integer;
+ r: double;
+begin
+ r := (random * 2 * range) - range;
+ for i := 0 to 2 do
+ begin
+ Result.x[i] := t.x[i] + r;
+ Result.y[i] := t.y[i] + r;
+ end;
+end;
+
+function RotateTriangleCenter(t: TTriangle; rad: double): TTriangle;
+var
+ i: integer;
+ xr, yr: double;
+ z: TSPoint;
+begin
+ z := Centroid(t);
+ xr := z.x;
+ yr := z.y;
+ for i := 0 to 2 do
+ begin
+ Result.x[i] := xr + (t.x[i] - xr) * cos(rad) - (t.y[i] - yr) * sin(rad);
+ Result.y[i] := yr + (t.x[i] - xr) * sin(rad) + (t.y[i] - yr) * cos(rad);
+ end;
+end;
+
+function RotateTrianglePoint(t: TTriangle; xr, yr: double; rad: double): TTriangle;
+var
+ i: integer;
+begin
+ for i := 0 to 2 do
+ begin
+ Result.x[i] := xr + (t.x[i] - xr) * cos(rad) - (t.y[i] - yr) * sin(rad);
+ Result.y[i] := yr + (t.x[i] - xr) * sin(rad) + (t.y[i] - yr) * cos(rad);
+ end;
+end;
+
+function ColorValToColor(c: TColorMap; index: double): TColor;
+var
+ i: integer;
+begin
+ i := Trunc(Index * 255);
+ assert(i >= 0);
+ assert(i < 256);
+ result := c[i][2] shl 16 + c[i][1] shl 8 + c[i][0];
+end;
+
+procedure TEditForm.UpdatePreview;
+var
+ pw, ph: integer;
+begin
+ pw := PrevPnl.Width -2;
+ ph := PrevPnl.Height -2;
+ if (cp.width / cp.height) > (pw / ph) then
+ begin
+ PreviewImage.Width := pw;
+ assert(pw <> 0);
+ PreviewImage.Height := round(cp.height / cp.Width * pw);
+ PreviewImage.Left := 1;
+ PreviewImage.Top := (ph - PreviewImage.Height) div 2;
+ end
+ else begin
+ PreviewImage.Height := ph;
+ assert(ph <> 0);
+ PreviewImage.Width := round(cp.Width / cp.Height * ph);
+ PreviewImage.Top := 1;
+ PreviewImage.Left := (pw - PreviewImage.Width) div 2;
+ end;
+ cp.AdjustScale(PreviewImage.Width, PreviewImage.Height);
+ DrawPreview;
+ TriangleViewPaint(TriangleView);
+end;
+
+procedure TEditForm.UpdateVariationList; // AV: adjust the var_order
+var
+ i: integer;
+ svars: TStringList;
+begin
+ svars := TStringList.Create;
+ with cp.xform[SelectedTriangle] do
+ for i := 0 to NrVar-1 do
+ svars.AddPair(ifs[i], Round6(GetVariation(GetVariationIndex(ifs[i]))).ToString);
+ VEVars.Strings.Assign(svars);
+ svars.Free;
+end;
+
+procedure TEditForm.UpdateXformsList;
+var
+ i, n: integer;
+ prefix: string;
+begin
+ cbTransforms.Clear;
+ for i := 1 to Transforms do begin
+ cbTransforms.Items.Add(IntToStr(i));
+ end;
+ if EnableFinalXform or cp.HasFinalXForm then
+ cbTransforms.Items.Add(TextByKey('editor-common-finalxformlistitem'));
+ cbTransforms.ItemIndex := SelectedTriangle;
+
+ if mnuChaosViewTo.Checked then prefix := TextByKey('editor-common-toprefix')
+ else prefix := TextByKey('editor-common-fromprefix');
+ n := Transforms + 1;
+ while vleChaos.RowCount > n do
+ vleChaos.DeleteRow(vleChaos.RowCount-1);
+ while vleChaos.RowCount < n do
+ vleChaos.InsertRow(Format(prefix, [vleChaos.RowCount]), '1', true);
+
+ UpdateVariationList; // AV
+ chkCollapseVariablesClick(nil);
+ chkCollapseVariationsClick(nil);
+end;
+
+procedure TEditForm.UpdateDisplay(PreviewOnly: boolean = false);
+begin
+ // currently EditForm does not really know if we select another
+ // flame in the Main Window - which is not good...
+
+ cp.copy(MainCp);
+
+ if SelectedTriangle > LastTriangle{???} then
+ begin
+ SelectedTriangle := cp.NumXForms-1;
+ mouseOverTriangle := -1;
+ end;
+
+ EnableFinalXform := cp.finalXformEnabled;
+ tbEnableFinalXform.Down := EnableFinalXform;
+
+ UpdatePreview;
+
+ if PreviewOnly then exit;
+
+ cp.cmap := MainCp.cmap;
+ cmap := MainCp.cmap;
+
+ UpdateXformsList;
+ UpdateColorBar;
+ UpdateVariationList; // AV
+
+ // just in case:
+ SetCaptureControl(nil);
+ HasChanged := false;
+// viewDragMode := false;
+ varDragMode := false;
+ pnlDragMode := false;
+ CornerCaught := false;
+ EdgeCaught := false;
+ TriangleCaught := false;
+
+ cp.TrianglesFromCP(MainTriangles);
+
+ ShowSelectedInfo;
+ if MainForm.UndoIndex = 0 then AutoZoom // auto-zoom only on 'new' flame
+ else TriangleView.Invalidate;
+end;
+
+procedure TEditForm.DrawPreview;
+begin
+ if EnableEditorPreview then exit;
+
+ //Render.Stop;
+ cp.sample_density := PreviewDensity;
+ cp.spatial_oversample := defOversample;
+ cp.spatial_filter_radius := defFilterRadius;
+ if mnuResetLoc.checked then
+ begin
+ cp.zoom := 0;
+ cp.CalcBoundbox;
+ end;
+
+ cp.cmap := MainCp.cmap;
+ Render.SetCP(cp);
+ Render.Render;
+ PreviewImage.Picture.Bitmap.Assign(Render.GetImage);
+ PreviewImage.refresh;
+end;
+
+procedure TEditForm.ShowSelectedInfo;
+var
+ i: integer;
+ v: double;
+ strval: string;
+begin
+ updating := true;
+
+ if (SelectedTriangle > LastTriangle) then
+ SelectedTriangle := LastTriangle;
+
+ for i := 0 to Transforms - 1 do
+ begin
+ // AV: it's technically impossible inside this loop
+ {
+ if (i >= Transforms) then begin
+ if (cbTransforms.Items.Count > Transforms) then
+ cbTransforms.Items[i] := TextByKey('editor-common-finalxformlistitem');
+ end else begin
+ n := i + 1;
+ }
+ if (cp.xform[i].TransformName <> '') then
+ cbTransforms.Items[i] := IntToStr(i + 1) + ' - ' + cp.xform[i].TransformName
+ else
+ cbTransforms.Items[i] := IntToStr(i + 1);
+ // end;
+ end;
+
+ cbTransforms.ItemIndex := SelectedTriangle;
+ cbTransforms.Refresh;
+
+ with MainTriangles[SelectedTriangle] do
+ begin
+ txtAx.text := Format('%.6g', [x[0]]);
+ txtAy.text := Format('%.6g', [y[0]]);
+ txtBx.text := Format('%.6g', [x[1]]);
+ txtBy.text := Format('%.6g', [y[1]]);
+ txtCx.text := Format('%.6g', [x[2]]);
+ txtCy.text := Format('%.6g', [y[2]]);
+ end;
+
+ with cp.xform[SelectedTriangle] do
+ begin
+ if btnCoefsRect.Down then begin
+ txtA.text := Format('%.6g', [ c[0][0]]);
+ txtB.text := Format('%.6g', [-c[0][1]]);
+ txtC.text := Format('%.6g', [-c[1][0]]);
+ txtD.text := Format('%.6g', [ c[1][1]]);
+ txtE.text := Format('%.6g', [ c[2][0]]);
+ txtF.text := Format('%.6g', [-c[2][1]]);
+ txtPost00.text := Format('%.6g', [ p[0][0]]);
+ txtPost01.text := Format('%.6g', [-p[0][1]]);
+ txtPost10.text := Format('%.6g', [-p[1][0]]);
+ txtPost11.text := Format('%.6g', [ p[1][1]]);
+ txtPost20.text := Format('%.6g', [ p[2][0]]);
+ txtPost21.text := Format('%.6g', [-p[2][1]]);
+ end
+ else begin
+ txtA.text := Format('%.6g', [Hypot(c[0][0], c[0][1])]);
+ txtB.text := Format('%.6g', [arctan2(-c[0][1], c[0][0])*180/PI]);
+ txtC.text := Format('%.6g', [Hypot(c[1][0], c[1][1])]);
+ txtD.text := Format('%.6g', [arctan2(c[1][1], -c[1][0])*180/PI]);
+ txtE.text := Format('%.6g', [Hypot(c[2][0], c[2][1])]);
+ txtF.text := Format('%.6g', [arctan2(-c[2][1], c[2][0])*180/PI]);
+ txtPost00.text := Format('%.6g', [Hypot(p[0][0], p[0][1])]);
+ txtPost01.text := Format('%.6g', [arctan2(-p[0][1], p[0][0])*180/PI]);
+ txtPost10.text := Format('%.6g', [Hypot(p[1][0], p[1][1])]);
+ txtPost11.text := Format('%.6g', [arctan2(p[1][1], -p[1][0])*180/PI]);
+ txtPost20.text := Format('%.6g', [Hypot(p[2][0], p[2][1])]);
+ txtPost21.text := Format('%.6g', [arctan2(-p[2][1], p[2][0])*180/PI]);
+ end;
+
+ tbPostXswap.Down := postXswap;
+ tb2PostXswap.Down := postXswap;
+
+ CalcFlip; // AV
+
+ if postXswap then begin // AV: simplified
+ GroupBox9.Font.Style := [];
+ GroupBox8.Font.Style := [fsBold];
+ end
+ else begin
+ GroupBox8.Font.Style := [];
+ GroupBox9.Font.Style := [fsBold];
+ end;
+
+ chkAutoZscale.Checked := autoZscale;
+
+ txtName.Text := TransformName;
+ if (SelectedTriangle >= Transforms) then
+ begin
+ txtName.Text := 'n/a';
+ end;
+
+ if SelectedTriangle < Transforms then
+ begin
+ txtP.text := Format('%.6g', [density]);
+ txtP.Enabled := true;
+ txtName.Enabled := true;
+ vleChaos.Enabled := true;
+ optTo.Enabled := True; // AV
+ optFrom.Enabled := True; // AV
+ //chkXformInvisible.Enabled := true;
+ //chkXformInvisible.Checked := (transOpacity = 0);
+ chkXformSolo.Enabled := true;
+ txtOpacity.Enabled := true;
+ txtDC.Enabled := true;
+ btChaos.Visible := True; // AV
+ btClearChaos.Visible := True; // AV
+ btResetChaos.Visible := True; // AV
+
+ if cp.soloXform >= 0 then begin
+ chkXformSolo.Checked := true;
+ chkXformSolo.Caption := Format(TextByKey('editor-tab-color-togglesoloformat'), [cp.soloXform + 1]);
+ end
+ else begin
+ chkXformSolo.Checked := false;
+ chkXformSolo.Caption := TextByKey('editor-tab-color-togglesolo');
+ end;
+ end
+ else begin // disable controls for FinalXform
+ txtP.Enabled := false;
+ txtP.Text := 'n/a';
+ txtName.Enabled := false;
+ vleChaos.Enabled := false;
+ btChaos.Visible := False; // AV
+ btClearChaos.Visible := False; // AV
+ btResetChaos.Visible := False; // AV
+ optTo.Enabled := False; // AV
+ optFrom.Enabled := False; // AV
+ //chkXformInvisible.Enabled := false;
+ //chkXformInvisible.Checked := false;
+ txtOpacity.Enabled := false;
+ chkXformSolo.Enabled := false;
+ end;
+ tbEnableFinalXform.Down := EnableFinalXform;
+
+ txtSymmetry.text := Format('%.6g', [symmetry]);
+ txtOpacity.text := Format('%.6g', [transOpacity]);
+ txtDC.Text := Format('%.6g', [pluginColor]);
+
+ pnlXFormColor.Color := ColorValToColor(cp.cmap, color);
+ shColor.Brush.Color := pnlXformColor.Color;
+ txtXFormColor.Text := Format('%1.3f', [color]);
+ scrlXFormcolor.Position := Trunc(color * scrlXFormColor.Max);
+
+ for i := 0 to NRVAR-1 do begin
+ v := GetVariation(i);
+ if v <> VarsCache[i] then
+ begin
+ VarsCache[i] := v;
+ VEVars.Values[VarNames(i)] := Format('%.6g', [v]);
+ end;
+ end;
+
+ for i:= 0 to GetNrVariableNames - 1 do begin
+{$ifndef VAR_STR}
+ GetVariable(GetVariableNameAt(i), v);
+ strval := Format('%.6g', [v]);
+{$else}
+ strval := GetVariableStr(GetVariableNameAt(i));
+{$endif}
+ // kinda funny, but it really helped...
+ if vleVariables.Values[GetVariableNameAt(i)] <> strval then
+ vleVariables.Values[GetVariableNameAt(i)] := strval;
+ end;
+
+ //Assert(vleChaos.RowCount = Transforms+1);
+ if SelectedTriangle < Transforms then begin
+ if mnuChaosViewTo.Checked then
+ // view as "to" values
+ for i := 1 to Transforms do begin
+ strval := Format('%.6g', [modWeights[i - 1]]);
+ if vleChaos.Cells[1, i] <> strval then
+ vleChaos.Cells[1, i] := strval;
+ end
+ else
+ // view as "from" values
+ for i := 1 to Transforms do begin
+ strval := Format('%.6g', [cp.xform[i - 1].modWeights[SelectedTriangle]]);
+ if vleChaos.Cells[1, i] <> strval then
+ vleChaos.Cells[1, i] := strval;
+ end;
+ end
+ else
+ for i := 1 to vleChaos.RowCount-1 do
+ vleChaos.Cells[1, i] := 'n/a';
+ end;
+
+ //AV: moved checks here since Apo7X didn't refresh these pages well
+ chkCollapseVariationsClick(nil);
+ chkCollapseVariablesClick(nil);
+
+ if PivotMode = pivotLocal then begin
+ editPivotX.Text := Format('%.6g', [LocalPivot.x]);
+ editPivotY.Text := Format('%.6g', [LocalPivot.y]);
+ btnPivotMode.Caption := TextByKey('editor-tab-triangle-modelocal');
+ btnPivotMode.Hint := TextByKey('editor-tab-triangle-toworld');
+ tbPivotMode.Down := false;
+ end
+ else begin
+ editPivotX.Text := Format('%.6g', [WorldPivot.x]);
+ editPivotY.Text := Format('%.6g', [WorldPivot.y]);
+ btnPivotMode.Caption := TextByKey('editor-tab-triangle-modeworld');
+ btnPivotMode.Hint := TextByKey('editor-tab-triangle-tolocal');
+ tbPivotMode.Down := true;
+ end;
+ PageControl.Refresh;
+
+ updating := false;
+end;
+
+///////////////////////////////////////////////////
+procedure TEditForm.CreateScreenShot;
+begin
+ SaveScreenShot('Apophysis Transform Editor');
+end;
+
+procedure TEditForm.ExtSysMenu(var Msg: TMessage);
+begin
+ if Msg.WParam = $C0 then CreateScreenShot;
+ inherited;
+end;
+
+{ /////////////// AV: arrow buttons for all num fields //////////////// }
+
+procedure TEditForm.SpinButtonDownClick(Sender: TObject);
+var
+ step, n: double;
+ ANumEdit: TEdit;
+begin
+ step := 0.01;
+ if GetKeyState(VK_MENU) < 0 then step := 0.000001 // Alt
+ else if GetKeyState(VK_CONTROL) < 0 then step := 0.0001
+ else if GetKeyState(VK_SHIFT) < 0 then step := 0.1;
+ try
+ ANumEdit := TEdit((Sender as TSpinButton).FocusControl);
+ n := StrToFloat(ANumEdit.Text);
+ ANumEdit.Text := Format('%.6g', [n - step]);
+ ANumEdit.OnExit(ANumEdit);
+ except
+ // do nothing
+ end;
+end;
+
+procedure TEditForm.SpinButtonUpClick(Sender: TObject);
+var
+ step, n: double;
+ ANumEdit: TEdit;
+begin
+ step := 0.01;
+ if GetKeyState(VK_MENU) < 0 then step := 0.000001 // Alt
+ else if GetKeyState(VK_CONTROL) < 0 then step := 0.0001
+ else if GetKeyState(VK_SHIFT) < 0 then step := 0.1;
+ try
+ ANumEdit := TEdit((Sender as TSpinButton).FocusControl);
+ n := StrToFloat(ANumEdit.Text);
+ ANumEdit.Text := Format('%.6g', [n + step]);
+ ANumEdit.OnExit(ANumEdit);
+ except
+ // do nothing
+ end;
+end;
+
+{ ////////////////////////////////////////////////////////////////// }
+
+procedure TEditForm.Scale(var fx, fy: double; x, y: integer);
+var
+ sc: double;
+begin
+ sc := 50 * GraphZoom;
+ fx := (x - (TriangleView.Width / 2)) / sc + gCenterX;
+ fy := -((y - (TriangleView.Height / 2)) / sc - gCentery);
+end;
+
+procedure TEditForm.AddContainerClick(Sender: TObject);
+var
+ i: integer;
+ sumw: double;
+begin
+ if (Transforms < NXFORMS) then
+ begin
+ MainForm.UpdateUndo;
+ MainTriangles[Transforms + 1] := MainTriangles[Transforms];
+ cp.xform[Transforms + 1].Assign(cp.xform[Transforms]);
+ MainTriangles[Transforms] := MainTriangles[-1];
+
+ for i := 0 to Transforms-1 do
+ cp.xform[i].TransOpacity := 0;
+
+ cp.xform[Transforms].Clear;
+ cp.xform[Transforms].symmetry := 1;
+ cp.xform[Transforms].SetVariation(0, 1);
+ cp.xform[Transforms].modWeights[Transforms] := 0;
+
+ if InheritWeights.Checked then begin
+ sumw := 0;
+ for i := 0 to Transforms-1 do
+ sumw := sumw + cp.xform[i].density;
+ cp.xform[Transforms].density := sumw;
+ end else
+ cp.xform[Transforms].density := 0.5;
+
+ SelectedTriangle := Transforms;
+ cp.xform[SelectedTriangle].TransformName := 'Container TX';
+
+ Inc(Transforms);
+ UpdateXformsList;
+ UpdateFlame(True);
+
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+ end;
+end;
+
+procedure TEditForm.AffineCoefsDblClick(Sender: TObject); // AV
+var
+ num: string;
+begin
+ if not AllowResetCoefs then exit;
+ with TEdit(Sender) do // restore defaults
+ begin
+ if (Parent = GroupBox6) or btnCoefsRect.Down then
+ num := IntToStr(Tag)
+ else // if btnCoefsPolar.Down then
+ begin
+ if (Left = 36) and (Top < 65) then // hack...
+ num := '1'
+ else if (Tag = 1) then
+ num := '90'
+ else num := '0';
+ end;
+
+ if Text <> num then
+ begin
+ Text := num;
+ OnExit(Sender);
+ end;
+ end;
+end;
+
+procedure TEditForm.AutoZoom;
+var
+ i, j: integer;
+ xminz, yminz, xmaxz, ymaxz: double;
+ gxlength, gylength: double;
+begin
+ xminz := 0;
+ yminz := 0;
+ xmaxz := 0;
+ ymaxz := 0;
+ for i := -1 to LastTriangle do
+ begin
+ for j := 0 to 2 do
+ begin
+ if MainTriangles[i].x[j] < xminz then xminz := MainTriangles[i].x[j];
+ if MainTriangles[i].y[j] < yminz then yminz := MainTriangles[i].y[j];
+ if MainTriangles[i].x[j] > xmaxz then xmaxz := MainTriangles[i].x[j];
+ if MainTriangles[i].y[j] > ymaxz then ymaxz := MainTriangles[i].y[j];
+ end;
+ end;
+ gxlength := xmaxz - xminz;
+ gylength := ymaxz - yminz;
+ gCenterX := xminz + gxlength / 2;
+ gCentery := yminz + gylength / 2;
+
+ if gxlength >= gylength then
+ GraphZoom := TriangleView.Width / 60 / gxlength
+ else
+ GraphZoom := TriangleView.Height / 60 / gylength;
+ EditForm.StatusBar.Panels[2].Text := Format(TextByKey('editor-status-zoomformat'), [GraphZoom]);
+
+ TriangleView.Invalidate;//Refresh;
+end;
+
+procedure TEditForm.UpdateFlameX;
+begin
+ cp.GetFromTriangles(MainTriangles, Transforms);
+
+ if tbAutoWeights.Down then cp.CalculateWeights; //cp.ComputeWeights(MainTriangles, Transforms);
+ DrawPreview;
+ ShowSelectedInfo;
+ TriangleView.Refresh;
+end;
+
+procedure TEditForm.UpdateFlame(DrawMain: boolean);
+begin
+ StatusBar.Panels[2].Text := Format(TextByKey('editor-status-zoomformat'), [GraphZoom]);
+
+ cp.GetFromTriangles(MainTriangles, LastTriangle);
+
+// if not chkPreserve.Checked then ComputeWeights(cp, MainTriangles, transforms);
+ DrawPreview;
+ ShowSelectedInfo;
+ TriangleView.Refresh;
+ if DrawMain then begin
+ MainForm.StopThread;
+
+ MainCp.Copy(cp, true);
+
+ MainCp.cmap := cmap;
+ if mnuResetLoc.checked then begin
+ MainCp.zoom := 0;
+ MainForm.center[0] := cp.center[0];
+ MainForm.center[1] := cp.center[1];
+ end;
+ if AdjustForm.Visible then AdjustForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+ if CurvesForm.Visible then CurvesForm.SetCp(MainCp);
+ MainForm.RedrawTimer.enabled := true;
+ end;
+
+ // AV: following is included into ShowSelectedInfo
+ //chkCollapseVariablesClick(nil);
+ //chkCollapseVariationsClick(nil);
+end;
+
+procedure TEditForm.UpdateWidgets;
+ function Point(x, y: double): TSPoint;
+ begin
+ Result.x := x;
+ Result.y := y;
+ end;
+begin
+ with mainTriangles[Selectedtriangle] do
+ begin
+ xx := x[0] - x[1];
+ xy := y[0] - y[1];
+ yx := x[2] - x[1];
+ yy := y[2] - y[1];
+ Widgets[0][0] := Point(x[1] + 0.8*xx + yx, y[1] + 0.8*xy + yy);
+ Widgets[0][1] := Point(x[1] + xx + yx, y[1] + xy + yy);
+ Widgets[0][2] := Point(x[1] + xx + 0.8*yx, y[1] + xy + 0.8*yy);
+
+ Widgets[1][0] := Point(x[1] - 0.8*xx + yx, y[1] - 0.8*xy + yy);
+ Widgets[1][1] := Point(x[1] - xx + yx, y[1] - xy + yy);
+ Widgets[1][2] := Point(x[1] - xx + 0.8*yx, y[1] - xy + 0.8*yy);
+
+ Widgets[2][0] := Point(x[1] - 0.8*xx - yx, y[1] - 0.8*xy - yy);
+ Widgets[2][1] := Point(x[1] - xx - yx, y[1] - xy - yy);
+ Widgets[2][2] := Point(x[1] - xx - 0.8*yx, y[1] - xy - 0.8*yy);
+
+ Widgets[3][0] := Point(x[1] + 0.8*xx - yx, y[1] + 0.8*xy - yy);
+ Widgets[3][1] := Point(x[1] + xx - yx, y[1] + xy - yy);
+ Widgets[3][2] := Point(x[1] + xx - 0.8*yx, y[1] + xy - 0.8*yy);
+ end;
+end;
+
+procedure TEditForm.DeleteTriangle(t: integer);
+var
+ i, j, nmin, nmax: integer;
+ lx, ps: integer;
+ txname: string;
+begin
+ if (t = Transforms) then
+ begin
+ assert(cp.HasFinalXForm or EnableFinalXform);
+ MainForm.UpdateUndo;
+ EnableFinalXform := false;
+ cp.finalXformEnabled := false;
+ cp.xform[Transforms].Clear;
+ cp.xform[Transforms].symmetry := 1;
+ assert(cp.HasFinalXForm = false);
+ MainTriangles[Transforms] := MainTriangles[-1];
+ tbEnableFinalXform.Down := false;
+ if (SelectedTriangle = Transforms) then Dec(SelectedTriangle);
+ end
+ else
+ if (Transforms <= 1) then exit
+ else begin
+ MainForm.UpdateUndo;
+
+ for i := 0 to Transforms-1 do
+ begin
+ if (pos('link', cp.xform[i].TransformName) > 0) then
+ begin
+ // AV: correcting the numbers in linked transforms' names
+ if i = t then continue;
+ txname := cp.xform[i].TransformName;
+ ps := pos('TX ', txname) + 3;
+ txname := copy(txname, ps, length(txname) - ps + 1);
+ try // if user didn't change the original name
+ lx := StrToInt(txname) - 1;
+ if (lx = t) then cp.xform[i].TransformName := ''
+ else if (lx > t) then
+ cp.xform[i].TransformName := copy(cp.xform[i].TransformName, 1, ps - 1) + IntToStr(lx);
+ except
+ // leave the name as is
+ end;
+ end;
+ end;
+
+ if RebuildXaosLinks then begin
+ // check for single "to" links
+ for i := 0 to NXFORMS-1 {Transforms-1} do
+ with cp.xform[i] do begin
+ nmin := NXFORMS;
+ nmax := -1;
+ for j := 0 to NXFORMS-1 {Transforms-1} do
+ if modWeights[j] <> 0 then begin
+ if j < nmin then nmin := j;
+ if j > nmax then nmax := j;
+ end;
+ if (nmin = nmax) and (nmin = t) then begin
+ for j := 0 to NXFORMS-1 {Transforms-1} do
+ modWeights[j] := cp.xform[t].modWeights[j];
+ if (transOpacity = 0) then begin
+ transOpacity := cp.xform[t].transOpacity;
+ end;
+ end;
+ end;
+ // check for single "from" links
+ for i := 0 to NXFORMS-1 {Transforms-1} do
+ begin
+ if cp.xform[t].modWeights[i] = 0 then continue;
+ nmin := NXFORMS;
+ nmax := -1;
+ for j := 0 to NXFORMS-1 {Transforms-1} do
+ if cp.xform[j].modWeights[i] <> 0 then begin
+ if j < nmin then nmin := j;
+ if j > nmax then nmax := j;
+ end;
+ if (nmin = nmax) and (nmin = t) then begin
+ for j := 0 to NXFORMS-1 {Transforms-1} do
+ cp.xform[j].modWeights[i] := cp.xform[t].modWeights[i];
+ end;
+ end;
+
+ if pos('Container TX', cp.xform[t].TransformName) > 0 then
+ for i := 0 to t-1 do
+ if (cp.xform[t].transOpacity = 0) then
+ cp.xform[t].transOpacity := 1;
+ end;
+
+ // delete xform from all probability tables
+ for i := 0 to NXFORMS-1 {Transforms-1} do
+ with cp.xform[i] do begin
+ for j := t to NXFORMS-1 {Transforms-1} do
+ modWeights[j] := modWeights[j+1];
+ modWeights[Transforms-1] := 1;
+ end;
+
+ if t = (Transforms - 1) then
+ begin
+ MainTriangles[t] := MainTriangles[Transforms];
+ cp.xform[t].Assign(cp.xform[Transforms]);
+ Dec(SelectedTriangle);
+ end
+ else begin
+ for i := t to Transforms-1 do // was: -2
+ begin
+ { copy higher transforms down }
+ MainTriangles[i] := MainTriangles[i + 1];
+ cp.xform[i].Assign(cp.xform[i + 1]);
+ end;
+ end;
+
+ if cp.soloXform > t then Dec(cp.soloXform)
+ else if cp.soloXform = t then cp.soloXform := -1;
+
+ Dec(Transforms);
+ assert(cp.xform[transforms].density = 0); // cp.xform[transforms].density := 0;
+ end;
+ UpdateXformsList;
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.InsertPi1Click(Sender: TObject);
+var
+ num: double;
+ sn: string;
+begin
+ if (not ValidNumField) then
+ begin
+ Application.MessageBox(PChar(TextByKey('editor-status-nonumfield')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end
+ else if (ActiveControl = txtTrgRotateValue) then exit;
+
+ case TMenuItem(Sender).Tag of
+ 0: num := 3.14159265358979; // pi;
+ 1: num := 6.28318530717959; // 2 * pi;
+ 2: num := 1.5707963267949; // pi * 0.5;
+ 3: num := 1.0471975511966; // pi/3;
+ 4: num := 0.785398163397448; // pi * 0.25;
+ 5: num := 0.523598775598299; // pi/6;
+ 6: num := 0.288675134594813; // sqrt(3)/6;
+ 7: num := 0.707106781186548; // sqrt(2) * 0.5;
+ 8: num := 0.866025403784439; // sqrt(3) * 0.5;
+ 9: num := 0.577350269189626; // sqrt(3)/3;
+ 10: num := 1.73205080756888; // sqrt(3);
+ 11: num := 0.618033988749895; // (sqrt(5)- 1) * 0.5;
+ else num := 0;
+ end;
+ if (ActiveControl = txtTrgScaleValue) then num := num * 100;
+ sn := Format('%.6g', [num]);
+
+ if (ActiveControl is TEdit) then
+ begin
+ TEdit(ActiveControl).Text := sn;
+ TEdit(ActiveControl).OnExit(ActiveControl);
+ end else if (ActiveControl is TValueListEditor) then
+ begin
+ TValueListEditor(ActiveControl).Cells[1, TValueListEditor(ActiveControl).Row] := sn;
+ TValueListEditor(ActiveControl).OnExit(ActiveControl);
+ end
+ else // if (ActiveControl is TComboBox) then
+ TComboBox(ActiveControl).Text := sn;
+end;
+
+function TEditForm.InsideTriangle(x, y: double): integer;
+var
+ i, j, k: integer;
+ inside: boolean;
+begin
+{ is x, y inside a triangle }
+ Result := -1;
+ inside := False;
+ j := 2;
+ for k := LastTriangle downto 0 do
+ begin
+ for i := 0 to 2 do
+ begin
+ if (((MainTriangles[k].y[i] <= y) and
+ (y < MainTriangles[k].y[j])) or
+ ((MainTriangles[k].y[j] <= y) and
+ (y < MainTriangles[k].y[i]))) and
+ (x < (MainTriangles[k].x[j] - MainTriangles[k].x[i]) *
+ (y - MainTriangles[k].y[i]) /
+ (MainTriangles[k].y[j] - MainTriangles[k].y[i]) +
+ MainTriangles[k].x[i]) then
+ Inside := not Inside;
+ j := i
+ end;
+ if inside then break;
+ end;
+ if inside then Result := k;
+end;
+
+function TEditForm.GetTriangleColor(n: integer): TColor;
+begin
+ if n = Transforms then Result := clWhite
+ else
+ if UseTransformColors then
+ Result := ColorValToColor(MainCp.cmap, cp.xform[n].color)
+ else Result := TrgColors[n mod 14];
+end;
+
+procedure TEditForm.GridComboBoxChange(Sender: TObject);
+begin
+ if tbVarPreview.Down then
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.ResetToolsDblClick(Sender: TObject);
+begin
+ RotateXYO.Checked := True;
+ ScaleXYO.Checked := True;
+ ShowModvals.Checked := False;
+ mnuChangeGridClick(RectGrid);
+ txtTrgRotateValue.Text := '15';
+ txtTrgScaleValue.Text := '125';
+ txtTrgMoveValue.Text := '0.1';
+end;
+
+procedure TEditForm.RedrawButtons;
+begin
+ if IsLightMenu then
+ btnMathPopup.ImageIndex := 42 // white PI
+ else
+ btnMathPopup.ImageIndex := 32; // black PI
+end;
+
+function TEditForm.LastTriangle: integer;
+begin
+ if EnableFinalXform or cp.HasFinalXForm then Result := Transforms
+ else Result := Transforms-1;
+end;
+
+procedure TEditForm.CalcFlip;
+var ang: double;
+begin
+ if (PivotMode = pivotLocal) or (mouseOverEdge >= 0) then
+ with MainTriangles[SelectedTriangle] do begin
+ fl.x := (x[0] - x[1]) * (FlipPoint.x - LocalPivot.x) + (x[2] - x[1]) * (FlipPoint.y - LocalPivot.y);
+ fl.y := (y[0] - y[1]) * (FlipPoint.x - LocalPivot.x) + (y[2] - y[1]) * (FlipPoint.y - LocalPivot.y);
+ end
+ else begin
+ fl.x := FlipPoint.x - WorldPivot.x;
+ fl.y := FlipPoint.y - WorldPivot.y;
+ end;
+ ang := RadToDeg(arctan2(fl.y, fl.x));
+ if (ang < 0) then ang := ang + 180.0
+ else if (ang = 180.0) then ang := 0.0;
+ lblFlipAngle.Caption := lblFlipAngle.Hint + Format(': %1.3g'#176, [ang]);
+end;
+
+procedure TEditForm.CalcArcsinScaleClick(Sender: TObject);
+var t: double;
+begin
+ try
+ t := StrToFloat(txtTrgScaleValue.Text) * 0.01;
+ if (abs(t) <= 1) then begin
+ t := RadToDeg(arcsin(t));
+ txtTrgRotateValue.Text := Format('%.6g', [t]);
+ end else
+ Application.MessageBox(PChar(TextByKey('editor-status-warnscale')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ except
+ Beep;
+ end;
+end;
+
+procedure TEditForm.CalcCosClick(Sender: TObject);
+var
+ num, t: double;
+ sn: string;
+begin
+ if (not ValidNumField) then
+ begin
+ Application.MessageBox(PChar(TextByKey('editor-status-nonumfield')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+
+ try
+ if (ActiveControl is TEdit) then
+ sn := TEdit(ActiveControl).Text
+ else if (ActiveControl is TValueListEditor) then
+ sn := TValueListEditor(ActiveControl).Cells[1, TValueListEditor(ActiveControl).Row]
+ else //if (ActiveControl is TComboBox) then
+ sn := TComboBox(ActiveControl).Text;
+ num := StrToFloat(sn);
+ if UseDegrees.Checked then
+ num := num * pi / 180;
+ case TMenuItem(Sender).Tag of
+ 0: sn := Format('%.6g', [cos(num)]);
+ 1: sn := Format('%.6g', [sin(num)]);
+ else begin
+ t := abs(cos(num));
+ if (t < 1E-6) then exit;
+ t := Round6(tan(num));
+ sn := FloatToStr(t);
+ end;
+ end;
+
+ if (ActiveControl is TEdit) then
+ begin
+ TEdit(ActiveControl).Text := sn;
+ TEdit(ActiveControl).OnExit(ActiveControl);
+ end
+ else if (ActiveControl is TValueListEditor) then
+ begin
+ TValueListEditor(ActiveControl).Cells[1, TValueListEditor(ActiveControl).Row] := sn;
+ TValueListEditor(ActiveControl).OnExit(ActiveControl);
+ end
+ else //if (ActiveControl is TComboBox) then
+ TComboBox(ActiveControl).Text := sn;
+ except
+ end;
+end;
+
+procedure TEditForm.TriangleViewPaint(Sender: TObject);
+const
+ foc_ofs = 4;
+ foc_size = 32;
+var
+ ix, iy, sc: double;
+
+ function ToScreen(fx, fy: double): TPoint;
+ begin
+ Result.x := integer(round(ix + (fx - gCenterX) * sc));
+ Result.y := integer(round(iy - (fy - gCenterY) * sc));
+ end;
+
+ procedure ToUnit(p: TPoint; var fx, fy: double);
+ begin
+ fx := (p.x - ix) / sc + gCenterX;
+ fy := (p.y + iy) / sc + gCenterY;
+ end;
+
+var
+ dx, dy: double;
+ Width, Height: integer;
+ BitMap: TBitMap;
+
+ procedure LineDxDy;
+ var
+ k: double;
+ begin
+ if (dx <> 0) and (dy <> 0) then with Bitmap.Canvas do
+ begin
+ k := dy / dx;
+ if abs(k) < 1 then begin
+ MoveTo(0, round(iy - sc*(Pivot.y - ( ix/sc-GCenterX+Pivot.x)*k - GCenterY)));
+ LineTo(Width, round(iy - sc*(Pivot.y - (-ix/sc-GCenterX+Pivot.x)*k - GCenterY)));
+ end
+ else begin
+ MoveTo(round(ix + sc*(Pivot.x - (-iy/sc-GCenterY+Pivot.y)/k - GCenterX)), 0);
+ LineTo(round(ix + sc*(Pivot.x - ( iy/sc-GCenterY+Pivot.y)/k - GCenterX)), Height);
+ end;
+ end;
+ end;
+
+ procedure DrawFlipLine;
+ var k: double;
+ begin
+ with Bitmap.Canvas do
+ begin
+ k := fl.y / fl.x;
+ if abs(k) < 1 then begin
+ MoveTo(0, round(iy - sc*(GetPivot.y - ( ix/sc-GCenterX+GetPivot.x)*k - GCenterY)));
+ LineTo(Width, round(iy - sc*(GetPivot.y - (-ix/sc-GCenterX+GetPivot.x)*k - GCenterY)));
+ end
+ else begin
+ MoveTo(round(ix + sc*(GetPivot.x - (-iy/sc-GCenterY+GetPivot.y)/k - GCenterX)), 0);
+ LineTo(round(ix + sc*(GetPivot.x - ( iy/sc-GCenterY+GetPivot.y)/k - GCenterX)), Height);
+ end;
+ end;
+ end;
+
+var
+ a, b, c: TPoint;
+ e, f: TPoint;
+
+ procedure DrawWidgets;
+ var
+ i: integer;
+ begin
+ with Bitmap.Canvas do
+ with MainTriangles[SelectedTriangle] do
+ begin
+ for i := 0 to 3 do
+ begin
+ a:=toscreen(Widgets[i][0].x, Widgets[i][0].y);
+ b:=toscreen(Widgets[i][1].x, Widgets[i][1].y);
+ c:=toscreen(Widgets[i][2].x, Widgets[i][2].y);
+ moveto(a.x, a.y);
+ lineto(b.x, b.y);
+ lineto(c.x, c.y);
+ end
+ end;
+ end;
+
+var
+ i, n, tc, tn, lin: integer;
+ d, d1: double;
+ tx, ty: double;
+ tr, ta, den: double; // for (bi)polar grid
+ ax, ay: integer;
+
+ gridX1, gridX2, gridY1, gridY2, gi, gstep: double;
+ gp: TRoundToRange;
+
+ tps: TPenStyle;
+ tT: TTriangle;
+ txx, txy, tyx, tyy: double;
+ str, vvstr: string;
+
+ bf: TBlendFunction;
+ RenderCP : TControlPoint;
+ Renderer : TRenderer;
+ bm : TBitmap;
+ q, p0, p1: integer;
+label DrawCorner;
+begin
+ if (SelectedTriangle < 0) then begin
+ assert(false, 'Selected triangle < 0');
+ SelectedTriangle := 0;
+ end;
+ assert(TCustomDrawControl(Sender) = TriangleView);
+ if SelectedTriangle > LastTriangle then SelectedTriangle := LastTriangle;
+
+ BitMap := TBitMap.Create;
+ Width := TriangleView.Width;
+ Height := TriangleView.Height;
+ Bitmap.Width := Width;
+ Bitmap.Height := Height;
+ ix := Width / 2;
+ iy := Height / 2;
+ sc := 50 * GraphZoom;
+ try
+ with Bitmap.Canvas do
+ begin
+ try // who knows... ;)
+ gp:=round(log10(max(Width, Height)/sc))-1;
+ gstep:=power(10.0, gp);
+ except
+ gp:=0;
+ gstep:=1.0;
+ end;
+
+ a := ToScreen(MainTriangles[-1].x[0], MainTriangles[-1].y[0]);
+ b := ToScreen(MainTriangles[-1].x[1], MainTriangles[-1].y[1]);
+ c := ToScreen(MainTriangles[-1].x[2], MainTriangles[-1].y[2]);
+
+ brush.Color := EditorBkgColor;
+ FillRect(Rect(0, 0, Width, Height));
+
+ if EnableEditorPreview then begin
+ q := 0;
+ if EditPrevQual = 2 then q := 1;
+ p0 := TriangleView.Width div (2 - q);
+ p1 := TriangleView.Height div (2 - q);
+
+ RenderCp := cp.Clone;
+ RenderCp.Width := TriangleView.Width;
+ Rendercp.Height := TriangleView.Height;
+ RenderCp.pixels_per_unit := sc;
+ RenderCp.AdjustScale(p0, p1);
+ RenderCP.sample_density := PreviewDensity * 0.5;
+ RenderCP.spatial_oversample := 1;
+ RenderCP.spatial_filter_radius := 0.001;
+ RenderCp.center[0] := gCenterX ;
+ RenderCp.center[1] := -gCenterY ;
+ RenderCp.background[0] := EditorBkgColor and $ff;
+ RenderCp.background[1] := (EditorBkgColor and $ff00) shl 8;
+ RenderCp.background[2] := (EditorBkgColor and $ff0000) shl 16;
+ Render.SetCP(RenderCp);
+ Render.Render;
+
+ bf.BlendOp := AC_SRC_OVER;
+ bf.BlendFlags := 0;
+ bf.SourceConstantAlpha := 255 - EditorPreviewTransparency;
+ bf.AlphaFormat := 0;
+ bm := TBitmap.Create;
+ bm.Width := p0;
+ bm.Height := p1;
+ bm.Assign(Render.GetImage);
+
+ //Windows.BitBlt(Handle, 0, 0,
+ Windows.AlphaBlend(Handle, 0, 0,
+ TriangleView.Width, TriangleView.Height,
+ bm.Canvas.Handle, 0, 0,
+ //$CC0020);
+ bm.Width, bm.Height, bf);
+
+ RenderCp.Destroy;
+ try
+ bm.Dormant;
+ bm.FreeImage;
+ finally
+ bm.Free;
+ end;
+ end;
+
+ Pen.Style := psSolid;
+ Pen.Width := 1;
+
+ // draw grid
+ Pen.Color := GridColor2;
+ gridX1:=gCenterX-ix/sc;
+ gridX2:=gCenterX+(Width-ix)/sc;
+ gridY1:=gCenterY-iy/sc;
+ gridY2:=gCenterY+(Height-iy)/sc;
+
+ gi:=RoundTo(gridX1, gp);
+ while gi <= gridX2 do
+ begin
+ ax:=integer(round(ix + (gi - gCenterX)*sc));
+ MoveTo(ax, 0);
+ LineTo(ax, Height);
+ gi:=gi+gstep;
+ end;
+ gi:=RoundTo(gridY1, gp);
+ while gi <= gridY2 do
+ begin
+ ay:=integer(round(iy - (gi - gCenterY)*sc));
+ MoveTo(0, ay);
+ LineTo(Width, ay);
+ gi:=gi+gstep;
+ end;
+ // draw axis
+ Pen.Color := GridColor1;
+ ax := integer(round(ix - gCenterX*sc));
+ ay := integer(round(iy + gCentery*sc));
+ MoveTo(ax, 0);
+ LineTo(ax, Height-1);
+ MoveTo(0, ay);
+ LineTo(Width-1, ay);
+
+ {Reference Triangle}
+ Pen.Style := psDot;
+ Pen.color := ReferenceTriangleColor;
+ brush.Color := gridColor1 shr 1 and $7f7f7f;
+ Polyline([a, b, c, a]);
+
+ brush.Color := EditorBkgColor;
+ Font.color := Pen.color;
+ TextOut(c.x-9, c.y-12, 'Y');
+ TextOut(a.x+2, a.y+1, 'X');
+ TextOut(b.x-8, b.y+1, 'O');
+
+ Pen.Style := psSolid;
+
+ // Draw Triangles
+ for i := 0 to LastTriangle do
+ begin
+ if i <> SelectedTriangle then Pen.Style := psDot;
+
+ with cp.xform[i] do // draw post-triangle
+ if postXswap or
+ ((ShowAllXforms or (i = SelectedTriangle)) and (
+ (p[0,0]<>1) or (p[0,1]<>0) or
+ (p[1,0]<>0) or (p[1,1]<>1) or
+ (p[2,0]<>0) or (p[2,1]<>0) )) then
+ begin
+ Pen.Color := GetTriangleColor(i) shr 1 and $7f7f7f;
+ tps := Pen.Style;
+ Pen.Style := psDot;
+
+ cp.GetPostTriangle(tT, i);
+ txx := tT.x[0] - tT.x[1];
+ txy := tT.y[0] - tT.y[1];
+ tyx := tT.x[2] - tT.x[1];
+ tyy := tT.y[2] - tT.y[1];
+ a := ToScreen(tT.x[1] + txx + tyx, tT.y[1] + txy + tyy);
+ b := ToScreen(tT.x[1] - txx + tyx, tT.y[1] - txy + tyy);
+ e := ToScreen(tT.x[1] + txx - tyx, tT.y[1] + txy - tyy);
+ f := ToScreen(tT.x[1] - txx - tyx, tT.y[1] - txy - tyy);
+ Polyline([a, b, f, e, a]);
+
+ pen.Style := psSolid;
+ a := ToScreen(tT.x[1] - txx, tT.y[1] - txy);
+ b := ToScreen(tT.x[1] + txx, tT.y[1] + txy);
+ e := ToScreen(tT.x[1] + tyx, tT.y[1] + tyy);
+ f := ToScreen(tT.x[1] - tyx, tT.y[1] - tyy);
+ Polyline([a, b, e, f]);
+
+ if postXswap and ((i = SelectedTriangle) or ShowAllXforms) then
+ begin
+ Pen.Style := psDot;
+ cp.GetTriangle(tT, i);
+
+ a:=toscreen(tT.x[0], tT.y[0]);
+ moveto(a.x, a.y);
+ b:=toscreen(tT.x[2], tT.y[2]);
+ lineto(b.x, b.y);
+
+ pen.Style := psSolid;
+ b:=toscreen(tT.x[1], tT.y[1]);
+ lineto(b.x, b.y);
+ lineto(a.x, a.y);
+ end;
+
+ Pen.Style := tps;
+ end;
+
+ Pen.Color := GetTriangleColor(i);
+ a := ToScreen(MainTriangles[i].x[0], MainTriangles[i].y[0]);
+ b := ToScreen(MainTriangles[i].x[1], MainTriangles[i].y[1]);
+ c := ToScreen(MainTriangles[i].x[2], MainTriangles[i].y[2]);
+ if pen.Style <> psSolid then
+ Polyline([a, b, c, a])
+ else begin
+ Polyline([a, b, c]);
+ Pen.Style := psDot;
+ brush.Color := pen.color shr 1 and $7f7f7f;
+ Polyline([c, a]);
+ brush.Color := EditorBkgColor;
+ end;
+
+ Pen.Style := psSolid;
+ Ellipse(a.x - 4, a.y - 4, a.x + 4, a.y + 4);
+ Ellipse(b.x - 4, b.y - 4, b.x + 4, b.y + 4);
+ Ellipse(c.x - 4, c.y - 4, c.x + 4, c.y + 4);
+
+ Font.color := Pen.color;
+ TextOut(c.x+2, c.y+1, 'Y');
+ TextOut(a.x+2, a.y+1, 'X');
+ TextOut(b.x+2, b.y+1, 'O');
+ end;
+
+ UpdateWidgets;
+ if ExtendedEdit then begin
+ n := GetTriangleColor(SelectedTriangle);// shr 1 and $7f7f7f;
+ if mouseOverTriangle <> SelectedTriangle then n := n shr 1 and $7f7f7f;
+ Pen.Color := n;
+ Pen.Mode := pmMerge;
+ DrawWidgets;
+
+ if mouseOverWidget >= 0 then
+ begin
+ pen.Color := pen.Color shr 1 and $7f7f7f;
+ pen.Width := 4;
+ DrawWidgets;
+ pen.Width := 1;
+ end;
+ end;
+
+ if showVarPreview then
+ begin
+ assert(trkVarPreviewRange.position > 0);
+ assert(trkVarPreviewDensity.position > 0);
+
+ cp.xform[SelectedTriangle].Prepare;
+
+ n := trkVarPreviewRange.position * trkVarPreviewDensity.position * 5;
+ d1 := trkVarPreviewDensity.position * 5;
+ tc := GetTriangleColor(SelectedTriangle);
+
+ // AV: draw the variation preview in the selected coordinate system
+ case GridComboBox.ItemIndex of
+ 0: begin // transform rectangular grid
+ for ax := -n to n do
+ for ay := -n to n do
+ try
+ tx := ax / d1;
+ ty := ay / d1;
+ for i := trkVarPreviewDepth.position downto 1 do
+ cp.xform[SelectedTriangle].NextPointXY(tx, ty);
+ a := toscreen(tx, -ty);
+ Pixels[a.x, a.y] := tc;
+ except
+ end;
+ end;
+ 1: begin // transform polar grid
+ try
+ tx := 0; ty := 0; // origin
+ for i := trkVarPreviewDepth.position downto 1 do
+ cp.xform[SelectedTriangle].NextPointXY(tx, ty);
+ a := ToScreen(tx, -ty);
+ Pixels[a.x, a.y] := tc;
+ except
+ end;
+ for ax := -2*n to 2*n do
+ for ay := 1 to n do
+ try
+ tr := ay/d1;
+ ta := ax * PI/2/n;
+ tx := tr * cos(ta);
+ ty := tr * sin(ta);
+ for i := trkVarPreviewDepth.position downto 1 do
+ cp.xform[SelectedTriangle].NextPointXY(tx, ty);
+ a := ToScreen(tx, -ty);
+ Pixels[a.x, a.y] := tc;
+ except
+ end;
+ end;
+ 2: begin // transform bipolar grid
+ for ax := -2*n to 2*n do
+ for ay := -n to n do
+ try
+ tr := ay/d1;
+ ta := ax * PI/2/n;
+ den := cosh(tr) - cos(ta);
+ tx := sinh(tr)/den;
+ ty := sin(ta)/den;
+ for i := trkVarPreviewDepth.position downto 1 do
+ cp.xform[SelectedTriangle].NextPointXY(tx, ty);
+ a := ToScreen(tx, -ty);
+ Pixels[a.x, a.y] := tc;
+ except
+ end;
+ end;
+ else begin // transform elliptic grid
+ for ax := -2*n to 2*n do
+ for ay := 0 to n do
+ try
+ tr := ay/d1;
+ ta := ax * PI/2/n;
+ tx := cosh(tr) * cos(ta);
+ ty := sinh(tr) * sin(ta);
+ for i := trkVarPreviewDepth.position downto 1 do
+ cp.xform[SelectedTriangle].NextPointXY(tx, ty);
+ a := ToScreen(tx, -ty);
+ Pixels[a.x, a.y] := tc;
+ except
+ end;
+ end;
+ end;
+ end;
+
+ // *********** Reflection stuff ****************************
+ if ShowFlipLine then
+ begin
+ pen.Color := FlipColor;
+ pen.Mode := pmMerge;
+ pen.Style := psSolid;
+
+ CalcFlip;
+ if (fl.x <> 0) and (fl.y <> 0) then
+ DrawFlipLine
+ else if (fl.x = 0) and (fl.y <> 0)then
+ begin
+ lin := round(ix + (GetPivot.x - gCenterX) * sc);
+ MoveTo(lin, 0);
+ LineTo(lin, Height);
+ end
+ else if (fl.y = 0) and (fl.x <> 0) then
+ begin
+ lin := round(iy - (GetPivot.y - gCenterY) * sc);
+ MoveTo(0, lin);
+ LineTo(Width, lin);
+ end;
+ end;
+ //****************************************************
+
+ if (TriangleCaught or CornerCaught) then // if dragging, draw pivot axis
+ begin
+ mouseOverTriangle := SelectedTriangle;
+
+ if HelpersEnabled then
+ begin
+ pen.Color := HelpersColor;
+ pen.Mode := pmMerge;
+ pen.Style := psSolid;
+ a := ToScreen(Pivot.x, Pivot.y);
+ MoveTo(a.x, 0);
+ LineTo(a.x, Height);
+ MoveTo(0, a.y);
+ LineTo(Width, a.y);
+
+ if (editMode = modeRotate) then // draw circle
+ begin
+ if CornerCaught then begin
+ dx := MainTriangles[SelectedTriangle].x[SelectedCorner] - Pivot.x;
+ dy := MainTriangles[SelectedTriangle].y[SelectedCorner] - Pivot.y;
+ d := Hypot(dx, dy);
+ end
+ else begin
+ dx := MainTriangles[SelectedTriangle].x[0] - Pivot.x;
+ dy := MainTriangles[SelectedTriangle].y[0] - Pivot.y;
+ d := Hypot(dx, dy);
+ for i := 1 to 2 do
+ begin
+ d1 := dist(Pivot.x, Pivot.y, MainTriangles[SelectedTriangle].x[i], MainTriangles[SelectedTriangle].y[i]);
+ if d1 > d then
+ begin
+ if d > 0 then begin
+ dx := dx/d*d1;
+ dy := dy/d*d1;
+ end;
+ d := d1;
+ end;
+ end;
+ end;
+
+ i := integer(round(d * sc));
+ if i > 4 then
+ begin
+ pen.Color := HelpersColor;
+ brush.Style := bsClear;
+ Ellipse(a.x - i, a.y - i, a.x + i, a.y + i);
+
+ a := ToScreen(Pivot.x - dy, Pivot.y + dx);
+ b := ToScreen(Pivot.x + dy, Pivot.y - dx);
+ c := ToScreen(Pivot.x, Pivot.y);
+ MoveTo(a.x, a.y);
+ LineTo(c.X, c.y);
+ LineTo(b.X, b.y);
+ end;
+
+ // rotated axis
+ LineDxDy;
+ end
+ else if (editMode = modeScale) then // draw lines
+ begin
+ if CornerCaught then begin
+ dx := MainTriangles[SelectedTriangle].x[SelectedCorner] - Pivot.x;
+ dy := MainTriangles[SelectedTriangle].y[SelectedCorner] - Pivot.y;
+ LineDxDy;
+ end
+ else begin // hmmm...
+ dx := MainTriangles[SelectedTriangle].x[0] - Pivot.x;
+ dy := MainTriangles[SelectedTriangle].y[0] - Pivot.y;
+ LineDxDy;
+ dx := MainTriangles[SelectedTriangle].x[1] - Pivot.x;
+ dy := MainTriangles[SelectedTriangle].y[1] - Pivot.y;
+ LineDxDy;
+ dx := MainTriangles[SelectedTriangle].x[2] - Pivot.x;
+ dy := MainTriangles[SelectedTriangle].y[2] - Pivot.y;
+ LineDxDy;
+ end;
+ end
+ else // if editMode = modeMove then // draw target axis
+ begin
+ Pen.Color := HelpersColor;
+ Pen.Mode := pmMerge;//Xor;
+ brush.Color := 0;
+ if CornerCaught then
+ a := ToScreen(MainTriangles[SelectedTriangle].x[SelectedCorner],
+ MainTriangles[SelectedTriangle].y[SelectedCorner])
+ else
+ a := ToScreen(GetPivot.x, GetPivot.y);
+ MoveTo(a.x, 0);
+ LineTo(a.x, Height);
+ MoveTo(0, a.y);
+ LineTo(Width, a.y);
+ Pen.Mode := pmCopy;
+ end;
+ end; // endif HelpersEnabled
+ end;
+
+ if (mouseOverTriangle >= 0) then // highlight triangle under cursor
+ begin
+ with MainTriangles[mouseOverTriangle] do begin
+ a := ToScreen(x[0], y[0]);
+ b := ToScreen(x[1], y[1]);
+ c := ToScreen(x[2], y[2]);
+ end;
+
+ pen.Width:=2;
+ Pen.Color:=GetTriangleColor(mouseOverTriangle) shr 1 and $7f7f7f;
+ Pen.Mode:=pmMerge;
+ brush.Color:=Pen.Color shr 1 and $7f7f7f;
+
+ if (SelectMode and (editMode <> modePick)) or (mouseOverTriangle = SelectedTriangle) then
+ Polygon([a, b, c])
+ else
+ PolyLine([a, b, c, a]);
+
+ pen.width:=4;
+ Ellipse(a.x - 3, a.y - 3, a.x + 3, a.y + 3);
+ Ellipse(b.x - 3, b.y - 3, b.x + 3, b.y + 3);
+ Ellipse(c.x - 3, c.y - 3, c.x + 3, c.y + 3);
+ pen.width:=1;
+ pen.mode:=pmCopy;
+
+ if not (CornerCaught or TriangleCaught) then // show used variations
+ begin
+ font.Color := GetTriangleColor(mouseOverTriangle);
+ brush.Style := bsClear;
+ ay := Height-foc_ofs*2 + font.Height; // font.height < 0
+ for i:= NRVAR - 1 downto 0 do
+ if cp.xform[mouseOverTriangle].GetVariation(i) <> 0 then
+ begin
+ // AV: hack, inspired by Apo 2.09
+ if (pos('julian', Varnames(i))> 0) or (pos('julia3D', Varnames(i))> 0)
+ or (pos('juliascope', Varnames(i))> 0) then
+ begin
+ vvstr := Varnames(i) + '_power = ' +
+ cp.xform[mouseOverTriangle].GetVariableStr(Varnames(i) + '_power');
+ ax := Width-foc_ofs*2 - TextWidth(vvstr);
+ TextOut(ax, ay, vvstr);
+ Inc(ay, font.Height);
+ end else
+ if (Varnames(i) = 'affine3D') or (Varnames(i) = 'trianglecrop')
+ or (Varnames(i) = 'projective') or (Varnames(i) = 'spherecrop') then
+ begin
+ vvstr := Varnames(i) + '_mode';
+ vvstr := vvstr + ' = ' + cp.xform[mouseOverTriangle].GetVariableStr(vvstr);
+ ax := Width-foc_ofs*2 - TextWidth(vvstr);
+ TextOut(ax, ay, vvstr);
+ Inc(ay, font.Height);
+ end;
+ vvstr := Varnames(i) + Format(' = %.6g', [cp.xform[mouseOverTriangle].GetVariation(i)]);
+ ax := Width-foc_ofs*2 - TextWidth(vvstr);
+ TextOut(ax, ay, vvstr);
+ Inc(ay, font.Height);
+ end;
+// brush.Style := bsSolid;
+ end;
+ end;
+
+ pen.color := clWhite;
+ if CornerCaught then // draw selected corner
+ begin
+ brush.Color:=clSilver;
+ a := ToScreen(MainTriangles[SelectedTriangle].x[SelectedCorner], MainTriangles[SelectedTriangle].y[SelectedCorner]);
+ Ellipse(a.x - 4, a.y - 4, a.x + 4, a.y + 4);
+ end
+ else if (mouseOverTriangle>=0) then
+ begin
+ if (mouseOverCorner >= 0) then // highlight corner under cursor
+ begin
+ case mouseOverCorner of
+ 0: brush.Color:=clRed;
+ 2: brush.Color:=clBlue;
+ else brush.Color:=clSilver;
+ end;
+
+ a := ToScreen(MainTriangles[mouseOverTriangle].x[mouseOverCorner], MainTriangles[mouseOverTriangle].y[mouseOverCorner]);
+ Ellipse(a.x - 4, a.y - 4, a.x + 4, a.y + 4);
+
+ // hmm... TODO: optimize
+ if HelpersEnabled then begin
+ pen.Color := HelpersColor;
+ pen.Mode := pmMerge;
+ pen.Style := psDot;
+ brush.Style := bsClear;
+ if (editMode = modeRotate) then
+ begin
+ i := integer(round(olddist * sc));
+ if i > 4 then begin
+ a := ToScreen(pivot.x, pivot.y);
+ Ellipse(a.x - i, a.y - i, a.x + i, a.y + i);
+ end;
+ end
+ else if editMode = modeScale then
+ begin
+ dx := MainTriangles[mouseOverTriangle].x[mouseOverCorner] - Pivot.x;
+ dy := MainTriangles[mouseOverTriangle].y[mouseOverCorner] - Pivot.y;
+ LineDxDy;
+ end;
+ end;
+ end;
+
+ if (mouseOverEdge >= 0) then // highlight edge under cursor
+ begin
+ i := (mouseOverEdge + 1) mod 3;
+ a := ToScreen(MainTriangles[mouseOverTriangle].x[mouseOverEdge], MainTriangles[mouseOverTriangle].y[mouseOverEdge]);
+ b := ToScreen(MainTriangles[mouseOverTriangle].x[i], MainTriangles[mouseOverTriangle].y[i]);
+
+ pen.Width:=5;
+ Pen.Color:=GetTriangleColor(mouseOverTriangle) shr 1 and $7f7f7f;
+ Pen.Mode:=pmMerge;
+
+ MoveTo(a.X, a.Y);
+ LineTo(b.X, b.Y);
+ pen.Mode:=pmCopy;
+ pen.Width:=1;
+ end;
+ end;
+
+ // draw pivot point
+ a := ToScreen(GetPivot.x, GetPivot.y);
+ Pen.Style := psSolid;
+ pen.Color := clWhite;
+ brush.Color := clSilver;
+ if (pivotMode = pivotLocal) or EdgeCaught then i := 2
+ else i := 3;
+ Ellipse(a.x - i, a.y - i, a.x + i, a.y + i);
+
+ if editMode = modePick then begin // hmm...
+ a := ToScreen(mouseOverPos.x, mouseOverPos.y);
+ brush.Style := bsClear;
+ Ellipse(a.x - i, a.y - i, a.x + i, a.y + i);
+ end;
+
+ if TWinControl(Sender).Focused then
+ begin
+ pen.Color := HelpersColor;
+ pen.Mode := pmXor;
+ MoveTo(foc_ofs, foc_size);
+ LineTo(foc_ofs, foc_ofs);
+ LineTo(foc_size, foc_ofs);
+ MoveTo(Width-1-foc_ofs, foc_size);
+ LineTo(Width-1-foc_ofs, foc_ofs);
+ LineTo(Width-1-foc_size, foc_ofs);
+ MoveTo(Width-1-foc_ofs, Height-1-foc_size);
+ LineTo(Width-1-foc_ofs, Height-1-foc_ofs);
+ LineTo(Width-1-foc_size, Height-1-foc_ofs);
+ MoveTo(foc_ofs, Height-1-foc_size);
+ LineTo(foc_ofs, Height-1-foc_ofs);
+ LineTo(foc_size, Height-1-foc_ofs);
+ end;
+ end;
+ TriangleView.Canvas.Draw(0, 0, Bitmap);
+ finally
+ BitMap.Free;
+ end;
+end;
+
+procedure TEditForm.FormCreate(Sender: TObject);
+var
+ i: integer;
+ vn: string;
+ ExtSM: HMenu;
+begin
+ mnuELowQuality.Caption := TextByKey('common-lowquality');
+ mnuEMediumQuality.Caption := TextByKey('common-mediumquality');
+ mnuEHighQuality.Caption := TextByKey('common-highquality');
+ mnuLowQuality.Caption := TextByKey('common-lowquality');
+ mnuMediumQuality.Caption := TextByKey('common-mediumquality');
+ mnuHighQuality.Caption := TextByKey('common-highquality');
+ tbCopy.Hint := TextByKey('common-copy');
+ tbCopyTriangle.Hint := TextByKey('editor-popup-transform-copycoords');
+ Copytrianglecoordinates1.Caption := TextByKey('editor-popup-transform-copycoords');
+ Copytransform1.Caption := TextByKey('editor-popup-transform-copywhole');
+ tbPaste.Hint := TextByKey('common-paste');
+ tbPasteTriangle.Hint := TextByKey('editor-popup-transform-pastecoords');
+ Pastetrianglecoordinates1.Caption := TextByKey('editor-popup-transform-pastecoords');
+ Pastetransform1.Caption := TextByKey('editor-popup-transform-pastewhole');
+ tbUndo.Caption := TextByKey('common-undo');
+ tbUndo.Hint := TextByKey('common-undo');
+ mnuUndo.Caption := TextByKey('common-undo');
+ tbRedo.Caption := TextByKey('common-redo');
+ tbRedo.Hint := TextByKey('common-redo');
+ mnuRedo.Caption := TextByKey('common-redo');
+ bClear.Caption := TextByKey('common-clear');
+ pnlSymmetry.Hint := TextByKey('common-dragpanelhint');
+ pnlOpacity.Hint := TextByKey('common-dragpanelhint');
+ pnlDC.Hint := TextByKey('common-dragpanelhint');
+ pnlWeight.Hint := TextByKey('common-dragpanelhint');
+ pnlXFormColor.Hint := TextByKey('common-dragpanelhint'); // AV
+ self.Caption := TextByKey('editor-title');
+ Panel1.Caption := TextByKey('editor-common-transform');
+ Panel2.Caption := TextByKey('editor-common-name');
+ pnlWeight.Caption := TextByKey('editor-common-weight');
+
+ tabVariations.Caption := TextByKey('editor-tab-variations-title');
+ VEVars.TitleCaptions[0] := TextByKey('editor-tab-variations-name');
+ VEVars.TitleCaptions[1] := TextByKey('editor-tab-variations-value');
+ //chkCollapseVariations.Caption := TextByKey('editor-tab-variations-togglehideunused');
+ cbCollapseVariations.Items[0] := TextByKey('editor-tab-variations-toggleshowall');
+ cbCollapseVariations.Items[1] := TextByKey('editor-tab-variations-togglehideunused');
+ cbCollapseVariations.Items[2] := TextByKey('editor-tab-variations-togglefavourites');
+ btnVarOrder.Caption := TextByKey('editor-tab-variations-order');
+ btnVarOrder.Hint := TextByKey('editor-tab-variations-orderhint');
+ TabVariables.Caption := TextByKey('editor-tab-variables-title');
+ vleVariables.TitleCaptions[0] := TextByKey('editor-tab-variables-name');
+ vleVariables.TitleCaptions[1] := TextByKey('editor-tab-variables-value');
+ chkCollapseVariables.Caption := TextByKey('editor-tab-variables-toggleshowall');
+ btResetparams.Caption := TextByKey('editor-tab-variables-reset');
+ TabChaos.Caption := TextByKey('editor-tab-chaos-title');
+ vleChaos.TitleCaptions[0] := TextByKey('editor-tab-chaos-path');
+ vleChaos.TitleCaptions[1] := TextByKey('editor-tab-chaos-modifier');
+ optTo.Caption := TextByKey('editor-tab-chaos-viewasto');
+ mnuChaosViewTo.Caption := TextByKey('editor-tab-chaos-viewasto');
+ optFrom.Caption := TextByKey('editor-tab-chaos-viewasfrom');
+ mnuChaosViewFrom.Caption := TextByKey('editor-tab-chaos-viewasfrom');
+ TriangleTab.Caption := TextByKey('editor-tab-triangle-title');
+ GroupBox3.Caption := TextByKey('editor-tab-triangle-pivot');
+ GroupBox7.Caption := TextByKey('editor-tab-transform-coordsystem');
+ GroupBox9.Caption := TextByKey('editor-tab-transform-affine');
+ GroupBox8.Caption := TextByKey('editor-tab-transform-postaffine');
+ btSwapCoefs.Caption:= TextByKey('editor-tab-transform-swapaffine');
+ btSwapCoefs.Hint := TextByKey('editor-tab-transform-swapaffinehint');
+ RotateXYO.Caption := TextByKey('editor-popup-triangle-rotateall');
+ RotateX.Caption := TextByKey('editor-popup-triangle-rotatex');
+ RotateY.Caption := TextByKey('editor-popup-triangle-rotatey');
+ RotateO.Caption := TextByKey('editor-popup-triangle-rotateo');
+ ScaleXYO.Caption := TextByKey('editor-popup-triangle-scaleall');
+ ScaleX.Caption := TextByKey('editor-popup-triangle-scalex');
+ ScaleY.Caption := TextByKey('editor-popup-triangle-scaley');
+ ScaleO.Caption := TextByKey('editor-popup-triangle-scaleo');
+ RectGrid.Caption := TextByKey('editor-popup-triangle-squaregrid');
+ TriGrid.Caption := TextByKey('editor-popup-triangle-hexgrid');
+ InvertMovevalue1.Caption := TextByKey('editor-popup-triangle-invertstep');
+ CalcArcsinScale.Caption := TextByKey('editor-popup-triangle-arcsin');
+ ShowModVals.Caption := TextByKey('editor-popup-triangle-display');
+ mnuFlipAllLine.Caption := TextByKey('editor-popup-panel-allflipline');
+ tbTriangle.Hint := TextByKey('editor-tab-triangle-menuhint');
+ btnResetPivot.Hint := TextByKey('editor-tab-triangle-resetpivot');
+ btnPickPivot.Hint := TextByKey('editor-tab-triangle-pickpivot');
+ btTrgRotateLeft.Hint := TextByKey('editor-tab-triangle-rotateleft');
+ btTrgRotateRight.Hint := TextByKey('editor-tab-triangle-rotateright');
+ btTrgMoveUp.Hint := TextByKey('editor-tab-triangle-moveup');
+ btTrgMoveDown.Hint := TextByKey('editor-tab-triangle-movedown');
+ btTrgMoveLeft.Hint := TextByKey('editor-tab-triangle-moveleft');
+ btTrgMoveRight.Hint := TextByKey('editor-tab-triangle-moveright');
+ btTrgScaleDown.Hint := TextByKey('editor-tab-triangle-scaledown');
+ btTrgScaleUp.Hint := TextByKey('editor-tab-triangle-scaleup');
+ tbAutoWeights.Hint := TextByKey('editor-tab-triangle-autoweight');
+ tabXForm.Caption := TextByKey('editor-tab-transform-title');
+ btnResetCoefs.Caption := TextByKey('editor-tab-transform-reset');
+ btnResetCoefs.Hint := TextByKey('editor-tab-transform-resethint');
+ btnCoefsRect.Caption := TextByKey('editor-tab-transform-rectangular');
+ btnCoefsRect.Hint := TextByKey('editor-tab-transform-rectangularhint');
+ btnCoefsPolar.Caption := TextByKey('editor-tab-transform-polar');
+ btnCoefsPolar.Hint := TextByKey('editor-tab-transform-polarhint');
+ btnResetPostCoefs.Caption := TextByKey('editor-tab-transform-resetpost');
+ btnResetPostCoefs.Hint := TextByKey('editor-tab-transform-resetposthint');
+ btConjugate.Caption := 'TVT'#$02C9#$00B9#32#32 + TextByKey('editor-tab-transform-conjugate');
+ btConjugate.Hint := TextByKey('editor-tab-transform-conjugatehint');
+ chkAutoZScale.Caption := TextByKey('editor-tab-transform-autozscale');
+ btnXcoefs.Hint := TextByKey('editor-tab-transform-resetxhint');
+ btnXpost.Hint := TextByKey('editor-tab-transform-resetxhint');
+ btnYcoefs.Hint := TextByKey('editor-tab-transform-resetyhint');
+ btnYpost.Hint := TextByKey('editor-tab-transform-resetyhint');
+ btnOcoefs.Hint := TextByKey('editor-tab-transform-resetohint');
+ btnOpost.Hint := TextByKey('editor-tab-transform-resetohint');
+ tabColors.Caption := TextByKey('editor-tab-color-title');
+ GroupBox1.Caption := TextByKey('editor-tab-color-transformcolor');
+ pnlSymmetry.Caption := TextByKey('editor-tab-color-colorspeed');
+ pnlOpacity.Caption := TextByKey('editor-tab-color-opacity');
+ pnlDC.Caption := TextByKey('editor-tab-color-directcolor');
+ chkXFormSolo.Caption := TextByKey('editor-tab-color-togglesolo');
+ GroupBox2.Caption := TextByKey('editor-tab-color-varpreview');
+ GroupBox10.Caption := TextByKey('editor-tab-triangle-reflection');
+ GroupBox5.Caption := TextByKey('editor-tab-triangle-transforms');
+ GroupBox6.Caption := TextByKey('editor-tab-triangle-coordinates');
+ btnResetFlip.Hint := TextByKey('editor-tab-triangle-resetflip');
+ Label1.Caption := TextByKey('editor-tab-color-previewrange');
+ Label2.Caption := TextByKey('editor-tab-color-previewdepth');
+ Label3.Caption := TextByKey('editor-tab-color-previewdensity');
+ Label1.Hint := TextByKey('editor-tab-color-previewrangehint');
+ Label2.Hint := TextByKey('editor-tab-color-previewdepthhint');
+ Label3.Hint := TextByKey('editor-tab-color-previewdensityhint');
+ Label4.Caption := TextByKey('editor-tab-variations-search'); // AV
+ tbResetAll.Hint := TextByKey('editor-toolbar-newflame');
+ tbAdd.Hint := TextByKey('editor-toolbar-newtransform');
+ mnuAdd.Caption := TextByKey('editor-toolbar-newtransform');
+ mnuAdd1.Caption := TextByKey('editor-toolbar-newtransform');
+ tbPreLink.Hint := TextByKey('editor-toolbar-addlinkedpretransform');
+ tbPostLink.Hint := TextByKey('editor-toolbar-addlinkedtransform');
+ mnuLinkPostxform.Caption := TextByKey('editor-toolbar-addlinkedtransform');
+ mnuLinkPrexform.Caption := TextByKey('editor-toolbar-addlinkedpretransform');
+ tbDuplicate.Hint := TextByKey('editor-toolbar-duplicatetransform');
+ mnuDuplicate.Caption := TextByKey('editor-toolbar-duplicatetransform');
+ tbDelete.Hint := TextByKey('editor-toolbar-removetransform');
+ mnuDelete.Caption := TextByKey('editor-toolbar-removetransform');
+ tbSelect.Hint := TextByKey('editor-toolbar-modeselect');
+ mnuSelectMode.Caption := TextByKey('editor-toolbar-modeselect');
+ tbMove.Hint := TextByKey('editor-toolbar-modemove');
+ tbRotate.Hint := TextByKey('editor-toolbar-moderotate');
+ tbScale.Hint := TextByKey('editor-toolbar-modescale');
+ tbPivotMode.Caption := TextByKey('editor-toolbar-toggleworldpivot');
+ tbPivotMode.Hint := TextByKey('editor-toolbar-toggleworldpivot');
+ tbRotate90CCW.Caption := TextByKey('editor-toolbar-rotate90ccw');
+ tbRotate90CCW.Hint := TextByKey('editor-toolbar-rotate90ccw');
+ btTrgRotateLeft90.Hint := TextByKey('editor-toolbar-rotate90ccw');
+ RotateTriangle90CCW1.Caption := TextByKey('editor-toolbar-rotate90ccw');
+ tbRotate90CW.Caption := TextByKey('editor-toolbar-rotate90cw');
+ tbRotate90CW.Hint := TextByKey('editor-toolbar-rotate90cw');
+ btTrgRotateRight90.Hint := TextByKey('editor-toolbar-rotate90cw');
+ RotateTriangle90CCW2.Caption := TextByKey('editor-toolbar-rotate90cw');
+ tbFlipHorz.Caption := TextByKey('editor-toolbar-fliph');
+ tbFlipHorz.Hint := TextByKey('editor-toolbar-fliph');
+ mnuFlipHorizontal.Caption := TextByKey('editor-toolbar-fliph');
+ tbFlipVert.Caption := TextByKey('editor-toolbar-flipv');
+ tbFlipVert.Hint := TextByKey('editor-toolbar-flipv');
+ mnuFlipVertical.Caption := TextByKey('editor-toolbar-flipv');
+ tbVarPreview.Caption := TextByKey('editor-toolbar-togglevarpreview');
+ tbVarPreview.Hint := TextByKey('editor-toolbar-togglevarpreview');
+ mnuShowVarPreview.Caption := TextByKey('editor-toolbar-togglevarpreview');
+ tbPostXSwap.Caption := TextByKey('editor-toolbar-toggleposttransform');
+ tbPostXSwap.Hint := TextByKey('editor-toolbar-toggleposttransform');
+ tb2PostXSwap.Hint := TextByKey('editor-toolbar-toggleposttransform');
+ oggleposttriangleediting1.Caption := TextByKey('editor-toolbar-toggleposttransform');
+ tbEnableFinalxform.Caption := TextByKey('editor-toolbar-togglefinaltransform');
+ tbEnableFinalxform.Hint := TextByKey('editor-toolbar-togglefinaltransform');
+ mnuAutoZoom.Caption := TextByKey('editor-popup-panel-autozoom');
+ tbExtendedEdit.Hint := TextByKey('editor-popup-panel-toggleextendededit');
+ mnuExtendedEdit.Caption := TextByKey('editor-popup-panel-toggleextendededit');
+ tbAxisLock.Hint := TextByKey('editor-popup-panel-locktransformaxes');
+ mnuAxisLock.Caption := TextByKey('editor-popup-panel-locktransformaxes');
+ btnShowLine.Caption := TextByKey('editor-tab-triangle-showline');
+ btnShowLine.Hint := TextByKey('editor-tab-triangle-showlinehint');
+ btnFlip.Caption := TextByKey('editor-tab-triangle-fliptriangle');
+ btnFlip.Hint := TextByKey('editor-tab-triangle-fliptrianglehint');
+ btFlipX.Hint := TextByKey('editor-tab-triangle-flipx');
+ btFlipY.Hint := TextByKey('editor-tab-triangle-flipy');
+ btFlipDiag.Hint := TextByKey('editor-tab-triangle-flipxy');
+ lblFlipAngle.Hint := TextByKey('editor-status-angle');
+ editPivotX.Hint := TextByKey('editor-tab-triangle-pivot1x');
+ editPivotY.Hint := TextByKey('editor-tab-triangle-pivot1y');
+ editFlipX.Hint := TextByKey('editor-tab-triangle-pivot2x');
+ editFlipY.Hint := TextByKey('editor-tab-triangle-pivot2y');
+ btnFullChaos.Hint := TextByKey('editor-toolbar-showchaos');
+ ShowChaosMatrix.Caption := btnFullChaos.Hint;
+
+ mnuFlipAllH.Caption := TextByKey('editor-popup-panel-allfliph');
+ mnuFlipAllV.Caption := TextByKey('editor-popup-panel-allflipv');
+ mnuResetLoc.Caption := TextByKey('editor-popup-quality-autoreset');
+ mnuResetTrgPosition.Caption := TextByKey('editor-popup-transform-resetposition');
+ mnuResetTrgRotation.Caption := TextByKey('editor-popup-transform-resetrotation');
+ mnuResetTrgScale.Caption := TextByKey('editor-popup-transform-resetscale');
+ mnuResetTrgFlip.Caption := TextByKey('editor-popup-transform-resetflip');
+ mnuCopyTriangle.Caption := TextByKey('editor-popup-transform-copycoords');
+ mnuPasteTriangle.Caption := TextByKey('editor-popup-transform-pastecoords');
+ mnuReset.Caption := TextByKey('editor-popup-transform-resetentiretriangle');
+ mnuChaosRebuild.Caption := TextByKey('editor-popup-chaos-rebuildlinks');
+ mnuChaosClearAll.Caption := TextByKey('editor-popup-chaos-clearall');
+ mnuChaosSetAll.Caption := TextByKey('editor-popup-chaos-setall');
+ btClearChaos.Hint := TextByKey('editor-popup-chaos-clearall');
+ btResetChaos.Hint := TextByKey('editor-popup-chaos-setall');
+ NormChaos.Caption := TextByKey('editor-popup-chaos-normalize');
+ RandomizeMatrix.Caption := TextByKey('editor-popup-chaos-randomize');
+ RandomizeChaos.Caption := TextByKey('editor-popup-chaos-random');
+ ResetChaos.Caption := TextByKey('editor-popup-chaos-reset');
+ ChaosClearBelow.Caption := TextByKey('editor-popup-chaos-clearbelow');
+ ClearAllAbove.Caption := TextByKey('editor-popup-chaos-clearabove');
+ btnPivotMode.Hint := TextByKey('editor-tab-triangle-toworld');
+ AddContainer.Caption := TextByKey('editor-popup-chaos-container');
+ InheritWeights.Caption := TextByKey('editor-popup-chaos-keepweight');
+ InvertXaos.Caption := TextByKey('editor-popup-chaos-invert');
+ btChaos.Caption := TextByKey('editor-popup-chaos-showmenu');
+ GridComboBox.Items[0] := TextByKey('editor-grid-rectangular');
+ GridComboBox.Items[1] := TextByKey('editor-grid-polar');
+ GridComboBox.Items[2] := TextByKey('editor-grid-bipolar');
+ GridComboBox.Items[3] := TextByKey('editor-grid-elliptic');
+ GridComboBox.ItemIndex := 0;
+ lblGridType.Caption := TextByKey('editor-grid-type');
+ lblGridType.Hint := TextByKey('editor-grid-typehint');
+ GroupBox5.Hint := StringReplace(TextByKey('editor-tab-triangle-transformshint'),
+ ',', ','#13, [rfReplaceAll]);
+ // Math constants
+ RedrawButtons;
+ btnMathPopup.Hint := TextByKey('editor-toolbar-pihint');
+ Pifractions.Caption := TextByKey('editor-toolbar-pimenu') + #32#$03C0'...';
+ InsertPi1.Caption := #$03C0;
+ Insert2Pi1.Caption := '2'#$03C0;
+ InsertPi21.Caption := #$03C0'/2';
+ InsertPi31.Caption := #$03C0'/3';
+ InsertPi41.Caption := #$03C0'/4';
+ InsertPi61.Caption := #$03C0'/6';
+ Insert1sqrt21.Caption := '1/'#$221A#$0305'2';
+ Insertsqrt321.Caption := #$221A#$0305'3/2';
+ Insertsqrt331.Caption := #$221A#$0305'3/3';
+ Insertsqrt361.Caption := #$221A#$0305'3/6';
+ Insertsqrt31.Caption := #$221A#$0305'3';
+ SquareRoots1.Caption := TextByKey('editor-toolbar-squareroots');
+ InsertGoldenratio1.Caption := TextByKey('editor-toolbar-goldenratio');
+ InvCurrentNum.Caption := TextByKey('editor-toolbar-invert');
+ Squarethenumber1.Caption := TextByKey('editor-toolbar-square');
+ SquareRoot.Caption := TextByKey('editor-toolbar-squareroot');
+ Mul2.Caption := TextByKey('editor-toolbar-multiply');
+ Div2.Caption := TextByKey('editor-toolbar-divide');
+ CalcCos.Caption := TextByKey('editor-toolbar-calccos');
+ CalcSin.Caption := TextByKey('editor-toolbar-calcsin');
+ CalcTan.Caption := TextByKey('editor-toolbar-calctan');
+ UseDegrees.Caption := TextByKey('editor-toolbar-usedegrees');
+
+ ExtSM := GetSystemMenu(Handle, False); // AV
+ InsertMenu(ExtSM, UINT(5), MF_ByPosition or MF_Separator, 0, nil);
+ InsertMenu(ExtSM, UINT(6), MF_ByPosition, $C0, PChar(TextByKey('main-menu-screenshot')));
+
+ // Custom control setup
+ TriangleView := TCustomDrawControl.Create(self);
+ TriangleView.TabStop := True;
+ TriangleView.TabOrder := 0;
+ TriangleView.Parent := GrphPnl;
+ TriangleView.Align := alClient;
+ TriangleView.Visible := True;
+
+ TriangleView.OnPaint := TriangleViewPaint;
+
+ TriangleView.OnDblClick := TriangleViewDblClick;
+ TriangleView.OnMouseDown := TriangleViewMouseDown;
+ TriangleView.OnMouseMove := TriangleViewMouseMove;
+ TriangleView.OnMouseUp := TriangleViewMouseUp;
+ TriangleView.OnMouseWheel := TriangleViewMouseWheel;
+ TriangleView.OnKeyDown := TriangleViewKeyDown;
+ TriangleView.OnKeyUp := TriangleViewKeyUp;
+
+ TriangleView.OnEnter := TriangleViewInvalidate;
+ TriangleView.OnExit := TriangleViewExit;
+ TriangleView.OnMouseLeave := TriangleViewmouseLeave;
+
+ SetLength(VarsCache, NRVAR); // AV
+ for i:= 0 to NRVAR - 1 do begin
+ vn := Varnames(i);
+ VEVars.InsertRow(vn, '0', True);
+ VarsCache[i] := MinDouble; // AV: moved here
+ end;
+ for i:= 0 to GetNrVariableNames - 1 do begin
+ vn := GetVariableNameAt(i);
+ vleVariables.InsertRow(vn, '0', True);
+ end;
+
+ vleChaos.InsertRow(Format(TextByKey('editor-common-toprefix'), [1]), '1', true);
+ mnuChaosRebuild.Checked := RebuildXaosLinks;
+
+ GraphZoom := 1;
+
+ case EditPrevQual of
+ 0: begin
+ mnuLowQuality.Checked := true;
+ PreviewDensity := prevLowQuality;
+ end;
+ 1: begin
+ mnuMediumQuality.Checked := true;
+ PreviewDensity := prevMediumQuality;
+ end;
+ 2: begin
+ mnuHighQuality.Checked := true;
+ PreviewDensity := prevHighQuality;
+ end;
+ end;
+ cp := TControlPoint.Create;
+ Render := TRenderer.Create;
+
+ SelectMode := true;
+ editMode := modeMove;
+ AxisLock := TransformAxisLock;
+ tbAxisLock.Down := AxisLock;
+ ExtendedEdit := ExtEditEnabled;
+// tbExtendedEdit.Down := ExtendedEdit;
+ widgetMode := modeRotate;
+// tbExtendedEdit.ImageIndex := imgExtMove;
+ ShowFlipLine := False;
+ hasLinkX := False;
+
+ EdgeCaught := false;
+ CornerCaught := false;
+ TriangleCaught := false;
+ mouseOverTriangle := -1;
+ mouseOverCorner := -1;
+ mouseOverEdge := -1;
+ mouseOverWidget := -1;
+ oldSelected := -1;
+
+ MemTriangle.x[0] := 1;
+ MemTriangle.y[0] := 0;
+ MemTriangle.x[1] := 0;
+ MemTriangle.y[1] := 0;
+ MemTriangle.x[2] := 0;
+ MemTriangle.y[2] := 1;
+
+ // AV: reflection start settings
+ FlipPoint.x := 0;
+ FlipPoint.y := 1;
+
+ // AV: added some "magic" variation parameters presets :)
+ with vleVariables do
+ begin
+ with ItemProps['fan2_x'] do
+ begin
+ EditStyle := esPickList;
+ PickList.Add('1.41421');
+ PickList.Add('1');
+ PickList.Add('0.816497');
+ PickList.Add('0.707107');
+ PickList.Add('0.57735');
+ PickList.Add('0.534522');
+ PickList.Add('0.5');
+ PickList.Add('0.471405');
+ PickList.Add('0.447214');
+ PickList.Add('0.426401');
+ PickList.Add('0.408248');
+ end;
+ with ItemProps['fan2_y'] do
+ begin
+ EditStyle := esPickList;
+ PickList.Add('6.28319');
+ PickList.Add('4.71239');
+ PickList.Add('4.18879');
+ PickList.Add('3.92699');
+ PickList.Add('3.66519');
+ PickList.Add('3.59039');
+ PickList.Add('3.53429');
+ PickList.Add('3.49066');
+ PickList.Add('3.45575');
+ PickList.Add('3.42719');
+ PickList.Add('3.40339');
+ end;
+ with ItemProps['rings2_val'] do
+ begin
+ EditStyle := esPickList;
+ PickList.Add('1');
+ PickList.Add('1.22474');
+ PickList.Add('1.41421'); // degenerate case - circumferences
+ PickList.Add('2');
+ end;
+ ItemProps['trianglecrop_mode'].PickList.CommaText := '"0","1","2"';
+ ItemProps['projective_mode'].PickList.CommaText := '"0","1","2"';;
+ ItemProps['affine3D_mode'].PickList.CommaText := '"0","1","2"';;
+ ItemProps['spherecrop_mode'].PickList.CommaText := '"0","1","2"';;
+ for i := NrLocVar to NumBuiltInVars - 1 do
+ begin
+ vn := VarNames(i);
+ if pos('hypertile', vn) > 0 then
+ begin
+ ItemProps[vn + '_p'].PickList.CommaText := '"3","4","5","7","8"';
+ ItemProps[vn + '_q'].PickList.CommaText := '"3","4","5","7","8"';
+ end;
+ end;
+
+ if NumBuiltInVars < NrVar then
+ begin
+ i := GetVariationIndex('hexes');
+ if (i > 0) then
+ with ItemProps['hexes_rotate'] do
+ begin
+ EditStyle := esPickList;
+ PickList.Add('0.166667');
+ PickList.Add('0.333333');
+ PickList.Add('0.5');
+ PickList.Add('0.666667');
+ PickList.Add('0.833333');
+ PickList.Add('1');
+ end;
+ end;
+ end;
+
+ // MainForm.Buttons.GetBitmap(9, btnResetPivot.Glyph);
+ // btnResetFlip.Glyph.Assign(btnResetPivot.Glyph);
+
+ PageControl.ActivePage := tabVariations; // AV
+ cbCollapseVariations.ItemIndex := 0; // AV
+end;
+
+procedure TEditForm.FormDestroy(Sender: TObject);
+begin
+ cp.free;
+ Render.free;
+end;
+
+procedure TEditForm.TriangleViewMouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: integer);
+var
+ vx, vy, fx, fy: double;
+ mt, mc, me: integer;
+ a, t: double;
+
+ i, j: integer;
+ d: double;
+
+ i0, i1: integer;
+
+ dx, dy, x1, y1: double;
+label FoundCorner, Skip1, Skip2;
+begin
+ Scale(fx, fy, x, y);
+ StatusBar.Panels[0].Text := Format(TextByKey('editor-status-xformat'), [fx]);
+ StatusBar.Panels[1].Text := Format(TextByKey('editor-status-yformat'), [fy]);
+
+ if viewDragMode then // graph panning
+ begin
+ if (fx = oldx) and (fy = oldy) then exit;
+ viewDragged := true;
+ GcenterX := GcenterX - (fx - oldx);
+ GcenterY := GcenterY - (fy - oldy);
+ TriangleView.Refresh;
+ exit;
+ end;
+
+ mt:=mouseOverTriangle;
+ mc:=MouseOverCorner;
+ me:=mouseOverEdge;
+
+ if not (CornerCaught or TriangleCaught) then // look for a point under cursor
+ begin
+ mouseOverWidget := -1;
+ mouseOverEdge := -1;
+ mouseOverCorner:= -1;
+ mouseOverPos.x := fx;
+ mouseOverPos.y := fy;
+
+ if SelectMode then
+ begin
+ i0:=0;
+ i1:=LastTriangle;//Transforms-1;
+ end
+ else begin
+ i0:=SelectedTriangle;
+ i1:=i0;
+ end;
+
+ for i := i1 downto i0 do
+ begin
+ for j := 0 to 2 do // -- detect point hit first
+ begin
+ d := dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j]);
+ if (d * GraphZoom * 50) < 4 then
+ begin
+ mouseOverTriangle := i;
+ mouseOverCorner := j;
+// mouseOverEdge := -1;
+
+// -- from MouseDown -- for highlighting:
+// TODO: optimize...
+ if (j = 1) then
+ begin
+ if PivotMode = pivotLocal then begin
+ Pivot.x := 0;
+ Pivot.y := 0;
+ end
+ else Pivot := GetPivot;
+
+ LocalAxisLocked := true;
+ end
+ else begin
+ Pivot := GetPivot(mouseOverTriangle);
+ LocalAxisLocked := false;
+ end;
+ oldx := MainTriangles[mouseOverTriangle].x[j] - Pivot.X;
+ oldy := MainTriangles[mouseOverTriangle].y[j] - Pivot.Y;
+ olddist := Hypot(oldx, oldy);
+// --
+
+// -- for Pick Pivot
+ if editMode = modePick then
+ begin
+ mouseOverPos.x := MainTriangles[mouseOverTriangle].x[mouseOverCorner];
+ mouseOverPos.y := MainTriangles[mouseOverTriangle].y[mouseOverCorner];
+ end;
+// ---
+ goto FoundCorner;
+ end;
+ end;
+ end;
+
+ if ExtendedEdit then //and (oldMode = modeNone) then
+ begin
+ for i := 0 to 3 do // -- detect 'widget' hit
+ for j := 0 to 1 do begin
+ if abs(line_dist(fx, fy, Widgets[i][j].x, Widgets[i][j].y,
+ Widgets[i][j+1].x, Widgets[i][j+1].y)
+ ) * GraphZoom * 50 < 3 then
+ begin
+ mouseOverTriangle := SelectedTriangle;
+ mouseOverWidget := i;
+// mouseOverEdge := -1;
+// mouseOverCorner:= -1;
+ mouseOverPos.x := fx;
+ mouseOverPos.y := fy;
+
+ goto FoundCorner;
+ end;
+ end;
+
+ for i := i1 downto i0 do
+ begin
+ for j := 0 to 2 do // -- detect edge hit
+ begin
+ if abs(line_dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j],
+ MainTriangles[i].x[(j+1) mod 3], MainTriangles[i].y[(j+1) mod 3])
+ ) * GraphZoom * 50 < 3 then
+ begin
+ mouseOverTriangle:=i;
+ mouseOverEdge := j;
+// mouseOverCorner:= -1;
+ mouseOverPos.x := fx;
+ mouseOverPos.y := fy;
+
+ goto FoundCorner;
+ end;
+ end;
+ end;
+ end;
+
+ i := InsideTriangle(fx, fy);
+ if i >= 0 then mouseOverTriangle:=i
+ else mouseOverTriangle:=-1;
+
+FoundCorner:
+ end;
+
+ if (mouseOverTriangle >= 0) or (SelectMode = false) or (oldMode <> modeNone) then
+ begin
+ if (mouseOverWidget >= 0) and (oldMode = modeNone) then
+ TriangleView.Cursor := crEditRotate
+ else
+ if (mouseOverEdge >= 0) and (oldMode = modeNone) then begin // kinda hack, not good...
+ if mouseOverEdge = 2 then
+ TriangleView.Cursor := crEditScale
+ else
+ TriangleView.Cursor := crEditRotate;
+ end
+ else
+ case editMode of
+ modeMove:
+ TriangleView.Cursor := crEditMove;
+ modeRotate:
+ TriangleView.Cursor := crEditRotate;
+ modeScale:
+ TriangleView.Cursor := crEditScale;
+ modePick:
+ TriangleView.Cursor := crEditArrow;
+ end
+ end
+ else
+ TriangleView.Cursor := crEditArrow; //crDefault;
+
+ Shift := Shift - [ssLeft];
+
+ if CornerCaught then // Modify a point ///////////////////////////////////////
+ begin
+ if (editMode = modeRotate) then // rotate point
+ begin // rotate point around pivot
+ d := dist(Pivot.X, Pivot.Y, fx, fy);
+ if d<>0 then begin
+ if ssShift in Shift then // angle snap
+ begin
+ try
+ t := StrToFloat(txtTrgRotateValue.Text)/180*PI;
+ //assert(t<>0);
+ except
+ t := 15.0*PI/180.0;
+ txtTrgRotateValue.Text := '15';
+ end;
+ if t = 0 then goto Skip1; //?
+
+ a := Round(arctan2(fy-Pivot.Y, fx-Pivot.X)/t)*t;
+ vx := olddist*cos(a);
+ vy := olddist*sin(a);
+ end
+ else begin
+Skip1:
+ vx := (fx-Pivot.X)*olddist/d;
+ vy := (fy-Pivot.Y)*olddist/d;
+ a := arctan2(vy,vx) - arctan2(oldy,oldx);
+ end;
+
+ if LocalAxisLocked then with MainTriangles[SelectedTriangle] do
+ begin
+ assert(SelectedCorner = 1);
+ x[0] := OldTriangle.x[0] + Pivot.X+vx - OldTriangle.x[1];
+ y[0] := OldTriangle.y[0] + Pivot.Y+vy - OldTriangle.y[1];
+ x[2] := OldTriangle.x[2] + Pivot.X+vx - OldTriangle.x[1];
+ y[2] := OldTriangle.y[2] + Pivot.Y+vy - OldTriangle.y[1];
+ end;
+ MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X+vx;
+ MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y+vy;
+ end
+ else a := 0;
+ vy := abs(
+ arctan2(MainTriangles[SelectedTriangle].y[0]-MainTriangles[SelectedTriangle].y[1],
+ MainTriangles[SelectedTriangle].x[0]-MainTriangles[SelectedTriangle].x[1])
+ -arctan2(MainTriangles[SelectedTriangle].y[2]-MainTriangles[SelectedTriangle].y[1],
+ MainTriangles[SelectedTriangle].x[2]-MainTriangles[SelectedTriangle].x[1])
+ );
+ if vy > PI then vy := 2*PI - vy;
+ StatusBar.Panels[2].Text := Format(TextByKey('editor-status-rotateformat'), [a*180/PI, vy*180/PI]);
+ end
+ else if (editMode = modeScale) then
+ begin // move point along vector ("scale")
+ if olddist<>0 then begin
+ d := (oldx*(fx-Pivot.X) + oldy*(fy-Pivot.Y))/olddist;
+
+ if ssShift in Shift then // 'snapped' scale
+ begin
+ try // use move-value for 'scaling' point:
+ t := abs(StrToFloat(txtTrgMoveValue.Text));
+ //assert(t<>0);
+ except
+ t := 0.1;
+ txtTrgMoveValue.Text := '0.1';
+ end;
+ if t <> 0 then d := Trunc(d/t)*t;
+ end;
+ vx := oldx*d/olddist;
+ vy := oldy*d/olddist;
+
+ if LocalAxisLocked then with MainTriangles[SelectedTriangle] do
+ begin
+ assert(SelectedCorner = 1);
+ x[0] := OldTriangle.x[0] + Pivot.X+vx - OldTriangle.x[1];
+ y[0] := OldTriangle.y[0] + Pivot.Y+vy - OldTriangle.y[1];
+ x[2] := OldTriangle.x[2] + Pivot.X+vx - OldTriangle.x[1];
+ y[2] := OldTriangle.y[2] + Pivot.Y+vy - OldTriangle.y[1];
+ end;
+ MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X + vx;
+ MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y + vy;
+
+ StatusBar.Panels[2].Text := Format(TextByKey('editor-status-scaleformat'),
+ [Hypot(vx, vy), d*100/olddist]);
+ end
+ else begin
+ MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X;
+ MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y;
+ end;
+ end
+ else begin // snap/move
+ if ssShift in Shift then // snap to axis
+ begin
+ if abs(fx-Pivot.X) > abs(fy-Pivot.Y) then begin
+ vx := fx;
+ vy := Pivot.Y;
+ end
+ else begin
+ vx := Pivot.x;
+ vy := fy;
+ end;
+ end
+ else begin // just move
+ vx := fx;
+ vy := fy;
+ end;
+ if (SelectedCorner = 1) and AxisLock then with MainTriangles[SelectedTriangle] do
+ begin
+ x[0] := OldTriangle.x[0] + (vx - OldTriangle.x[1]);
+ y[0] := OldTriangle.y[0] + (vy - OldTriangle.y[1]);
+ x[2] := OldTriangle.x[2] + (vx - OldTriangle.x[1]);
+ y[2] := OldTriangle.y[2] + (vy - OldTriangle.y[1]);
+ end;
+ MainTriangles[SelectedTriangle].x[SelectedCorner] := vx;
+ MainTriangles[SelectedTriangle].y[SelectedCorner] := vy;
+ StatusBar.Panels[2].Text := Format(TextByKey('editor-status-moveformat'), [vx-(Pivot.X+oldx), vy-(Pivot.Y+oldy)]);
+ end;
+ // --
+ HasChanged := True;
+ UpdateFlameX;
+// UpdateFlame(False);
+ StatusBar.Refresh;
+ exit;
+ end
+ else if TriangleCaught then // Modify a whole triangle ///////////////////////
+ begin
+ if (editMode = modeRotate) then // rotate triangle
+ begin
+ a := arctan2(fy-Pivot.Y, fx-Pivot.X) - arctan2(oldy, oldx);
+ if ssShift in Shift then // angle snap
+ begin
+ try
+ t := StrToFloat(txtTrgRotateValue.Text)/180*PI;
+ //assert(t<>0);
+ except
+ t := 15.0*PI/180.0;
+ txtTrgRotateValue.Text := '15';
+ end;
+ if t = 0 then goto Skip2;
+
+ a := Round(a/t)*t
+ end;
+Skip2:
+ MainTriangles[SelectedTriangle] :=
+ RotateTrianglePoint(OldTriangle, Pivot.X, Pivot.Y, a);
+
+ vx := MainTriangles[SelectedTriangle].x[0]-MainTriangles[SelectedTriangle].x[1];
+ vy := MainTriangles[SelectedTriangle].y[0]-MainTriangles[SelectedTriangle].y[1];
+ if abs(vx*(MainTriangles[SelectedTriangle].x[2]-MainTriangles[SelectedTriangle].x[1])+
+ vy*(MainTriangles[SelectedTriangle].y[2]-MainTriangles[SelectedTriangle].y[1])) < 0.001
+ then
+ StatusBar.Panels[2].Text := Format(TextByKey('editor-status-rotateformat2'), [a*180/PI, arctan2(vy, vx)*180/PI])
+ else StatusBar.Panels[2].Text := Format(TextByKey('editor-status-rotateformat3'), [a*180/PI]);
+ end
+ else if (editMode = modeScale) then // scale
+ begin
+ if olddist<>0 then begin
+ vy := (oldx*(fx-Pivot.X) + oldy*(fy-Pivot.Y))/sqr(olddist);
+
+ if ssShift in Shift then // 'snapped' scale
+ begin
+ try
+ t := abs(StrToFloat(txtTrgScaleValue.Text)/100.0 - 1.0);
+ //assert(t<>0);
+ except
+ t := 0.1;
+ txtTrgRotateValue.Text := '0.1';
+ end;
+ if t <> 0 then vy := Trunc(vy/t)*t;
+ end;
+
+ MainTriangles[SelectedTriangle] :=
+ ScaleTrianglePoint(OldTriangle, Pivot.X, Pivot.Y, vy);
+ StatusBar.Panels[2].Text := Format(TextByKey('editor-status-scaleformat2'), [vy*100]);
+ end
+ else MainTriangles[SelectedTriangle] := OldTriangle;
+ end
+ else begin // snap/move
+ vx := fx - (Pivot.x + oldx);
+ vy := fy - (Pivot.y + oldy);
+ if ssShift in Shift then // snap to axis
+ begin
+ if abs(vx) > abs(vy) then vy := 0
+ else vx := 0;
+ end;
+ with MainTriangles[SelectedTriangle] do
+ begin
+ x[0] := OldTriangle.x[0] + vx;
+ y[0] := OldTriangle.y[0] + vy;
+ x[1] := OldTriangle.x[1] + vx;
+ y[1] := OldTriangle.y[1] + vy;
+ x[2] := OldTriangle.x[2] + vx;
+ y[2] := OldTriangle.y[2] + vy;
+ end;
+ StatusBar.Panels[2].Text := Format(TextByKey('editor-status-moveformat2'), [vx, vy]);
+ end;
+ HasChanged := True;
+ UpdateFlameX;
+// UpdateFlame(False);
+ StatusBar.Refresh;
+ exit;
+ end;
+ if ((mt <> mouseOverTriangle) or (mc <> MouseOverCorner) or (me <> MouseOverEdge)) then
+ begin
+ if (mouseOverTriangle >= 0) then
+ StatusBar.Panels[2].Text := Format(TextByKey('editor-status-transformformat'), [mouseOverTriangle+1])
+ else StatusBar.Panels[2].Text := '';
+ TriangleView.Refresh;
+ end
+ else if editMode = modePick then TriangleView.Refresh; // hmm...
+end;
+
+procedure TEditForm.TriangleViewMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: integer);
+var
+ d, fx, fy: double;
+ i, j: integer;
+ i0, i1: integer;
+label
+ FoundTriangle;
+begin
+ TWinControl(Sender).SetFocus;
+
+ viewDragged := false;
+
+ Scale(fx, fy, x, y);
+
+ if Button = mbLeft then
+ begin
+ if editMode = modePick then
+ begin
+ if (mouseOverCorner >= 0) then // snap to point
+ begin
+ fx := MainTriangles[mouseOverTriangle].x[mouseOverCorner];
+ fy := MainTriangles[mouseOverTriangle].y[mouseOverCorner];
+ end;
+ if PivotMode = pivotLocal then
+ with MainTriangles[SelectedTriangle] do begin
+// xx := x[0] - x[1];
+// xy := y[0] - y[1];
+// yx := x[2] - x[1];
+// yy := y[2] - y[1];
+ d := (xx*yy - yx*xy);
+ if d <> 0 then
+ begin
+ LocalPivot.x := ( (fx - x[1]) * yy - (fy - y[1]) * yx) / d;
+ LocalPivot.y := (-(fx - x[1]) * xy + (fy - y[1]) * xx) / d;
+ end
+ end
+ else begin
+ WorldPivot.x := fx;
+ WorldPivot.y := fy;
+ end;
+ editMode := oldMode;
+ oldMode := modeNone;
+ btnPickPivot.Down := false;
+ ShowSelectedInfo;
+ TriangleView.Invalidate;
+ exit;
+ end;
+
+ Shift := Shift - [ssLeft];
+ if SelectMode then
+ begin
+ i0:=0;
+ i1:=LastTriangle;
+ end
+ else begin // Only check selected triangle
+ i0:=SelectedTriangle;
+ i1:=i0;
+ end;
+ oldSelected := SelectedTriangle;
+
+ for i := i1 downto i0 do
+ begin
+ for j := 0 to 2 do // detect corner hit
+ begin
+ d := dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j]);
+ if (d * GraphZoom * 50) < 4 then
+ begin
+ SelectedTriangle := i;
+ CornerCaught := True;
+
+ SelectedCorner := j;
+// Pivot := GetPivot;
+ if (j = 1) then //and ((rgPivot.ItemIndex = 1) or (rgPivot.ItemIndex = 4)) then
+ begin
+ if PivotMode = pivotLocal then begin
+ Pivot.x := 0;
+ Pivot.y := 0;
+ end
+ else Pivot := GetPivot;
+
+ LocalAxisLocked := true;
+ end
+ else begin
+ Pivot := GetPivot;
+ LocalAxisLocked := false;
+ end;
+ OldTriangle := MainTriangles[SelectedTriangle];
+ oldx := MainTriangles[SelectedTriangle].x[j] - Pivot.X;
+ oldy := MainTriangles[SelectedTriangle].y[j] - Pivot.Y;
+ olddist := sqrt(sqr(oldx) + sqr(oldy));
+
+ HasChanged := false;
+ ShowSelectedInfo;
+ TriangleView.Invalidate;
+ exit;
+ end;
+ end;
+ end;
+
+ if ExtendedEdit then //and (oldMode = modeNone) then
+ begin
+ for i := 0 to 3 do // -- detect 'widget' hit
+ for j := 0 to 1 do
+ begin
+ if abs(line_dist(fx, fy, Widgets[i][j].x, Widgets[i][j].y,
+ Widgets[i][j+1].x, Widgets[i][j+1].y)
+ ) * GraphZoom * 50 < 3 then
+ begin
+// modeHack := true;
+ if (oldMode = modeNone) then
+ begin
+ modeHack := true;
+ oldMode := editMode;
+ editMode := modeRotate;
+ end;
+ goto FoundTriangle;
+ end;
+ end;
+
+ for i := i1 downto i0 do
+ begin
+ for j := 0 to 2 do // -- detect edge hit
+ begin
+ if abs(line_dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j],
+ MainTriangles[i].x[(j+1) mod 3], MainTriangles[i].y[(j+1) mod 3])
+ ) * GraphZoom * 50 < 3 then
+ begin
+ SelectedTriangle := i;
+ EdgeCaught := true;
+// modeHack := true;
+ if (oldMode = modeNone) then
+ begin
+ modeHack := true;
+ oldMode := editMode;
+ if j = 2 then
+ editMode := modeScale
+ else
+ if AxisLock then editMode := modeRotate
+ else
+begin
+ // hacky...
+ CornerCaught := True;
+ editMode := modeRotate;
+ if j = 1 then SelectedCorner := 2
+ else SelectedCorner := 0;
+ Pivot := GetPivot;
+ LocalAxisLocked := false;
+ OldTriangle := MainTriangles[SelectedTriangle];
+ oldx := MainTriangles[SelectedTriangle].x[SelectedCorner] - Pivot.X;
+ oldy := MainTriangles[SelectedTriangle].y[SelectedCorner] - Pivot.Y;
+ olddist := sqrt(sqr(oldx) + sqr(oldy));
+
+ HasChanged := false;
+ ShowSelectedInfo;
+ TriangleView.Invalidate;
+ exit;
+end;
+ end;
+ goto FoundTriangle;
+ end;
+ end;
+ end;
+ end;
+
+ // so user hasn't selected any corners,
+ // let's check for triangles then!
+
+ if SelectMode then
+ begin
+ i := InsideTriangle(fx, fy);
+ if i >= 0 then SelectedTriangle := i
+ else
+ if (oldMode = modeNone) and not(ssShift in Shift) then exit;
+ end;
+FoundTriangle:
+ TriangleCaught := True;
+
+ OldTriangle := MainTriangles[SelectedTriangle];
+ //MainForm.UpdateUndo;
+ HasChanged := false;
+
+ Pivot := GetPivot;
+ oldx := fx-Pivot.X;
+ oldy := fy-Pivot.Y;
+ olddist := sqrt(oldx*oldx + oldy*oldy);
+
+ UpdateVariationList; // AV
+ ShowSelectedInfo;
+ TriangleView.Invalidate;
+ exit;
+ end
+ else if (Button = mbRight) and
+ not (TriangleCaught or CornerCaught) then // graph panning
+ begin
+ SetCaptureControl(TriangleView);
+ Screen.Cursor := crSizeAll;
+
+ viewDragMode := true;
+ oldx := fx;
+ oldY := fy;
+ end;
+end;
+
+procedure TEditForm.TriangleViewMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: integer);
+begin
+ if Button = mbLeft then
+ begin
+ if modeHack then begin
+ assert(oldMode <> modeNone);
+ editMode := oldMode;
+ oldMode := modeNone;
+
+ modeHack := false;
+ end;
+
+ if HasChanged then
+ begin
+ MainForm.UpdateUndo;
+ UpdateFlame(true);
+ HasChanged := False;
+ end;
+ EdgeCaught := false;
+ CornerCaught := false;
+ TriangleCaught := false;
+ TriangleView.Invalidate;
+ end
+ else if (Button = mbRight) and viewDragMode then
+ begin
+ viewDragMode := false;
+
+ Screen.Cursor := crDefault;
+ SetCaptureControl(nil);
+
+ if viewDragged = false then // haven't dragged - popup menu then
+ begin
+ //GetCursorPos(mousepos); // hmmm
+ mousePos := (Sender as TControl).ClientToScreen(Point(x, y));
+ if mouseOverTriangle < 0 then
+ EditPopup.Popup(mousepos.x, mousepos.y)
+ else begin
+ SelectedTriangle := mouseOverTriangle;
+ cbTransforms.ItemIndex := SelectedTriangle;
+ TriangleView.Refresh;
+ TrianglePopup.Popup(mousepos.x, mousepos.y)
+ end;
+ end
+ else viewDragged := false;
+ end
+end;
+
+// AV: added standart shotcuts for numeric feilds
+procedure TEditForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
+begin
+ if GetKeyState(VK_CONTROL) >= 0 then
+ Exit;
+
+ if Msg.CharCode = Ord('W') then begin
+ CreateScreenShot;
+ Handled := True;
+ end;
+
+ if (ActiveControl = txtName) or (ActiveControl = txtSearchBox) then Exit;
+ if not ((ActiveControl is TEdit) or (ActiveControl is TComboBox)) then Exit;
+
+ if Msg.CharCode = Ord('C') then begin
+ SendMessage(ActiveControl.Handle, WM_COPY, 0, 0);
+ Handled := True;
+ end
+ else
+ if Msg.CharCode = Ord('V') then begin
+ if not Clipboard.HasFormat(CF_TEXT) then
+ Handled := False
+ else begin
+ if StrToFloatDef(Clipboard.AsText, MaxDouble) <> MaxDouble then // hack
+ begin
+ SendMessage(ActiveControl.Handle, WM_PASTE, 0, 0);
+ Handled := True;
+ end
+ else
+ Handled := False;
+ end;
+ end
+ else
+ if Msg.CharCode = Ord('X') then begin
+ SendMessage(ActiveControl.Handle, WM_CUT, 0, 0);
+ Handled := True;
+ end
+ else
+ if Msg.CharCode = Ord('U') then begin
+ if (ActiveControl is TEdit) and TEdit(ActiveControl).CanUndo then
+ begin
+ TEdit(ActiveControl).Undo;
+ //SendMessage(ActiveControl.Handle, WM_UNDO, 0, 0);
+ Handled := True;
+ end
+ else
+ Handled := False;
+ end;
+end;
+
+procedure TEditForm.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+begin
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Editor', False) then
+ begin
+ { Size and position }
+ if Registry.ValueExists('Left') then
+ EditForm.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ EditForm.Top := Registry.ReadInteger('Top');
+ if Registry.ValueExists('Width') then
+ EditForm.Width := Registry.ReadInteger('Width');
+ if Registry.ValueExists('Height') then
+ EditForm.Height := Registry.ReadInteger('Height');
+
+ if Registry.ValueExists('ResetLocation') then
+ mnuResetLoc.checked := Registry.ReadBool('ResetLocation')
+ else
+ mnuResetLoc.checked := false;
+ if Registry.ValueExists('HelpersEnabled') then
+ HelpersEnabled := Registry.ReadBool('HelpersEnabled')
+ else
+ HelpersEnabled := true;
+
+ if Registry.ValueExists('VariationPreview') then
+ begin
+ showVarPreview := Registry.ReadBool('VariationPreview');
+ tbVarPreview.Down := showVarPreview;
+ end
+ else begin
+ showVarPreview := false;
+ tbVarPreview.Down := false;
+ end;
+
+ if Registry.ValueExists('VariationPreviewRange') then
+ trkVarPreviewRange.Position := Registry.ReadInteger('VariationPreviewRange');
+ if Registry.ValueExists('VariationPreviewDensity') then
+ trkVarPreviewDensity.Position := Registry.ReadInteger('VariationPreviewDensity');
+ if Registry.ValueExists('VariationPreviewDepth') then
+ trkVarPreviewDepth.Position := Registry.ReadInteger('VariationPreviewDepth');
+ if Registry.ValueExists('VariationPreviewGrid') then
+ GridComboBox.ItemIndex := Registry.ReadInteger('VariationPreviewGrid');
+
+ if Registry.ValueExists('VariationFilter') then
+ cbCollapseVariations.ItemIndex := Registry.ReadInteger('VariationFilter');
+ end
+ else begin
+ UseFlameBackground := False;
+ mnuResetLoc.checked := false;
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+// chkUseXFormColor.checked := UseTransformColors;
+// chkHelpers.Checked := HelpersEnabled;
+
+ if ExtendedEdit then tbExtendedEdit.Down := true
+ else tbMove.Down := true;
+
+ UpdateDisplay;
+ TrianglePanelResize(nil);
+ ScrollBox1Resize(nil);
+end;
+
+procedure TEditForm.mnuDeleteClick(Sender: TObject);
+begin
+ if (SelectedTriangle >= 0) then DeleteTriangle(SelectedTriangle);
+end;
+
+procedure TEditForm.mnuAddClick(Sender: TObject);
+begin
+ if Transforms < NXFORMS then
+ begin
+ MainForm.UpdateUndo;
+ MainTriangles[Transforms+1] := MainTriangles[Transforms];
+ cp.xform[Transforms+1].Assign(cp.xform[Transforms]);
+ MainTriangles[Transforms] := MainTriangles[-1];
+ SelectedTriangle := Transforms;
+ cp.xform[Transforms].Clear(hasLinkX);
+ cp.xform[Transforms].density := 0.5;
+ cp.xform[Transforms].SetVariation(0, 1);
+ Inc(Transforms);
+ UpdateXformsList;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.mnuDupClick(Sender: TObject);
+var
+ i: integer;
+begin
+ if Transforms < NXFORMS then
+ begin
+ MainForm.UpdateUndo;
+ MainTriangles[Transforms+1] := MainTriangles[Transforms];
+ cp.xform[Transforms+1].Assign(cp.xform[Transforms]);
+ if SelectedTriangle <> Transforms then
+ begin
+ MainTriangles[Transforms] := MainTriangles[SelectedTriangle];
+ cp.xform[Transforms].Assign(cp.xform[SelectedTriangle]);
+ for i := 0 to Transforms-1 do
+ cp.xform[i].modWeights[Transforms] := cp.xform[i].modWeights[SelectedTriangle];
+ cp.xform[Transforms].modWeights[Transforms] := cp.xform[SelectedTriangle].modWeights[SelectedTriangle];
+ SelectedTriangle := Transforms;
+ end
+ else cp.xform[Transforms].density := 0.5;
+ Inc(Transforms);
+ UpdateXformsList;
+ UpdateFlame(True);
+ end;
+end;
+
+
+procedure TEditForm.mnuAutoZoomClick(Sender: TObject);
+begin
+ AutoZoom;
+end;
+
+procedure TEditForm.btChaosClick(Sender: TObject);
+begin
+ vleChaos.SetFocus;
+ ChaosPopup.Popup(btChaos.ClientOrigin.x, btChaos.ClientOrigin.y + btChaos.Height);
+end;
+
+procedure TEditForm.btConjugateClick(Sender: TObject);
+var
+ deta: double;
+begin
+ if not tbPostXSwap.Down then
+ begin
+ with cp.xform[SelectedTriangle] do
+ begin
+ deta := det(c[0,0], c[0,1], c[1,0], c[1,1]);
+ if (abs(deta) < 1E-4) then
+ begin
+ Application.MessageBox(PChar(TextByKey('editor-status-warninvert')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+ MainForm.UpdateUndo;
+ p[0,0] := c[1,1] / deta; // d
+ p[0,1] := -c[0,1] / deta; // -c
+ p[1,0] := -c[1,0] / deta; // -b
+ p[1,1] := c[0,0] / deta; // a
+ p[2,0] := (c[1,0] * c[2,1] - c[1,1] * c[2,0]) / deta; // -d*e + b*f
+ p[2,1] := (c[0,1] * c[2,0] - c[0,0] * c[2,1]) / deta; // c*e - a*f
+ end;
+ cp.GetTriangle(MainTriangles[SelectedTriangle], SelectedTriangle);
+ end else
+ begin
+ with cp.xform[SelectedTriangle] do
+ begin
+ deta := det(p[0,0], p[0,1], p[1,0], p[1,1]);
+ if (abs(deta) < 1E-4) then
+ begin
+ Application.MessageBox(PChar(TextByKey('editor-status-warninvert')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+ MainForm.UpdateUndo;
+ c[0,0] := p[1,1] / deta;
+ c[0,1] := -p[0,1] / deta;
+ c[1,0] := -p[1,0] / deta;
+ c[1,1] := p[0,0] / deta;
+ c[2,0] := (p[1,0] * p[2,1] - p[1,1] * p[2,0]) / deta;
+ c[2,1] := (p[0,1] * p[2,0] - p[0,0] * p[2,1]) / deta;
+ end;
+ cp.GetPostTriangle(MainTriangles[SelectedTriangle], SelectedTriangle);
+ end;
+
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btFlipXYClick(Sender: TObject);
+begin
+ if (editPivotX.Text <> '0') or (editPivotY.Text <> '0') then
+ btnResetPivot.Click;
+ if (Sender = btFlipX) then
+ begin
+ FlipPoint.x := 1; editFlipX.Text := '1';
+ FlipPoint.y := 0; editFlipY.Text := '0';
+ end
+ else if (Sender = btFlipY) then
+ begin
+ FlipPoint.x := 0; editFlipX.Text := '0';
+ FlipPoint.y := 1; editFlipY.Text := '1';
+ end else // if Sender = btFlipDiag then
+ begin
+ FlipPoint.x := 1; editFlipX.Text := '1';
+ FlipPoint.y := 1; editFlipY.Text := '1';
+ end;
+ if not ShowFlipLine then CalcFlip; // refresh current angle
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.btnCloseClick(Sender: TObject);
+begin
+ EditForm.Close;
+end;
+
+procedure TEditForm.FormResize(Sender: TObject);
+begin
+ AutoZoom;
+end;
+
+procedure TEditForm.CornerEditExit(Sender: TObject);
+var
+ Allow: boolean;
+ OldText: string;
+ Val: string;
+begin
+ Allow := True;
+ if Sender = txtAx then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].x[0]])
+ else if Sender = txtAy then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].y[0]])
+ else if Sender = txtBx then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].x[1]])
+ else if Sender = txtBy then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].y[1]])
+ else if Sender = txtCx then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].x[2]])
+ else if Sender = txtCy then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].y[2]])
+ else if Sender = txtP then
+ if SelectedTriangle < Transforms then
+ val := Format('%.6f', [cp.xform[SelectedTriangle].density]);
+ OldText := Val;
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := OldText;
+ Allow := False;
+ end;
+ end;
+ { If it's not the same as the old value and it was valid }
+ if (val <> TEdit(Sender).Text) and Allow then
+ begin
+ if Sender = txtAx then
+ MainTriangles[SelectedTriangle].x[0] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtAy then
+ MainTriangles[SelectedTriangle].y[0] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtBx then
+ MainTriangles[SelectedTriangle].x[1] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtBy then
+ MainTriangles[SelectedTriangle].y[1] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtCx then
+ MainTriangles[SelectedTriangle].x[2] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtCy then
+ MainTriangles[SelectedTriangle].y[2] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtP then
+ begin
+ cp.xform[SelectedTriangle].density := StrToFloat(TEdit(Sender).Text);
+ TEdit(Sender).Text := Format('%.6g', [cp.xform[SelectedTriangle].density]);
+ end;
+ MainForm.UpdateUndo;
+ UpdateFlame(True);
+ end;
+
+ self.LastFocus := TEdit(sender);
+end;
+
+procedure TEditForm.CornerEditKeyPress(Sender: TObject; var Key: Char);
+var
+ Allow: boolean;
+ OldText: string;
+ Val: string;
+begin
+ if key = #13 then
+ begin
+ Allow := True;
+ if Sender = txtAx then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].x[0]])
+ else if Sender = txtAy then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].y[0]])
+ else if Sender = txtBx then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].x[1]])
+ else if Sender = txtBy then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].y[1]])
+ else if Sender = txtCx then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].x[2]])
+ else if Sender = txtCy then
+ Val := Format('%.6f', [MainTriangles[SelectedTriangle].y[2]])
+ else if Sender = txtP then
+ val := Format('%.6f', [cp.xform[SelectedTriangle].density]);
+ OldText := Val;
+ { Stop the beep }
+ Key := #0;
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := OldText;
+ Allow := False;
+ end;
+ end;
+ { If it's not the same as the old value and it was valid }
+ if (val <> TEdit(Sender).Text) and Allow then
+ begin
+ if Sender = txtAx then
+ MainTriangles[SelectedTriangle].x[0] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtAy then
+ MainTriangles[SelectedTriangle].y[0] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtBx then
+ MainTriangles[SelectedTriangle].x[1] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtBy then
+ MainTriangles[SelectedTriangle].y[1] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtCx then
+ MainTriangles[SelectedTriangle].x[2] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtCy then
+ MainTriangles[SelectedTriangle].y[2] := StrToFloat(TEdit(Sender).Text)
+ else if Sender = txtP then
+ begin
+ cp.xform[SelectedTriangle].density := StrToFloat(TEdit(Sender).Text);
+ TEdit(Sender).Text := Format('%.6g', [cp.xform[SelectedTriangle].density]);
+ end;
+ MainForm.UpdateUndo;
+ UpdateFlame(True);
+ end;
+ end;
+end;
+
+{ ************************* Probability input ******************************** }
+
+procedure TEditForm.txtPKeyPress(Sender: TObject; var Key: Char);
+var
+ Allow: boolean;
+ NewVal, OldVal: double;
+begin
+ if (Key = '-') then Key:= #0;
+ if SelectedTriangle >= Transforms then key := #0;
+ if key = #13 then
+ begin
+ { Stop the beep }
+ Key := #0;
+ Allow := True;
+ OldVal := Round6(cp.xform[SelectedTriangle].density);
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ if NewVal < 0.000001 then NewVal := 0.000001;
+ if NewVal > MAX_WEIGHT then NewVal := MAX_WEIGHT;
+ { If it's not the same as the old value and it was valid }
+ TEdit(Sender).Text := Format('%.6g', [NewVal]);
+ if (OldVal <> NewVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].density := NewVal;
+ //ReadjustWeights(cp);
+ UpdateFlame(True);
+ if ChaosForm.Visible then // AV
+ ChaosForm.WeightVector.Invalidate;
+ end;
+ end;
+end;
+
+procedure TEditForm.txtPExit(Sender: TObject);
+var
+ Allow: boolean;
+ NewVal, OldVal: double;
+begin
+ if SelectedTriangle >= Transforms then exit;
+ Allow := True;
+ OldVal := Round6(cp.xform[SelectedTriangle].density);
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ if NewVal < 0.000001 then NewVal := 0.000001;
+ if NewVal > MAX_WEIGHT then NewVal := MAX_WEIGHT;
+ { If it's not the same as the old value and it was valid }
+ TEdit(Sender).Text := Format('%.6g', [NewVal]);
+ if (OldVal <> NewVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].density := NewVal;
+ //ReadjustWeights(cp);
+ UpdateFlame(True);
+ if ChaosForm.Visible then // AV
+ ChaosForm.WeightVector.Invalidate;
+ end;
+ self.LastFocus := TEdit(sender);
+end;
+
+{ **************************************************************************** }
+
+procedure TEditForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ { Defaults }
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Editor', True) then
+ begin
+ { Options }
+ Registry.WriteBool('ResetLocation', mnuResetLoc.checked);
+ Registry.WriteBool('VariationPreview', showVarPreview);
+ Registry.WriteBool('HelpersEnabled', HelpersEnabled);
+ Registry.WriteInteger('VariationPreviewRange', trkVarPreviewRange.Position);
+ Registry.WriteInteger('VariationPreviewDensity', trkVarPreviewDensity.Position);
+ Registry.WriteInteger('VariationPreviewDepth', trkVarPreviewDepth.Position);
+ Registry.WriteInteger('VariationPreviewGrid', GridComboBox.ItemIndex);
+ Registry.WriteInteger('VariationFilter', cbCollapseVariations.ItemIndex);
+ { Size and position }
+ if EditForm.WindowState <> wsMaximized then begin
+ Registry.WriteInteger('Top', EditForm.Top);
+ Registry.WriteInteger('Left', EditForm.Left);
+ Registry.WriteInteger('Width', EditForm.Width);
+ Registry.WriteInteger('Height', EditForm.Height);
+ end;
+ end;
+ finally
+ Registry.Free;
+ end;
+end;
+
+procedure TEditForm.mnuUndoClick(Sender: TObject);
+begin
+ MainForm.Undo;
+end;
+
+procedure TEditForm.MulDiv2Click(Sender: TObject);
+var
+ num: double;
+ sn: string;
+begin
+ if (not ValidNumField) then
+ begin
+ Application.MessageBox(PChar(TextByKey('editor-status-nonumfield')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+
+ if (txtTrgRotateValue.Focused) and (TMenuItem(Sender).Tag = 0) then exit;
+ try
+ if (ActiveControl is TEdit) then
+ sn := TEdit(ActiveControl).Text
+ else if (ActiveControl is TValueListEditor) then
+ sn := TValueListEditor(ActiveControl).Cells[1, TValueListEditor(ActiveControl).Row]
+ else // if (ActiveControl is TComboBox) then
+ sn := TComboBox(ActiveControl).Text;
+ num := StrToFloat(sn);
+ if (num <> 0) then
+ begin
+ case TMenuItem(Sender).Tag of
+ 0: if (txtTrgScaleValue.Focused) then
+ sn := Format('%.6g', [num * num * 0.01])
+ else sn := Format('%.6g', [num * num]);
+ 1: sn := Format('%.6g', [num * 2]);
+ 2: sn := Format('%.6g', [num * 0.5]);
+ else if (txtTrgScaleValue.Focused) then
+ sn := Format('%.6g', [sign(num) * sqrt(abs(num * 0.01)) * 100])
+ else sn := Format('%.6g', [sign(num) * sqrt(abs(num))]);
+ end;
+
+ if (ActiveControl is TEdit) then
+ begin
+ TEdit(ActiveControl).Text := sn;
+ TEdit(ActiveControl).OnExit(ActiveControl);
+ end
+ else if (ActiveControl is TValueListEditor) then
+ begin
+ TValueListEditor(ActiveControl).Cells[1, TValueListEditor(ActiveControl).Row] := sn;
+ TValueListEditor(ActiveControl).OnExit(ActiveControl);
+ end
+ else //if (ActiveControl is TComboBox) then
+ TComboBox(ActiveControl).Text := sn;
+ end;
+ except
+ end;
+end;
+
+procedure TEditForm.NormChaosClick(Sender: TObject);
+var i, j: integer;
+ sum: double;
+begin
+ MainForm.UpdateUndo;
+ for i := 0 to Transforms-1 do
+ begin
+ sum := 0;
+ for j := 0 to Transforms-1 do
+ sum := sum + cp.xform[i].modWeights[j];
+ if sum = 1.0 then Exit;
+ if (sum > 0) then
+ for j := 0 to Transforms-1 do
+ cp.xform[i].modWeights[j] := cp.xform[i].modWeights[j] / sum;
+ end;
+ UpdateFlame(True);
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+end;
+
+procedure TEditForm.mnuRedoClick(Sender: TObject);
+begin
+ MainForm.Redo;
+end;
+
+procedure TEditForm.mnuLowQualityClick(Sender: TObject);
+begin
+ mnuLowQuality.Checked := True;
+ mnuELowQuality.Checked := True;
+ PreviewDensity := prevLowQuality;
+ EditPrevQual := 0;
+ DrawPreview;
+ TriangleViewPaint(TriangleView);
+end;
+
+procedure TEditForm.mnuHighQualityClick(Sender: TObject);
+begin
+ mnuHighQuality.Checked := True;
+ mnuEHighQuality.Checked := True;
+ PreviewDensity := prevHighQuality;
+ EditPrevQual := 2;
+ DrawPreview;
+ TriangleViewPaint(TriangleView);
+end;
+
+procedure TEditForm.mnuMediumQualityClick(Sender: TObject);
+begin
+ mnuMediumQuality.Checked := True;
+ mnuEMediumQuality.Checked := True;
+ PreviewDensity := prevMediumQuality;
+ EditPrevQual := 1;
+ DrawPreview;
+ TriangleViewPaint(TriangleView);
+end;
+
+procedure TEditForm.mnuResetLocClick(Sender: TObject);
+var
+ reset: boolean;
+begin
+ reset:= not mnuResetLoc.Checked;
+ mnuResetLoc.Checked := reset;
+ if reset then
+ begin
+ cp.width := MainCp.width;
+ cp.height := MainCp.height;
+ cp.pixels_per_unit := MainCp.pixels_per_unit;
+ cp.AdjustScale(PreviewImage.width, PreviewImage.Height);
+ cp.zoom := MainCp.zoom;
+ cp.center[0] := MainCp.center[0];
+ cp.center[1] := MainCp.center[1];
+ end;
+ DrawPreview;
+end;
+
+procedure TEditForm.mnuFlipAllVClick(Sender: TObject);
+var
+ i: integer;
+begin
+ MainForm.UpdateUndo;
+ for i := -1 to Transforms do
+ begin
+ MainTriangles[i] := FlipTriangleVertical(MainTriangles[i]);
+ end;
+ cp.GetFromTriangles(MainTriangles, Transforms);
+ cp.TrianglesFromCP(MainTriangles);
+ AutoZoom;
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.mnuFlipAllHClick(Sender: TObject);
+var
+ i: integer;
+begin
+ MainForm.UpdateUndo;
+ for i := -1 to Transforms do
+ begin
+ MainTriangles[i] := FlipTriangleHorizontal(MainTriangles[i]);
+ end;
+ cp.GetFromTriangles(MainTriangles, Transforms);
+ cp.TrianglesFromCP(MainTriangles);
+ AutoZoom;
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.mnuFlipAllLineClick(Sender: TObject); // AV
+var
+ i: integer;
+begin
+ if (FlipPoint.x = 0) and (FlipPoint.y = 0) then exit;
+ if (FlipPoint.x = 0) then mnuFlipAllH.Click
+ else if (FlipPoint.y = 0) then mnuFlipAllV.Click
+ else begin
+ MainForm.UpdateUndo;
+ for i := -1 to Transforms do
+ MainTriangles[i] := FlipTriangleLine(MainTriangles[i], 0, 0,
+ FlipPoint.x, FlipPoint.y);
+ cp.GetFromTriangles(MainTriangles, Transforms);
+ cp.TrianglesFromCP(MainTriangles);
+ AutoZoom;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.mnuFlipVerticalClick(Sender: TObject);
+var
+ p: double;
+begin
+ MainForm.UpdateUndo;
+ with MainTriangles[SelectedTriangle] do
+ begin
+ p := GetPivot.y * 2;
+ y[0] := p - y[0];
+ y[1] := p - y[1];
+ y[2] := p - y[2];
+ end;
+ //AutoZoom;
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.mnuFlipHorizontalClick(Sender: TObject);
+var
+ p: double;
+begin
+ MainForm.UpdateUndo;
+ with MainTriangles[SelectedTriangle] do
+ begin
+ p := GetPivot.x * 2;
+ x[0] := p - x[0];
+ x[1] := p - x[1];
+ x[2] := p - x[2];
+ end;
+ //AutoZoom;
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.cbTransformsChange(Sender: TObject);
+var
+ n: integer;
+begin
+ n := cbTransforms.ItemIndex;
+
+ if (n <> SelectedTriangle) and (n >= 0) and (n <= LastTriangle) then
+ begin
+ SelectedTriangle := n;
+ UpdateVariationList; // AV
+ ShowSelectedInfo;
+ TriangleView.Invalidate;
+ end;
+end;
+
+procedure TEditForm.cbTransformsDrawItem(Control: TWinControl;
+ Index: Integer; Rect: TRect; State: TOwnerDrawState);
+var
+ h: integer;
+ ax,ay,bx,by: integer;
+ TrgColor: TColor;
+begin
+ assert(Index >= 0);
+ TrgColor := GetTriangleColor(Index);
+ with cbTransforms.Canvas do
+ begin
+ h := Rect.Bottom - Rect.Top;
+
+ brush.Color:=clBlack;
+ FillRect(Rect);
+
+ Font.Color := clWhite;
+ TextOut(Rect.Left+h+2, Rect.Top, cbTransforms.Items[Index]); //IntToStr(Index+1));
+
+ pen.Color := TrgColor;
+ brush.Color := pen.Color shr 1 and $7f7f7f;
+
+ ax:=Rect.Left+h-2;
+ ay:=Rect.Top+1;
+ bx:=Rect.Left+2;
+ by:=Rect.Bottom-3;
+ Polygon([Point(ax, ay), Point(ax, by), Point(bx, by)]);
+ end;
+end;
+
+procedure TEditForm.ChaosClearBelowClick(Sender: TObject);
+var i, n: integer;
+begin
+ n := vleChaos.Row;
+ if n = Transforms then exit;
+ MainForm.UpdateUndo;
+ if mnuChaosViewTo.Checked then
+ for i := n to Transforms-1 do
+ cp.xform[SelectedTriangle].modWeights[i] := 0
+ else for i := n to Transforms-1 do
+ cp.xform[i].modWeights[SelectedTriangle] := 0;
+ UpdateFlame(true);
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+end;
+
+procedure TEditForm.ClearAllAboveClick(Sender: TObject);
+var i, n: integer;
+begin
+ n := vleChaos.Row;
+ if (n < 2) then exit;
+ MainForm.UpdateUndo;
+ if mnuChaosViewTo.Checked then
+ for i := 0 to n-2 do
+ cp.xform[SelectedTriangle].modWeights[i] := 0
+ else for i := 0 to n-2 do
+ cp.xform[i].modWeights[SelectedTriangle] := 0;
+ UpdateFlame(true);
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+end;
+
+procedure TEditForm.CoefKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key <> #13 then exit;
+ key := #0;
+ CoefValidate(Sender);
+end;
+
+procedure TEditForm.CoefValidate(Sender: TObject);
+var
+ NewVal: double;
+ x, y, r, a: double; // dumb... must optimize
+begin
+ try
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ except on Exception do
+ begin
+ ShowSelectedInfo; //TEdit(Sender).Text := Format('%.6g', [pVal^]);
+ exit;
+ end;
+ end;
+
+ //TEdit(Sender).Text := Format('%.6g', [NewVal]);
+
+ MainForm.UpdateUndo; // TODO - prevent unnecessary UpdateUndo...
+ with cp.xform[SelectedTriangle] do
+ begin
+ if btnCoefsRect.Down = true then
+ begin
+ if Sender = txtA then c[0][0] := NewVal
+ else if Sender = txtB then c[0][1] := -NewVal
+ else if Sender = txtC then c[1][0] := -NewVal
+ else if Sender = txtD then c[1][1] := NewVal
+ else if Sender = txtE then c[2][0] := NewVal
+ else if Sender = txtF then c[2][1] := -NewVal;
+ end
+ else begin
+ if (Sender = txtA) or (Sender = txtB) then begin
+ x := c[0][0];
+ y := -c[0][1];
+ end else
+ if (Sender = txtC) or (Sender = txtD) then begin
+ x := -c[1][0];
+ y := c[1][1];
+ end else
+ {if (Sender = txtE) or (Sender = txtF) then}
+ begin
+ x := c[2][0];
+ y := -c[2][1];
+ end;
+ r := Hypot(x, y);
+ a := arctan2(y, x);
+
+ if (Sender = txtA) or (Sender = txtC) or (Sender = txtE) then
+ r := NewVal
+ else
+ a := NewVal*PI/180;
+
+ x := r * cos(a);
+ y := r * sin(a);
+ if (Sender = txtA) or (Sender = txtB) then begin
+ c[0][0] := x;
+ c[0][1] := -y;
+ end else
+ if (Sender = txtC) or (Sender = txtD) then begin
+ c[1][0] := -x;
+ c[1][1] := y;
+ end else
+ {if (Sender = txtE) or (Sender = txtF) then}
+ begin
+ c[2][0] := x;
+ c[2][1] := -y;
+ end;
+ end;
+ end;
+
+ cp.TrianglesFromCP(MainTriangles);
+ if tbAutoWeights.Down then cp.CalculateWeights; // AV
+ ShowSelectedInfo;
+ UpdateFlame(true);
+
+ self.LastFocus := TEdit(sender);
+end;
+
+procedure TEditForm.scrlXFormColorScroll(Sender: TObject;
+ ScrollCode: TScrollCode; var ScrollPos: Integer);
+begin
+ if (ScrollCode = scEndScroll) and HasChanged then begin
+ MainForm.UpdateUndo;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.scrlXFormColorChange(Sender: TObject);
+var
+ v: double;
+begin
+ if updating then exit;
+
+ v := (scrlXFormColor.Position) / scrlXFormColor.Max;
+ if v <> cp.xform[SelectedTriangle].color then
+ begin
+ cp.xform[SelectedTriangle].color := v;
+ pnlXFormColor.color := ColorValToColor(MainCp.cmap, v);
+ shColor.Brush.Color := pnlXFormColor.Color;
+ txtXFormColor.Text := Format('%1.3f', [v]);
+ txtXFormColor.Refresh;
+
+ HasChanged := true;
+ DrawPreview;
+ end;
+end;
+
+function TEditForm.ValidNumField: boolean;
+begin
+ Result := (ActiveControl is TEdit);
+ if Result then
+ if (ActiveControl = txtSearchBox) or (ActiveControl = txtName) then
+ Exit(False);
+ Result := Result or (ActiveControl is TValueListEditor) or (ActiveControl is TComboBox);
+end;
+
+(*
+procedure TEditForm.chkUseXFormColorClick(Sender: TObject);
+begin
+ UseTransformColors := chkUseXFormColor.checked;
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.chkHelpersClick(Sender: TObject);
+begin
+ HelpersEnabled := chkHelpers.checked;
+ TriangleView.Invalidate;
+end;
+*)
+
+procedure TEditForm.txtXFormColorExit(Sender: TObject);
+var
+ v: double;
+begin
+ try
+ v := StrToFloat(txtXFormColor.Text);
+ except on EConvertError do
+ begin
+ txtXformColor.text := Format('%1.3f', [cp.xform[SelectedTriangle].color]);
+ exit;
+ end;
+ end;
+ if v > 1 then v := 1;
+ if v < 0 then v := 0;
+ if v <> cp.xform[SelectedTriangle].color then
+ begin
+ updating := true;
+ scrlXFormColor.Position := round(v * scrlXFormColor.Max);
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].color := v;
+ updating := false;
+ UpdateFlame(true);
+ end;
+end;
+
+procedure TEditForm.txtXFormColorKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = '-') then Key:= #0; // AV
+ if key = #13 then
+ begin
+ key := #0;
+ txtXFormColorExit(Sender);
+ end;
+end;
+
+procedure TEditForm.txtOpacitySet(Sender: TObject);
+var
+ Allow: boolean;
+ NewVal, OldVal: double;
+begin
+ Allow := True;
+ OldVal := Round6(cp.xform[SelectedTriangle].transOpacity);
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ if NewVal < 0 then NewVal := 0;
+ if NewVal > 1 then NewVal := 1;
+ { If it's not the same as the old value and it was valid }
+ TEdit(Sender).Text := Format('%.6g', [NewVal]);
+ if (OldVal <> NewVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].transOpacity := NewVal;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.txtDCSet(Sender: TObject);
+var
+ Allow: boolean;
+ NewVal, OldVal: double;
+begin
+ Allow := True;
+ OldVal := Round6(cp.xform[SelectedTriangle].pluginColor);
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ if NewVal < 0 then NewVal := 0;
+ if NewVal > 1 then NewVal := 1;
+ { If it's not the same as the old value and it was valid }
+ TEdit(Sender).Text := Format('%.6g', [NewVal]);
+ if (OldVal <> NewVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].pluginColor := NewVal;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.txtSymmetrySet(Sender: TObject);
+var
+ Allow: boolean;
+ NewVal, OldVal: double;
+begin
+ Allow := True;
+ OldVal := Round6(cp.xform[SelectedTriangle].symmetry);
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ if NewVal < -1 then NewVal := -1;
+ if NewVal > 1 then NewVal := 1;
+ { If it's not the same as the old value and it was valid }
+ TEdit(Sender).Text := Format('%.6g', [NewVal]);
+ if (OldVal <> NewVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].symmetry := NewVal;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.txtOpacityKeyPress(Sender: TObject; var Key: Char);
+var
+ Allow: boolean;
+ NewVal, OldVal: double;
+begin
+ if (Key = '-') then Key:= #0; // AV
+ if key = #13 then
+ begin
+ { Stop the beep }
+ Key := #0;
+ Allow := True;
+ OldVal := Round6(cp.xform[SelectedTriangle].transOpacity);
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ if NewVal < 0 then NewVal := 0;
+ if NewVal > 1 then NewVal := 1;
+ { If it's not the same as the old value and it was valid }
+ TEdit(Sender).Text := Format('%.6g', [NewVal]);
+ if (OldVal <> NewVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].transOpacity := NewVal;
+ UpdateFlame(True);
+ end;
+ end;
+end;
+
+procedure TEditForm.txtDCKeyPress(Sender: TObject; var Key: Char);
+var
+ Allow: boolean;
+ NewVal, OldVal: double;
+begin
+ if (Key = '-') then Key:= #0;
+ if key = #13 then
+ begin
+ { Stop the beep }
+ Key := #0;
+ Allow := True;
+ OldVal := Round6(cp.xform[SelectedTriangle].pluginColor);
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ if NewVal < 0 then NewVal := 0;
+ if NewVal > 1 then NewVal := 1;
+ { If it's not the same as the old value and it was valid }
+ TEdit(Sender).Text := Format('%.6g', [NewVal]);
+ if (OldVal <> NewVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].pluginColor := NewVal;
+ UpdateFlame(True);
+ end;
+ end;
+end;
+
+procedure TEditForm.txtSymmetrKeyPress(Sender: TObject; var Key: Char);
+var
+ Allow: boolean;
+ NewVal, OldVal: double;
+begin
+ if key = #13 then
+ begin
+ { Stop the beep }
+ Key := #0;
+ Allow := True;
+ OldVal := Round6(cp.xform[SelectedTriangle].symmetry);
+ { Test that it's a valid floating point number }
+ try
+ StrToFloat(TEdit(Sender).Text);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ TEdit(Sender).Text := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ if NewVal < -1 then NewVal := -1;
+ if NewVal > 1 then NewVal := 1;
+ { If it's not the same as the old value and it was valid }
+ TEdit(Sender).Text := Format('%.6g', [NewVal]);
+ if (OldVal <> NewVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].symmetry := NewVal;
+ UpdateFlame(True);
+ end;
+ end;
+end;
+
+// -- Variation List Editor ----------------------------------------------------
+
+procedure TEditForm.ValidateVariation;
+var
+ i: integer;
+ NewVal, OldVal: double;
+begin
+ //i := VEVars.Row - 1;
+ i := GetVariationIndex(VEVars.Keys[VEVars.Row]); // AV
+
+ OldVal := Round6(cp.xform[SelectedTriangle].GetVariation(i));
+ try
+ NewVal := Round6(StrToFloat(VEVars.Values[VarNames(i)]));
+ except
+ VEVars.Values[VarNames(i)] := Format('%.6g', [OldVal]);
+ exit;
+ end;
+ if (NewVal <> OldVal) then
+ begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].SetVariation(i, NewVal);
+ VEVars.Values[VarNames(i)] := Format('%.6g', [NewVal]);
+ ShowSelectedInfo;
+ UpdateFlame(True);
+ end;
+ //chkCollapseVariationsClick(nil);
+ //chkCollapseVariablesClick(nil);
+end;
+
+(*
+
+// here's another way to do this -
+// we could use it with variables value editor,
+// only if we had an *array* of variables
+
+type
+ TDblArray = array of double;
+ PDblArray = ^TDblArray;
+
+procedure ValidateValue(Sender: TValueListEditor; values: PDblArray);
+var
+ Allow: boolean;
+ i: integer;
+ NewVal, OldVal: double;
+begin
+ Allow := True;
+
+ i := Sender.Row - 1;
+
+ OldVal := values^[i];
+{ Test that it's a valid floating point number }
+ try
+ StrToFloat(Sender.Values[VarNames(i)]);
+ except on Exception do
+ begin
+ { It's not, so we restore the old value }
+ Sender.Values[VarNames(i)] := Format('%.6g', [OldVal]);
+ Allow := False;
+ end;
+ end;
+ NewVal := Round6(StrToFloat(Sender.Values[VarNames(i)]));
+ Sender.Values[VarNames(i)] := Format('%.6g', [NewVal]);
+
+{ If it's not the same as the old value and it was valid }
+ if (NewVal <> OldVal) and Allow then
+ begin
+ MainForm.UpdateUndo;
+ values^[i] := NewVal;
+ Sender.Values[VarNames(i)] := Format('%.6g', [NewVal]);
+ EditForm.ShowSelectedInfo;
+ EditForm.UpdateFlame(True);
+ end;
+end;
+*)
+
+procedure TEditForm.VEVarsKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key = #13 then
+ begin
+ key := #0;
+ ValidateVariation;
+ end;
+end;
+
+procedure TEditForm.VEVarsChange(Sender: TObject);
+begin
+ ValidateVariation;
+end;
+
+procedure TEditForm.VEVarsValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: String);
+begin
+ ValidateVariation;
+end;
+
+// -- ValueList mouse stuff ----------------------------------------------------
+
+procedure TEditForm.VEVarsMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+var
+ cell: TGridCoord;
+begin
+ if Button = mbLeft then begin
+ varDragOld:=x;
+ cell := TValueListEditor(Sender).MouseCoord(x, y);
+
+ varDragIndex := cell.Y-1;
+
+ if (cell.y < 1) or (cell.y >= TValueListEditor(Sender).RowCount) or
+ (cell.x <> 0) then exit;
+
+ TValueListEditor(Sender).Row := cell.Y;
+
+ Screen.Cursor := crHSplit;
+
+ //GetCursorPos(mousepos); // hmmm
+ mousePos := (Sender as TControl).ClientToScreen(Point(x, y));
+
+ varDragMode:=true;
+ varDragPos:=0;
+ varMM := false;
+ SetCaptureControl(TValueListEditor(Sender));
+ if Sender = VEVars then
+ begin
+ varDragIndex := GetVariationIndex(VEVars.Keys[varDragIndex+1]); // AV
+ varDragValue := cp.xform[SelectedTriangle].GetVariation(varDragIndex);
+ end
+ else if Sender = vleVariables then
+ cp.xform[SelectedTriangle].GetVariable(vleVariables.Keys[varDragIndex+1], varDragValue)
+ else if Sender = vleChaos then begin
+ if mnuChaosViewTo.Checked then
+ pDragValue := @cp.xform[SelectedTriangle].modWeights[varDragIndex]
+ else
+ pDragValue := @cp.xform[varDragIndex].modWeights[SelectedTriangle];
+ varDragValue := pDragValue^;
+ end
+ else Assert(false);
+
+ HasChanged := False;
+ end;
+end;
+
+procedure TEditForm.VEVarsMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+var
+ v: double;
+ cell: TGridCoord;
+begin
+ cell := TValueListEditor(Sender).MouseCoord(x, y);
+ if (cell.Y > 0) and (cell.X = 0) then TValueListEditor(Sender).Cursor := crHandPoint
+ else TValueListEditor(Sender).Cursor := crDefault;
+
+ if varMM then // hack: to skip MouseMove event
+ begin
+ varMM:=false;
+ end
+ else
+ if varDragMode and (x <> varDragOld) then
+ begin
+ Inc(varDragPos, x - varDragOld);
+
+ if GetKeyState(VK_MENU) < 0 then v := 100000
+ else if GetKeyState(VK_CONTROL) < 0 then v := 10000
+ else if GetKeyState(VK_SHIFT) < 0 then v := 100
+ else v := 1000;
+
+ v := Round6(varDragValue + varDragPos/v);
+
+ SetCursorPos(MousePos.x, MousePos.y); // hmmm
+ // this Delphi is WEIRD!
+ // why GetCursorPos deals with TPoint,
+ // and SetCursorPos - with two integers? :)
+ varMM:=true;
+
+ //cp.xform[SelectedTriangle].vars[varDragIndex] := v;
+ if Sender = VEVars then
+ begin
+ cp.xform[SelectedTriangle].SetVariation(varDragIndex, v);
+ VEVars.Values[VarNames(varDragIndex)] := FloatToStr(v); //Format('%.6g', [v]);
+ end
+ else if Sender = vleVariables then begin
+ cp.xform[SelectedTriangle].SetVariable(vleVariables.Keys[varDragIndex+1], v);
+ vleVariables.Values[vleVariables.Keys[varDragIndex+1]] := FloatToStr(v);
+ end
+ else begin
+ if v < 0 then v := 0;
+ //cp.xform[SelectedTriangle].modWeights[varDragIndex] := v;
+ pDragValue^ := v;
+ vleChaos.Cells[1, varDragIndex+1] := FloatToStr(v);
+ end;
+
+ HasChanged := True;
+ UpdateFlameX;
+ end;
+end;
+
+procedure TEditForm.VEVarsMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ if Button <> mbLeft then exit;
+ SetCaptureControl(nil);
+ if varDragMode then
+ begin
+ varDragMode:=false;
+ Screen.Cursor := crDefault;
+
+ if HasChanged then
+ begin
+ MainForm.UpdateUndo;
+
+ UpdateFlame(true);
+ HasChanged := False;
+
+ if (Sender = vleChaos) and ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+ end;
+ end;
+end;
+
+procedure TEditForm.VEVarsDblClick(Sender: TObject);
+var
+ n, i: integer;
+ v, v1: double;
+ changed, allzero: boolean;
+ varname: string;
+begin
+ n := TValueListEditor(Sender).Row - 1;
+ assert(n >= 0);
+ assert(n < TValueListEditor(Sender).rowCount);
+
+ //changed := false;
+ if (SelectedTriangle < 0) or (SelectedTriangle > High(cp.xform)) then
+ changed := false
+ else begin
+ if Sender = VEVars then
+ begin
+ if (n < 0) or (n > (cp.xform[SelectedTriangle].NumVariations - 1)) then
+ changed := false
+ else begin
+ i := n; // AV
+ n := GetVariationIndex(VEVars.Keys[i+1]); // AV
+ v := cp.xform[SelectedTriangle].GetVariation(n);
+ if AllowResetLinear then // AV
+ begin
+ if v = 0 then
+ begin
+ allzero := true;
+ for i := 1 to NrVar-1 do
+ allzero := allzero and (cp.xform[SelectedTriangle].GetVariation(i) = 0);
+ if (cp.xform[SelectedTriangle].GetVariation(0) = 1) and allzero then
+ cp.xform[SelectedTriangle].SetVariation(0, 0);
+ cp.xform[SelectedTriangle].SetVariation(n, 1);
+ end
+ else cp.xform[SelectedTriangle].SetVariation(n, 0);
+ end else
+ cp.xform[SelectedTriangle].SetVariation(n, IfThen(v = 0, 1, 0));
+ changed := (cp.xform[SelectedTriangle].GetVariation(n) <> v);
+ end;
+ end
+ else if Sender = vleVariables then begin
+ varname := vleVariables.Keys[n + 1]; // AV
+ cp.xform[SelectedTriangle].GetVariable(varname, v);
+ cp.xform[SelectedTriangle].ResetVariable(varname);
+ cp.xform[SelectedTriangle].GetVariable(varname, v1);
+ changed := (v1 <> v);
+ end
+ else if Sender = vleChaos then begin
+ if ((varDragIndex) < 0) or ((varDragIndex) > high(cp.xform[SelectedTriangle].modWeights)) then
+ changed := false
+ else
+ begin
+ if mnuChaosViewTo.Checked then
+ pDragValue := @cp.xform[SelectedTriangle].modWeights[varDragIndex]
+ else
+ pDragValue := @cp.xform[varDragIndex].modWeights[SelectedTriangle];
+ v := pDragValue^;
+ v := ifthen(v = 1, 0, 1);
+ pDragValue^ := v;
+ vleChaos.Cells[1, n+1] := FloatToStr(v);
+ changed := true;
+
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+ end
+ //else Assert(false);
+ end else changed := false;
+ end;
+
+ if changed then MainForm.UpdateUndo;
+ UpdateFlame(true);
+end;
+
+{ **************************************************************************** }
+
+function TEditForm.GetPivot: TSPoint;
+begin
+ Result := GetPivot(SelectedTriangle);
+end;
+
+function TEditForm.GetPivot(n: integer): TSPoint;
+begin
+ if (PivotMode = pivotLocal) or {EdgeCaught} (mouseOverEdge >= 0) then // should be always local for edges (hmm...?)
+ with MainTriangles[n] do begin
+ Result.x := x[1] + (x[0] - x[1])*LocalPivot.x + (x[2] - x[1])*LocalPivot.y;
+ Result.y := y[1] + (y[0] - y[1])*LocalPivot.x + (y[2] - y[1])*LocalPivot.y;
+ end
+ else begin
+ Result.x := WorldPivot.x;
+ Result.y := WorldPivot.y;
+ end;
+end;
+
+procedure TEditForm.ScriptGetPivot(var px, py: double);
+begin
+ // AV: sometimes the scripter swaps pre and post triangles...
+ if (PivotMode = pivotLocal) then
+ with MainTriangles[SelectedTriangle] do begin
+ px := x[1] + (x[0] - x[1])*LocalPivot.x + (x[2] - x[1])*LocalPivot.y;
+ py := y[1] + (y[0] - y[1])*LocalPivot.x + (y[2] - y[1])*LocalPivot.y;
+ end
+ { with cp.xform[SelectedTriangle] do
+ begin
+ if not postXswap then begin
+ px := c[2,0] + c[0,0]*LocalPivot.x + (-c[0,1])*LocalPivot.y;
+ py := -c[2,1] + (-c[0,1])*LocalPivot.x + c[1,1]*LocalPivot.y;
+ end
+ else begin
+ px := p[2,0] + p[0,0]*LocalPivot.x + (-p[0,1])*LocalPivot.y;
+ py := -p[2,1] + (-p[0,1])*LocalPivot.x + p[1,1]*LocalPivot.y;
+ end;
+ end }
+ else begin
+ px := WorldPivot.x;
+ py := WorldPivot.y;
+ end;
+end;
+
+procedure TEditForm.InvCurrentNumClick(Sender: TObject);
+var
+ num: double;
+ sn: string;
+ isEdit: boolean;
+begin
+ if (ActiveControl = txtTrgMoveValue) then
+ begin
+ InvertMovevalue1.Click;
+ exit;
+ end
+ else if (ActiveControl is TComboBox) then exit;
+
+ isEdit := (ActiveControl is TEdit);
+ if isEdit then
+ if (ActiveControl = txtSearchBox) or (ActiveControl = txtName) then
+ isEdit := False;
+ if not (isEdit or (ActiveControl is TValueListEditor)) then
+ begin
+ Application.MessageBox(PChar(TextByKey('editor-status-nonumfield')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+
+ try
+ if isEdit then
+ sn := TEdit(ActiveControl).Text
+ else // if (ActiveControl is TValueListEditor) then
+ sn := TValueListEditor(ActiveControl).Cells[1, TValueListEditor(ActiveControl).Row];
+ num := StrToFloat(sn);
+ if (abs(num) < 1E-5) then exit;
+ sn := Format('%.6g', [1/num]);
+ if isEdit then
+ begin
+ TEdit(ActiveControl).Text := sn;
+ TEdit(ActiveControl).OnExit(ActiveControl);
+ end
+ else // if (ActiveControl is TValueListEditor) then
+ begin
+ TValueListEditor(ActiveControl).Cells[1, TValueListEditor(ActiveControl).Row] := sn;
+ TValueListEditor(ActiveControl).OnExit(ActiveControl);
+ end;
+ except
+ end;
+end;
+
+procedure TEditForm.InvertMovevalue1Click(Sender: TObject);
+var step: double;
+begin
+ try
+ step := StrToFloat(txtTrgMoveValue.Text);
+ if (abs(step) >= 0.1) then txtTrgMoveValue.Text := Format('%.6g', [1/step]);
+ except
+ txtTrgMoveValue.ItemIndex := 1;
+ end;
+end;
+
+procedure TEditForm.InvertXaosClick(Sender: TObject);
+var i: integer;
+ cmax: double;
+begin
+ MainForm.UpdateUndo;
+ if mnuChaosViewTo.Checked then
+ begin
+ cmax := MaxValue(cp.xform[SelectedTriangle].modWeights);
+ if (cmax > 0) then
+ for i := 0 to Transforms-1 do
+ cp.xform[SelectedTriangle].modWeights[i] :=
+ IfThen(cp.xform[SelectedTriangle].modWeights[i] = 0, cmax,
+ cmax - cp.xform[SelectedTriangle].modWeights[i])
+ else for i := 0 to Transforms-1 do
+ cp.xform[SelectedTriangle].modWeights[i] := 1;
+ end else begin
+ cmax := 0;
+ for i := 0 to Transforms-1 do
+ if (cp.xform[i].modWeights[SelectedTriangle] > cmax) then
+ cmax := cp.xform[i].modWeights[SelectedTriangle];
+ if (cmax > 0) then
+ for i := 0 to Transforms-1 do
+ cp.xform[i].modWeights[SelectedTriangle] :=
+ IfThen(cp.xform[i].modWeights[SelectedTriangle] = 0, cmax,
+ cmax - cp.xform[i].modWeights[SelectedTriangle])
+ else for i := 0 to Transforms-1 do
+ cp.xform[i].modWeights[SelectedTriangle] := 1;
+ end;
+ UpdateFlame(true);
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+end;
+
+procedure TEditForm.UpdateColorBar;
+var
+ BitMap:TBitmap;
+ Row:pRGBTripleArray;
+ i:integer;
+begin
+ BitMap := TBitMap.Create;
+ try
+ Bitmap.PixelFormat := pf24bit;
+ BitMap.Width := 256;
+ BitMap.Height := 1;
+ Row := Bitmap.Scanline[0];
+ for i := 0 to 255 do
+ with Row[i] do
+ begin
+ rgbtRed := MainCP.cmap[i][0];
+ rgbtGreen := MainCP.cmap[i][1];
+ rgbtBlue := MainCP.cmap[i][2];
+ end;
+
+ EditForm.ColorBarPicture.Picture.Graphic := Bitmap;
+ EditForm.ColorBarPicture.Refresh;
+ finally
+ BitMap.Free;
+ end;
+end;
+
+procedure TEditForm.btTrgRotateLeftClick(Sender: TObject);
+var
+ angle: double;
+begin
+ try
+ angle := StrToFloat(txtTrgRotateValue.Text);
+ except
+ txtTrgRotateValue.ItemIndex := 1;
+ exit;
+ end;
+ assert(angle <> 0);
+
+ if GetKeyState(VK_CONTROL) < 0 then angle := angle/6.0
+ else if GetKeyState(VK_SHIFT) < 0 then angle := angle*6.0;
+ // AV: to show internally modified value
+ if (ShowModVals.Checked) then txtTrgRotateValue.Text := Format('%.6g', [angle]);
+
+ MainForm.UpdateUndo;
+ if RotateXYO.Checked then
+ MainTriangles[SelectedTriangle] :=
+ RotateTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, (PI/180)*angle)
+ else if RotateX.Checked then
+ MainTriangles[SelectedTriangle] := RotateTriangleXY(MainTriangles[SelectedTriangle], 0, (PI/180)*angle)
+ else if RotateY.Checked then
+ MainTriangles[SelectedTriangle] := RotateTriangleXY(MainTriangles[SelectedTriangle], 2, (PI/180)*angle)
+ else //if RotateO.Checked then
+ MainTriangles[SelectedTriangle] := RotateTriangleO(MainTriangles[SelectedTriangle], WorldPivot.x, WorldPivot.y, (PI/180)*angle);
+ HasChanged := True;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btTrgRotateLeft90Click(Sender: TObject);
+begin
+ MainForm.UpdateUndo;
+ MainTriangles[SelectedTriangle] :=
+ RotateTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, PI/2);
+ HasChanged := True;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btTrgRotateRightClick(Sender: TObject);
+var
+ angle: double;
+begin
+ try
+ angle := StrToFloat(txtTrgRotateValue.Text);
+ except
+ txtTrgRotateValue.ItemIndex := 1;
+ exit;
+ end;
+ assert(angle <> 0);
+
+ if GetKeyState(VK_CONTROL) < 0 then angle := angle/6.0
+ else if GetKeyState(VK_SHIFT) < 0 then angle := angle*6.0;
+ // AV: to show internally modified value
+ if (ShowModVals.Checked) then txtTrgRotateValue.Text := Format('%.6g', [angle]);
+
+ MainForm.UpdateUndo;
+ if RotateXYO.Checked then
+ MainTriangles[SelectedTriangle] :=
+ RotateTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, -(PI/180)*angle)
+ else if RotateX.Checked then begin
+ MainTriangles[SelectedTriangle] := RotateTriangleXY(MainTriangles[SelectedTriangle], 0, -(PI/180)*angle);
+ if tbAutoWeights.Down then cp.CalculateWeights; // AV
+ end else if RotateY.Checked then begin
+ MainTriangles[SelectedTriangle] := RotateTriangleXY(MainTriangles[SelectedTriangle], 2, -(PI/180)*angle);
+ if tbAutoWeights.Down then cp.CalculateWeights; // AV
+ end else //if RotateO.Checked then
+ MainTriangles[SelectedTriangle] := RotateTriangleO(MainTriangles[SelectedTriangle], WorldPivot.x, WorldPivot.y, -(PI/180)*angle);
+
+ HasChanged := True;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btTrgRotateRight90Click(Sender: TObject);
+begin
+ MainForm.UpdateUndo;
+ MainTriangles[SelectedTriangle] :=
+ RotateTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, -PI/2);
+ HasChanged := True;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.PaintBackground;
+begin
+ assert(false);
+ TriangleViewPaint(TriangleView);
+end;
+
+procedure TEditForm.TrgMove(dx, dy: double);
+var
+ i: integer;
+ offset: double;
+begin
+ try
+ offset := StrToFloat(txtTrgMoveValue.Text);
+ assert(offset <> 0);
+ except
+ txtTrgMoveValue.ItemIndex := 1;
+ exit;
+ end;
+
+ if GetKeyState(VK_CONTROL) < 0 then offset := offset/10.0
+ else if GetKeyState(VK_SHIFT) < 0 then offset := offset*10.0;
+ // AV: to show internally modified value
+ if (ShowModVals.Checked) then txtTrgMoveValue.Text := Format('%.6g', [offset]);
+
+ MainForm.UpdateUndo;
+ for i := 0 to 2 do begin
+ MainTriangles[SelectedTriangle].x[i] :=
+ MainTriangles[SelectedTriangle].x[i] + dx*offset;
+ MainTriangles[SelectedTriangle].y[i] :=
+ MainTriangles[SelectedTriangle].y[i] + dy*offset;
+ end;
+// HasChanged := True;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btTrgMoveLeftClick(Sender: TObject);
+begin
+ TrgMove(-1,0);
+end;
+
+procedure TEditForm.btTrgMoveRightClick(Sender: TObject);
+begin
+ TrgMove(1,0);
+end;
+
+procedure TEditForm.btTrgMoveUpClick(Sender: TObject);
+begin
+ if RectGrid.Checked then TrgMove(0,1)
+ else TrgMove(0.5, sqrt(3)*0.5);
+end;
+
+procedure TEditForm.btTrgMoveDownClick(Sender: TObject);
+begin
+ if RectGrid.Checked then TrgMove(0,-1)
+ else TrgMove(-0.5, -sqrt(3)*0.5);
+end;
+
+{
+procedure TEditForm.btTrgMoveLUClick(Sender: TObject);
+begin
+ TrgMove(-1,1);
+end;
+
+procedure TEditForm.btTrgMoveLDClick(Sender: TObject);
+begin
+ TrgMove(-1,-1);
+end;
+
+procedure TEditForm.btTrgMoveRUClick(Sender: TObject);
+begin
+ TrgMove(1,1);
+end;
+
+procedure TEditForm.btTrgMoveRDClick(Sender: TObject);
+begin
+ TrgMove(1,-1);
+end;
+}
+
+procedure TEditForm.btTrgScaleUpClick(Sender: TObject);
+var
+ scale: double;
+begin
+ try
+ scale := StrToFloat(txtTrgScaleValue.Text) / 100.0;
+ except
+ txtTrgScaleValue.ItemIndex := 1;
+ exit;
+ end;
+ if scale = 0 then scale := 1e-6; //assert(scale <> 0);
+
+ // AV: fixed - added abs() for negative value
+ if GetKeyState(VK_CONTROL) < 0 then scale := sqrt(abs(scale))
+ else if GetKeyState(VK_SHIFT) < 0 then scale := scale*scale;
+ // AV: to show internally modified value
+ if (ShowModVals.Checked) then txtTrgScaleValue.Text := Format('%.6g', [scale * 100.0]);
+
+ MainForm.UpdateUndo;
+ if ScaleXYO.Checked then
+ MainTriangles[SelectedTriangle] :=
+ ScaleTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, scale)
+ else if ScaleX.Checked then
+ MainTriangles[SelectedTriangle] := ScaleTriangleXY(MainTriangles[SelectedTriangle], 0, scale)
+ else if ScaleY.Checked then
+ MainTriangles[SelectedTriangle] := ScaleTriangleXY(MainTriangles[SelectedTriangle], 2, scale)
+ else //if ScaleO.Checked then
+ MainTriangles[SelectedTriangle] := ScaleTriangleO(MainTriangles[SelectedTriangle], WorldPivot.x, WorldPivot.y, scale);
+
+ if tbAutoWeights.Down then cp.CalculateWeights; // AV
+ HasChanged := True;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btTrgScaleDownClick(Sender: TObject);
+var
+ scale: double;
+begin
+ try
+ scale := 100.0 / StrToFloat(txtTrgScaleValue.Text);
+ except
+ txtTrgScaleValue.ItemIndex := 1;
+ exit;
+ end;
+ if scale = 0 then scale := 1e-6; //assert(scale <> 0);
+
+ // AV: fixed for negative value
+ if GetKeyState(VK_CONTROL) < 0 then scale := sqrt(abs(scale))
+ else if GetKeyState(VK_SHIFT) < 0 then scale := scale*scale;
+ // AV: to show modified value
+ if (ShowModVals.Checked) then txtTrgScaleValue.Text := Format('%.6g', [scale * 100.0]);
+
+ MainForm.UpdateUndo;
+ if ScaleXYO.Checked then
+ MainTriangles[SelectedTriangle] :=
+ ScaleTrianglePoint(MainTriangles[SelectedTriangle], GetPivot.x, GetPivot.y, scale)
+ else if ScaleX.Checked then
+ MainTriangles[SelectedTriangle] := ScaleTriangleXY(MainTriangles[SelectedTriangle], 0, scale)
+ else if ScaleY.Checked then
+ MainTriangles[SelectedTriangle] := ScaleTriangleXY(MainTriangles[SelectedTriangle], 2, scale)
+ else //if ScaleO.Checked then
+ MainTriangles[SelectedTriangle] := ScaleTriangleO(MainTriangles[SelectedTriangle], WorldPivot.x, WorldPivot.y, scale);
+ if tbAutoWeights.Down then cp.CalculateWeights; // AV
+ HasChanged := True;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.TriangleViewKeyDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+begin
+ if (oldMode = modeNone) and
+ (key in [{VK_SHIFT,} VK_MENU, VK_CONTROL]) then
+ begin
+ oldMode := editMode;
+ modeKey := key;
+
+ if key = VK_MENU then
+ if editMode <> modeRotate then
+ begin
+ editMode := modeRotate;
+ TriangleView.Cursor := crEditRotate;
+ end
+ else begin
+ editMode := modeMove;
+ TriangleView.Cursor := crEditMove;
+ end
+ else {if key = VK_CONTROL then}
+ begin
+ if editMode <> modeScale then
+ begin
+ editMode := modeScale;
+ TriangleView.Cursor := crEditScale;
+ end
+ else begin
+ editMode := modeMove;
+ TriangleView.Cursor := crEditMove;
+ end
+ end;
+ end
+ else
+ case key of
+ VK_LEFT:
+ if Shift = [ssAlt] then btTrgRotateLeftClick(Sender)
+ else TrgMove(-1,0);
+ VK_RIGHT:
+ if Shift = [ssAlt] then btTrgRotateRightClick(Sender)
+ else TrgMove(1,0);
+ VK_UP:
+ if Shift = [ssAlt] then btTrgScaleUpClick(Sender)
+ else TrgMove(0,1);
+ VK_DOWN:
+ if Shift = [ssAlt] then btTrgScaleDownClick(Sender)
+ else TrgMove(0,-1);
+ VK_PRIOR: btTrgRotateLeftClick(Sender);
+ VK_NEXT: btTrgRotateRightClick(Sender);
+ VK_HOME: btTrgScaleUpClick(Sender);
+ VK_END: btTrgScaleDownClick(Sender);
+ VK_INSERT: mnuDupClick(Sender);
+ VK_DELETE: mnuDeleteClick(Sender);
+
+ // can be changed in the future...
+ Ord('R'): btnResetPivotClick(Sender);
+ Ord('P'): btnPickPivotClick(Sender);
+ Ord('T'): tbPostXswapClick(Sender);
+
+ {
+ Ord('I'): // Invisible <<-- AV: or Invert :-)
+ chkXformInvisible.Checked := not chkXformInvisible.Checked;
+ }
+ Ord('S'): // Solo
+ begin
+ chkXformSolo.Checked := not chkXformSolo.Checked;
+ end;
+
+ 189: // "-"
+ begin
+ GraphZoom := GraphZoom * 0.8;
+ EditForm.StatusBar.Panels[2].Text := Format(TextByKey('editor-status-zoomformat'), [GraphZoom]);
+ TriangleView.Invalidate;
+ end;
+ 187: // "+"
+ begin
+ GraphZoom := GraphZoom * 1.25;
+ EditForm.StatusBar.Panels[2].Text := Format(TextByKey('editor-status-zoomformat'), [GraphZoom]);
+ TriangleView.Invalidate;
+ end;
+ VK_ESCAPE:
+ begin
+ if TriangleCaught or CornerCaught or EdgeCaught then begin
+ if modeHack then begin
+ assert(oldMode <> modeNone);
+ editMode := oldMode;
+ oldMode := modeNone;
+
+ modeHack := false;
+ end;
+
+ if HasChanged then
+ begin
+ MainTriangles[SelectedTriangle] := OldTriangle;
+ HasChanged := False;
+ end;
+ EdgeCaught := false;
+ CornerCaught := false;
+ TriangleCaught := false;
+ TriangleView.Invalidate;
+ UpdateFlameX;
+ end;
+ end
+ end;
+end;
+
+procedure TEditForm.TriangleViewKeyUp(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+begin
+ if (oldMode <> modeNone) and (key = modeKey) then
+ begin
+ assert(key in [VK_MENU, VK_CONTROL]);
+
+ editMode := oldMode;
+ oldMode := modeNone;
+// tbMove.Down := (editMode = modeMove);
+// tbRotate.Down := (editMode = modeRotate);
+// tbScale.Down := (editMode = modeScale);
+
+ // hack: to generate MouseMove event
+ GetCursorPos(MousePos);
+ SetCursorPos(MousePos.x, MousePos.y);
+ end;
+end;
+
+procedure TEditForm.TriangleViewExit(Sender: TObject);
+begin
+ if oldMode <> modeNone then
+ begin
+ editMode := oldMode;
+ oldMode := modeNone;
+// tbMove.Down := (editMode = modeMove);
+// tbRotate.Down := (editMode = modeRotate);
+// tbScale.Down := (editMode = modeScale);
+ end;
+
+ mouseOverTriangle := -1;
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.TriangleViewMouseLeave(Sender: TObject);
+begin
+ if viewDragMode = false then
+ begin
+ mouseOverTriangle := -1;
+ TriangleView.Invalidate;
+ end;
+end;
+
+procedure TEditForm.EditKeyDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ var num: double;
+ begin
+ case key of
+ VK_ADD:
+ if SelectedTriangle < LastTriangle then begin
+ txtNameExit(Sender); // store name before re-filling name box by changing xform
+ Inc(SelectedTriangle);
+ TriangleView.Invalidate;
+ ShowSelectedInfo;
+ end;
+ VK_SUBTRACT:
+ if SelectedTriangle > 0 then begin
+ txtNameExit(Sender); // store name before re-filling name box by changing xform
+ Dec(SelectedTriangle);
+ TriangleView.Invalidate;
+ ShowSelectedInfo;
+ end;
+ VK_SPACE:
+ if not txtName.Focused then
+ btnPivotModeClick(Sender);
+ Ord('I'):
+ if (not txtName.Focused) and (not txtSearchBox.Focused) then begin
+ if txtTrgMoveValue.Focused then InvertMoveValue1.Click
+ else InvCurrentNum.Click;
+ end;
+ Ord('X'):
+ if (not txtName.Focused) and (not txtSearchBox.Focused) then
+ begin
+ ScaleX.Checked := True;
+ RotateX.Checked := True;
+ end;
+ Ord('Y'):
+ if (not txtName.Focused) and (not txtSearchBox.Focused) then
+ begin
+ ScaleY.Checked := True;
+ RotateY.Checked := True;
+ end;
+ Ord('O'):
+ if (not txtName.Focused) and (not txtSearchBox.Focused) then
+ begin
+ ScaleO.Checked := True;
+ RotateO.Checked := True;
+ end;
+ Ord('A'):
+ if (not txtName.Focused) and (not txtSearchBox.Focused) then
+ begin
+ ScaleXYO.Checked := True;
+ RotateXYO.Checked := True;
+ end;
+ else
+ key_handled := false;
+ exit;
+ end;
+ key_handled := true;
+ key := 0;
+end;
+
+procedure TEditForm.EditKeyPress(Sender: TObject; var Key: Char);
+begin
+ if txtName.Focused then begin
+ if (key = '+') or (key='-') then begin
+ // nvm...code moved to EditKeyDown
+ key := #0;
+ end;
+ if (key='"') then key := #0; // we dont want that in "name" box -> XML mess!
+ exit;
+ end else if txtSearchBox.Focused then
+ begin
+ if (key = #13) then key := #0; // AV: to prevent a beep
+ exit;
+ end;
+// kill alphanumeric keys generally
+ // if key_handled or (CharInSet(key,['A'..'z'])) then key := #0; // hmmm...
+
+ { AV: the code above doesn't work properly, so I rewrote it }
+ { AV: a lot of users type comma as the decimal separator,
+ but Apo discard it. It's not normally... }
+ if (Key = ',') then Key := '.'; // FormatSettings.DecimalSeparator;
+ if key_handled or not CharinSet(Key,['0'..'9', '-', #8, #13, '.'])
+ then Key:= #0;
+end;
+
+procedure TEditForm.splitterMoved(Sender: TObject);
+begin
+ UpdatePreview;
+end;
+
+procedure TEditForm.tbSelectClick(Sender: TObject);
+begin
+ SelectMode := not SelectMode;
+ tbSelect.Down := SelectMode;
+
+ if SelectMode then
+ begin
+ StatusBar.Panels[2].Text := TextByKey('editor-status-selecton');
+ end
+ else begin
+ mouseOverTriangle := SelectedTriangle;
+ StatusBar.Panels[2].Text := TextByKey('editor-status-selectoff');;
+ end;
+
+ // hack: to generate MouseMove event
+ GetCursorPos(MousePos);
+ SetCursorPos(MousePos.x, MousePos.y);
+end;
+
+procedure TEditForm.TriangleViewMouseWheel(Sender: TObject; Shift: TShiftState;
+ WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
+var
+ fx, fy, sc: double;
+ p: TPoint;
+begin
+ p := TriangleView.ScreenToClient(MousePos);
+ Scale(fx, fy, p.X, p.Y);
+
+ if WheelDelta > 0 then GraphZoom := GraphZoom * 1.25
+ else GraphZoom := GraphZoom * 0.8;
+
+ EditForm.StatusBar.Panels[2].Text := Format(TextByKey('editor-status-zoomformat'), [GraphZoom]);
+
+ if viewDragMode then begin
+ sc := GraphZoom * 50;
+ gCenterX := fx - (p.X - TriangleView.Width/2) / sc;
+ gCenterY := fy + (p.Y - TriangleView.Height/2) / sc;
+ end;
+
+ TriangleView.Invalidate;
+ Handled := true;
+end;
+
+procedure TEditForm.TriangleViewDblClick(Sender: TObject);
+begin
+ if mouseOverTriangle >= 0 then
+ begin
+ if mouseOverCorner >= 0 then begin
+ case mouseOverCorner of
+ 0: if editMode = modeRotate then ResetAxisRotation(0) else ResetAxisScale(0);
+ 1: if editMode = modeRotate then ResetAxisRotation(1)
+ else begin
+ if editMode = modeScale then
+ ResetAxisScale(1)
+ else begin
+ if cp.xform[SelectedTriangle].postXswap then
+ btnOpostClick(Sender)
+ else
+ btnOcoefsClick(Sender);
+ end;
+ end;
+ 2: if editMode = modeRotate then ResetAxisRotation(2) else ResetAxisScale(2);
+ end;
+ end
+ else if mouseOverEdge >= 0 then begin
+ if AxisLock then begin
+ if (editMode = modeScale) or (mouseOverEdge = 2)then
+ mnuResetTrgScaleClick(Sender)
+ else
+ mnuResetTrgRotationClick(Sender);
+ end
+ else case mouseOverEdge of
+ 0: if editMode = modeScale then ResetAxisScale(0) else ResetAxisRotation(0);
+ 1: if editMode = modeScale then ResetAxisScale(2) else ResetAxisRotation(2);
+ 2: mnuResetTrgScaleClick(Sender);
+ end;
+ end
+ else if mouseOverWidget >= 0 then begin
+ case editMode of
+ modeScale: mnuResetTrgScaleClick(Sender);
+ else mnuResetTrgRotationClick(Sender);
+ end;
+ end
+ else case editMode of
+ //modeMove: Do Nothing
+ modeScale: mnuResetTrgScaleClick(Sender);
+ modeRotate: mnuResetTrgRotationClick(Sender);
+ end;
+ end
+ else AutoZoom;
+end;
+
+procedure TEditForm.TriangleViewInvalidate(Sender: TObject);
+begin
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.tbEditModeClick(Sender: TObject);
+begin
+// ExtendedEdit := (Sender = tbExtendedEdit);
+ if Sender = tbRotate then
+ begin
+ editMode := modeRotate;
+ //tbRotate.Down := true;
+ end
+ else if Sender = tbScale then
+ begin
+ editMode := modeScale;
+ //tbScale.Down := true;
+ end
+ else begin
+ editMode := modeMove;
+ //tbMove.Down := true;
+ end;
+ TToolButton(Sender).Down := true;
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.tbExtendedEditClick(Sender: TObject);
+begin
+ ExtendedEdit := not ExtendedEdit;
+ tbExtendedEdit.Down := ExtendedEdit;
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.tbAxisLockClick(Sender: TObject);
+begin
+ AxisLock := not AxisLock;
+ tbAxisLock.Down := AxisLock;
+end;
+
+procedure TEditForm.tbFullViewClick(Sender: TObject);
+begin
+ MainForm.mnuFullScreenClick(Sender);
+end;
+
+//-- Variables -------------------------------------------------------------
+
+procedure TEditForm.ValidateVariable;
+var
+ i: integer;
+ NewVal, OldVal: double;
+ str, oldstr: string;
+begin
+ i := vleVariables.Row;
+
+{$ifndef VAR_STR}
+ cp.xform[SelectedTriangle].GetVariable(vleVariables.Keys[i], OldVal);
+ { Test that it's a valid floating point number }
+ try
+ NewVal := Round6(StrToFloat(vleVariables.Values[vleVariables.Keys[i]]));
+ except
+ { It's not, so we restore the old value }
+ vleVariables.Values[vleVariables.Keys[i]] := Format('%.6g', [OldVal]);
+// cp.xform[SelectedTriangle].GetVariableStr(vleVariables.Keys[i]);
+ exit;
+ end;
+ { If it's not the same as the old value and it was valid }
+ if (NewVal <> OldVal) then
+ begin
+ vleVariables.Cells[1,i];
+ MainForm.UpdateUndo;
+
+ cp.xform[SelectedTriangle].SetVariable(vleVariables.Keys[i], NewVal);
+ vleVariables.Values[vleVariables.Keys[i]] := Format('%.6g', [NewVal]);
+
+ ShowSelectedInfo;
+ UpdateFlame(True);
+ end;
+{$else}
+ oldstr := cp.xform[SelectedTriangle].GetVariableStr(vleVariables.Keys[i]);
+ str := vleVariables.Values[vleVariables.Keys[i]];
+ cp.xform[SelectedTriangle].SetVariableStr(vleVariables.Keys[i], str);
+
+ if str <> oldstr then
+ begin
+ MainForm.UpdateUndo;
+
+ vleVariables.Values[vleVariables.Keys[i]] := str;
+
+ ShowSelectedInfo;
+ UpdateFlame(True);
+ end;
+{$endif}
+
+ //chkCollapseVariationsClick(nil);
+ //chkCollapseVariablesClick(nil);
+end;
+
+procedure TEditForm.vleVariablesExit(Sender: TObject);
+begin
+ ValidateVariable;
+end;
+
+procedure TEditForm.vleVariablesKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key <> #13 then Exit;
+ key := #0;
+ ValidateVariable;
+end;
+
+procedure TEditForm.vleVariablesValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: string);
+begin
+ ValidateVariable;
+end;
+
+// -----------------------------------------------------------------------------
+
+procedure TEditForm.txtValidateValue(Sender: TObject);
+var
+ t: double;
+begin
+ try
+ t := StrToFloat(TComboBox(Sender).Text);
+ if t <> 0 then exit;
+ except
+ TComboBox(Sender).ItemIndex := 1;
+ end;
+end;
+
+procedure TEditForm.txtValKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key <> #13 then exit;
+ key := #0;
+ txtValidateValue(Sender);
+end;
+
+procedure TEditForm.mnuResetTriangleClick(Sender: TObject);
+begin
+ if (MainTriangles[SelectedTriangle].x[0] = MainTriangles[-1].x[0]) and
+ (MainTriangles[SelectedTriangle].x[1] = MainTriangles[-1].x[1]) and
+ (MainTriangles[SelectedTriangle].x[2] = MainTriangles[-1].x[2]) and
+ (MainTriangles[SelectedTriangle].y[0] = MainTriangles[-1].y[0]) and
+ (MainTriangles[SelectedTriangle].y[1] = MainTriangles[-1].y[1]) and
+ (MainTriangles[SelectedTriangle].y[2] = MainTriangles[-1].y[2])
+ then exit;
+
+ MainForm.UpdateUndo;
+ MainTriangles[SelectedTriangle] := MainTriangles[-1];
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.mnuResetAllClick(Sender: TObject);
+var
+ i: integer;
+begin
+ MainForm.UpdateUndo;
+ for i := 0 to Transforms do cp.xform[i].Clear;
+ cp.xform[0].SetVariation(0, 1);
+ cp.xform[0].density := 0.5;
+ cp.xform[1].symmetry := 1;
+
+ cp.center[0] := 0;
+ cp.center[1] := 0;
+ cp.zoom := 0;
+ cp.pixels_per_unit := PreviewImage.Width/4;
+ cp.FAngle := 0;
+
+ // AV: add 3D-camera resetting
+ cp.cameraPitch := 0;
+ cp.cameraYaw := 0;
+ cp.cameraRoll := 0;
+ cp.cameraPersp := 0;
+ cp.cameraZPos := 0;
+ cp.cameraDOF := 0;
+
+ Transforms := 1;
+ SelectedTriangle := 1;
+ MainTriangles[0] := MainTriangles[-1];
+ MainTriangles[1] := MainTriangles[-1]; // kinda reset finalxform
+
+ EnableFinalXform := false;
+ assert(cp.HasFinalXForm = false);
+
+ UpdateXformsList;
+ AutoZoom;
+
+ UpdateFlame(True);
+
+ if AutoSaveXML then // AV: create a flame from scratch if needed
+ begin
+ MainCp.name := 'New flame' + FormatDateTime(' (MM-dd-yyyy hh-mm-ss)', Now);
+ if MainForm.SaveXMLFlame(MainCp, MainCp.name, OpenFile) then
+ if MainForm.SortFlames.Checked then
+ ListXML(OpenFile, 2, MainCp.name) // show the new item
+ else
+ ListXML(OpenFile, 0); // show the last item
+ end;
+end;
+
+// -----------------------------------------------------------------------------
+
+procedure TEditForm.btnXcoefsClick(Sender: TObject);
+begin
+ with cp.xform[SelectedTriangle] do
+ begin
+ if (c[0][0] = 1) and (c[0][1] = 0) then exit;
+
+ MainForm.UpdateUndo;
+ c[0][0] := 1;
+ c[0][1] := 0;
+ end;
+ cp.TrianglesFromCP(MainTriangles);
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.btnYcoefsClick(Sender: TObject);
+begin
+ if (cp.xform[SelectedTriangle].c[1][0] = 0) and
+ (cp.xform[SelectedTriangle].c[1][1] = 1) then exit;
+
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].c[1][0] := 0;
+ cp.xform[SelectedTriangle].c[1][1] := 1;
+
+ cp.TrianglesFromCP(MainTriangles);
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.btnOcoefsClick(Sender: TObject);
+begin
+ if (sender = mnuResetTrgPosition) and cp.xform[SelectedTriangle].postXswap then
+ begin
+ btnOpostClick(Sender);
+ exit;
+ end;
+
+ if (cp.xform[SelectedTriangle].c[2][0] = 0) and
+ (cp.xform[SelectedTriangle].c[2][1] = 0) then exit;
+
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].c[2][0] := 0;
+ cp.xform[SelectedTriangle].c[2][1] := 0;
+
+ cp.TrianglesFromCP(MainTriangles);
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.btnCoefsModeClick(Sender: TObject);
+begin
+ ShowSelectedInfo;
+end;
+
+procedure TEditForm.tbVarPreviewClick(Sender: TObject);
+begin
+ showVarPreview := not showVarPreview;
+ tbVarPreview.Down := showVarPreview;
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.trkVarPreviewRangeChange(Sender: TObject);
+begin
+ trkVarPreviewRange.Hint := Format(TextByKey('editor-tab-color-previewrange') + ' %d', [trkVarPreviewRange.position]);
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.trkVarPreviewDensityChange(Sender: TObject);
+begin
+ trkVarPreviewDensity.Hint := Format(TextByKey('editor-tab-color-previewdensity') + ' %d', [trkVarPreviewDensity.position]);
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.trkVarPreviewDepthChange(Sender: TObject);
+begin
+ trkVarPreviewDepth.Hint := Format(TextByKey('editor-tab-color-previewdepth') + ' %d', [trkVarPreviewDepth.position]);
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.btnXpostClick(Sender: TObject);
+begin
+ with cp.xform[SelectedTriangle] do
+ begin
+ if (p[0][0] = 1) and (p[0][1] = 0) then exit;
+
+ MainForm.UpdateUndo;
+ p[0][0] := 1;
+ p[0][1] := 0;
+ end;
+ cp.TrianglesFromCP(MainTriangles);
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.btnYpostClick(Sender: TObject);
+begin
+ if (cp.xform[SelectedTriangle].p[1][0] = 0) and
+ (cp.xform[SelectedTriangle].p[1][1] = 1) then exit;
+
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].p[1][0] := 0;
+ cp.xform[SelectedTriangle].p[1][1] := 1;
+ cp.TrianglesFromCP(MainTriangles);
+ UpdateFlame(True);
+end;
+
+procedure TEditForm.btnOpostClick(Sender: TObject);
+begin
+ if (cp.xform[SelectedTriangle].p[2][0] = 0) and
+ (cp.xform[SelectedTriangle].p[2][1] = 0) then exit;
+
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].p[2][0] := 0;
+ cp.xform[SelectedTriangle].p[2][1] := 0;
+ cp.TrianglesFromCP(MainTriangles);
+ UpdateFlame(True);
+end;
+
+// --Z-- copying functions is dumb... I am so lazy :-(
+
+procedure TEditForm.PostCoefKeypress(Sender: TObject; var Key: Char);
+begin
+ if key <> #13 then exit;
+ key := #0;
+ PostCoefValidate(Sender);
+end;
+
+procedure TEditForm.PostCoefValidate(Sender: TObject);
+var
+ NewVal: double;
+ x, y, r, a: double; // dumb... must optimize
+begin
+ try
+ NewVal := Round6(StrToFloat(TEdit(Sender).Text));
+ except on Exception do
+ begin
+ ShowSelectedInfo;
+ exit;
+ end;
+ end;
+
+ MainForm.UpdateUndo; // TODO - prevent unnecessary UpdateUndo...
+ with cp.xform[SelectedTriangle] do
+ begin
+ if btnCoefsRect.Down = true then
+ begin
+ if Sender = txtPost00 then p[0][0] := NewVal
+ else if Sender = txtPost01 then p[0][1] := -NewVal
+ else if Sender = txtPost10 then p[1][0] := -NewVal
+ else if Sender = txtPost11 then p[1][1] := NewVal
+ else if Sender = txtPost20 then p[2][0] := NewVal
+ else if Sender = txtPost21 then p[2][1] := -NewVal;
+ end
+ else begin
+ if (Sender = txtPost00) or (Sender = txtPost01) then begin
+ x := p[0][0];
+ y := -p[0][1];
+ end else
+ if (Sender = txtPost10) or (Sender = txtPost11) then begin
+ x := -p[1][0];
+ y := p[1][1];
+ end else
+ begin
+ x := p[2][0];
+ y := -p[2][1];
+ end;
+ r := Hypot(x, y);
+ a := arctan2(y, x);
+
+ if (Sender = txtPost00) or (Sender = txtPost10) or (Sender = txtPost20) then
+ r := NewVal
+ else
+ a := NewVal*PI/180;
+
+ x := r * cos(a);
+ y := r * sin(a);
+ if (Sender = txtPost00) or (Sender = txtPost01) then begin
+ p[0][0] := x;
+ p[0][1] := -y;
+ end else
+ if (Sender = txtPost10) or (Sender = txtPost11) then begin
+ p[1][0] := -x;
+ p[1][1] := y;
+ end else
+ begin
+ p[2][0] := x;
+ p[2][1] := -y;
+ end;
+ end;
+ end;
+
+ cp.TrianglesFromCP(MainTriangles);
+ //if tbAutoWeights.Down then cp.CalculateWeights;
+ ShowSelectedInfo;
+ UpdateFlame(true);
+
+ self.LastFocus := TEdit(sender);
+end;
+
+procedure TEditForm.btnResetCoefsClick(Sender: TObject);
+begin
+ with cp.xform[SelectedTriangle] do
+ begin
+ if (c[0,0]<>1) or (c[0,1]<>0) or(c[1,0]<>0) or (c[1,1]<>1) or (c[2,0]<>0) or (c[2,1]<>0) then
+ begin
+ MainForm.UpdateUndo;
+ c[0, 0] := 1;
+ c[0, 1] := 0;
+ c[1, 0] := 0;
+ c[1, 1] := 1;
+ c[2, 0] := 0;
+ c[2, 1] := 0;
+ ShowSelectedInfo;
+ cp.TrianglesFromCP(MainTriangles);
+ if tbAutoWeights.Down then cp.CalculateWeights; // AV
+ UpdateFlame(True);
+ end;
+ end;
+end;
+
+procedure TEditForm.btnResetFlipClick(Sender: TObject);
+begin
+ FlipPoint.x := 0;
+ FlipPoint.y := 0;
+ editFlipX.Text := '0';
+ editFlipY.Text := '0';
+ CalcFlip;
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.btnResetPostCoefsClick(Sender: TObject);
+begin
+ with cp.xform[SelectedTriangle] do
+ begin
+ if (p[0,0]<>1) or (p[0,1]<>0) or(p[1,0]<>0) or (p[1,1]<>1) or (p[2,0]<>0) or (p[2,1]<>0) then
+ begin
+
+ p[0, 0] := 1;
+ p[0, 1] := 0;
+ p[1, 0] := 0;
+ p[1, 1] := 1;
+ p[2, 0] := 0;
+ p[2, 1] := 0;
+ ShowSelectedInfo;
+ cp.TrianglesFromCP(MainTriangles);
+ UpdateFlame(True);
+ end;
+ end;
+end;
+
+procedure TEditForm.btnPivotModeClick(Sender: TObject);
+begin
+ if PivotMode <> pivotLocal then
+ // with MainTriangles[SelectedTriangle] do
+ PivotMode := pivotLocal
+ else
+ // with MainTriangles[SelectedTriangle] do
+ PivotMode := pivotWorld;
+
+ TriangleView.Invalidate;
+ ShowSelectedInfo;
+end;
+
+procedure TEditForm.PivotValidate(Sender: TObject);
+var
+ v: double;
+begin
+ try
+ v := Round6(StrToFloat(TEdit(Sender).Text));
+ except on Exception do
+ begin
+ ShowSelectedInfo;
+ exit;
+ end;
+ end;
+
+ if Sender = editPivotX then
+ if v <> Round6(GetPivot.x) then begin
+ if PivotMode = pivotLocal then LocalPivot.x := v
+ else WorldPivot.x := v;
+ end
+ else exit
+ else
+ if v <> Round6(GetPivot.y) then begin
+ if PivotMode = pivotLocal then LocalPivot.y := v
+ else WorldPivot.y := v;
+ end
+ else exit;
+
+ TriangleView.Invalidate;
+ ShowSelectedInfo;
+
+ self.LastFocus := TEdit(sender);
+end;
+
+procedure TEditForm.PivotKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key <> #13 then exit;
+ key := #0;
+ PivotValidate(Sender);
+end;
+
+procedure TEditForm.btnResetPivotClick(Sender: TObject);
+begin
+ if editMode = modePick then begin
+ editMode := oldMode;
+ oldMode := modeNone;
+ // hack: to generate MouseMove event
+ GetCursorPos(MousePos);
+ SetCursorPos(MousePos.x, MousePos.y);
+ //
+ end;
+ if PivotMode = pivotLocal then
+ begin
+ LocalPivot.x := 0;
+ LocalPivot.y := 0;
+ end
+ else begin
+ WorldPivot.x := 0;
+ WorldPivot.y := 0;
+ end;
+ TriangleView.Invalidate;
+ ShowSelectedInfo;
+end;
+
+procedure TEditForm.btnPickPivotClick(Sender: TObject);
+begin
+ if editMode = modePick then begin
+ editMode := oldMode;
+ oldMode := modeNone;
+ TriangleView.Invalidate;
+ // hack: to generate MouseMove event
+ GetCursorPos(MousePos);
+ SetCursorPos(MousePos.x, MousePos.y);
+ //
+ exit;
+ end;
+ if oldMode <> modeNone then exit;
+ oldMode := editMode;
+ editMode := modePick;
+ TriangleView.Invalidate;
+ btnPickPivot.Down := true;
+end;
+
+procedure TEditForm.VEVarsDrawCell(Sender: TObject; ACol, ARow: Integer;
+ Rect: TRect; State: TGridDrawState);
+var
+ supports3D, supportsDC : boolean;
+ col : TColor;
+ frect : TRect;
+ i: integer;
+begin
+ if (ARow = 0) then exit; // AV
+ i := GetVariationIndex(VEVars.Keys[ARow]); // AV
+ if (i > NRLOCVAR) and not (gdSelected in State) then
+ begin
+ if IsDarkTheme then // AV: dark UI design requies another colors
+ begin
+ if i > NumBuiltinVars then
+ col := MidColor
+ else begin
+ col := BrightColor;
+ if (CurrentStyle = 'Auric') then // make the text more visible
+ VEVars.Canvas.Font.Color := WinColor
+ end;
+ end
+ else begin // classic variant
+ if i > NumBuiltinVars then
+ col := $e0ffff // orange
+ else
+ col := $ffe0e0; // blue
+ end;
+ VEVars.canvas.brush.Color := col;
+ VEVars.canvas.fillRect(Rect);
+ VEVars.canvas.TextOut(Rect.Left+2, Rect.Top+2, VEVars.Cells[ACol,ARow]);
+ end else col := VEVars.canvas.brush.color;
+ if (Acol = 0) and (Arow > 0) then begin
+ VEVars.Canvas.Font.Name := 'Arial';
+ VEVars.Canvas.Font.Size := 5;
+
+ VarSupports(i, supports3D, supportsDC); // Arow - 1
+
+ frect.Left := Rect.Right - 12;
+ frect.Right := Rect.Right;
+ frect.Top := Rect.Top;
+ frect.Bottom := Rect.Bottom;
+
+ if (supports3D or supportsDC) then begin
+ VEVars.canvas.brush.Color := col;
+ VEVars.canvas.fillRect(frect);
+ end;
+
+ if (supports3D) then begin
+ VEVars.Canvas.Font.Color := $a00000;
+ VEVars.Canvas.TextOut(frect.Left, frect.Top + 2, '3D');
+ end;
+
+ if (supportsDC) then begin
+ VEVars.Canvas.Font.Color := $0000a0;
+ VEVars.Canvas.TextOut(frect.Left, frect.Top + 9, 'DC');
+ end;
+ end;
+end;
+
+procedure TEditForm.tbEnableFinalXformClick(Sender: TObject);
+begin
+ MainForm.UpdateUndo;
+ EnableFinalXform := tbEnableFinalXform.Down;
+ if (cp.HasFinalXForm = false) then
+ begin
+ if (EnableFinalXform = true) then
+ begin
+ cbTransforms.Items.Add(TextByKey('editor-common-finalxformlistitem'));
+ SelectedTriangle := Transforms;
+ if (mouseOverTriangle > LastTriangle) then mouseOverTriangle := -1;
+ end
+ else begin
+ if cbTransforms.Items.Count = Transforms+1 then
+ cbTransforms.Items.Delete(Transforms);
+ if SelectedTriangle >= Transforms then SelectedTriangle := Transforms-1;
+ end;
+ end;
+ cp.finalXformEnabled := EnableFinalXform;
+ UpdateFlame(True);
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.DragPanelMouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+var dont :boolean;
+begin
+ if Button <> mbLeft then exit;
+
+ // -X- why? its impossible!
+ assert(pnlDragMode = false); //?
+ if pnlDragMode = true then exit;
+
+ dont := false;
+ if (Sender = pnlWeight) then
+ if SelectedTriangle < Transforms then
+ pnlDragValue := cp.xform[SelectedTriangle].density
+ else exit
+ else if (Sender = pnlSymmetry) then
+ pnlDragValue := cp.xform[SelectedTriangle].symmetry
+ else if (Sender = pnlXformColor) then
+ pnlDragValue := cp.xform[SelectedTriangle].color
+ else if (Sender = pnlOpacity) then begin
+ if (txtOpacity.Enabled) then begin
+ pnlDragValue := cp.xform[SelectedTriangle].transOpacity;
+ end else dont := true;
+ end else if (Sender = pnlDC) then begin
+ if (txtDC.Enabled) then begin
+ pnlDragValue := cp.xform[SelectedTriangle].pluginColor;
+ end else dont := true;
+ end else assert(false);
+
+ if (not dont) then begin
+ pnlDragMode := true;
+ pnlDragPos := 0;
+ pnlDragOld := x;
+ varMM := false;
+ //SetCaptureControl(TControl(Sender));
+
+ Screen.Cursor := crHSplit;
+ //GetCursorPos(mousepos); // hmmm
+ mousePos := (Sender as TControl).ClientToScreen(Point(x, y));
+ HasChanged := false;
+ end;
+end;
+
+procedure TEditForm.DragPanelMouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+var
+ v: double;
+ pEdit: ^TEdit;
+begin
+ if varMM then // hack: to skip MouseMove event
+ begin
+ varMM:=false;
+ end
+ else
+ if pnlDragMode and (x <> pnlDragOld) then
+ begin
+ Inc(pnlDragPos, x - pnlDragOld);
+
+ if GetKeyState(VK_MENU) < 0 then v := 100000
+ else if GetKeyState(VK_CONTROL) < 0 then v := 10000
+ else if GetKeyState(VK_SHIFT) < 0 then v := 100
+ else v := 1000;
+
+ v := Round6(pnlDragValue + pnlDragPos / v);
+
+ SetCursorPos(MousePos.x, MousePos.y); // hmmm
+ varMM:=true;
+
+ if (Sender = pnlWeight) then
+ begin
+ if v <= 0.000001 then v := 0.000001
+ else if v > MAX_WEIGHT then v := MAX_WEIGHT;
+ cp.xform[SelectedTriangle].density := v;
+ pEdit := @txtP;
+ end
+ else if (Sender = pnlSymmetry) then
+ begin
+ if v < -1 then v := -1
+ else if v > 1 then v := 1;
+ cp.xform[SelectedTriangle].symmetry := v;
+ pEdit := @txtSymmetry;
+ end
+ else if (Sender = pnlOpacity) then
+ begin
+ if (txtOpacity.Enabled) then begin
+ if v < 0 then v := 0
+ else if v > 1 then v := 1;
+ cp.xform[SelectedTriangle].transOpacity := v;
+ pEdit := @txtOpacity;
+ end else exit;
+ end
+ else if (Sender = pnlDC) then
+ begin
+ if (txtDC.Enabled) then begin
+ if v < 0 then v := 0
+ else if v > 1 then v := 1;
+ cp.xform[SelectedTriangle].pluginColor := v;
+ pEdit := @txtDC;
+ end else exit;
+ end
+ else if (Sender = pnlXformColor) then
+ begin
+ if v < 0 then v := 0
+ else if v > 1 then v := 1;
+ cp.xform[SelectedTriangle].color := v;
+ pnlXFormColor.Color := ColorValToColor(cp.cmap, v);
+ shColor.Brush.Color := pnlXformColor.Color;
+ updating := true;
+ scrlXformColor.Position := round(v*1000);
+ pEdit := @txtXformColor;
+ updating := false;
+ end
+ else begin
+ assert(false);
+ exit;
+ end;
+ pEdit^.Text := FloatToStr(v);
+ pEdit.Refresh;
+ HasChanged := True;
+ DrawPreview;
+ end;
+end;
+
+procedure TEditForm.DragPanelMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ if Button <> mbLeft then exit;
+
+ if pnlDragMode then
+ begin
+ //SetCaptureControl(nil);
+
+ pnlDragMode := false;
+ Screen.Cursor := crDefault;
+
+ if HasChanged then
+ begin
+ MainForm.UpdateUndo;
+
+ UpdateFlame(true);
+ HasChanged := False;
+
+ if (Sender = pnlWeight) and ChaosForm.Visible then // AV
+ ChaosForm.WeightVector.Invalidate;
+ end;
+ end;
+end;
+
+procedure TEditForm.DragPanelDblClick(Sender: TObject);
+var
+ pValue: ^double;
+ pEdit: ^TEdit;
+begin
+ if (Sender = pnlWeight) then
+ begin
+ if SelectedTriangle >= Transforms then exit; // hmm
+ pValue := @cp.xform[SelectedTriangle].density;
+ if pValue^ = 0.5 then exit;
+ pValue^ := 0.5;
+ pEdit := @txtP;
+ if ChaosForm.Visible then // AV
+ ChaosForm.WeightVector.Invalidate;
+ end
+ else if (Sender = pnlSymmetry) then
+ begin
+ pValue := @cp.xform[SelectedTriangle].symmetry;
+ if SelectedTriangle = Transforms then begin
+ if pValue^ = 1 then exit;
+ pValue^ := 1;
+ end
+ else begin
+ if pValue^ = 0 then exit;
+ pValue^ := 0;
+ end;
+ pEdit := @txtSymmetry;
+ end
+ else if (Sender = pnlXformColor) then
+ begin
+ pValue := @cp.xform[SelectedTriangle].color;
+ if pValue^ = 0 then exit;
+ pValue^ := 0;
+ pEdit := @txtXformColor;
+ end
+ else if (Sender = pnlOpacity) then
+ begin
+ if SelectedTriangle >= Transforms then exit; // hmm
+ pValue := @cp.xform[SelectedTriangle].transOpacity;
+ if pValue^ = 1.0 then begin
+ pValue^ := 0.0;
+ end else begin
+ pValue^ := 1.0;
+ end;
+ pEdit := @txtOpacity;
+ end
+ else if (Sender = pnlDC) then
+ begin
+ if SelectedTriangle >= Transforms then exit; // hmm
+ pValue := @cp.xform[SelectedTriangle].pluginColor;
+ if pValue^ = 1.0 then begin
+ pValue^ := 0.0;
+ end else begin
+ pValue^ := 1.0;
+ end;
+ pEdit := @txtDC;
+ end
+ else begin
+ assert(false);
+ exit;
+ end;
+
+ MainForm.UpdateUndo;
+ pEdit^.Text := FloatToStr(pValue^);
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.mnuResetTrgRotationClick(Sender: TObject);
+var
+ dx, dy: double;
+ ax, ay, da: integer;
+ nx0, ny0, nx2, ny2: double;
+begin
+ with MainTriangles[SelectedTriangle] do
+ begin
+// xx := x[0] - x[1];
+// xy := y[0] - y[1];
+// yx := x[2] - x[1];
+// yy := y[2] - y[1];
+ ax := round( arctan2(xy, xx) / (pi/2) );
+ ay := round( arctan2(yy, yx) / (pi/2) );
+ dx := Hypot(xx, xy);
+ dy := Hypot(yx, yy);
+ if xx*yy - yx*xy >= 0 then da := 1 else da := -1;
+ if ax = ay then ay := ay + da
+ else if abs(ax-ay) = 2 then ay := ay - da;
+
+ nx0 := x[1] + dx*cos(ax*pi/2);
+ ny0 := y[1] + dx*sin(ax*pi/2);
+ nx2 := x[1] + dy*cos(ay*pi/2);
+ ny2 := y[1] + dy*sin(ay*pi/2);
+ if (x[0] = nx0) and (y[0] = ny0) and (x[2] = nx2) and (y[2] = ny2) then exit;
+ MainForm.UpdateUndo;
+ x[0] := nx0;
+ y[0] := ny0;
+ x[2] := nx2;
+ y[2] := ny2;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.mnuResetTrgScaleClick(Sender: TObject);
+var
+ dx, dy: double;
+ nx0, ny0, nx2, ny2: double;
+begin
+ with MainTriangles[SelectedTriangle] do
+ begin
+// xx := x[0] - x[1];
+// xy := y[0] - y[1];
+// yx := x[2] - x[1];
+// yy := y[2] - y[1];
+ dx := Hypot(xx, xy);
+ dy := Hypot(yx, yy);
+ if dx <> 0 then begin
+ nx0 := x[1] + (x[0] - x[1])/dx;
+ ny0 := y[1] + (y[0] - y[1])/dx;
+ end
+ else begin
+ nx0 := x[1] + 1;
+ ny0 := y[1];
+ end;
+ if dx <> 0 then begin
+ nx2 := x[1] + (x[2] - x[1])/dy;
+ ny2 := y[1] + (y[2] - y[1])/dy;
+ end
+ else begin
+ nx2 := x[1];
+ ny2 := y[1] + 1;
+ end;
+ if (x[0] = nx0) and (y[0] = ny0) and (x[2] = nx2) and (y[2] = ny2) then exit;
+ MainForm.UpdateUndo;
+ x[0] := nx0;
+ y[0] := ny0;
+ x[2] := nx2;
+ y[2] := ny2;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.RandomizeMatrixClick(Sender: TObject);
+var i, j: integer;
+begin
+ MainForm.UpdateUndo;
+ if Sender = RandomizeMatrix then
+ for i := 0 to Transforms-1 do
+ for j := 0 to Transforms-1 do
+ cp.xform[i].modWeights[j] := Round6(random)
+ else begin
+ if mnuChaosViewTo.Checked then
+ for j := 0 to Transforms-1 do
+ cp.xform[SelectedTriangle].modWeights[j] := Round6(random)
+ else for j := 0 to Transforms-1 do
+ cp.xform[j].modWeights[SelectedTriangle] := Round6(random);
+ end;
+
+ UpdateFlame(True);
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+end;
+
+procedure TEditForm.ResetAxisRotation(n: integer);
+var
+ dx, dy, d: double;
+ a: integer;
+ nx, ny: double;
+begin
+ with MainTriangles[SelectedTriangle] do
+ begin
+ if n = 1 then
+ begin
+ d := Hypot(x[1], y[1]);
+ if d = 0 then exit;
+ a := round( arctan2(y[1], x[1]) / (pi/2) );
+ nx := d*cos(a*pi/2);
+ ny := d*sin(a*pi/2);
+ if (x[1] = nx) and (y[1] = ny) then exit;
+ MainForm.UpdateUndo;
+ x[1] := nx;
+ y[1] := ny;
+ x[0] := x[1] + xx;
+ y[0] := y[1] + xy;
+ x[2] := x[1] + yx;
+ y[2] := y[1] + yy;
+ UpdateFlame(True);
+ end
+ else begin
+ dx := x[n] - x[1];
+ dy := y[n] - y[1];
+ a := round( arctan2(dy, dx) / (pi/2) );
+ d := Hypot(dx, dy);
+ nx := x[1] + d*cos(a*pi/2);
+ ny := y[1] + d*sin(a*pi/2);
+ if (x[n] = nx) and (y[n] = ny) then exit;
+ MainForm.UpdateUndo;
+ x[n] := nx;
+ y[n] := ny;
+ UpdateFlame(True);
+ end;
+ end;
+end;
+
+procedure TEditForm.ResetAxisScale(n: integer);
+var
+ dx, dy, d: double;
+ nx, ny: double;
+begin
+ with MainTriangles[SelectedTriangle] do
+ begin
+ if n = 1 then
+ begin
+ d := Hypot(x[1], y[1]);
+ if d = 0 then exit;
+ nx := x[1]/d;
+ ny := y[1]/d;
+ if (x[1] = nx) and (y[1] = ny) then exit;
+ MainForm.UpdateUndo;
+ x[1] := nx;
+ y[1] := ny;
+ x[0] := x[1] + xx;
+ y[0] := y[1] + xy;
+ x[2] := x[1] + yx;
+ y[2] := y[1] + yy;
+ UpdateFlame(True);
+ end
+ else begin
+ dx := x[n] - x[1];
+ dy := y[n] - y[1];
+ d := Hypot(dx, dy);
+ if d <> 0 then begin
+ nx := x[1] + dx / d;
+ ny := y[1] + dy / d;
+ end
+ else begin
+ nx := x[1] + ifthen(n=0, 1, 0);
+ ny := y[1] + ifthen(n=2, 1, 0);
+ end;
+ if (x[n] = nx) and (y[n] = ny) then exit;
+ MainForm.UpdateUndo;
+ x[n] := nx;
+ y[n] := ny;
+ UpdateFlame(True);
+ end;
+ end;
+end;
+
+procedure TEditForm.tbPostXswapClick(Sender: TObject);
+begin
+ cp.GetFromTriangles(MainTriangles, cp.NumXForms);
+ with cp.xform[SelectedTriangle] do begin
+
+ { // AV: it doesn't work then user press hotkey T...
+ if (sender = tbPostXswap) then tb2PostXswap.down := tbPostXswap.Down;
+ if (sender = tb2PostXswap) then tbPostXswap.Down := tb2PostXSwap.Down;
+
+ postXswap := TToolButton(sender).Down; }
+
+ if (sender = tbPostXswap) or (sender = tb2PostXswap) then
+ postXswap := TToolButton(sender).Down
+ else
+ postXswap := not postXswap;
+ tbPostXswap.Down := postXswap;
+ tb2PostXswap.Down := postXswap;
+ ShowSelectedInfo;
+ end;
+ cp.TrianglesFromCP(MainTriangles);
+ TriangleView.Refresh;
+end;
+
+procedure TEditForm.btnCopyTriangleClick(Sender: TObject);
+begin
+ MemTriangle := MainTriangles[SelectedTriangle];
+ tbPasteTriangle.Enabled := True;
+ PasteTriangleCoordinates1.Enabled := True;
+end;
+
+procedure TEditForm.btnFlipClick(Sender: TObject);
+var px, py, fx, fy: double;
+begin
+ px := GetPivot.x;
+ py := GetPivot.y;
+ if (PivotMode = pivotLocal) then
+ with MainTriangles[SelectedTriangle] do begin
+ fx := x[1] + (x[0] - x[1])* FlipPoint.x + (x[2] - x[1])* FlipPoint.y;
+ fy := y[1] + (y[0] - y[1])* FlipPoint.x + (y[2] - y[1])* FlipPoint.y;
+ end
+ else begin
+ fx := FlipPoint.x;
+ fy := FlipPoint.y;
+ end;
+ if (px = fx) and (py = fy) then exit;
+ MainForm.UpdateUndo;
+ //if (px = fx) then MainTriangles[SelectedTriangle] :=
+ // FlipTriangleHorizontal(MainTriangles[SelectedTriangle])
+ //else if (py = fy) then MainTriangles[SelectedTriangle] :=
+ // FlipTriangleVertical(MainTriangles[SelectedTriangle]) else
+ MainTriangles[SelectedTriangle] :=
+ FlipTriangleLine(MainTriangles[SelectedTriangle], px, py, fx, fy);
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btnFullChaosClick(Sender: TObject);
+begin
+ ChaosForm.Show;
+end;
+
+procedure TEditForm.btnPasteTriangleClick(Sender: TObject);
+begin
+ if (MainTriangles[SelectedTriangle].x[0] <> MemTriangle.x[0]) or
+ (MainTriangles[SelectedTriangle].x[1] <> MemTriangle.x[1]) or
+ (MainTriangles[SelectedTriangle].x[2] <> MemTriangle.x[2]) or
+ (MainTriangles[SelectedTriangle].y[0] <> MemTriangle.y[0]) or
+ (MainTriangles[SelectedTriangle].y[1] <> MemTriangle.y[1]) or
+ (MainTriangles[SelectedTriangle].y[2] <> MemTriangle.y[2]) then
+ begin
+ MainForm.UpdateUndo;
+ MainTriangles[SelectedTriangle] := MemTriangle;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.chkAutoZscaleClick(Sender: TObject);
+begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].autoZscale := chkAutoZscale.Checked;
+ UpdateFlame(True);
+end;
+
+// --------------------------------------------------------------- Chaos Editor
+
+procedure TEditForm.ValidateChaos;
+var
+ i: integer;
+ NewVal, OldVal: double;
+begin
+ i := vleChaos.Row - 1;
+
+ if mnuChaosViewTo.Checked then
+ OldVal := Round6(cp.xform[SelectedTriangle].modWeights[i])
+ else
+ OldVal := Round6(cp.xform[i].modWeights[SelectedTriangle]);
+
+ try
+ NewVal := Round6(StrToFloat(vleChaos.Cells[1, i+1]));
+ except
+ vleChaos.Cells[1, i+1] := Format('%.6g', [OldVal]);
+ exit;
+ end;
+ if (NewVal <> OldVal) then
+ begin
+ MainForm.UpdateUndo;
+
+ if mnuChaosViewTo.Checked then
+ cp.xform[SelectedTriangle].modWeights[i] := NewVal
+ else
+ cp.xform[i].modWeights[SelectedTriangle] := NewVal;
+
+ vleChaos.Cells[1, i+1] := Format('%.6g', [NewVal]);
+ ShowSelectedInfo;
+ UpdateFlame(True);
+
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+ end;
+end;
+
+procedure TEditForm.vleChaosExit(Sender: TObject);
+begin
+ ValidateChaos;
+end;
+
+procedure TEditForm.vleChaosKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = '-') then Key:= #0; // AV
+ if key = #13 then
+ begin
+ key := #0;
+ ValidateChaos;
+ end;
+end;
+
+procedure TEditForm.vleChaosValidate(Sender: TObject; ACol, ARow: Integer;
+ const KeyName, KeyValue: String);
+begin
+ ValidateChaos;
+end;
+
+procedure TEditForm.VleChaosDrawCell(Sender: TObject; ACol, ARow: Integer;
+ Rect: TRect; State: TGridDrawState);
+var
+ h,ax,ay,bx,by: integer;
+ trgColor: TColor;
+begin
+ if (ACol > 0) or (ARow = 0) then exit;
+
+ trgColor := GetTriangleColor(ARow - 1);
+ with vleChaos.Canvas do begin
+ h := Rect.Bottom - Rect.Top - 2;
+// TextOut(Rect.Left+h+2, Rect.Top+1, vleChaos.Cells[ACol, ARow]);
+
+ ax:=Rect.Right-3;
+ ay:=Rect.Top+2;
+ bx:=Rect.Right-h;
+ by:=Rect.Bottom-3;
+
+ pen.Color := clBlack;
+ Polyline([Point(ax+1, ay-2), Point(ax+1, by+1), Point(bx-2, by+1), Point(ax+1, ay-2)]);
+
+ pen.Color := trgColor;
+ brush.Color := pen.Color shr 1 and $7f7f7f;
+ Polygon([Point(ax, ay), Point(ax, by), Point(bx, by)]);
+ end;
+end;
+
+procedure TEditForm.mnuChaosViewToClick(Sender: TObject);
+var
+ i: integer;
+begin
+ mnuChaosViewTo.Checked := true;
+ for i := 1 to vleChaos.RowCount-1 do begin
+ vleChaos.Cells[0, i] := Format(TextByKey('editor-common-toprefix'), [i]);
+ vleChaos.Cells[1, i] := FloatToStr(cp.xform[SelectedTriangle].modWeights[i-1]);
+ end;
+ //ShowSelectedInfo;
+end;
+
+procedure TEditForm.mnuChaosViewFromClick(Sender: TObject);
+var
+ i: integer;
+begin
+ mnuChaosViewFrom.Checked := true;
+ for i := 1 to vleChaos.RowCount-1 do begin
+ vleChaos.Cells[0, i] := Format(TextByKey('editor-common-fromprefix'), [i]);
+ vleChaos.Cells[1, i] := FloatToStr(cp.xform[i-1].modWeights[SelectedTriangle]);
+ end;
+ //ShowSelectedInfo;
+end;
+
+(*
+procedure TEditForm.chkPlotModeClick(Sender: TObject);
+var newMode: boolean;
+begin
+ if (SelectedTriangle < Transforms) then
+ begin
+ newMode := chkXformInvisible.Checked;
+ if cp.xform[SelectedTriangle].noPlot <> newMode then begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].noPlot := newMode;
+ UpdateFlame(true);
+ end;
+ end;
+end;
+*)
+
+procedure TEditForm.mnuChangeGridClick(Sender: TObject); // AV
+begin
+ if not TMenuItem(Sender).Checked then
+ begin
+ TMenuItem(Sender).Checked := True;
+ try
+ if Sender = RectGrid then // AV: classic arrows
+ begin
+ btTrgMoveUp.Glyph := nil;
+ IconsAV.GetBitmap(0, btTrgMoveUp.Glyph);
+ btTrgMoveDown.Glyph := nil;
+ IconsAV.GetBitmap(1, btTrgMoveDown.Glyph);
+ end else begin // AV: slope arrows
+ btTrgMoveUp.Glyph := nil;
+ IconsAV.GetBitmap(2, btTrgMoveUp.Glyph);
+ btTrgMoveDown.Glyph := nil;
+ IconsAV.GetBitmap(3, btTrgMoveDown.Glyph);
+ end;
+ finally
+ end;
+ end;
+end;
+
+procedure TEditForm.mnuChaosClearAllClick(Sender: TObject);
+var
+ i: integer;
+ noEdit: boolean;
+begin
+ noEdit := true;
+ for i := 1 to cp.NumXForms do
+ if mnuChaosViewTo.Checked then begin
+ if cp.xform[SelectedTriangle].modWeights[i-1] <> 0 then begin
+ noEdit := false;
+ break;
+ end;
+ end
+ else begin
+ if cp.xform[i-1].modWeights[SelectedTriangle] <> 0 then begin
+ noEdit := false;
+ break;
+ end;
+ end;
+ if noEdit then exit;
+
+ Mainform.UpdateUndo;
+ for i := 1 to cp.NumXForms do
+ if mnuChaosViewTo.Checked then
+ cp.xform[SelectedTriangle].modWeights[i-1] := 0
+ else
+ cp.xform[i-1].modWeights[SelectedTriangle] := 0;
+ UpdateFlame(true);
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+end;
+
+procedure TEditForm.mnuChaosSetAllClick(Sender: TObject);
+var
+ i: integer;
+ noEdit: boolean;
+begin
+ noEdit := true;
+ for i := 1 to cp.NumXForms do
+ if mnuChaosViewTo.Checked then begin
+ if cp.xform[SelectedTriangle].modWeights[i-1] <> 1 then begin
+ noEdit := false;
+ break;
+ end;
+ end
+ else begin
+ if cp.xform[i-1].modWeights[SelectedTriangle] <> 1 then begin
+ noEdit := false;
+ break;
+ end;
+ end;
+ if noEdit then exit;
+
+ Mainform.UpdateUndo;
+ for i := 1 to cp.NumXForms do
+ if mnuChaosViewTo.Checked then
+ cp.xform[SelectedTriangle].modWeights[i-1] := 1
+ else
+ cp.xform[i-1].modWeights[SelectedTriangle] := 1;
+ UpdateFlame(true);
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+end;
+
+procedure TEditForm.mnuLinkPostxformClick(Sender: TObject);
+var
+ i, k: integer;
+begin
+ if (Transforms < NXFORMS) and (SelectedTriangle <> Transforms) then
+ begin
+ MainForm.UpdateUndo;
+ MainTriangles[Transforms+1] := MainTriangles[Transforms];
+ cp.xform[Transforms+1].Assign(cp.xform[Transforms]);
+
+ MainTriangles[Transforms] := MainTriangles[-1];
+ cp.xform[Transforms].Clear;
+ if InheritWeights.Checked then
+ cp.xform[Transforms].density := cp.xform[SelectedTriangle].density
+ else cp.xform[Transforms].density := 0.5;
+ cp.xform[Transforms].SetVariation(0, 1);
+
+ for i := 0 to NXFORMS-1 do begin
+ if (i = Transforms) then continue;
+ cp.xform[Transforms].modWeights[i] := cp.xform[SelectedTriangle].modWeights[i];
+ cp.xform[SelectedTriangle].modWeights[i] := 0;
+ end;
+
+ for i := 0 to NXFORMS-1 do
+ cp.xform[i].modWeights[Transforms] := 0;
+ cp.xform[SelectedTriangle].modWeights[Transforms] := 1;
+
+ cp.xform[Transforms].symmetry := 1;
+ cp.xform[Transforms].transOpacity := cp.xform[SelectedTriangle].transOpacity;
+ cp.xform[SelectedTriangle].transOpacity := 0;
+
+ hasLinkX := True;
+
+ k := SelectedTriangle;
+ SelectedTriangle := Transforms;
+ cp.xform[SelectedTriangle].TransformName := 'Post-link for TX ' + IntToStr(k + 1);
+
+ Inc(Transforms);
+ UpdateXformsList;
+ UpdateFlame(True);
+
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+ end;
+end;
+
+procedure TEditForm.mnuLinkPreXformClick(Sender: TObject);
+var
+ i, k: integer;
+begin
+ if (Transforms < NXFORMS) and (SelectedTriangle <> Transforms) then
+ begin
+ MainForm.UpdateUndo;
+ MainTriangles[Transforms+1] := MainTriangles[Transforms];
+ cp.xform[Transforms+1].Assign(cp.xform[Transforms]);
+
+ MainTriangles[Transforms] := MainTriangles[-1];
+ cp.xform[Transforms].Clear;
+ if InheritWeights.Checked then
+ cp.xform[Transforms].density := cp.xform[SelectedTriangle].density
+ else cp.xform[Transforms].density := 0.5;
+ cp.xform[Transforms].SetVariation(0, 1);
+
+ for i := 0 to NXFORMS-1 do begin
+ if (i = Transforms) then continue;
+ cp.xform[i].modWeights[Transforms] := cp.xform[i].modWeights[SelectedTriangle];
+ cp.xform[i].modWeights[SelectedTriangle] := 0;
+ end;
+
+ for i := 0 to NXFORMS-1 do
+ cp.xform[Transforms].modWeights[i] := 0;
+ cp.xform[Transforms].modWeights[SelectedTriangle] := 1;
+
+ cp.xform[Transforms].symmetry := 1;
+ cp.xform[Transforms].transOpacity := 0;
+
+ hasLinkX := True;
+
+ k := SelectedTriangle;
+ SelectedTriangle := Transforms;
+ cp.xform[SelectedTriangle].TransformName := 'Pre-link for TX ' + IntToStr(k + 1);
+
+ Inc(Transforms);
+ UpdateXformsList;
+ UpdateFlame(True);
+
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+ end;
+end;
+
+procedure TEditForm.chkXformSoloClick(Sender: TObject);
+begin
+ if chkXformSolo.Checked <> (cp.soloXform >=0) then begin
+ if chkXformSolo.Checked then begin
+ if (SelectedTriangle < Transforms) then begin
+ cp.soloXform := SelectedTriangle;
+ UpdateFlame(true);
+ end;
+ end
+ else begin
+ cp.soloXform := -1;
+ UpdateFlame(true);
+ end;
+ end;
+end;
+
+procedure TEditForm.mnuChaosRebuildClick(Sender: TObject);
+begin
+ RebuildXaosLinks := not RebuildXaosLinks;
+ mnuChaosRebuild.Checked := RebuildXaosLinks;
+end;
+
+procedure TEditForm.chkCollapseVariationsClick(Sender: TObject);
+var
+ i: integer;
+ s: string;
+begin
+ s := Trim(txtSearchBox.Text);
+ for i := 1 to VEVars.RowCount - 1 do
+ begin
+ if (Length(s) = 0) then
+ begin
+ case cbCollapseVariations.ItemIndex of
+ 0: VEVars.RowHeights[i] := VEVars.DefaultRowHeight; // all
+ 1: if Assigned(cp) then
+ VEVars.RowHeights[i] := // active
+ IfThen((VEVars.Cells[1,i] = '0'), -1, VEVars.DefaultRowHeight)
+ else
+ VEVars.RowHeights[i] := -1;
+ 2: VEVars.RowHeights[i] := // favourites
+ IfThen(FavouriteVariations[GetVariationIndex(VEVars.Cells[0,i])], // i-1
+ VEVars.DefaultRowHeight, -1);
+ end;
+ end
+ else begin // AV: search text is not empty
+ if (Length(s) > Length(VEVars.Cells[0, i])) then
+ VEVars.RowHeights[i] := -1
+ else if Pos(s, VEVars.Cells[0, i]) > 0 then
+ begin
+ case cbCollapseVariations.ItemIndex of
+ 0: VEVars.RowHeights[i] := VEVars.DefaultRowHeight; // all
+ 1: if Assigned(cp) then
+ VEVars.RowHeights[i] := // active
+ IfThen((VEVars.Cells[1,i] = '0'), -1, VEVars.DefaultRowHeight)
+ else
+ VEVars.RowHeights[i] := -1;
+ 2: VEVars.RowHeights[i] := // favourites
+ IfThen(FavouriteVariations[GetVariationIndex(VEVars.Cells[0,i])],
+ VEVars.DefaultRowHeight, -1);
+ end;
+ end
+ else
+ VEVars.RowHeights[i] := -1;
+ end;
+ end;
+
+{
+ s := Trim(txtSearchBox.Text);
+ for i:= 1 to VEVars.RowCount - 1 do
+ begin
+ if (Length(s) = 0) then
+ begin
+ if ((Assigned(cp)) and (VEVars.Cells[1,i]='0')) then
+ if chkCollapseVariations.Checked then
+ VEVars.RowHeights[i] := -1
+ else
+ VEVars.RowHeights[i] := VEVars.DefaultRowHeight
+ else
+ VEVars.RowHeights[i] := VEVars.DefaultRowHeight;
+ end
+ else begin
+ if (Length(s) > Length(VEVars.Cells[0, i])) then
+ VEVars.RowHeights[i] := -1
+ else if Pos(s, VEVars.Cells[0, i]) > 0 then
+ begin
+ if ((Assigned(cp)) and (VEVars.Cells[1,i]='0')) then
+ if chkCollapseVariations.Checked then
+ VEVars.RowHeights[i] := -1
+ else
+ VEVars.RowHeights[i] := VEVars.DefaultRowHeight
+ else
+ VEVars.RowHeights[i] := VEVars.DefaultRowHeight;
+ end
+ else
+ VEVars.RowHeights[i] := -1;
+ end;
+ end;
+}
+end;
+
+procedure TEditForm.chkCollapseVariablesClick(Sender: TObject);
+var
+ i, vari: integer;
+begin
+ for i := 1 to vleVariables.RowCount - 1 do
+ begin
+ if chkCollapseVariables.Checked then
+ vleVariables.RowHeights[i] := vleVariables.DefaultRowHeight
+ else
+ begin
+ vari := GetVariationIndexFromVariableNameIndex(i-1);
+ if ( (vari = -1) or
+ ((Assigned(cp)) and (cp.xform[SelectedTriangle].GetVariation(vari) = 0)) ) then
+ vleVariables.RowHeights[i] := -1
+ else
+ vleVariables.RowHeights[i] := vleVariables.DefaultRowHeight;
+ end;
+ end;
+end;
+
+procedure TEditForm.shColorMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ DragPanelMouseDown(pnlXFormColor, Button, Shift, X, Y);
+end;
+
+procedure TEditForm.shColorMouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+begin
+ DragPanelMouseMove(pnlXFormColor, Shift, X, Y);
+end;
+
+procedure TEditForm.shColorMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ DragPanelMouseUp(pnlXFormColor, Button, Shift, X, Y);
+end;
+
+procedure TEditForm.bClearClick(Sender: TObject);
+var
+ i:integer;
+ changed:boolean;
+begin
+ changed := false;
+ for i := 0 to VEVars.RowCount - 1 do begin
+ if (cp.xform[SelectedTriangle].GetVariation(i) <> 0) then changed := true;
+ cp.xform[SelectedTriangle].SetVariation(i, 0);
+ end;
+
+ if changed then MainForm.UpdateUndo;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.ResetChaosClick(Sender: TObject);
+var i, j: integer;
+ noEdit: boolean;
+begin
+ noEdit := true;
+ for i := 0 to Transforms-1 do
+ begin
+ if not noEdit then break;
+ for j := 0 to Transforms-1 do
+ if cp.xform[i].modWeights[j] <> 1 then
+ begin
+ noEdit := false;
+ break;
+ end;
+ end;
+ if noEdit then exit;
+
+ MainForm.UpdateUndo;
+ for i := 0 to NXforms-1 do
+ for j := 0 to NXforms-1 do
+ cp.xform[i].modWeights[j] := 1;
+ UpdateFlame(True);
+ if ChaosForm.Visible then // AV
+ ChaosForm.ChaosMatrix.Invalidate;
+end;
+
+procedure TEditForm.mnuResetTrgFlipClick(Sender: TObject);
+var
+ x0, y0, x1, y1, detT: double;
+begin
+ with cp.xform[SelectedTriangle] do
+ if postXswap then
+ detT := det(p[0,0], p[1,0], p[0,1], p[1,1])
+ else detT := det(c[0,0], c[1,0], c[0,1], c[1,1]);
+ if (detT >= 0) then exit;
+
+ with MainTriangles[SelectedTriangle] do
+ begin
+ x0 := x[1];
+ y0 := y[1];
+ x1 := x[0] + x[2] - x0;
+ y1 := y[0] + y[2] - y0;
+ end;
+ MainForm.UpdateUndo;
+ MainTriangles[SelectedTriangle] :=
+ FlipTriangleLine(MainTriangles[SelectedTriangle], x0, y0, x1, y1);
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btResetparamsClick(Sender: TObject);
+var
+ i: integer;
+begin
+ for i:= 0 to GetNrVariableNames - 1 do begin
+ cp.xform[SelectedTriangle].ResetVariable(GetVariableNameAt(i));
+ end;
+
+ MainForm.UpdateUndo;
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.btSwapCoefsClick(Sender: TObject);
+var
+ i, j: byte;
+ t: double;
+begin
+ MainForm.UpdateUndo;
+ with cp.xform[SelectedTriangle] do
+ for i := 0 to 2 do
+ for j := 0 to 1 do
+ begin
+ t := c[i,j];
+ c[i,j] := p[i,j];
+ p[i,j] := t;
+ end;
+ if not tbPostXSwap.Down then
+ cp.GetTriangle(MainTriangles[SelectedTriangle], SelectedTriangle)
+ else cp.GetPostTriangle(MainTriangles[SelectedTriangle], SelectedTriangle);
+ UpdateFlame(true);
+end;
+
+procedure TEditForm.ColorBarMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+var
+ dx: double; //Extended;
+begin
+ // dx := Round(100 * X / ColorBar.Width) / 100; // AV: it's not correct
+ dx := X / (ColorBarPicture.Width - 1); // AV: this gives the best results
+ txtXFormColor.Text := FloatToStrF(dx, ffFixed, 4, 3); // AV: default presision
+ txtXFormColorExit(nil);
+end;
+
+{
+procedure TEditForm.btnLoadVVARClick(Sender: TObject);
+var
+ fn:string;
+ i:integer;
+begin
+ if OpenSaveFileDialog(EditForm, '.dll', 'Dynamic Link Libraries (*.dll)|*.dll', '.\Plugins', 'LoadPlugin...', fn, true, false, false, true) then begin
+ //if (fn <> '') then begin
+ LoadPlugin(fn);
+
+ VEVars.Strings.Clear;
+ vleVariables.Strings.Clear;
+
+ for i:= 0 to NRVAR - 1 do begin
+ VEVars.InsertRow(Varnames(i), '0', True);
+ end;
+ for i:= 0 to GetNrVariableNames - 1 do begin
+ vleVariables.InsertRow(GetVariableNameAt(i), '0', True);
+ end;
+
+ for i := 0 to Transforms - 1 do begin
+ cp.xform[i].InvokeAddRegVariations;
+ end;
+ end;
+ end;
+end;
+}
+
+procedure TEditForm.txtNameKeyPress(Sender: TObject; var Key: Char);
+begin
+ if SelectedTriangle >= Transforms then key := #0;
+ if key = #13 then
+ begin
+ { Stop the beep }
+ Key := #0;
+ txtNameExit(sender);
+ end;
+
+end;
+
+procedure TEditForm.txtNameExit(Sender: TObject);
+var
+ n:integer;
+ oldval,newval:string;
+begin
+
+ oldval := cp.xform[SelectedTriangle].TransformName;
+ newval := txtName.Text;
+
+ if (oldval <> newval) then begin
+ MainForm.UpdateUndo;
+ cp.xform[SelectedTriangle].TransformName := newval;
+ n := SelectedTriangle + 1;
+ if (cp.xform[SelectedTriangle].TransformName <> '') then
+ cbTransforms.Items[SelectedTriangle] := IntToStr(n) + ' - ' + cp.xform[SelectedTriangle].TransformName
+ else
+ cbTransforms.Items[SelectedTriangle] := IntToStr(n);
+
+ //workaround..
+ if (SelectedTriangle >= Transforms) then
+ cbTransforms.Items[SelectedTriangle] := TextByKey('editor-common-finalxformlistitem');
+ cbTransforms.ItemIndex := SelectedTriangle;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.TriangleOperationsClick(Sender: TObject);
+begin
+ TMenuItem(Sender).Checked := True;
+end;
+
+procedure TEditForm.TrianglePanelResize(Sender: TObject);
+begin
+ GroupBox5.Left := (TrianglePanel.CLientWidth - GroupBox5.Width) div 2;
+ GroupBox6.Left := (TrianglePanel.CLientWidth - GroupBox6.Width) div 2;
+ GroupBox3.Left := (TrianglePanel.CLientWidth - GroupBox3.Width) div 2;
+ GroupBox10.Left := (TrianglePanel.CLientWidth - GroupBox10.Width) div 2;
+ TriangleToolBar.Left := (TrianglePanel.CLientWidth - TriangleToolBar.Width) div 2;
+end;
+
+procedure TEditForm.ControlPanelResize(Sender: TObject);
+begin
+ cbTransforms.ItemHeight := Panel1.Height - 6;
+ cbTransforms.Height := Panel1.Height;
+ PageControl.Top := Panel1.Height + Panel2.Height + pnlWeight.Height + 12;
+ PageControl.Height := ControlPanel.Height - PageControl.Top;
+end;
+
+procedure TEditForm.Copytransform1Click(Sender: TObject);
+var txt: string;
+begin
+ MemCp.Clear;
+ MemCp.Name := 'Memorized XForm Parameters';
+ MemCp.xform[0].Assign(cp.xform[SelectedTriangle]);
+ txt := Trim(MainForm.RetrieveXML(MemCp));
+ Clipboard.SetTextBuf(PChar(txt));
+ Pastetransform1.Enabled := True;
+ MainForm.mnuPaste.Enabled := False;
+end;
+
+procedure TEditForm.Pastetransform1Click(Sender: TObject);
+var
+ TempTriangles: TTriangles;
+ i: integer;
+begin
+ if (MemCp.NumXForms > 0) and (Transforms < NXFORMS) then
+ begin
+ MainForm.UpdateUndo;
+ MemCp.TrianglesFromCP(TempTriangles);
+ for i := 0 to MemCp.NumXForms - 1 do
+ begin
+ MainTriangles[Transforms+1] := MainTriangles[Transforms];
+ cp.xform[Transforms+1].Assign(cp.xform[Transforms]);
+ MainTriangles[Transforms] := TempTriangles[i];
+ cp.xform[Transforms].Assign(MemCp.xform[i]);
+ SelectedTriangle := Transforms;
+ Inc(Transforms);
+ end;
+ UpdateXformsList;
+ UpdateFlame(True);
+ end;
+end;
+
+procedure TEditForm.ScrollBox2Resize(Sender: TObject);
+begin // AV: done
+ GroupBox1.Left := (ScrollBox2.ClientWidth - GroupBox1.Width) div 2;
+ GroupBox2.Left := (ScrollBox2.ClientWidth - GroupBox2.Width) div 2;
+end;
+
+procedure TEditForm.ScrollBox1Resize(Sender: TObject);
+var sbw: integer; // AV: for speed
+begin
+ sbw := (ScrollBox1.ClientWidth - GroupBox9.Width) div 2;
+ GroupBox7.Left := sbw;
+ GroupBox8.Left := sbw;
+ GroupBox9.Left := sbw;
+ chkAutoZscale.Left := sbw;
+ btSwapCoefs.Left := sbw;
+ btConjugate.Left := sbw + 116;
+end;
+
+procedure TEditForm.FlipPointKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key <> #13 then exit;
+ key := #0;
+ FlipPointValidate(Sender);
+end;
+
+procedure TEditForm.FlipPointValidate(Sender: TObject);
+var
+ v: double;
+begin
+ try
+ v := Round6(StrToFloat(TEdit(Sender).Text));
+ if Sender = editFlipX then
+ FlipPoint.x := v
+ else
+ FlipPoint.y := v;
+ except // restore old value
+ if Sender = editFlipX then v := FlipPoint.x
+ else v := FlipPoint.y;
+ end;
+ TEdit(Sender).Text := Format('%.6g',[v]);
+ TriangleView.Invalidate;
+ CalcFlip;
+end;
+
+procedure TEditForm.FormActivate(Sender: TObject);
+begin
+ if EnableEditorPreview and PrevPnl.Visible then
+ begin
+ Splitter2.Height := 1;
+ Splitter2.Visible := false;
+ PrevPnl.Height := 1;
+ PrevPnl.Visible := false;
+ end
+ else if (not EnableEditorPreview) and (not PrevPnl.Visible) then
+ begin
+ Splitter2.Height := 8;
+ Splitter2.Visible := true;
+ PrevPnl.Height := 177;
+ PrevPnl.Visible := true;
+ end;
+ // AV: check if these parameters were changed in options
+ tbExtendedEdit.Down := ExtEditEnabled;
+ tbAxisLock.Down := TransformAxisLock;
+ mnuChaosRebuild.Checked := RebuildXaosLinks;
+ chkCollapseVariationsClick(nil);
+end;
+
+(* // AV: exactly the same as chkCollapseVariationsClick
+procedure TEditForm.txtSearchBoxChange(Sender: TObject);
+var
+ i: integer;
+ s: string;
+begin
+ s := Trim(txtSearchBox.Text);
+ for i:= 1 to VEVars.RowCount - 1 do begin
+ if (Length(s) = 0) then begin
+ if ((Assigned(cp)) and (VEVars.Cells[1,i]='0')) then
+ if chkCollapseVariations.Checked then VEVars.RowHeights[i] := -1
+ else VEVars.RowHeights[i] := VEVars.DefaultRowHeight
+ else VEVars.RowHeights[i] := VEVars.DefaultRowHeight;
+ end else begin
+ if (Length(s) > Length(VEVars.Cells[0, i])) then
+ VEVars.RowHeights[i] := -1
+ else if Pos(s, VEVars.Cells[0, i]) > 0 then begin
+ if ((Assigned(cp)) and (VEVars.Cells[1,i]='0')) then
+ if chkCollapseVariations.Checked then VEVars.RowHeights[i] := -1
+ else VEVars.RowHeights[i] := VEVars.DefaultRowHeight
+ else VEVars.RowHeights[i] := VEVars.DefaultRowHeight;
+ end else VEVars.RowHeights[i] := -1;
+ end;
+ end;
+end;
+*)
+
+procedure TEditForm.txtSearchBoxKeyPress(Sender: TObject; var Key: Char);
+begin
+ // AV: exactly the same as chkCollapseVariationsClick
+ // txtSearchBoxChange(Sender);
+ chkCollapseVariationsClick(Sender); // AV
+end;
+
+procedure TEditForm.btnResetSearchClick(Sender: TObject);
+begin
+ txtSearchBox.Text := '';
+end;
+
+procedure TEditForm.btnShowLineClick(Sender: TObject);
+begin
+ ShowFlipLine := not ShowFlipLine;
+ if ShowFlipLine then btnShowLine.Caption := TextByKey('editor-tab-triangle-hideline')
+ else btnShowLine.Caption := TextByKey('editor-tab-triangle-showline');
+ TriangleView.Invalidate;
+end;
+
+procedure TEditForm.btnVarOrderClick(Sender: TObject);
+var
+ i: integer;
+begin
+ if (VarOrder.ShowModal = mrOK) then
+ if VarOrder.Changed then
+ begin
+ MainForm.UpdateUndo;
+ for i := 0 to NrVar - 1 do
+ cp.xform[SelectedTriangle].ifs[i] := VarOrder.VarListView.Items[i].Caption;
+
+ UpdateVariationList;
+ chkCollapseVariationsClick(Sender);
+ UpdateFlame(true);
+ end;
+end;
+
+procedure TEditForm.KeyInput(str:string);
+var
+ Inp: TInput;
+ mapCh: UINT;
+ sym: byte;
+ i: Integer;
+begin
+ Application.ProcessMessages;
+ for i := 1 to Length(Str) do
+ begin
+ {
+ Inp.Itype := INPUT_KEYBOARD;
+ Inp.ki.wVk := Ord(Str[i]);
+ Inp.ki.dwFlags := 0;
+ SendInput(1, Inp, SizeOf(Inp));
+
+ Inp.Itype := INPUT_KEYBOARD;
+ Inp.ki.wVk := Ord(Str[i]);
+ Inp.ki.dwFlags := KEYEVENTF_KEYUP;
+ SendInput(1, Inp, SizeOf(Inp));
+ }
+ // AV: hack - to "press" Enter when a numeric field is active
+ if Str[i] = #13 then
+ sym := VK_RETURN // for faster work
+ else
+ sym := VkKeyScan(Str[i]);
+ mapCh := MapVirtualKey(LOBYTE(sym), 0);
+ Inp.Itype := INPUT_KEYBOARD;
+ Inp.ki.dwFlags := KEYEVENTF_SCANCODE;
+ Inp.ki.wScan := mapCh;
+ SendInput(1, Inp, SizeOf(Inp));
+
+ Inp.Itype := INPUT_KEYBOARD;
+ Inp.ki.dwFlags := KEYEVENTF_KEYUP;
+ Inp.ki.wScan := mapCh;
+ SendInput(1, Inp, SizeOf(Inp));
+ end;
+end;
+
+end.
+
diff --git a/Forms/FormExport.dfm b/Forms/FormExport.dfm
new file mode 100644
index 0000000..ced4273
--- /dev/null
+++ b/Forms/FormExport.dfm
@@ -0,0 +1,713 @@
+object ExportDialog: TExportDialog
+ Left = 313
+ Top = 276
+ BorderStyle = bsDialog
+ Caption = 'Export Flame'
+ ClientHeight = 403
+ ClientWidth = 496
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnCreate = FormCreate
+ OnShow = FormShow
+ DesignSize = (
+ 496
+ 403)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object btnOK: TButton
+ Left = 398
+ Top = 182
+ Width = 89
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ OnClick = btnOKClick
+ end
+ object btnCancel: TButton
+ Left = 398
+ Top = 210
+ Width = 89
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ object GroupBox1: TGroupBox
+ Left = 8
+ Top = 5
+ Width = 481
+ Height = 57
+ Anchors = [akLeft, akTop, akRight]
+ Caption = ' Destination '
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ DesignSize = (
+ 481
+ 57)
+ object btnBrowse: TSpeedButton
+ Left = 448
+ Top = 19
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = []
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnBrowseClick
+ end
+ object Label10: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'File name'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ end
+ object txtFilename: TEdit
+ Left = 112
+ Top = 20
+ Width = 337
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ end
+ end
+ object GroupBox3: TGroupBox
+ Left = 256
+ Top = 66
+ Width = 233
+ Height = 105
+ Anchors = [akTop, akRight]
+ Caption = ' Quality '
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 3
+ DesignSize = (
+ 233
+ 105)
+ object udOversample: TUpDown
+ Left = 212
+ Top = 68
+ Width = 12
+ Height = 21
+ Anchors = [akTop, akRight]
+ Associate = txtOversample
+ Min = 1
+ Max = 4
+ Position = 2
+ TabOrder = 3
+ end
+ object Label4: TPanel
+ Left = 8
+ Top = 20
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Density'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object txtDensity: TEdit
+ Left = 120
+ Top = 20
+ Width = 105
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnChange = txtDensityChange
+ end
+ object Label5: TPanel
+ Left = 8
+ Top = 44
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Filter radius'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object txtFilterRadius: TEdit
+ Left = 120
+ Top = 44
+ Width = 105
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnChange = txtFilterRadiusChange
+ end
+ object Label3: TPanel
+ Left = 8
+ Top = 68
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Oversample'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ end
+ object txtOversample: TEdit
+ Left = 120
+ Top = 68
+ Width = 92
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ReadOnly = True
+ TabOrder = 2
+ Text = '2'
+ OnChange = txtOversampleChange
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 8
+ Top = 66
+ Width = 241
+ Height = 105
+ Anchors = [akLeft, akTop, akRight]
+ Caption = ' Size '
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 4
+ DesignSize = (
+ 241
+ 105)
+ object chkMaintain: TCheckBox
+ Left = 8
+ Top = 76
+ Width = 225
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Maintain aspect ratio'
+ Checked = True
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 0
+ OnClick = chkMaintainClick
+ end
+ object Label1: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Width'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object Label2: TPanel
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Height'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object cbHeight: TComboBox
+ Left = 112
+ Top = 44
+ Width = 121
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ OnChange = txtHeightChange
+ Items.Strings = (
+ '200'
+ '240'
+ '480'
+ '600'
+ '768'
+ '1024'
+ '1200'
+ '2048'
+ '2400')
+ end
+ object cbWidth: TComboBox
+ Left = 112
+ Top = 20
+ Width = 121
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnChange = txtWidthChange
+ Items.Strings = (
+ '320'
+ '640'
+ '800'
+ '1024'
+ '1280'
+ '1600'
+ '1920'
+ '2048'
+ '2560'
+ '3200')
+ end
+ end
+ object GroupBox4: TGroupBox
+ Left = 8
+ Top = 176
+ Width = 377
+ Height = 113
+ Anchors = [akLeft, akTop, akRight]
+ Caption = ' Parameters '
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 5
+ DesignSize = (
+ 377
+ 113)
+ object udStrips: TUpDown
+ Left = 172
+ Top = 52
+ Width = 12
+ Height = 21
+ Associate = txtStrips
+ Min = 1
+ Max = 512
+ Position = 1
+ TabOrder = 2
+ end
+ object Label7: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Buffer depth'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 7
+ end
+ object Label8: TPanel
+ Left = 8
+ Top = 52
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Strips'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 8
+ end
+ object Label9: TPanel
+ Left = 192
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'DE Radius'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ end
+ object txtEstimator: TEdit
+ Left = 296
+ Top = 20
+ Width = 73
+ Height = 21
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '5'
+ OnChange = txtEstimatorChange
+ end
+ object txtStrips: TEdit
+ Left = 112
+ Top = 52
+ Width = 60
+ Height = 21
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '1'
+ end
+ object cmbDepth: TComboBox
+ Left = 112
+ Top = 20
+ Width = 73
+ Height = 21
+ Style = csDropDownList
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ItemIndex = 2
+ ParentFont = False
+ TabOrder = 0
+ Text = '32-bit float'
+ Items.Strings = (
+ '16-bit'
+ '32-bit'
+ '32-bit float'
+ '64-bit')
+ end
+ object Label14: TPanel
+ Left = 8
+ Top = 84
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Gamma threshold'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 10
+ end
+ object Label12: TPanel
+ Left = 192
+ Top = 52
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'DE Curve'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 11
+ end
+ object Label11: TPanel
+ Left = 192
+ Top = 84
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'DE Minimum'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 12
+ end
+ object txtGammaTreshold: TEdit
+ Left = 112
+ Top = 84
+ Width = 73
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 6
+ Text = '0.01'
+ OnChange = txtGammaTresholdChange
+ end
+ object txtEstimatorCurve: TEdit
+ Left = 296
+ Top = 52
+ Width = 73
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ Text = '0.6'
+ OnChange = txtEstimatorCurveChange
+ end
+ object txtEstimatorMin: TEdit
+ Left = 296
+ Top = 84
+ Width = 73
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 4
+ Text = '0'
+ OnChange = txtEstimatorMinChange
+ end
+ end
+ object chkRender: TCheckBox
+ Left = 400
+ Top = 246
+ Width = 89
+ Height = 43
+ Anchors = [akTop, akRight]
+ Caption = 'Render'
+ Checked = True
+ State = cbChecked
+ TabOrder = 6
+ end
+ object Panel1: TPanel
+ Left = 8
+ Top = 296
+ Width = 481
+ Height = 105
+ Anchors = [akLeft, akTop, akRight]
+ BevelKind = bkSoft
+ BevelOuter = bvNone
+ Color = clInfoBk
+ TabOrder = 7
+ OnResize = Panel1Resize
+ DesignSize = (
+ 477
+ 101)
+ object Label6: TLabel
+ Left = 8
+ Top = 2
+ Width = 453
+ Height = 24
+ Alignment = taCenter
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = 'WARNING!'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clInfoText
+ Font.Height = -19
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Label15: TLabel
+ Left = 8
+ Top = 25
+ Width = 465
+ Height = 54
+ Alignment = taCenter
+ Anchors = [akLeft, akRight]
+ AutoSize = False
+ Caption =
+ 'Fractals created with this version of Apophysis are not supporte' +
+ 'd by the external renderer! To render 2D-only fractals, download' +
+ ' the latest version of FLAM3 from'
+ Color = clInfoBk
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clInfoText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentColor = False
+ ParentFont = False
+ WordWrap = True
+ end
+ object lblFlam3Link: TLabel
+ Left = 180
+ Top = 80
+ Width = 111
+ Height = 13
+ Cursor = crHandPoint
+ Hint = 'https://code.google.com/archive/p/flam3/downloads'
+ Caption = 'http://www.flam3.com/'
+ Color = clBlue
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentColor = False
+ ParentFont = False
+ OnClick = lblFlam3LinkClick
+ end
+ end
+ object SaveDialog: TSaveDialog
+ DefaultExt = 'jpg'
+ Filter =
+ 'JPEG Image (*.jpg)|*.jpg|PPM Image (*.ppm)|*.ppm|PNG Images (*.p' +
+ 'ng)|*.png'
+ Left = 464
+ Top = 264
+ end
+end
diff --git a/Forms/FormExport.pas b/Forms/FormExport.pas
new file mode 100644
index 0000000..4b3d023
--- /dev/null
+++ b/Forms/FormExport.pas
@@ -0,0 +1,302 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit FormExport;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, Buttons, ComCtrls, ExtCtrls, Translation;
+
+type
+ TExportDialog = class(TForm)
+ btnOK: TButton;
+ btnCancel: TButton;
+ GroupBox1: TGroupBox;
+ btnBrowse: TSpeedButton;
+ txtFilename: TEdit;
+ SaveDialog: TSaveDialog;
+ GroupBox3: TGroupBox;
+ txtOversample: TEdit;
+ txtFilterRadius: TEdit;
+ txtDensity: TEdit;
+ udOversample: TUpDown;
+ GroupBox2: TGroupBox;
+ chkMaintain: TCheckBox;
+ cbWidth: TComboBox;
+ cbHeight: TComboBox;
+ GroupBox4: TGroupBox;
+ cmbDepth: TComboBox;
+ chkRender: TCheckBox;
+ txtStrips: TEdit;
+ udStrips: TUpDown;
+ txtEstimator: TEdit;
+ txtEstimatorMin: TEdit;
+ txtEstimatorCurve: TEdit;
+ txtGammaTreshold: TEdit;
+ Panel1: TPanel;
+ Label6: TLabel;
+ Label15: TLabel;
+ Label4: TPanel;
+ Label5: TPanel;
+ Label3: TPanel;
+ Label1: TPanel;
+ Label2: TPanel;
+ Label7: TPanel;
+ Label8: TPanel;
+ Label9: TPanel;
+ Label14: TPanel;
+ Label12: TPanel;
+ Label11: TPanel;
+ Label10: TPanel;
+ lblFlam3Link: TLabel;
+ procedure Panel1Resize(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure btnBrowseClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure btnOKClick(Sender: TObject);
+ procedure txtWidthChange(Sender: TObject);
+ procedure chkMaintainClick(Sender: TObject);
+ procedure txtHeightChange(Sender: TObject);
+ procedure txtDensityChange(Sender: TObject);
+ procedure txtFilterRadiusChange(Sender: TObject);
+ procedure txtOversampleChange(Sender: TObject);
+ procedure txtEstimatorChange(Sender: TObject);
+ procedure txtEstimatorMinChange(Sender: TObject);
+ procedure txtEstimatorCurveChange(Sender: TObject);
+ procedure txtGammaTresholdChange(Sender: TObject);
+ procedure lblFlam3LinkClick(Sender: TObject);
+ private
+ FloatFormatSettings: TFormatSettings;
+ public
+ Filename: string;
+ ImageWidth, ImageHeight, Oversample, Batches, Strips: Integer;
+ Sample_Density, Filter_Radius: double;
+ Estimator, EstimatorMin, EstimatorCurve: double;
+ GammaTreshold: double;
+ Jitters: integer;
+ end;
+
+var
+ ExportDialog: TExportDialog;
+ Ratio: double;
+
+implementation
+uses Global, Main, ShellAPI;
+
+{$R *.DFM}
+
+procedure TExportDialog.btnBrowseClick(Sender: TObject);
+begin
+ SaveDialog.InitialDir := ExtractFileDir(txtFilename.text);
+ SaveDialog.Filename := txtFilename.Text;
+ case ExportFileFormat of
+ 0: SaveDialog.DefaultExt := 'jpg';
+ 1: SaveDialog.DefaultExt := 'ppm';
+ end;
+ SaveDialog.filterIndex := ExportFileFormat;
+ SaveDialog.Filter := Format('Portable Pixmap (*.ppm)|*.ppm|%s|*.jpg;*.jpeg|%s|*.png|%s|*.*',
+ [TextByKey('common-filter-jpeg'), TextByKey('common-filter-png'),
+ TextByKey('common-filter-allfiles')]);
+ if SaveDialog.Execute then
+ begin
+ case SaveDialog.FilterIndex of
+ 1: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.jpg');
+ 2: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.ppm');
+ 3: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.png');
+ end;
+ ExportFileFormat := SaveDialog.FilterIndex;
+ renderPath := ExtractFilePath(SaveDialog.Filename);
+ end;
+
+end;
+
+procedure TExportDialog.FormShow(Sender: TObject);
+begin
+ txtFilename.Text := Filename;
+ cbWidth.Text := IntToStr(MainCp.Width);
+ cbHeight.Text := IntToStr(MainCp.Height);
+ ImageWidth := MainCp.Width;
+ ImageHeight := MainCp.Height;
+ txtDensity.text := FloatToStr(Sample_density);
+ txtFilterRadius.text := FloatToStr(Filter_Radius);
+ txtOversample.text := IntToSTr(Oversample);
+ udOversample.Position := Oversample;
+ Ratio := ImageWidth / ImageHeight;
+ Batches := 1;
+ Estimator := 9.0;
+ EstimatorMin := 0.0;
+ EstimatorCurve := 0.4;
+ Jitters := 1;
+ GammaTreshold := MainCP.gamma_threshold; //0.01;
+ GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FloatFormatSettings);
+ txtEstimator.Text := FloatToStr(Estimator, FloatFormatSettings);
+ txtEstimatorMin.Text := FloatToStr(EstimatorMin, FloatFormatSettings);
+ txtEstimatorCurve.Text := FloatToStr(EstimatorCurve, FloatFormatSettings);
+ txtGammaTreshold.Text := FloatToStr(GammaTreshold, FloatFormatSettings);
+end;
+
+procedure TExportDialog.btnOKClick(Sender: TObject);
+begin
+ Filename := txtFilename.text;
+ ImageWidth := StrToInt(cbWidth.Text);
+ ImageHeight := StrToInt(cbHeight.Text);
+end;
+
+procedure TExportDialog.txtWidthChange(Sender: TObject);
+begin
+ try
+ ImageWidth := StrToInt(cbWidth.Text);
+ if chkMaintain.checked and cbWidth.Focused then
+ begin
+ ImageHeight := Round(ImageWidth / ratio);
+ cbHeight.Text := IntToStr(ImageHeight)
+ end;
+ except
+ end;
+end;
+
+procedure TExportDialog.chkMaintainClick(Sender: TObject);
+begin
+ Ratio := ImageWidth / ImageHeight;
+end;
+
+procedure TExportDialog.txtHeightChange(Sender: TObject);
+begin
+ try
+ ImageHeight := StrToInt(cbHeight.Text);
+ if chkMaintain.checked and cbHeight.Focused then
+ begin
+ ImageWidth := Round(ImageHeight * ratio);
+ cbWidth.Text := IntToStr(ImageWidth)
+ end;
+ except
+ end;
+end;
+
+procedure TExportDialog.txtDensityChange(Sender: TObject);
+begin
+ try
+ Sample_Density := StrToFloat(txtDensity.Text);
+ except
+ end;
+end;
+
+procedure TExportDialog.txtFilterRadiusChange(Sender: TObject);
+begin
+ try
+ Filter_Radius := StrToFloat(txtFilterRadius.Text);
+ except
+ end;
+end;
+
+procedure TExportDialog.txtOversampleChange(Sender: TObject);
+begin
+ if StrToInt(txtOversample.Text) > udOversample.Max then
+ txtOversample.Text := IntToStr(udOversample.Max);
+ if StrToInt(txtOversample.Text) < udOversample.Min then
+ txtOversample.Text := IntToStr(udOversample.Min);
+ try
+ Oversample := StrToInt(txtOversample.Text);
+ except
+ end;
+end;
+
+procedure TExportDialog.txtEstimatorChange(Sender: TObject);
+begin
+ Estimator := 0;
+ try
+ Estimator := StrToFloat(txtEstimator.Text, FloatFormatSettings);
+ except
+ end;
+end;
+
+procedure TExportDialog.txtEstimatorMinChange(Sender: TObject);
+begin
+ EstimatorMin := 0;
+ try
+ EstimatorMin := StrToFloat(txtEstimatorMin.Text, FloatFormatSettings);
+ except
+ end;
+end;
+
+procedure TExportDialog.txtEstimatorCurveChange(Sender: TObject);
+begin
+ EstimatorCurve := 0;
+ try
+ EstimatorCurve := StrToFloat(txtEstimatorCurve.Text, FloatFormatSettings);
+ except
+ end;
+end;
+
+procedure TExportDialog.txtGammaTresholdChange(Sender: TObject);
+begin
+ //GammaTreshold := 0.01;
+ try
+ GammaTreshold := StrToFloat(txtGammaTreshold.Text, FloatFormatSettings);
+ except
+ end;
+end;
+
+procedure TExportDialog.lblFlam3LinkClick(Sender: TObject);
+begin
+ ShellExecute(ValidParentForm(Self).Handle, 'open', PChar(TLabel(Sender).Hint),
+ nil, nil, SW_SHOWNORMAL);
+end;
+
+procedure TExportDialog.FormCreate(Sender: TObject);
+begin
+ btnOK.Caption := TextByKey('common-ok');
+ btnCancel.Caption := TextByKey('common-cancel');
+ Label1.Caption := TextByKey('common-width');
+ Label2.Caption := TextByKey('common-height');
+ GroupBox2.Caption := TextByKey('common-size');
+ chkMaintain.Caption := TextByKey('common-keepaspect');
+ GroupBox1.Caption := TextByKey('common-destination');
+ Label10.Caption := TextByKey('common-filename');
+ btnBrowse.Hint := TextByKey('common-browse');
+ GroupBox3.Caption := TextByKey('common-quality');
+ Label5.Caption := TextByKey('common-filterradius');
+ Label4.Caption := TextByKey('common-density');
+ Label3.Caption := TextByKey('common-oversample');
+ Label14.Caption := TextByKey('common-gammathreshold');
+ self.Caption := TextByKey('main-menu-file-exportflame');
+ GroupBox4.Caption := TextByKey('export-paramoptions-title');
+ Label7.Caption := TextByKey('export-paramoptions-bufferdepth');
+ Label8.Caption := TextByKey('export-paramoptions-strips');
+ Label9.Caption := TextByKey('export-paramoptions-estimatorradius');
+ Label12.Caption := TextByKey('export-paramoptions-estimatorcurve');
+ Label11.Caption := TextByKey('export-paramoptions-estimatormin');
+ chkRender.Caption := TextByKey('export-paramoptions-dorender');
+ Label6.Caption := TextByKey('export-paramoptions-warningtitle');
+ Label15.Caption := TextByKey('export-paramoptions-warningtext');
+end;
+
+procedure TExportDialog.Panel1Resize(Sender: TObject);
+begin
+ Label15.Top := (Panel1.Height - 30) div 2 - Label15.Height div 2 + 25;
+end;
+
+end.
+
diff --git a/Forms/FormExportC.dfm b/Forms/FormExportC.dfm
new file mode 100644
index 0000000..929f1a4
--- /dev/null
+++ b/Forms/FormExportC.dfm
@@ -0,0 +1,553 @@
+object ExportCDialog: TExportCDialog
+ Left = 313
+ Top = 276
+ BorderStyle = bsDialog
+ Caption = 'Export Flame'
+ ClientHeight = 134
+ ClientWidth = 496
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnCreate = FormCreate
+ OnShow = FormShow
+ DesignSize = (
+ 496
+ 134)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object btnOK: TButton
+ Left = 254
+ Top = 98
+ Width = 115
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 0
+ OnClick = btnOKClick
+ end
+ object btnCancel: TButton
+ Left = 376
+ Top = 98
+ Width = 111
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ object GroupBox1: TGroupBox
+ Left = 8
+ Top = 237
+ Width = 481
+ Height = 57
+ Anchors = [akLeft, akTop, akRight]
+ Caption = ' Destination '
+ TabOrder = 2
+ Visible = False
+ DesignSize = (
+ 481
+ 57)
+ object btnBrowse: TSpeedButton
+ Left = 448
+ Top = 19
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnBrowseClick
+ end
+ object Label10: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'File name'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ end
+ object txtFilename: TEdit
+ Left = 112
+ Top = 20
+ Width = 337
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ end
+ end
+ object GroupBox3: TGroupBox
+ Left = 256
+ Top = 10
+ Width = 233
+ Height = 79
+ Anchors = [akTop, akRight]
+ Caption = ' Quality '
+ TabOrder = 3
+ DesignSize = (
+ 233
+ 79)
+ object udOversample: TUpDown
+ Left = 212
+ Top = 44
+ Width = 12
+ Height = 21
+ Anchors = [akTop, akRight]
+ Associate = txtOversample
+ Min = 1
+ Max = 4
+ Position = 2
+ TabOrder = 2
+ end
+ object Label5: TPanel
+ Left = 8
+ Top = 20
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Filter radius'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object txtFilterRadius: TEdit
+ Left = 120
+ Top = 20
+ Width = 105
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ OnChange = txtFilterRadiusChange
+ end
+ object Label3: TPanel
+ Left = 8
+ Top = 44
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Oversample'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object txtOversample: TEdit
+ Left = 120
+ Top = 44
+ Width = 92
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ ReadOnly = True
+ TabOrder = 1
+ Text = '2'
+ OnChange = txtOversampleChange
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 8
+ Top = 10
+ Width = 241
+ Height = 111
+ Anchors = [akLeft, akTop, akRight]
+ Caption = ' Size '
+ TabOrder = 4
+ DesignSize = (
+ 241
+ 111)
+ object Label13: TLabel
+ Left = 184
+ Top = 36
+ Width = 26
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'pixels'
+ Visible = False
+ end
+ object Label16: TLabel
+ Left = 168
+ Top = 22
+ Width = 15
+ Height = 36
+ Anchors = [akLeft, akTop, akRight]
+ Caption = '}'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -32
+ Font.Name = 'Times New Roman'
+ Font.Style = []
+ ParentFont = False
+ Visible = False
+ end
+ object chkMaintain: TCheckBox
+ Left = 8
+ Top = 76
+ Width = 225
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Maintain aspect ratio'
+ Checked = True
+ State = cbChecked
+ TabOrder = 0
+ OnClick = chkMaintainClick
+ end
+ object Label1: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Width'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object Label2: TPanel
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Height'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object cbHeight: TComboBox
+ Left = 112
+ Top = 44
+ Width = 121
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ ItemHeight = 13
+ TabOrder = 2
+ OnChange = txtHeightChange
+ Items.Strings = (
+ '200'
+ '240'
+ '480'
+ '600'
+ '768'
+ '1024'
+ '1200'
+ '2048'
+ '2400')
+ end
+ object cbWidth: TComboBox
+ Left = 112
+ Top = 20
+ Width = 121
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ ItemHeight = 13
+ TabOrder = 1
+ OnChange = txtWidthChange
+ Items.Strings = (
+ '320'
+ '640'
+ '800'
+ '1024'
+ '1280'
+ '1600'
+ '1920'
+ '2048'
+ '2560'
+ '3200')
+ end
+ end
+ object GroupBox4: TGroupBox
+ Left = 8
+ Top = 392
+ Width = 377
+ Height = 113
+ Anchors = [akLeft, akTop, akRight]
+ Caption = ' Parameters '
+ TabOrder = 5
+ Visible = False
+ DesignSize = (
+ 377
+ 113)
+ object udStrips: TUpDown
+ Left = 172
+ Top = 52
+ Width = 12
+ Height = 21
+ Associate = txtStrips
+ Min = 1
+ Max = 512
+ Position = 1
+ TabOrder = 2
+ end
+ object Label7: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Buffer depth'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 7
+ end
+ object Label8: TPanel
+ Left = 8
+ Top = 52
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Strips'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 8
+ end
+ object Label9: TPanel
+ Left = 8
+ Top = 84
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'DE Radius'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ end
+ object txtEstimator: TEdit
+ Left = 112
+ Top = 84
+ Width = 73
+ Height = 21
+ TabOrder = 3
+ Text = '5'
+ end
+ object txtStrips: TEdit
+ Left = 112
+ Top = 52
+ Width = 60
+ Height = 21
+ TabOrder = 1
+ Text = '1'
+ end
+ object cmbDepth: TComboBox
+ Left = 112
+ Top = 20
+ Width = 73
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 0
+ Items.Strings = (
+ '16-bit'
+ '32-bit'
+ '32-bit float'
+ '64-bit')
+ end
+ object Label14: TPanel
+ Left = 192
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Gamma threshold'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 10
+ end
+ object Label12: TPanel
+ Left = 192
+ Top = 52
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'DE Curve'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 11
+ end
+ object Label11: TPanel
+ Left = 192
+ Top = 84
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'DE Minimum'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 12
+ end
+ object txtGammaTreshold: TEdit
+ Left = 296
+ Top = 20
+ Width = 73
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 6
+ Text = '0.01'
+ OnChange = txtGammaTresholdChange
+ end
+ object txtEstimatorCurve: TEdit
+ Left = 296
+ Top = 52
+ Width = 73
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 5
+ Text = '0.6'
+ end
+ object txtEstimatorMin: TEdit
+ Left = 296
+ Top = 84
+ Width = 73
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 4
+ Text = '0'
+ end
+ end
+ object chkRender: TCheckBox
+ Left = 392
+ Top = 398
+ Width = 89
+ Height = 43
+ Anchors = [akTop, akRight]
+ Caption = 'Render'
+ Checked = True
+ State = cbChecked
+ TabOrder = 6
+ Visible = False
+ end
+ object Panel1: TPanel
+ Left = 8
+ Top = 296
+ Width = 481
+ Height = 89
+ Anchors = [akLeft, akTop, akRight]
+ BevelKind = bkSoft
+ BevelOuter = bvNone
+ Color = clInfoBk
+ TabOrder = 7
+ Visible = False
+ DesignSize = (
+ 477
+ 85)
+ object Label6: TLabel
+ Left = 8
+ Top = 4
+ Width = 453
+ Height = 24
+ Alignment = taCenter
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption = 'WARNING!'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clInfoText
+ Font.Height = -19
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Label15: TLabel
+ Left = 8
+ Top = 25
+ Width = 447
+ Height = 26
+ Alignment = taCenter
+ Anchors = [akLeft, akRight]
+ Caption =
+ 'Fractals created with this version of Apophysis are not supporte' +
+ 'd by the external renderer! To render 2D-only fractals, download' +
+ ' the latest version of FLAM3 from http://www.flam3.com'
+ Color = clInfoBk
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clInfoText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentColor = False
+ ParentFont = False
+ WordWrap = True
+ end
+ end
+ object txtDensity: TEdit
+ Left = 120
+ Top = 212
+ Width = 105
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 8
+ Visible = False
+ OnChange = txtDensityChange
+ end
+ object Label4: TPanel
+ Left = 8
+ Top = 212
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Density'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ Visible = False
+ end
+ object SaveDialog: TSaveDialog
+ DefaultExt = 'jpg'
+ Filter =
+ 'JPEG Image (*.jpg)|*.jpg|PPM Image (*.ppm)|*.ppm|PNG Images (*.p' +
+ 'ng)|*.png'
+ Left = 464
+ Top = 264
+ end
+end
diff --git a/Forms/FormExportC.pas b/Forms/FormExportC.pas
new file mode 100644
index 0000000..7902f18
--- /dev/null
+++ b/Forms/FormExportC.pas
@@ -0,0 +1,257 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit FormExportC;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, Buttons, ComCtrls, ExtCtrls, Translation;
+
+type
+ TExportCDialog = class(TForm)
+ btnOK: TButton;
+ btnCancel: TButton;
+ GroupBox1: TGroupBox;
+ btnBrowse: TSpeedButton;
+ txtFilename: TEdit;
+ SaveDialog: TSaveDialog;
+ GroupBox3: TGroupBox;
+ txtOversample: TEdit;
+ txtFilterRadius: TEdit;
+ udOversample: TUpDown;
+ GroupBox2: TGroupBox;
+ chkMaintain: TCheckBox;
+ cbWidth: TComboBox;
+ cbHeight: TComboBox;
+ GroupBox4: TGroupBox;
+ cmbDepth: TComboBox;
+ chkRender: TCheckBox;
+ txtStrips: TEdit;
+ udStrips: TUpDown;
+ txtEstimator: TEdit;
+ txtEstimatorMin: TEdit;
+ txtEstimatorCurve: TEdit;
+ txtGammaTreshold: TEdit;
+ Panel1: TPanel;
+ Label6: TLabel;
+ Label15: TLabel;
+ Label13: TLabel;
+ Label16: TLabel;
+ Label5: TPanel;
+ Label3: TPanel;
+ Label1: TPanel;
+ Label2: TPanel;
+ Label7: TPanel;
+ Label8: TPanel;
+ Label9: TPanel;
+ Label14: TPanel;
+ Label12: TPanel;
+ Label11: TPanel;
+ Label10: TPanel;
+ txtDensity: TEdit;
+ Label4: TPanel;
+ procedure FormCreate(Sender: TObject);
+ procedure btnBrowseClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure btnOKClick(Sender: TObject);
+ procedure txtWidthChange(Sender: TObject);
+ procedure chkMaintainClick(Sender: TObject);
+ procedure txtHeightChange(Sender: TObject);
+ procedure txtDensityChange(Sender: TObject);
+ procedure txtFilterRadiusChange(Sender: TObject);
+ procedure txtOversampleChange(Sender: TObject);
+ procedure txtGammaTresholdChange(Sender: TObject);
+ private
+ FloatFormatSettings: TFormatSettings;
+ Estimator, EstimatorMin, EstimatorCurve: double;
+ Jitters, Batches, Strips: integer;
+ public
+ Filename: string;
+ ImageWidth, ImageHeight, Oversample: Integer;
+ Sample_Density, Filter_Radius: double;
+ GammaTreshold: double;
+ end;
+
+var
+ ExportCDialog: TExportCDialog;
+ Ratio: double;
+
+implementation
+uses Global, Main, ShellAPI;
+
+{$R *.DFM}
+
+procedure TExportCDialog.btnBrowseClick(Sender: TObject);
+begin
+ SaveDialog.InitialDir := ExtractFileDir(txtFilename.text);
+ SaveDialog.Filename := txtFilename.Text;
+ SaveDialog.DefaultExt := 'png';
+ SaveDialog.filterIndex := ExportFileFormat;
+ SaveDialog.Filter := Format('%s|*.png|%s|*.*',
+ [TextByKey('common-filter-png'),
+ TextByKey('common-filter-allfiles')]);
+ if SaveDialog.Execute then
+ begin
+ ExportFileFormat := SaveDialog.FilterIndex;
+ renderPath := ExtractFilePath(SaveDialog.Filename);
+ end;
+
+end;
+
+procedure TExportCDialog.FormShow(Sender: TObject);
+begin
+ txtFilename.Text := Filename;
+ cbWidth.Text := IntToStr(MainCp.Width);
+ cbHeight.Text := IntToStr(MainCp.Height);
+ ImageWidth := MainCp.Width;
+ ImageHeight := MainCp.Height;
+ txtDensity.text := FloatToStr(Sample_density);
+// if cmbDepth.ItemIndex <> 2 then
+// txtBatches.text := IntToStr(Round(Sample_density / 4));
+ txtFilterRadius.text := FloatToStr(Filter_Radius);
+ txtOversample.text := IntToSTr(Oversample);
+ udOversample.Position := Oversample;
+ Ratio := ImageWidth / ImageHeight;
+ Batches := 1;
+ Estimator := 9.0;
+ EstimatorMin := 0.0;
+ EstimatorCurve := 0.4;
+ Jitters := 1;
+ GammaTreshold := MainCP.gamma_threshold; //0.01;
+ GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FloatFormatSettings);
+ txtEstimator.Text := FloatToStr(Estimator, FloatFormatSettings);
+ txtEstimatorMin.Text := FloatToStr(EstimatorMin, FloatFormatSettings);
+ txtEstimatorCurve.Text := FloatToStr(EstimatorCurve, FloatFormatSettings);
+// txtJitters.Text := IntToStr(Jitters);
+ txtGammaTreshold.Text := FloatToStr(GammaTreshold, FloatFormatSettings);
+end;
+
+procedure TExportCDialog.btnOKClick(Sender: TObject);
+begin
+ Filename := txtFilename.text;
+ ImageWidth := StrToInt(cbWidth.Text);
+ ImageHeight := StrToInt(cbHeight.Text);
+end;
+
+procedure TExportCDialog.txtWidthChange(Sender: TObject);
+begin
+ try
+ ImageWidth := StrToInt(cbWidth.Text);
+ if chkMaintain.checked and cbWidth.Focused then
+ begin
+ ImageHeight := Round(ImageWidth / ratio);
+ cbHeight.Text := IntToStr(ImageHeight)
+ end;
+ except
+ end;
+end;
+
+procedure TExportCDialog.chkMaintainClick(Sender: TObject);
+begin
+ Ratio := ImageWidth / ImageHeight;
+end;
+
+procedure TExportCDialog.txtHeightChange(Sender: TObject);
+begin
+ try
+ ImageHeight := StrToInt(cbHeight.Text);
+ if chkMaintain.checked and cbHeight.Focused then
+ begin
+ ImageWidth := Round(ImageHeight * ratio);
+ cbWidth.Text := IntToStr(ImageWidth)
+ end;
+ except
+ end;
+end;
+
+procedure TExportCDialog.txtDensityChange(Sender: TObject);
+begin
+ try
+ Sample_Density := StrToFloat(txtDensity.Text);
+// if cmbDepth.ItemIndex <> 2 then
+// txtBatches.text := IntToStr(Round(Sample_density / 4));
+ except
+ end;
+end;
+
+procedure TExportCDialog.txtFilterRadiusChange(Sender: TObject);
+begin
+ try
+ Filter_Radius := StrToFloat(txtFilterRadius.Text);
+ except
+ end;
+end;
+
+procedure TExportCDialog.txtOversampleChange(Sender: TObject);
+begin
+ if StrToInt(txtOversample.Text) > udOversample.Max then
+ txtOversample.Text := IntToStr(udOversample.Max);
+ if StrToInt(txtOversample.Text) < udOversample.Min then
+ txtOversample.Text := IntToStr(udOversample.Min);
+ try
+ Oversample := StrToInt(txtOversample.Text);
+ except
+ end;
+end;
+
+procedure TExportCDialog.txtGammaTresholdChange(Sender: TObject);
+begin
+ //GammaTreshold := 0.01;
+ try
+ GammaTreshold := StrToFloat(txtGammaTreshold.Text, FloatFormatSettings);
+ except
+ end;
+end;
+
+procedure TExportCDialog.FormCreate(Sender: TObject);
+begin
+ btnOK.Caption := TextByKey('common-ok');
+ btnCancel.Caption := TextByKey('common-cancel');
+ Label1.Caption := TextByKey('common-width');
+ Label2.Caption := TextByKey('common-height');
+ GroupBox2.Caption := TextByKey('common-size');
+ Label13.Caption := TextByKey('common-pixels');
+ chkMaintain.Caption := TextByKey('common-keepaspect');
+ GroupBox1.Caption := TextByKey('common-destination');
+ Label10.Caption := TextByKey('common-filename');
+ btnBrowse.Hint := TextByKey('common-browse');
+ GroupBox3.Caption := TextByKey('common-quality');
+ Label5.Caption := TextByKey('common-filterradius');
+ Label4.Caption := TextByKey('common-density');
+ Label3.Caption := TextByKey('common-oversample');
+ Label14.Caption := TextByKey('common-gammathreshold');
+ self.Caption := TextByKey('main-menu-file-exportchaotica');
+ GroupBox4.Caption := TextByKey('export-paramoptions-title');
+ Label7.Caption := TextByKey('export-paramoptions-bufferdepth');
+ Label8.Caption := TextByKey('export-paramoptions-strips');
+ Label9.Caption := TextByKey('export-paramoptions-estimatorradius');
+ Label12.Caption := TextByKey('export-paramoptions-estimatorcurve');
+ Label11.Caption := TextByKey('export-paramoptions-estimatormin');
+ chkRender.Caption := TextByKey('export-paramoptions-dorender');
+ Label6.Caption := TextByKey('export-paramoptions-warningtitle');
+ Label15.Caption := TextByKey('export-paramoptions-warningtext');
+end;
+
+end.
+
diff --git a/Forms/FormFavorites.dfm b/Forms/FormFavorites.dfm
new file mode 100644
index 0000000..e4d4475
--- /dev/null
+++ b/Forms/FormFavorites.dfm
@@ -0,0 +1,338 @@
+object FavoritesForm: TFavoritesForm
+ Left = 493
+ Top = 541
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsSingle
+ Caption = 'Favorite Scripts'
+ ClientHeight = 275
+ ClientWidth = 352
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001010200000000000680400001600000028000000100000002000
+ 0000010020000000000000040000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000D3D8ED00EFEFF800577FD1006988DA00EFEFFA00D3D9F600F8F9FE000000
+ 0000000000000000000000000000000000000000000000000000BABADD009497
+ CB005B88CB007682CA004583D2005682DB00607ED700297DE100D1D8F6000000
+ 000000000000000000000000000000000000F9F9FC008080C2003737C600211D
+ B3003C5DB40065A7E0004497DF00419CE50032AFE800597FDF00EFEFFC000000
+ 0000000000000000000000000000E9E9F3006161B300302FD2002D2EE2004E65
+ D700415CB8005CA8E00084F8FF0066F9FF0032A3E8004880DF007295EA000000
+ 00000000000000000000D0D0E5004949AF003232DE001C1BE5000001BF00557D
+ CC006F9BE00061AFE80090FFFF006DFFFF0033AFEB002BA6E700348AE7000000
+ 000000000000B1B1D1003434AD002A2AE6001010E2000000D1000000D6000105
+ CD001F35C30066A9DE0057BAEB0049C2EF0033AFE700697DDC00D7DAF700FDFD
+ FE009898C3002727B6002929F0000C0CE1000000D6000000DD000000E2000208
+ D6006299D8003C5CD2002E73D7003B73E6002B7EEB003698E600DDE1F600B5B5
+ D1002424B8003C3CFE004646FD003D3DF4002828EF000A0AE8000000E8000205
+ E5001021D7000000D9002E70DB002C63DF00180EEC002134C600C9C9DF004C4C
+ A8004242F5006565FF006767FF006868FF006969FF005858FB002C2CF5000000
+ F2000000EF000000EB000612DC00030ED4000501E0002019D9007E7EB5003232
+ B4007171FF008181FF007B7BFF007B7BFF007D7DFF008181FF008080FF005959
+ FC001B1BF5000000EE000000E8000000E1000000D8001313EB004646A9003D3D
+ B7009191FF009898FF009494FF009494FF009494FF009494FF009595FF009C9C
+ FF008E8EFE005151F8001414EC000000E1000000D7000909EB004040A8004C4C
+ A2009F9FFC00B9B9FF00ACACFF00ACACFF00ACACFF00ACACFF00B2B2FF00B0B0
+ FF00B2B2FF00B6B6FF009797FC006565F1004646EC003030E7006969A7009B9B
+ BB006969C500D3D3FF00D7D7FF00D0D0FF00D1D1FF00D7D7FF00CBCBFF00CECE
+ FF00D5D5FF00D2D2FF00D8D8FF00E4E4FF00C9C9FF005353AF00C4C4D500F5F5
+ F7007B7BA6006D6DBD00BFBFF100D6D6FF00D5D5FF00B4B4F8005757D6006A6A
+ DC00C0C0FD00D7D7FF00D5D5FF00B4B4E9005C5CAB009B9BB700FDFDFE000000
+ 0000F7F7F900ACACC00061619B005454A8004F4FAB004C4C9E008B8BAE007C7C
+ A6004A4AA0005151AB005454A4006A6A9E00C1C1D000FEFEFE00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FF80
+ 0000FE000000F8000000F0000000E0000000C000000000000000000000000000
+ 0000000000000000000000000000000000000000000080010000FFFF0000}
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ DesignSize = (
+ 352
+ 275)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object btnMoveUp: TSpeedButton
+ Left = 241
+ Top = 80
+ Width = 99
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = 'Move &Up'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE5D36
+ A23C0FA93F0BB24D17EBCEBEFFFFFFFFFFFFFFFFFFFFFFFFF8E1D2E46D1EE966
+ 0EF16B0EF9822BFFFFFFFFFFFFA64A1EE4A66EE79146D06620B95F33FBF4F1FF
+ FFFFFFFFFFFDF7F3DC793FEA7720F89A40FA9D44F5720FFFFFFFFFFFFFA95233
+ E0B18AFFDA96FEA754BF5212CD8F73FFFFFFFFFFFFDFA282D96B21FD9433FFA9
+ 4CF79B43ED7420FFFFFFFFFFFFDFC0B5A14423F1CEA8FFC882F09546B14510EC
+ D4C7F3E0D6C76128F58C36FF7F14FA8524E06109F7C7A8FFFFFFFFFFFFFFFFFF
+ C0816FB87155FDE2BAFFBE72D97831B55B31BF6B43DF8346FF7A14FF7406E05F
+ 07E59461FFFFFFFFFFFFFFFFFFFFFFFFF8F0EDA74F32D5A992FFE5B5FDB362BC
+ 5417BC5013FD8323FF6D00E86302CE6625FAEBE1FFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFE1C4B89F4020ECD7C5FFDBA5F6A456F48B36FF8117F46902BF4A01EBC1
+ A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC38773B2684FFBF3DFFF
+ C987FFAC5BFD963BC65108D08A64FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFDFAF9A64D32CEA394FFF3D6FFC47BD87D38AF5228FBF5F2FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D2C9A04226EC
+ DCD4F2D0A9A24016E5C8BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFC68D7DB2674AB97559C0826FFFFEFEFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8F6AE
+ 5D3CAB5634FBF7F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnMoveUpClick
+ end
+ object btnMoveDown: TSpeedButton
+ Left = 241
+ Top = 112
+ Width = 99
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = 'Move &Down'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEF9F6EB7F38F07D30FEF6F0FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAA177E9
+ 7522F0822CF39F6AFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFF3D5C3DA6219F8B46FFC9036EB6008F9D1B5FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F6D2672EEB9C5FFF
+ BA73FF760BF56903EC7623FEF5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFD9916DD77538FDD29EFF9B44FF8420FE770EEE6300F0995DFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7C4B1C15117F5CBA3FFC484F9
+ 9138F8872CFF8521FB7209E85F00F7C4A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ F7EEE9BC592DE3AD88FFE3B9FEB267D66317D75F11FE963CFF821BF56C07E873
+ 22FCE9DBFFFFFFFFFFFFFFFFFFFFFFFFC6816AC87B56FEF0D9FFD99EE28B46CE
+ 6C36D57741E6853DFF973BFF7B14ED6604EE965AFFFFFFFFFFFFFFFFFFDDBAAF
+ AA4923F4E6D9FFF7D1F1BF85BF521AF3DBCDF7E6DBCF6225F4A05CFF8E2FFB78
+ 12E65F01F5C5A3FFFFFFFFFFFFA95131E3C6BDFFFFFFFDF2C7C16430D59479FF
+ FFFFFFFFFFE3A688D46E35FDA75DFF8C28F77612E76D17FFFFFFFFFFFFA74F28
+ E1C4B2E3C7AACC8E61B85C36FBF5F2FFFFFFFFFFFFFDF7F4D37742E07529F382
+ 28F47618E46103FFFFFFFFFFFFB0613D9D3B179D3A14A7461CECD3C6FFFFFFFF
+ FFFFFFFFFFFFFFFFF6E3D7CF6220D1570CD65B0BE1772FFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnMoveDownClick
+ end
+ object btnAdd: TSpeedButton
+ Left = 241
+ Top = 16
+ Width = 99
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = '&Add'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ 9CD8F52195E1B7D7F3FFFFFFFFFFFFFFFFFFFFFFFFF0F6FC3A80811A6B3E196B
+ 3725734184B094FFFFFFFFFFFFFFFFFFBBE7F935B9EB209BE366AAE5F3F8FDFF
+ FFFFB7D9F21A7782288C5364BA8D95D2B264BA8D288C5381AE91FFFFFFFFFFFF
+ F7FCFE1BB0EBADE7F83AB1E9248ADC60ABE5249FE11D6F3F62BA8B60BA87FFFF
+ FF60B98767BC8F20703DFFFFFFFFFFFFFFFFFF58C7F283D7F58DDEF672D3F355
+ C3EE75D7F4317B4C9CD4B6FFFFFFFFFFFFFFFFFF95D2B2196B37FFFFFFFFFFFF
+ FFFFFF9BDEF853C6F089DDF576D7F46FD5F463D2F345896290D3B192D6B1FFFF
+ FF65BC8C67BC8F20703DFFFFFFFFFFFFF3FBFE51C2F277D5F589DCF678D8F46E
+ D5F366D3F361B2AE61AB8195D4B4BAE6D06ABB8F2D8F5781AE91FFFFFFDBF2FD
+ 27AEF151C7F4A1E3F78ADDF67FD9F575D7F46CD4F36FD5F357ACB15493734F8E
+ 664A8A6199BDA6FFFFFFB1E6FC0CACF46AD2F6C3EDFAABE7F99AE1F788DCF57E
+ D9F57AD8F57ED9F58BDDF686D9F42CA5E54E9CE0F3F9FDFFFFFF30C7FA41CAF8
+ 41C9F740C8F63FC6F57DD7F79CE1F78BDCF67CD7F54EC4F038BAED39BAEC34B5
+ EA14A8E4A2D9F3FFFFFFF7FDFFD5F4FED2F3FED2F2FDB1B5AA36B3DA9BE1F8A1
+ E3F849C5F282ACB5D2F0FBD2EFFBD2EFFBE3F5FCFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFD8B69AC18E5E7AB9C06CD4F7AAE5F916A6E2B48055CEAC92FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDABA9DC69564D9BC95BBAF8A17BBF370
+ D5F75BA4B7D3B08BB78154CEAC92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ B97940DDC299D5B581C99E5F45B5D12EC3F59E9873CDA575D3B28BA25E2AFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC7D42E2CCA4CEA867CCA46495AB8F51
+ B1C1C6995BC49658DABC97A5612DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ BE8045E4CFA6D1AD6BCFAA68CDA666CBA363C99F60C79B5DDCC099A86530FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC18347E5D1A8D3B26FD2AE6DD0AB6ACE
+ A867CCA565CAA161DDC49DAB6933FFFFFFFFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnAddClick
+ end
+ object btnRemove: TSpeedButton
+ Left = 241
+ Top = 48
+ Width = 99
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = '&Remove'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ 9CD8F52195E1B7D7F3FFFFFFFFFFFFFFFFFFFFFFFFF0F6FC417ACD084ABA0543
+ BC1F59C186A6DDFFFFFFFFFFFFFFFFFFBBE7F935B9EB209BE366AAE5F3F8FDFF
+ FFFFB7D9F21A6DCA2565C92177E60579EA0164DD074FBE86A6DDFFFFFFFFFFFF
+ F7FCFE1BB0EBADE7F83AB1E9248ADC60ABE5249FE10E53BF639DF4187FFF0076
+ F80076EE0368E11E59C0FFFFFFFFFFFFFFFFFF58C7F283D7F58DDEF672D3F355
+ C3EE75D7F40443BCAECDFEFFFFFFFFFFFFFFFFFF187FEF0543BCFFFFFFFFFFFF
+ FFFFFF9BDEF853C6F089DDF576D7F46FD5F463D2F31257C18DB5F64D92FF1177
+ FF2186FF408AEB245CC2FFFFFFFFFFFFF3FBFE51C2F277D5F589DCF678D8F46E
+ D5F366D3F34B9ADE3773D18DB5F7B8D6FE72A8F52F6DCC94AFE2FFFFFFDBF2FD
+ 27AEF151C7F4A1E3F78ADDF67FD9F575D7F46CD4F36FD5F33B91DB0C52C30543
+ BC205AC188A7DEFFFFFFB1E6FC0CACF46AD2F6C3EDFAABE7F99AE1F788DCF57E
+ D9F57AD8F57ED9F58BDDF686D9F42CA5E54E9CE0F3F9FDFFFFFF30C7FA41CAF8
+ 41C9F740C8F63FC6F57DD7F79CE1F78BDCF67CD7F54EC4F038BAED39BAEC34B5
+ EA14A8E4A2D9F3FFFFFFF7FDFFD5F4FED2F3FED2F2FDB1B5AA36B3DA9BE1F8A1
+ E3F849C5F282ACB5D2F0FBD2EFFBD2EFFBE3F5FCFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFD8B69AC18E5E7AB9C06CD4F7AAE5F916A6E2B48055CEAC92FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDABA9DC69564D9BC95BBAF8A17BBF370
+ D5F75BA4B7D3B08BB78154CEAC92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ B97940DDC299D5B581C99E5F45B5D12EC3F59E9873CDA575D3B28BA25E2AFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC7D42E2CCA4CEA867CCA46495AB8F51
+ B1C1C6995BC49658DABC97A5612DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ BE8045E4CFA6D1AD6BCFAA68CDA666CBA363C99F60C79B5DDCC099A86530FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC18347E5D1A8D3B26FD2AE6DD0AB6ACE
+ A867CCA565CAA161DDC49DAB6933FFFFFFFFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnRemoveClick
+ end
+ object btnSort: TSpeedButton
+ Left = 241
+ Top = 144
+ Width = 99
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = ' &Sort'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFBFBFF
+ C7C7FFA7A7FFA4A4FFA4A4FFA6A6FFD5D5FFFDFDFFFFFFFFC8C8C82828289898
+ 98FFFFFFFFFFFFFFFFFFFFFFFFF6F6FF6A6AFF1010FF1D1DFF3434FF3C3CFFA3
+ A3FFFCFCFFF9F9F98484841717175C5C5CE4E4E4FFFFFFFFFFFFFFFFFFFCFCFF
+ A2A2FF1D1DFF2A2AFFA2A2FFD1D1FFE9E9FFFFFFFFD8D8D83E3E3E1010102626
+ 26B0B0B0FCFCFCFFFFFFFFFFFFFFFFFFEBEBFF7373FF1616FF6F6FFFEFEFFFFF
+ FFFFFFFFFF9090902625261A19191F1F1F636363F3F3F3FFFFFFFFFFFFFFFFFF
+ FFFFFFD9D9FF4D4DFF1B1BFF9A9AFFF9F9FFFFFFFFCECDCD8988883737377070
+ 70BABABAFAFAFAFFFFFFFFFFFFFEFEFFDFDFFFBFBFFF7777FF1010FF3232FFCE
+ CEFFFFFFFFFFFFFFD3D3D34E4E4EABABABFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF
+ 9C9CFF3B3BFF2D2DFF2525FF2C2CFFBABAFFFFFFFFFFFFFFD4D4D4575757AFAF
+ AFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFE4E4FFC6C6FFC2C2FFC2C2FFC6C6FFEE
+ EEFFFFFFFFFFFFFFD7D6D6626262B4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFEFCFB
+ F6E1D1F8E4D5FFFDFBFFFFFDF9E8DAF4DDCBFDFAF7FFFFFFD9D9D96D6D6DB9B9
+ B9FFFFFFFFFFFFFFFFFFFFFFFFFCF8F4DC9B67D68A4CF2DAC6F5E3D4D99259D7
+ 8C4FFAEFE7FFFFFFDDDDDC797979BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFA
+ E4B188CA6717D07932D27D38C96210DD9D6AFCF6F2FFFFFFE0E0DF858584C4C5
+ C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D6C0CD7024CE7228CF752DC96412EB
+ C4A5FFFEFEFFFFFFE3E3E2919190CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ F9EDE3D88F54CF752CD07730D27F3BF5E2D3FFFFFFFFFFFFE6E6E69D9D9DD0D0
+ D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFAE5B48CC8600CC65B05DD9D6AFC
+ F8F4FFFFFFFFFFFFE9E9E9A9A9A9D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFF0D4BDCF752DCC6B1DEAC3A3FFFFFFFFFFFFFFFFFFECECECB8B8B8DCDC
+ DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF5EFEFD2BAEDCCB1FAF0E8FF
+ FFFFFFFFFFFFFFFFF9F9F9E7E7E7F3F3F3FFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnSortClick
+ end
+ object btnClear: TSpeedButton
+ Left = 241
+ Top = 176
+ Width = 99
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = ' &Clear'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000CC483FBEBEBE
+ 9F9F9FA1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1
+ A19F9F9FB4B4B4CC483FC7C7C7BABABAEAEAEAF2F2F2F5F5F5F7F7F7F9F9F9FB
+ FBFBFCFCFCFBFBFBF9F9F9F7F7F7F5F5F5F1F1F1CACACAB0B0B0A4A4A4E3E3E3
+ 6E6EE41717DB1616D91414D81313D71212D61111D61212D61212D71414D81515
+ D95454E1F0F0F0A3A3A3A0A0A0E9E9E92929DF1313DC1111DA1010D90E0ED80E
+ 0ED80E0ED80E0ED80E0ED80F0FD91111DA1212DCF1F1F1A9A9A9A0A0A0E9E9E9
+ 2B2BE11515DE1717DD7F80E56566E31111DA1111DA3838DE898AE63031DF1313
+ DD1515DEF1F1F1A9A9A9A0A0A0E8E8E82D2DE31818E04E4FE3ECEEEEECEEEE7B
+ 7CE54444E0E0E2EDECEEEE8E8FE71616DF1818E0F0F0F0A9A9A9A0A0A0E7E7E7
+ 2E2EE41A1AE32020E2C6C8ECECEEEEECEEEEE6E8EDECEEEEE4E6EE4949E41919
+ E11A1AE2EFEFEFA9A9A9A0A0A0E6E6E63131E61D1DE51C1CE42C2DE4D0D2EDEC
+ EEEEECEEEEE9EBEE5152E61B1BE31C1CE41D1DE5EDEDEDA9A9A9A0A0A0E5E5E5
+ 3333E82020E71F1FE74F4FE8E2E4EEECEEEEECEEEEECEEEE8485EA1E1EE61F1F
+ E62020E7ECECECA8A8A8A0A0A0E3E3E33636EB2323EA3F40EAE3E5EEECEEEEE4
+ E7EED1D3EDECEEEEECEEEE696AEA2222E92323EAEAEAEAA8A8A8A0A0A0E1E1E1
+ 3838ED2626EC5252ECECEEEEE4E6EE5859EC3435ECC8CAEDECEEEE8E8FED2525
+ EC2626ECE8E8E8A8A8A8A0A0A0E0E0E03939EE2828EE2828EE5657EE3E3EEE27
+ 27ED2727ED3434ED5F5FED3030EE2828EE2828EEE6E6E6A8A8A8A0A0A0DEDEDE
+ 3D3DED2828EE2828EE2828EE2828EE2828EE2828EE2828EE2828EE2828EE2828
+ EE2B2BEEE4E4E4A8A8A8A9A9A9D2D2D29D9DE75D5DEB5C5CEB5D5DEC5D5DEC5D
+ 5DEC5D5DEC5D5DEC5D5DEC5D5DEC5C5CEB8D8DE8DFDFDFA1A1A1D2D2D2A9A9A9
+ CBCBCBD4D4D4D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5
+ D5D0D0D0B2B2B2BBBBBBCC483FDBDBDBB3B3B3ACACACACACACACACACACACACAC
+ ACACACACACACACACACACACACACACACACACAFAFAFD1D1D1CC483F}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnClearClick
+ end
+ object ScriptList: TListView
+ Left = 16
+ Top = 16
+ Width = 218
+ Height = 215
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Columns = <
+ item
+ AutoSize = True
+ Caption = 'Name'
+ end>
+ HideSelection = False
+ ReadOnly = True
+ RowSelect = True
+ ParentShowHint = False
+ ShowColumnHeaders = False
+ ShowHint = True
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnChange = ScriptListChange
+ OnInfoTip = ScriptListInfoTip
+ end
+ object btnOK: TButton
+ Left = 180
+ Top = 246
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = '&OK'
+ TabOrder = 1
+ OnClick = btnOKClick
+ end
+ object btnCancel: TButton
+ Left = 260
+ Top = 246
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = '&Cancel'
+ ModalResult = 2
+ TabOrder = 2
+ end
+end
diff --git a/Forms/FormFavorites.pas b/Forms/FormFavorites.pas
new file mode 100644
index 0000000..f29a2a5
--- /dev/null
+++ b/Forms/FormFavorites.pas
@@ -0,0 +1,273 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit FormFavorites;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ExtCtrls, ComCtrls, Translation, Vcl.Buttons;
+
+type
+ TFavoritesForm = class(TForm)
+ ScriptList: TListView;
+ btnMoveUp: TSpeedButton;
+ btnMoveDown: TSpeedButton;
+ btnOK: TButton;
+ btnCancel: TButton;
+ btnAdd: TSpeedButton;
+ btnRemove: TSpeedButton;
+ btnSort: TSpeedButton;
+ btnClear: TSpeedButton;
+ procedure FormShow(Sender: TObject);
+ procedure btnOKClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure btnAddClick(Sender: TObject);
+ procedure btnRemoveClick(Sender: TObject);
+ procedure ScriptListChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+ procedure btnMoveUpClick(Sender: TObject);
+ procedure btnMoveDownClick(Sender: TObject);
+ procedure ScriptListInfoTip(Sender: TObject; Item: TListItem;
+ var InfoTip: string);
+ procedure btnSortClick(Sender: TObject);
+ procedure btnClearClick(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ Faves: TStringList;
+ { Public declarations }
+ end;
+
+var
+ FavoritesForm: TFavoritesForm;
+
+implementation
+
+uses Global, ScriptForm;
+{$R *.DFM}
+
+procedure TFavoritesForm.FormShow(Sender: TObject);
+var
+ ListItem: TListItem;
+ i: integer;
+ s: string;
+begin
+ Faves.Text := Favorites.Text;
+ ScriptList.Items.Clear;
+ for i := 0 to Favorites.Count - 1 do
+ begin
+ ListItem := ScriptList.Items.Add;
+ s := ExtractFileName(Favorites[i]);
+ s := Copy(s, 0, length(s) - Length(ExtractFileExt(s)));
+ Listitem.Caption := s;
+ end;
+ if Favorites.Count <> 0 then
+ ScriptList.Selected := ScriptList.Items[0]
+ else
+ btnRemove.Enabled := False;
+
+ if ScriptList.Items.Count <= 1 then
+ begin
+ btnMoveUp.Enabled := False;
+ btnMoveDown.Enabled := False;
+ end;
+end;
+
+procedure TFavoritesForm.btnOKClick(Sender: TObject);
+begin
+ ModalResult := mrOK;
+ Faves.SaveToFile(AppPath + scriptFavsFilename);
+end;
+
+procedure TFavoritesForm.FormCreate(Sender: TObject);
+begin
+ btnOK.Caption := TextByKey('common-ok');
+ btnCancel.Caption := TextByKey('common-cancel');
+ self.Caption := TextByKey('favscripts-title');
+ btnAdd.Caption := TextByKey('favscripts-add');
+ btnRemove.Caption := TextByKey('favscripts-remove');
+ btnMoveUp.Caption := TextByKey('favscripts-moveup');
+ btnMoveDown.Caption := TextByKey('favscripts-movedown');
+ btnSort.Caption := TextByKey('varorder-byname'); // AV
+ btnClear.Caption := TextByKey('common-clear'); // AV
+
+ Faves := TStringList.Create;
+end;
+
+procedure TFavoritesForm.FormDestroy(Sender: TObject);
+begin
+ Faves.Free;
+end;
+
+procedure TFavoritesForm.btnAddClick(Sender: TObject);
+var
+ ListItem: TListItem;
+ i : integer;
+ s: string;
+begin
+ s := AppPath + 'Scripts';
+ if DirectoryExists(s) then
+ ScriptEditor.MainOpenDialog.InitialDir := s
+ else ScriptEditor.MainOpenDialog.InitialDir := ParamFolder;
+ ScriptEditor.MainOpenDialog.Filter := Format('%s|*.aposcript;*.asc|%s|*.*',
+ [TextByKey('common-filter-scriptfiles'),
+ TextByKey('common-filter-allfiles')]);
+ if ScriptEditor.mainOpenDialog.Execute then
+ begin
+ for i := 0 to Faves.Count - 1 do
+ begin
+ if ScriptEditor.MainOpenDialog.Filename = Faves[i] then exit;
+ end;
+
+ Faves.add(ScriptEditor.MainOpenDialog.Filename);
+ ListItem := ScriptList.Items.Add;
+ s := ExtractFileName(ScriptEditor.MainOpenDialog.Filename);
+ s := Copy(s, 0, length(s) - Length(ExtractFileExt(s)));
+ Listitem.Caption := s;
+ ScriptList.Selected := ScriptList.Items[ScriptList.Items.Count - 1];
+ btnRemove.Enabled := True;
+ end;
+
+ if ScriptList.Items.Count <= 1 then
+ begin
+ btnMoveUp.Enabled := False;
+ btnMoveDown.Enabled := False;
+ end;
+end;
+
+procedure TFavoritesForm.btnRemoveClick(Sender: TObject);
+var
+ i: integer;
+begin
+ if not assigned(ScriptList.Selected) then exit; // AV
+ i := ScriptList.Selected.Index;
+ Faves.Delete(i);
+ ScriptList.Items[i].delete;
+ if ScriptList.Items.Count <> 0 then
+ if i < ScriptList.Items.Count then
+ ScriptList.Selected := ScriptList.Items[i]
+ else
+ ScriptList.Selected := ScriptList.Items[ScriptList.Items.Count - 1]
+ else
+ btnRemove.Enabled := False;
+
+ if ScriptList.Items.Count <= 1 then
+ begin
+ btnMoveUp.Enabled := False;
+ btnMoveDown.Enabled := False;
+ end;
+end;
+
+procedure TFavoritesForm.btnSortClick(Sender: TObject);
+var
+ scripts: TStringList;
+ i : integer;
+begin
+ if (ScriptList.Items.Count <= 1) then exit;
+
+ scripts := TStringList.Create;
+ for i := 0 to Faves.Count - 1 do
+ scripts.AddPair(ScriptList.Items[i].Caption, Faves[i]);
+ ScriptList.Items.BeginUpdate;
+ scripts.Sort;
+ for i := 0 to Faves.Count - 1 do
+ begin
+ ScriptList.Items[i].Caption := scripts.Names[i];
+ Faves[i] := scripts.ValueFromIndex[i];
+ end;
+ ScriptList.Items.EndUpdate;
+ scripts.Free;
+end;
+
+procedure TFavoritesForm.ScriptListChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+begin
+ // TODO: optimize old code
+ btnRemove.Enabled := (ScriptList.Items.Count > 0);
+
+ if (Item.Index = ScriptList.Items.Count - 1) then
+ btnMoveDown.Enabled := False
+ else
+ btnMoveDown.Enabled := True;
+ if (Item.Index = 0) then
+ btnMoveUp.Enabled := False
+ else
+ btnMoveUp.Enabled := True;
+
+ if (ScriptList.Items.Count <= 1) then
+ begin
+ btnMoveDown.Enabled := False;
+ btnMoveUp.Enabled := False;
+ end;
+end;
+
+procedure TFavoritesForm.ScriptListInfoTip(Sender: TObject; Item: TListItem;
+ var InfoTip: string);
+begin
+ InfoTip := Faves[Item.Index]; // AV: show the corresponding full file name
+end;
+
+procedure TFavoritesForm.btnMoveUpClick(Sender: TObject);
+var
+ i: integer;
+ s: string;
+begin
+ if not assigned(ScriptList.Selected) then exit; // AV
+ i := ScriptList.Selected.Index;
+ s := Faves[i];
+ Faves[i] := Faves[i - 1];
+ Faves[i - 1] := s;
+ s := ScriptList.Selected.Caption;
+ ScriptList.Selected.Caption := ScriptList.Items[i - 1].Caption;
+ ScriptList.Items[i - 1].Caption := s;
+ ScriptList.Selected := ScriptList.Items[i - 1];
+end;
+
+procedure TFavoritesForm.btnClearClick(Sender: TObject);
+begin
+ ScriptList.Items.Clear;
+ Faves.Clear;
+ btnRemove.Enabled := False;
+end;
+
+procedure TFavoritesForm.btnMoveDownClick(Sender: TObject);
+var
+ i: integer;
+ s: string;
+begin
+ if not assigned(ScriptList.Selected) then exit; // AV
+ i := ScriptList.Selected.Index;
+ s := faves[i];
+ Faves[i] := Faves[i + 1];
+ Faves[i + 1] := s;
+ s := ScriptList.Selected.Caption;
+ ScriptList.Selected.Caption := ScriptList.Items[i + 1].Caption;
+ ScriptList.Items[i + 1].Caption := s;
+ ScriptList.Selected := ScriptList.Items[i + 1];
+end;
+
+end.
+
diff --git a/Forms/FormRender.dfm b/Forms/FormRender.dfm
new file mode 100644
index 0000000..9de91d0
--- /dev/null
+++ b/Forms/FormRender.dfm
@@ -0,0 +1,971 @@
+object RenderForm: TRenderForm
+ Left = 851
+ Top = 205
+ BorderIcons = [biSystemMenu, biMinimize]
+ BorderStyle = bsSingle
+ Caption = 'Render to Disk'
+ ClientHeight = 532
+ ClientWidth = 497
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnActivate = FormActivate
+ OnClose = FormClose
+ OnCloseQuery = FormCloseQuery
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ DesignSize = (
+ 497
+ 532)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object btnRender: TButton
+ Left = 252
+ Top = 483
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'Start'
+ Default = True
+ TabOrder = 0
+ OnClick = btnRenderClick
+ end
+ object btnCancel: TButton
+ Left = 412
+ Top = 483
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'Close'
+ TabOrder = 1
+ OnClick = btnCancelClick
+ end
+ object btnPause: TButton
+ Left = 332
+ Top = 483
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'Pause'
+ TabOrder = 2
+ OnClick = btnPauseClick
+ end
+ object PageCtrl: TPageControl
+ Left = 8
+ Top = 8
+ Width = 481
+ Height = 436
+ ActivePage = TabSettings
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Images = MainForm.Buttons
+ TabOrder = 3
+ object TabSettings: TTabSheet
+ Caption = 'Settings'
+ ImageIndex = 18
+ DesignSize = (
+ 473
+ 407)
+ object btnBrowse: TSpeedButton
+ Left = 416
+ Top = 7
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnBrowseClick
+ end
+ object btnGoTo: TSpeedButton
+ Left = 440
+ Top = 7
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FF964924EADBD3FF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9D
+ 4D259D4E28EADBD3FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFCF835D9247239A4B25A24F27AB5429BF6A3FA0502AEADBD3FF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFD78B65FDB089F7905CEC8856DE
+ 7F4FD17648C46E42A25631EADBD3FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFDE926CFCB997FDA578FC935EF28C59E58453D87B4CC66E41AE582BFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFE49872FBC3A6FDBE9EFEAE85FF
+ A87DF89D6FE58351AE582BF4E7E1FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFE89C76E29670DA8E68D1855FDB906AF79A6BAE582BF4E7E1FF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFE5
+ 9973C5764EF3E6DFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFE89C76F8EDE8FF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnGoToClick
+ end
+ object GroupBox5: TGroupBox
+ Left = 5
+ Top = 35
+ Width = 425
+ Height = 57
+ Caption = 'Preset'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 0
+ object btnSavePreset: TSpeedButton
+ Left = 368
+ Top = 18
+ Width = 24
+ Height = 24
+ Hint = 'Save Preset'
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnSavePresetClick
+ end
+ object btnDeletePreset: TSpeedButton
+ Left = 392
+ Top = 18
+ Width = 24
+ Height = 24
+ Hint = 'Delete Preset'
+ Caption = 'r'
+ Flat = True
+ Font.Charset = SYMBOL_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Marlett'
+ Font.Style = [fsItalic]
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnDeletePresetClick
+ end
+ object cmbPreset: TComboBox
+ Left = 10
+ Top = 20
+ Width = 351
+ Height = 21
+ Style = csDropDownList
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnChange = cmbPresetChange
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 5
+ Top = 92
+ Width = 233
+ Height = 97
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Size'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ DesignSize = (
+ 233
+ 97)
+ object lblRatio: TLabel
+ Left = 12
+ Top = 72
+ Width = 56
+ Height = 13
+ Caption = 'Aspect ratio'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object pnlWidth: TPanel
+ Left = 8
+ Top = 20
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Width'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ end
+ object pnlHeight: TPanel
+ Left = 8
+ Top = 44
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Height'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ end
+ object cbHeight: TComboBox
+ Left = 120
+ Top = 44
+ Width = 105
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ BiDiMode = bdLeftToRight
+ Enabled = False
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentBiDiMode = False
+ ParentFont = False
+ TabOrder = 1
+ OnChange = txtHeightChange
+ OnExit = cbHeightExit
+ OnKeyPress = NumFieldKeyPress
+ Items.Strings = (
+ '200'
+ '240'
+ '480'
+ '600'
+ '768'
+ '1024'
+ '1200'
+ '1920'
+ '2048'
+ '2400')
+ end
+ object cbWidth: TComboBox
+ Left = 120
+ Top = 20
+ Width = 105
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ BiDiMode = bdLeftToRight
+ Enabled = False
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentBiDiMode = False
+ ParentFont = False
+ TabOrder = 0
+ OnChange = txtWidthChange
+ OnExit = cbWidthExit
+ OnKeyPress = NumFieldKeyPress
+ Items.Strings = (
+ '320'
+ '640'
+ '800'
+ '1024'
+ '1280'
+ '1600'
+ '1920'
+ '2048'
+ '2560'
+ '3200')
+ end
+ object cbAspectRatio: TComboBox
+ Left = 101
+ Top = 70
+ Width = 123
+ Height = 21
+ Style = csDropDownList
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 4
+ OnChange = cbAspectRatioChange
+ Items.Strings = (
+ 'Custom'
+ 'Maintain aspect ratio'
+ '3 : 2 (Classic Film)'
+ '4 : 3 (Standart Monitor)'
+ '5 : 4 '
+ '16 : 9 (HD Video)'
+ '16 : 10'
+ '21 : 9 (CinemaScope)')
+ end
+ end
+ object GroupBox3: TGroupBox
+ Left = 248
+ Top = 92
+ Width = 218
+ Height = 97
+ Anchors = [akTop, akRight]
+ Caption = 'Quality settings'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ DesignSize = (
+ 218
+ 97)
+ object udOversample: TUpDown
+ Left = 196
+ Top = 68
+ Width = 15
+ Height = 21
+ Anchors = [akTop, akRight]
+ Associate = txtOversample
+ Min = 1
+ Max = 4
+ Position = 1
+ TabOrder = 3
+ end
+ object pnlDensity: TPanel
+ Left = 8
+ Top = 20
+ Width = 121
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Density'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 4
+ end
+ object pnlFilter: TPanel
+ Left = 8
+ Top = 44
+ Width = 121
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Filter radius'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ end
+ object pnlOversample: TPanel
+ Left = 8
+ Top = 68
+ Width = 121
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Oversample'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 6
+ end
+ object txtDensity: TComboBox
+ Left = 128
+ Top = 20
+ Width = 82
+ Height = 21
+ AutoComplete = False
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnChange = txtDensityChange
+ OnCloseUp = txtDensityChange
+ OnExit = txtDensityExit
+ OnKeyPress = NumFieldKeyPress
+ Items.Strings = (
+ '200'
+ '500'
+ '1000'
+ '2000'
+ '4000')
+ end
+ object txtFilterRadius: TEdit
+ Left = 128
+ Top = 44
+ Width = 68
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ BiDiMode = bdLeftToRight
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentBiDiMode = False
+ ParentFont = False
+ TabOrder = 1
+ Text = '0.1'
+ OnExit = txtFilterRadiusExit
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtOversample: TEdit
+ Left = 128
+ Top = 68
+ Width = 68
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ BiDiMode = bdLeftToRight
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentBiDiMode = False
+ ParentFont = False
+ ReadOnly = True
+ TabOrder = 2
+ Text = '1'
+ OnChange = txtOversampleChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ object sbFilterRadius: TSpinButton
+ Left = 196
+ Top = 44
+ Width = 15
+ Height = 21
+ DownGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000008080000080800000808000000000000080800000808000008080000080
+ 8000008080000080800000808000000000000000000000000000008080000080
+ 8000008080000080800000808000000000000000000000000000000000000000
+ 0000008080000080800000808000000000000000000000000000000000000000
+ 0000000000000000000000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ FocusControl = txtFilterRadius
+ TabOrder = 7
+ UpGlyph.Data = {
+ 0E010000424D0E01000000000000360000002800000009000000060000000100
+ 200000000000D800000000000000000000000000000000000000008080000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 8000000000000000000000000000000000000000000000000000000000000080
+ 8000008080000080800000000000000000000000000000000000000000000080
+ 8000008080000080800000808000008080000000000000000000000000000080
+ 8000008080000080800000808000008080000080800000808000000000000080
+ 8000008080000080800000808000008080000080800000808000008080000080
+ 800000808000008080000080800000808000}
+ OnDownClick = sbFilterRadiusDownClick
+ OnUpClick = sbFilterRadiusUpClick
+ end
+ end
+ object GroupBox4: TGroupBox
+ Left = 5
+ Top = 192
+ Width = 461
+ Height = 99
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Resource usage'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 3
+ DesignSize = (
+ 461
+ 99)
+ object lblApproxMem: TLabel
+ Left = 431
+ Top = 100
+ Width = 50
+ Height = 13
+ Alignment = taRightJustify
+ Caption = '0000 Mb'
+ Visible = False
+ end
+ object lblPhysical: TLabel
+ Left = 439
+ Top = 96
+ Width = 42
+ Height = 13
+ Alignment = taRightJustify
+ Caption = '0000 Mb'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ Visible = False
+ end
+ object lblMaxbits: TLabel
+ Left = 433
+ Top = 116
+ Width = 40
+ Height = 13
+ Hint = '- No render stats -'
+ Alignment = taRightJustify
+ Caption = '99.999'
+ ParentShowHint = False
+ ShowHint = True
+ Visible = False
+ end
+ object Label9: TLabel
+ Left = 440
+ Top = 108
+ Width = 117
+ Height = 13
+ Hint = '- No render stats -'
+ Caption = 'Max bits per sample:'
+ ParentShowHint = False
+ ShowHint = True
+ Visible = False
+ end
+ object lblMemory: TLabel
+ Left = 11
+ Top = 12
+ Width = 445
+ Height = 24
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Caption =
+ 'The render process will use 0000 Mb of 0000MB available physical' +
+ ' memory'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ Layout = tlCenter
+ WordWrap = True
+ ExplicitWidth = 442
+ end
+ object lblCPUCores: TLabel
+ Left = 11
+ Top = 35
+ Width = 445
+ Height = 26
+ Anchors = [akLeft, akTop, akRight]
+ AutoSize = False
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ Layout = tlCenter
+ WordWrap = True
+ ExplicitWidth = 442
+ end
+ object chkLimitMem: TCheckBox
+ Left = 444
+ Top = 134
+ Width = 125
+ Height = 17
+ Caption = 'Limit memory usage to:'
+ TabOrder = 0
+ Visible = False
+ end
+ object pnlLimit: TPanel
+ Left = 8
+ Top = 68
+ Width = 121
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Memory limit'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ end
+ object cbMaxMemory: TComboBox
+ Left = 128
+ Top = 68
+ Width = 97
+ Height = 21
+ Style = csDropDownList
+ BiDiMode = bdLeftToRight
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ItemIndex = 0
+ ParentBiDiMode = False
+ ParentFont = False
+ TabOrder = 1
+ Text = 'No limit'
+ OnChange = cbMaxMemoryChange
+ Items.Strings = (
+ 'No limit'
+ '32'
+ '64'
+ '128'
+ '256'
+ '512'
+ '1024'
+ '1536')
+ end
+ object PBMem: TProgressBar
+ Left = 232
+ Top = 68
+ Width = 217
+ Height = 21
+ TabOrder = 3
+ end
+ end
+ object GroupBox1: TGroupBox
+ Left = 5
+ Top = 303
+ Width = 220
+ Height = 81
+ Caption = 'Output options'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 5
+ DesignSize = (
+ 220
+ 81)
+ object chkSave: TCheckBox
+ Left = 8
+ Top = 16
+ Width = 204
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Save parameters in a flame'
+ Checked = True
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 0
+ end
+ object chkSaveIncompleteRenders: TCheckBox
+ Left = 8
+ Top = 58
+ Width = 204
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Save incomplete renders'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnClick = chkSaveIncompleteRendersClick
+ end
+ object chkEmbedFlame: TCheckBox
+ Left = 8
+ Top = 37
+ Width = 204
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Save parameters in a PNG-image '
+ Checked = True
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 2
+ end
+ end
+ object GroupBox6: TGroupBox
+ Left = 232
+ Top = 303
+ Width = 234
+ Height = 81
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Completion options'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 6
+ DesignSize = (
+ 234
+ 81)
+ object chkPostProcess: TCheckBox
+ Left = 8
+ Top = 16
+ Width = 217
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Post-process after completion'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ end
+ object chkShutdown: TCheckBox
+ Left = 8
+ Top = 37
+ Width = 217
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Shut down computer when complete'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ end
+ object chkPlaySound: TCheckBox
+ Left = 8
+ Top = 58
+ Width = 217
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Play sound when complete'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ OnClick = chkPlaySoundClick
+ end
+ end
+ object pnlTarget: TPanel
+ Left = 5
+ Top = 8
+ Width = 121
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Destination'
+ TabOrder = 7
+ end
+ object txtFilename: TEdit
+ Left = 125
+ Top = 8
+ Width = 290
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 4
+ OnChange = txtFilenameChange
+ end
+ object chkBinary: TCheckBox
+ Left = 13
+ Top = 388
+ Width = 457
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption =
+ 'Write raw data (WARNING: this is experimental and slows down the' +
+ ' rendering!!!)'
+ Enabled = False
+ TabOrder = 8
+ Visible = False
+ end
+ end
+ object TabOutput: TTabSheet
+ Caption = 'Output'
+ ImageIndex = 38
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object Output: TMemo
+ Left = 0
+ Top = 0
+ Width = 473
+ Height = 407
+ Align = alClient
+ BorderStyle = bsNone
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBtnText
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = []
+ ParentFont = False
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 0
+ end
+ end
+ end
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 513
+ Width = 497
+ Height = 19
+ Panels = <
+ item
+ Width = 161
+ end
+ item
+ Width = 150
+ end
+ item
+ Width = 50
+ end>
+ end
+ object btnDonate: TButton
+ Left = 8
+ Top = 483
+ Width = 82
+ Height = 25
+ Anchors = [akLeft, akBottom]
+ Caption = 'Donate'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ OnClick = btnDonateClick
+ end
+ object btnSaveLog: TButton
+ Left = 95
+ Top = 483
+ Width = 73
+ Height = 25
+ Anchors = [akLeft, akBottom]
+ Caption = 'Save log'
+ Enabled = False
+ TabOrder = 5
+ Visible = False
+ OnClick = btnSaveLogClick
+ end
+ object ProgressBar2: TProgressBar
+ Left = 8
+ Top = 451
+ Width = 481
+ Height = 25
+ Anchors = [akLeft, akRight, akBottom]
+ TabOrder = 7
+ end
+ object btnSnapshot: TButton
+ Left = 172
+ Top = 483
+ Width = 75
+ Height = 25
+ Anchors = [akLeft, akBottom]
+ Caption = 'Snapshot'
+ TabOrder = 8
+ Visible = False
+ OnClick = btnSnapshotClick
+ end
+ object SaveDialog: TSaveDialog
+ Left = 456
+ Top = 72
+ end
+ object ProgressTaskbar: TTaskbar
+ TaskBarButtons = <>
+ ProgressMaxValue = 100
+ TabProperties = []
+ Left = 432
+ Top = 424
+ end
+end
diff --git a/Forms/FormRender.pas b/Forms/FormRender.pas
new file mode 100644
index 0000000..eef8f1e
--- /dev/null
+++ b/Forms/FormRender.pas
@@ -0,0 +1,1501 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit FormRender;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ComCtrls, Math, Buttons, Registry, ExtCtrls, MMSystem, // Windows7,
+ System.Win.TaskbarCore, Vcl.Taskbar, Vcl.Samples.Spin, // AV
+ ControlPoint, RenderThread, cmap, RenderingCommon, RenderingInterface,
+ ShellAPI, Translation, ActiveX, ComObj;
+
+const
+ {$ifdef T500}
+ rendersAV = 'rendersAV_250.flame';
+ {$else}
+ rendersAV = 'rendersAV.flame';
+ {$endif}
+
+type
+ TRenderForm = class(TForm)
+ btnRender: TButton;
+ btnCancel: TButton;
+ SaveDialog: TSaveDialog;
+ btnPause: TButton;
+ StatusBar: TStatusBar;
+ PageCtrl: TPageControl;
+ TabSettings: TTabSheet;
+ TabOutput: TTabSheet;
+ GroupBox5: TGroupBox;
+ btnSavePreset: TSpeedButton;
+ btnDeletePreset: TSpeedButton;
+ cmbPreset: TComboBox;
+ GroupBox2: TGroupBox;
+ cbWidth: TComboBox;
+ cbHeight: TComboBox;
+ GroupBox3: TGroupBox;
+ txtOversample: TEdit;
+ txtFilterRadius: TEdit;
+ udOversample: TUpDown;
+ txtDensity: TComboBox;
+ GroupBox4: TGroupBox;
+ lblApproxMem: TLabel;
+ lblPhysical: TLabel;
+ lblMaxbits: TLabel;
+ Label9: TLabel;
+ cbMaxMemory: TComboBox;
+ chkLimitMem: TCheckBox;
+ Output: TMemo;
+ lblMemory: TLabel;
+ btnBrowse: TSpeedButton;
+ txtFilename: TEdit;
+ GroupBox1: TGroupBox;
+ chkSave: TCheckBox;
+ GroupBox6: TGroupBox;
+ chkPostProcess: TCheckBox;
+ chkShutdown: TCheckBox;
+ btnGoTo: TSpeedButton;
+ pnlWidth: TPanel;
+ pnlHeight: TPanel;
+ pnlDensity: TPanel;
+ pnlFilter: TPanel;
+ pnlOversample: TPanel;
+ pnlLimit: TPanel;
+ pnlTarget: TPanel;
+ btnDonate: TButton;
+ btnSaveLog: TButton;
+ chkBinary: TCheckBox;
+ ProgressBar2: TProgressBar;
+ PBMem: TProgressBar;
+ chkSaveIncompleteRenders: TCheckBox;
+ lblCPUCores: TLabel;
+ cbAspectRatio: TComboBox;
+ lblRatio: TLabel;
+ chkEmbedFlame: TCheckBox;
+ chkPlaySound: TCheckBox;
+ btnSnapshot: TButton;
+ ProgressTaskbar: TTaskbar;
+ sbFilterRadius: TSpinButton;
+ procedure btnSaveLogClick(Sender: TObject);
+ procedure btnDonateClick(Sender: TObject);
+ procedure cbMaxMemoryChange(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure btnRenderClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure txtWidthChange(Sender: TObject);
+ procedure txtHeightChange(Sender: TObject);
+ procedure txtOversampleChange(Sender: TObject);
+ procedure txtFilenameChange(Sender: TObject);
+ procedure btnCancelClick(Sender: TObject);
+ procedure txtDensityChange(Sender: TObject);
+ procedure txtFilterRadiusExit(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure btnPauseClick(Sender: TObject);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure btnSavePresetClick(Sender: TObject);
+ procedure btnBrowseClick(Sender: TObject);
+ procedure btnDeletePresetClick(Sender: TObject);
+ procedure cmbPresetChange(Sender: TObject);
+ //procedure chkMaintainClick(Sender: TObject);
+ procedure chkSaveIncompleteRendersClick(Sender: TObject);
+ procedure btnGoToClick(Sender: TObject);
+ procedure cbAspectRatioChange(Sender: TObject);
+ procedure chkPlaySoundClick(Sender: TObject);
+ procedure FormActivate(Sender: TObject);
+ procedure btnSnapshotClick(Sender: TObject);
+ procedure NumFieldKeyPress(Sender: TObject; var Key: Char);
+ procedure sbFilterRadiusUpClick(Sender: TObject);
+ procedure sbFilterRadiusDownClick(Sender: TObject);
+ procedure txtDensityExit(Sender: TObject);
+ procedure cbWidthExit(Sender: TObject);
+ procedure cbHeightExit(Sender: TObject);
+ private
+ StartTime, EndTime, oldElapsed, edt: TDateTime;
+ oldProg: double;
+
+ ApproxSamples: int64;
+
+ procedure DoPostProcess;
+
+ procedure HandleThreadCompletion(var Message: TMessage);
+ message WM_THREAD_COMPLETE;
+ procedure HandleThreadTermination(var Message: TMessage);
+ message WM_THREAD_TERMINATE;
+ procedure ListPresets;
+ function WindowsExit(RebootParam: Longword = EWX_POWEROFF or EWX_FORCE): Boolean;
+ procedure Save(const str: string);
+ function IsLimitingMemory():boolean;
+
+ public
+ Renderer: TRenderThread;
+ PhysicalMemory, ApproxMemory, TotalPhysicalMemory: int64;
+ ColorMap: TColorMap;
+ cp: TControlPoint;
+ Filename: string;
+ ImageWidth, ImageHeight, Oversample: Integer;
+ // BitsPerSample: integer; Brightness, Gamma, Vibrancy: double;
+ zoom, Sample_Density, Filter_Radius: double;
+ center: array[0..1] of double;
+ MaxMemory: integer;
+ bRenderAll: boolean;
+
+ procedure OnProgress(prog: double);
+ procedure ShowMemoryStatus;
+ procedure ResetControls;
+ end;
+
+function GetCpuCount: integer; // AV: this is used in Options
+
+var
+ RenderForm: TRenderForm;
+ Ratio: double;
+
+implementation
+
+uses
+ Main, Global, SavePreset, formPostProcess, PngImage, ImageMaker,Tracer;
+
+{$R *.DFM}
+
+function TRenderForm.IsLimitingMemory():boolean;
+begin
+ Result := (cbMaxMemory.ItemIndex > 0);
+end;
+
+procedure TRenderForm.ResetControls;
+begin
+ txtFilename.Enabled := true;
+ btnBrowse.Enabled := true;
+ cbWidth.Enabled := true;
+ cbHeight.Enabled := true;
+ txtDensity.Enabled := true;
+ txtFilterRadius.enabled := true;
+ txtOversample.Enabled := true;
+ //chkLimitMem.Enabled := true;
+ cbMaxMemory.enabled := true;
+ //cbBitsPerSample.Enabled := true;
+ chkPostProcess.Enabled := not IsLimitingMemory;
+ chkSaveIncompleteRenders.Enabled := not IsLimitingMemory;
+ btnRender.Enabled := true;
+ cmbPreset.enabled := true;
+ btnSaveLog.Enabled := false;
+ chkSave.enabled := true;
+ chkPostProcess.enabled := true;
+ chkShutdown.enabled := true;
+ btnSavePreset.enabled := true;
+ btnDeletePreset.enabled := true;
+ btnCancel.Caption := TextByKey('common-close');
+ btnPause.enabled := false;
+ //chkMaintain.Enabled := true;
+ cbAspectRatio.Enabled := true; // AV
+ btnSnapshot.Visible := false; // AV
+
+ ProgressBar2.Position := 0;
+ ProgressTaskBar.ProgressValue := 0; // AV
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.None; // AV
+
+ pnlWidth.Enabled := true;
+ pnlHeight.Enabled := true;
+ pnlDensity.Enabled := true;
+ pnlFilter.Enabled := true;
+ pnlOversample.Enabled := true;
+ pnlLimit.Enabled := true;
+ pnlTarget.Enabled := true;
+ //pnlBufferDepth.Enabled := true;
+
+ pnlWidth.Font.Color := clWindowText;
+ pnlHeight.Font.Color := clWindowText;
+ pnlDensity.Font.Color := clWindowText;
+ pnlFilter.Font.Color := clWindowText;
+ pnlOversample.Font.Color := clWindowText;
+ pnlLimit.Font.Color := clWindowText;
+ pnlTarget.Font.Color := clWindowText;
+ //pnlBufferDepth.Font.Color := clWindowText;
+ ShowMemoryStatus;
+end;
+
+procedure WinShellExecute(const Operation, AssociatedFile: string);
+var
+ a1: string;
+begin
+ a1 := Operation;
+ if a1 = '' then
+ a1 := 'open';
+ ShellExecute(
+ application.handle
+ , pchar(a1)
+ , pchar(AssociatedFile)
+ , ''
+ , ''
+ , SW_SHOWNORMAL
+ );
+end;
+
+function GetCpuCount: integer;
+var
+ si: TSystemInfo;
+begin;
+ GetSystemInfo(si);
+ Result := si.dwNumberOfProcessors;
+end;
+
+procedure TRenderForm.ShowMemoryStatus;
+var
+ GlobalMemoryInfo: TMemoryStatus; // holds the global memory status information
+begin
+ GlobalMemoryInfo.dwLength := SizeOf(GlobalMemoryInfo);
+ GlobalMemoryStatus(GlobalMemoryInfo);
+ PhysicalMemory := GlobalMemoryInfo.dwAvailPhys div 1048576;
+ TotalPhysicalMemory := GlobalMemoryInfo.dwTotalPhys div 1048576;
+ //TotalPhysicalMemory := TotalPhysicalMemory * 9 div 10; // assume that OS will take 10% of RAM ;)
+
+ if SingleBuffer then
+ ApproxMemory := int64(ImageHeight) * int64(ImageWidth) * sqr(Oversample) * 16 div 1048576
+ else
+ ApproxMemory := int64(ImageHeight) * int64(ImageWidth) * sqr(Oversample) * 32 div 1048576;
+
+ lblMemory.Caption := Format(TextByKey('render-resourceusage-infotext'), [ApproxMemory, PhysicalMemory]);
+ PBMem.Position := round(100 * (ApproxMemory / PhysicalMemory));
+
+ if ApproxMemory > PhysicalMemory then // AV: adapted for GUI styles
+ begin
+ // AV: exclude the style for the font to set its color properly
+ lblMemory.StyleElements := [seClient, seBorder];
+ lblMemory.Font.Color := clRed;
+ end
+ else begin
+ lblMemory.StyleElements := [seClient, seBorder, seFont];
+ lblMemory.Font.Color := clWindowText;
+ end;
+
+ if NrTreads > GetCpuCount then NrTreads := GetCpuCount; // AV: only actual Nrs
+ {
+ lblCpuCores.Font.Color := clRed
+ else
+ lblCpuCores.Font.Color := clWindowText;
+ }
+
+ lblCPUCores.Caption := Format(TextByKey('render-resourceusage-infotext2'), [NrTreads, GetCpuCount]);
+ //btnRender.Enabled := (ApproxMemory <= PhysicalMemory) or (cbMaxMemory.ItemIndex > 0);
+
+ if ApproxMemory > 0 then
+ lblMaxbits.caption := format('%2.3f', [8 + log2(
+ sample_density * sqr(power(2, cp.zoom)) * int64(ImageHeight) * int64(ImageWidth) / sqr(oversample)
+ )]);
+end;
+
+procedure Trace2(const str: string);
+begin
+ if TraceLevel >= 2 then
+ RenderForm.Output.Lines.Add('. . ' + str);
+end;
+
+procedure TRenderForm.Save(const str:string);
+begin
+ Renderer.SaveImage(FileName);
+end;
+
+procedure TRenderForm.sbFilterRadiusDownClick(Sender: TObject); // AV
+var n: double;
+begin
+ try
+ n := StrToFloat(txtFilterRadius.Text);
+ n := RoundTo(n - 0.05, -3);
+ if (n > 0) then
+ txtFilterRadius.Text := FloatToStr(n);
+ except
+ raise Exception.Create(TextByKey('render-status-invalidfilterradius'));
+ end;
+end;
+
+procedure TRenderForm.sbFilterRadiusUpClick(Sender: TObject); // AV
+var n: double;
+begin
+ try
+ n := StrToFloat(txtFilterRadius.Text);
+ txtFilterRadius.Text := Format('%.3g', [n + 0.05]);
+ except
+ raise Exception.Create(TextByKey('render-status-invalidfilterradius'));
+ end;
+end;
+
+procedure TRenderForm.HandleThreadCompletion(var Message: TMessage);
+var
+ tryAgain: boolean;
+begin
+ Trace2(MsgComplete + IntToStr(message.LParam));
+ if not assigned(Renderer) then begin
+ Trace2(MsgNotAssigned);
+ exit;
+ end;
+ if Renderer.ThreadID <> message.LParam then begin
+ Trace2(MsgAnotherRunning);
+ exit;
+ end;
+
+ EndTime := Now;
+
+ repeat
+ tryAgain := false;
+ try
+ Save(FileName);
+ if ShowRenderImage then // AV
+ if FileExists(FileName) then
+ ShellExecute(Application.handle, PChar('open'),
+ PChar(ExtractFileName(FileName)), nil, PChar(renderPath),
+ SW_SHOWNORMAL);
+ except
+ on e: Exception do begin
+ Output.Lines.Add(TimeToStr(Now) + ' : ' + TextByKey('render-status-saveerror-log'));
+ tryAgain := (Application.MessageBox(PChar(TextByKey('render-status-saveerror-message1') + #13#10 + e.Message +
+ #13#10 + TextByKey('render-status-saveerror-message2')), 'Apophysis', MB_RETRYCANCEL or MB_ICONERROR) = IDRETRY);
+ // AV: displaying status in red
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.Error;
+ end;
+ end;
+ until tryAgain = false;
+
+ if PlaySoundOnRenderComplete then
+ if RenderCompleteSoundFile <> '' then
+ sndPlaySound(PChar(RenderCompleteSoundFile), SND_FILENAME or SND_NOSTOP or SND_ASYNC)
+ else
+ sndPlaySound(pchar(SND_ALIAS_SYSTEMASTERISK), SND_ALIAS_ID or SND_NOSTOP or SND_ASYNC);
+
+ PageCtrl.TabIndex := 1;
+ if ShowRenderStats then
+ Renderer.ShowBigStats
+ else
+ Renderer.ShowSmallStats;
+ Output.Lines.Add(' ' + TextByKey('render-status-totaltime') + TimeToString(EndTime - StartTime));
+ Output.Lines.Add('');
+
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.None; // AV
+
+ if not IsLimitingMemory and chkPostProcess.checked then
+ DoPostProcess;
+
+ Renderer.Free;
+ Renderer := nil;
+ if not bRenderAll then ResetControls;
+
+ btnSaveLog.Enabled := true;
+
+ if chkShutdown.Checked and not bRenderAll then
+ WindowsExit;
+end;
+
+procedure TRenderForm.HandleThreadTermination(var Message: TMessage);
+begin
+ Trace2(MsgTerminated + IntToStr(message.LParam));
+ if not assigned(Renderer) then begin
+ Trace2(MsgNotAssigned);
+ exit;
+ end;
+ if Renderer.ThreadID <> message.LParam then begin
+ Trace2(MsgAnotherRunning);
+ exit;
+ end;
+
+ {
+ // AV: temporary commented out since undestroyed TBaseRenderer objects
+ // from Renderer.GetRenderer method cause regular large memory leaks!
+
+ if Renderer.GetRenderer.Hibernated then
+ Output.Lines.Add(TimeToStr(Now) + ' : ' + TextByKey('render-status-renderhibernated'))
+ else }
+ Output.Lines.Add(TimeToStr(Now) + ' : ' + TextByKey('render-status-renderterminated'));
+
+ Output.Lines.Add('');
+
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.None; // AV
+
+ sndPlaySound(pchar(SND_ALIAS_SYSTEMEXCLAMATION), SND_ALIAS_ID or SND_NOSTOP or SND_ASYNC);
+
+ PageCtrl.TabIndex := 0; // AV: moved from btnCancelClick
+
+ Renderer.Free;
+ Renderer := nil;
+ ResetControls;
+
+ btnSaveLog.Enabled := true;
+end;
+
+procedure TRenderForm.OnProgress(prog: double);
+var
+ Elapsed, Remaining, dt: TDateTime;
+begin
+ Elapsed := Now - StartTime;
+ dt := Elapsed - oldElapsed;
+ if (prog = 1.0) then begin
+ StatusBar.Panels[0].text := Format(TextByKey('render-status-elapsed') + ': %2.2d:%2.2d:%2.2d.%2.2d',
+ [Trunc(Elapsed * 24),
+ Trunc(Elapsed * 24 * 60) mod 60,
+ Trunc(Elapsed * 24 * 60 * 60) mod 60,
+ Trunc(Elapsed * 24 * 60 * 60 * 100) mod 100]);
+ StatusBar.Panels[1].text := TextByKey('render-status-remaining') + ': 00:00:00.00';
+ exit;
+ end;
+
+ //if (dt < 1/24/60/60/10) then exit;
+ if (dt < 1/24/60/60) then exit; // PB: too much time consuming... was every 1/10th seconds!
+ oldElapsed := Elapsed;
+
+ prog := (Renderer.Slice + Prog) / Renderer.NrSlices;
+ if ShowProgress then begin
+ ProgressBar2.Position := round(100 * prog);
+ // AV: to display the progress on the taskbar
+ ProgressTaskBar.ProgressValue := ProgressBar2.Position; // AV
+ end;
+
+ StatusBar.Panels[0].text := Format(TextByKey('render-status-elapsed') + ': %2.2d:%2.2d:%2.2d.%2.2d',
+ [Trunc(Elapsed * 24),
+ Trunc(Elapsed * 24 * 60) mod 60,
+ Trunc(Elapsed * 24 * 60 * 60) mod 60,
+ Trunc(Elapsed * 24 * 60 * 60 * 100) mod 100]);
+
+ edt := edt + dt;
+ if (edt > 1/24/60/60/2) and (prog > 0) then
+ begin
+ Remaining := (1 - prog) * edt / (prog - oldProg);
+ edt := 0;
+ oldProg := prog;
+
+ StatusBar.Panels[1].text := Format(TextByKey('render-status-remaining') + ': %2.2d:%2.2d:%2.2d.%2.2d',
+ [Trunc(Remaining * 24),
+ Trunc(Remaining * 24 * 60) mod 60,
+ Trunc(Remaining * 24 * 60 * 60) mod 60,
+ Trunc(Remaining * 24 * 60 * 60 * 100) mod 100]);
+ end;
+ StatusBar.Panels[2].text := Format(TextByKey('render-status-slicestatus'), [(Renderer.Slice + 1), (Renderer.nrSlices)]);
+ //'Slice ' + IntToStr(Renderer.Slice + 1) + ' of ' + IntToStr(Renderer.nrSlices);
+ Application.ProcessMessages;
+end;
+
+procedure TRenderForm.FormCreate(Sender: TObject);
+begin
+{$ifdef Apo7X64}
+ cbMaxMemory.Items.Add('2048');
+ cbMaxMemory.Items.Add('3072');
+ cbMaxMemory.Items.Add('4096');
+{$endif}
+
+ pnlWidth.Caption := TextByKey('common-width');
+ pnlHeight.Caption := TextByKey('common-height');
+ GroupBox2.Caption := TextByKey('common-size');
+ cbAspectRatio.Items[0] := TextByKey('adjustment-tab-size-custom'); // AV
+ cbAspectRatio.Items[1] := TextByKey('common-keepaspect'); // AV
+ lblRatio.Caption := TextByKey('adjustment-tab-size-ratio'); // AV
+ pnlTarget.Caption := TextByKey('common-destination');
+ btnBrowse.Hint := TextByKey('common-browse');
+ GroupBox3.Caption := TextByKey('common-quality');
+ pnlFilter.Caption := TextByKey('common-filterradius');
+ pnlDensity.Caption := TextByKey('common-density');
+ pnlOversample.Caption := TextByKey('common-oversample');
+ btnRender.Caption := TextByKey('common-start');
+ btnPause.Caption := TextByKey('common-pause');
+ btnCancel.Caption := TextByKey('common-close');
+ self.Caption := TextByKey('render-title');
+ TabSettings.Caption := TextByKey('render-tab-settings-title');
+ TabOutput.Caption := TextByKey('render-tab-output-title');
+ btnGoTo.Hint := TextByKey('render-common-gotofolder');
+ GroupBox4.Caption := TextByKey('render-resourceusage-title');
+ pnlLimit.Caption := TextByKey('render-resourceusage-limit');
+ //pnlBufferDepth.Caption := TextByKey('render-resourceusage-bufferdepth');
+ chkSave.Caption := TextByKey('render-output-saveparams1');
+ chkEmbedFlame.Caption := TextByKey('render-output-saveparams2');
+ GroupBox6.Caption := TextByKey('render-completion-title');
+ chkPostProcess.Caption := TextByKey('render-completion-postprocess');
+ chkShutdown.Caption := TextByKey('render-completion-shutdown');
+ chkPlaySound.Caption := TextByKey('render-completion-playsound');
+ chkSaveIncompleteRenders.Caption := TextByKey('render-completion-saveincomplete');
+ cbMaxMemory.Items[0] := TextByKey('render-resourceusage-nolimit') ;
+ Groupbox1.Caption := TextByKey('render-output-title');
+ Groupbox5.Caption := TextByKey('render-presets-title');
+ btnSavePreset.Hint := TextByKey('render-presets-save');
+ btnDeletePreset.Hint := TextByKey('render-presets-delete');
+ btnDonate.Caption := TextByKey('common-donate');
+ btnDonate.Hint := TextByKey('common-donatehint');
+ btnSnapshot.Caption := TextByKey('render-status-dosnapshot'); // AV
+ btnSnapshot.Hint := TextByKey('render-status-dosnapshothint');
+
+ cp := TControlPoint.Create;
+ cbMaxMemory.ItemIndex := 0;
+ cbAspectRatio.ItemIndex := 1; // AV
+ // BitsPerSample := 0;
+ MainForm.Buttons.GetBitmap(2, btnSavePreset.Glyph);
+ // MainForm.Buttons.GetBitmap(9, btnDeletePreset.Glyph);
+ bRenderAll := false;
+ ListPresets;
+end;
+
+procedure TRenderForm.FormDestroy(Sender: TObject);
+begin
+ if assigned(Renderer) then begin
+ Renderer.Terminate;
+ Renderer.WaitFor;
+ Renderer.Free;
+ end;
+ cp.free;
+end;
+
+procedure TRenderForm.NumFieldKeyPress(Sender: TObject; var Key: Char); // AV
+var cs: TSysCharSet;
+begin
+ cs := ['0'..'9', #8];
+ if Sender = txtFilterRadius then
+ begin
+ if (Key = ',') then Key := '.';
+ include(cs, '.');
+ end;
+ if not CharInSet(Key, cs) then Key:= #0;
+end;
+
+procedure TRenderForm.btnRenderClick(Sender: TObject);
+var
+ t: string;
+ iCurrFlame: integer;
+ path, ext: string;
+ lim:integer;
+ ilm:boolean;
+{ sl: TStringList;
+ tryAgain: boolean;
+ cancel: boolean;
+ result: integer; }
+begin
+ // overwrite target with 0b file
+ // this to test writability in output directory
+ {sl := TStringList.Create;
+ sl.Text := '';
+ repeat
+ tryAgain := false;
+ cancel := false;
+ try
+ sl.SaveToFile(txtFileName.Text);
+ except
+ on e: Exception do begin
+ Output.Lines.Add(TimeToStr(Now) + ' : ' + TextByKey('render-status-saveerror-log'));
+ result := (Application.MessageBox(PChar(TextByKey('render-status-saveerror-message1') + #13#10 + e.Message +
+ #13#10 + TextByKey('render-status-saveerror-message2')), 'Apophysis', MB_RETRYCANCEL or MB_ICONERROR));
+ tryAgain := (result = IDRETRY);
+ cancel := (result = IDCANCEL);
+ ProgressBar2.ProgressBarState := pbstError;
+ end;
+ end;
+ until (tryAgain = false) or (cancel = true);
+ sl.Destroy; }
+
+ //if (cancel) then Exit;
+ Output.Text := '';
+
+ ImageWidth := StrToInt(cbWidth.text);
+ ImageHeight := StrToInt(cbHeight.text);
+
+ ilm := IsLimitingMemory;
+ if (IsLimitingMemory) then begin
+ lim := StrToInt(cbMaxMemory.text);
+ MaxMemory := lim;
+ end
+ else lim := PhysicalMemory + 1;
+
+ if not ilm then begin
+ if (ApproxMemory > {Total}PhysicalMemory) then
+ begin
+ if IDYES <> Application.MessageBox(PChar(TextByKey('render-status-notenoughmemory1')), 'Apophysis', MB_ICONWARNING or MB_YESNO) then
+ exit;
+ end;
+{
+ if (ApproxMemory > PhysicalMemory) then
+ begin
+ if Application.MessageBox('There is not enough memory for this render. ' + #13 +
+ 'You can use memory limiting, or - if you are sure that your system *should* ' + #13 +
+ 'have the required amount of free RAM, you can try to allocate memory anyway. ' + #13#13 +
+ 'Dou you want to try? (SLOW AND UNSTABLE - USE AT YOUR OWN RISK!!!)', 'Apophysis',
+ MB_ICONWARNING or MB_YESNO) <> IDYES then exit;
+ end;
+}
+ end
+ else if (PhysicalMemory < lim) and (Approxmemory > PhysicalMemory) then begin
+ if IDYES <> Application.MessageBox(PChar(TextByKey('render-status-notenoughmemory2')), 'Apophysis', MB_ICONWARNING or MB_YESNO) then
+ exit;
+ end;
+
+ t := txtFilename.Text;
+ if t = '' then
+ begin
+ Application.MessageBox(PChar(TextByKey('render-status-nofilename')), 'Apophysis', 48);
+ Exit;
+ end;
+ if FileExists(t) then
+ if Application.MessageBox(PChar(Format(TextByKey('render-status-fileexists-message1'), [t]) + #13#10 + TextByKey('render-status-fileexists-message2')),
+ 'Apophysis', 52) = ID_NO then exit;
+ if not DirectoryExists(ExtractFileDir(t)) then
+ raise Exception.Create(TextByKey('render-status-pathdoesnotexist')); // AV
+
+ {Check for invalid values }
+ { AV: all MessageBoxes replaced by raised Exceptions for speed }
+ if (sample_density <= 0) then
+ raise Exception.Create(TextByKey('render-status-invaliddensity')); // AV
+
+ if filter_radius <= 0 then
+ raise Exception.Create(TextByKey('render-status-invalidfilterradius')); // AV
+ {
+ // AV: how is it possible, if (udOversample.Min = 1) and (txtOversample.ReadOnly = true)?
+ if Oversample < 1 then
+ raise Exception.Create(TextByKey('render-status-invalidoversample')); // AV
+ }
+ if ImageWidth < 1 then
+ raise Exception.Create(TextByKey('render-status-invalidwidth')); // AV
+
+ if ImageHeight < 1 then
+ raise Exception.Create(TextByKey('render-status-invalidheight')); // AV
+
+ if (ilm) then
+ if lim * 1024*1024 < ImageWidth * (int64(ImageHeight) * 4 + oversample) then begin
+ // Must be enough memory to hold the final image (RGBA)
+ if IDYES <> Application.MessageBox(PChar(TextByKey('render-status-maxmemorytoosmall')), 'Apophysis', MB_ICONERROR or MB_YESNO) then
+ exit;
+ end;
+
+ // AV: activate the taskbar progress
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.Normal; // AV
+ ProgressTaskBar.ProgressValue := ProgressBar2.Position; // AV
+
+ txtFilename.Enabled := false;
+ btnBrowse.Enabled := false;
+ cbWidth.Enabled := False;
+ cbHeight.Enabled := false;
+ txtDensity.Enabled := false;
+ txtFilterRadius.enabled := false;
+ txtOversample.Enabled := false;
+ //chkLimitMem.Enabled := true;
+ cbMaxMemory.Enabled := false;
+ //cbBitsPerSample.Enabled := false;
+ cmbPreset.enabled := false;
+ chkSave.enabled := false;
+ chkPostProcess.enabled := false;
+ chkShutdown.enabled := false;
+ btnSavePreset.enabled := false;
+ btnDeletePreset.enabled := false;
+ btnRender.Enabled := false;
+ btnSaveLog.Enabled := false;
+ btnPause.enabled := true;
+ btnCancel.Caption := TextByKey('common-cancel');
+ //chkMaintain.Enabled := false;
+ cbAspectRatio.Enabled := False;
+ StartTime := Now;
+
+ pnlWidth.Enabled := false;
+ pnlHeight.Enabled := false;
+ pnlDensity.Enabled := false;
+ pnlFilter.Enabled := false;
+ pnlOversample.Enabled := false;
+ pnlLimit.Enabled := false;
+ pnlTarget.Enabled := false;
+ //pnlBufferDepth.Enabled := false;
+
+ pnlWidth.Font.Color := clGrayText;
+ pnlHeight.Font.Color := clGrayText;
+ pnlDensity.Font.Color := clGrayText;
+ pnlFilter.Font.Color := clGrayText;
+ pnlOversample.Font.Color := clGrayText;
+ pnlLimit.Font.Color := clGrayText;
+ pnlTarget.Font.Color := clGrayText;
+ //pnlBufferDepth.Font.Color := clGrayText;
+
+ PageCtrl.TabIndex := 1;
+
+ if Output.Lines.Count >= 1000 then Output.Lines.Clear;
+
+ if bRenderAll then
+ begin
+ path := ExtractFilePath(FileName);
+ ext := ExtractFileExt(FileName);
+
+ if Assigned(Renderer) then begin
+ Output.Lines.Add(TimeToStr(Now) + TextByKey('render-status-shuttingdownrender'));
+ Renderer.Terminate;
+ Renderer.WaitFor;
+ Renderer.Free;
+ Renderer := nil;
+ end;
+
+ for iCurrFlame := 0 to MainForm.ListView1.Items.Count-1 do
+ begin
+ MainForm.ListView1.ItemIndex := iCurrFlame;
+ cp.Free;
+ cp := TControlPoint.Create;
+ cp.Copy(MainCP);
+ cp.cmap := maincp.cmap;
+ zoom := maincp.zoom;
+ Center[0] := MainForm.center[0];
+ Center[1] := MainForm.center[1];
+ FileName := path + cp.name + ext;
+ Output.Lines.Add('--- ' + Format(TextByKey('render-status-log-title'), [ExtractFileName(FileName)]) + ' ---');
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-size'), [ImageWidth, ImageHeight]));
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-quality'), [sample_density]));
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-oversampling'), [oversample, filter_radius]));
+ if SingleBuffer then
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-bufferdepth'), ['32-bit float']))
+ else
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-bufferdepth'), ['64-bit float']));
+
+ if (ilm) then
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-memorylimit'), [MaxMemory]))
+ else
+ if (UpperCase(ExtractFileExt(FileName)) = '.PNG') and
+ (ImageWidth * ImageHeight >= 20000000) then
+ begin
+ Output.Lines.Add(TextByKey('render-status-log-largepng-message1'));
+ Output.Lines.Add(TextByKey('render-status-log-largepng-message2'));
+ Output.Lines.Add(TextByKey('render-status-log-largepng-message3'));
+ end;
+
+ if not Assigned(Renderer) then
+ begin
+ // disable screensaver
+ SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
+
+ cp.sample_density := Sample_density;
+ cp.spatial_oversample := Oversample;
+ cp.spatial_filter_radius := Filter_Radius;
+ cp.AdjustScale(ImageWidth, ImageHeight);
+ cp.Transparency := (PNGTransparency <> 0) and (UpperCase(ExtractFileExt(FileName)) = '.PNG');
+ renderPath := ExtractFilePath(Filename);
+ if chkSave.checked then
+ MainForm.SaveXMLFlame(cp, ExtractFileName(FileName), renderPath + rendersAV);
+
+ oldProg:=0;
+ oldElapsed:=0;
+ edt:=0;
+ ApproxSamples := Round(sample_density * sqr(power(2, cp.zoom)) * int64(ImageHeight) * int64(ImageWidth) / sqr(oversample) );
+
+ try
+
+ if not bRenderAll then exit;
+ if iCurrFlame = MainForm.ListView1.Items.Count-1 then bRenderAll := false;
+
+ Renderer := TRenderThread.Create;
+ assert(Renderer <> nil);
+{
+ if chkThreadPriority.Checked then
+ Renderer.SetPriority(tpLower)
+ else
+ Renderer.SetPriority(tpNormal);
+}
+ Renderer.ExportBuffer := chkBinary.Checked;
+ // Renderer.BitsPerSample := BitsPerSample;
+ if (ilm) then
+ Renderer.MaxMem := lim; //StrToInt(cbMaxMemory.text);
+ Renderer.OnProgress := OnProgress;
+ Renderer.TargetHandle := self.Handle;
+ Renderer.SetCP(cp);
+
+ if chkEmbedFlame.checked then
+ Renderer.EmbedText(Trim(MainForm.RetrieveXML(cp))); // AV
+
+ Renderer.Priority := tpLower; // tpNormal;
+ Renderer.NrThreads := NrTreads;
+ Renderer.Output := Output.Lines;
+ Renderer.Resume;
+
+ if bRenderAll then Renderer.WaitFor;
+ while Renderer <> nil do Application.ProcessMessages; // wait for HandleThreadCompletion
+
+ except
+ Output.Lines.Add(TimeToStr(Now) + ' : ' + TextByKey('render-status-rendererror-log'));
+ //Application.MessageBox('Error while rendering!', 'Apophysis', 48);
+ end;
+ end;
+ end;
+ end else
+ begin
+ Output.Lines.Add('--- ' + Format(TextByKey('render-status-log-title'), [ExtractFileName(FileName)]) + '" ---');
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-size'), [ImageWidth, ImageHeight]));
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-quality'), [sample_density]));
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-oversampling'), [oversample, filter_radius]));
+
+ if SingleBuffer then
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-bufferdepth'), ['32-bit float']))
+ else
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-bufferdepth'), ['64-bit float']));
+
+ if (ilm) then
+ Output.Lines.Add(' ' + Format(TextByKey('render-status-log-memorylimit'), [lim]))
+ else
+ if (UpperCase(ExtractFileExt(FileName)) = '.PNG') and
+ (ImageWidth * ImageHeight >= 20000000) then
+ begin
+ Output.Lines.Add(TextByKey('render-status-log-largepng-message1'));
+ Output.Lines.Add(TextByKey('render-status-log-largepng-message2'));
+ Output.Lines.Add(TextByKey('render-status-log-largepng-message3'));
+ end;
+
+ if Assigned(Renderer) then begin
+ Output.Lines.Add(TimeToStr(Now) + TextByKey('render-status-shuttingdownrender'));
+ Renderer.Terminate;
+ Renderer.WaitFor;
+ Renderer.Free;
+ Renderer := nil;
+ end;
+
+ if not Assigned(Renderer) then
+ begin
+ // disable screensaver
+ SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
+
+ cp.sample_density := Sample_density;
+ cp.spatial_oversample := Oversample;
+ cp.spatial_filter_radius := Filter_Radius;
+ cp.AdjustScale(ImageWidth, ImageHeight);
+ cp.Transparency := (PNGTransparency <> 0) and (UpperCase(ExtractFileExt(FileName)) = '.PNG');
+ renderPath := ExtractFilePath(Filename);
+ if chkSave.checked then
+ MainForm.SaveXMLFlame(cp, ExtractFileName(FileName), renderPath + rendersAV);
+
+ oldProg:=0;
+ oldElapsed:=0;
+ edt:=0;
+ ApproxSamples := Round(sample_density * sqr(power(2, cp.zoom)) * int64(ImageHeight) * int64(ImageWidth) / sqr(oversample) );
+
+ try
+
+ Renderer := TRenderThread.Create;
+ assert(Renderer <> nil);
+
+ // Renderer.BitsPerSample := BitsPerSample;
+ if (ilm) then
+ Renderer.MaxMem := lim; //StrToInt(cbMaxMemory.text);
+ Renderer.ExportBuffer := chkBinary.Checked;
+ Renderer.OnProgress := OnProgress;
+ Renderer.TargetHandle := self.Handle;
+ Renderer.SetCP(cp);
+ if chkEmbedFlame.checked then
+ Renderer.EmbedText(Trim(MainForm.RetrieveXML(cp))); // AV
+ {
+ if chkThreadPriority.Checked then
+ Renderer.SetPriority(tpLower)
+ else
+ Renderer.SetPriority(tpNormal);
+ }
+ Renderer.Priority := tpLower;
+ Renderer.NrThreads := NrTreads;
+
+ Renderer.Output := Output.Lines;
+ Renderer.Resume;
+
+ except
+ Output.Lines.Add(TimeToStr(Now) + ' : ' + TextByKey('render-status-rendererror-log'));
+ Application.MessageBox(PChar(TextByKey('render-status-rendererror-message')), 'Apophysis', 48);
+ end;
+ end;
+ end;
+ // enable screensaver
+ SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);
+end;
+
+procedure TRenderForm.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+begin
+ { Read position from registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Render', False) then
+ begin
+ if Registry.ValueExists('Left') then
+ self.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ self.Top := Registry.ReadInteger('Top');
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+
+ SaveDialog.FileName := Filename;
+ case renderFileFormat of
+ 1: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.bmp');
+ 2: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.png');
+ 3: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.jpg');
+ end;
+ chkEmbedFlame.Enabled := (renderFileFormat = 2); // AV
+ chkEmbedFlame.Checked := (chkEmbedFlame.Enabled and EmbedFlame); // AV
+ chkSave.Checked := SaveInFlame; // AV
+ if (renderOversample < 1) or (renderOversample > 4) then
+ renderOversample := 2; // AV: prevent checks in future
+ txtOversample.Text := IntToStr(renderOversample);
+ Filter_Radius := max(renderFilterRadius, 0.1); // AV: fixed!
+ txtFilterRadius.Text := FloatToStr(RoundTo(Filter_Radius, -3)); // AV
+ cbWidth.Text := IntToStr(cp.Width);
+ cbHeight.Text := IntToStr(cp.Height);
+ ImageWidth := StrToInt(cbWidth.Text);
+ ImageHeight := StrToInt(cbHeight.Text);
+ // AV: fixed "Floating point division by zero" bug
+ sample_density := max(renderDensity, 10);
+ txtDensity.Text := FloatToStr(sample_density);
+ // BitsPerSample := renderBitsPerSample;
+ ShowMemoryStatus;
+ Ratio := ImageWidth / ImageHeight;
+ chkSaveIncompleteRenders.Checked := SaveIncompleteRenders;
+ chkPlaySound.Checked := PlaySoundOnRenderComplete; // AV
+end;
+
+procedure TRenderForm.txtWidthChange(Sender: TObject);
+begin
+ try
+ ImageWidth := StrToInt(cbWidth.Text);
+ if (cbAspectRatio.ItemIndex > 0) and cbWidth.Focused then
+ begin
+ ImageHeight := Round(ImageWidth / ratio);
+ cbHeight.Text := IntToStr(ImageHeight)
+ end;
+ except
+ end;
+ ShowMemoryStatus;
+end;
+
+procedure TRenderForm.txtHeightChange(Sender: TObject);
+begin
+ try
+ ImageHeight := StrToInt(cbHeight.Text);
+ if (cbAspectRatio.ItemIndex > 0) and cbHeight.Focused then
+ begin
+ ImageWidth := Round(ImageHeight * ratio);
+ cbWidth.Text := IntToStr(ImageWidth)
+ end;
+ except
+ end;
+ ShowMemoryStatus;
+end;
+
+procedure TRenderForm.txtOversampleChange(Sender: TObject);
+var
+ o: integer;
+begin
+ try
+ o := StrToInt(txtOversample.Text);
+ except
+ txtOversample.Text := IntToStr(Oversample);
+ exit;
+ end;
+ {
+ // AV: this text field is read-only, moved all checks to FormShow
+ if o > udOversample.Max then
+ begin
+ o := udOversample.Max;
+ txtOversample.Text := IntToStr(o);
+ end
+ else if o < udOversample.Min then
+ begin
+ o := udOversample.Min;
+ txtOversample.Text := IntToStr(o);
+ end;
+ }
+ Oversample := o;
+ ShowMemoryStatus;
+end;
+
+procedure TRenderForm.txtFilenameChange(Sender: TObject);
+var
+ ext : string;
+begin
+ filename := txtFilename.text;
+ ext := LowerCase(ExtractFileExt(filename));
+ chkEmbedFlame.Enabled := (ext = '.png'); // AV
+ chkEmbedFlame.Checked := (chkEmbedFlame.Enabled and EmbedFlame);
+end;
+
+procedure TRenderForm.btnCancelClick(Sender: TObject);
+begin
+ if Assigned(Renderer) or bRenderAll then
+ begin
+ if Assigned(Renderer) then
+ if Renderer.Suspended then begin
+ Renderer.Resume;
+ btnPause.caption := TextByKey('common-pause');
+ end;
+
+ if ConfirmStopRender then begin
+ if Application.MessageBox(PChar(TextByKey('render-status-confirmstop')), 'Apophysis', 36) = ID_NO then exit;
+ end;
+
+ bRenderAll := false;
+ if Assigned(Renderer) then
+ begin
+ if SaveIncompleteRenders and (not IsLimitingMemory) then
+ Renderer.BreakRender
+ else
+ Renderer.Terminate;
+ Renderer.WaitFor; // ?
+ end;
+
+ ProgressTaskBar.ProgressValue := 0; // AV
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.None; // AV
+ end else
+ Close;
+end;
+
+procedure TRenderForm.txtDensityChange(Sender: TObject);
+begin
+ Sample_Density := StrToFloatDef(txtDensity.Text, renderDensity); // AV
+ if Sample_Density > 0 then ShowMemoryStatus;
+end;
+
+procedure TRenderForm.txtDensityExit(Sender: TObject); // AV
+begin
+ Sample_Density := StrToFloatDef(txtDensity.Text, renderDensity);
+ txtDensity.Text := FloatToStr(Sample_Density);
+end;
+
+procedure TRenderForm.txtFilterRadiusExit(Sender: TObject);
+begin
+ // AV: we don't need try - except here
+ Filter_Radius := StrToFloatDef(txtFilterRadius.Text, renderFilterRadius);
+ txtFilterRadius.Text := FloatToStr(Filter_Radius); // AV
+end;
+
+procedure TRenderForm.FormActivate(Sender: TObject);
+begin
+ chkPlaySound.Checked := PlaySoundOnRenderComplete; // AV
+ ShowMemoryStatus; //lblCPUCores.Refresh;
+end;
+
+procedure TRenderForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Ext: string;
+ Registry: TRegistry;
+begin
+ Ext := ExtractFileExt(txtFileName.Text);
+ if Ext = '.bmp' then renderFileFormat := 1;
+ if Ext = '.png' then renderFileFormat := 2;
+ if (Ext = '.jpg') or (Ext = '.jpeg') then renderFileFormat := 3;
+ renderFilterRadius := Filter_Radius;
+ renderWidth := ImageWidth;
+ renderHeight := ImageHeight;
+ renderDensity := Sample_density;
+ renderOversample := Oversample;
+ // renderBitsPerSample := BitsPerSample;
+ EmbedFlame := chkEmbedFlame.Checked; // AV
+ SaveInFlame := chkSave.Checked; // AV
+
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Render', True) then
+ begin
+ Registry.WriteInteger('Top', Top);
+ Registry.WriteInteger('Left', Left);
+ end;
+ finally
+ Registry.Free;
+ end;
+end;
+
+procedure TRenderForm.btnPauseClick(Sender: TObject);
+begin
+ if Assigned(Renderer) then
+ if Renderer.Suspended = false then begin
+ renderer.Suspend;
+ btnPause.caption := TextByKey('common-resume');
+ btnSnapshot.Visible := true; // AV
+ // AV: displaying progress in yellow
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.Paused;
+ end else begin
+ renderer.Resume;
+ btnPause.caption := TextByKey('common-pause');
+ btnSnapshot.Visible := false; // AV
+ // AV: restore the taskbar progress
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.Normal;
+ end;
+end;
+
+procedure TRenderForm.FormCloseQuery(Sender: TObject;
+ var CanClose: Boolean);
+begin
+ if Assigned(Renderer) then
+ if Application.MessageBox(PChar(TextByKey('render-status-confirmstop')), 'Apophysis', 36) = ID_NO then
+ CanClose := False
+ else
+ begin
+ if Assigned(Renderer) then
+ begin
+ // AV: prevent Apo perpetual hanging when render is paused
+ if Renderer.Suspended then Renderer.Resume; // AV
+ Renderer.Terminate;
+ Renderer.WaitFor;
+ Renderer.Free; // AV
+ Renderer := nil; // AV
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.None; // AV
+ end;
+ end;
+end;
+
+procedure TRenderForm.btnSavePresetClick(Sender: TObject);
+var
+ IFile: TextFile;
+ Title, Filename: string;
+begin
+ SavePresetForm.txtPresetName.Text := cmbPreset.Text;
+ if SavePresetForm.ShowModal = mrOK then
+ begin
+ Title := Trim(SavePresetForm.txtPresetName.Text);
+ Filename := AppPath + 'Render presets.av';
+ try
+ AssignFile(IFile, FileName);
+ if FileExists(FileName) then
+ begin
+ if EntryExists(Title, FileName) then DeleteEntry(Title, FileName);
+ Append(IFile);
+ end
+ else
+ ReWrite(IFile);
+ WriteLn(IFile, Title + ' {');
+ WriteLn(IFile, Trim(cbWidth.text));
+ WriteLn(IFile, Trim(cbHeight.text));
+ WriteLn(IFile, Trim(txtDensity.text));
+ WriteLn(IFile, Trim(txtFilterRadius.text));
+ WriteLn(IFile, Trim(txtOversample.text));
+ WriteLn(IFile, ExtractFileExt(txtFileName.Text));
+ if (not IsLimitingMemory) then
+ WriteLn(IFile, 'true')
+ else
+ WriteLn(IFile, 'false');
+ WriteLn(IFile, IntToStr(cbMaxMemory.ItemIndex));
+ WriteLn(IFile, cbMaxMemory.Text);
+ WriteLn(IFile, '}');
+ WriteLn(IFile, '');
+ CloseFile(IFile);
+ except on EInOutError do
+ begin
+ Application.MessageBox(PChar(TextByKey('render-prestatus-saveerror-preset')),
+ PChar('Apophysis'), 16);
+ Exit;
+ end;
+ end;
+ ListPresets;
+ cmbPreset.ItemIndex := cmbPreset.Items.count - 1;
+ end;
+end;
+
+procedure TRenderForm.btnSnapshotClick(Sender: TObject);
+var
+ tryAgain: boolean;
+begin
+ if Assigned(Renderer) then
+ if Renderer.Suspended = true then
+ begin
+ repeat
+ tryAgain := false;
+ try
+ Renderer.DoSnapshot; // AV: to save mid-render images
+ Renderer.SaveImage(FileName);
+
+ if ShowRenderImage then // AV
+ if FileExists(FileName) then
+ ShellExecute(Application.handle, PChar('open'),
+ PChar(ExtractFileName(FileName)), nil, PChar(renderPath),
+ SW_SHOWNORMAL);
+ except
+ on e: Exception do begin
+ Output.Lines.Add(TimeToStr(Now) + ' : ' + TextByKey('render-status-saveerror-log'));
+ tryAgain := (Application.MessageBox(PChar(TextByKey('render-status-saveerror-message1') + #13#10 + e.Message +
+ #13#10 + TextByKey('render-status-saveerror-message1')), 'Error', MB_RETRYCANCEL or MB_ICONERROR) = IDRETRY);
+ // AV: displaying status in red
+ ProgressTaskBar.ProgressState := TTaskBarProgressState.Error;
+ end;
+ end;
+ until tryAgain = false;
+ end;
+end;
+
+procedure TRenderForm.btnBrowseClick(Sender: TObject);
+var
+ fn: string;
+ ext: string;
+begin
+ SaveDialog.Filename := Filename;
+ case renderFileFormat of
+ 1: SaveDialog.DefaultExt := 'bmp';
+ 2: SaveDialog.DefaultExt := 'png';
+ 3: SaveDialog.DefaultExt := 'jpg';
+ end;
+ SaveDialog.filterIndex := renderFileFormat;
+ SaveDialog.Filter := Format('%s|*.bmp;*.dib;*.jpg;*.jpeg|%s|*.bmp;*.dib|%s|*.jpg;*.jpeg|%s|*.png|%s|*.*',
+ [TextByKey('common-filter-allimages'), TextByKey('common-filter-bitmap'),
+ TextByKey('common-filter-jpeg'), TextByKey('common-filter-png'),
+ TextByKey('common-filter-allfiles')]);
+ if OpenSaveFileDialog(RenderForm, SaveDialog.DefaultExt, SaveDialog.Filter, SaveDialog.InitialDir, TextByKey('common-browse'), fn, false, true, false, false) then
+ //if SaveDialog.Execute then
+ begin
+ SaveDialog.FileName := fn;
+ ext := LowerCase(ExtractFileExt(fn));
+ if (ext = '.bmp') then renderFileFormat := 1;
+ if (ext = '.png') then renderFileFormat := 2;
+ if ((ext = '.jpg') or (ext = '.jpeg')) then renderFileFormat := 3;
+ {case SaveDialog.FilterIndex of
+ 1: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.bmp');
+ 2: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.png');
+ 3: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.jpg');
+ end; }
+ txtFileName.Text := ChangeFileExt(fn, ext);
+ //renderFileFormat := SaveDialog.FilterIndex;
+ renderPath := ExtractFilePath(SaveDialog.Filename);
+
+ end;
+end;
+
+procedure TRenderForm.ListPresets;
+{ List identifiers in file }
+var
+ i, p: integer;
+ Title: string;
+ FStrings: TStringList;
+begin
+ FStrings := TStringList.Create;
+ try
+ if fileExists(AppPath + 'Render presets.av') then begin
+ FStrings.LoadFromFile(AppPath + 'Render presets.av');
+ cmbPreset.Clear;
+ if (Pos('{', FStrings.Text) <> 0) then begin
+ for i := 0 to FStrings.Count - 1 do begin
+ p := Pos('{', FStrings[i]);
+ if (p <> 0) then begin
+ Title := Trim(Copy(FStrings[i], 1, p - 1));
+ if Title <> '' then begin
+ cmbPreset.Items.add(Copy(FStrings[i], 1, p - 1));
+ end;
+ end;
+ end;
+ end;
+ end;
+ finally
+ FStrings.Free;
+ end;
+end;
+
+procedure TRenderForm.btnDeletePresetClick(Sender: TObject);
+var
+ Title, Filename: string;
+begin
+ Title := Trim(cmbPreset.Text);
+ if Title = '' then exit;
+ Filename := AppPath + 'Render presets.av';
+ if EntryExists(Title, FileName) then DeleteEntry(Title, FileName);
+ ListPresets;
+end;
+
+procedure TRenderForm.cmbPresetChange(Sender: TObject);
+var
+ chk: byte; //boolean; // AV
+ i, j: integer;
+ FStrings: TStringList;
+ Title, Filename: string;
+begin
+ Title := Trim(cmbPreset.Text);
+ Filename := AppPath + 'Render presets.av'; // AV: added file extension
+ if Title = '' then exit;
+ if EntryExists(Title, FileName) then
+ begin
+ // Load preset
+ FStrings := TStringList.Create;
+ try
+ FStrings.LoadFromFile(Filename);
+ for i := 0 to FStrings.Count - 1 do
+ if Pos(LowerCase(Title) + ' {', Lowercase(FStrings[i])) <> 0 then
+ begin
+ //chk := chkMaintain.checked;
+ //chkMaintain.Checked := False;
+ chk := cbAspectRatio.ItemIndex; // AV
+ cbAspectRatio.ItemIndex := 0;
+ j := i + 1;
+ cbWidth.Text := FStrings[j];
+ inc(j);
+ cbHeight.text := FStrings[j];
+ //chkMaintain.Checked := chk;
+ cbAspectRatio.ItemIndex := chk;
+ inc(j);
+ txtDensity.text := FStrings[j];
+ inc(j);
+ txtFilterRadius.text := FStrings[j];
+ inc(j);
+ txtOversample.text := FStrings[j];
+ inc(j);
+ txtFileName.Text := ChangeFileExt(txtFileName.Text, FStrings[j]);
+ inc(j);
+ //if Fstrings[j] = 'true' then (not IsLimitingMemory) else chkLimitMem.checked := false;
+ inc(j);
+ cbMaxMemory.ItemIndex := StrToInt(Fstrings[j]);
+ //cbMaxMemory.enabled := chkLimitMem.checked;
+ inc(j);
+ cbMaxMemory.Text := Fstrings[j];
+ break;
+ end;
+ finally
+ FStrings.Free;
+ end
+ end;
+ ImageWidth := StrToInt(cbWidth.Text);
+ ImageHeight := StrToInt(cbHeight.Text);
+ Sample_Density := StrToFloat(txtDensity.Text);
+ ShowMemoryStatus;
+end;
+
+{
+procedure TRenderForm.chkMaintainClick(Sender: TObject);
+begin
+ Ratio := ImageWidth / ImageHeight;
+end;
+}
+
+procedure TRenderForm.DoPostProcess;
+begin
+ frmPostProcess.cp := cp;
+ frmPostProcess.SetRenderer(Renderer.GetRenderer);
+ frmPostProcess.SetControlPoint(CP);
+ frmPostProcess.SetImageName(FileName);
+ frmPostProcess.Show;
+end;
+
+function TRenderForm.WindowsExit(RebootParam: Longword = EWX_POWEROFF or EWX_FORCE): Boolean;
+var
+ TTokenHd: THandle;
+ TTokenPvg: TTokenPrivileges;
+ cbtpPrevious: DWORD;
+ rTTokenPvg: TTokenPrivileges;
+ pcbtpPreviousRequired: DWORD;
+ tpResult: Boolean;
+const
+ SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
+begin
+ if ((GetWinVersion = wvWinNT) or
+ (GetWinVersion = wvWin2000) or
+ (GetWinVersion = wvWinXP) or
+ (GetWinVersion = wvWinVista) or
+ (GetWinVersion = wvWin7) or
+ (GetWinVersion = wvWinFutureFromOuterSpace)) then
+ begin
+ tpResult := OpenProcessToken(GetCurrentProcess(),
+ TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
+ TTokenHd);
+ if tpResult then
+ begin
+ tpResult := LookupPrivilegeValue(nil,
+ SE_SHUTDOWN_NAME,
+ TTokenPvg.Privileges[0].Luid);
+ TTokenPvg.PrivilegeCount := 1;
+ TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
+ cbtpPrevious := SizeOf(rTTokenPvg);
+ pcbtpPreviousRequired := 0;
+ if tpResult then
+ Windows.AdjustTokenPrivileges(TTokenHd,
+ False,
+ TTokenPvg,
+ cbtpPrevious,
+ rTTokenPvg,
+ pcbtpPreviousRequired);
+ end;
+ end;
+ Result := ExitWindowsEx(RebootParam, 0);
+end;
+
+procedure TRenderForm.chkPlaySoundClick(Sender: TObject);
+begin
+ PlaySoundOnRenderComplete := chkPlaySound.Checked;
+end;
+
+procedure TRenderForm.chkSaveIncompleteRendersClick(Sender: TObject);
+begin
+ SaveIncompleteRenders := chkSaveIncompleteRenders.Checked;
+end;
+
+procedure TRenderForm.btnGoToClick(Sender: TObject);
+var
+ path:string;
+begin
+ path := ExtractFilePath(txtFilename.Text);
+ if (path <> '') then WinShellExecute('open', path);
+end;
+
+
+procedure TRenderForm.cbAspectRatioChange(Sender: TObject);
+begin
+ case cbAspectRatio.ItemIndex of
+ 1: Ratio := ImageWidth / ImageHeight; // AV: replaced "Keep aspect ratio"
+ 2: Ratio := 1.5;
+ 3: Ratio := 4 / 3;
+ 4: Ratio := 1.25;
+ 5: Ratio := 16 / 9;
+ 6: Ratio := 1.6;
+ 7: Ratio := 21 / 9;
+ end;
+end;
+
+procedure TRenderForm.cbHeightExit(Sender: TObject); // AV
+begin
+ ImageHeight := StrToIntDef(cbHeight.Text, renderHeight);
+ cbHeight.Text := IntToStr(ImageHeight);
+end;
+
+procedure TRenderForm.cbWidthExit(Sender: TObject); // AV
+begin
+ ImageWidth := StrToIntDef(cbWidth.Text, renderWidth);
+ cbWidth.Text := IntToStr(ImageWidth);
+end;
+
+procedure TRenderForm.cbMaxMemoryChange(Sender: TObject);
+begin
+ //cbMaxMemory.enabled := IsLimitingMemory;
+ chkPostProcess.Enabled := not IsLimitingMemory;
+ chkSaveIncompleteRenders.Enabled := not IsLimitingMemory;
+ //btnRender.Enabled := (ApproxMemory <= PhysicalMemory) or (cbMaxMemory.ItemIndex > 0);
+end;
+
+procedure TRenderForm.btnDonateClick(Sender: TObject);
+begin
+ WinShellExecute('open', 'https://www.donationalerts.com/r/fract_alice');
+end;
+
+procedure TRenderForm.btnSaveLogClick(Sender: TObject);
+var
+ fn: string;
+ sl: TStringList;
+begin
+ if OpenSaveFileDialog(RenderForm, '.log',
+ Format('Render-Log (*.txt;*.log)|*.txt;*.log|%s|*.*', [TextByKey('common-filter-allfiles')]),
+ SaveDialog.InitialDir, TextByKey('common-browse'), fn, false, true, false, false)
+ then begin
+ sl := TStringList.Create;
+ sl.Text := Output.Text;
+ sl.SaveToFile(fn);
+ sl.Destroy;
+ end;
+end;
+
+end.
+
diff --git a/Forms/Fullscreen.dfm b/Forms/Fullscreen.dfm
new file mode 100644
index 0000000..f7f52d9
--- /dev/null
+++ b/Forms/Fullscreen.dfm
@@ -0,0 +1,58 @@
+object FullscreenForm: TFullscreenForm
+ Left = 439
+ Top = 325
+ BorderStyle = bsNone
+ Caption = 'FullscreenForm'
+ ClientHeight = 131
+ ClientWidth = 186
+ Color = clBlack
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ PopupMenu = FullscreenPopup
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnDblClick = ImageDblClick
+ OnDestroy = FormDestroy
+ OnKeyPress = FormKeyPress
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Image: TImage
+ Left = 0
+ Top = 0
+ Width = 186
+ Height = 131
+ PopupMenu = FullscreenPopup
+ OnDblClick = ImageDblClick
+ end
+ object Timelimiter: TTimer
+ Enabled = False
+ Interval = 2000
+ OnTimer = TimelimiterOnTimer
+ Left = 8
+ Top = 8
+ end
+ object FullscreenPopup: TPopupMenu
+ Left = 40
+ Top = 8
+ object RenderStop: TMenuItem
+ Caption = '&Stop Render'
+ OnClick = RenderStopClick
+ end
+ object RenderMore: TMenuItem
+ Caption = 'Render &More'
+ OnClick = RenderMoreClick
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object Exit1: TMenuItem
+ Caption = '&Close'
+ OnClick = ImageDblClick
+ end
+ end
+end
diff --git a/Forms/Fullscreen.pas b/Forms/Fullscreen.pas
new file mode 100644
index 0000000..d2d7dcf
--- /dev/null
+++ b/Forms/Fullscreen.pas
@@ -0,0 +1,344 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit Fullscreen;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ Menus, ExtCtrls, ControlPoint, RenderThread, Translation;
+
+type
+ TFullscreenForm = class(TForm)
+ Image: TImage;
+ Timelimiter: TTimer;
+ FullscreenPopup: TPopupMenu;
+ RenderStop: TMenuItem;
+ N1: TMenuItem;
+ Exit1: TMenuItem;
+ RenderMore: TMenuItem;
+ procedure FormShow(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure FormKeyPress(Sender: TObject; var Key: Char);
+ procedure ImageDblClick(Sender: TObject);
+ procedure TimelimiterOnTimer(Sender: TObject);
+ procedure RenderStopClick(Sender: TObject);
+ procedure RenderMoreClick(Sender: TObject);
+
+ private
+ Remainder, StartTime, t: double;
+ imgLeft, imgTop,
+ imgWidth, imgHeight: integer;
+ Closing: boolean;
+
+ Renderer: TRenderThread;
+
+ procedure showTaskbar;
+ procedure hideTaskbar;
+ procedure DrawFlame;
+ procedure OnProgress(prog: double);
+ procedure HandleThreadCompletion(var Message: TMessage);
+ message WM_THREAD_COMPLETE;
+ procedure HandleThreadTermination(var Message: TMessage);
+ message WM_THREAD_TERMINATE;
+
+ public
+ Calculate : boolean;
+ cp: TControlPoint;
+ Zoom: double;
+ center: array[0..1] of double;
+
+ ActiveForm: TForm;
+ end;
+
+var
+ FullscreenForm: TFullscreenForm;
+
+implementation
+
+uses
+ Main, Math, Global,
+ Tracer;
+
+{$R *.DFM}
+
+procedure Trace1(const str: string);
+begin
+ if TraceLevel >= 1 then
+ TraceForm.FullscreenTrace.Lines.Add('. ' + str);
+end;
+
+procedure Trace2(const str: string);
+begin
+ if TraceLevel >= 2 then
+ TraceForm.FullscreenTrace.Lines.Add('. . ' + str);
+end;
+
+procedure TFullscreenForm.DrawFlame;
+var
+ r: double;
+begin
+ if (cp.width / cp.height) > (ClientWidth / ClientHeight) then
+ begin
+ imgWidth := ClientWidth;
+ r := cp.width / imgWidth;
+ imgHeight := round(cp.height / r);
+ imgLeft := 1;
+ imgTop := (ClientHeight - imgHeight) div 2;
+ end
+ else begin
+ imgHeight := ClientHeight;
+ r := cp.height / imgHeight;
+ imgWidth := round(cp.Width / r);
+ imgTop := 1;
+ imgLeft := (ClientWidth - ImgWidth) div 2;
+ end;
+ cp.AdjustScale(imgWidth, imgHeight);
+
+// cp.Zoom := MainForm.Zoom;
+// cp.center[0] := MainForm.center[0];
+// cp.center[1] := MainForm.center[1];
+ cp.sample_density := defSampleDensity;
+ StartTime := Now;
+ t := now;
+ Remainder := 1;
+
+ if Assigned(Renderer) then begin // hmm...
+ Trace2('Killing previous RenderThread #' + inttostr(Renderer.ThreadID));
+ Renderer.Terminate;
+ Renderer.WaitFor;
+
+ while Renderer <> nil do
+ Application.ProcessMessages; // HandleThreadTermination kinda should be called here...(?)
+ end;
+
+ assert(not assigned(renderer), 'Render thread is still running!?');
+
+ Renderer := TRenderThread.Create; // Hmm... Why do we use RenderThread here, anyway? :-\
+ Renderer.TargetHandle := Handle;
+ Renderer.OnProgress := OnProgress;
+ Renderer.NrThreads := NrTreads; // AV: fixed Apo7X glitch here
+ if TraceLevel > 0 then Renderer.Output := TraceForm.FullscreenTrace.Lines;
+ Renderer.SetCP(cp);
+
+ Renderer.WaitForMore := true;
+ RenderStop.Enabled := true;
+ RenderMore.Enabled := false;
+
+ Renderer.Resume;
+end;
+
+procedure TFullscreenForm.HandleThreadCompletion(var Message: TMessage);
+var
+ bm: TBitmap;
+begin
+ Trace2(MsgComplete + IntToStr(message.LParam));
+ if not Assigned(Renderer) then begin
+ Trace2(MsgNotAssigned);
+ exit;
+ end;
+ if Renderer.ThreadID <> message.LParam then begin
+ Trace2(MsgAnotherRunning);
+ exit;
+ end;
+
+ if Assigned(Renderer) then
+ begin
+ bm := TBitmap.Create;
+ bm.assign(Renderer.GetImage);
+ Image.SetBounds(imgLeft, imgTop, imgWidth, imgHeight);
+ Image.Picture.Graphic := bm;
+ bm.Free;
+ end;
+
+ RenderStop.Enabled := false;
+ RenderMore.Enabled := true;
+
+ TimeLimiter.Enabled := false;
+end;
+
+procedure TFullscreenForm.HandleThreadTermination(var Message: TMessage);
+var
+ bm: TBitmap;
+begin
+ Trace2(MsgTerminated + IntToStr(message.LParam));
+ if not Assigned(Renderer) then begin
+ Trace2(MsgNotAssigned);
+ exit;
+ end;
+ if Renderer.ThreadID <> message.LParam then begin
+ Trace2(MsgAnotherRunning);
+ exit;
+ end;
+
+ RenderStop.Enabled := false;
+ RenderMore.Enabled := false;
+
+ TimeLimiter.Enabled := false;
+end;
+
+procedure TFullscreenForm.OnProgress(prog: double);
+begin
+ prog := (Renderer.Slice + Prog) / Renderer.NrSlices;
+ Canvas.Lock;
+ try
+ if prog >= 1 then
+ begin
+ Canvas.Brush.Color := clBlack;
+ Canvas.FillRect(Rect(5, ClientHeight - 15, ClientWidth - 5, ClientHeight - 5));
+ end
+ else if prog >= 0 then begin
+ Canvas.Brush.Color := clTeal;
+ Canvas.FrameRect(Rect(5, ClientHeight - 15, ClientWidth - 5, ClientHeight - 5));
+ Canvas.Brush.Color := clTeal;
+ Canvas.Fillrect(Rect(7, ClientHeight - 13, 7 + Round(prog * (ClientWidth - 14)), ClientHeight - 7));
+ Canvas.Brush.Color := clBlack;
+ Canvas.Fillrect(Rect(7 + Round(prog * (ClientWidth - 14)), ClientHeight - 13, ClientWidth - 7, ClientHeight - 7));
+ end;
+ finally
+ Canvas.Unlock;
+ end;
+ //Application.ProcessMessages;
+end;
+
+procedure TFullscreenForm.hideTaskbar;
+var wndHandle: THandle;
+ wndClass: array[0..50] of Char;
+begin
+ StrPCopy(@wndClass[0], 'Shell_TrayWnd');
+ wndHandle := FindWindow(@wndClass[0], nil);
+ ShowWindow(wndHandle, SW_HIDE);
+end;
+
+procedure TFullscreenForm.showTaskbar;
+var wndHandle: THandle;
+ wndClass: array[0..50] of Char;
+begin
+ StrPCopy(@wndClass[0], 'Shell_TrayWnd');
+ wndHandle := FindWindow(@wndClass[0], nil);
+ ShowWindow(wndHandle, SW_RESTORE);
+end;
+
+procedure TFullscreenForm.FormShow(Sender: TObject);
+begin
+ Trace1('--- Opening Fullscreen View ---');
+
+ if Image.Width < ClientWidth then
+ Image.Left := (ClientWidth - Image.Width) div 2;
+ if Image.Height < ClientHeight then
+ Image.Top := (ClientHeight - Image.Height) div 2;
+
+ Closing := false;
+ TimeLimiter.Enabled := false;
+
+ RenderStop.Enabled := false;
+ RenderMore.Enabled := false;
+
+ MainForm.mnuFullScreen.enabled := true;
+ HideTaskbar;
+
+ if calculate then
+ DrawFlame;
+end;
+
+procedure TFullscreenForm.FormClose(Sender: TObject;
+ var Action: TCloseAction);
+begin
+ Closing := true;
+ if Assigned(Renderer) then begin
+ if Renderer.Suspended then begin
+ Renderer.WaitForMore := false;
+ Renderer.Resume;
+ end;
+ Trace2('Form closing: killing RenderThread #' + inttostr(Renderer.ThreadID));
+ Renderer.Terminate;
+ Renderer.WaitFor;
+
+ Trace2('Destroying RenderThread #' + IntToStr(Renderer.ThreadID));
+ Renderer.Free;
+ Renderer := nil;
+ end;
+ Trace1('--- Closing Fullscreen View ---');
+ Trace1('');
+ ShowTaskbar;
+
+ ActiveForm.SetFocus;
+end;
+
+procedure TFullscreenForm.FormCreate(Sender: TObject);
+begin
+ Exit1.Caption := TextByKey('common-close');
+ RenderMore.Caption := TextByKey('fullscreen-popup-rendermore');
+ RenderStop.Caption := TextByKey('fullscreen-popup-stoprender');
+ cp := TControlPoint.Create;
+end;
+
+procedure TFullscreenForm.FormDestroy(Sender: TObject);
+begin
+ if assigned(Renderer) then begin
+ Renderer.Terminate;
+ Renderer.WaitFor;
+ Renderer.Free;
+ end;
+ cp.Free;
+end;
+
+procedure TFullscreenForm.FormKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key = ' ' then begin
+ if RenderStop.Enabled then RenderStop.Click
+ else if RenderMore.Enabled then RenderMore.Click;
+ end
+ else Close;
+end;
+
+procedure TFullscreenForm.ImageDblClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TFullscreenForm.TimelimiterOnTimer(Sender: TObject);
+begin
+ //if assigned(Renderer) then Renderer.Break;
+ TimeLimiter.Enabled := false;
+end;
+
+procedure TFullscreenForm.RenderStopClick(Sender: TObject);
+begin
+ if assigned(Renderer) then Renderer.BreakRender;
+end;
+
+procedure TFullscreenForm.RenderMoreClick(Sender: TObject);
+begin
+ if assigned(Renderer) and Renderer.Suspended then begin
+ Renderer.Resume;
+ RenderStop.Enabled := true;
+ RenderMore.Enabled := false;
+ end;
+end;
+
+end.
+
diff --git a/Forms/LoadTracker.dfm b/Forms/LoadTracker.dfm
new file mode 100644
index 0000000..55513b5
--- /dev/null
+++ b/Forms/LoadTracker.dfm
@@ -0,0 +1,120 @@
+object LoadForm: TLoadForm
+ Left = 443
+ Top = 274
+ ActiveControl = Button1
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Caption = 'Messages'
+ ClientHeight = 388
+ ClientWidth = 662
+ Color = clBtnFace
+ Constraints.MinHeight = 275
+ Constraints.MinWidth = 550
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ FormStyle = fsStayOnTop
+ Icon.Data = {
+ 0000010001001010000001002000680400001600000028000000100000002000
+ 0000010020000000000040040000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000006349
+ 35146349352E927A69FF8C7563FF87705EFF6349352E7F6654FF7A624FFF755D
+ 4AFF6349352E6E5441FF6A513EFF674E3AFF6349352E00000000000000006349
+ 352EAE9888FFEFE3DDFFF2E7E1FFEDDFD7FF836B59FFB79B8BFFDBBDADFFD9B7
+ A6FF725946FFAE8B77FFD0A692FFCC9E87FF654B38FF6349352E00000000B7A2
+ 93FFFBF8F7FFF9F4F2FFF7F0ECFFF4EBE6FFF1E5DFFF7F6754FF7A624FFF765D
+ 4AFF735946FF6E5542FF6B523EFF674E3AFF654B38FF634935FF00000000B7A2
+ 93FFFDFCFBFFFBF9F7FFFAF5F2FFF7EFEDFFF4EAE6FFF2E5DFFFDDDCD7FFDFD7
+ CEFFDECDC0FFDEC5B6FFDEBFACFFDBBAA6FFD8B5A3FF634935FF00000000B7A2
+ 93FFFFFFFFFFB47F65FFB47F64FFEDDDD5FFB37E63FFF4EBE6FFF1E5DFFFEFDF
+ D7FFEBD9D1FFE8D3C9FFE5CDC1FFE1C6B9FFD6B3A1FF634A35FF00000000B9A4
+ 95FFFFFFFFFFFFFFFFFFFDFCFCFFFCF9F7FFFAF4F2FFF6F0ECFFF4EBE5FFF2E5
+ DFFFEEDFD8FFEBD9D0FFE8D3C8FFE5CCC1FFDBBDADFF634A36FF00000000BDA7
+ 98FFFFFFFFFF968E88FFEEDED7FF968E87FFEDDDD6FF968D86FF958C85FFF4EB
+ E6FFF2E5DFFFEFDFD8FFECD9D0FFE8D3C9FFE0C7BAFF634A35FF00000000C1AB
+ 9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFFFBF8F7FFFAF4F2FFF7F0
+ ECFFF4EAE6FFF1E5DFFFEEDFD7FFEBD9D0FFE6D1C6FF634A35FF00000000C5AF
+ A0FFFFFFFFFFB48065FFB48065FF968E88FFC2B0A3FF968E87FF968E86FFF9F4
+ F2FFF7EFECFFF4EBE6FFF2E5DFFFEFDFD8FFEADBD1FF634936FF00000000C8B2
+ A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFFFCF8
+ F7FFF9F5F2FFF7F0ECFFF4EBE6FFF1E5DFFFEEE2DAFF644A36FF00000000C9B4
+ A5FFFFFFFFFFFFFFFFFF66A365FF66A365FF66A365FFC0B4ADFF66A365FF66A3
+ 65FF66A264FFFAF5F2FFF7F0ECFFF4EBE6FFEEE2DAFF644A36FF00000000C8B2
+ A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFCFBFFFBF9F7FFFAF4F2FFF7F0EDFFF3EAE4FF644A36FF00000000C8B2
+ A3FFCAB4A5FFCBB5A6FFCAB4A5FFC9B3A4FFC7B2A3FFC6B0A1FFC3AE9FFFC1AC
+ 9DFFBFAA9BFFBDA899FFBBA697FFB9A495FFB8A394FFB7A293FF000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ 0000FFFF00000003000000010000000100000001000000010000000100000001
+ 0000000100000001000000010000000100000001000000010000FFFF0000}
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ OnResize = FormResize
+ DesignSize = (
+ 662
+ 388)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Bevel1: TBevel
+ Left = 7
+ Top = 7
+ Width = 533
+ Height = 308
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Style = bsRaised
+ end
+ object Button1: TButton
+ Left = 527
+ Top = 359
+ Width = 110
+ Height = 22
+ Anchors = [akRight, akBottom]
+ Caption = 'Close'
+ TabOrder = 0
+ OnClick = Button1Click
+ end
+ object CheckBox1: TCheckBox
+ Left = 8
+ Top = 360
+ Width = 384
+ Height = 24
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = 'Automatically open this window when loading flame'
+ TabOrder = 1
+ WordWrap = True
+ OnClick = CheckBox1Click
+ end
+ object Button2: TButton
+ Left = 406
+ Top = 359
+ Width = 110
+ Height = 22
+ Anchors = [akRight, akBottom]
+ Caption = 'Clear'
+ TabOrder = 2
+ OnClick = Button2Click
+ end
+ object Output: TMemo
+ Left = 8
+ Top = 8
+ Width = 528
+ Height = 303
+ BevelOuter = bvRaised
+ BorderStyle = bsNone
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBtnText
+ Font.Height = -12
+ Font.Name = 'Courier New'
+ Font.Style = []
+ ParentFont = False
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 3
+ end
+end
diff --git a/Forms/LoadTracker.pas b/Forms/LoadTracker.pas
new file mode 100644
index 0000000..3d59b3c
--- /dev/null
+++ b/Forms/LoadTracker.pas
@@ -0,0 +1,105 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit LoadTracker;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, Global, Settings, ExtCtrls, Translation;
+
+type
+ TLoadForm = class(TForm)
+ Button1: TButton;
+ CheckBox1: TCheckBox;
+ Button2: TButton;
+ Bevel1: TBevel;
+ Output: TMemo;
+ procedure FormResize(Sender: TObject);
+ procedure Button1Click(Sender: TObject);
+ procedure CheckBox1Click(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure Button2Click(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ LoadForm: TLoadForm;
+
+implementation
+
+{$R *.dfm}
+
+procedure TLoadForm.Button1Click(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TLoadForm.CheckBox1Click(Sender: TObject);
+begin
+ AutoOpenLog := CheckBox1.Checked;
+end;
+
+procedure TLoadForm.FormCreate(Sender: TObject);
+begin
+ Button2.Caption := TextByKey('common-clear');
+ Button1.Caption := TextByKey('common-close');
+ self.Caption := TextByKey('messages-title');
+ CheckBox1.Caption := TextByKey('messages-openautomatically');
+ CheckBox1.Checked := AutoOpenLog;
+end;
+
+procedure TLoadForm.Button2Click(Sender: TObject);
+begin
+ Output.Text := '';
+end;
+
+procedure TLoadForm.FormResize(Sender: TObject);
+begin
+ CheckBox1.Left := 2;
+ Checkbox1.Top := self.ClientHeight - Checkbox1.Height - 2;
+ CheckBox1.Width := self.ClientWidth - button1.Width - button2.Width - 8;
+
+ Button1.Left := self.ClientWidth - button1.Width - button2.Width - 4;
+ Button1.Top := self.ClientHeight - Checkbox1.Height - 2 + Checkbox1.Height div 2 - Button1.Height div 2;
+
+ Button2.Left := self.ClientWidth - button2.Width - 2;
+ Button2.Top := Button1.Top;
+
+ Bevel1.Left := 2;
+ Bevel1.Top := 2;
+ Bevel1.Width := self.ClientWidth - 4;
+ Bevel1.Height := self.ClientHeight - 6 - checkbox1.Height;
+
+ Output.Left := Bevel1.Left + 2;
+ Output.Top := Bevel1.Top + 2;
+ Output.Width := Bevel1.Width - 4;
+ Output.Height := Bevel1.Height -4;
+end;
+
+end.
diff --git a/Forms/Main.dfm b/Forms/Main.dfm
new file mode 100644
index 0000000..046164d
--- /dev/null
+++ b/Forms/Main.dfm
@@ -0,0 +1,4009 @@
+object MainForm: TMainForm
+ Left = 265
+ Top = 172
+ Caption = 'Apophysis AV'
+ ClientHeight = 692
+ ClientWidth = 1000
+ Color = clBtnFace
+ Constraints.MinHeight = 240
+ Constraints.MinWidth = 320
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001818000001000800C80600001600000028000000180000003000
+ 00000100080000000000A0020000000000000000000000000000000000000000
+ 0000002040000020600040204000004040000040600000008000002080000020
+ A0004020A00000408000006080000040A0000060A000404080004060A0000020
+ C0000020E0000040C0000060C0000040E0000060E0004040E0004060E0000080
+ A0004080A0000080C00000A0C0000080E00000A0E0004080C00040A0C0004080
+ E00040A0E00000C0E00040C0E00040E0E00080E0E000C0DCC000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000001000101020200010102000200000100000100000000000001010700
+ 0101020A08010005010102000001000000000000000000020A05012120010002
+ 0D0201000000000000000101000000010414010722080C102107020200000000
+ 000001010001020A0B0C1C131D141D150D02010C020000000000010100010202
+ 07081D1C15121D1C020003001301000000000000010201081E211C1C200D0721
+ 21150A000001010100010000040A02020C141D23251408121F0A020A05010000
+ 00000000021815010A141C252517080C21070A0C1C01000000000A1C17081B1C
+ 0201162024231223060C15000001000100000101020C12230C07021523211313
+ 100C07000101000100010100020520210C01001E21200C1C0701000000000000
+ 00020112190821220F00071C210C01010101000001000101010812121A132421
+ 0C020C1321120A020A010001000001000E08071A12172323171701072407121C
+ 0B01000000000D15020D0A240614172623112002021B0B01010100010000010A
+ 010C0F1D081217251D1C120A07020500000000010100010001171723120C141C
+ 1524130F07020100010000000000050F010000101D1C121C1C0C120202010101
+ 010001000000000A07010A201320141C121D0219070201000100000000000000
+ 02050D2010021A15000802050000000002000000000000000002021C0001091D
+ 13000D02010100000000000000000100000200050101020A0201010101000100
+ 0000000000000000000200020001070001000201050000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000}
+ KeyPreview = True
+ Menu = MainMenu
+ OldCreateOrder = True
+ Position = poDefault
+ OnActivate = FormActivate
+ OnClose = FormClose
+ OnCloseQuery = FormCloseQuery
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnDeactivate = FormDeactivate
+ OnKeyDown = FormKeyUpDown
+ OnKeyPress = FormKeyPress
+ OnKeyUp = FormKeyUpDown
+ OnResize = FormResize
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Image1: TImage
+ Left = 48
+ Top = 104
+ Width = 105
+ Height = 105
+ end
+ object Splitter: TSplitter
+ Left = 161
+ Top = 22
+ Width = 4
+ Height = 651
+ ExplicitHeight = 750
+ end
+ object BackPanel: TPanel
+ Left = 165
+ Top = 22
+ Width = 835
+ Height = 651
+ Align = alClient
+ BevelInner = bvLowered
+ BevelOuter = bvNone
+ Color = clAppWorkSpace
+ TabOrder = 0
+ OnResize = BackPanelResize
+ object Image: TImage
+ Left = 1
+ Top = 1
+ Width = 833
+ Height = 649
+ Align = alClient
+ Anchors = []
+ Center = True
+ PopupMenu = DisplayPopup
+ Proportional = True
+ OnDblClick = ImageDblClick
+ OnMouseDown = ImageMouseDown
+ OnMouseMove = ImageMouseMove
+ OnMouseUp = ImageMouseUp
+ ExplicitTop = -4
+ end
+ end
+ object ListBackPanel: TPanel
+ Left = 0
+ Top = 22
+ Width = 161
+ Height = 651
+ Align = alLeft
+ Alignment = taLeftJustify
+ BevelInner = bvLowered
+ BevelOuter = bvNone
+ Color = clWindow
+ Ctl3D = True
+ ParentCtl3D = False
+ TabOrder = 1
+ object Shape1: TShape
+ Left = 1
+ Top = 1
+ Width = 159
+ Height = 649
+ Align = alClient
+ Brush.Color = clWindow
+ Pen.Color = clWindow
+ ExplicitHeight = 748
+ end
+ object ListView1: TListView
+ Left = 1
+ Top = 1
+ Width = 159
+ Height = 649
+ Align = alClient
+ BorderStyle = bsNone
+ Columns = <
+ item
+ Caption = 'Title'
+ Width = 160
+ end
+ item
+ Width = 40
+ end>
+ DoubleBuffered = True
+ FlatScrollBars = True
+ IconOptions.AutoArrange = True
+ LargeImages = UsedThumbnails
+ ParentDoubleBuffered = False
+ PopupMenu = ListPopUp
+ TabOrder = 0
+ OnChange = ListViewChange
+ OnColumnClick = ListViewColumnClick
+ OnDblClick = ListViewDblClick
+ OnEdited = ListViewEdited
+ end
+ end
+ object cbMain: TCoolBar
+ Left = 0
+ Top = 0
+ Width = 1000
+ Height = 22
+ AutoSize = True
+ BandBorderStyle = bsNone
+ Bands = <
+ item
+ Control = ToolBar
+ FixedBackground = False
+ ImageIndex = -1
+ MinHeight = 22
+ MinWidth = 100
+ Width = 998
+ end>
+ Color = clBtnFace
+ Ctl3D = False
+ EdgeBorders = []
+ EdgeInner = esNone
+ EdgeOuter = esNone
+ FixedSize = True
+ FixedOrder = True
+ ParentColor = False
+ object ToolBar: TToolBar
+ Left = 2
+ Top = 0
+ Width = 998
+ Height = 22
+ Align = alClient
+ ButtonHeight = 23
+ Images = Buttons
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ object btNew: TToolButton
+ Left = 0
+ Top = 0
+ Hint = 'New Flame | Create a new fractal project'
+ Caption = 'btNew'
+ ImageIndex = 65
+ OnClick = btNewClick
+ end
+ object btnOpen: TToolButton
+ Left = 23
+ Top = 0
+ Hint = 'Open (Ctrl+O) | Open a parameter file for browsing'
+ Caption = 'btnOpen'
+ ImageIndex = 1
+ OnClick = mnuOpenClick
+ end
+ object btnSave: TToolButton
+ Left = 46
+ Top = 0
+ Hint = 'Save fractal parameters (Ctrl+S)|Save parameters to a flame file'
+ Caption = 'btnSave'
+ ImageIndex = 3
+ OnClick = mnuSaveAsClick
+ end
+ object ToolButton10: TToolButton
+ Left = 69
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton10'
+ ImageIndex = 39
+ Style = tbsSeparator
+ end
+ object btnRender: TToolButton
+ Left = 77
+ Top = 0
+ Hint = 'Render (Ctrl+R) | Save the current flame to disk as a picture'
+ Caption = 'btnRender'
+ ImageIndex = 35
+ OnClick = mnuRenderClick
+ end
+ object tbRenderAll: TToolButton
+ Left = 100
+ Top = 0
+ Hint = 'Render all | Save all fractals as pictures'
+ Caption = 'tbRenderAll'
+ ImageIndex = 64
+ OnClick = mnuRenderAllClick
+ end
+ object ToolButton9: TToolButton
+ Left = 123
+ Top = 0
+ Width = 8
+ ImageIndex = 8
+ Style = tbsSeparator
+ end
+ object btnViewList: TToolButton
+ Left = 131
+ Top = 0
+ Hint = 'List View | Change the flame list view to a report (single text)'
+ Caption = 'Flame list view'
+ ImageIndex = 54
+ OnClick = btnViewListClick
+ end
+ object btnViewIcons: TToolButton
+ Left = 154
+ Top = 0
+ Hint = 'Thumbnail View | Change a flame list view to icons'
+ Caption = 'Flame icon view'
+ ImageIndex = 55
+ OnClick = btnViewIconsClick
+ end
+ object ToolButton2: TToolButton
+ Left = 177
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton2'
+ ImageIndex = 39
+ Style = tbsSeparator
+ end
+ object btnUndo: TToolButton
+ Left = 185
+ Top = 0
+ Hint = 'Undo (Ctrl+Z)|Undo the last action'
+ Caption = 'btnUndo'
+ ImageIndex = 4
+ OnClick = mnuUndoClick
+ end
+ object btnRedo: TToolButton
+ Left = 208
+ Top = 0
+ Hint = 'Redo (Ctrl+Y) | Redo the last cancelled action'
+ Caption = 'btnRedo'
+ ImageIndex = 5
+ OnClick = mnuRedoClick
+ end
+ object ToolButton1: TToolButton
+ Left = 231
+ Top = 0
+ Width = 8
+ ImageIndex = 18
+ Style = tbsSeparator
+ end
+ object btnReset: TToolButton
+ Left = 239
+ Top = 0
+ Hint =
+ 'Reset Location (F12) | Recalculate the flame size and position ' +
+ ' '
+ Caption = 'btnReset'
+ ImageIndex = 12
+ OnClick = mnuResetLocationClick
+ end
+ object btnFullScreen: TToolButton
+ Left = 262
+ Top = 0
+ Hint =
+ 'Fullscreen (F3) | Fullscreen View (F3)|Show full-screen view of ' +
+ 'the f'
+ Caption = 'btnFullScreen'
+ ImageIndex = 52
+ OnClick = mnuFullScreenClick
+ end
+ object ToolButton3: TToolButton
+ Left = 285
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton3'
+ ImageIndex = 54
+ Style = tbsSeparator
+ end
+ object tbQualityBox: TComboBoxEx
+ Left = 293
+ Top = 0
+ Width = 69
+ Height = 22
+ Hint =
+ 'Rendering quality | Set flame quality (density) for the main pre' +
+ 'view window'
+ ItemsEx = <
+ item
+ Caption = '5'
+ end
+ item
+ Caption = '10'
+ end
+ item
+ Caption = '15'
+ end
+ item
+ Caption = '25'
+ end
+ item
+ Caption = '50'
+ end
+ item
+ Caption = '100'
+ end
+ item
+ Caption = '150'
+ end
+ item
+ Caption = '250'
+ end
+ item
+ Caption = '500'
+ end
+ item
+ Caption = '1000'
+ end>
+ TabOrder = 0
+ OnExit = tbQualityBoxSet
+ OnKeyPress = tbQualityBoxKeyPress
+ OnSelect = tbQualityBoxSet
+ end
+ object ToolButton4: TToolButton
+ Left = 362
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton4'
+ ImageIndex = 55
+ Style = tbsSeparator
+ end
+ object tbEditor: TToolButton
+ Left = 370
+ Top = 0
+ Caption = 'tbEditor'
+ ImageIndex = 19
+ OnClick = mnuEditorClick
+ end
+ object tbAdjust: TToolButton
+ Left = 393
+ Top = 0
+ Hint = 'Adjustment | Adjust the position, size and colors of the flame'
+ Caption = 'tbAdjust'
+ ImageIndex = 18
+ OnClick = mnuAdjustClick
+ end
+ object tbPalette: TToolButton
+ Left = 416
+ Top = 0
+ Hint = 'Gradient | Change a color palette of the flame'
+ Caption = 'tbPalette'
+ ImageIndex = 11
+ OnClick = mnuGradClick
+ end
+ object tbCurves: TToolButton
+ Left = 439
+ Top = 0
+ Hint = 'Curves | Edit color curves of the fractal image'
+ Caption = 'Curves'
+ ImageIndex = 69
+ OnClick = tbCurvesClick
+ end
+ object tbMutate: TToolButton
+ Left = 462
+ Top = 0
+ Hint =
+ 'Mutation | Show randomly generated modifications of the current ' +
+ 'flame'
+ Caption = 'tbMutate'
+ ImageIndex = 17
+ OnClick = mnuMutateClick
+ end
+ object tbImageSize: TToolButton
+ Left = 485
+ Top = 0
+ Hint = 'Image size | Change the image size'
+ Caption = 'tbImageSize'
+ ImageIndex = 14
+ OnClick = mnuImageSizeClick
+ end
+ object tbMessages: TToolButton
+ Left = 508
+ Top = 0
+ Hint = 'Messages | Show error messages'
+ ImageIndex = 63
+ OnClick = tbMessagesClick
+ end
+ object tbOptions: TToolButton
+ Left = 531
+ Top = 0
+ Hint = 'Options | Change Apophysis default settings'
+ Caption = 'tbOptions'
+ ImageIndex = 13
+ OnClick = mnuOptionsClick
+ end
+ object ToolButton15: TToolButton
+ Left = 554
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton15'
+ ImageIndex = 62
+ Style = tbsSeparator
+ end
+ object tbShowAlpha: TToolButton
+ Left = 562
+ Top = 0
+ Hint = 'Show transparency | Show the flame on a transparent background'
+ Caption = 'Show Alpha'
+ ImageIndex = 53
+ Style = tbsCheck
+ OnClick = tbShowAlphaClick
+ end
+ object tbGuides: TToolButton
+ Left = 585
+ Top = 0
+ Hint = 'Show guidelines | Show flame thirds, center and golden ratio'
+ Caption = 'Show guides'
+ Down = True
+ ImageIndex = 68
+ Style = tbsCheck
+ OnClick = tbGuidesClick
+ end
+ object ToolButton16: TToolButton
+ Left = 608
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton16'
+ ImageIndex = 54
+ Style = tbsSeparator
+ end
+ object tbEditScript: TToolButton
+ Left = 616
+ Top = 0
+ Hint = 'Edit script | Edit the script code'
+ Caption = 'tbEditScript'
+ ImageIndex = 42
+ OnClick = mnuEditScriptClick
+ end
+ object btnRunScript: TToolButton
+ Left = 639
+ Top = 0
+ Hint = 'Run script | Execute the current script'
+ Caption = 'btnRunScript'
+ ImageIndex = 43
+ OnClick = mnuRunClick
+ end
+ object btnStopScript: TToolButton
+ Left = 662
+ Top = 0
+ Hint =
+ 'Stop script | To stop an animation script, you can press any key' +
+ ' on your keyboard'
+ Caption = 'btnStopScript'
+ ImageIndex = 36
+ OnClick = mnuStopClick
+ end
+ object ToolButton18: TToolButton
+ Left = 685
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton18'
+ ImageIndex = 37
+ Style = tbsSeparator
+ end
+ object tbDrag: TToolButton
+ Left = 693
+ Top = 0
+ Hint = 'Translate the image | Translate the fractal image using mouse'
+ Caption = 'tbDrag'
+ Down = True
+ Grouped = True
+ ImageIndex = 62
+ Style = tbsCheck
+ OnClick = tbDragClick
+ end
+ object tbRotate: TToolButton
+ Left = 716
+ Top = 0
+ Hint = 'Rotate the camera | Rotate the fractal image using mouse'
+ Caption = 'tbRotate'
+ Grouped = True
+ ImageIndex = 41
+ Style = tbsCheck
+ OnClick = tbRotateClick
+ end
+ object tbZoomIn: TToolButton
+ Left = 739
+ Top = 0
+ Hint = 'Zoom in | Scale up the fractal image using mouse'
+ Caption = 'tbZoomIn'
+ Grouped = True
+ ImageIndex = 50
+ Style = tbsCheck
+ OnClick = tbzoomwindowClick
+ end
+ object tbZoomOut: TToolButton
+ Left = 762
+ Top = 0
+ Hint = 'Zoom out | Scale down the fractal image using mouse'
+ Caption = 'tbZoomOut'
+ Grouped = True
+ ImageIndex = 49
+ Style = tbsCheck
+ OnClick = tbzoomoutwindowClick
+ end
+ object ToolButton23: TToolButton
+ Left = 785
+ Top = 0
+ Width = 8
+ Caption = 'ToolButton23'
+ ImageIndex = 50
+ Style = tbsSeparator
+ end
+ end
+ end
+ object BottomDock: TPanel
+ Left = 0
+ Top = 673
+ Width = 1000
+ Height = 19
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 3
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 0
+ Width = 803
+ Height = 19
+ Align = alClient
+ Panels = <
+ item
+ Width = 200
+ end
+ item
+ Width = 161
+ end
+ item
+ Width = 150
+ end
+ item
+ Width = 50
+ end>
+ end
+ object pnlLSPFrame: TPanel
+ Left = 803
+ Top = 0
+ Width = 197
+ Height = 19
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 1
+ object LoadSaveProgress: TProgressBar
+ Left = 2
+ Top = 0
+ Width = 194
+ Height = 21
+ Align = alCustom
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Smooth = True
+ TabOrder = 0
+ end
+ end
+ end
+ object Buttons: TImageList
+ Left = 104
+ Top = 280
+ Bitmap = {
+ 494C01014C005000040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000004001000001002000000000000040
+ 0100000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000D9CDC700CAB9AF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000D5864800DF762400ECA24A00ED9D4300E37E3300D16F3B00C68C
+ 73000000000000000000000000000000000000000000FAFAFA00F1F1F100E4E4
+ E400F2F2F200F7F7F700F5F5F500000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000835B46005E2A0E00E5DDD9000000000000000000B8A29300774E2E006A3F
+ 1200E3DCD100000000000000000000000000000000000000000000000000DBB4
+ 8400E3872B00EF7E1000F2A34A00F4BE7100F1842600F25E0000F14C0000E342
+ 0000CA68320000000000000000000000000000000000CFCFCF0000000000B9B9
+ B9000D0D0D000000000000000000000000000000000011111100000000000000
+ 0000272727000000000000000000000000000000000000000000D8D7D800C4C4
+ C400DBDBDB000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000006534
+ 1A00612E13005C270B005A250800D0C2BA0000000000B59E8C00DACFC400FEFF
+ FE007B591A00DBD2BD0000000000000000000000000000000000DBB38900EFB6
+ 5700F7AB4A00F3A64700F3CA8600EABF8D00E29C6400E7802D00F06E0C00F365
+ 0700EC5D0000CB6E2D00000000000000000000000000000000009A9A9A008686
+ 86000000000071717100FDFDFD00000000008C8C8C007F7F7F00959595001919
+ 1900000000000000000000000000000000000000000000000000E6E6E600F3F3
+ F30094949400DCDCDC0000000000F9F9F9000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000073462E005E2A
+ 0E005D2A0E00DBD0CA00000000005F2C0D00EEEAE700BCA99300D2C5B5000000
+ 0000E4DDCC00BCB0820000000000000000000000000000000000E6954D00F7C9
+ 6D00F7C67300F6B75C00F8C56600F4A13E00EEAD6F00E7B68600EE842500F286
+ 2100F37C1400EA660000C98B5D000000000000000000000000008A8A8A004343
+ 43007B7B7B00000000008A8A8A0084848400D5D5D500A7A7A700FEFEFE000000
+ 00005454540000000000BDBDBD00000000000000000000000000000000000000
+ 0000E0E0E0008F8F8F0000000000B9B9B900BAB9BA00E6E5E600A4A4A4008A88
+ 8A00ACAAAA000000000000000000000000000000000000000000E6DFDA007143
+ 2A00855E48000000000000000000000000006F451A00C4B59E00D5CAB8000000
+ 0000B0A26700F0EDE100000000000000000000000000E1A98000F0924E00F2CE
+ 9E00EBD7AE00ECC48100EED3A400E6A66100EFAE6800EED9C200EB9C4800F296
+ 3300F0902E00F3821500DA782100000000000000000000000000252525006E6E
+ 6E00000000000000000088888800D7D7D700727272003D3D3D0000000000BCBC
+ BC00EEEEEE000000000000000000000000000000000000000000000000000000
+ 0000EEEEEE0061546100DEDEDE000000000000000000D1D1D10061546100CCCC
+ CC00F9F9F9000000000000000000000000000000000000000000000000000000
+ 0000CEBEB6006B3B1F00D1C3B70000000000D7CCBD0079581800DFD9C7000000
+ 0000ACA15B00E9E7CB00A19E27000000000000000000E8C18500F5AE6500F3D2
+ C100E8DDC600E4CDAA00EBE2D900E4A77700EBAB6600F1E3D000EBB67000F3A7
+ 4900F2A34800F49D3700EA8A24000000000000000000DDDDDD00000000009C9C
+ 9C00000000006060600044444400000000000000000000000000141414003F3F
+ 3F00000000003D3D3D0000000000ABABAB000000000000000000000000000000
+ 0000FCFCFC00CAC9CA00C2C2C20000000000FAFAFA00E5E4E500ACABAC009C9C
+ 9C00000000000000000000000000000000000000000000000000F5F2F000CFBF
+ B700C0AC9F00C1AE9E00785128007F5D2A00F9F8F600937D3C00EAE5D900AAA0
+ 5100A39C3600C5C37C00A3A61900FDFEF90000000000F0DCB800FCDB9000F6DC
+ B600EDD8B000EFD59C00EFEAE000EDA87700F4A65C00F4E3CA00EDCA9500F4BA
+ 6000F5B96600F5B35D00F4A74400000000000000000065656500000000000000
+ 00001D1D1D00C6C6C6000000000000000000D5D5D500C5C5C500000000006262
+ 6200000000009191910000000000ABABAB000000000000000000000000000000
+ 000000000000DBDBDB009E9E9E0000000000E4E3E300E7E6E600EBEBEB00E6E6
+ E600ABABAB00C0C0C00000000000000000000000000080584200551E01005823
+ 0200A98F7B00DBD0C600D0C5B300BAA98A009079390099873C00998B2E00C3BD
+ 80000000000000000000A9B21900FCFDF80000000000F1E3CF00F5E3B800F1E1
+ B900F0DDBB00F6D98500F6F1D900ECBA9500F39B5900F3D9BB00EBD9AD00F3C9
+ 7500F5CE8700F8C98400F6BA6400000000000000000071717100000000000000
+ 0000BBBBBB000000000000000000000000005C5C5C00161616004C4C4C000000
+ 0000000000001818180000000000000000000000000000000000000000000000
+ 000000000000DFDFDF0061546100FCFCFC0000000000FBFBFB00F7F7F7000000
+ 0000FAFAFA00F4F4F4000000000000000000000000008D69560065351700683C
+ 1600B6A28C00000000000000000000000000D0C8A40090811D00A0983000BBBB
+ 5F00D8DA9D00DDE0A100AFBD16000000000000000000EFE2CE00F3E6D200ECE1
+ CF00EFDCBE00F5CD7500F5E6B700EECFA800EF9D6200EECCB600EBE3D100E8CD
+ 9300F4D8A000F9D89E00F2C47600000000000000000000000000000000000000
+ 00000000000000000000E1E1E100B9B9B900A9A9A900EEEEEE0000000000D5D5
+ D500000000002020200000000000000000000000000000000000000000000000
+ 000000000000EBEBEB009F9E9F00DEDEDE000000000000000000000000000000
+ 00000000000000000000000000000000000000000000CBBBB10062330C00754E
+ 2300724D1600FBF7F600D5CDB2009683360097892D00D0CD9A00B5B45400ECEC
+ D100BBC14700E2E7AA00000000000000000000000000EAD6C000FAE8CB00F8E9
+ D100F8E6B400F9D77D00F9DB8600F6E49700F7B37100F5B09000EFE2CB00EFDA
+ 9800FAE4AF00FEE3AB00EAC78100000000000000000050505000A8A8A800FEFE
+ FE003A3A3A003A3A3A0081818100D5D5D500A6A6A600BFBFBF00000000000000
+ 0000888888000000000000000000000000000000000000000000000000000000
+ 0000E9E9E900EDEDEC00DFDEDD008F88850094918F0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000775026007955
+ 21007C5D1D00775A0700CAC09C00BBB3710000000000DFDFB300C7C97400E4E7
+ B600C3CF5200B5C71800F5F9E1000000000000000000E7D3C400EED5B400F8E1
+ BE00F8E3B600F8DF9600FAD88100FAE78F00FAD78700F8A67100EEC39D00E9D7
+ 9B00F3E4B900F4DFAB000000000000000000F5F5F5001919190000000000C9C9
+ C900404040000000000048484800676767008D8D8D004C4C4C00000000004747
+ 4700000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000E7E7E700B2B1B2000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000F1EDE800704F
+ 0800B1A172000000000000000000B5AE610000000000DEE0AD00EFF1D800CDD6
+ 6E00B6C81B00E1EB9E0000000000000000000000000000000000E4C9AB00F2D1
+ A000F6D89A00F6D98D00F7D68100F8D68100FBEA9400FAC57D00F8B17500F3D9
+ 9800F1E6C000DFCDA900000000000000000062626200F5F5F50000000000AEAE
+ AE009292920018181800AAAAAA00484848004F4F4F00D9D9D900000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000F1F1F100D3D3D300F9F9F900BCBABA00D0CFCF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000DFDDB800AAA83B00CDCF8100BCC44800EDF0CC000000
+ 0000E9F0B800000000000000000000000000000000000000000000000000E5C6
+ 9D00F1CA8000F6D17C00F6D57900F6C67200F9D98600FDE48D00FDB67100FBCD
+ 7600EADB9B00000000000000000000000000D4D4D400010101005B5B5B007575
+ 7500E5E5E5000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000EDEDED00DAD9D9009C989800C7C6C6000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000E0DFB600A6AA2100AEB72300BBC73500F5F7DF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000E5CAA400E8C57C00EFC66C00F2B15F00F5AE6200F5D97D00EFBE7800E5B5
+ 87000000000000000000000000000000000000000000F9F9F900000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FCFCFC00F6F6F600000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000009254B00081D3500000014001144
+ 8400000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000B7A2930063493500634935006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 35006349350063493500634935006349350000000000BBA697FF875C44FF875C
+ 44FF875C44FF875C44FF875C44FF875C44FF875C44FF875C44FF875C44FF875C
+ 44FF875C44FF875C44FF875C44FF000000000000000000000000000000000000
+ 00000000000000062100021E7400000E91001171FF000015B0001368FF00042D
+ 7E0000036A001667E20000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000B7A29300C0C0C000FFFFFF008000
+ 8000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0
+ C00080008000C0C0C000FFFFFF006349350000000000BCA798FFFC8E54FFEF81
+ 47FFEA763AFFE77136FFE56F2FFFDE6A2AFFD96123FFD45A1EFFC95617FFC350
+ 15FFBC4C14FFB84B15FF875C44FF000000000000000000000000000000000003
+ 1500031260000733E6001064FF001E61FF00104CF500084CF50003218900000C
+ A30005259F000F5EB8000811440002154500CE63000063636300636363006363
+ 6300636363006363630063636300636363006363630063636300636363006363
+ 6300636363009C9C9C000000000000000000B7A29300FFFFFF00C0C0C0008000
+ 8000C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF
+ FF0080008000FFFFFF00C0C0C0006349350000000000BDA899FFFC945EFFFE8C
+ 51FFFF8344FFFE7B39FFF97530FFF4712BFFEF6A26FFE96120FFE25E1DFFDA5B
+ 16FFD25415FFBE4C13FF875C44FF000000000000000000000000000735000019
+ BF00001AB9001577FF003471E2001147AF003E72E4000220E100001EBC000632
+ 9C000F55DD00000685000631BA00188DFF00CE63000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000636363000000000000000000B7A2930080008000800080008000
+ 8000800080008000800080008000800080008000800080008000800080008000
+ 80008000800080008000800080006349350000000000BEAA9AFFFC9A69FFFD91
+ 57FFFF8749FFFF7B3BFFFA7831FFF5742BFFF06B27FFEB6321FFE55E1DFFE05D
+ 17FFD95515FFC14E13FF875C44FF000000000000000000000100166DFF000744
+ ED001D92FF00002BCE00395CE400274AC4003A62E7000B2FBB001160FF00052D
+ B000000B880004309E001363D600060E3500CE63000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000636363000000000000000000B7A29300FFFFFF00C0C0C0008000
+ 8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0080008000FFFFFF00C0C0C0006349350000000000C0AB9BFFFCA374FFFE99
+ 62FFFF8E50FFFE8343FFFB7936FFF6752CFFF16C27FFEC6422FFE75F1EFFE55D
+ 18FFDE5614FFC74F13FF875C44FF00000000000100001861F3000436C000135F
+ DC000837D500031D940005159C001B308F000A1EB00000055500032AC5000D5D
+ DA001557A1000732AC0000026A000127B100CE6300000000000000FF00000000
+ 000000FF000000FF00000000000000FF00000000000000000000000000000000
+ 000000000000636363000000000000000000BAA59600C0C0C000FFFFFF008000
+ 8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0080008000C0C0C000FFFFFF006349350000000000C2AC9DFF57D546FF47D0
+ 32FF34CC1EFF2EC617FF26C310FF1FC00AFF1BB904FF18B401FF19AA00FF16A0
+ 00FF159700FF117200FF875C44FF00000000010000000B3674000331BA000215
+ 8A000E65F7000023B500000E6E0000053F00000D6800001375000121AC00000A
+ 9200000D910000129A0000005000185EBB00CE63000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000636363000000000000000000BEA99A00FFFFFF00C0C0C0008000
+ 8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0080008000FFFFFF00C0C0C0006349350000000000C4AE9FFF6AD75AFF57D3
+ 46FF41D02DFF32C71DFF2AC313FF1FC00AFF1BBC03FF19B601FF18AC00FF16A3
+ 00FF149B00FF107800FF875C44FF000000000000000000088900000A8D000D4F
+ C6001552C900021DC900001167000016810000188B0000127900000D6400072D
+ D600001566000D28A000083FCA000E64FF00CE6300000000000000FF000000FF
+ 00000000000000FF000000FF000000FF00000000000000FF0000000000000000
+ 000000000000636363000000000000000000C3AE9E00C0C0C000FFFFFF008000
+ 8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0080008000C0C0C000FFFFFF006349350000000000C6AFA1FF7CDA6FFF67D6
+ 58FF51D240FF3DCC2AFF30C41BFF22C10EFF1CBB05FF17B801FF16AE00FF14A4
+ 00FF149D00FF107B00FF875C44FF0000000009236B000940E1000F52C9000834
+ B9000123B2000A44D000001AA3000011780000118700011F940000107D000A31
+ C5000E57F0000B59E800092E740010509D00CE63000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000636363000000000000000000C8B2A300FFFFFF00C0C0C0008000
+ 8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0080008000FFFFFF00C0C0C0006349350000000000C7B1A2FF8FDD84FF79DA
+ 6DFF62D554FF4ECD3DFF3BC728FF2AC213FF1FBD08FF17B801FF17B000FF16A6
+ 00FF15A000FF107D00FF875C44FF000000001153AC000A49D40000031B00021B
+ 7300167FFF0000085000041FC3000630BD0000178100011B9200000C6C000327
+ B3000430C8000E36A3000F64F800145DCA00CE6300000000000000FF00000000
+ 000000FF000000FF00000000000000FF000000FF000000000000000000000000
+ 000000000000636363000000000000000000BEA99A0080008000800080008000
+ 8000800080008000800080008000800080008000800080008000800080008000
+ 80008000800080008000800080006349350000000000C9B2A3FF7A85E6FF6F78
+ E5FF636DE6FF5360E2FF4653DFFF394ADCFF3141D7FF2535D3FF1E2DCFFF182A
+ CCFF1528C7FF111FB0FF875C44FF000000000C3277000B61FF001C82FF00083A
+ AD0000078600000C8D000F5CD700000C91000622B400000F86000721BC00000D
+ 9600093EC7001057BC00156BF3001061D500CE63000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000636363000000000000000000C3AE9E00C0C0C000FFFFFF008000
+ 8000C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFF
+ FF0080008000FFFFFF00C0C0C0006349350000000000CAB4A5FF838DE5FF7983
+ E4FF6D76E5FF606CE2FF4F5ADFFF4250DBFF3746D7FF2C3AD4FF2130CFFF1A29
+ CBFF1427CAFF101EB2FF875C44FF00000000041B3200051C370000002400000A
+ 7B0000057800093591000E4CC00000027A000A49F5000216AC000533E2000623
+ 7100022377000C4198001578F000061C3600CE63000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000636363000000000000000000C8B2A300FFFFFF00C0C0C0008000
+ 8000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0C000FFFFFF00C0C0
+ C00080008000C0C0C000FFFFFF006349350000000000CBB5A6FF8D95E5FF828D
+ E4FF777FE3FF6B75E1FF5C6AE0FF4A57DEFF3D4DD8FF313FD5FF2533D1FF1C2A
+ CDFF1426CAFF0E1FBAFF875C44FF000000000000000000000000051C5F000A34
+ AF000E43B4000D54B300020237001042BC000F57D500000000001164E4000444
+ BD00208FFF001987F9000000000000000000CE630000CE630000CE630000CE63
+ 0000CE630000CE630000CE630000CE630000CE630000CE630000CE630000CE63
+ 0000CE630000CE6300000000000000000000EAAA8B00EAAA8B00EAAA8B00EAAA
+ 8B00E9A58400E99F7A00E7976E00E68E6200E5865600E37D4A00E3764000E272
+ 3900E2723900E2723900E2723900C8622F0000000000CCB6A7FF959DE4FF8C95
+ E4FF818AE2FF757EE3FF6775E0FF5763DDFF4857D8FF3A48D4FF2D3BD1FF2432
+ CDFF1629CBFF1020C6FF875C44FF0000000000000000000000000C3B7B001075
+ FF000C51CE00043BAC001A5AB5001366F100083BC900032D9C001D95FF001C96
+ FF000C3E7600000000000000000000000000CE63000000000000FFCE9C00FFCE
+ 9C00FFCE9C00FFCE9C00FFCE9C00FFCE9C00FFCE9C00FFCE9C00FFCE9C000000
+ 0000CE630000000000000000000000000000EAAA8B00FFC2A200FFC2A200FEC0
+ 9F00FDBD9A00FCB99600FBB59000FAB08B00F9AB8400F8A77D00F6A27700F59D
+ 7100F5996A00F3956500F3956500CD65310000000000CCB6A7FFCCB6A6FFCAB5
+ A5FFC9B3A4FFC8B2A3FFC6B1A2FFC5AFA1FFC3AE9FFFC2AC9DFFC1AB9CFFBFA9
+ 9BFFBEA89AFFBDA899FFBCA698FF00000000000000000000000003111C000720
+ 47001581FF001058BA000A347A000B4DD4001D7BF5001C9EFF001367E4000310
+ 280000000000000000000000000000000000CE630000CE630000CE630000CE63
+ 0000CE630000CE630000CE630000CE630000CE630000CE630000CE630000CE63
+ 0000CE630000CE630000CE63000000000000EAAA8B00EAAA8B00EAAA8B00EAAA
+ 8B00EAAA8B00EAA68600E9A17F00E89B7600E7946C00E68E6200E5875800E481
+ 4E00E47B4600E3763E00E3763E00E27239000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000020B160000000000000000000F427A000A36760000050700000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000A5795F0080472800804728007F4425007E4121007C3E1C007B3A18007936
+ 130078330E0077300B00762E0800000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B7A293006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 3500634935000000000000000000000000000000000000000000000000000000
+ 0000EAE2DE00C8B6AB00A88E7D008E6F5A00886A57009A837300B9AAA000E1DC
+ D700000000000000000000000000000000000000000000000000000000000000
+ 0000A97E6600FEF1EA00FEF1EA00FCECE300FAE4D900F6DBCC00F3D1C000F0C9
+ B400EEC1A900ECBCA20077300A00000000000000000000000000965C5B009558
+ 5700FFFFFF00C897920095525300000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B7A29300FFFF
+ FF00B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 930063493500000000000000000000000000000000000000000000000000D7C8
+ BF00A5857200927049006B65450093664400B2663E00965D3D0079533B008169
+ 5900C3B8B0000000000000000000000000000000000000000000A5795F008047
+ 2800804728007F4425007E4121007C3E1C007B3A18007936130078330E007730
+ 0B00762E0800EEC1A80077320D00000000000000000000000000904F4E00B162
+ 6600703C3C0095525300703C3C00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B7A29300FFFF
+ FF00FFFFFF00FCFAF900F7F1EE00F1E7E100ECDDD500E6D3C900E1CABD00B7A2
+ 9300634935000000000000000000000000000000000000000000DACAC100A67D
+ 6500C57E580087742E005C74240053613E0088623C00BB663D00B6633B008B56
+ 38006F544100C3B8B00000000000000000000000000000000000A97E6600FEF1
+ EA00FEF1EA00FCECE300FAE4D900F6DBCC00F3D1C000F0C9B400EEC1A900ECBC
+ A20077300A00F0C7B10078341000000000009857550081464600C06E6A00BB61
+ 5E00BE655D00DA706F00C4636300A66D69006D35360000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B7A29300FFFF
+ FF00FFFFFF00F5F5F500F1EEEC00ECE4E000E6DBD400E1D1C900E4CFC400B7A2
+ 93006349350000000000000000000000000000000000EDE5E000B08E7C00CE86
+ 6200E8895900CB8147005D8B1F00348822005A6737006F644100B6673D00B562
+ 3A008B56380081695900E1DCD70000000000A5795F0080472800804728007F44
+ 25007E4121007C3E1C007B3A18007936130078330E0077300B00762E0800EEC1
+ A80077320D00F2CEBB007A37140000000000DC878600C0757700DC8786008E56
+ 5700C1A4A500C6898800C4636300B1565700B156570000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B7A29300FFFF
+ FF00C1C1C100ACACAC00ABAAA900A7A4A200A39D9900A0969200B4A69F00B7A2
+ 93006349350000000000000000000000000000000000D4C0B400C1886B00F594
+ 6400EE906100C5845A00547E3F003B9B24003C8B28006D6C3C00B46B42008760
+ 3C005D5F3E0061594400B9AAA00000000000A97E6600FBEFEB00CFA89500C799
+ 8300BA928000A783710096746300856557004A372B00574B3F0077300A00F0C7
+ B10078341000F5D7C6007B3A180000000000FEFAFA00D3878600E08F8D007341
+ 4100DDD1D100DAC1C300CD6E6E00B1565700FBF3F30000000000000000000000
+ 0000000000000000000000000000000000000000000000000000BAA59600FFFF
+ FF00B6B6B600ECECEC00FFFFFF00FBF8F700EEE7E4009C959100E8D8D000B7A2
+ 93006349350000000000000000000000000000000000C0A19000DE967100F99C
+ 6E00DD9269006E7A520055A438004FA6300080952D00CD7A4C006D6D3F004B65
+ 4200317B1600626A33009A83730000000000AE856D00FFFFFF00F3DFD500DCAF
+ 9800D39F8700CA9B8500C1978200523928009F85740039342F0077320D00F2CE
+ BB007A371400F8DFD2007C3D1B0000000000DD908E00E5A4A600F0A8A800AA6B
+ 6E008457570093606000C26C6D00B15657006D353600965C5B00955857000000
+ 0000C89792009552530000000000000000000000000000000000BEA99A00FFFF
+ FF00B6B6B600ECECEC00FFFFFF00F8F7F600ACAAA700E7DEDA00EEE1DA00B7A2
+ 93006349350000000000000000000000000000000000B38D7800F7B49200EBA4
+ 7B0065795F00639B4C0060AF400096A23E00DF895D00D4805400516E48003B84
+ 2C002B8D15003C7D1C00886A570000000000B28B7400B4A39600FEFBFA00F1DF
+ D500DFB19B00C9A79700715B4C00C7B4AA0070655D004B423F0078341000F5D7
+ C6007B3A1800FBE6DB007D401F0000000000ECBDBD00DB929300F6B8B800EDA9
+ A800DD898600D67D7700C26C6D00C0727200BD727300904F4E00B1626600703C
+ 3C0095525300703C3C0000000000000000000000000000000000C3AE9E00FFFF
+ FF00B6B6B600ECECEC00FCFCFC00B9B9B900CCCBCA00F7F1EE00F1E7E100B7A2
+ 93006349350000000000000000000000000000000000B68F7A00F8BA9B009B9B
+ 800047A74E005AB64B0091955E00E5976E00E6916600DC895C0064A12B003F9D
+ 240040961D0045881F008E6F5A0000000000B7927B00ECE5E100AE9A8A00FCF5
+ F200F0DDD2006D5646009D8A7F009D8E86004C342900ECBCA2007A371400F8DF
+ D2007C3D1B00FCEDE4007E432300000000000000000000000000E4A7AA00DB9F
+ 9E00D0827E00CE7E7A00B96F70009857550081464600C06E6A00BB615E00BE65
+ 5D00DA706F00C4636300A66D69006D3536000000000000000000C8B2A300FFFF
+ FF00B5B5B500EDEDED00C1C1C100CBCBCB00FEFEFE00FAF7F500F5EDE900B7A2
+ 93006349350000000000000000000000000000000000C4A69500E1B4990090B6
+ 85004FC96C004DCB710079A17300B9A26E00D2996800E48F6400A5963C004DA5
+ 2B00439F2300528A2C00A88E7D0000000000BC988200FFFFFF00E2D8D200AF99
+ 89009E897C00C5A89800BAABA300BBA79D00FDDAC800EDC3AC007B3A1800FBE6
+ DB007D401F00FEF1EA007F452500000000000000000000000000DD9C9B00E4AB
+ A900FEF9F900CE7E7A00BD727300DC878600C0757700DC8786008E565700C1A4
+ A500C6898800C4636300B1565700B15657000000000000000000CCB6A700FFFF
+ FF00B0B0B000C7C7C700C7C7C700FFFFFF00FFFFFF00FDFCFB00B7A29300B7A2
+ 9300644A360000000000000000000000000000000000D8C4B900B6A283008BCF
+ 980077DD960093E2A10087E4A200A2D29700ABA66B00ED996900E08D5B0053A7
+ 2E004CA529006F844000C8B6AB0000000000C09D8800FFFFFF00FFFFFF00E6DC
+ D600E9DACD00E2E2F2005568CC003554CF00D0C3D400EECAB8007C3D1B00FCED
+ E4007E432300A2745A009E6F5400000000000000000000000000000000000000
+ 0000000000000000000000000000FEFAFA00D3878600E08F8D0073414100DDD1
+ D100DAC1C300CD6E6E00B1565700FBF3F3000000000000000000D1BBAB00FFFF
+ FF00B6B6B600C1C1C100FFFFFF00FFFFFF00FFFFFF00B7A29300644A3600644A
+ 3600644A360000000000000000000000000000000000EFE7E200BEA18E0092CB
+ 9900A1E8B700CBEEC000D5F4CD00EBF7D700B3E5AB0087986700D6984700B093
+ 390065963A00A0877000EAE2DE0000000000C4A38E00FFFFFF00FFFDFC00FFFF
+ FF00FFFFFB006572C9004BA0ED002374CB002A4AC100EED3C5007D401F00FEF1
+ EA007F4525000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000DD908E00E5A4A600F0A8A800AA6B6E008457
+ 570093606000C26C6D00B15657006D3536000000000000000000D5BFAF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B9A49500D4C5BA00644A
+ 3600E1D5CD000000000000000000000000000000000000000000E0D0C700B9A5
+ 8A00B5D5AD00D4F2CE00E6F8D70086B075007DDB90004EB16A008B874200C885
+ 5B00A27F6100D7C8BF000000000000000000C7A79200FFFFFF00FFFBFA00FFFB
+ FA00FFFFFD008D97D20093C3E8004EA5EF00656CBA00EFDBD1007E432300A274
+ 5A009E6F54000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000ECBDBD00DB929300F6B8B800EDA9A800DD89
+ 8600D67D7700C26C6D00C0727200BD7273000000000000000000D8C2B200FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0AB9C00644A3600E2D6
+ CD0000000000000000000000000000000000000000000000000000000000E0D0
+ C700C0A29000C3C2A200CDDCBB00B7E4B60081DDA20067B670009F855600B08E
+ 7C00DACAC100000000000000000000000000E2BDA600FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00E2E5F5009BA5DD008D96D300ECE9F100FEF1EA007F4525000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000E4A7AA00DB9F9E00D082
+ 7E00CE7E7A00B96F700000000000000000000000000000000000D8C2B200D8C2
+ B200D8C2B200D8C2B200D8C2B200D4BEAE00CFB9A900C9B3A400E2D6CD000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000EFE7E200D9C5BA00C6A89900BB998500BD9D8B00C5A79700D4C0B500EDE5
+ E00000000000000000000000000000000000E2BDA600E2BDA600C1A08A00C1A0
+ 8A00BD998300B7927B00B28A7200AC826A00A77B6200A2745A009E6F54000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000DD9C9B00E4ABA900FEF9
+ F900CE7E7A00BD72730000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00000000000000000000000000000000000000000000000000B7A293006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 350063493500000000000000000000000000B7A2930060463200634935006349
+ 350063493500634935006349350063493500634935006349350063493500684E
+ 3A00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFF0EF00FFF0E000FFF0EF00FFF0EF00FFF0
+ EF00FFF0F000FFFFF00000000000000000000000000000000000000000000000
+ 000000000000CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00000000000000000000000000000000000000000000000000B7A29300FFFF
+ FF00B7A29300B09E950077789C00B19E9500B7A29300B7A29300B7A29300B7A2
+ 930063493500000000000000000000000000BDA89900FDFEFD00F0EFEE00F0EC
+ E900EFE9E400EEE5DE00EEE0D700EDDDD200EDDACD00ECD8CA00DBC9BD00684E
+ 3A00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFF0E000D0703F00D0703F00D0703000D060
+ 1000D0602000FFF0EF0000000000000000000000000000000000000000000000
+ 0000CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00CFEAEB000000000000000000000000000000000000000000B7A29300FFFF
+ FF00EDAF8C003153C1001639B300697ECB00C9815700CE825000E1CABD00B7A2
+ 930063493500000000000000000000000000C6B0A100FDFEFD00E6D9D200E5D7
+ D000E3D4CC00FCF5EF00E0CEC500DECCC200DECCC200F9E8DC00DBC9BD00684E
+ 3A00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FFEFE000D0703F00FFA77000C2E9FF0040AE
+ F700E0AF8000FFEFDF000000000000000000000000000000000000000000CFEA
+ EB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00CFEAEB000000000000000000000000000000000000000000B7A29300DBE1
+ F400294DC2002854ED00234BE2001238B5009D9FCC00EAD9D100E4CFC400B7A2
+ 930063493500000000000000000000000000CCB6A700FDFEFD00FDFEFD00FDFE
+ FD00FCFCFA00FCF9F50075716E005754510000000000E2D8D000DECEC300684E
+ 3A0000000000000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFE0DF00D0703F00FFA77000C2E9FF0040AE
+ F700E08F4F00FFE0D0000000000000000000000000000000000000000000CFEA
+ EB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00CFEAEB00CFEAEB0000000000000000000000000000000000B7A293001E44
+ BF002A57F4006183FB005477F8003D63EA002040B400B77A5E00E7D5CB00B7A2
+ 930063493500000000000000000000000000CCB6A700FDFEFD00E8DDD700E7DC
+ D500E6D9D200FCFCFA00A39D9800FEFEFE0090BAC8000E121600D2CDC7007860
+ 4D0000000000000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFE0D000D0703F00FFA77000C2E9FF0040AE
+ F700E08F5000FFE0CF0000000000000000000000000000000000CFEAEB00CFEA
+ EB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00CFEAEB00CFEAEB0000000000000000000000000000000000BAA5960087A2
+ FC007895FB007C94FC00E0E5FD00819AF8004262E2003F57B200E7D8D200B7A2
+ 930063493500000000000000000000000000CCB6A700FDFEFD00FDFEFD00FDFE
+ FD00FDFEFD00FDFEFD00A39D9800B3D1DB00A6E0EC008BBECE000E1216007C72
+ 660000000000000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFDFCF00D0703F00FFA77000C2E9FF0040AE
+ F700F0B08F00FFDFCF00000000000000000000000000CFEAEB00CFEAEB00CFEA
+ EB0000000000CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00CFEAEB00CFEAEB0000000000000000000000000000000000BEA99A00E8EB
+ FF00C1CDFE00F0BCA500EBAE8C00D19781007D95F6002E54DD005668B100B6A2
+ 930063493500000000000000000000000000CCB6A700FDFEFD00E8DDD700E8DD
+ D700E8DDD700FDFEFD00D7D2CF004D9CB300B5EBF4009BD6E5008BBECE000E12
+ 160000000000000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFDFC000D0703F00FFA77000C2E9FF000000
+ 00000000000000000000000000000000000000000000CFEAEB00CFEAEB000000
+ 000000000000CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB00CFEAEB00CFEAEB00CFEAEB00000000000000000000000000C3AE9E00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1F1F800748EF500264CD7006C6E
+ 950062493600000000000000000000000000CCB6A700FDFEFD00FDFEFD00FDFE
+ FD00FDFEFD00FDFEFD00FCFBF700E4E0DC0057A0B500B5EBF4009BD6E5008BBE
+ CE000E121600000000000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFDFC000D0601F00D0703F00E07F3F000000
+ 0000F0A07F000000000000000000000000000000000000000000000000000000
+ 000000000000CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEAEB00CFEA
+ EB0000000000CFEAEB00CFEAEB00000000000000000000000000C8B2A300FFFF
+ FF00F7D0BB00F5C8B200EDBC9E00E6AD8C00DFA07B00DB9A72007F96F200244A
+ D700433E5900000000000000000000000000EBAC8D00F2C9B500F2C8B400F1C4
+ AD00F0BEA400EFB79B00EEB29400EFB99D00DFC8BB0065A6B700B5EBF4009BD6
+ E5008BBECE000E1216000000000000000000000000000000000056B9F50056B9
+ F50056B9F50056B9F50000000000FFE0D000FFDFC000FFD0C000FFD0C0000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000CFEAEB00CFEAEB0000000000CFEAEB00CFEAEB0000000000CFEAEB00CFEA
+ EB0000000000CFEAEB00CFEAEB00000000000000000000000000CCB6A700FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFCFB00B7A293007B8D
+ D800274DD700000000000000000000000000EBAC8D00FFD9C400FED6C000FDD4
+ BD00FCD0B900FCCDB500FBC9B000FBC6AB00F7C6AE00E2CDC10073ACB900B5EB
+ F400A1D9E700ACB2B2003535900000000000000000000000000056B9F5000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000CFEAEB00CFEAEB0000000000CFEAEB00CFEAEB0000000000CFEAEB00CFEA
+ EB000000000000000000CFEAEB00000000000000000000000000D1BBAB00FFFF
+ FF00F7D0BB00F5C8B200EDBC9E00E6AD8C00DFA07B00DB9A7200644A3600644A
+ 3600644A3600000000000000000000000000EBAC8D00EAAA8B00EAAA8B00EAA8
+ 8900E9A28100E89C7700E7946B00E68C6000E5865500E68D5F00CA997F007DB0
+ BB00DDD2CA00A6B1E20098A1CB0035359000000000000000000056B9F5000000
+ 0000BBE5F900BBE5F900BBE5F900BBE5F900BBE5F900BBE5F9000000000056B9
+ F50000000000000000000000000000000000000000000000000000000000CFEA
+ EB00CFEAEB000000000000000000CFEAEB00CFEAEB0000000000CFEAEB00CFEA
+ EB00000000000000000000000000000000000000000000000000D5BFAF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B9A49500D4C5BA00644A
+ 3600E1D5CD000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00005E6CAD00A4B7EB0098A7E1005E6CAD00000000000000000056B9F50056B9
+ F50000000000BBE5F9000000000000000000BBE5F9000000000056B9F50056B9
+ F500000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000CFEAEB00CFEAEB0000000000CFEAEB00CFEA
+ EB00000000000000000000000000000000000000000000000000D8C2B200FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0AB9C00644A3600E2D6
+ CD00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000005E6CAD005E6CAD00000000000000000000000000000000000000
+ 00000000000000000000BBE5F900BBE5F9000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000CFEAEB00CFEAEB0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000D8C2B200D8C2
+ B200D8C2B200D8C2B200D8C2B200D4BEAE00CFB9A900C9B3A400E2D6CD000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FBFBFD00FBFBFD0000000000000000000000
+ 0000BFBFBF005450500068666600ECECEC000000000000000000000000000000
+ 000000000000747474003E3E3E00424242003434340000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000081685500262F3800262F3800262F3800262F3800262F
+ 3800262F3800262F3800262F3800262F38000000000000000000000000000000
+ 00000000000000000000EDEDF6006464BA006464BA00ECECF60000000000C7C7
+ C700625C5C00EEE3E200C4BDBC006C6B6B000000000000000000464646003E3E
+ 3E000000000046464600BEBEBE00C7C7C7003333330000000000000000003535
+ 3500828282000000000000000000000000000000000000000000000000000000
+ 00000000000000000000BA6E4700AA542900AA542900A25027009B4C25009648
+ 23008F4622008A432100864120000000000000000000647E8E004F5E6F004552
+ 610037414D00262F380089715E00F2EBE500D5C9C000D5C9C000D5C9C000D5C9
+ C000D5C9C000D5C9C000D5C9C000262F38000000000000000000000000000000
+ 000000000000D9D9EB004747AE003A3ADF003939DE004E4EBA00A6A6B7006460
+ 5A00E2D8D800FBF2F200EEE8E800636262000000000054545400CECECE00D0D0
+ D0003131310037373700C9C9C900C9C9C9004D4D4D002B2B2B003F3F3F00C1C1
+ C100B6B6B6006B6B6B0000000000000000000000000000000000000000000000
+ 00000000000000000000C1795500FDF9F600CEB09C00CCAF9B00CAAD9A00C7AC
+ 9900C6AB9800C4A997008943210000000000717F8B007FD5F4006BBEE2006BBE
+ E2006BBEE2006BBEE20091796600F6F0EE00F2EAE500EDE4DE00EADED800E6DA
+ D200E3D6CE00E1D5CD00D5C9C000262F38000000000000000000000000000000
+ 0000BDBDDB003636AD003737E9001111DD000E0EE1001F1FCB004E4B6700E6E1
+ D90000000000F3F0EF00706F6F00C3C3C3000000000066666600D9D9D900D7D7
+ D700D0D0D000CECECE00CFCFCF00CCCCCC00C9C9C900C1C1C100C3C3C300C5C5
+ C500C4C4C4003D3D3D0000000000000000000000000000000000000000000000
+ 00000000000000000000C9856400FFFFFF00DA8C5C00D1835100D1835100D183
+ 5100D1835100C6AB98008E4522000000000075849000A7DFF30074D4F60070CF
+ F3006DCAEF006BC2E6009A826F00FAF7F600DCD0C700DCD0C700D9CDC300D5C9
+ C000E6DAD200D5C9C000D5C9C000262F3800000000000000000000000000A4A4
+ CD002C2CB1003232F0000909DB000808A00019178300443F7300E1DDD3000000
+ 0000F8F7F100827E7400C1C1BE000000000000000000000000007D7D7D00D9D9
+ D900D7D7D700D5D5D500D2D2D200CFCFCF00CCCCCC00C9C9C900C7C7C700C5C5
+ C5003F3F3F00000000000000000000000000B7A2930063493500634935006349
+ 35006349350063493500D1927300FFFFFF00FEFDFB00FBEFEA00F5DED300F0CE
+ BE00EDC3AF00C7AC9900924723000000000079899400AEE4F50082D9F70075D4
+ F6006FCEF3006BC6EB00A28A7800FEFDFC00FAF7F500F6F0EE00F2EAE500EDE4
+ DE00705A4A0061524600504842003F3D3E0000000000F8F8FB008383BA002222
+ BD002424F0000505DD001E1C8D009E958B00DBD4C000E5DED200FDFAFA00FAF8
+ ED00807D90004B4B7E00FAFAFB0000000000000000000000000073737300DBDB
+ DB00D9D9D900CECECE006868680064646400C9C9C900CCCCCC00C9C9C900C1C1
+ C10038383800000000000000000000000000B7A29300F8F3F000EADFD700E6D9
+ CF00E1D2C700DDCBBF00D89F8200FFFFFF00F3A77F00E7976E00DA8C5C00D183
+ 5100D1835100CAAE9A00984A2500000000007E8E9A00B7E9F60094E0F70085DA
+ F70078D5F7006BC8EE00A9928000FFFFFF00DCD0C700DCD0C700D9CDC400F2EB
+ E5007A604D00E6DDD7006152470000000000F5F5F9007171AF002424CD002E2E
+ FA000A0AE6000101BD008A808500F5E4D300F0E6E000FBF5F600F5EFE700827D
+ 92000C0CB7002323E0006666B400F2F2F800656565006262620066666600DFDF
+ DF00CFCFCF0059595900000000000000000092929200C8C8C800CCCCCC00C9C9
+ C900444444003E3E3E003C3C3C0000000000B7A29300FBF8F700E5AE8100DEA1
+ 7300DA9C6E00D5976800E0AA9000FFFFFF00FFFFFF00FFFFFF00FBF4F000F7E4
+ DB00F2D3C500CCAE9A009D4D25000000000082949E00BFEEF800A6E7F90097E1
+ F80088DCF70077D1F200B0998800FFFFFF00FFFFFF00FDFDFC00FAF7F600F6F1
+ EE00816856007A604D0000000000000000009F9FC5002323C6004343FF005252
+ FF004C4CFD004040C300BEAFA300AFA3AC00423F6F00CCC3C200F8EFDC00413E
+ 8E000000DD001212F0002626CF009090BE008F8F8F00E6E6E600E4E4E400E2E2
+ E20044444400000000000000000000000000000000005F5F5F00CFCFCF00CCCC
+ CC00C9C9C900C7C7C7004444440000000000BBA69700FEFDFC00FBF6F500F6EF
+ EB00F1E6E000ECDED600E7B59C00FFFFFF00FCAE8A00FCAE8A00F1DBD200E78E
+ 6000B3572A00AC542900A4502700000000008699A200C7F3FA00B7EEFA00A9E8
+ F9009BE3F90073D3F600B6A08E00B0998800A9928000A28A78009A8270009179
+ 670089715E000000000000000000000000004040A6004949F7006E6EFF006969
+ FF006969FF006665DF00847C83004F4E92005E599200E4D5CE00DDD1BB003130
+ A1000000E5000000D8001818EC003E3EAB0090909000EAEAEA00E6E6E600E4E4
+ E40051515100000000000000000000000000000000005F5F5F00D2D2D200CFCF
+ CF00CACACA00C0C0C0004747470000000000C1AB9C00FFFFFF00FAC59F00F0B8
+ 8E00E5AE8100DEA17300ECBDA600FFFFFF00FFFFFF00FFFFFF00FFFFFF00EA9A
+ 7200F0C9B200B1572B00EDD7CD00000000008A9EA600CDF6FB00C4F3FB00BAEF
+ F900AAE4F30076C8E60076C8E60075C8E50073C3E3006FBFE0006BBEE2006BBE
+ E200303944000000000000000000000000003535B5007575FF008585FF008080
+ FF008080FF008081FB00676ACC0069658500D0BFAA00D3C2B100645E88000000
+ D5000000E9000000D8000A0AE8002D2DBE0090909000979797009E9E9E00E5E5
+ E500D9D9D9006F6F6F0000000000000000007D7D7D00CDCDCD00D4D4D400D0D0
+ D00063636300616161005959590000000000C7B2A300FFFFFF00FFFFFF00FCFA
+ F900F8F2F000F3EAE600F0C4AE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EBA7
+ 8500C5653500F1DBCF0000000000000000008DA1AA00CEF7FC00CCF6FC005E7D
+ 8A0058737F00566D7A00526977004F6673004C617000445A68007FABBF006BBE
+ E2003E4A58000000000000000000000000003E3EB2009191FF009D9DFF009898
+ FF009898FF009899FF009999FF008887C30084809B008381A6006D6EDF002A2A
+ F8000000E3000000D7000404E8002B2BBB00000000000000000069696900E6E6
+ E600E7E7E700D7D7D700505050004E4E4E00D4D4D400D9D9D900D7D7D700CECE
+ CE0031313100000000000000000000000000CFB9A900FFFFFF00FFDABA00FFD0
+ AE00F0DED200B7A29300F0C4AE00EFC2AB00EFC1AA00EFB9A000EDB09200EDB0
+ 9200F9E4D9000000000000000000000000008FA4AC00CEF7FC00CDF7FC005D86
+ 9600BCDEE300C0EFF600B2E7F100A4DEEC0099C4D2003E5A67007BB4CB006BBE
+ E2004B5969000000000000000000000000005151A0009898F500BFBFFF00B0B0
+ FF00AFAFFF00AFAFFF00B0B0FF00B6B6FF00B1B2FA00AEAEFD00B5B5FF00B1B1
+ FF008383F6005656EC003F3FF0004545A200000000005A5A5A00E5E5E500E8E8
+ E800E7E7E700E7E7E700E4E4E400E2E2E200DFDFDF00DBDBDB00D9D9D900D7D7
+ D700CCCCCC00393939000000000000000000D4BEAF00FFFFFF00FFFFFF00FFFF
+ FF00FEFDFC00BBA69600D4C5BA008F725B00E2DDD90000000000000000000000
+ 0000000000000000000000000000000000008FA4AC00CEF6FA00CEF7FC00CBF6
+ FA007397A200C8F4F900667D8A00B1DDE7004C6C7C0034617800A2DCF2007FD5
+ F4004E5E6F00000000000000000000000000ACACC5005A5AB700D0D0FF00DDDD
+ FF00D3D3FF00D3D3FF00DBDBFF00CDCDFF00CBCBFF00DBDBFF00D3D3FF00D3D3
+ FF00E6E6FF00E1E1FF006A6AC0009D9DBB00000000009B9B9B00E6E6E600E7E7
+ E700828282007D7D7D00E6E6E600E4E4E40082828200686868007B7B7B00D9D9
+ D900CFCFCF005B5B5B000000000000000000D8C2B200FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00C7B1A200A5826600E2DDD9000000000000000000000000000000
+ 000000000000000000000000000000000000000000008FA4AC008FA4AC008FA4
+ AC005B8D9F00CBF2F600C5F2F900BCE7EE004666760073858F007A8A95007585
+ 910000000000000000000000000000000000FBFBFC008888AC005D5DB200B9B9
+ F200E0E0FF00E0E0FF00B7B7FF005454D7004D4DD400B2B2FD00E0E0FF00E0E0
+ FF00BCBCF4006262B8007F7FA500F9F9FB000000000000000000A8A8A8009898
+ 9800000000008C8C8C00E8E8E800E6E6E6006060600000000000000000007070
+ 700067676700000000000000000000000000D8C2B200D8C2B200D4BFAE00D4BF
+ AE00CEB8A900C8B2A300E9E2DE00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000086B3C30082ADBD00799FB0000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FCFCFC00B2B2C4005959
+ 94004D4D9C004949A100404096008686AA008B8BAC00404095004747A0004D4D
+ 9D0057579400A9A9BF00FAFAFB00000000000000000000000000000000000000
+ 00000000000090909000989898008A8A8A008484840000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000B9A39500634935006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 350063493500634935006349350000000000B7A2930063493500634935006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 3500634935006349350063493500634935000000000063493500634935006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 3500634935006349350000000000000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5A5A500A5A5A500A5A5A500A5A5
+ A500A5A5A500A5A5A500000000000000000000000000B9A39500FEFDF200DEDB
+ D500DAD2CB00D7CBC200D3C2B700CEBAAD00C7B0A300C1A99C00BAA19300B297
+ 8900AB908100A5897A006349350000000000B7A29300FBF6F000E4E1DC00E0DD
+ D700DFD7CE00DFD3C800E0D0C100E0CCBE00E3C8B600E3C7B300E3C4AE00E3C3
+ AC00E3C3AC00E3C3AC00E3C3AC0063493500BEA99A00FEF0E800FEEFE600FEED
+ E300FEEBE000FEE9DD00FEE7DB00FFE6D800FFE4D600FFE2D400FFE1D200FFE0
+ D000FFDFCE00FFDECD0063493500000000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5A5A500A5A5A500A5A5A500A5A5
+ A500A5A5A500A5A5A500000000000000000000000000B9A39500FFFFF600B3D0
+ DD00337085009DA7AB00FADCC600F9D2B800F4C6AA00EFBDA000E7B39500DDA7
+ 8900D39C7D00AB9081006349350000000000B7A29300FCF8F400AF8D7A00A37A
+ 65008C5D440076452C006F3E2500FAEEE400AF8D7A00A37A65008C5D44007645
+ 2C006F3E2500F9E6D900E3C5AF0063493500C0AA9B00FEF2EB00CB977D00DB9D
+ 7F00EAA38000E99D7700E8976D00E7906300E6885900E5824F00E47C4600E478
+ 3F00E57E4A00FFDFCE0063493500000000000000000000000000FFFFFF00FFFF
+ FF00A5A5A500A5A5A500A5A5A500A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00A5A5A500A5A5A500000000000000000000000000B9A39500FFFFF60000AF
+ FC00C1FDFF002D677F00FBE4D200B7A39900B49F9200B69B8E00AF948500AD8F
+ 7F00DDA78900B29789006349350000000000B7A29300FCFAF600C8AD9B00E5D2
+ C700D0A69100A984780084523700FAEFE500C8AD9B00E5D2C700D0A69100A984
+ 780084523700F9E7DA00E2C8B40063493500C1AC9D00FEF4EE00C7907400FCBF
+ 9E00F3AD8800F3A77F00F09D7300EC956A00E58C6200DE825A00D6795300CD70
+ 4B00E2733A00FFE0D00063493500000000000000000000000000FFFFFF00FFFF
+ FF00A5A5A500A5A5A500A5A5A500A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00A5A5A500A5A5A500000000000000000000000000BAA59600FFFFF600B6DD
+ EF0000AFFC00B2D2DC00FCEDDD00FBE2CE00F9D7C000F8CDB200F4C3A600EFBD
+ A000E7B39500BAA193006349350000000000B7A29300FDFCF900CEB6A700B9E4
+ FF00AFBFFF004E87FF00A3765F00FAF0E700CEB6A700B9E4FF00AFBFFF004E87
+ FF00A3765F00F9E8DB00E1CBB90063493500C3AD9E00FEF6F000C68E7200FDC5
+ A800FFE7D900FFE4D600FFE1D100FFDDCC00FFDBC800FFD5C200FFD0BC00D679
+ 5300E2723900FFE1D20063493500000000000000000000000000FFFFFF00FFFF
+ FF00A5A5A500A5A5A500A5A5A500A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00A5A5A500A5A5A500000000000000000000000000BCA69800FFFFF600FFFF
+ F600FFFFF600FEFCF200FEF5E800FCEAD900FBDFCB00F9D4BC00F8CCB000F4C3
+ A600EFBDA000C1A99C006349350000000000BAA59600FDFDFB00D4BEB200D1BB
+ AB00CBB09E00C1A38F00B2917A00FAF1EA00D4BEB200D1BBAB00CBB09E00C1A3
+ 8F00B2917A00F9E9DD00E0CEBF0063493500C4AE9F00FDF7F300C68E7200FDCC
+ B100FDC5A700FCBE9D00F9B38F00F6AA8300F3A17800ED986F00E68E6600DE82
+ 5A00E2723900FFE2D40063493500000000000000000000000000FFFFFF00FFFF
+ FF00A5A5A500A5A5A500A5A5A500A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00A5A5A500A5A5A500000000000000000000000000BEA89900FFFFF60095A3
+ FF002E3BA5008F96CD00FEFAF000FDF2E400FCE8D500FADCC600F9D2B800F8CA
+ AE00F4C3A600C7B0A3006349350000000000BEA99A00FEFEFD00FDFDFB00FDFB
+ F900FCFAF600FCF8F300FCF6F000FBF3ED00FAF2E900FAEFE600FAEEE400FAEC
+ E200FAEBE000FAEADE00E0D2C50063493500C5B0A100FDF9F500C68E7200FED2
+ B900FFECE100FFE9DD00FFE7D900FFE4D500FFE1D100FFDDCC00FFDBC800E58C
+ 6200E3733900FFE4D60063493500000000000000000000000000A5A5A500A5A5
+ A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5A5A500A5A5A500A5A5A500A5A5
+ A500FFFFFF00FFFFFF00000000000000000000000000C0AA9C00FFFFF6004360
+ FF0095B3FF002F39AD00FFFFF600B9A79E00B6A29700B49D9100B2998B00B096
+ 8800F7C8AC00CCB6A9006349350000000000BEA99A00FFFEFE00AF8D7A00A37A
+ 65008C5D440076452C006F3E2500FCF5EF00AF8D7A00A37A65008C5D44007645
+ 2C006F3E2500FAEBDF00DFD5CB0063493500C7B1A200FDFBF700C68E7200FFD7
+ C200FED1B800FDCBAF00FDC4A600FCBD9C00FBB59100F7AB8400F2A07700EC94
+ 6A00E3733900FFE6D80063493500000000000000000000000000A5A5A500A5A5
+ A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5A5A500A5A5A500A5A5A500A5A5
+ A500FFFFFF00FFFFFF00000000000000000000000000C3AE9E00FFFFF60096A3
+ FF004661FF0094A1FF00FFFFF600FFFEF500FEF7EA00FCEDDD00FBE2CE00F9D7
+ BF00F8CDB200CEB8AB006349350000000000C3AE9E00FFFFFE00C8AD9B00E5D2
+ C700D0A69100A984780084523700FCF8F300C8AD9B00E5D2C700D0A69100A984
+ 780084523700FAECE100DED8D00063493500C8B2A300FDFCF900C68E7200FFDC
+ C900FFF0E800FFEEE500FFECE000FDC3A500FCBD9B00FBB69100FAAF8800F09C
+ 7200E3743A00FEE7DB0063493500000000000000000000000000A5A5A500A5A5
+ A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5A5A500A5A5A500A5A5A500A5A5
+ A500FFFFFF00FFFFFF00000000000000000000000000C5B0A000FFFFF600FFFF
+ F600FFFFF600FFFFF600FFFFF600FFFFF600FFFDF300FEF4E700FCEAD900FADE
+ CA00F9D4BC00D0BBB0006349350000000000C8B2A300FFFFFF00CEB6A700B9E4
+ FF00AFBFFF004E87FF00A3765F00FCFAF700CEB6A700B9E4FF00AFBFFF004E87
+ FF00A3765F00FAEDE200DEDBD50063493500C9B3A400FDFDFB00C78F7400FFDF
+ CE00FFDBC800FFD6C000FED1B700FDCAAE00FDC3A500FCBD9B00FBB69100FAAF
+ 8700E4784000FEE9DD0063493500000000000000000000000000A5A5A500A5A5
+ A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5A5A500A5A5A500A5A5A500A5A5
+ A500FFFFFF00FFFFFF00000000000000000000000000C7B1A200FFFFF600FF9B
+ 9900B8303000FF8D6A00FFFFF600FFFFF600FFFFF600FEFAF000FDF1E400FCE7
+ D500FADCC700D3C1B6006349350000000000CCB6A700FFFFFF00D4BEB200D1BB
+ AB00CBB09E00C1A38F00B2917A00FDFCF900D4BEB200D1BBAB00CBB09E00C1A3
+ 8F00B2917A00FAEFE600E2E1DB00644A3600CAB4A500FDFEFD00CE9F8700C893
+ 7800C78C6F00C88B6D00C8866600C67E5A00C4774F00C3714700C36B3F00C467
+ 3900CC744500FEEBE00063493500000000000000000000000000A5A5A500A5A5
+ A500A5A5A500A5A5A500A5A5A500A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00000000000000000000000000C9B3A500FFFFF600FF83
+ 7E00FFC3C400B7252500FFFFF600BAAAA100B8A69C00B6A29600B39D9000B198
+ 8B00FBE4D200D6C7BD006349350000000000CCB6A700FFFFFF00FFFFFF00FFFF
+ FF00FFFFFE00FFFEFE00FEFDFD00FEFDFB00FDFBF900FDFAF700FCF8F300FCF5
+ EF00FBF4EC00FBF1E900FAEFE600644A3600CBB5A600FDFFFE00FDFEFD00FDFD
+ FB00FDFCF900FDFBF700FDF9F500FDF7F300FEF6F000FEF4EE00FEF2EB00FEF0
+ E800FEEFE600FEEDE30063493500000000000000000000000000A5A5A500A5A5
+ A500A5A5A500A5A5A500A5A5A500A5A5A500FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00000000000000000000000000CBB5A600FFFFF600FFA9
+ A900FF827F00FF989300FFFFF600FFFFF600FFFFF600FFFFF600FFFEF400FDF7
+ EB00FCEDDD00D7CCC3006349350000000000EAAA8B00EAAA8B00E9A78700E9A2
+ 8000E99D7700E7976D00E6906500E6895B00E4825100E37B4800E3764100E273
+ 3A00E2723800E2723900E2723900C8622F0000000000CBB5A600CAB4A500C9B3
+ A400C8B2A300C7B1A200C5B0A100C4AE9F00C3AD9E00C1AC9D00C0AA9B00BEA9
+ 9A00BDA89900BCA7980000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000CBB5A600FFFFF600FFFF
+ F600FFFFF600FFFFF600FFFFF600FFFFF600FFFFF600FFFFF600FFFFF600FEFC
+ F300FDF4E700FCEADA006349350000000000EAAA8B00FFC2A200FEBF9D00FCBB
+ 9800FCB89400FBB59000FAB18C00F9AD8700F9A98100F8A67C00F6A27800F59F
+ 7300F59B6D00F4986800F3956500CD6531000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000CCB6A700CCB6A700CAB5
+ A600CAB3A400C8B2A300C5AFA100C3AD9E00C0AB9C00BEA99A00BCA69700BAA4
+ 9600B8A39400B8A39400B8A3940000000000EAAA8B00EAAA8B00EAAA8C00EAA9
+ 8900EAA58400E9A17F00E89D7800E7977000E7926800E68D6000E5885900E483
+ 5100E47E4A00E4794300E3763E00E27239000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000091877D00525050005954510058524D0058504900584E
+ 4700574C4400564A4000584C42004B413A000000000000000000000000000000
+ 000000000000000000000000000000000000745A4600694F3B00CAC2BB000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000D7D7D70072747400C6C7C7000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000D7D7D70072747400C6C7C7000000000000000000000000000000
+ 00000000000000000000AC9A8D00FFFFFF00FDFFFF00FFFDF700FFF8ED00FEF1
+ E000FDEAD500FCE5CC00FFEACF00574B41000000000000000000000000000000
+ 0000000000000000000000000000BBADA10081685400CAB2A400684E3A000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6C7C6004D504F00328DB300436674000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6C7C6004D504F00328DB300436674000000000000000000000000000000
+ 00000000000000000000AC989000FFFFFE00FFFFFF00FEF8F400FFF2ED00FCEB
+ E300FCE6D900FCE0CE00FFE2CF00574B4100000000000000000000000000967C
+ 69000000000000000000000000008C735F00DFCABE00BDA79800705743000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C6C7
+ C6004D504F002B97C60087D8EF006493A5000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C6C7
+ C6004D504F002B97C60087D8EF006493A5000000000000000000000000000000
+ 00000000000000000000AA9A8D00FFFFFF00FFFFFF00FFFBF900FEF6F200FCF1
+ EC00FCECE200F9E3D600FEE7D500574B41000000000000000000000000009C83
+ 70007F655200CEC6BF00CABEB50091796600E9D7CE007C634F00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C6C7C6004D50
+ 4F002B97C60087D8EF006493A500000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C6C7C6004D50
+ 4F002B97C60087D8EF006493A500000000000000000000000000000000009187
+ 7D005250500059545100AB998C00FFFEFF00FFFFFF00FFFEFD00FFF9F800FCF3
+ F000FCEDE600FDE8DD00FFEDDF00574B4100000000000000000000000000A38A
+ 7700DCD1CB006D533F0091796600DDCEC500D6C5BB00856C5900000000000000
+ 000000000000000000000000000000000000000000000000000000000000E8E2
+ DE00CDBAAD00937C6B0077584400775843009C7D6B00ABADAC002D3442002B97
+ C60087D8EF006493A5000000000000000000000000000000000000000000E8E2
+ DE00CDBAAD00937C6B0077584400775843009C7D6B00ABADAC002D3442002B97
+ C60087D8EF006493A5000000000000000000000000000000000000000000AC9A
+ 8D00FFFFFF00FDFFFF00AB9B8E00FEFEFE00FFFEFF00FFFFFF00FFFFFF00FFFF
+ FE00FFFEF900FCF9F000FEFDF100574B4100000000000000000000000000AA91
+ 7F00F9F4F100DDD4CD00856C5800F3EAE500947C6900DCD4CE00000000000000
+ 0000000000000000000000000000000000000000000000000000DED6D0008668
+ 54009D816500BFA27E00D0AD8700B4957300937559006E5440004F80910087D8
+ EF006493A5000000000000000000000000000000000000000000DED6D0008668
+ 54009D816500BFA27E00D0AD8700B4957300937559006E5440004F80910087D8
+ EF006493A500000000000000000000000000000000000000000000000000AC98
+ 9000FFFFFE00FFFFFF00AA998F00FBAC8500ED916500E2825600DF7D4F00DB74
+ 4600D96E4000D4693800D9693600574B4100000000000000000000000000B098
+ 8600FCFAF900FBF7F600F9F5F200F7F2EE00896F5C00664C38006A503C00765C
+ 49000000000000000000000000000000000000000000F7F5F300896E5C00C1AB
+ 8B00ECD1AA00EED2AE00ECCFA700E7C79E00D8B28A00A1816200725642006493
+ A5000000000000000000000000000000000000000000F7F5F300896E5C00C1AB
+ 8B00ECD1AA0010708800114A5D0012445600D8B28A00A1816200725642006493
+ A50000000000000000000000000000000000000000000000000000000000AA9A
+ 8D00FFFFFF00FFFFFF00C59F9400AA9B8C00B1907900C1795A00AE704F00AA63
+ 470099583E0098583B009A5A3C007A4E3B00000000000000000000000000B79F
+ 8D00FFFFFE00FEFDFC00FDFBFA00FBF8F700FAF6F300DFD5CE00886E5B000000
+ 00000000000000000000000000000000000000000000C5B7AE00B0998100F2DF
+ BA00F3E1C100F2E1C100F0DEBB00EDD8B200E7CBA300D3AD8700927357006D66
+ 5D000000000000000000000000000000000000000000C5B7AE00B0998100F2DF
+ BA00F3E1C10021889A0020B8D3000C242A00E7CBA300D3AD8700927357006D66
+ 5D000000000000000000000000000000000091877D005250500059545100AB99
+ 8C00FFFEFF00FFFFFF00FFFEFD00FFF9F800FCF3F000FCEDE600FDE8DD00FFED
+ DF00574B4100000000000000000000000000000000000000000000000000BDA6
+ 9400FFFFFF00FFFFFF00FFFFFF00FEFDFD00E2DAD5009A826F00000000000000
+ 00000000000000000000000000000000000000000000B19E9100CDBCA400139A
+ C6001E98B6001E92AD001A809A000F5267000D313E000E3C4F00B5947200886E
+ 5E000000000000000000000000000000000000000000B19E9100CDBCA400139A
+ C6001E98B6001E92AD003DD4EE000F5267000D313E000E3C4F00B5947200886E
+ 5E0000000000000000000000000000000000AC9A8D00FFFFFF00FDFFFF00AB9B
+ 8E00FEFEFE00FFFEFF00FFFFFF00FFFFFF00FFFFFE00FFFEF900FCF9F000FEFD
+ F100574B4100000000000000000000000000000000000000000000000000C3AC
+ 9900FFFFFF00FFFFFF00FFFFFF00ECE7E300AB93810000000000000000000000
+ 0000000000000000000000000000000000000000000097817100E3DAC40039AF
+ D000A4F0FC008BEBF90062EBFB0043D8F10030BED60010475500CCA682007254
+ 3F00000000000000000000000000000000000000000097817100E3DAC40039AF
+ D000A4F0FC008BEBF90062EBFB0043D8F10030BED60010475500CCA682007254
+ 3F0000000000000000000000000000000000AC989000FFFFFE00FFFFFF00AA99
+ 8F00FBAC8500ED916500E2825600DF7D4F00DB744600D96E4000D4693800D969
+ 3600574B4100000000000000000000000000000000000000000000000000C8B0
+ 9E00FFFFFF00FFFFFF00F6F2F000BDA593000000000000000000000000000000
+ 00000000000000000000000000000000000000000000BFB0A600CFC4B60057BA
+ DE0068C2DD0045C0CF0045C0CF0029A1B6001682900012768D00C0A27D00795C
+ 48000000000000000000000000000000000000000000BFB0A600CFC4B60057BA
+ DE0068C2DD0045C0CF0082ECFB0029A1B6001682900012768D00C0A27D00795C
+ 480000000000000000000000000000000000AA9A8D00FFFFFF00FFFFFF00C59F
+ 9400AA9B8C00B1907900C1795A00AE704F00AA63470099583E0098583B009A5A
+ 3C007A4E3B00000000000000000000000000000000000000000000000000CBB4
+ A200FFFFFF00F7F4F100CAB3A100000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000E1DAD600C1B4A800F0EB
+ E300FBFAF400FBF9F100FAF5EA00F5EDD700F1DFBF00E6CBA4009E856800B6A7
+ 9C000000000000000000000000000000000000000000E1DAD600C1B4A800F0EB
+ E300FBFAF40062BDDA00ABF4FC002FA8C600F1DFBF00E6CBA4009E856800B6A7
+ 9C0000000000000000000000000000000000AB998C00FFFEFF00FFFFFF00FFFE
+ FD00FFF9F800FCF3F000FCEDE600FDE8DD00FFEDDF00574B4100000000000000
+ 000000000000000000000000000000000000000000000000000000000000CBB4
+ A200F6F3F000CBB4A20000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000F3F0EE00C1B3A900D1C6
+ BE00F6F4EA00F9F6E600F6F2DE00F4EACE00E5D4B200B59E80007A5E4A00EBE7
+ E5000000000000000000000000000000000000000000F3F0EE00C1B3A900D1C6
+ BE00F6F4EA0061BDE0003DAFD00021A4CA00E5D4B200B59E80007A5E4A00EBE7
+ E50000000000000000000000000000000000AB9B8E00FEFEFE00FFFEFF00FFFF
+ FF00FFFFFF00FFFFFE00FFFEF900FCF9F000FEFDF100574B4100000000000000
+ 000000000000000000000000000000000000000000000000000000000000CBB4
+ A200CBB4A2000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000E7E0DC00C0B2
+ A900CABFB300D6CBBB00DED4BB00C3B29800A59076008D735F00D4CAC2000000
+ 0000000000000000000000000000000000000000000000000000E7E0DC00C0B2
+ A900CABFB300D6CBBB00DED4BB00C3B29800A59076008D735F00D4CAC2000000
+ 000000000000000000000000000000000000AA998F00FBAC8500ED916500E282
+ 5600DF7D4F00DB744600D96E4000D4693800D9693600574B4100000000000000
+ 000000000000000000000000000000000000000000000000000000000000CBB4
+ A200000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000F7F5
+ F400E0D9D300C7B9AF00B7A69A00A4918200BAAA9D00F2E7E200000000000000
+ 000000000000000000000000000000000000000000000000000000000000F7F5
+ F400E0D9D300C7B9AF00B7A69A00A4918200BAAA9D00F2E7E200000000000000
+ 000000000000000000000000000000000000C59F9400AA9B8C00B1907900C179
+ 5A00AE704F00AA63470099583E0098583B009A5A3C007A4E3B00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFE8BC00D48E7D00A88B3A00D7DE
+ 93009F773C00BDB04400CAF28D00FCFFF000C7CD94008B62350094492900DBE9
+ 6C007C5C2700D0BB5800D5EA7D0093B57F000000000000000000000000000000
+ 0000A5795F0080472800804728007F4425007E4121007C3E1C007B3A18007936
+ 130078330E0077300B00762E0800000000000000000000000000000000000000
+ 0000F9F5F100EFDDC400F1D1A900EDCB9D00EDCB9E00F1D0AA00F0DCC300F8F4
+ EF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFEFAA00D78D4B00D9692D007C64
+ 2800957C0E00A1890100ECFF4600FDFFE400DDE68B00FFF0A400B1410D00AD71
+ 1F00AF8A2E00B2931800F0FC4400C8E070000000000000000000000000000000
+ 0000A97E6600FEF1EA00FEF1EA00FCECE300FAE4D900F6DBCC00F3D1C000F0C9
+ B400EEC1A900ECBCA20077300A00000000000000000000000000FEFDFD00EFDD
+ CC00E1A97700D8894E00E4915D00F5A67A00F7A97E00E8956300D8895100DCA2
+ 7000EDD9C700FEFEFD0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFF0A900EC885E00FFC28800CF94
+ 7A00AF6F1100E8BE4700E5541C00FFFFE200DBE58800AC631F00FFF3A100ED9D
+ 6200B8872B00D9AE1700BE921700C0AA4A000000000000000000A5795F008047
+ 2800804728007F4425007E4121007C3E1C007B3A18007936130078330E007730
+ 0B00762E0800EEC1A80077320D000000000000000000FDFCFC00E8CEB800D383
+ 4A00AB49180098391300AF512E00C6694600C96C4900B65936009C3F1A00A444
+ 1400C7774000E5C8B000FDFDFC00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FCF2B200FFEEAF00FFF6AA00F3DE
+ B80096642800814A17009B552600FFFFF400E1E7A000FFF4AC00FFF4AB00FFEF
+ AC00A8854100BC833E00BB9842007D5532000000000000000000A97E6600FEF1
+ EA00FEF1EA00FCECE300FAE4D900F6DBCC00F3D1C000F0C9B400EEC1A900ECBC
+ A20077300A00F0C7B100783410000000000000000000EDDACE00CA7E4A009238
+ 0F007A20000087391C00944A2E00973F1C00983F1C00964C3100883C20007B22
+ 010089300A00BB6F3E00E9D4C600000000000000000000000000000000000000
+ 000000000000000000000000000096492400EADBD30000000000000000000000
+ 000000000000000000000000000000000000FFEDAB00F3916900B0810700C8D5
+ 6100EA9C5A00FF897B00C8C11400FFFFDF00E6EE9100A6611B00B2480B00E6FB
+ 3B00FFEFAB00F3AB6500AD781000C8D75E00A5795F0080472800804728007F44
+ 25007E4121007C3E1C007B3A18007936130078330E0077300B00762E0800EEC1
+ A80077320D00F2CEBB007A37140000000000F8F3F100D49C75008B3D15006017
+ 000071250900BA9B8F00D4C7C30094503500924A2E00D1C2BD00BCA29A00752C
+ 1200631800007B300D00C58A6500F6EFED000000000000000000000000000000
+ 00000000000000000000000000009D4D25009D4E2800EADBD300000000000000
+ 000000000000000000000000000000000000FFF4A900FFECA800D03514008545
+ 2300FFF0A300FFD9B600D8351400FFFFF200E5ED9000FFF89F00D13C2200AE38
+ 0E00FFF8A500FFF1A400BE311600863C2200A97E6600FBEFEB00CFA89500C799
+ 8300BA928000A783710096746300856557004A372B00574B3F0077300A00F0C7
+ B10078341000F5D7C6007B3A180000000000E9D2C400A9623800521A04005114
+ 000063240F00CBBCB800F7FAFB00985F4B0091554200F0F0F100D6CAC7006B30
+ 1D00551400004D160200904D2800E4CABB00000000000000000000000000CF83
+ 5D00924723009A4B2500A24F2700AB542900BF6A3F00A0502A00EADBD3000000
+ 000000000000000000000000000000000000FFF6A40094410D00FFF1A6007D53
+ 2900FFF49C00865E0600F2AE6B00FFFFF400DFE98C009B521600FFFA9700924E
+ 0B00FFF8A00095580E00FFF69800714F2100AE856D00FFFFFF00F3DFD500DCAF
+ 9800D39F8700CA9B8500C1978200523928009F85740039342F0077320D00F2CE
+ BB007A371400F8DFD2007C3D1B0000000000DAB19B00783A1800320B00003F0F
+ 0000511E0F00C4B8B500F5F7F800925D4A008A534000EDEDED00D3C9C700612E
+ 1D0047100000340B00005E290F00CBA28D00000000000000000000000000D78B
+ 6500FDB08900F7905C00EC885600DE7F4F00D1764800C46E4200A2563100EADB
+ D30000000000000000000000000000000000FFFFE500FFFFE100FFFFE100FFFF
+ EA00FFFFE100FFFFDF00FFFFE300FFFFF800FFFFE600FFFFE200FFFFE200FFFF
+ E100FFFFE500FFFFE200FFFFE100FFFFEC00B28B7400B4A39600FEFBFA00F1DF
+ D500DFB19B00C9A79700715B4C00C7B4AA0070655D004B423F0078341000F5D7
+ C6007B3A1800FBE6DB007D401F0000000000C4927D005D2B1200360E0100581B
+ 03006C2D1500CABBB700F5F7F800AA6E5600A3644C00EDEDED00DBCEC9008744
+ 2900732708005C1E0500652A0D00B6826D00000000000000000000000000DE92
+ 6C00FCB99700FDA57800FC935E00F28C5900E5845300D87B4C00C66E4100AE58
+ 2B0000000000000000000000000000000000FFFFF100FFFCF700FFFFE500FFFF
+ EA00FFFFEB00FFFFDD00FAFFE500FFFFF900FFFFEF00FFFEF400FFFFEF00FFFF
+ DE00FFFFF200FFFFDF00FCFFE300FCFFF000B7927B00ECE5E100AE9A8A00FCF5
+ F200F0DDD2006D5646009D8A7F009D8E86004C342900ECBCA2007A371400F8DF
+ D2007C3D1B00FCEDE4007E43230000000000CA957E0099481D008A3511009B3F
+ 170097472600D1C0BA00F6F7F800BC7E6300B3735900EDEDED00E1D2CC00A458
+ 3800A1441B009B401800A5491C00C4897100000000000000000000000000E498
+ 7200FBC3A600FDBE9E00FEAE8500FFA87D00F89D6F00E5835100AE582B00F4E7
+ E10000000000000000000000000000000000FFF1A000A8521C00E4692700989C
+ 3300BA752500DC931F00DCFF4C00FAFFE600CDD87C00FFDF9F00CB3E1100ABA0
+ 020099551A00DA661F00E4FF4800C2ED8600BC988200FFFFFF00E2D8D200AF99
+ 89009E897C00C5A89800BAABA300BBA79D00FDDAC800EDC3AC007B3A1800FBE6
+ DB007D401F00FEF1EA007F45250000000000DCB09C00C2643300AD502800B055
+ 2C00AA573700D6C3BD00F6F7F800CA8C7100C07F6500EDECEC00E6D6D000B669
+ 4800B4582F00B0552D00B95E2F00D4A49100000000000000000000000000E89C
+ 7600E2967000DA8E6800D1855F00DB906A00F79A6B00AE582B00F4E7E1000000
+ 000000000000000000000000000000000000FFF79E00D4985600DA5541007E1D
+ 1F00AD842700CFB53F00D4801000FFFFE000D9E98B00A2781F00FFDDB700FF72
+ 730086571300EACA4800BD911600BCAD4900C09D8800FFFFFF00FFFFFF00E6DC
+ D600E9DACD00E2E2F2005568CC003554CF00D0C3D400EECAB8007C3D1B00FCED
+ E4007E432300A2745A009E6F540000000000E4CBC300D6865C00D4794F00D377
+ 4F00C8755200DECBC300F7F9FA00E1A38900D7977B00EEEEEE00EDDDD700D386
+ 6500D67A5100D67C5200CF7C5300E1C4BB000000000000000000000000000000
+ 0000000000000000000000000000E5997300C5764E00F3E6DF00000000000000
+ 000000000000000000000000000000000000FFEEAD00E39F5E00C7A24800906B
+ 3F00957B1100A97B2700C0732A00FFFFE900D7E58D00FFEFA800FFF1A300D793
+ 5000935D1E00A6791000987B13008C6F3200C4A38E00FFFFFF00FFFDFC00FFFF
+ FF00FFFFFB006572C9004BA0ED002374CB002A4AC100EED3C5007D401F00FEF1
+ EA007F452500000000000000000000000000F5F0F000DBA38800F2A07300F49A
+ 7100EA956F00E1C0B100E9DCD600F0AD9000ECA58500E4D3CB00E8CABB00ED9C
+ 7800F79D7300F39F7200D7997F00F2EBEB000000000000000000000000000000
+ 0000000000000000000000000000E89C7600F8EDE80000000000000000000000
+ 000000000000000000000000000000000000FFE4BB00C17C6D0099823200C3C9
+ 820085522A00821E1C00ACB03F00FFFFEB00CAD198009762410084461E00E1ED
+ 7500FFE4BB00DE9E860090772F00D3DD9100C7A79200FFFFFF00FFFBFA00FFFB
+ FA00FFFFFD008D97D20093C3E8004EA5EF00656CBA00EFDBD1007E432300A274
+ 5A009E6F540000000000000000000000000000000000E5D2CD00E6A78200FFBE
+ 9600FEB99600EFB29300E9AF9300F9B69500FAB69400E6AC8F00EBAE9000FCB9
+ 9500FFBF9800E4A07E00E2CAC500000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFF1A700C3673200EF6F3A008971
+ 2900975F0E00D1492F00D64F1700FFFFE900DEEC8E00FFEDA800C03B0F00B584
+ 1800FFF3A800F2A36400E56E370092762F00E2BDA600FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00E2E5F5009BA5DD008D96D300ECE9F100FEF1EA007F4525000000
+ 00000000000000000000000000000000000000000000FCFCFC00DFC2BA00E5B1
+ 9100FBD2B300FFD8BD00FFD6BD00FFD5BC00FFD5BC00FFD7BE00FFD9BF00FBD2
+ B500E4AD9100DDBDB500FCFBFB00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFEFA800F18C6500F8A16800CE96
+ 7900F2A36400E5AF6200AB631B00FFFEF700DCEC8E00AD572100FFEEA400FC93
+ 7200FFF0AB00EF955F00EF9F6000D1917900E2BDA600E2BDA600C1A08A00C1A0
+ 8A00BD998300B7927B00B28A7200AC826A00A77B6200A2745A009E6F54000000
+ 0000000000000000000000000000000000000000000000000000FDFDFD00E3CF
+ CA00DCB29E00E6C2AA00F4D7C100FEE3CE00FEE4CE00F4D8C200E6C1AA00DBAF
+ 9B00E2CBC700FDFDFD0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFF3AF00FFEEAB00FFF7A700FDDF
+ B600FFF3A800FFF1A100FFF79F00FFFFF400DEE99900FFF6A900FFF5A900FFEE
+ AE00FFF6AC00FFEFAB00FFF3A800FFE4BB000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000F3EDED00E2CBC400DDBDB300D7AEA400D6ADA200DCBBB000E2C8C200F1EA
+ EA00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008442
+ 3100844231000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008442
+ 3100844231000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000008C42
+ 39008C4239000000000000000000000000000000000000000000000000000000
+ 0000F0E1D900CB9E8700AE7050009956330099563300B1725200D1A28A00F4E5
+ DE0000000000000000000000000000000000F3F1EF00E3DEDB00927A69008C75
+ 630087705E00E3DEDB007F6654007A624F00755D4A00E3DEDB006E5441006A51
+ 3E00674E3A00E3DEDB0000000000000000000000000000000000000000000000
+ 000000000000DEEAE00000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000A552
+ 4200A5524200A5524200A54A42009C4A42009C4A42009C4A3900944A39009442
+ 39008C4A39008C4239008C4239008C423900000000000000000000000000E2C8
+ BB00B5785700A7562D00B45C2E00B65C2E00B55C2D00B55C2D00BB5F3300D38D
+ 6A00F1D5C700000000000000000000000000E3DEDB00AE988800EFE3DD00F2E7
+ E100EDDFD700836B5900B79B8B00DBBDAD00D9B7A60072594600AE8B7700D0A6
+ 9200CC9E8700654B3800E3DEDB00000000000000000000000000000000000000
+ 00000000000009631400DEEAE000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000B55A
+ 4200AD524200AD524200A5524200A5524200A5524200A55242009C4A42009C4A
+ 42009C4A3900944A3900944A39008C4A39000000000000000000F1E2DA00B778
+ 5700B35B2E00DF835300F29A6C00F1996E00EE966900E78D5E00DC7D4D00D476
+ 4800E09C7900F9EAE3000000000000000000B7A29300FBF8F700F9F4F200F7F0
+ EC00F4EBE600F1E5DF007F6754007A624F00765D4A00735946006E5542006B52
+ 3E00674E3A00654B380063493500000000000000000000000000000000000000
+ 00000000000011681B0004600F00DEEAE0000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000B55A
+ 4A00B55A4A00B5524A000000000000000000000000000000000000000000A552
+ 42009C4A42000000000000000000000000000000000000000000CE9F8700AA57
+ 2D00DF835300FBAD8700FECBB000FDE9DF00FBE7DD00F1BCA100DC885D00D87A
+ 4A00E58D5F00F3C4AD000000000000000000B7A29300FDFCFB00FBF9F700FAF5
+ F200F7EFED00F4EAE600F2E5DF00DDDCD700DFD7CE00DECDC000DEC5B600DEBF
+ AC00DBBAA600D8B5A30063493500000000000000000000000000000000000000
+ 0000000000001A6F240020732C0004600F00DEEAE00000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C65A
+ 4A00BD5A4A0000000000B55A4A0000000000000000000000000000000000AD52
+ 4200A55242000000000000000000000000000000000000000000B5745300B85C
+ 2F00F0966800FDC8AE0000000000000000000000000000000000DCA58900CB6D
+ 3F00ED946500F4B291000000000000000000B7A29300FFFFFF00B47F6500B47F
+ 6400EDDDD500B37E6300F4EBE600F1E5DF00EFDFD700EBD9D100E8D3C900E5CD
+ C100E1C6B900D6B3A100634A3500000000000000000000000000000000000000
+ 00000000000023752E002F833D0020732C0004600F00DEEAE000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C663
+ 4A00C6634A000000000000000000BD5A4A00000000000000000000000000B552
+ 4200AD5242000000000000000000000000000000000000000000A0583400BA5E
+ 3100EC946600FBE7DC0000000000000000000000000000000000EFDAD000BF65
+ 3600EE956600F3A985000000000000000000B9A49500FFFFFF00FFFFFF00FDFC
+ FC00FCF9F700FAF4F200F6F0EC00F4EBE500F2E5DF00EEDFD800EBD9D000E8D3
+ C800E5CCC100DBBDAD00634A3600000000000000000000000000000000000000
+ 0000000000002E7C370050A25A002F833D0020732C0004600F00DEEAE0000000
+ 000000000000000000000000000000000000000000000000000000000000D663
+ 5200CE635200000000000000000000000000C65A4A000000000000000000BD5A
+ 4A00B55A4A000000000000000000000000000000000000000000A0583400B65C
+ 2E00DE825300F7E3D80000000000D4886200FEFCFC0000000000EFDAD000BD60
+ 3300ED956700F3AB87000000000000000000BDA79800FFFFFF00968E8800EEDE
+ D700968E8700EDDDD600968D8600958C8500F4EBE600F2E5DF00EFDFD800ECD9
+ D000E8D3C900E0C7BA00634A3500000000000000000000000000000000000000
+ 000000000000388341005DB0680050A25A002F833D0020732C000B661800DEEA
+ E00000000000000000000000000000000000000000000000000000000000D66B
+ 5200D663520000000000000000000000000000000000C65A4A0000000000C65A
+ 4A00BD5A4A000000000000000000000000000000000000000000B6765500B65C
+ 2E00CE6E3D00E5AE9100E9C2AE00DC926D000000000000000000CE997E00BF63
+ 3500EF976C00F5B694000000000000000000C1AB9C00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FDFCFC00FBF8F700FAF4F200F7F0EC00F4EAE600F1E5DF00EEDF
+ D700EBD9D000E6D1C600634A3500000000000000000000000000000000000000
+ 000000000000438A4C006BBF76006BBF760050A25A002F763900D6EDD9000000
+ 000000000000000000000000000000000000000000000000000000000000DE6B
+ 5200DE6B52000000000000000000000000000000000000000000CE635200CE63
+ 5200C6634A000000000000000000000000000000000000000000D5A58C00BE62
+ 3300D06B3800DB7C4D00DE855600E8A17D000000000000000000A65E3A00CB6F
+ 4300F6A37800FACCB3000000000000000000C5AFA000FFFFFF00B4806500B480
+ 6500968E8800C2B0A300968E8700968E8600F9F4F200F7EFEC00F4EBE600F2E5
+ DF00EFDFD800EADBD10063493600000000000000000000000000000000000000
+ 0000000000004B9053006BBF7600A3DAB0002F763900D6EDD900000000000000
+ 000000000000000000000000000000000000E76B5A00E76B5A00E76B5A00E76B
+ 5A00E76B5A00E76B5200DE6B5200DE6B5200DE635200D66B5200D6635200D663
+ 5200CE6352000000000000000000000000000000000000000000F5E6DF00D48F
+ 6A00DB784600F18E5C00F69E7000F4AF8C000000000000000000BE7A5500E48F
+ 6500FDBC9E00FEEFE8000000000000000000C8B2A300FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FDFCFC00FCF8F700F9F5F200F7F0EC00F4EB
+ E600F1E5DF00EEE2DA00644A3600000000000000000000000000000000000000
+ 00000000000052945A00A3DAB0002F763900D6EDD90000000000000000000000
+ 000000000000000000000000000000000000E76B5A00E76B5A00E76B5A00E76B
+ 5A00E76B5A00E76B5A00E76B5A00E76B5A00E76B5200DE6B5200DE635200D66B
+ 5200D66B5200000000000000000000000000000000000000000000000000E2AF
+ 9400E68E6100FAA27600FFB08800FCB997000000000000000000FBF2ED00F6BF
+ A400FEE3D500000000000000000000000000C9B4A500FFFFFF00FFFFFF0066A3
+ 650066A3650066A36500C0B4AD0066A3650066A3650066A26400FAF5F200F7F0
+ EC00F4EBE600EEE2DA00644A3600000000000000000000000000000000000000
+ 000000000000589860002F763900D6EDD9000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000E76B
+ 5A00E76B5A000000000000000000000000000000000000000000000000000000
+ 000000000000DE6B520000000000000000000000000000000000DA8F6A00E39A
+ 7600EDA78300F6B28F00FCB99700FCB997000000000000000000000000000000
+ 000000000000000000000000000000000000C8B2A300FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFCFB00FBF9F700FAF4
+ F200F7F0ED00F3EAE400644A3600000000000000000000000000000000000000
+ 00000000000058986000D6EDD900000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000E76B
+ 5A00E76B5A000000000000000000000000000000000000000000000000000000
+ 00000000000000000000DE6B5200000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000C8B2A300CAB4A500CBB5A600CAB4
+ A500C9B3A400C7B2A300C6B0A100C3AE9F00C1AC9D00BFAA9B00BDA89900BBA6
+ 9700B9A49500B8A39400B7A29300000000000000000000000000000000000000
+ 000000000000D6EDD90000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000E76B
+ 5A00E76B5A000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000FDF6F000E9AC7A00D9701F00D96E1C00E0894900EDB99400EDB8
+ 9400D96F2900D96C2900E5A17500FCF4F0000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000F1CAAA00E18F4C00EBB18300E3914E00DA732300DA742800E088
+ 4800E7A27000E3935C00DB753300F4D5C2000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000F3F1EF00E3DEDB00927A69008C75
+ 630087705E00E3DEDB007F6654007A624F00755D4A00E3DEDB006E5441006A51
+ 3E00674E3A00E3DEDB0000000000000000000000000000000000000000000000
+ 000000000000F6DEC800E28D4400ECB58800DC7A2C00FDF6F000FAECE100DE83
+ 3C00E6A47100DC7A3400F5D6C200000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000007B7B7B00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF000000000000000000E3DEDB00AE988800EFE3DD00F2E7
+ E100EDDFD700836B5900B79B8B00DBBDAD00D9B7A60072594600AE8B7700D0A6
+ 9200CC9E8700654B3800E3DEDB00000000000000000000000000000000000000
+ 00000000000000000000E59B5A00E6995900E4975500EEC19B0000000000EEBE
+ 9700E18C4C00E18B4900EDBA950000000000000000000000000000000000E39A
+ 7500B6623900B05C3300A7532A009D482000923E160089340D00822D0600812C
+ 05000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000FFFFFF000000000000000000B7A29300FBF8F700F9F4F200F7F0
+ EC00F4EBE600F1E5DF007F6754007A624F00765D4A00735946006E5542006B52
+ 3E00674E3A00654B380063493500000000000000000000000000000000000000
+ 00000000000000000000FDF7F200E8A56B00E5985600E5955300E4955500E7A4
+ 6F00E69D6300E8A46D00E18D4B0000000000000000000000000000000000E397
+ 7000F3BCA000D7A18300CE8D6D00C17C5900AF6B4800A76240009B583700812C
+ 05000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0000000000FFFFFF000000000000000000B7A29300FDFCFB00FBF9F700FAF5
+ F200F7EFED00F4EAE600F2E5DF00DDDCD700DFD7CE00DECDC000DEC5B600DEBF
+ AC00DBBAA600D8B5A30063493500000000000000000000000000000000000000
+ 000000000000549C5C0039853F00317A37007F7A3200967B3000E8A36700DF7E
+ 2C00E3925000EBB38600DC772800FDF6F000000000000000000000000000E79B
+ 7400F9C9AF00F5B59400EDA37E00E6956C00DA855900CE794E00AC6543008530
+ 09000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FF000000FF000000FFFFFF00FFFFFF00FFFF
+ FF0000000000FFFFFF000000000000000000B7A29300FFFFFF00B47F6500B47F
+ 6400EDDDD500B37E6300F4EBE600F1E5DF00EFDFD700EBD9D100E8D3C900E5CD
+ C100E1C6B900D6B3A100634A3500000000000000000000000000000000000000
+ 0000000000000000000045944D00BCB27200E8A05E00BD823800FDF7F2000000
+ 0000ECB28200E69E6100E1924E00F1C9A800000000000000000000000000EA9E
+ 7800F9D0BB00F8BDA100F4B09000EF9F7900E6926800DC845900B46B48008B36
+ 0F000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000FFFFFF00FFFFFF00FF000000FFFFFF00FFFFFF00FF000000FFFFFF00FFFF
+ FF0000000000FFFFFF000000000000000000B9A49500FFFFFF00FFFFFF00FDFC
+ FC00FCF9F700FAF4F200F6F0EC00F4EBE500F2E5DF00EEDFD800EBD9D000E8D3
+ C800E5CCC100DBBDAD00634A3600000000000000000000000000000000000000
+ 000000000000A1CFA60071B67A00B6C59000E69B5500E8A46500F0C095000000
+ 0000EEBD9300E69F6100E5985800EFC19C00000000000000000000000000EFA3
+ 7D00FBD7C800F8C7AD00F7B79800F2AB8800ED9F7A00E6946D00BE775500923E
+ 16000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000FFFFFF00FFFFFF00FF000000FFFFFF00FFFFFF00FF000000FFFFFF00FFFF
+ FF0000000000FFFFFF000000000000000000BDA79800FFFFFF00968E8800EEDE
+ D700968E8700EDDDD600968D8600958C8500F4EBE600F2E5DF00EFDFD800ECD9
+ D000E8D3C900E0C7BA00634A350000000000E9AA7900DE813A00DD803900D869
+ 1A00979D540080C58800B0DCB60075B87C0090934A00E4964A00E8A36100E28B
+ 3C00E69E5C00E9A96F00E4995600F2CDAC00000000000000000000000000F3A8
+ 8100FBE1D300F9CEBA00F8BFA500F3B39400F2A88500EB9F7A00D08D6C009A46
+ 1E000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000FFFFFF00FFFFFF00FF000000FFFFFF00FFFFFF00FF000000FFFFFF00FFFF
+ FF0000000000FFFFFF000000000000000000C1AB9C00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FDFCFC00FBF8F700FAF4F200F7F0EC00F4EAE600F1E5DF00EEDF
+ D700EBD9D000E6D1C600634A350000000000F3D2B700E0874200ECB488000000
+ 000095B7720088CB900083C68B008CC59200FDFEFD006A9C5B00F1CCA700EAAE
+ 7300EAAB7000ECB27C00F3CFB00000000000000000000000000000000000F6AD
+ 8600FBE5DA00FBDACA00F9CAB300F8C2A800F6B69800F3B39100DCA38700A24E
+ 25000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FF000000FF000000FFFFFF00FFFFFF00FFFF
+ FF0000000000FFFFFF000000000000000000C5AFA000FFFFFF00B4806500B480
+ 6500968E8800C2B0A300968E8700968E8600F9F4F200F7EFEC00F4EBE600F2E5
+ DF00EFDFD800EADBD1006349360000000000FDF6F100DE7E2F00E7A46F000000
+ 0000FDF6F00090A3520088A45500FDFEFD000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FAB0
+ 8A00FCE1D500FBE2D400FAD8C600F9CDB900F9CAB300F9C6AC00F5BB9D00AA55
+ 2D000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0000000000FFFFFF000000000000000000C8B2A300FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FDFCFC00FCF8F700F9F5F200F7F0EC00F4EB
+ E600F1E5DF00EEE2DA00644A36000000000000000000E8A36800DF7E2E000000
+ 000000000000E2904F00DE833A00F5D8C2000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FDB3
+ 8D00FAB08A00F6AD8600F3A88100EFA37D00EA9E7800E79B7400E3977000E39A
+ 75000000000000000000000000000000000000000000000000007B7B7B000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000FFFFFF000000000000000000C9B4A500FFFFFF00FFFFFF0066A3
+ 650066A3650066A36500C0B4AD0066A3650066A3650066A26400FAF5F200F7F0
+ EC00F4EBE600EEE2DA00644A36000000000000000000F1C8A300E59B5900E8A3
+ 6800EEBA9000E3925000DD7F3200FAECE2000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000007B7B7B007B7B
+ 7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B7B007B7B
+ 7B007B7B7B007B7B7B000000000000000000C8B2A300FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFCFB00FBF9F700FAF4
+ F200F7F0ED00F3EAE400644A36000000000000000000F9E8D900E5944C00E9A8
+ 6E00EAAE7800E8A36800F4D4B900000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000C8B2A300CAB4A500CBB5A600CAB4
+ A500C9B3A400C7B2A300C6B0A100C3AE9F00C1AC9D00BFAA9B00BDA89900BBA6
+ 9700B9A49500B8A39400B7A29300000000000000000000000000E2904100E69D
+ 5900000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000F5D5B500E6954700E69A
+ 4E00FBF0E6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000BD4A0000BD4A0000BD4A0000BD4A0000BD4A0000BD4A0000BD4A0800BD4A
+ 0800BD4A0000BD4A0000BD4A0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000A7B3B2004A0000004D0000004600
+ 010048000B004A0017004C0025004D00310050003C0051024700530552004C09
+ 5500440A57003B035900330060000C002E000000000000000000000000000000
+ 00000000000000000000B4A2A20073383800763B3C00602E2F00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000B5420000FFFFFF00FFFFFF00A5A5A500A5A5A500FFFFFF00FFFF
+ FF00A5A5A500A5A5A500AD42000000000000000000005A636300182121001821
+ 21005A6363000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000A6000400A01021009614
+ 3000981A40009C1D50009F246600A1287800A42D8700A6339800AA37A8009F3C
+ AD00943EAE008634B2007A2BBC00411472000000000000000000000000008C63
+ 64007A4444008F4243008E7A7A008E4B4B00C4616000602D2D0000000000B560
+ 60006E343500CBABAB0000000000000000000000000000000000000000000000
+ 00000000000000000000A5420000FFFFFF00A5A5A500A5A5A500FFFFFF00FFFF
+ FF00A5A5A500A5A5A500A5420000000000005A6363003984B500399CE700218C
+ D6002173A5002121290000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D0000000000ECDADB009D676800C176
+ 7700C97B7B00642E2E006D353600BB666700C867660090454500562B2C007338
+ 3900A851510076383900BA959500000000000000000094390000000000000000
+ 000000000000000000000000000094390000FFFFFF00FFFFFF00A5A5A500A5A5
+ A500FFFFFF00FFFFFF009439000000000000182121007BC6FF0073C6FF004AAD
+ EF003194DE001010100000000000000000000000000000000000000000005A63
+ 630018212100182121005A63630000000000000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D0000000000E0BFC000A65E5E00E493
+ 9300E08C8C00CB7C7C00C5757400D1757500CC6E6E00C8676700A3535300B458
+ 5700C15D5C00BA5A590070383900000000000000000084310000843100000000
+ 00000000000000000000000000000000000084310000FFFFFF00A5A5A500A5A5
+ A500FFFFFF00FFFFFF0084310000000000001010100084D6FF009CE7FF0073C6
+ FF005AB5EF0018212100000000000000000000000000000000005A6363003984
+ B500399CE700218CD6002173A50021212900000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D0000000000E6CBCC00CA8D8D00BC75
+ 7500E5939300E08C8C00DC858500D67D7D00D1767500CC6E6D00C8676600C361
+ 6100BE5C5B00753A3B00DCC3C300000000000000000073290000CE5208007329
+ 0000000000000000000000000000000000007329000073290000FFFFFF00FFFF
+ FF00A5A5A500A5A5A50073290000000000002121210073ADCE009CDEFF009CDE
+ FF0073A5CE005A63630000000000000000000000000000000000182121007BC6
+ FF0073C6FF004AADEF003194DE0010101000000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D000000000000000000AA8E8F00B36A
+ 6C00E5979800E5939300C2747500A4606100A05C5D00B9686800CC6E6D00C767
+ 6600A55353006430310000000000000000000000000063290000CE520800E77B
+ 420063290000000000000000000063290000632900006329000063290000FFFF
+ FF00A5A5A500A5A5A5006329000000000000000000005A636300182121000000
+ 00005A63630000000000000000000000000000000000000000001010100084D6
+ FF009CE7FF0073C6FF005AB5EF0018212100000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D00D8C9CA00B75A5B00AC595A00B45C
+ 5D00EFA2A300C178790087515100E8CDCD00DBB7B800BE858600B8676700CC6E
+ 6D00C86766008D3B3B00703839006E3637000000000052210000CE520800E77B
+ 4200F7AD7B005A2100005A2100005A2100005A21000000000000000000005A21
+ 0000FFFFFF00FFFFFF005A210000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000002121210073AD
+ CE009CDEFF009CDEFF0073A5CE005A636300000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D00C6B1B100DD858600FCB6B800F9B1
+ B200F4AAAB007D3D3D00B1717000CDADAF00E6D4D500B17675009B575800D175
+ 7500CC6E6D00C7676600C46161007D3D3E00000000004A180000CE520800E77B
+ 4200F7AD7B00FFCEB5004A1800004A1800000000000000000000000000000000
+ 00004A180000FFFFFF004A180000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000005A63
+ 630018212100182121005A63630000000000000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D00C5B0B100DE868600FDC0C100FBB5
+ B600F8B1B20090494900DA939400824445008E555600C27E7F0099575800D67E
+ 7D00D1767500C5696A009E515200804041000000000039180000CE520800E77B
+ 4200F7AD7B00FFD6B500FFF7EF00391800000000000000000000000000000000
+ 0000000000003910000039180000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D0000000000E5999A00E2A3A400E095
+ 9600FAB4B600DB929300A96E6F00E7A4A500E49F9F00B0797900C0737400DB85
+ 8400CE787800A35D5D00AE787800A67272000000000029100000CE520800E77B
+ 4200F7AD7B00FFD6B500FFF7EF00BDE7FF002910000000000000000000000000
+ 0000000000000000000029100000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D00000000000000000000000000BB60
+ 6100FBB6B700FDB7B800D78E8F008B48490088474800D1868700E4939300E08C
+ 8C00C37575006533340000000000000000000000000018080000CE520800E77B
+ 4200F7AD7B00FFCEB500FFF7EF00BDE7FF004AADF70018080000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D000000000000000000BC515100F8B2
+ B300FFBBBC00FDB9BA00FCB7B800F9B1B200F4AAAB00EEA3A300E8999900E593
+ 9400E08C8C00BE7172007A484800000000000000000008000000CE520800E77B
+ 4200F7AD7B00FFCEB500FFF7EF00BDE7FF004AADF7000884EF00080000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000009F0003009A1020009013
+ 2E0092193D00961C4D00992362009A2673009E2C8100A0319200A334A200993A
+ A6008E3CA7008132AB00752AB5003E136D000000000000000000E5949300FAB5
+ B600FEB9BA00CA7A7A00C3747500FCB6B800F9B1B200C07A7B00A2626300B873
+ 7400E5939300C3787800A5656600000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000A6000400A01021009614
+ 3000981A40009C1D50009F246600A1287800A42D8700A6339800AA37A8009F3C
+ AD00943EAE008634B2007A2BBC0041147200000000000000000000000000E8A2
+ A200DE8F900000000000CF8A8D00FFBBBC00FCB6B700A0575A0000000000DAAF
+ B000A9696800AA696A0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000B1BEBD005C000000600A14005A0C
+ 1D005B0F26005D1130005F163D0060184800621B5100641E5B00662165005F24
+ 680058256800501F6A00491A7100260C44000000000000000000000000000000
+ 00000000000000000000CE888900D7909100CD818200CD7B7C00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000002929290000000000293131000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000E77B42000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000D7D7D70072747400C6C7C7000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000DE733100DE733100DE7331000000
+ 00000000000000000000E77B3900E77B3900E77B420000000000000000000000
+ 0000E7844A00E7844A00E7844A000000000000000000DCD5C900E1BB9B00E6A5
+ 7200EA935100EC883800EF832D00ED8B3900EA975200E7A97200E2BD9B00DCD6
+ C900000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6C7C6004D504F00328DB300436674000000000000000000000000000000
+ 0000ADEFFF0084DEFF0084DEFF000000000000000000084273001894FF000000
+ 0000C6A5F700AD7BF700AD7BF70000000000DE6B2900DE6B2900000000000000
+ 000000000000DE733100DE733900DE7B3900E77B3900E77B3900000000000000
+ 000000000000E7844A00E7844A000000000000000000E7A66B00F0852B008269
+ 57007B614F00F0862B00F0862B00F0872B00F0862B00F0862B00F0862B00E7A6
+ 6B00000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C6C7
+ C6004D504F002B97C60087D8EF006493A5000000000000000000000000000000
+ 0000ADEFFF0084DEFF0084DEFF0000000000000000001894FF001894FF000000
+ 0000C6A5F700AD7BF700AD7BF70000000000DE6B210000000000DE6B29000000
+ 0000000000000000000000000000DE7331000000000000000000000000000000
+ 0000E77B420000000000E78442000000000000000000DCD7C900E2BF9B00B9A6
+ 9800FFFFFF007259450063483300EE8D3900EB9A5200E7AA7200E2BF9B00DCD6
+ C900000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000C6C7C6004D50
+ 4F002B97C60087D8EF006493A500000000000000000000000000000000000000
+ 0000ADEFFF00ADEFFF0031424A0000000000105A7B0021BDFF0021BDFF000000
+ 0000C6A5F700C6A5F700C6A5F70000000000000000000000000000000000DE6B
+ 2900000000000000000000000000DE733100000000000000000000000000DE7B
+ 3900000000000000000000000000000000000000000000000000000000000000
+ 0000B9A69800E5DEDB00B59C8F00715642000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000E8E2
+ DE00CDBAAD00937C6B0077584400775843009C7D6B00ABADAC002D3442002B97
+ C60087D8EF006493A50000000000000000000000000000000000000000003110
+ 0000180800001808000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000BD4A0800BD4A
+ 0800BD4A0800BD4A0000C64A0000C64A0800C64A0000C64A0800C64A0000C64A
+ 0800C64A08000000000000000000000000000000000000000000000000000000
+ 0000B9A69800FFFFFF00E7DCD800B59C8F007055410000000000000000000000
+ 0000000000000000000000000000000000000000000000000000DED6D0008668
+ 54009D816500BFA27E00D0AD8700B4957300937559006E5440004F80910087D8
+ EF006493A50000000000000000000000000000000000846B5A0029080000B57B
+ 5A00EFE7DE00E7CEC600AD735200290800006B73730052BDFF0052BDFF000000
+ 0000EF842100DE631800DE6318000000000000000000B54200007B5AA5001810
+ E7006B296B00B54A00008CBD8C0031EFA5007B944200BD4A0800E78C7300F76B
+ 6300D6522900BD4A000000000000000000000000000000000000000000000000
+ 000000000000B9A69800FFFFFF00E7DDD700B59C8F0070554100000000000000
+ 00000000000000000000000000000000000000000000F7F5F300896E5C00C1AB
+ 8B00ECD1AA00EED2AE00ECCFA700E7C79E00D8B28A00A1816200725642006493
+ A500000000000000000000000000000000000000000031080000EFDECE00EFE7
+ D600FFEFE700F7EFE700FFF7EF00E7D6CE0039100800637B940052BDFF000000
+ 0000EF842100DE631800DE6318000000000000000000A54200003129F7000000
+ FF002108CE00AD4200004AF7E70018FFBD0031D68400AD420000FFADAD00FF6B
+ 6B00EF524A00B542000000000000000000000000000000000000000000000000
+ 00000000000000000000B9A69800FFFFFF00E6DCD600B59C8F00725844000000
+ 00000000000000000000000000000000000000000000C5B7AE00B0998100F2DF
+ BA00F3E1C100F2E1C100F0DEBB00EDD8B200E7CBA300D3AD8700927357006D66
+ 5D000000000000000000000000000000000039292100D6AD9400FFEFD600CEAD
+ 9C00EFD6C600EFDECE00F7E7D600EFE7D600D6B5A500181810006BD6FF000000
+ 0000EF842100EF842100EF84210000000000000000009C3900003129F7000000
+ FF002110CE009C3900004AF7E70021FFDE0031DE9400A5420000FFADAD00FF94
+ 9400EF635200AD42000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000B9A69800FFFFFF00DED0CA00B59C8F007258
+ 4400BCCBCE007A848500000000000000000000000000B19E9100CDBCA400F4E8
+ CC00F6EED700F7EFDA00F4EAD200F2E2C500ECD5B300E3C39D00B5947200886E
+ 5E000000000000000000000000000000000000000000F7E7D600F7CEB500AD7B
+ 6300A5735A00A57B6300B5947B00DEC6AD00FFF7DE0000000000000000000000
+ 00000000000000000000000000000000000000000000943900007352A5002121
+ FF007352A5009439000084B58C0042FFEF0084B58C009C390000DE847300FFB5
+ B500DE8473009C39000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000B9A69800FFFFFF00DED0CA00CAB7
+ AD001E1B17000504020000000000000000000000000097817100E3DAC400F7F1
+ DE00FAF6EB00FBF8EE00F9F3E600F4E9D300EFDCBE00E7CAA500CCA682007254
+ 3F000000000000000000000000000000000000000000FFEFDE00EFB59C009C5A
+ 4200E7A58C00EFAD9400EFBD9C00CEA58C00FFEFD60008080000FFFFFF000000
+ 0000FFDEC600FFCEAD00FFCEAD00000000000000000000000000843100008431
+ 00008C3100008C3100008C3100008C3900008C3900008C3900008C3900009439
+ 0000943900000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000B9A69800BBC8C800392E
+ 2400413831000D090700000000000000000000000000BFB0A600CFC4B600F9F5
+ EA00FCFAF300FCFBF400FBF6EE00F6EDDA00F0DEC100ECCFA900C0A27D00795C
+ 48000000000000000000000000000000000000000000FFE7D600F7B59C00A552
+ 3100E7948400E79C8400EFAD8C00D69C8400EFCEB50008080800FFFFFF000000
+ 0000FFDEC600FFCEAD00FFCEAD0000000000000000000000000000000000CE52
+ 0800000000000000000000000000D65A1000000000000000000000000000D663
+ 1800000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C1CFD1003E3228004138
+ 3100484846003A38360041444400909B9D0000000000E1DAD600C1B4A800F0EB
+ E300FBFAF400FBF9F100FAF5EA00F5EDD700F1DFBF00E6CBA4009E856800B6A7
+ 9C000000000000000000000000000000000063525200B57B5A00FFCEBD00CE84
+ 6B00F79C7B00F79C8400F7B59400EFB59400945239007B635A00FFFFFF000000
+ 0000FFDEC600FFDEC600FFDEC60000000000CE52080000000000CE5208000000
+ 0000000000000000000000000000CE5208000000000000000000000000000000
+ 0000D65A180000000000D6631800000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000007D838200251A12004846
+ 4400635D58007E7875005B56540035393A0000000000F3F0EE00C1B3A900D1C6
+ BE00F6F4EA00F9F6E600F6F2DE00F4EACE00E5D4B200B59E80007A5E4A00EBE7
+ E500000000000000000000000000000000000000000063423900BD8C7300FFDE
+ C600F7CEB500EFB59C00F7BDA5008C4A31000800000000000000000000000000
+ 000000000000000000000000000000000000CE520800CE520800000000000000
+ 000000000000CE520800CE520800CE520800CE520800CE520800000000000000
+ 000000000000D65A1000D65A1800000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000BBC9CB00A1AC
+ AD0063636200CDCDCD008E8A8800383A39000000000000000000E7E0DC00C0B2
+ A900CABFB300D6CBBB00DED4BB00C3B29800A59076008D735F00D4CAC2000000
+ 0000000000000000000000000000000000000000000000000000524242000000
+ 00005A3921004229180000000000423931000000000000000000000000000000
+ 000000000000000000000000000000000000CE520800CE520800CE5208000000
+ 00000000000000000000CE520800CE520800CE52080000000000000000000000
+ 0000CE520800D65A1000D65A1000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000909C9E00363A3A00353A3A00909B9D00000000000000000000000000F7F5
+ F400E0D9D300C7B9AF00B7A69A00A4918200BAAA9D00F2E7E200000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000CE5208000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFF7F700FFF7
+ EF00FFEFE700FFEFE700FFF7E700FFF7EF00FFF7EF00FFF7EF00FFF7EF00FFF7
+ EF00FFF7F7000000000000000000000000000000000000000000FFF7F700FFF7
+ EF00FFEFE700FFEFE700FFF7E700FFF7EF00FFF7EF00FFF7EF00FFF7EF00FFF7
+ EF00FFF7F7000000000000000000000000000000000000000000CEE7FF0094C6
+ F7006BB5EF0063ADEF0063ADEF0063ADEF0063ADEF0063ADEF0063ADEF0063AD
+ EF006BB5EF000000000000000000000000000000000000000000000000000000
+ 0000FFF7EF00FFF7E700FFF7EF00FFF7EF00FFF7EF00FFF7F700FFFFF7000000
+ 0000000000000000000000000000000000000000000000000000FFF7EF00FFEF
+ E700FFEFDE00FFEFDE00FFEFE700FFEFE700FFEFE700FFEFE700FFEFE700FFEF
+ E700FFF7EF000000000000000000000000000000000000000000FFF7EF00FFEF
+ E700FFEFDE00FFEFDE00FFEFE700FFEFE700FFEFE700FFEFE700FFEFE700FFEF
+ E700FFF7EF000000000000000000000000000000000000000000D6EFFF009CCE
+ F7007BBDEF006BB5EF006BB5EF006BB5EF006BB5EF006BB5EF006BB5EF006BB5
+ EF007BBDEF000000000000000000000000000000000000000000000000000000
+ 0000FFF7E700FFE7D60063848C00A5A5A500FFEFE700FFF7E700FFF7EF000000
+ 0000521800005218000052180000521800000000000000000000FFF7EF00FFEF
+ DE00FFE7DE00F7DED60063737B007B7B7B00FFEFDE00FFEFDE00FFEFDE00FFEF
+ E700FFEFE7000000000000000000000000000000000000000000FFF7EF00FFEF
+ DE00AD9C9400000000000000000000000000000000000000000000000000DECE
+ C600FFEFE7000000000000000000000000000000000000000000DEEFFF00B5D6
+ F700638CA5000000000000000000000000000000000000000000000000007BAD
+ CE0094CEEF000000000000000000000000000000000000000000000000000000
+ 0000FFEFE7006BBDD60000B5E7001094B500EFD6C600F7DED600FFEFDE000000
+ 0000FFF7EF00FFF7F700FFFFF700521800000000000000000000FFEFE700FFE7
+ DE00E7D6CE005A9CB5000094D6000073A5007B949C00FFE7D600FFE7D600FFE7
+ D600FFEFDE000000000000000000000000000000000000000000FFEFE700FFE7
+ DE00FFE7D6007B736B00BDAD9C00FFE7D600FFE7D600FFE7D60063525200AD9C
+ 9400FFEFDE000000000000000000000000000000000000000000EFF7FF00D6E7
+ F700C6DEEF005A6B73008CA5B500BDDEEF00BDDEEF00BDDEEF0042525A008494
+ A500C6DEF7000000000000000000000000008C4221008C4221008C4221000000
+ 0000FFE7DE0010DEFF0000DEFF0000BDF70084A5B5006B529400FFE7D6000000
+ 0000CE733900C65A2100FFF7EF00521800000000000000000000FFEFE700FFE7
+ D60000B5E70000C6FF0000DEFF0000DEFF00007BB500DECEBD00FFE7D6009C84
+ AD00FFE7D6000000000000000000000000000000000000000000FFEFE700FFE7
+ D600FFDECE00FFDECE0063524A00DEC6B500FFE7CE00FFE7D600EFD6C600BDAD
+ 9C00FFE7D6000000000000000000000000000000000000000000FFFFFF00F7F7
+ F700EFEFEF00EFEFEF005A5A5A00CECED600EFEFEF00EFEFF700DEDEE700ADB5
+ B500EFEFF7000000000000000000000000008C422100FFF7EF00FFF7E7000000
+ 0000FFE7D600A5EFDE0008EFFF0000EFFF004A73AD0010089400FFE7CE000000
+ 0000BDFFFF008C7B7B00FFEFDE00521800000000000000000000FFEFDE00FFE7
+ CE0000FFFF0000D6FF0000CEFF0000D6FF0000ADEF006B9C9C008C63AD000000
+ 6B00FFE7D6000000000000000000000000000000000000000000FFEFDE00FFE7
+ CE00FFDEC600FFDEC600EFCEBD0063524A00EFCEBD00FFDECE00FFDECE00FFDE
+ CE00FFE7D6000000000000000000000000000000000000000000FFFFFF00FFF7
+ EF00FFEFE700FFEFE700EFDED600635A5200EFDED600FFEFE700FFEFE700FFEF
+ E700FFEFE7000000000000000000000000008C422100FFF7E700D66321000000
+ 0000FFDECE00F7D6BD004AD6BD0010848C000000B5001008BD00FFDECE000000
+ 0000BDF7FF008C7B7300FFE7D600521800000000000000000000FFEFDE00FFDE
+ CE00CEEFDE005AF7E70000DEFF0000E7FF0000E7FF008C9CB50000009C000000
+ 9400FFDECE000000000000000000000000000000000000000000FFEFDE00FFDE
+ CE00FFD6C600FFD6BD00FFD6BD007B6B5A00735A5200FFDEC600FFDEC600FFDE
+ CE00FFDECE000000000000000000000000000000000000000000FFF7F700FFEF
+ DE00FFE7CE00FFDECE00FFDECE007B6B630073635A00FFDECE00FFE7CE00FFE7
+ D600FFE7D6000000000000000000000000008C422100FFEFE700E7A57B000000
+ 0000FFDEC600B55A4200941000007B1808000000000000000000000000000000
+ 0000BDF7FF008C7B7300FFE7CE00521800000000000000000000FFE7DE00FFDE
+ C600FFD6BD00B5D6C60000FFFF0000FFFF00217B8C0000008C000000A5000000
+ 9400FFE7D6000000000000000000000000000000000000000000FFE7DE00FFDE
+ C600FFD6BD00FFD6B500CEAD940000000000BDA58C00FFDEC600FFDEC600FFDE
+ CE00FFE7D6000000000000000000000000000000000000000000FFF7EF00FFDE
+ CE00FFD6BD00FFCEB500CEA5940000000000BD9C8C00FFD6BD00FFDEC600FFDE
+ CE00FFE7D6000000000000000000000000008C422100FFE7DE00E7945A000000
+ 0000FFDEC600DE5A3900DE4A2900D673520000000000F7A57B0000000000FFD6
+ B500C6FFFF009C847B00FFDECE00521800000000000000000000FFE7D600FFD6
+ BD00E7A58C00E7A58C00843110008C290000210039000000FF000000FF000000
+ B500FFEFDE000000000000000000000000000000000000000000FFE7D600FFD6
+ BD00FFCEB500EFC6A500211810007B635A00FFD6B500FFDEC600BDAD9C00FFE7
+ DE00FFEFDE000000000000000000000000000000000000000000FFEFE700FFD6
+ BD00FFC6A500EFB59400211810007B5A4A00FFC6A500FFCEB500BDAD9C00FFEF
+ DE00FFEFE7000000000000000000000000008C422100FFE7D600E78442000000
+ 0000FFE7D600FFDEC600FFD6C600FFD6C6000000000000000000FF945A00FFF7
+ DE00521800005218000052180000521800000000000000000000FFE7D600FFD6
+ BD009429100084180000841000008C180000AD6B5A0000000000080818001810
+ 5A00000000000000000000000000000000000000000000000000FFE7D600FFD6
+ BD00FFCEAD004231290042312900FFCEAD00FFCEB50000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFEFDE00FFCE
+ AD00F7B58C003929210039292100F7AD8400F7B58C0000000000000000000000
+ 0000000000000000000000000000000000008C422100FFDECE00E78439000000
+ 00000000000000000000000000000000000000000000D65A1000D6631800E773
+ 310052180000F7A57B0052180000000000000000000000000000FFE7CE00FFD6
+ BD00F76B4A00EF633900EF633900F7633900E79C7B0000000000E77B4200EF94
+ 5A00000000000000000000000000000000000000000000000000FFE7CE00FFD6
+ BD00AD8C730042312900735A4A007B6352007B6352000000000063311800EF94
+ 5A00000000000000000000000000000000000000000000000000FFE7D600F7C6
+ A500A5735200392918006B423100735239007B5242000000000063311800EF94
+ 5A00000000000000000000000000000000008C422100FFDEC600E78C4200FFFF
+ FF00FFFFF7008C4221008C42210052180000FFE7D600FFDEC600FFD6C600FFD6
+ C600521800005218000000000000000000000000000000000000FFE7D600FFD6
+ BD00FFD6B500FFCEB500FFCEB500FFD6B500FFD6BD0000000000F7A57B000000
+ 0000000000000000000000000000000000000000000000000000FFE7D600FFD6
+ BD00FFD6B500FFCEB500FFCEB500FFD6B500FFD6BD0000000000F7A57B000000
+ 0000000000000000000000000000000000000000000000000000FFE7DE00F7CE
+ AD00EFB59400EFAD8C00EFAD8C00EFAD8C00EFB5940000000000F7A57B000000
+ 0000000000000000000000000000000000008C422100FFDEC600D6631800D673
+ 3900E77B39008C422100F7A57B00521800005218000052180000521800005218
+ 0000521800000000000000000000000000000000000000000000FFE7DE00FFE7
+ D600FFDECE00FFDECE00FFDECE00FFDECE00FFDECE0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE7DE00FFE7
+ D600FFDECE00FFDECE00FFDECE00FFDECE00FFDECE0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFF7EF00F7E7
+ D600F7DECE00F7D6C600F7D6C600F7D6C600F7DECE0000000000000000000000
+ 0000000000000000000000000000000000008C422100FFE7D600FFDEC600FFD6
+ C600FFD6C600000000008C422100000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008C4221008C4221008C4221008C42
+ 21008C4221008C42210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000D3D8ED00EFEFF800577F
+ D1006988DA00EFEFFA00D3D9F600F8F9FE000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000BABADD009497CB005B88CB007682CA004583
+ D2005682DB00607ED700297DE100D1D8F6000000000000000000000000000000
+ 000000000000000000008F796900664B3700674D3800684E3A00694F3B006A50
+ 3D006A503D00644A360000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000F9F9FC008080C2003737C600211DB3003C5DB40065A7E0004497
+ DF00419CE50032AFE800597FDF00EFEFFC000000000000000000000000000000
+ 00000000000000000000D6CCC400BBAA9E00AA948500AC978700AC968600AE98
+ 8A00998271006A503D0000000000000000000000000000000000FFF7F700FFF7
+ EF00FFEFE700FFEFE700FFF7E700FFF7EF00FFF7EF00FFF7EF00FFF7EF00FFF7
+ EF00FFF7F7000000000000000000000000000000000000000000FFF7EF00FFF7
+ E700FFF7EF00FFF7EF00FFF7EF00FFF7F700FFFFF70000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000E9E9F3006161B300302FD2002D2EE2004E65D700415CB8005CA8E00084F8
+ FF0066F9FF0032A3E8004880DF007295EA000000000000000000000000000000
+ 0000B19C8D007B655400E5DED800FFFFFF00FCF8F600F5ECE700EEE0D800E9D4
+ CA00A690800069503C0000000000000000000000000000000000FFF7EF00FFEF
+ E700FFEFDE00FFEFDE00FFEFE700FFEFE700FFEFE700FFEFE700FFEFE700FFEF
+ E700FFF7EF000000000000000000000000000000000000000000FFF7E700D663
+ 2100D6733100D6733100D6631000D6632100FFF7EF0000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000D0D0
+ E5004949AF003232DE001C1BE5000001BF00557DCC006F9BE00061AFE80090FF
+ FF006DFFFF0033AFEB002BA6E700348AE7000000000000000000000000000000
+ 0000C7B7AA00FBF8F700E2DAD400FFFFFF00FEFDFC00F7F2EF00F1E6E000EADA
+ D100A48E7E00694F3C0000000000000000000000000000000000FFF7EF00CE52
+ 0800CE520800CE520800CE520800CE520800CE520800CE520800CE520800CE52
+ 0800FFEFE7000000000000000000000000000000000000000000FFEFE700E7A5
+ 7B00FFFFE7000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000B1B1D1003434
+ AD002A2AE6001010E2000000D1000000D6000105CD001F35C30066A9DE0057BA
+ EB0049C2EF0033AFE700697DDC00D7DAF7000000000000000000BCA99C00C6BB
+ B200BFADA000FFFFFF00E4DCD600FFFFFF00FFFFFF00FBF9F800F5EDE900EEE1
+ D900A48E7E00694F3B0000000000000000000000000000000000FFEFE700CE52
+ 0800E7631800EF7B3100FFA57300FFD6B500FFF7EF00C6EFFF0042ADF700CE52
+ 0800FFEFDE000000000000000000000000000000000000000000FFE7DE00E794
+ 5A00FFF7EF0000000000FFF7EF00FFF7E700FFF7EF00FFF7EF00FFF7EF00FFF7
+ F700FFFFF700000000000000000000000000FDFDFE009898C3002727B6002929
+ F0000C0CE1000000D6000000DD000000E2000208D6006299D8003C5CD2002E73
+ D7003B73E6002B7EEB003698E600DDE1F6000000000000000000C1AEA100F7F3
+ F000C9B8AB00FFFFFF00E7DED800FFFFFF00FFFFFF00FEFEFE00F9F5F300F5EB
+ E600A48E7E00684E3A0000000000000000000000000000000000FFEFE700CE52
+ 0800E7631800EF7B3100FFA57300FFD6B500FFF7EF00C6EFFF0042ADF700CE52
+ 0800FFE7D6000000000000000000000000000000000000000000FFE7D600E784
+ 4200FFFFFF0000000000FFF7E700D6632100D6733100D6733100D6631000D663
+ 2100FFF7EF00000000000000000000000000B5B5D1002424B8003C3CFE004646
+ FD003D3DF4002828EF000A0AE8000000E8000205E5001021D7000000D9002E70
+ DB002C63DF00180EEC002134C600C9C9DF000000000000000000BFAC9E00EFEA
+ E600CCBCB000FFFFFF00E9E0DA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1E8
+ E200A99383006A503C0000000000000000000000000000000000FFEFDE00CE52
+ 0800E7631800EF7B3100FFA57300FFD6B500FFF7EF00C6EFFF0042ADF700CE52
+ 0800FFE7D6000000000000000000000000000000000000000000FFDECE00E784
+ 3900FFFFF70000000000FFEFE700E7A57B00FFFFE700FFF7E700FFAD6B00E7AD
+ 8400FFEFDE000000000000000000000000004C4CA8004242F5006565FF006767
+ FF006868FF006969FF005858FB002C2CF5000000F2000000EF000000EB000612
+ DC00030ED4000501E0002019D9007E7EB5000000000000000000C3B0A300EFEA
+ E700D1C1B400FFFFFF00EBE3DC00FFFFFF00FFFFFF00FFFFFF00EBE5E0009179
+ 6700806754006146320000000000000000000000000000000000FFEFDE00CE52
+ 0800E7631800EF7B3100FFA57300FFD6B500FFF7EF00C6EFFF0042ADF700CE52
+ 0800FFDECE000000000000000000000000000000000000000000FFDEC600E78C
+ 4200FFFFFF0000000000FFE7DE00E7945A00FFF7EF00FFCEAD00FFCEAD00E78C
+ 4A00FFE7D6000000000000000000000000003232B4007171FF008181FF007B7B
+ FF007B7BFF007D7DFF008181FF008080FF005959FC001B1BF5000000EE000000
+ E8000000E1000000D8001313EB004646A9000000000000000000C8B6A700F1EC
+ E900D6C4B900FFFFFF00EEE6DF00FFFFFF00FFFFFF00FFFFFF00CFC1B7009D87
+ 770072594700AD9C8F0000000000000000000000000000000000FFE7DE00CE52
+ 0800E7631800EF7B3100FFA57300FFD6B500FFF7EF00C6EFFF0042ADF700CE52
+ 0800FFE7D6000000000000000000000000000000000000000000FFDEC600D663
+ 1800D673390000000000FFE7D600E7844200FFFFFF00FFB59400FFE7CE00E78C
+ 5200FFE7CE000000000000000000000000003D3DB7009191FF009898FF009494
+ FF009494FF009494FF009494FF009595FF009C9CFF008E8EFE005151F8001414
+ EC000000E1000000D7000909EB004040A8000000000000000000CEBAAD00F2ED
+ EA00DACABC00FFFFFF00ECE2DB00FBF8F600FBF8F600FAF8F600D7C8BF008E76
+ 6400D7CAC0000000000000000000000000000000000000000000FFE7D600CE52
+ 0800E7631800EF7B3900FFAD7300FFD6B500FFF7EF00C6EFFF0042ADF700CE52
+ 0800FFEFDE000000000000000000000000000000000000000000FFE7D600FFDE
+ C600FFD6C60000000000FFDECE00E7843900FFFFF700FFC69C00FFD6A500F7B5
+ 8C00FFDECE000000000000000000000000004C4CA2009F9FFC00B9B9FF00ACAC
+ FF00ACACFF00ACACFF00ACACFF00B2B2FF00B0B0FF00B2B2FF00B6B6FF009797
+ FC006565F1004646EC003030E7006969A7000000000000000000D2BFB100F3EE
+ EB00DFCEC100FFFFFF00DECCBF00E0CEC100DFCDC000D3BFB100C6B0A100D0C0
+ B500000000000000000000000000000000000000000000000000FFE7D600CE52
+ 0800EF7B3100FF945200FFBD8C00FFE7C600FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFDEC600E78C4200FFFFFF00FFFFF700000000000000
+ 0000000000000000000000000000000000009B9BBB006969C500D3D3FF00D7D7
+ FF00D0D0FF00D1D1FF00D7D7FF00CBCBFF00CECEFF00D5D5FF00D2D2FF00D8D8
+ FF00E4E4FF00C9C9FF005353AF00C4C4D5000000000000000000D8C4B600F5F0
+ ED00DBC7B800EADFD600EADFD600E9DDD500E3D5CB00AD978700CCBFB4000000
+ 0000000000000000000000000000000000000000000000000000FFE7CE00CE52
+ 0800CE520800CE520800CE520800CE520800CE52080000000000E77B4200EF94
+ 5A00000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFDEC600D6631800D6733900E77B390000000000F7A5
+ 7B0000000000000000000000000000000000F5F5F7007B7BA6006D6DBD00BFBF
+ F100D6D6FF00D5D5FF00B4B4F8005757D6006A6ADC00C0C0FD00D7D7FF00D5D5
+ FF00B4B4E9005C5CAB009B9BB700FDFDFE000000000000000000DBC8B900F6F1
+ ED00FFFFFF00FFFFFF00FFFFFF00C7B6A900907A6A00D6C9C000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE7D600FFD6
+ BD00FFD6B500FFCEB500FFCEB500FFD6B500FFD6BD0000000000F7A57B000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFE7D600FFDEC600FFD6C600FFD6C600000000000000
+ 00000000000000000000000000000000000000000000F7F7F900ACACC0006161
+ 9B005454A8004F4FAB004C4C9E008B8BAE007C7CA6004A4AA0005151AB005454
+ A4006A6A9E00C1C1D000FEFEFE00000000000000000000000000D9C3B300DBC7
+ B800DCC8BA00DBC8B900D6C2B400CAB4A500D3C6BB0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FFE7DE00FFE7
+ D600FFDECE00FFDECE00FFDECE00FFDECE00FFDECE0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000BA881F00BA8A2100AC7D
+ 1C00BD891B0000000000B1832100B5831A00B4831B00B4841F0000000000BB87
+ 1900A7791C00B9892200B9892200000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000004C4846004B4745004B47
+ 44004B4743004B4742004B4641004B4540004A443F004A443E004A433D004A42
+ 3B004A423B004A413A004A413A00564C450000000000C08A180035506D004D39
+ 1B00BC871A0000000000BF891800242D3D0025324800BA85160000000000C48C
+ 1700503B1D00354E6900C088160000000000B7A2930060463200634935006349
+ 350063493500634935006349350063493500634935006349350063493500684E
+ 3A000000000000000000000000000000000000000000000000006E6D6E004444
+ 4400787878000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000B8A89D00FFFFFF00FFFFFF00FFFF
+ FC00FFFBF800FFF7F200FFF3EC00FFEFE500FEEBDF00FCE6D900FCE2D200FBDE
+ CC00FADAC600F9D7C100EACBB5002E28220000000000A97F2500655128007A5C
+ 2100A97B1D0000000000A67C22005F4A2300614A2200A77D240000000000B07F
+ 1900805F200063502C00AA7F260000000000BDA89900FCFEFC00E7E6E400E7E2
+ DC00E6DCD400E5D6CB00E4CFC100E3CAB800E3C5B100E2C2AC00C7AA9800684E
+ 3A0000000000000000000000000000000000000000000000000099989900C8C7
+ C800111111007A7A7A0000000000E1E1E1000000000000000000000000000000
+ 000000000000000000000000000000000000B8A89E00FFFFFF00FFFFFE00FFFD
+ FB00FEFAF800FEF7F200FCF3EC00FBEFE700FBEBE000FAE6DA00F9E2D400F8DE
+ CD00F7DAC700F6D6C200EACBB500312B260000000000B4841E00B7861E00B27E
+ 1300BE89190000000000BA851600B5821800B2801800B6841D0000000000BC88
+ 1C00A9791800B6862100BD891B0000000000C6B0A100FCFEFC00D8C4B900D6C0
+ B500D3BCAF00FAEFE600CFB3A500CCAF9F00CCAF9F00F6DBC800C7AA9800684E
+ 3A00000000000000000000000000000000000000000000000000000000000000
+ 0000848484000E0E0E00000000003333330034333400979697001C1C1C000C0B
+ 0C0024222200000000000000000000000000B8A89E00FFFFFF00FFFFFF00FFFE
+ FE00FFFCFA00FEF8F600FDF6F000FCF2EB00FCEEE500FAE9DF00FAE5D800F8E1
+ D100F8DDCB00F7D8C600EACDB900312B27000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000CCB6A700FCFEFC00FCFEFC00FCFE
+ FC00FBFAF700FBF5EF0075716E005754510000000000D2C2B500CBB2A100684E
+ 3A00000000000000000000000000000000000000000000000000000000000000
+ 0000B6B6B600020102007F7F7F0000000000000000005F5E5F00020102005454
+ 5400E4E4E300000000000000000000000000B8A89E00FFFFFF00FFFFFF00FFFF
+ FF00FFFEFD00FEFBF900FDF8F500FDF4EF00FCF0E900FBECE300FAE8DC00FAE4
+ D600F9DFD000F8DCC900EACEBD00312B270000000000B27F1600B2811800AC7A
+ 1400B28119000000000054452A004D4028004C4027005748290000000000B17D
+ 1300A7781900B1801A00B2811A0000000000CCB6A700FCFEFC00DBCAC000DAC8
+ BD00D8C4B900FBFAF700A39D9800FDFEFE005193A9000E121600B8B1A8007860
+ 4D00000000000000000000000000000000000000000000000000000000000000
+ 0000EEEEEE00504E50004141410000000000E6E5E50094939400242324001616
+ 160000000000000000000000000000000000B8A89E00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFDFC00FEFAF800FEF7F300FCF2ED00FCEFE700FBEBE100FAE7
+ DA00F9E2D400F8DECD00EAD1C000322B270000000000B78824002F456100513F
+ 2200B8851C00000000005D4E2D0076928D007D9890005D4D2B0000000000BC87
+ 19004F3E26002D405900B687240000000000CCB6A700FCFEFC00FCFEFC00FCFE
+ FC00FCFEFC00FCFEFC00A39D980088B7C70074CEE200499AB2000E1216007C72
+ 6600000000000000000000000000000000000000000000000000000000000000
+ 00000000000078787800171717000000000093908F009A999900A8A8A8009898
+ 9800232323003D3D3D000000000000000000B8A89E00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFEFF00FEFCFA00FEF9F500FDF6F100FCF2EB00FCEEE500FAEA
+ DF00FAE5D800F9E0D200EAD4C300322B270000000000B17E13002F2F32005E42
+ 1500B17F170000000000473B270069818000698586004E41290000000000B07F
+ 1700543D18002A2D3500AF7D180000000000CCB6A700FCFEFC00DBCAC000DBCA
+ C000DBCAC000FCFEFC00C1B9B4004D9CB3008CE0EE0062BFD700499AB2000E12
+ 1600CEDBDF000000000000000000000000000000000000000000000000000000
+ 0000000000008383830002010200F2F2F20000000000EDEDED00DADADA000000
+ 0000E9E9E900CDCDCD000000000000000000B8A89E00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFEFD00FEFAF900FEF8F500FDF4EF00FCF1E900FBEC
+ E300FAE8DD00F9E4D600EAD6C800322C270000000000B7861F00B6872400B07E
+ 1800BB881B00000000006C5A2F005A4C2C005E502F006B59300000000000B986
+ 1C00AE7F1D00B9871E00B788230000000000CCB6A700FCFEFC00FCFEFC00FCFE
+ FC00FCFEFC00FCFEFC00FBF8F300D5CEC80057A0B5008CE0EE0062BFD700499A
+ B2000E121600CEDBDF0000000000000000000000000000000000000000000000
+ 000000000000A9A9A900181718007F7F7F000000000000000000000000000000
+ 000000000000000000000000000000000000B8A89E00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFDFC00FEFAF800FDF7F300FCF3ED00FCEF
+ E700FAEBE100FAE7DB00EAD9CB00322C27000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000EBAC8D00EAAA8C00EAA98900E9A2
+ 7E00E8997100E68F6300E5875800E6926500CDA9950065A6B7008CE0EE0062BF
+ D700499AB2000E121600D7DFE200000000000000000000000000000000000000
+ 0000A3A2A100B1AFAE00817F7E000E0B0A00110F0E0000000000000000000000
+ 000000000000000000000000000000000000AB998E00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFEFE00FFFBFA00FEF8F500FDF5
+ EF00FCF1E800FBECE200EADFD400322C270000000000B9882200B6882600A678
+ 1A00BA881D0000000000B4842000B9871C00AE802100B1821F0000000000BE8C
+ 1F00A87B1E00B98B2500BC8B230000000000EBAC8D00FFC3A200FEBF9D00FCBB
+ 9800FBB69200FAB08B00F8AB8400F8A67C00F3A68000D2B09E0073ACB9008CE0
+ EE006CC4D9007D86860035359000BFC2D9000000000000000000000000000000
+ 000000000000000000009D9C9D002A292A000000000000000000000000000000
+ 000000000000000000000000000000000000AC9A8E00F7F0EC00FCF6F400FCF6
+ F300FBF5F200FAF4F100FAF4F000FAF2EE00FAF2EE00FAF0EA00F9EDE600F9EA
+ E100F8E6DC00F8E3D600E6D6C90035302A0000000000B37F14003A3631006146
+ 1800B27C0F0000000000B17D12002D272300332B2400AB7B180000000000AF7C
+ 12005F44170035302E00B17F180000000000EBAC8D00EAAA8B00EAAA8B00EAA8
+ 8900E9A28100E89C7700E7946B00E68C6000E5865500E68D5F00CA997F007DB0
+ BB00CAB8AC007385D1005E6CAD00353590000000000000000000000000000000
+ 00000000000000000000C1C1C10064636400E2E2E200373535005B5959000000
+ 000000000000000000000000000000000000CEA58F00F0B19200F4B29100E89F
+ 7A00E1906800DD885D00DC875B00DA835700D87F5200D77C4E00D6794B00D578
+ 4900D4774700D4764600CA7041004731240000000000B5862400334861005642
+ 2000B384220000000000B1822300242E4200222F4700B082230000000000B886
+ 1C004F3C1F0030496500B4862300000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000DCE5
+ E8005E6CAD00708FDF005E76D0005E6CAD000000000000000000000000000000
+ 0000000000000000000000000000B1B0B1007471710016131300494848000000
+ 000000000000000000000000000000000000D8AA9200FCC0A000FCBD9B00F9B6
+ 9400F5B08B00F1A98500EEA47F00ECA07900EB9C7200E7956B00E48F6500E18B
+ 5E00DF865900DD825400CE774C0038281E0000000000AD812300AF822300AC7E
+ 1E00B4831E0000000000A77C2500B0822000AB7D1D00A97D240000000000B684
+ 1C00A6791C00B0822000B2842300000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000D4DAEE005E6CAD005E6CAD00E2E6F2000000000000000000000000000000
+ 000000000000000000000000000000000000EEEEEE00D5D5D500000000000000
+ 000000000000000000000000000000000000CEAB9A00DCAE9800D5A58E00D3A0
+ 8600CE9B8100C88B6D00CA856400C57F5D00B6755600AD705200A76B4E00A76B
+ 4E00A76B4E00A76B4E00A66A4D00795847000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000007C7573004E4B4B00544F4D00544F
+ 4D00544F4D0056514D0053504C00524F4B00524F4C00524F4B00514E4B00544E
+ 46000000000000000000000000000000000000000000CE520800FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 00000000000000000000000000000000000000000000A3887700634935006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 3500634935006349350000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000D9CFC800FFFFFF00FBFDFF00FBFD
+ FF00FFFFF600FFFFF600FFFFF600FFF9EC00FFF0E100FFEAD500FFEAD200544E
+ 46000000000000000000000000000000000000000000CE520800FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 00000000000000000000000000000000000000000000AD938300FEFBFA00FDF9
+ F600FCF5F200FBF2ED00FAEEE800F9E9E200F7E5DC00F6E1D700F5DDD100F3D8
+ CB00F3D4C600634935000000000000000000000000000000000000000000E39A
+ 7500B6623900B6623900B05C3300A7532A009D482000923E160089340D00822D
+ 0600812C0500000000000000000000000000D2C8C100FFFFFF00C4AFA200C4AF
+ A200FFFBF900C4AFA200C4AFA200C4AFA200C4AFA200C4AFA200FDDECB00544E
+ 46000000000000000000000000000000000000000000CE520800FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000B4998A00FEFDFC00FDFA
+ F900FCF7F500FCF4F100FBF0EC00F9ECE600F8E8E100F6E4DB00F5DFD500F5DB
+ D000F3D7CA00634935000000000000000000000000000000000000000000E39A
+ 7500E58C5E00E2845500E17E4C00DF774200DE713B00DC6B3400FFFFFF00DA62
+ 2700812C0500000000000000000000000000D2C8C100FFFFFF00FBFDFF00FBFD
+ FF00FFFEFC00FDFAF800FBF4EF00FBEEE600FAE9DE00F8E2D200FFE2D000544E
+ 46000000000000000000000000000000000000000000CE520800FFFFFF00CE52
+ 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000BAA09300FFFFFE00FFFC
+ FB00FDF9F700FCF6F400FCF3EF00FAEFEA00F9EBE400F7E7DF00F7E2D900F5DE
+ D300F4DACD00634935000000000000000000000000000000000000000000E397
+ 7000E7946B00E58D6100E3865700D0AE9C00DF784500DE733C00FFFFFF00DA68
+ 2E00812C0500000000000000000000000000D3C9C200FFFFFF00C4AFA200C4AF
+ A200FFFFFE00C4AFA200C4AFA200C4AFA200C4AFA200C4AFA200FFE5D600544E
+ 46000000000000000000000000000000000000000000CE520800FFFFFF00CE52
+ 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000EAAA8B00EAAA8B00E9A5
+ 8400E99F7A00E7976E00E68E6200E5865600E37D4A00E3764000E2723900E272
+ 3900E2723900E27239000000000000000000000000000000000000000000E79B
+ 7400EA9E7700E7966C00DDC4B900FFFFFF00E2805000E07A4600FFFFFF00DD6E
+ 360085300900000000000000000000000000D1C7C000FFFFFF00FBFDFF00FBFD
+ FF00FFFFFF00FEFEFD00FEFBF800FDF6F200FCF0E800FCF0E800FFE9DC00544E
+ 46000000000000000000000000000000000000000000CE520800FFFFFF00CE52
+ 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000EAAA8B00FFFFFE00FFC2
+ A200FCB99600FBB59000FAB08B00F9AB8400F8A77D00F6A27700F59D7100F599
+ 6A00F3956500E27239000000000000000000000000000000000000000000EA9E
+ 7800ECA68300E9D4CA00FFFFFF00FFFFFF00E4895B00E2825100FFFFFF00DF75
+ 40008B360F00000000000000000000000000D1C8C100FFFFFF00FBFDFF00FBFD
+ FF00FFFFFF00FFFFFF00FEFEFC00B0ADAC00415C7200E3D9D300FFEDE300544E
+ 46000000000000000000000000000000000000000000CE520800FFFFFF00CE52
+ 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000EAAA8B00EAAA8B00EAAA
+ 8B00EAA68600E9A17F00E89B7600E7946C00E68E6200E5875800E4814E00E47B
+ 4600E3763E00E27239000000000000000000000000000000000000000000EFA3
+ 7D00F3E2D900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ECD3C600E17D
+ 4A00923E1600000000000000000000000000D1C8C100FFFFFF00E2E9E9005E75
+ 8400DFE4E500FFFFFF00C2CACE004A6170002EA9D6000B101B005D5C6000A49D
+ 9600000000000000000093B699001C66290000000000CE520800FFFFFF00CE52
+ 0800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000A3887700634935006349
+ 3500634935006349350063493500634935006349350063493500634935006349
+ 350063493500634935000000000000000000000000000000000000000000F3A8
+ 8100F2B89C00F8E9E100FFFFFF00FFFFFF00E99B7400E7946A00E58D6000E385
+ 56009A461E00000000000000000000000000DF9D7D00F1CAB7008FA4AC0086D3
+ E5004B617000A79289004A61700061C1DE00574D59001FD0FF00152733001007
+ 0A0002212E004F56650059785B00188C320000000000CE520800FFFFFF00CE52
+ 0800CE520800CE520800CE520800CE520800CE520800CE520800CE520800CE52
+ 0800CE520800CE520800CE5208000000000000000000AD938300FEFBFA00FDF9
+ F600FCF5F200FBF2ED00FAEEE800F9E9E200F7E5DC00F6E1D700F5DDD100F3D8
+ CB00F3D4C600634935000000000000000000000000000000000000000000F6AD
+ 8600F4C1A800F2BA9E00FAE4DA00FFFFFF00ECA48000E99D7500E7956C00E68D
+ 6200A24E2500000000000000000000000000DF9D7D00FFC5A400E5C9B9008FA4
+ AC0083E1F6004B6170007ACDE2005260670068EDFF00413D500032B2DF001D99
+ C8001593C40014628E004066510029973F0000000000CE520800FFFFFF00CE52
+ 0800FFFFFF00FFBD9400FFBD9400FFBD9400FFBD9400FFBD9400FFBD9400FFBD
+ 9400FFBD9400FFBD9400CE5208000000000000000000B4998A00FEFDFC00FDFA
+ F900FCF7F500FCF4F100FBF0EC00F9ECE600F8E8E100F6E4DB00F5DFD500F5DB
+ D000F3D7CA00634935000000000000000000000000000000000000000000FAB0
+ 8A00F6C9B200F4C2A900F2BCA000F9E0D300EEAD8D00ECA58300EA9E7800E897
+ 6E00AA552D00000000000000000000000000DF9D7D00DF9D7D00DF9D7D00DABA
+ AA008FA4AC007FE3F9005384950068EDFF00303A4F0069DBF60058D2F30040C3
+ ED0031BBEA0011A8EC0050908C00329E410000000000CE520800FFFFFF00CE52
+ 0800CE520800CE520800CE520800CE520800CE520800CE520800CE520800CE52
+ 0800CE520800CE520800CE5208000000000000000000BAA09300FFFFFE00FFFC
+ FB00FDF9F700FCF6F400FCF3EF00FAEFEA00F9EBE400F7E7DF00F7E2D900F5DE
+ D300F4DACD00634935000000000000000000000000000000000000000000FDB3
+ 8D00FDB38D00FDB38D00F6AD8600F3A88100EFA37D00EA9E7800E79B7400E397
+ 7000E39A75000000000000000000000000000000000000000000000000000000
+ 000000000000576B800068EDFF005898AE006EEBFF0072E1F9006ADDF70056CF
+ F2004BC7ED0022BAFA005FA2A60041AC530000000000CE520800FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
+ 00000000000000000000000000000000000000000000EAAA8B00EAAA8B00E9A5
+ 8400E99F7A00E7976E00E68E6200E5865600E37D4A00E3764000E2723900E272
+ 3900E2723900E272390000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C2C8D000B0EBFA005B6D7F006EEBFF006EEBFF006EEBFF0072E2FA0067D7
+ F40054BDDC0051728B00699C890085CC850000000000CE520800CE520800CE52
+ 0800CE520800CE520800CE520800CE520800CE520800CE520800CE5208000000
+ 00000000000000000000000000000000000000000000EAAA8B00FFFFFE00FFC2
+ A200FCB99600FBB59000FAB08B00F9AB8400F8A77D00F6A27700F59D7100F599
+ 6A00F3956500E272390000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000A3ACB80095B8C400D4D9DD0081A6B5008097A3008096A0007A8F99007385
+ 93005C718000BFC8CD009AD3A40070C17D0000000000CE520800FFFFFF00FFBD
+ 9400FFBD9400FFBD9400FFBD9400FFBD9400FFBD9400FFBD9400CE5208000000
+ 00000000000000000000000000000000000000000000EAAA8B00EAAA8B00EAAA
+ 8B00EAA68600E9A17F00E89B7600E7946C00E68E6200E5875800E4814E00E47B
+ 4600E3763E00E272390000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000CE520800CE520800CE52
+ 0800CE520800CE520800CE520800CE520800CE520800CE520800CE5208000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000081685500262F3800262F3800262F3800262F3800262F
+ 3800262F3800262F3800262F3800262F38000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000BCCCD200647E8E004F5E6F004552
+ 610037414D00262F380089715E00E8DCD300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300262F38000000000000000000A1A09F005656
+ 550091919100B6B6B60000000000000000000000000000000000000000000000
+ 0000BCBCBC00B8B8B80000000000000000000000000000000000FFF0EF00FFF0
+ E000FFF0EF00FFF0EF00FFF0EF00FFF0F000FFFFF00000000000000000000000
+ 000000000000000000000000000000000000FEFEFE00FEFEFE00FEFEFE00FEFE
+ FE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFE
+ FE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00717F8B0022B6EC00008FCD00008F
+ CD00008FCD00008FCD0091796600EFE6E100E8DBD300E0D0C600DAC6BC00D4BF
+ B200CFB9AB00CCB6A800B7A29300262F380000000000BBBBBB00676666001713
+ 12004D4B4A00A5A4A400BEBEBE0000000000000000000000000000000000BDBD
+ BD00727070009A9A9A00BEBEBE00000000000000000000000000FFF0E000D060
+ 2000D0703000D0703000D0601000D0602000FFF0EF0000000000000000000000
+ 000000000000000000000000000000000000FEFEFE003E36F500332CF2002B22
+ EE00241CED00FEFEFE00C100A100BF009900BF009400BE008F00FEFEFE00F3C8
+ 2E00F2C51B00F3C20B00F3BF0000FEFEFE007584900068C8EA0010B5F00008AC
+ EB0003A4E3000096D4009A826F00F7F1EF00C3AE9E00C3AE9E00BDA89800B7A2
+ 9300D4BFB200B7A29300B7A29300262F3800000000000000000090908F002018
+ 16002B262500706F6E00B8B8B800000000000000000000000000BEBEBE00AAAA
+ A90038373700AAAAAA00BEBEBE00000000000000000000000000FFEFE000D070
+ 3F00C2E9FF000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FEFEFE004E47FA00443CF7003830
+ F3002E26F000FEFEFE00C100AB00C100A300BF009C00BF009500FEFEFE00F2CE
+ 4B00F3CA3800F3C62500F3C21300FEFEFE007989940074D0ED0028BDF10011B5
+ F00007ABEA00009DDC00A28A7800FDFBFA00F7F2EE00EFE6E100E8DBD300E0D0
+ C600705A4A0061524600504842003F3D3E000000000000000000BBBBBB005E5A
+ 590029242100403C3B00A8A7A7000000000000000000BABABA00B6B5B5004D4B
+ 490064626000BEBEBE0000000000000000000000000000000000FFE0DF00D070
+ 3F00C2E9FF0000000000FFF0EF00FFF0E000FFF0EF00FFF0EF00FFF0EF00FFF0
+ F000FFFFF000000000000000000000000000FEFEFE005A53FE00524CFB004942
+ F8003E36F500FEFEFE00C300B600C200AE00C100A600C0009E00FEFEFE00F2D2
+ 6100F2CF5400F2CC4100F3C82E00FEFEFE007E8E9A0083D9F00046C9F2002DBF
+ F20016B7F10000A0E200A9928000FFFFFF00C3AE9E00C3AE9E00BDA89900E8DC
+ D3007A604D00D4C5BA006152470000000000000000000000000000000000B2B1
+ B10043413E0025211E0053505000B4B4B400B8B8B800B8B8B800646260003936
+ 3600AFAEAE000000000000000000000000000000000000000000FFE0D000D070
+ 3F00C2E9FF0000000000FFF0E000D0703F00D0703F00D0703000D0601000D060
+ 2000FFF0EF00000000000000000000000000FEFEFE005D56FF005D56FF00574F
+ FD004E46FA00FEFEFE00C400BF00C300B800C200B000C200A900FEFEFE00F2D3
+ 6600F2D36600F2D15B00F2CD4B00FEFEFE0082949E0091E2F30066D5F4004CCB
+ F30032C2F20015AFE900B0998800FFFFFF00FFFFFF00FCFBF900F7F1EF00EFE7
+ E100816856007A604D0000000000000000000000000000000000000000000000
+ 0000AFAEAE0043413F002D2827005B5A59009D9D9C00504D4C00333130008281
+ 8000000000000000000000000000000000000000000000000000FFDFCF00D070
+ 3F00C2E9FF0000000000FFEFE000D0703F00FFA77000C2E9FF0040AEF700E0AF
+ 8000FFEFDF00000000000000000000000000FEFEFE005D56FF005D56FF005D56
+ FF005A54FE00FEFEFE00C500C500C400C000C400BA00C300B300FEFEFE00F2D3
+ 6600F2D36600F2D36600F2D26100FEFEFE008699A2009FEAF60083E1F6006BD8
+ F50053CEF4000EB3F000B6A08E00B0998800A9928000A28A78009A8270009179
+ 670089715E000000000000000000000000000000000000000000000000000000
+ 000000000000AEAEAE0046424100312E2D0034302F003835340042403F000000
+ 0000000000000000000000000000000000000000000000000000FFDFC000D070
+ 3F00C2E9FF0000000000FFE0DF00D0703F00FFA77000C2E9FF0040AEF700E08F
+ 4F00FFE0D000000000000000000000000000FEFEFE00FEFEFE00FEFEFE00FEFE
+ FE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFE
+ FE00FEFEFE00FEFEFE00FEFEFE00FEFEFE008A9EA600A9F0F80099EAF80088E3
+ F5006DD1EA0013A1D40013A1D40012A0D3000D97CF000791CA00008FCD00008F
+ CD00303944000000000000000000000000000000000000000000000000000000
+ 000000000000000000009C9B9B00373231003D3A390044414000B5B4B4000000
+ 0000000000000000000000000000000000000000000000000000FFDFC000D070
+ 3F00D0703F0000000000FFE0D000D0703F00FFA77000C2E9FF0040AEF700E08F
+ 5000FFE0CF00000000000000000000000000FEFEFE0000B0FF0000AAFF0000A5
+ FF0000A2FF00FEFEFE0000B7340000B1310000AB2E0000A52C00FEFEFE00CE28
+ 2F00C21F2600B6161D00AB0D1500FEFEFE008DA1AA00AAF1F900A7F0F9005E7D
+ 8A0058737F00566D7A00526977004F6673004C617000445A6800236F9000008F
+ CD003E4A58000000000000000000000000000000000000000000000000000000
+ 0000BFBFBF00ABABAB00595756003B3736003A3736003A3B39005B595600BABA
+ BA00000000000000000000000000000000000000000000000000FFE0D000FFDF
+ C000FFD0C00000000000FFDFCF00D0703F00FFA77000C2E9FF0040AEF700F0B0
+ 8F00FFDFCF00000000000000000000000000FEFEFE0000B8FF0000B2FF0000AC
+ FF0000A7FF00FEFEFE0000BF380000B9350000B2320000AD3000FEFEFE00DD34
+ 3B00D12A3300C5212800B9171F00FEFEFE008FA4AC00AAF1F900A8F1F9005D86
+ 96008CC6CF0093E4F0007AD5E70062C6DE004F9AB2003E5A67001C7DA500008F
+ CD004B596900000000000000000000000000000000000000000000000000BDBD
+ BD008988880044424100423E3E0075757400A8A7A700757272003C3C3D006F6D
+ 6B00B7B7B6000000000000000000000000000000000000000000000000000000
+ 00000000000000000000FFDFC000D0703F00FFA77000C2E9FF00000000000000
+ 000000000000000000000000000000000000FEFEFE0000C0FF0000BAFF0000B4
+ FF0000AEFF00FEFEFE0000C63C0000C0390000BB360000B53300FEFEFE00EB3F
+ 4600E0363E00D42D3400C7232B00FEFEFE008FA4AC00ABF0F700AAF1F900A6EF
+ F7007397A200A1ECF500667D8A0078C5D6004C6C7C00346178005FC3E80022B6
+ EC004E5E6F0000000000000000000000000000000000B3B3B300A4A4A4006765
+ 64003F3C3A00403F3E006E707100BABBBB0000000000BBBBBB00717170004341
+ 3F0075747400B9B9B80000000000000000000000000000000000000000000000
+ 00000000000000000000FFDFC000D0601F00D0703F00E07F3F0000000000F0A0
+ 7F0000000000000000000000000000000000FEFEFE0000C7FF0000C2FF0000BD
+ FF0000B6FF00FEFEFE0000CD3E0000C83B0000C2390000BD3600FEFEFE00F748
+ 5000ED404800E3394000D7303700FEFEFE00B7CACF008FA4AC008FA4AC008FA4
+ AC005B8D9F00A5E8EF009BE8F4008CD5E2004666760073858F007A8A95007585
+ 9100BDCED300000000000000000000000000BEBEBE00908F8F00666363003D39
+ 37004541400087868600BEBEBE00000000000000000000000000BBBBBB009F9E
+ 9D004D4D4E007271710000000000000000000000000000000000000000000000
+ 00000000000000000000FFE0D000FFDFC000FFD0C000FFD0C000000000000000
+ 000000000000000000000000000000000000FEFEFE0000CCFF0000C8FF0000C4
+ FF0000BFFF00FEFEFE0000D1400000CD3E0000CA3C0000C43A00FEFEFE00FF4E
+ 5600F9495100F0434A00E63B4200FEFEFE000000000000000000000000000000
+ 00000000000086B3C30082ADBD00799FB000BCCED30000000000000000000000
+ 000000000000000000000000000000000000BEBEBE008E8D8D00444141004747
+ 46009A9A9A00BEBEBE000000000000000000000000000000000000000000BDBD
+ BD00B1B1B1008B8B8B0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FEFEFE00FEFEFE00FEFEFE00FEFE
+ FE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFE
+ FE00FEFEFE00FEFEFE00FEFEFE00FEFEFE000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000C0C0C000A9A9A90068696700A1A1
+ A000BFBFBF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000BBA1
+ 9400975F450063423200A28D8200000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FBD7C500F8D5C3000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000F8D5C300FBD7C500000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000CD86
+ 6300AB623F008A50330062453700BDBDBE00B99F9200664334005E3F3000A891
+ 8600000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000BA6E4700AA542900AA542900A25027009B4C25009648
+ 23008F4622008A43210086412000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000F8DCCF00F38A5700E195
+ 7100000000000000000000000000000000000000000000000000000000000000
+ 0000E1957100F38A5700F8DCCF00000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000DD83
+ 5500C3B2AA00B89C8E00854E3300C0C0C000C5826100AA623E00633C29002F25
+ 2300000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000C1795500FDF9F600CEB09C00CCAF9B00CAAD9A00C7AC
+ 9900C6AB9800C4A9970089432100000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000EECBBA00F085
+ 5000DA865E00000000000000000000000000000000000000000000000000DA86
+ 5E00F0855000EECBBA0000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000E185
+ 5700C5B3AA00BDAEA8008C523500BCB8B600D47C5200C2B2AA00AE9486006B42
+ 2D00000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000C9856400FFFFFF00DA8C5C00D1835100D1835100D183
+ 5100D1835100C6AB98008E452200000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000CA80
+ 5C00F0885500EAC8B70000000000000000000000000000000000EAC8B700F088
+ 5500CA805C000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000DA98
+ 7600E5865600B06641008F5538009C725D00C9754D00C1B9B500BA9E90008F55
+ 360000000000000000000000000000000000B7A2930063493500634935006349
+ 35006349350063493500D1927300FFFFFF00FEFDFB00FBEFEA00F5DED300F0CE
+ BE00EDC3AF00C7AC990092472300000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000E1CD
+ C300DB784700EF93670000000000000000000000000000000000EF936700DB78
+ 4700E1CDC3000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000C8B5
+ AC00EB8E5D00DB8256009F5F400094604700BE744F00D57B4F00B96B4500AD87
+ 740000000000000000000000000000000000B7A29300F8F3F000EADFD700E6D9
+ CF00E1D2C700DDCBBF00D89F8200FFFFFF00F3A77F00E7976E00DA8C5C00D183
+ 5100D1835100CAAE9A00984A2500000000000000000000000000000000008A46
+ 2500954C2800A4542E00B65F3400C7693A00D672400000000000000000000000
+ 0000AE5C3600EC865200F2CFBD000000000000000000F2CFBD00EC865200AE5C
+ 3600000000000000000000000000D6724000C7693A00B65F3400A4542E00954C
+ 28008A4625000000000000000000000000000000000000000000000000000000
+ 0000C8B6AE00DE997600DF845600C68D7000CC784D00D27C5100C6917700BDA7
+ 9C0000000000000000000000000000000000B7A29300FBF8F700E5AE8100DEA1
+ 7300DA9C6E00D5976800E0AA9000FFFFFF00FFFFFF00FFFFFF00FBF4F000F7E4
+ DB00F2D3C500CCAE9A009D4D250000000000000000000000000000000000954C
+ 2800DF733600EA824900F39A6A00F5B594000000000000000000000000000000
+ 0000A3664800E9845200F7C2A7000000000000000000F7C2A700E9845200A366
+ 480000000000000000000000000000000000F5B59400F39A6A00EA824900DF73
+ 3600954C28000000000000000000000000000000000000000000000000000000
+ 00000000000000000000887366007160560086675500AB9E9900000000000000
+ 000000000000000000000000000000000000BBA69700FEFDFC00FBF6F500F6EF
+ EB00F1E6E000ECDED600E7B59C00FFFFFF00FCAE8A00FCAE8A00F1DBD200E78E
+ 6000B3572A00AC542900A450270000000000000000000000000000000000A355
+ 2E00EC824B00F38D5B00EC9C7600B6866F00E9D5CB0000000000000000000000
+ 0000A9745900E1825400F7BE9E000000000000000000F7BE9E00E1825400A974
+ 5900000000000000000000000000E9D5CB00B6866F00EC9C7600F38D5B00EC82
+ 4B00A3552E000000000000000000000000000000000000000000000000000000
+ 000000000000B8B4B1008E8074007E6E6300695D550076726E00000000000000
+ 000000000000000000000000000000000000C1AB9C00FFFFFF00FAC59F00F0B8
+ 8E00E5AE8100DEA17300ECBDA600FFFFFF00FFFFFF00FFFFFF00FFFFFF00EA9A
+ 7200F0C9B200B1572B00EDD7CD0000000000000000000000000000000000B55F
+ 3400F39A6A00F49C7100F29465009D533000AA613B00DAB8A70000000000F6C5
+ AE009D644600DE805100F7BDA1000000000000000000F7BDA100DE8051009D64
+ 4600F6C5AE0000000000DAB8A700AA613B009D533000F2946500F49C7100F39A
+ 6A00B55F34000000000000000000000000000000000000000000000000000000
+ 000000000000BAB0AA00A2948B00A8A099008E817700635B5500000000000000
+ 000000000000000000000000000000000000C7B2A300FFFFFF00FFFFFF00FCFA
+ F900F8F2F000F3EAE600F0C4AE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EBA7
+ 8500C5653500F1DBCF000000000000000000000000000000000000000000C769
+ 3B00F7CAAE00FBDDCB00F4A37600F3946400B4623900B0643E00BF816200BB84
+ 6000A15E3900EE8B5A00F6C8B0000000000000000000F6C8B000EE8B5A00A15E
+ 3900BB846000BF816200B0643E00B4623900F3946400F4A37600FBDDCB00F7CA
+ AE00C7693B000000000000000000000000000000000000000000000000000000
+ 000000000000BEB1AA00A1948B00C8C6C400CDC5C0006B5F5600ADADAE000000
+ 000000000000000000000000000000000000CFB9A900FFFFFF00FFDABA00FFD0
+ AE00F0DED200B7A29300F0C4AE00EFC2AB00EFC1AA00EFB9A000EDB09200EDB0
+ 9200F9E4D900000000000000000000000000000000000000000000000000D672
+ 40000000000000000000FBDECF00F5A57E00F49D7200C9734700B7663C00B665
+ 3D00E2815300F6BCA100F6CBB7000000000000000000F6CBB700F6BCA100E281
+ 5300B6653D00B7663C00C9734700F49D7200F5A57E00FBDECF00000000000000
+ 0000D67240000000000000000000000000000000000000000000000000000000
+ 000000000000A99B9200B2A8A300C3C3C300E8E4E2007C6F6600A8A9AA000000
+ 000000000000000000000000000000000000D4BEAF00FFFFFF00FFFFFF00FFFF
+ FF00FEFDFC00BBA69600D4C5BA008F725B00E2DDD90000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000FBDACA00F5A67E00F6B69600F5B28F00F6B0
+ 9100F6C1A800F6C5AE0000000000000000000000000000000000F6C5AE00F6C1
+ A800F6B09100F5B28F00F6B69600F5A67E00FBDACA0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000BBB8B600A3968C00BCBAB90000000000DDDCDC00BCB2AB00A6A19E000000
+ 000000000000000000000000000000000000D8C2B200FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00C7B1A200A5826600E2DDD9000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000FBE0D200F6C3A900F7CF
+ BB00F9DBCD00000000000000000000000000000000000000000000000000F9DB
+ CD00F7CFBB00F6C3A900FBE0D200000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000BFB8B300B3A89E000000000000000000CBCBCB00E2DDDA00A19790000000
+ 000000000000000000000000000000000000D8C2B200D8C2B200D4BFAE00D4BF
+ AE00CEB8A900C8B2A300E9E2DE00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00009E8D80006349350063493500634935006349350063493500634935006349
+ 3500634935006349350000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000EFCECF00C3646500AA55
+ 5600A45253009F4F50009A4D4D00944A4A008F4747008944440083414100783B
+ 3C00783B3C00723939006E363700000000000000000000000000000000000000
+ 00009B8A7D00FCFAF800D9C0AE00D5BCAB00CFB7A600C8B1A000C1AB9B00BBA6
+ 9600B7A2930063493500000000000000000075848F0066808F0060798700576E
+ 7B004E626F0044566100394852002E3A4300252E35001B22290014191E000E12
+ 16000E1318000000000000000000000000000000000000000000EB925D00EB92
+ 5D0000000000000000000000000000000000FFFFFF00E39A6F00FFFFFF00E399
+ 6C00E2996D00E3996D00FFFFFF000000000000000000CF6B6C00F38E8F00E680
+ 8100AA44240047322100C3B4AB00C6BBB300CAC1BC00CEC8C400564D48009E3E
+ 33009C3D36009839310072393900000000000000000000000000000000000000
+ 00009B8A7D00FEFEFE00FBF8F700F6F1ED00F1E8E100EBDED600E5D5C900E1CD
+ BE00BCA596006349350000000000000000007787920089A1AB006AB2D400008F
+ CD00008FCD00008FCD00048CC7000888BE000F82B400157CA9001B779F001F72
+ 9600224B5C0087A2AB0000000000000000000000000000000000EB925D00EB92
+ 5D0000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000D16F7000FF999A00EC86
+ 8700E6808100715B4B00473C34008D786800EDE0D800F1E7E0008F7F7300A341
+ 3500A2423C009C3D3500783B3C00000000000000000000000000000000000000
+ 00009E8D8000FFFFFF00FEFDFD00FAF7F500F5EFEA00F0E6DF00EBDDD300E5D4
+ C700C1AA9B006349350000000000000000007A8A95007EBED3008AA4AE007EDC
+ FF005FCFFF0055CBFF004CC4FA0041BCF50037B3F0002EAAEB0024A0E500138C
+ D400236780005E696D0000000000000000000000000000000000EB925D00EB92
+ 5D0000000000000000000000000000000000FFFFFF00E2956600E3936300FFFF
+ FF00E3926200E2936300FFFFFF000000000000000000D4757600FF9FA000F590
+ 9100EC868700715B4B0000000000473C3400E9D9CE00ECDDD40085746700AE4B
+ 4300AA494400A3423C007D3E3E00000000000000000000000000000000000000
+ 0000A2918400FFFFFF00FFFFFF00FDFDFB00F9F5F300F4EDE800EFE4DC00E9DB
+ D000C8B1A1006349350000000000000000007D8E980079D2EC008BA4AD0089C2
+ CE0071D8FF0065D3FF005CCEFF0051C9FE0049C1FA003FB9F50034B0EE0029A8
+ E9001085CD00224B5B0098B2BA0000000000000000000B090900EB925D00EB92
+ 5D0000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000000000000000000D77B7C00FFA9AA00FB9F
+ A000F5939400715B4B00715B4B00715B4B00715B4B00766252007D6A5B00BA56
+ 5400B24F4C00AA49440083414100000000000000000000000000000000000000
+ 0000A7958800FFFFFF00FFFFFF00FFFFFF00FCFBFA00F9F4F100F3ECE600EDE3
+ DA00CFB7A60063493500000000000000000080919C0081D7EF007DC5E0008CA6
+ B00080DDFE0068D3FF0067D4FF0062D1FF0058CDFF004EC7FC0046BEF7003BB6
+ F20031ACEC00256981007A95A10000000000000000001D1D1D00EB925D00EB92
+ 5D00EB925D00EB925D00EB925D0000000000FFFFFF00E3915F00E28C5800FFFF
+ FF00FFFFFF00E2936400FFFFFF000000000000000000DB838400FFB3B400FFAD
+ AE00FCA3A400F48E8F00EC868700E6808100DF797A00D7717200D16B6C00C15D
+ 5C00BA565400B2504C0089444400000000000000000000000000000000000000
+ 0000AB9A8C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFAF800F7F3EF00F2EA
+ E400D5BCAB0063493500000000000000000083959F0089DCF1008CE2FF008DA8
+ B1008CBAC70074D8FF0067D4FF0067D4FF0067D4FF005FD0FF0054CDFF004BC5
+ FC0041BBF7002EA2DB005167740098B2BA000000000000000000EB925D00EB92
+ 5D00171717000F0F0F000707070000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF000000000000000000000000000000000000000000DF8A8B00FFBBBC00FFB6
+ B700C9636000C45E5600BE584B00B8523F00B34D3400AD472800A7411C00A13B
+ 1100C15D5C00BA5654008F474700000000000000000000000000000000000000
+ 0000B09E9000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFEFE00FBF9F700F6F1
+ ED00D9C0AE00634935000000000000000000869AA30092E1F20098E8FD0080C4
+ DE008EA7B00081DEFD0084E0FF0084E0FF0084E0FF0084E0FF0081DFFF007BDD
+ FF0074D8FF006BD6FF0056A9D1008F9BA4000000000000000000EB925D003133
+ 3100FFE0CF00FFE0CF00FFE0CF0000000000FFFFFF00E2916000FFFFFF00FFFF
+ FF0000000000FFFFFF00000000000000000000000000E2919200FFBDBE00CC66
+ 6700FFFFFF00FFFFFF00FBF8F600F6EEEA00F0E5DE00EADBD200E5D1C600E1CA
+ BD00A13B1100C25D5C00944A4A00000000000000000070C7E10081D8EE0086E6
+ FA0039BEE50099D8DF0091E1F60081D0E900FFFFFF00FFFFFF00FEFEFD00C4AD
+ 9D00C3AB9C00644A36000000000000000000889CA5009AE6F3009FEBFB0098E8
+ FE008BACB9008BACB9008AAAB70088A6B30086A3AF00839FAA00819AA6007F95
+ A1007C919D007A8E9900798B9500778893000000000000000000EB925D000000
+ 0000FFE0CF00FFE0CF00FFE0CF0000000000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF000000000000000000000000000000000000000000E5979800FFBDBE00D36D
+ 6E00FFFFFF00FFFFFF00FFFFFF00FBF8F600F6EEEA00F0E5DE00EADBD200E5D1
+ C600A7411C00CC6767009A4D4D00000000000000000098E2F30031B7DF007DE9
+ FD005DC6E60093F0FF002FB6DF00A0E8F900FFFFFF00FFFFFF00A9988A00644A
+ 3600644A3600644A360000000000000000008BA0A800A0EAF600A6EEF9009FEB
+ FB0098E8FE007ADAFF0067D4FF0067D4FF0067D4FF0067D4FF0067D4FF0067D4
+ FF00778893000000000000000000000000000000000000000000EB925D000000
+ 0000FFE0CF00FFE0CF00FFE0CF00000000000000000000000000000000000000
+ 000000000000EB925D00000000000000000000000000E99E9F00FFBDBE00DC76
+ 7700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBF8F600F6EEEA00F0E5DE00EADB
+ D200AD472800D77172009F4F5000000000000000000094EAFA0093F1FF00BFF8
+ FF00AFE8F400C7FBFF0093F1FF009FF0FF00FFFFFF00FFFFFF00AE9C8E00D4C5
+ BA00644A3600D0CBC40000000000000000008EA2AB00A7EEF600ABF0F700A6EE
+ F9009FEBFB0098E8FD0071D4FB00899EA7008699A30082949F007E909A007A8C
+ 9700778893000000000000000000000000000000000000000000EB925D000000
+ 0000FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0
+ CF0021212100EB925D0011110F000000000000000000EDA6A700FFBDBE00E680
+ 8100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBF8F600F6EEEA00F0E5
+ DE00B34D3400DF797A00A4525300000000000000000022ABD90053BFE100AFE8
+ F400F0FFFD00B4EBF60053BFE10036BBE500FFFFFF00FFFFFF00B2A09200644A
+ 3600D0CCC5000000000000000000000000008FA4AC00A0D2DA00ABF0F700ABF0
+ F700A6EEF9009FEBFB008DA1AA00B5CBD0000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000EB925D000000
+ 0000FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0
+ CF00333535002B2D2B00232323000000000000000000F0ACAD00FFBDBE00EF89
+ 8A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBF8F600F6EE
+ EA00B8523F0067333300AA555600000000000000000094EAFA0096F3FF00C7FB
+ FF00ADE5F300C3FBFF0096F3FF008BD7E200B6A49600B6A49600B5A39500D0CC
+ C50000000000000000000000000000000000BDCED4008FA4AC008FA4AC008FA4
+ AC008FA4AC008FA4AC00B5CBD000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000EB925D000000
+ 0000FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0CF00FFE0
+ CF0045474700FFE0CF00353537000000000000000000F3B2B300FFBDBE00F892
+ 9300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FBF8
+ F600BE584B00B0585900B0585900000000000000000096E1F30032B8E0008CF1
+ FF0058C2E30090F1FF002FB6DF008DDDF0000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000F5B6B700F5B6B700F3B2
+ B300F1ADAE00EEA7A800EAA1A200E79A9B00E4939400E08E8F00DD878800DA80
+ 8100D67A7B00D3747500D16F7000000000000000000066C3E00081D8EE0094EA
+ FA0026AFDB008CE8FA008EDEF10081CCE3000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000400100000100010000000000000A00000000000000000000
+ 000000000000000000000000FFFFFF0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000FFFFFFFFFFFFFFFFFF9FF80F81FFFFFF
+ F187E0078007C7FFE083C003C103C2FFC213C001C411F207C7138001C801F187
+ F111800188C8F10FC00080018308F903800C80019019F89387018001CC23F8FF
+ 800380018027F07FC0818003240FFCFFC683C003203FFC1FFC17E00707FFFE1F
+ FC1FF00FBFFFFF3FFFFFFFFFFFFFFFFFFFFF0000FF0FFFFF00000000F8030001
+ 00000000E000000100000000C000000100000000800000010000000000000001
+ 0000000000000001000000008000000100000000000000010000000000000001
+ 0000000000000001000000000000000100000000C043000100000000C0074015
+ 00000000C00F000100000000F63FFFFFFFFFFFFFFFFFF001FFFFC007F00FF001
+ C1FFC007E007C001C1FFC007C003C001007FC00780010001007FC00780010001
+ 007FC007800100010013C007800100010003C00780010001C000C00780010001
+ C000C00780010001FE00C00780010007FE00C007C0030007FE00C00FE007001F
+ FF83C01FF00F001FFF83FFFFFFFFFFFFFFFFFFFFF807FFFFFFFFFC01F807C007
+ 000FFC01F007C007000FFC01E003C007000FC001C003C007000F8001C001C007
+ 000F80018001C007000F80010001C007000F80010000C007000780039000C007
+ 00038007E000C00700018007C000C00700008007C005C007FFF08007E407C00F
+ FFF9C00FFC0FC01FFFFFF87FFE7FFFFFFFFFFFFFFFFFFE70F87FFFFFFC00FC20
+ C867FC018000F8008003FC010000F0088003FC010000E011C007000100008001
+ C007000100010000030100010003000007810001000700000781000100070000
+ 0301000300070000C0070007000700008003007F00070000800300FF800F0000
+ C86701FFF8FF8001F87FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800180010000
+ 8003800180010000000180018001000000018001800100000001800180010000
+ 0001800180010000000180018001000000018001800100000001800180010000
+ 0001800180010000000180018001000000018001800100000001800180010000
+ 8003800180010000FFFFFFFF80010000FFFFFFFFFFFFFC00FF1FFFF8FFF8FC00
+ FE1FFFF0FFF0FC00EE1FFFE0FFE0FC00E03FFFC1FFC1E000E03FE003E003E000
+ E03FC007C007E000E00F800F800FE000E01F800F800F0007E03F800F800F0007
+ E07F800F800F0007E0FF800F800F0007E1FF800F800F003FE3FF800F800F003F
+ E7FFC01FC01F003FEFFFE03FE03F003FFFFF0000F001F00FFFFF0000F001C003
+ FFFF0000C0018001FFFF0000C0018001FE7F000000010000FE3F000000010000
+ E01F000000010000E00F000000010000E00F000000010000E00F000000010000
+ E01F000000010000FE3F000000070000FE7F000000078001FFFF0000001F8001
+ FFFF0000001FC003FFFF0000FFFFF00FFFE7FFFFFFFFFFFFFFE7FFFFFFFFFFFF
+ FFE7F00F0003FBFFE000E0070001F9FFE000C0030001F8FFE3E7C0030001F87F
+ E5E7C3C30001F83FE6E7C3C30001F81FE767C2430001F80FE7A7C0C30001F81F
+ E7C7C0C30001F83F0007C0C30001F87F0007E0C70001F8FFE7FBC0FF0001F9FF
+ E7FDFFFF0001FBFFE7FFFFFFFFFFFFFFFFFFFFFFFFFFF800FFFFFFFFFFFFF800
+ FFFFFFFF0003F801FFFFC0030001FC21E00FCFFB0001FC01E00FC00B0001F800
+ E00FC00B0001FC10E00FC00B0001F810E00FC00B00010000E00FC00B00011001
+ E00FC00B000110FFE00FC00B000198FFE00FC003000180FFFFFFC003000181FF
+ FFFFFFFF0001CFFFFFFFFFFFFFFF87FFFFFFDFFFFFFFFFFFF001DFFB0000FC3F
+ F80187FB8000E023FC0103FB80008001BE0103E1800080019F0103C080008001
+ 8F0103C08000C003860187C0800000008061EFC08000000080F1EFE180000000
+ 80F9EFF780008000807DF7EF8000E003803FF7EF8000C001801FFBDF8000C001
+ 800FFC3F8000E423FFFFFFFF0000FC3FFFFFFF1FFEFFFFFFFFF8E0001C71800F
+ FFF0E0003839800FFFE0E0005EF5800FFFC1E000EEEFF0FFE003E000C007F07F
+ C00780008003F83F800F80008003FC1F800F00008003FE03800F00008003FF03
+ 800F0000C007FF83800F0000EEEFFF80800F00005EF5FF80800F80003839FFC0
+ C01FC0FF1C71FFF0E03FFFFFFEFFFFFFFFFFFFFFFFFFFFFF800380038003E00F
+ 800380038003E00F800380038003E000800380038003E0008003800380030000
+ 8003800380030000800380038003000080038003800300008003800380030000
+ 800380038003000080038003800300018007800780070003800F800F800F0007
+ 801F801F801F01FF803F803F803F03FFFF80FFFFFFFFFFFFFE00FC038003803F
+ F800FC038003803FF000F0038003803FE000F00380038003C000C00380038003
+ 0000C003800380030000C003800380030000C003800380030000C00380038003
+ 0000C007800380030000C00F800380030000C01F8007F8070000C03F800FF80F
+ 8001C07F801FF81FFFFFFFFF803FFFFFFFFFFFFFFFFFFFFFFFFF8421FFFFFFFF
+ 80008421000FC7FF00008421000FC2FF00008421000FF2070000FFFF000FF187
+ 00008421000FF10F00008421000FF903000084210007F893000084210003F8FF
+ 0000FFFF0001F07F000084210000FCFF000084210000FC1F00008421FFE0FE1F
+ 00008421FFF0FF3F0000FFFFFFFFFFFFFFFFFFFF800FFFFFFFFF000F800F8003
+ FFFF000F800F8003E007000F80008003E007000F80008003E007000F80008003
+ E007000F80008003E007000F80008003E007000C80008003E007000080008003
+ E007000080008003E007000080008003E007F800800F8003FFFFF000800F8003
+ FFFFF000800F8003FFFFFFFF800FFFFFFFFFFFFFFFFFFFFFFC00FFFF803FFFFF
+ 0000C3F3803F0000000081E1803F00000000C1C1800300000000C18380030000
+ 0001E007800300000003F00F800300000007F81F800300000007FC1F80030000
+ 0007F00F800300000007E0078003000000078083F8070000000701C3F80F0000
+ F87F03E3F81F0000FFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1FFFFFF
+ FF9FF9FFE00FFC01FF8FF1FFE00FFC01FFC7E3FFE00FFC01FFE3C7FFE00F0001
+ FFE3C7FFE00F0001E0718E07F00F0001E0F18F07FC3F0001E0718E07F83F0001
+ E0218407F83F0003E0018007F81F0007EC018037F81F007FFE03C07FF11F00FF
+ FF87E1FFF31F01FFFFFFFFFFFFFFFFFFFFFFFFFFFE00FFFFF003FFFFC0008001
+ F003000780008001F003000380008001F003000380008001F003000180008001
+ F003000180008001F003000080008001F0030000800180018003000080018001
+ 80030007800180018003000780018001800700FF80018001800F01FF80018001
+ 80FFFFFF8001800180FFFFFFFFFFFFFF00000000000000000000000000000000
+ 000000000000}
+ end
+ object MainMenu: TMainMenu
+ Images = Buttons
+ Left = 24
+ Top = 168
+ object MainFile: TMenuItem
+ Caption = '&File'
+ OnClick = MainMenuClick
+ object New1: TMenuItem
+ Caption = 'New...'
+ ImageIndex = 65
+ ShortCut = 16462
+ OnClick = btNewClick
+ end
+ object mnuOpen: TMenuItem
+ Caption = '&Open...'
+ ImageIndex = 1
+ ShortCut = 16463
+ OnClick = mnuOpenClick
+ end
+ object Restorelastautosave1: TMenuItem
+ Caption = 'Restore last autosave'
+ ShortCut = 49217
+ OnClick = Restorelastautosave1Click
+ end
+ object ImportFromPNG: TMenuItem
+ Caption = 'Load parameters from PNG'
+ OnClick = ImportFromPNGClick
+ end
+ object N3: TMenuItem
+ Caption = '-'
+ end
+ object mnuSaveAs: TMenuItem
+ Caption = '&Save Parameters...'
+ ImageIndex = 3
+ ShortCut = 16467
+ OnClick = mnuSaveAsClick
+ end
+ object mnuSaveAllAs: TMenuItem
+ Caption = 'Save &All Parameters'
+ ShortCut = 24659
+ OnClick = mnuSaveAllAsClick
+ end
+ object N9: TMenuItem
+ Caption = '-'
+ end
+ object mnuSmoothGradient: TMenuItem
+ Caption = 'Smooth Palette...'
+ ImageIndex = 34
+ OnClick = mnuSmoothGradientClick
+ end
+ object mnuOpenGradient: TMenuItem
+ Caption = 'Gradient Browser...'
+ ImageIndex = 29
+ OnClick = mnuOpenGradientClick
+ end
+ object N18: TMenuItem
+ Caption = '-'
+ end
+ object mnuSaveUPR: TMenuItem
+ Caption = 'Export &UPR...'
+ ImageIndex = 73
+ OnClick = mnuSaveUPRClick
+ end
+ object mnuExportFLame: TMenuItem
+ Caption = 'Export Flame...'
+ ImageIndex = 74
+ ShortCut = 16472
+ OnClick = mnuExportFLameClick
+ end
+ object mnuExportChaotica: TMenuItem
+ Caption = 'Export to Chaotica...'
+ ImageIndex = 72
+ ShortCut = 49240
+ OnClick = mnuExportChaoticaClick
+ end
+ object mnuImportGimp: TMenuItem
+ Caption = 'Import Gimp Parameters'
+ Visible = False
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object mnuRandomBatch: TMenuItem
+ Caption = '&Random Batch'
+ ShortCut = 16450
+ OnClick = mnuRandomBatchClick
+ end
+ object FileExitSep: TMenuItem
+ Caption = '-'
+ end
+ object mnuExit: TMenuItem
+ Caption = 'E&xit'
+ OnClick = mnuExitClick
+ end
+ end
+ object MainEdit: TMenuItem
+ Caption = '&Edit'
+ OnClick = MainMenuClick
+ object mnuUndo: TMenuItem
+ Caption = '&Undo'
+ Enabled = False
+ ImageIndex = 4
+ ShortCut = 16474
+ OnClick = mnuUndoClick
+ end
+ object mnuRedo: TMenuItem
+ Caption = '&Redo'
+ Enabled = False
+ ImageIndex = 5
+ ShortCut = 16473
+ OnClick = mnuRedoClick
+ end
+ object mnuSaveUndo: TMenuItem
+ Caption = 'Save Undo...'
+ Enabled = False
+ ShortCut = 49237
+ OnClick = mnuSaveUndoClick
+ end
+ object N13: TMenuItem
+ Caption = '-'
+ end
+ object mnuCopy: TMenuItem
+ Caption = 'Copy'
+ ImageIndex = 7
+ ShortCut = 16451
+ OnClick = mnuCopyClick
+ end
+ object mnuPaste: TMenuItem
+ Caption = 'Paste'
+ ImageIndex = 8
+ ShortCut = 16470
+ OnClick = mnuPasteClick
+ end
+ object N20: TMenuItem
+ Caption = '-'
+ end
+ object mnuCopyUPR: TMenuItem
+ Caption = 'Copy as U&PR'
+ ImageIndex = 23
+ ShortCut = 16469
+ OnClick = mnuCopyUPRClick
+ end
+ end
+ object View1: TMenuItem
+ Caption = '&View'
+ object mnuFullScreen: TMenuItem
+ Caption = 'Full Screen'
+ ImageIndex = 52
+ ShortCut = 114
+ OnClick = mnuFullScreenClick
+ end
+ object N4: TMenuItem
+ Caption = '-'
+ end
+ object mnuEditor: TMenuItem
+ Caption = '&Editor'
+ ImageIndex = 19
+ ShortCut = 115
+ OnClick = mnuEditorClick
+ end
+ object mnuAdjust: TMenuItem
+ Caption = 'Adjust'
+ ImageIndex = 18
+ ShortCut = 116
+ OnClick = mnuAdjustClick
+ end
+ object mnuGrad: TMenuItem
+ Caption = 'Gradient'
+ ImageIndex = 11
+ ShortCut = 117
+ OnClick = mnuGradClick
+ end
+ object mnuMutate: TMenuItem
+ Caption = 'Mutation'
+ ImageIndex = 17
+ ShortCut = 118
+ OnClick = mnuMutateClick
+ end
+ object mnuCurves: TMenuItem
+ Caption = 'Curves'
+ ImageIndex = 69
+ ShortCut = 119
+ OnClick = tbCurvesClick
+ end
+ object N5: TMenuItem
+ Caption = '-'
+ end
+ object mnuImageSize: TMenuItem
+ Caption = 'Image Size'
+ ImageIndex = 14
+ OnClick = mnuImageSizeClick
+ end
+ object mnuMessages: TMenuItem
+ Caption = 'Messages'
+ ImageIndex = 63
+ OnClick = tbMessagesClick
+ end
+ end
+ object MainFlame: TMenuItem
+ Caption = 'Flame'
+ OnClick = MainMenuClick
+ object mnuResetLocation: TMenuItem
+ Caption = 'Reset Location'
+ ImageIndex = 12
+ ShortCut = 123
+ OnClick = mnuResetLocationClick
+ end
+ object mnuRandom: TMenuItem
+ Caption = '&Randomize'
+ OnClick = mnuRandomClick
+ end
+ object N19: TMenuItem
+ Caption = '-'
+ end
+ object Changeweightdistribution1: TMenuItem
+ Caption = 'Change Weight distribution'
+ ImageIndex = 25
+ object mnuRWeights: TMenuItem
+ Caption = 'Random &Weights'
+ OnClick = mnuRWeightsClick
+ end
+ object mnuEqualize: TMenuItem
+ Caption = '&Equalize Weights'
+ OnClick = mnuEqualizeClick
+ end
+ object CalculateWeights: TMenuItem
+ Caption = 'Calculate Weights'
+ OnClick = CalculateWeightsClick
+ end
+ object mnuNormalWeights: TMenuItem
+ Caption = 'Normalize Weights'
+ OnClick = mnuNormalWeightsClick
+ end
+ end
+ object Changecolordistribution1: TMenuItem
+ Caption = 'Change Color distribution'
+ ImageIndex = 30
+ object mnuCalculateColors: TMenuItem
+ Caption = 'Calculate Colors Values'
+ OnClick = mnuCalculateColorsClick
+ end
+ object mnuRandomizeColorValues: TMenuItem
+ Caption = 'Randomize Color Values'
+ ShortCut = 49230
+ OnClick = mnuRandomizeColorValuesClick
+ end
+ object ResetColorValues: TMenuItem
+ Caption = 'Reset color values'
+ OnClick = ResetColorValuesClick
+ end
+ object Calculatecolorspeed1: TMenuItem
+ Caption = 'Calculate color speed'
+ OnClick = Calculatecolorspeed1Click
+ end
+ object Randomizecolorspeed1: TMenuItem
+ Caption = 'Randomize color speed'
+ OnClick = Randomizecolorspeed1Click
+ end
+ object ResetColorSpeed: TMenuItem
+ Caption = 'Reset color speed'
+ OnClick = ResetColorSpeedClick
+ end
+ end
+ object N2: TMenuItem
+ Caption = '-'
+ end
+ object AddSymmetry: TMenuItem
+ Caption = 'Add equiaffine symmetry...'
+ object BilateralSym: TMenuItem
+ Tag = -1
+ Caption = 'Bilateral'
+ OnClick = AddSymmetryClick
+ end
+ object RotationalSym: TMenuItem
+ Caption = 'Rotational, order...'
+ object rot2: TMenuItem
+ Tag = 2
+ Caption = '2'
+ OnClick = AddSymmetryClick
+ end
+ object rot3: TMenuItem
+ Tag = 3
+ Caption = '3'
+ OnClick = AddSymmetryClick
+ end
+ object rot4: TMenuItem
+ Tag = 4
+ Caption = '4'
+ OnClick = AddSymmetryClick
+ end
+ object rot5: TMenuItem
+ Tag = 5
+ Caption = '5'
+ OnClick = AddSymmetryClick
+ end
+ object rot6: TMenuItem
+ Tag = 6
+ Caption = '6'
+ OnClick = AddSymmetryClick
+ end
+ object rot7: TMenuItem
+ Tag = 7
+ Caption = '7'
+ OnClick = AddSymmetryClick
+ end
+ object rot8: TMenuItem
+ Tag = 8
+ Caption = '8'
+ OnClick = AddSymmetryClick
+ end
+ end
+ object DihedralSym: TMenuItem
+ Caption = 'Dihedral, order...'
+ object dih2: TMenuItem
+ Tag = -2
+ Caption = '2'
+ OnClick = AddSymmetryClick
+ end
+ object dih3: TMenuItem
+ Tag = -3
+ Caption = '3'
+ OnClick = AddSymmetryClick
+ end
+ object dih4: TMenuItem
+ Tag = -4
+ Caption = '4'
+ OnClick = AddSymmetryClick
+ end
+ object dih5: TMenuItem
+ Tag = -5
+ Caption = '5'
+ OnClick = AddSymmetryClick
+ end
+ object dih6: TMenuItem
+ Tag = -6
+ Caption = '6'
+ OnClick = AddSymmetryClick
+ end
+ object dih7: TMenuItem
+ Tag = -7
+ Caption = '7'
+ OnClick = AddSymmetryClick
+ end
+ object dih8: TMenuItem
+ Tag = -8
+ Caption = '8'
+ OnClick = AddSymmetryClick
+ end
+ end
+ end
+ object AddTile: TMenuItem
+ Caption = 'Add equiaffine tile...'
+ OnClick = AddTileClick
+ object Rhombic1: TMenuItem
+ Tag = 1
+ Caption = 'Rhombus'
+ OnClick = AddTileClick
+ end
+ object Square1: TMenuItem
+ Tag = 2
+ Caption = 'Square'
+ OnClick = AddTileClick
+ end
+ object Hexagonal1: TMenuItem
+ Tag = 3
+ Caption = 'Hexagonal'
+ OnClick = AddTileClick
+ end
+ end
+ object N24: TMenuItem
+ Caption = '-'
+ end
+ object mnuFlatten: TMenuItem
+ Caption = 'Apply flatten'
+ OnClick = mnuFlattenClick
+ end
+ object mnuUnflatten: TMenuItem
+ Caption = 'Unflatten'
+ OnClick = mnuUnflattenClick
+ end
+ object N12: TMenuItem
+ Caption = '-'
+ end
+ object AddTemplate: TMenuItem
+ Caption = 'Save as template'
+ OnClick = AddTemplateClick
+ end
+ object N21: TMenuItem
+ Caption = '-'
+ end
+ object mnuRender: TMenuItem
+ Caption = 'Render to Disk...'
+ ImageIndex = 35
+ ShortCut = 16466
+ OnClick = mnuRenderClick
+ end
+ object mnuRenderAll: TMenuItem
+ Caption = 'Render &All Flames'
+ ImageIndex = 64
+ ShortCut = 49234
+ OnClick = mnuRenderAllClick
+ end
+ object mnuResumeRender: TMenuItem
+ Caption = 'Resume unfinished render...'
+ Enabled = False
+ Hint = 'Resume unfinished render process from a saved file'
+ Visible = False
+ end
+ object N22: TMenuItem
+ Caption = '-'
+ end
+ object mnuReportFlame: TMenuItem
+ Caption = 'Generate report...'
+ OnClick = mnuReportFlameClick
+ end
+ end
+ object mnuVar: TMenuItem
+ Caption = 'Variation'
+ object mnuVRandom: TMenuItem
+ Caption = 'Random'
+ Checked = True
+ GroupIndex = 2
+ RadioItem = True
+ ShortCut = 122
+ OnClick = mnuVRandomClick
+ end
+ object N8: TMenuItem
+ Caption = '-'
+ GroupIndex = 2
+ end
+ object mnuBuiltinVars: TMenuItem
+ Caption = 'Built-in'
+ GroupIndex = 2
+ end
+ object mnuPluginVars: TMenuItem
+ Caption = 'Plugins'
+ GroupIndex = 2
+ end
+ end
+ object mnuScript: TMenuItem
+ Caption = 'Script'
+ object mnuRun: TMenuItem
+ Caption = 'Run script'
+ ImageIndex = 43
+ ShortCut = 120
+ OnClick = mnuRunClick
+ end
+ object mnuStop: TMenuItem
+ Caption = 'Stop script'
+ ImageIndex = 36
+ ShortCut = 121
+ OnClick = mnuStopClick
+ end
+ object N15: TMenuItem
+ Caption = '-'
+ end
+ object mnuOpenScript: TMenuItem
+ Caption = 'Open...'
+ ImageIndex = 1
+ ShortCut = 16453
+ OnClick = mnuOpenScriptClick
+ end
+ object mnuEditScript: TMenuItem
+ Caption = 'Edit'
+ ImageIndex = 42
+ ShortCut = 16452
+ OnClick = mnuEditScriptClick
+ end
+ object mnuTurnFlameToScript: TMenuItem
+ Caption = 'Turn flame into script...'
+ ShortCut = 16454
+ OnClick = mnuTurnFlameToScriptClick
+ end
+ object N10: TMenuItem
+ Caption = '-'
+ end
+ object mnuManageFavorites: TMenuItem
+ Caption = 'Manage Favorites'
+ ImageIndex = 59
+ OnClick = mnuManageFavoritesClick
+ end
+ object FavouriteScripts1: TMenuItem
+ AutoHotkeys = maManual
+ Caption = 'Favourite Scripts'
+ Enabled = False
+ end
+ object Directory1: TMenuItem
+ AutoHotkeys = maManual
+ Caption = 'Directory'
+ Enabled = False
+ end
+ end
+ object mnuView: TMenuItem
+ Caption = 'Options'
+ object mnuToolbar: TMenuItem
+ Caption = 'Main toolbar'
+ Checked = True
+ OnClick = mnuToolbarClick
+ end
+ object mnuStatusBar: TMenuItem
+ Caption = 'Status Bar'
+ Checked = True
+ OnClick = mnuStatusBarClick
+ end
+ object mnuFileContents: TMenuItem
+ Caption = 'File Contents'
+ Checked = True
+ OnClick = mnuFileContentsClick
+ end
+ object N25: TMenuItem
+ Caption = '-'
+ end
+ object SortFlames: TMenuItem
+ Caption = 'Sort flame list alphabetically'
+ ShortCut = 49222
+ OnClick = SortFlamesClick
+ end
+ object EnumerateFlames: TMenuItem
+ AutoCheck = True
+ Caption = 'Display flame indices'
+ OnClick = EnumerateFlamesClick
+ end
+ object mnuResetUI: TMenuItem
+ Caption = 'Reset file content list width'
+ OnClick = mnuResetUIClick
+ end
+ object N17: TMenuItem
+ Caption = '-'
+ end
+ object mnuTrace: TMenuItem
+ Caption = 'Trace log...'
+ ImageIndex = 71
+ OnClick = mnuTraceClick
+ end
+ object N14: TMenuItem
+ Caption = '-'
+ end
+ object mnuOptions: TMenuItem
+ Caption = 'Options...'
+ ImageIndex = 13
+ ShortCut = 16464
+ OnClick = mnuOptionsClick
+ end
+ object N7: TMenuItem
+ Caption = '-'
+ end
+ object mnuApoStyle: TMenuItem
+ AutoHotkeys = maManual
+ Caption = 'Apophysis UI style...'
+ end
+ end
+ object MainHelp: TMenuItem
+ Caption = '&Help'
+ Hint = 'About Apophys and its fractal algoritm'
+ object mnuHelpTopics: TMenuItem
+ Caption = 'Contents'
+ ShortCut = 112
+ OnClick = mnuHelpTopicsClick
+ end
+ object mnuFlamepdf: TMenuItem
+ Caption = 'The Fractal Flame Algorithm'
+ OnClick = mnuFlamepdfClick
+ end
+ object mnuManual: TMenuItem
+ Caption = 'IFS Fractal Theory...'
+ Hint =
+ 'https://www.amazon.com/Fractals-Everywhere-Dover-Books-Mathemati' +
+ 'cs/dp/0486488705'
+ OnClick = mnuManualClick
+ end
+ object N11: TMenuItem
+ Caption = '-'
+ end
+ object mnuAbout: TMenuItem
+ Caption = 'About Apophysis...'
+ ImageIndex = 70
+ OnClick = mnuAboutClick
+ end
+ object DownloadPlugins: TMenuItem
+ Caption = 'Download Apophysis plugins....'
+ Hint = 'https://sourceforge.net/projects/apo-plugins/'
+ OnClick = DownloadPluginsClick
+ end
+ end
+ end
+ object OpenDialog: TOpenDialog
+ Filter =
+ 'Apophysis Parameter Files (*.apo)|*.apo|Apophysis 1.0 Parameters' +
+ ' (*fla)|*.fla|IFS Files (*.ifs)|*.ifs'
+ Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing]
+ Left = 24
+ Top = 456
+ end
+ object ListPopUp: TPopupMenu
+ OnPopup = ListPopUpPopup
+ Left = 24
+ Top = 224
+ object mnuItemDelete: TMenuItem
+ Caption = '&Delete'
+ Hint = 'Delete the selected IFS fractal from the file'
+ ShortCut = 16430
+ OnClick = mnuItemDeleteClick
+ end
+ object mnuListRename: TMenuItem
+ Caption = '&Rename'
+ Hint = 'Rename the selected IFS fractal'
+ ShortCut = 113
+ OnClick = mnuListRenameClick
+ end
+ object N27: TMenuItem
+ Caption = '-'
+ end
+ object mnuRefreshThumb: TMenuItem
+ Caption = 'Refresh thumbnail'
+ OnClick = mnuRefreshThumbClick
+ end
+ object mnuRefreshAllThumbs: TMenuItem
+ Caption = 'Refresh all thumbnails'
+ OnClick = ListViewDblClick
+ end
+ object N26: TMenuItem
+ Caption = '-'
+ end
+ object mnuLowQuality: TMenuItem
+ Caption = 'Low Quality'
+ RadioItem = True
+ OnClick = mnuThumbnailQualityClick
+ end
+ object mnuMediumQuality: TMenuItem
+ Tag = 1
+ Caption = 'Medium Quality'
+ Checked = True
+ RadioItem = True
+ OnClick = mnuThumbnailQualityClick
+ end
+ object mnuHighQuality: TMenuItem
+ Tag = 2
+ Caption = 'High Quality'
+ RadioItem = True
+ OnClick = mnuThumbnailQualityClick
+ end
+ end
+ object DisplayPopup: TPopupMenu
+ Images = Buttons
+ Left = 104
+ Top = 224
+ object mnuPopUndo: TMenuItem
+ Caption = 'Undo'
+ Enabled = False
+ ImageIndex = 4
+ ShortCut = 16474
+ OnClick = mnuUndoClick
+ end
+ object mnuPopRedo: TMenuItem
+ Caption = 'Redo'
+ Enabled = False
+ ImageIndex = 5
+ ShortCut = 16473
+ OnClick = mnuRedoClick
+ end
+ object N16: TMenuItem
+ Caption = '-'
+ end
+ object mnuPopResetLocation: TMenuItem
+ Caption = 'Reset Location'
+ ImageIndex = 12
+ ShortCut = 123
+ OnClick = mnuResetLocationClick
+ end
+ object N6: TMenuItem
+ Caption = '-'
+ end
+ object mnuPopFullscreen: TMenuItem
+ Caption = 'Fullscreen View'
+ Hint = 'Show the flame in fullscreen mode'
+ ImageIndex = 52
+ ShortCut = 114
+ OnClick = mnuFullScreenClick
+ end
+ object N23: TMenuItem
+ Caption = '-'
+ end
+ object mnuScreenShot: TMenuItem
+ Caption = 'Make a screenshot of the window'
+ ImageIndex = 16
+ OnClick = mnuScreenShotClick
+ end
+ object mnuExportBitmap: TMenuItem
+ Caption = 'Save preview image'
+ OnClick = mnuExportBitmapClick
+ end
+ end
+ object RedrawTimer: TTimer
+ Enabled = False
+ Interval = 50
+ OnTimer = RedrawTimerTimer
+ Left = 24
+ Top = 336
+ end
+ object SaveDialog: TSaveDialog
+ DefaultExt = 'bmp'
+ Filter = 'Bitmap Files|*.bmp'
+ Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
+ Left = 104
+ Top = 400
+ end
+ object ApplicationEvents: TApplicationEvents
+ OnActivate = ApplicationEventsActivate
+ Left = 104
+ Top = 456
+ end
+ object UsedThumbnails: TImageList
+ Height = 128
+ Masked = False
+ Width = 128
+ Left = 24
+ Top = 280
+ end
+ object ColorDialog: TColorDialog
+ Options = [cdFullOpen]
+ Left = 24
+ Top = 400
+ end
+ object AutoSaveTimer: TTimer
+ Enabled = False
+ OnTimer = AutoSaveTimerTimer
+ Left = 104
+ Top = 334
+ end
+end
diff --git a/Forms/Main.pas b/Forms/Main.pas
new file mode 100644
index 0000000..e425288
--- /dev/null
+++ b/Forms/Main.pas
@@ -0,0 +1,8306 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+//{$D-,L-,O+,Q-,R-,Y-,S-}
+
+unit Main;
+
+//{$define VAR_STR}
+
+interface
+
+uses
+ Windows, Forms, Dialogs, Menus, Controls, ComCtrls,
+ ToolWin, StdCtrls, Classes, Messages, ExtCtrls, ImgList,
+ Jpeg, SyncObjs, SysUtils, Graphics, Math,
+ ExtDlgs, AppEvnts, ShellAPI, Registry, Curves,
+ Global, Xform, XFormMan, ControlPoint, CMap,
+ RenderThread, RenderingCommon, RenderingInterface,
+ LibXmlParser, LibXmlComps, Vcl.Imaging.PngImage, XPMan,
+ StrUtils, LoadTracker, CheckLst,
+ CommandLine, RegularExpressionsCore, Translation,
+ RegexHelper, System.ImageList, Vcl.Themes, Vcl.Styles; // AV
+
+const
+ PixelCountMax = 32768;
+ RS_A1 = 0;
+ RS_DR = 1;
+ RS_XO = 2;
+ RS_VO = 3;
+
+ {$ifndef Apo7X64}
+ randFilename = 'ApophysisAV.rand';
+ undoFilename = 'ApophysisAV.undo';
+ {$else}
+ randFilename = 'ApophysisAV_64.rand'; // AV
+ undoFilename = 'ApophysisAV_64.undo'; // AV
+ {$endif}
+ templateFilename = 'ApophysisAV.temp';
+ templatePath = '\templates';
+ scriptPath = '\scripts';
+
+type
+ TMouseMoveState = (msUsual, msZoomWindow, msZoomOutWindow, msZoomWindowMove,
+ msZoomOutWindowMove, msDrag, msDragMove, msRotate, msRotateMove, msPitchYaw, msHeight);
+
+type
+ TWin32Version = (wvUnknown, wvWin95, wvWin98, wvWinNT, wvWin2000, wvWinXP,
+ wvWinVista, wvWin7, wvWinFutureFromOuterSpace);
+
+type
+ TThumbnailThread = class(TThread)
+ private
+ FCount: integer;
+ class var
+ FPreviewDensity: double; // AV
+ FThumbnailSize : integer; // AV: added F to avoid of name conflicts
+ public
+ constructor Create;
+ procedure Execute; override;
+ destructor Destroy; override;
+ end;
+
+type
+ pRGBTripleArray = ^TRGBTripleArray;
+ TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple;
+
+ TMainForm = class(TForm)
+ Buttons: TImageList;
+ MainMenu: TMainMenu;
+ MainFile: TMenuItem;
+ mnuSaveUPR: TMenuItem;
+ N1: TMenuItem;
+ mnuRandomBatch: TMenuItem;
+ FileExitSep: TMenuItem;
+ mnuExit: TMenuItem;
+ MainEdit: TMenuItem;
+ mnuCopyUPR: TMenuItem;
+ mnuEditor: TMenuItem;
+ mnuRandom: TMenuItem;
+ mnuNormalWeights: TMenuItem;
+ mnuEqualize: TMenuItem;
+ mnuRWeights: TMenuItem;
+ mnuOptions: TMenuItem;
+ MainHelp: TMenuItem;
+ mnuHelpTopics: TMenuItem;
+ OpenDialog: TOpenDialog;
+ ListPopUp: TPopupMenu;
+ mnuItemDelete: TMenuItem;
+ mnuListRename: TMenuItem;
+ DisplayPopup: TPopupMenu;
+ mnuPopFullscreen: TMenuItem;
+ RedrawTimer: TTimer;
+ mnuVar: TMenuItem;
+ mnuVRandom: TMenuItem;
+ N3: TMenuItem;
+ mnuOpen: TMenuItem;
+ mnuSaveAs: TMenuItem;
+ N8: TMenuItem;
+ mnuGrad: TMenuItem;
+ mnuSmoothGradient: TMenuItem;
+ mnuView: TMenuItem;
+ mnuToolbar: TMenuItem;
+ mnuStatusBar: TMenuItem;
+ BackPanel: TPanel;
+ mnuFileContents: TMenuItem;
+ mnuUndo: TMenuItem;
+ mnuRedo: TMenuItem;
+ N5: TMenuItem;
+ SaveDialog: TSaveDialog;
+ MainFlame: TMenuItem;
+ N11: TMenuItem;
+ mnuAbout: TMenuItem;
+ mnuFullScreen: TMenuItem;
+ mnuRender: TMenuItem;
+ mnuMutate: TMenuItem;
+ mnuAdjust: TMenuItem;
+ mnuOpenGradient: TMenuItem;
+ mnuResetLocation: TMenuItem;
+ N4: TMenuItem;
+ N14: TMenuItem;
+ mnuSaveUndo: TMenuItem;
+ N2: TMenuItem;
+ mnuPopResetLocation: TMenuItem;
+ N6: TMenuItem;
+ mnuPopUndo: TMenuItem;
+ N16: TMenuItem;
+ mnuPopRedo: TMenuItem;
+ mnuCalculateColors: TMenuItem;
+ mnuRandomizeColorValues: TMenuItem;
+ N18: TMenuItem;
+ N19: TMenuItem;
+ mnuScript: TMenuItem;
+ mnuRun: TMenuItem;
+ mnuEditScript: TMenuItem;
+ N15: TMenuItem;
+ mnuStop: TMenuItem;
+ mnuOpenScript: TMenuItem;
+ mnuImportGimp: TMenuItem;
+ N9: TMenuItem;
+ N10: TMenuItem;
+ mnuManageFavorites: TMenuItem;
+ mnuImageSize: TMenuItem;
+ N13: TMenuItem;
+ ApplicationEvents: TApplicationEvents;
+ mnuPaste: TMenuItem;
+ mnuCopy: TMenuItem;
+ N20: TMenuItem;
+ mnuExportFLame: TMenuItem;
+ mnuFlamepdf: TMenuItem;
+ mnuSaveAllAs: TMenuItem;
+ View1: TMenuItem;
+ mnuRenderAll: TMenuItem;
+ mnuBuiltinVars: TMenuItem;
+ mnuPluginVars: TMenuItem;
+ UsedThumbnails: TImageList;
+ Image1: TImage;
+ Splitter: TSplitter;
+ ListBackPanel: TPanel;
+ Shape1: TShape;
+ ListView1: TListView;
+ cbMain: TCoolBar;
+ ToolBar: TToolBar;
+ btNew: TToolButton;
+ btnOpen: TToolButton;
+ btnSave: TToolButton;
+ ToolButton10: TToolButton;
+ btnRender: TToolButton;
+ tbRenderAll: TToolButton;
+ ToolButton9: TToolButton;
+ btnViewList: TToolButton;
+ btnViewIcons: TToolButton;
+ ToolButton2: TToolButton;
+ btnUndo: TToolButton;
+ btnRedo: TToolButton;
+ ToolButton1: TToolButton;
+ btnReset: TToolButton;
+ btnFullScreen: TToolButton;
+ ToolButton3: TToolButton;
+ tbQualityBox: TComboBoxEx;
+ New1: TMenuItem;
+ ColorDialog: TColorDialog;
+ mnuResetUI: TMenuItem;
+ ToolButton4: TToolButton;
+ tbEditor: TToolButton;
+ tbAdjust: TToolButton;
+ tbPalette: TToolButton;
+ tbMutate: TToolButton;
+ tbImageSize: TToolButton;
+ tbMessages: TToolButton;
+ tbOptions: TToolButton;
+ ToolButton15: TToolButton;
+ tbShowAlpha: TToolButton;
+ ToolButton16: TToolButton;
+ tbEditScript: TToolButton;
+ btnRunScript: TToolButton;
+ btnStopScript: TToolButton;
+ ToolButton18: TToolButton;
+ tbDrag: TToolButton;
+ tbRotate: TToolButton;
+ tbZoomIn: TToolButton;
+ tbZoomOut: TToolButton;
+ AutoSaveTimer: TTimer;
+ Restorelastautosave1: TMenuItem;
+ tbGuides: TToolButton;
+ mnuTurnFlameToScript: TMenuItem;
+ N12: TMenuItem;
+ mnuReportFlame: TMenuItem;
+ mnuMessages: TMenuItem;
+ BottomDock: TPanel;
+ StatusBar: TStatusBar;
+ Image: TImage;
+ pnlLSPFrame: TPanel;
+ LoadSaveProgress: TProgressBar;
+ mnuExportChaotica: TMenuItem;
+ mnuResumeRender: TMenuItem;
+ mnuManual: TMenuItem;
+ tbCurves: TToolButton;
+ mnuCurves: TMenuItem;
+ N17: TMenuItem;
+ mnuTrace: TMenuItem;
+ CalculateWeights: TMenuItem;
+ FavouriteScripts1: TMenuItem;
+ Directory1: TMenuItem;
+ Randomizecolorspeed1: TMenuItem;
+ Calculatecolorspeed1: TMenuItem;
+ Changecolordistribution1: TMenuItem;
+ Changeweightdistribution1: TMenuItem;
+ ResetColorSpeed: TMenuItem;
+ mnuApoStyle: TMenuItem; // AV
+ N7: TMenuItem;
+ N22: TMenuItem;
+ AddSymmetry: TMenuItem;
+ BilateralSym: TMenuItem;
+ RotationalSym: TMenuItem;
+ DihedralSym: TMenuItem;
+ rot2: TMenuItem;
+ rot3: TMenuItem;
+ rot4: TMenuItem;
+ rot5: TMenuItem;
+ rot6: TMenuItem;
+ rot8: TMenuItem;
+ dih2: TMenuItem;
+ dih3: TMenuItem;
+ dih4: TMenuItem;
+ dih5: TMenuItem;
+ dih6: TMenuItem;
+ dih8: TMenuItem;
+ AddTile: TMenuItem; // AV
+ Square1: TMenuItem;
+ Rhombic1: TMenuItem;
+ Hexagonal1: TMenuItem;
+ ImportFromPNG: TMenuItem;
+ ToolButton23: TToolButton;
+ mnuScreenShot: TMenuItem;
+ N23: TMenuItem;
+ rot7: TMenuItem;
+ dih7: TMenuItem;
+ AddTemplate: TMenuItem;
+ N21: TMenuItem;
+ ResetColorValues: TMenuItem;
+ mnuExportBitmap: TMenuItem;
+ N24: TMenuItem;
+ mnuUnflatten: TMenuItem; // AV
+ mnuFlatten: TMenuItem;
+ N25: TMenuItem;
+ SortFlames: TMenuItem;
+ N26: TMenuItem;
+ mnuLowQuality: TMenuItem;
+ mnuMediumQuality: TMenuItem;
+ mnuHighQuality: TMenuItem;
+ mnuRefreshThumb: TMenuItem;
+ EnumerateFlames: TMenuItem;
+ DownloadPlugins: TMenuItem;
+ N27: TMenuItem;
+ mnuRefreshAllThumbs: TMenuItem; // AV
+ procedure mnuManualClick(Sender: TObject);
+ procedure mnuReportFlameClick(Sender: TObject);
+ procedure mnuTurnFlameToScriptClick(Sender: TObject);
+ procedure tbzoomoutwindowClick(Sender: TObject);
+ procedure mnuExitClick(Sender: TObject);
+ procedure mnuSaveUPRClick(Sender: TObject);
+ procedure ListViewChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+ procedure FormCreate(Sender: TObject);
+ procedure mnuRandomClick(Sender: TObject);
+ procedure mnuEqualizeClick(Sender: TObject);
+ procedure mnuEditorClick(Sender: TObject);
+ procedure mnuRWeightsClick(Sender: TObject);
+ procedure mnuRandomBatchClick(Sender: TObject);
+ procedure FormKeyPress(Sender: TObject; var Key: Char);
+ procedure FormKeyUpDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+ procedure mnuOptionsClick(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure mnuHelpTopicsClick(Sender: TObject);
+ procedure mnuRefreshClick(Sender: TObject);
+ procedure mnuNormalWeightsClick(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure mnuCopyUPRClick(Sender: TObject);
+ procedure mnuItemDeleteClick(Sender: TObject);
+ procedure ListViewEdited(Sender: TObject; Item: TListItem;
+ var S: string);
+ procedure mnuListRenameClick(Sender: TObject);
+ procedure BackPanelResize(Sender: TObject);
+ procedure mnuNextClick(Sender: TObject);
+ procedure mnuPreviousClick(Sender: TObject);
+ procedure RedrawTimerTimer(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure ShowStyledWindows(Sender: TObject);
+ procedure MainMenuClick(Sender: TObject);
+ procedure mnuVRandomClick(Sender: TObject);
+ procedure mnuSaveAsClick(Sender: TObject);
+ procedure mnuOpenClick(Sender: TObject);
+ procedure mnuGradClick(Sender: TObject);
+ procedure mnuSmoothGradientClick(Sender: TObject);
+ procedure mnuToolbarClick(Sender: TObject);
+ procedure mnuStatusBarClick(Sender: TObject);
+ procedure mnuFileContentsClick(Sender: TObject);
+ procedure mnuUndoClick(Sender: TObject);
+ procedure mnuRedoClick(Sender: TObject);
+ procedure Undo;
+ procedure Redo;
+ procedure mnuSaveUndoClick(Sender: TObject); // AV: restored and works
+ procedure mnuExportBitmapClick(Sender: TObject); // AV: to fast save params in PNG
+ procedure mnuFullScreenClick(Sender: TObject);
+ procedure mnuRenderClick(Sender: TObject);
+ procedure mnuMutateClick(Sender: TObject);
+ procedure mnuAdjustClick(Sender: TObject);
+ procedure mnuResetLocationClick(Sender: TObject);
+ procedure mnuAboutClick(Sender: TObject);
+ procedure mnuOpenGradientClick(Sender: TObject);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure FormActivate(Sender: TObject);
+ procedure FormDeactivate(Sender: TObject);
+ procedure mnuCalculateColorsClick(Sender: TObject);
+ procedure mnuRandomizeColorValuesClick(Sender: TObject);
+ procedure mnuEditScriptClick(Sender: TObject);
+ procedure mnuRunClick(Sender: TObject);
+ procedure mnuOpenScriptClick(Sender: TObject);
+ procedure mnuStopClick(Sender: TObject);
+ // procedure mnuImportGimpClick(Sender: TObject); // AV: rudiment from Apo 2.02
+ procedure mnuManageFavoritesClick(Sender: TObject);
+ procedure mnuShowFullClick(Sender: TObject);
+ procedure mnuImageSizeClick(Sender: TObject);
+ procedure ApplicationEventsActivate(Sender: TObject);
+ procedure mnuPasteClick(Sender: TObject);
+ procedure mnuCopyClick(Sender: TObject);
+ procedure mnuExportFlameClick(Sender: TObject);
+ procedure mnuExportChaoticaClick(Sender: TObject);
+
+ procedure ListXmlScannerStartTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+ procedure XMLScannerStartTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+ procedure XMLScannerEmptyTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+ procedure mnuFlamepdfClick(Sender: TObject);
+ procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure ImageMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure tbzoomwindowClick(Sender: TObject);
+ procedure tbDragClick(Sender: TObject);
+ procedure tbRotateClick(Sender: TObject);
+ procedure mnuSaveAllAsClick(Sender: TObject);
+ procedure tbQualityBoxKeyPress(Sender: TObject; var Key: Char);
+ procedure tbQualityBoxSet(Sender: TObject);
+ procedure ImageDblClick(Sender: TObject);
+ procedure tbShowAlphaClick(Sender: TObject);
+ procedure tbShowTraceClick(Sender: TObject);
+ procedure XmlScannerContent(Sender: TObject; Content: String);
+ procedure mnuRenderAllClick(Sender: TObject);
+{ procedure ListViewChanging(Sender: TObject; Item: TListItem;
+ Change: TItemChange; var AllowChange: Boolean); }
+ procedure btnViewIconsClick(Sender: TObject);
+ procedure btnViewListClick(Sender: TObject);
+ procedure XmlScannerEndTag(Sender: TObject; TagName: String);
+ procedure tbMessagesClick(Sender: TObject);
+ procedure btNewClick(Sender: TObject);
+ procedure FormResize(Sender: TObject);
+ procedure mnuResetUIClick(Sender: TObject);
+ procedure AutoSaveTimerTimer(Sender: TObject);
+ procedure Restorelastautosave1Click(Sender: TObject);
+ procedure tbGuidesClick(Sender: TObject);
+ procedure tbCurvesClick(Sender: TObject);
+ procedure mnuTraceClick(Sender: TObject);
+ procedure CalculateWeightsClick(Sender: TObject);
+ procedure Randomizecolorspeed1Click(Sender: TObject);
+ procedure Calculatecolorspeed1Click(Sender: TObject);
+ procedure ResetColorSpeedClick(Sender: TObject);
+ procedure AddSymmetryClick(Sender: TObject); //AV
+ procedure AddTileClick(Sender: TObject); // AV
+ procedure ImportFromPNGClick(Sender: TObject); // AV
+ procedure mnuScreenShotClick(Sender: TObject); // AV
+ procedure ExtSysMenu(var Msg: TMessage); message WM_SysCommand; // AV
+ procedure AddTemplateClick(Sender: TObject);
+ procedure ResetColorValuesClick(Sender: TObject);
+ procedure mnuUnflattenClick(Sender: TObject);
+ procedure mnuFlattenClick(Sender: TObject);
+ procedure SortFlamesClick(Sender: TObject);
+ procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
+ procedure mnuThumbnailQualityClick(Sender: TObject);
+ procedure ListPopUpPopup(Sender: TObject);
+ procedure mnuRefreshThumbClick(Sender: TObject);
+ procedure EnumerateFlamesClick(Sender: TObject);
+ procedure ListViewDblClick(Sender: TObject);
+ procedure DownloadPluginsClick(Sender: TObject);
+ private
+ SubstSource: TStringList;
+ SubstTarget: TStringList;
+
+ Renderer: TRenderThread;
+
+ FMouseMoveState: TMouseMoveState;
+ FSelectRect, FClickRect: TRect;
+ DrawSelection: boolean;
+ FRotateAngle: double;
+ FClickAngle: double;
+ FViewImage: TPngObject;
+ FViewPos, FViewOldPos: TSPoint;
+ FViewScale: double;
+ // FClickPitch, FNewPitch: double;
+ // FClickYaw, FNewYaw: double;
+ FShiftState: TShiftState;
+
+ // For parsing:
+ FinalXformLoaded: boolean;
+ ActiveXformSet: integer;
+ XMLPaletteFormat: string;
+ XMLPaletteCount: integer;
+
+ camDragMode, camDragged, camMM: boolean;
+ camDragPos, camDragOld: TPoint;
+ camDragValueX, camDragValueY: double;
+
+ oldApo: boolean; // AV: to check relict variations
+ defKB: HKL; // AV: for non-English users :)
+
+ procedure CreateSubstMap;
+ procedure InsertStrings;
+ procedure DrawImageView;
+ procedure DrawZoomWindow;
+ procedure DrawRotatelines(Angle: double);
+ // procedure DrawPitchYawLines(YawAngle: double; PitchAngle:double);
+
+ procedure FillVariantMenu;
+ procedure VariantMenuClick(Sender: TObject);
+
+ procedure FavoriteClick(Sender: TObject);
+ procedure ScriptItemClick(Sender: TObject);
+
+ // AV: for Apo GUI themes
+ procedure CreateStyleList;
+ procedure StyleItemClick(Sender: TObject);
+
+ procedure HandleThreadCompletion(var Message: TMessage);
+ message WM_THREAD_COMPLETE;
+ procedure HandleThreadTermination(var Message: TMessage);
+ message WM_THREAD_TERMINATE;
+
+ public
+ { Public declarations }
+ UndoIndex, UndoMax: integer;
+ Center: array[0..1] of double;
+ //MainZoom: double;
+ StartTime: TDateTime;
+ CurrentFileName: string;
+ ParseLoadingBatch : boolean;
+ SurpressHandleMissingPlugins : boolean;
+
+ VarMenus: array of TMenuItem;
+
+ ListXmlScanner : TEasyXmlScanner;
+ XmlScanner : TXmlScanner;
+
+ function ReadWithSubst(Attributes: TAttrList; attrname: string): string;
+ procedure InvokeLoadXML(xmltext:string);
+ // AV: added 3-rd parameter to be able to discard multiple updates
+ procedure LoadXMLFlame(filename, name: string; upd: boolean = true);
+ procedure DisableFavorites;
+ procedure EnableFavorites;
+ procedure ParseXML(var cp1: TControlPoint; const params: string; const ignoreErrors : boolean);
+ function SaveFlame(cp1: TControlPoint; title, filename: string): boolean;
+ function SaveXMLFlame(const cp1: TControlPoint; title, filename: string): boolean;
+ procedure DisplayHint(Sender: TObject);
+ procedure OnProgress(prog: double);
+ procedure ResizeImage;
+ procedure DrawPreview;
+ procedure DrawFlame;
+ procedure UpdateUndo;
+ procedure LoadUndoFlame(index: integer; filename: string);
+ procedure SmoothPalette;
+ procedure Smoothize(const oldpal: TColorMap; const a, b: byte);
+ procedure RandomizeCP(var cp1: TControlPoint; alg: integer = 0);
+ function UPRString(cp1: TControlPoint; Entry: string): string;
+ function SaveGradient(Gradient, Title, FileName: string): boolean;
+ function GradientFromPalette(const pal: TColorMap; const title: string): string;
+ procedure StopThread;
+ procedure UpdateWindows;
+ procedure ResetLocation;
+ procedure RandomBatch;
+ procedure GetScripts;
+ function ApplicationOnHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;
+ function SystemErrorMessage: string;
+ function SystemErrorMessage2(errno: cardinal): string;
+ function RetrieveXML(cp : TControlPoint):string;
+ procedure ApplyThemedColors;
+
+ // AV: for reading / writing embedded parameters
+ procedure PasteFlameXML(flameXML: string);
+ procedure ImportThumbnailPNG(Filename: string);
+ function LoadXMLFlameTextPNG(FileName: string): string;
+
+ // AV: for updating the list with flame previews
+ procedure SetThumbnailProperties;
+ procedure RefreshThumbnail;
+ procedure UpdateThumbnails;
+ end;
+
+procedure ListXML(FileName: string; sel: integer; selname: string = ''); // AV
+function EntryExists(En, Fl: string): boolean;
+function XMLEntryExists(title, filename: string): boolean;
+function DeleteEntry(Entry, FileName: string): boolean;
+function CleanIdentifier(ident: string): string;
+function CleanUPRTitle(ident: string): string;
+function GradientString(c: TColorMap): string;
+procedure ListFlames(FileName: string; sel: integer); // AV: outdated, for affine coefs only
+procedure ListIFS(FileName: string; sel: integer); // AV: for loading Undo flame files
+procedure NormalizeVariations(var cp1: TControlPoint);
+function GetWinVersion: TWin32Version;
+function LoadXMLFlameText(filename, name: string) : string;
+function FindFlameXML(const FlameStr: string; const Title: string) : Integer; // AV
+
+function FlameInClipboard: boolean; // AV
+function RemoveExt(filename: string): string; // AV
+
+// AV: for making window screenshots
+procedure GetFormScreenShot(const AFileName: string);
+procedure SaveScreenShot(const AFormName: string);
+
+var
+ MainForm: TMainForm;
+ pname, ptime: String;
+ //pversion: string;
+ nxform: integer;
+ TbBreakWidth: integer;
+
+ MainCp: TControlPoint;
+ ParseCp: TControlPoint;
+ MemCp: TControlPoint;
+ CurrentFlame, FlameString: string;
+ ThumbnailSize: integer;
+ AboutToExit: boolean;
+ GeneratingThumbs: boolean; // AV
+
+ ApophysisSVN: string; //APP_VERSION;
+ AppVersionString: string; //APP_NAME+'.'+ APP_VERSION;
+
+implementation
+
+uses
+ ClipBrd, Editor, Options, Settings, Template, MissingPlugin, Base64, Chaotica,
+ FullScreen, FormRender, Mutate, Adjust, Browser, Save, About, CmapData,
+ ScriptForm, FormFavorites, FormExport, RndFlame, Tracer, Types, SplashForm;
+
+{$R *.DFM}
+
+procedure AssignBitmapProperly(var Bitmap:TBitmap; Source:TBitmap);
+begin
+ Bitmap.Dormant;
+ Bitmap.FreeImage;
+ Bitmap.Width := 0;
+ Bitmap.Assign(Source);
+end;
+
+procedure FreeBitmapProperly(var Bitmap:TBitmap);
+begin
+ try
+ Bitmap.Dormant;
+ Bitmap.FreeImage;
+ finally
+ Bitmap.Free;
+ end;
+end;
+
+{//////////////// Screenshot utils ////////////////////////}
+
+procedure GetFormScreenShot(const AFileName: string); // AV
+var
+ ScreenShot: TBitmap;
+ WindowRect: TRect;
+begin
+ ScreenShot := TBitmap.Create;
+ try
+ ScreenShot.PixelFormat := pf32bit;
+ try
+ WindowRect := Screen.ActiveForm.BoundsRect;
+ ScreenShot.Width := WindowRect.Width;
+ ScreenShot.Height := WindowRect.Height;
+ BitBlt(ScreenShot.Canvas.Handle, 0, 0, WindowRect.Width, WindowRect.Height,
+ GetWindowDC(Screen.ActiveForm.Handle), 0, 0, SRCCOPY);
+ except
+ ScreenShot := nil;
+ end;
+ if ScreenShot <> nil then
+ ScreenShot.SaveToFile(AFileName);
+ finally
+ ScreenShot.Free;
+ end;
+end;
+
+procedure SaveScreenShot(const AFormName: string); // AV
+var
+ s: string;
+begin
+ if not DirectoryExists(ScreenShotPath) then
+ begin
+ CreateDir(AppPath + 'ScreenShots\');
+ ScreenShotPath := AppPath + 'ScreenShots\';
+ end;
+ s := ScreenShotPath + AFormName + FormatDateTime(' (MM-dd-yyyy hh-mm-ss)', Now) + '.bmp';
+ try
+ GetFormScreenShot(s);
+ Application.MessageBox(PChar(Format(TextByKey('common-screenshot-saved'),
+ [ExtractFileName(s), ExtractFilePath(s)])), PChar('Apophysis AV'), MB_ICONINFORMATION);
+ except
+ Application.MessageBox(PChar(TextByKey('common-screenshot-error')), PChar('Apophysis AV'), MB_ICONERROR);
+ end;
+end;
+
+{//////////////////////////////////////////////////////////////////////////////}
+
+procedure NormalizeVariations(var cp1: TControlPoint);
+var
+ totvar, v: double;
+ i, j: integer;
+begin
+ for i := 0 to NXFORMS - 1 do
+ begin
+ totvar := 0;
+ for j := 0 to NRVAR - 1 do
+ begin
+ v := cp1.xform[i].GetVariation(j); // AV
+ if v < 0 then
+ cp1.xform[i].SetVariation(j, -v);
+ totvar := totvar + v;
+ end;
+ if totVar = 0 then
+ begin
+ cp1.xform[i].SetVariation(0, 1)
+ end
+ else
+ for j := 0 to NRVAR - 1 do begin
+ if totVar <> 0 then
+ cp1.xform[i].SetVariation(j, cp1.xform[i].GetVariation(j) / totvar);
+ end;
+ end;
+end;
+
+function FlameInClipboard: boolean;
+var
+ flamestr: string;
+ isstart, isend: integer;
+begin
+ { returns true if a flame in clipboard - can be tricked }
+ result := false;
+ if Clipboard.HasFormat(CF_TEXT) then
+ begin
+ flamestr := Clipboard.AsText;
+ isstart := Pos('', flamestr);
+ if (isstart > 0) and (isend > 0) and (isstart < isend) then
+ Result := true;
+ end;
+end;
+
+function GetWinVersion: TWin32Version;
+{ Returns current version of a host Win32 platform }
+begin
+ Result := wvUnknown;
+ if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
+ if (Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and (Win32MinorVersion > 0)) then
+ Result := wvWin98
+ else
+ Result := wvWin95
+ else
+ if Win32MajorVersion <= 4 then
+ Result := wvWinNT
+ else if Win32MajorVersion = 5 then
+ begin // AV
+ if Win32MinorVersion = 0 then
+ Result := wvWin2000
+ else if Win32MinorVersion >= 1 then
+ Result := wvWinXP
+ end
+ else if Win32MajorVersion = 6 then
+ begin // AV
+ if Win32MinorVersion = 0 then
+ Result := wvWinVista
+ else if Win32MinorVersion >= 1 then
+ Result := wvWin7
+ end
+ else if Win32MajorVersion >= 7 then
+ Result := wvWinFutureFromOuterSpace;
+end;
+
+{ ************************************* Help ********************************* }
+
+procedure ShowHelp(Pt: TPoint; ContextId: Integer);
+//var
+ //Popup: THHPopup;
+begin
+ (* -X- context help not longer supported
+ FillChar(Popup, SizeOf(Popup), 0);
+ Popup.cbStruct := SizeOf(Popup);
+ Popup.hinst := 0;
+ Popup.idString := ContextId;
+ Popup.pszText := nil;
+ GetCursorPos(Pt);
+ Popup.pt := Pt;
+ Popup.clrForeGround := TColorRef(-1);
+ Popup.clrBackground := TColorRef(-1);
+ Popup.rcMargins := Rect(-1, -1, -1, -1);
+ Popup.pszFont := '';
+ HtmlHelp(0, PChar(AppPath + 'Apophysis7x.chm::/Popups.txt'), HH_DISPLAY_TEXT_POPUP, DWORD(@Popup));
+ *)
+end;
+
+procedure TMainForm.ExtSysMenu(var Msg: TMessage);
+begin
+ if Msg.WParam = $C0 then mnuScreenShot.Click;
+ inherited;
+end;
+
+(*
+procedure TMainForm.RebuildListView;
+var
+ i: integer;
+ item: TListItem;
+begin
+ ListView.Items.Clear;
+
+ /// backup in old lv
+ for i := 0 to ListView1.Items.Count-1 do begin
+ item := ListView.Items.Add;
+ item.Caption := ListView1.Items[i].Caption;
+ end;
+
+ // rebuild new lv
+ ListView1.Items.Clear;
+
+ for i := 0 to ListView.Items.Count-1 do begin
+ item := ListView1.Items.Add;
+ item.Caption := ListView.Items[i].Caption;
+ if (not ClassicListMode) then item.ImageIndex := i;
+ end;
+
+ ListView.Items.Clear;
+end;
+*)
+
+procedure TMainForm.InsertStrings;
+begin
+ mnuCopy.Caption := TextByKey('common-copy');
+ mnuPaste.Caption := TextByKey('common-paste');
+ mnuCopy.Hint := TextByKey('main-menu-edit-copy');
+ mnuPaste.Hint := TextByKey('main-menu-edit-paste');
+ mnuItemDelete.Caption := TextByKey('common-delete');
+ mnuListRename.Caption := TextByKey('common-rename');
+ mnuItemDelete.Hint := TextByKey('main-menu-deletehint'); // AV
+ mnuListRename.Hint := TextByKey('main-menu-renamehint'); // AV
+ mnuRefreshThumb.Caption := TextByKey('main-menu-updatethumb');
+ mnuRefreshAllThumbs.Caption := TextByKey('main-menu-updateallthumbs');
+ mnuLowQuality.Caption := TextByKey('common-lowquality'); // AV
+ mnuMediumQuality.Caption := TextByKey('common-mediumquality'); // AV
+ mnuHighQuality.Caption := TextByKey('common-highquality'); // AV
+ mnuUndo.Caption := TextByKey('common-undo');
+ mnuPopUndo.Caption := TextByKey('common-undo');
+ btnUndo.Hint := TextByKey('main-toolbar-undo');
+ mnuUndo.Hint := TextByKey('main-toolbar-undo');
+ mnuRedo.Caption := TextByKey('common-redo');
+ mnuPopRedo.Caption := TextByKey('common-redo');
+ btnRedo.Hint := TextByKey('main-toolbar-redo');
+ mnuRedo.Hint := TextByKey('main-toolbar-redo');
+ MainFile.Caption := TextByKey('main-menu-file-title');
+ New1.Caption := TextByKey('main-menu-file-new');
+ New1.Hint := TextByKey('main-toolbar-new');
+ mnuTrace.Caption := TextByKey('main-menu-options-tracelog');
+ btNew.Hint := TextByKey('main-toolbar-new');
+ mnuOpen.Caption := TextByKey('main-menu-file-open');
+ btnOpen.Hint := TextByKey('main-toolbar-open');
+ mnuOpen.Hint := TextByKey('main-toolbar-open');
+ ImportFromPNG.Caption := TextByKey('main-menu-file-loadpng');
+ ImportFromPNG.Hint := TextByKey('main-menu-file-loadpnghint');
+ mnuScreenShot.Caption := TextByKey('main-menu-screenshot');
+ RestoreLastAutosave1.Caption := TextByKey('main-menu-file-restoreautosave');
+ RestoreLastAutosave1.Hint := TextByKey('main-menu-file-autosavehint');
+ mnuSaveAs.Caption := TextByKey('main-menu-file-saveparams');
+ mnuSaveAs.Hint := TextByKey('main-toolbar-saveparams');
+ btnSave.Hint := TextByKey('main-toolbar-saveparams');
+ mnuSaveAllAs.Caption := TextByKey('main-menu-file-saveallparams');
+ mnuSaveAllAs.Hint := TextByKey('main-menu-file-saveallhint');
+ mnuSmoothGradient.Caption := TextByKey('main-menu-file-smoothpalette');
+ mnuSmoothGradient.Hint := TextByKey('main-menu-file-smoothpalettehint');
+ mnuOpenGradient.Caption := TextByKey('main-menu-file-gradientbrowser');
+ mnuOpenGradient.Hint := TextByKey('main-menu-file-gradientbrowserhint');
+ mnuSaveUPR.Caption := TextByKey('main-menu-file-exportupr');
+ mnuExportFlame.Caption := TextByKey('main-menu-file-exportflame');
+ mnuExportChaotica.Caption := TextByKey('main-menu-file-exportchaotica');
+ // mnuImportGimp.Caption := TextByKey('main-menu-file-importgimp');
+ // mnuImportGimp.Hint := TextByKey('main-menu-file-importgimphint');
+ mnuRandomBatch.Caption := TextByKey('main-menu-file-randombatch');
+ mnuExit.Caption := TextByKey('main-menu-file-exit');
+ mnuExit.Hint := TextByKey('main-menu-file-exithint');
+ mnuSaveUPR.Hint := TextByKey('main-menu-file-exportuprhint');
+ mnuExportFlame.Hint := TextByKey('main-menu-file-exportflamehint');
+ mnuExportChaotica.Hint := TextByKey('main-menu-file-exportchaoticahint');
+ mnuExportBitmap.Caption := TextByKey('main-menu-saveimage'); // AV
+ mnuRandomBatch.Hint := TextByKey('main-menu-file-randombatchhint');
+ MainEdit.Caption := TextByKey('main-menu-edit-title');
+ mnuSaveUndo.Caption := TextByKey('main-menu-edit-saveundo');
+ mnuCopyUPR.Caption := TextByKey('main-menu-edit-copyasupr');
+ mnuCopyUPR.Hint := TextByKey('main-menu-edit-copyuprhint');
+ View1.Caption := TextByKey('main-menu-view-title');
+ mnuFullScreen.Caption := TextByKey('main-menu-view-fullscreen');
+ mnuPopFullscreen.Caption := TextByKey('main-menu-view-fullscreen');
+ btnFullScreen.Hint := TextByKey('main-toolbar-fullscreen');
+ mnuFullScreen.Hint := TextByKey('main-toolbar-fullscreen');
+ mnuEditor.Caption := TextByKey('main-menu-view-editor');
+ mnuEditor.Hint := TextByKey('main-toolbar-editor');
+ tbEditor.Hint := TextByKey('main-toolbar-editor');
+ mnuAdjust.Caption := TextByKey('main-menu-view-adjustment');
+ mnuAdjust.Hint := TextByKey('main-toolbar-adjustment');
+ tbAdjust.Hint := TextByKey('main-toolbar-adjustment');
+ mnuGrad.Caption := TextByKey('main-menu-view-gradient');
+ mnuGrad.Hint := TextByKey('main-toolbar-gradient');
+ tbPalette.Hint := TextByKey('main-toolbar-gradient');
+ mnuMutate.Hint := TextByKey('main-toolbar-mutation');
+ mnuMutate.Caption := TextByKey('main-menu-view-mutation');
+ tbMutate.Hint := TextByKey('main-toolbar-mutation');
+ mnuImageSize.Caption := TextByKey('main-menu-view-imagesize');
+ mnuImageSize.Hint := TextByKey('main-toolbar-imagesize');
+ tbImageSize.Hint := TextByKey('main-toolbar-imagesize');
+ mnuMessages.Caption := TextByKey('main-menu-view-messages');
+ mnuMessages.Hint := TextByKey('main-toolbar-messages');
+ tbMessages.Hint := TextByKey('main-toolbar-messages');
+ tbCurves.Hint := TextByKey('main-toolbar-curves');
+ mnuCurves.Hint := TextByKey('main-toolbar-curves');
+ mnuCurves.Caption := TextByKey('main-menu-view-curves');
+ MainFlame.Caption := TextByKey('main-menu-flame-title');
+ mnuResetLocation.Caption := TextByKey('main-menu-flame-reset');
+ mnuPopResetLocation.Caption := TextByKey('main-menu-flame-reset');
+ mnuResetLocation.Hint := TextByKey('main-toolbar-reset');
+ btnReset.Hint := TextByKey('main-toolbar-reset');
+ mnuRandom.Caption := TextByKey('main-menu-flame-randomize');
+ mnuRandom.Hint := TextByKey('main-menu-flame-randomizehint');
+ mnuRWeights.Caption := TextByKey('main-menu-flame-randomweights');
+ mnuRWeights.Hint := TextByKey('main-menu-flame-randomweightshint');
+ mnuEqualize.Caption := TextByKey('main-menu-flame-equalweights');
+ mnuEqualize.Hint := TextByKey('main-menu-flame-equalweightshint');
+ CalculateWeights.Caption := TextByKey('main-menu-flame-calculateweights');
+ CalculateWeights.Hint := TextByKey('main-menu-flame-calculateweightshint');
+ mnuNormalWeights.Caption := TextByKey('main-menu-flame-normweights');
+ mnuNormalWeights.Hint := TextByKey('main-menu-flame-normweightshint');
+ mnuCalculateColors.Caption := TextByKey('main-menu-flame-calculatecolors');
+ mnuRandomizeColorValues.Caption := TextByKey('main-menu-flame-randomizecolors');
+ Calculatecolorspeed1.Caption := TextByKey('main-menu-flame-calculatecolorspeed');
+ Randomizecolorspeed1.Caption := TextByKey('main-menu-flame-randomizecolorspeed');
+ ResetColorSpeed.Caption := TextByKey('main-menu-flame-resetcolorspeed');
+ ResetColorValues.Caption := TextByKey('main-menu-flame-resetcolors');
+ ResetColorValues.Hint := TextByKey('main-menu-flame-resetcolorshint');
+ mnuCalculateColors.Hint := TextByKey('main-menu-flame-calccolorshint');
+ mnuRandomizeColorValues.Hint := TextByKey('main-menu-flame-randcolorshint');
+ Calculatecolorspeed1.Hint := TextByKey('main-menu-flame-calccolorspeedhint');
+ Randomizecolorspeed1.Hint := TextByKey('main-menu-flame-randcolorspeedhint');
+ Resetcolorspeed.Hint := TextByKey('main-menu-flame-resetcolorspeedhint');
+ mnuFlatten.Caption := TextByKey('main-menu-flame-flatten');
+ mnuFlatten.Hint := TextByKey('main-menu-flame-flattenhint');
+ mnuUnflatten.Caption := TextByKey('main-menu-flame-unflatten');
+ mnuUnflatten.Hint := TextByKey('main-menu-flame-unflattenhint');
+ mnuRender.Caption := TextByKey('main-menu-flame-rendertodisk');
+ mnuRender.Hint := TextByKey('main-toolbar-render');
+ btnRender.Hint := TextByKey('main-toolbar-render');
+ mnuRenderAll.Caption := TextByKey('main-menu-flame-renderallflames');
+ mnuRenderAll.Hint := TextByKey('main-toolbar-renderall');
+ tbRenderAll.Hint := TextByKey('main-toolbar-renderall');
+ mnuReportFlame.Caption := TextByKey('main-menu-flame-generatereport');
+ mnuReportFlame.Hint := TextByKey('main-menu-flame-reporthint');
+ AddTemplate.Caption := TextByKey('main-menu-flame-template');
+ AddTemplate.Hint := TextByKey('main-menu-flame-templatehint');
+ mnuVar.Caption := TextByKey('main-menu-variation-title');
+ mnuVRandom.Caption := TextByKey('main-menu-variation-random');
+ mnuBuiltinVars.Caption := TextByKey('main-menu-variation-builtin');
+ mnuPluginVars.Caption := TextByKey('main-menu-variation-plugins');
+ mnuVRandom.Hint := TextByKey('main-menu-variation-randomhint');
+ mnuBuiltinVars.Hint := TextByKey('main-menu-variation-builtinhint');
+ mnuPluginVars.Hint := TextByKey('main-menu-variation-pluginshint');
+ mnuScript.Caption := TextByKey('main-menu-script-title');
+ mnuRun.Caption := TextByKey('main-menu-script-run');
+ mnuRun.Hint := TextByKey('main-toolbar-runscript');
+ btnRunScript.Hint := TextByKey('main-toolbar-runscript');
+ mnuStop.Caption := TextByKey('main-menu-script-stop');
+ mnuStop.Hint := TextByKey('main-toolbar-stopscript');
+ btnStopScript.Hint := TextByKey('main-toolbar-stopscript');
+ mnuOpenScript.Caption := TextByKey('main-menu-script-open');
+ mnuOpenScript.Hint := TextByKey('main-menu-script-openhint');
+ mnuEditScript.Caption := TextByKey('main-menu-script-edit');
+ mnuEditScript.Hint := TextByKey('main-toolbar-editscript');
+ tbEditScript.Hint := TextByKey('main-toolbar-editscript');
+ mnuManageFavorites.Caption := TextByKey('main-menu-script-managefaves');
+ mnuTurnFlameToScript.Caption := TextByKey('main-menu-script-flametoscript');
+ mnuManageFavorites.Hint := TextByKey('main-menu-script-managefaveshint');
+ mnuTurnFlameToScript.Hint := TextByKey('main-menu-script-flametoscripthint');
+ FavouriteScripts1.Caption := TextByKey('favscripts-title');
+ FavouriteScripts1.Hint := TextByKey('favscripts-hint');
+ mnuView.Caption := TextByKey('main-menu-options-title');
+ Directory1.Caption := IfThen(FavouriteScripts1.Enabled,
+ TextByKey('main-menu-script-more'), TextByKey('main-menu-script-directory'));
+ Directory1.Hint := TextByKey('main-menu-script-directoryhint');
+ mnuToolbar.Caption := TextByKey('main-menu-options-togglemaintoolbar');
+ mnuStatusBar.Caption := TextByKey('main-menu-options-togglestatusbar');
+ mnuFileContents.Caption := TextByKey('main-menu-options-togglefilelist');
+ mnuResetUI.Caption := TextByKey('main-menu-options-resetfilelistwidth');
+ mnuResetUI.Hint := TextByKey('main-menu-options-resetwidthhint');
+ SortFlames.Caption := TextByKey('main-menu-options-sortflames');
+ EnumerateFlames.Caption := TextByKey('main-menu-options-enumflames');
+ mnuTrace.Hint := TextByKey('main-menu-options-traceloghint');
+ mnuOptions.Caption := TextByKey('main-menu-options-showoptions');
+ mnuOptions.Hint := TextByKey('main-toolbar-options');
+ tbOptions.Hint := TextByKey('main-toolbar-options');
+ MainHelp.Caption := TextByKey('main-menu-help-title');
+ mnuHelpTopics.Caption := TextByKey('main-menu-help-contents');
+ mnuFlamePDF.Caption := TextByKey('main-menu-help-aboutalgorithm');
+ mnuAbout.Caption := TextByKey('main-menu-help-aboutapophysis');
+ mnuHelpTopics.Hint := TextByKey('main-menu-help-contentshint');
+ mnuFlamePDF.Hint := TextByKey('main-menu-help-aboutalgorithmhint');
+ mnuAbout.Hint := TextByKey('main-menu-help-aboutapophysishint');
+ btnViewList.Hint := TextByKey('main-toolbar-listviewmode-classic');
+ btnViewIcons.Hint := TextByKey('main-toolbar-listviewmode-icons');
+ tbShowAlpha.Hint := TextByKey('main-toolbar-togglealpha');
+ tbGuides.Hint := TextByKey('main-toolbar-toggleguides');
+ tbQualityBox.Hint := TextByKey('main-toolbar-quality');
+ tbDrag.Hint := TextByKey('main-toolbar-modemove');
+ tbRotate.Hint := TextByKey('main-toolbar-moderotate');
+ tbZoomIn.Hint := TextByKey('main-toolbar-modezoomin');
+ tbZoomOut.Hint := TextByKey('main-toolbar-modezoomout');
+ ListView1.Columns[0].Caption := TextByKey('save-name');
+ mnuResumeRender.Caption := TextByKey('main-menu-flame-resumeunfinished');
+ mnuApoStyle.Caption := TextByKey('main-menu-options-apouistyle');
+ mnuApoStyle.Hint := TextByKey('main-menu-options-apouistylehint');
+ mnuManual.Caption := TextByKey('main-menu-help-ifstheory');
+ mnuManual.Hint := TextByKey('main-menu-help-ifstheoryhint'); // AV
+ DownloadPlugins.Caption := TextByKey('main-menu-help-pluginlink'); // AV
+ Changeweightdistribution1.Caption := TextByKey('main-menu-flame-changeweights');
+ Changecolordistribution1.Caption := TextByKey('main-menu-flame-changecolors');
+ Hexagonal1.Caption := TextByKey('main-menu-flame-hextile');
+ Rhombic1.Caption := TextByKey('main-menu-flame-rhombustile');
+ Square1.Caption := TextByKey('main-menu-flame-squaretile');
+ AddTile.Caption := TextByKey('main-menu-flame-addtile');
+ AddSymmetry.Caption := TextByKey('main-menu-flame-addsymmetry');
+ BilateralSym.Caption := TextByKey('options-tab-random-type-bilateral');
+ RotationalSym.Caption := TextByKey('options-tab-random-type-rotational') + TextByKey('main-menu-flame-symorder');
+ DihedralSym.Caption := TextByKey('options-tab-random-type-dihedral') + TextByKey('main-menu-flame-symorder');
+end;
+
+procedure TMainForm.InvokeLoadXML(xmltext: string);
+begin
+ ParseXML(MainCP, PCHAR(xmltext), false);
+end;
+
+function TMainForm.ApplicationOnHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;
+var
+ Pos: TPoint;
+begin
+ Pos.x := 0;
+ Pos.y := 0;
+
+ CallHelp := False;
+ Result := True;
+ case Command of
+ HELP_SETPOPUP_POS: Pos := SmallPointToPoint(TSmallPoint(Data));
+ HELP_CONTEXTPOPUP: ShowHelp(Pos, Data);
+ else Result := False;
+ end;
+end;
+
+procedure TMainForm.ApplyThemedColors; // AV
+var
+ AStyle: TCustomStyleServices;
+ MenuC1, MenuC2: TColor;
+ mb: TMenuBreak;
+ i: integer;
+begin
+ AStyle := TStyleManager.ActiveStyle;
+ CurrentStyle := AStyle.Name;
+
+ BrightColor := AStyle.GetSystemColor(clHighlight);
+ WinColor := AStyle.GetSystemColor(clWindow);
+ TextColor := AStyle.GetSystemColor(clWindowText);
+ MidColor := MiddleColor(BrightColor, WinColor);
+
+ AStyle.GetElementColor(AStyle.GetElementDetails(tmPopupItemNormal),
+ ecTextColor, MenuC1);
+ AStyle.GetElementColor(AStyle.GetElementDetails(tmMenuBarItemNormal),
+ ecTextColor, MenuC2);
+
+ IsLightMenu := (MenuC1 > $00BEBEBE);
+ if IsLightMenu then
+ mnuEditor.ImageIndex := 75
+ else
+ mnuEditor.ImageIndex := 19;
+
+ if CurrentStyle <> 'Obsidian' then
+ IsLightMenu := IsLightMenu or (MenuC2 > $00BEBEBE);
+ if IsLightMenu then
+ tbEditor.ImageIndex := 75
+ else
+ tbEditor.ImageIndex := 19;
+
+ IsDarkTheme := (CurrentStyle = 'TabletDark') or (CurrentStyle = 'Auric')
+ or (CurrentStyle = 'Cobalt XEMedia') or (CurrentStyle = 'Onyx Blue')
+ or (CurrentStyle = 'Ruby Graphite') or (CurrentStyle = 'Golden Graphite');
+
+ i := 0;
+ if (CurrentStyle = 'Windows') then mb := mbNone else mb := mbBreak;
+ while i < length(VarMenus) do
+ begin
+ VarMenus[i].Break := mb;
+ inc(i, 30);
+ end;
+end;
+
+{ **************************************************************************** }
+
+procedure TMainForm.StopThread;
+begin
+ RedrawTimer.Enabled := False;
+ if Assigned(Renderer) then begin
+ assert(Renderer.Suspended = false);
+ Renderer.Terminate;
+ Renderer.WaitFor;
+ end;
+end;
+
+(*
+// AV: how old are they? Maybe since Apo 1.0? :)
+
+procedure EqualizeVars(const x: integer);
+var
+ i: integer;
+begin
+ for i := 0 to Transforms - 1 do
+ MainCp.xform[x].SetVariation(i, 1.0 / NRVAR);
+end;
+
+procedure NormalVars(const x: integer);
+var
+ i: integer;
+ td: double;
+begin
+ td := 0.0;
+ for i := 0 to 6 do
+ td := td + Maincp.xform[x].GetVariation(i);
+ if (td < 0.001) then
+ EqualizeVars(x)
+ else
+ for i := 0 to 6 do
+ MainCp.xform[x].SetVariation(i, MainCp.xform[x].GetVariation(i) / td);
+end;
+*)
+
+procedure RandomVariation(cp: TControlPoint);
+{ Randomise variation parameters }
+var
+ a, b, i, j: integer;
+begin
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ for i := 0 to cp.NumXForms - 1 do
+ begin
+ for j := 0 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0);
+ repeat
+ a := random(NRVAR);
+ until Variations[a];
+ repeat
+ b := random(NRVAR);
+ until Variations[b];
+ if (a = b) then
+ begin
+ cp.xform[i].SetVariation(a, 1);
+ end
+ else
+ begin
+ cp.xform[i].SetVariation(a, random);
+ cp.xform[i].SetVariation(b, 1 - cp.xform[i].GetVariation(a));
+ end;
+ end;
+end;
+
+procedure SetVariation(cp: TControlPoint);
+{ Set the current Variation }
+var
+ i, j: integer;
+begin
+ if Variation = vRandom then
+ begin
+ RandomVariation(cp);
+ end
+ else
+ for i := 0 to cp.NumXForms - 1 do
+ begin
+ for j := 0 to NRVAR - 1 do
+ cp.xform[i].SetVariation(j, 0);
+ cp.xform[i].SetVariation(integer(Variation), 1);
+ end;
+end;
+
+function FindFlameXML(const FlameStr: string; const Title: string) : Integer;
+var
+ i: integer;
+ FlameStart: string;
+begin
+ Result := 0;
+ FlameStart := ' '' then
+ FlameStart := ' '' then
+ begin
+ i := Pos(FlameStart, Lowercase(FlameStr));
+ while i > 0 do
+ if PosEx(' i then
+ begin
+ Result := i;
+ break;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TMainForm.RandomizeColorSpeed1Click(Sender: TObject);
+var
+ i: integer;
+begin
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ StopThread;
+ UpdateUndo;
+ for i := 0 to Transforms - 1 do
+ maincp.xform[i].symmetry := 2 * random - 1;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.RandomizeCP(var cp1: TControlPoint; alg: integer = 0);
+var
+ sourceCP: TControlPoint;
+begin
+ if assigned(MainCP) then
+ sourceCP := MainCP.Clone
+ else
+ SourceCP := nil;
+
+ if assigned(cp1) then begin
+ cp1.Free;
+ cp1 := nil;
+ end;
+ cp1 := RandomFlame(sourceCP, alg);
+
+ if assigned(sourceCP) then
+ sourceCP.Free;
+end;
+
+function TMainForm.GradientFromPalette(const pal: TColorMap; const title: string): string;
+var
+ c, i, j: integer;
+ strings: TStringList;
+begin
+ strings := TStringList.Create;
+ try
+ strings.add('gradient:');
+ strings.add(' title="' + CleanUPRTitle(title) + '" smooth=no');
+ for i := 0 to 255 do
+ begin
+ j := round(i * (399 / 255));
+ c := pal[i][2] shl 16 + pal[i][1] shl 8 + pal[i][0];
+ strings.Add(' index=' + IntToStr(j) + ' color=' + intToStr(c));
+ end;
+ result := strings.text;
+ finally
+ strings.free;
+ end;
+end;
+
+function CleanIdentifier(ident: string): string;
+{ Strips unwanted characters from an identifier}
+var
+ i: integer;
+begin
+ for i := 0 to Length(ident) do
+ begin
+ if ident[i] = #32 then
+ ident[i] := '_'
+ else if ident[i] = '}' then
+ ident[i] := '_'
+ else if ident[i] = '{' then
+ ident[i] := '_';
+ end;
+ Result := ident;
+end;
+
+procedure TMainForm.OnProgress(prog: double);
+var
+ Elapsed, Remaining: TDateTime;
+ IntProg: Integer;
+begin
+ IntProg := (round(prog * 100));
+ LoadSaveProgress.Position := IntProg;
+ if (IntProg = 100) then LoadSaveProgress.Position := 0;
+ Elapsed := Now - StartTime;
+ StatusBar.Panels[1].Text := Format(TextByKey('render-status-elapsed') + ' %2.2d:%2.2d:%2.2d.%2.2d',
+ [Trunc(Elapsed * 24),
+ Trunc((Elapsed * 24 - Trunc(Elapsed * 24)) * 60),
+ Trunc((Elapsed * 24 * 60 - Trunc(Elapsed * 24 * 60)) * 60),
+ Trunc((Elapsed * 24 * 60 * 60 - Trunc(Elapsed * 24 * 60 * 60)) * 100)]);
+ if prog > 0 then
+ Remaining := Elapsed/prog - Elapsed
+ else
+ Remaining := 0;
+
+ StatusBar.Panels[2].Text := Format(TextByKey('render-status-remaining') + ' %2.2d:%2.2d:%2.2d.%2.2d',
+ [Trunc(Remaining * 24),
+ Trunc((Remaining * 24 - Trunc(Remaining * 24)) * 60),
+ Trunc((Remaining * 24 * 60 - Trunc(Remaining * 24 * 60)) * 60),
+ Trunc((Remaining * 24 * 60 * 60 - Trunc(Remaining * 24 * 60 * 60)) * 100)]);
+ StatusBar.Panels[3].Text := MainCp.name;
+ Application.ProcessMessages;
+end;
+
+procedure TMainForm.UpdateUndo;
+begin
+ MainCp.FillUsedPlugins;
+ SaveFlame(MainCp, Format('%.4d-', [UndoIndex]) + MainCp.name,
+ AppPath + undoFilename);
+ Inc(UndoIndex);
+ UndoMax := UndoIndex; //Inc(UndoMax);
+ mnuSaveUndo.Enabled := true;
+ mnuUndo.Enabled := True;
+ mnuPopUndo.Enabled := True;
+ mnuRedo.Enabled := false;
+ mnuPopRedo.Enabled := false;
+ btnUndo.enabled := true;
+ btnRedo.Enabled := false;
+ EditForm.mnuUndo.Enabled := True;
+ EditForm.mnuRedo.Enabled := false;
+ EditForm.tbUndo.enabled := true;
+ EditForm.tbRedo.enabled := false;
+ AdjustForm.btnUndo.enabled := true;
+ AdjustForm.btnRedo.enabled := false;
+end;
+
+function GradientEntries(gFilename: string): string;
+var
+ i, p: integer;
+ Title: string;
+ FileStrings: TStringList;
+ NewStrings: TStringList;
+begin
+ FileStrings := TStringList.Create;
+ NewStrings := TStringList.Create;
+ NewStrings.Text := '';
+ FileStrings.LoadFromFile(gFilename);
+ try
+ if (Pos('{', FileStrings.Text) <> 0) then
+ begin
+ for i := 0 to FileStrings.Count - 1 do
+ begin
+ p := Pos('{', FileStrings[i]);
+ if (p <> 0) then
+ begin
+ Title := Trim(Copy(FileStrings[i], 1, p - 1));
+ if (Title <> '') and (LowerCase(Title) <> 'comment') then
+ begin { Otherwise bad format }
+ NewStrings.Add(Title);
+ end;
+ end;
+ end;
+ GradientEntries := NewStrings.Text;
+ end;
+ finally
+ FileStrings.Free;
+ NewStrings.Free;
+ end;
+end;
+
+{ ********************************* File ************************************* }
+
+function EntryExists(En, Fl: string): boolean;
+{ Searches for existing identifier in parameter files }
+var
+ FStrings: TStringList;
+ i: integer;
+begin
+ Result := False;
+ if FileExists(Fl) then
+ begin
+ FStrings := TStringList.Create;
+ try
+ FStrings.LoadFromFile(Fl);
+ for i := 0 to FStrings.Count - 1 do
+ if Pos(LowerCase(En) + ' {', Lowercase(FStrings[i])) <> 0 then
+ Result := True;
+ finally
+ FStrings.Free;
+ end
+ end
+ else
+ Result := False;
+end;
+
+function CleanEntry(ident: string): string;
+{ Strips unwanted characters from an identifier}
+var
+ i: integer;
+begin
+ for i := 1 to Length(ident) do
+ begin
+ if ident[i] = #32 then
+ ident[i] := '_'
+ else if ident[i] = '}' then
+ ident[i] := '_'
+ else if ident[i] = '{' then
+ ident[i] := '_';
+ end;
+ Result := ident;
+end;
+
+function CleanXMLName(ident: string): string;
+var
+ i: integer;
+begin
+ for i := 1 to Length(ident) do
+ begin
+ if ident[i] = '*' then
+ ident[i] := '_'
+ else if ident[i] = '"' then
+ ident[i] := #39;
+ end;
+ Result := ident;
+end;
+
+
+function CleanUPRTitle(ident: string): string;
+{ Strips braces but leave spaces }
+var
+ i: integer;
+begin
+ for i := 1 to Length(ident) do
+ begin
+ if ident[i] = '}' then
+ ident[i] := '_'
+ else if ident[i] = '{' then
+ ident[i] := '_';
+ end;
+ Result := ident;
+end;
+
+function DeleteEntry(Entry, FileName: string): boolean;
+{ Deletes an entry from a multi-entry file }
+var
+ Strings: TStringList;
+ p, i: integer;
+begin
+ Result := True;
+ Strings := TStringList.Create;
+ try
+ i := 0;
+ Strings.LoadFromFile(FileName);
+ while Pos(Entry + ' ', Trim(Strings[i])) <> 1 do
+ begin
+ inc(i);
+ end;
+ repeat
+ p := Pos('}', Strings[i]);
+ Strings.Delete(i);
+ until p <> 0;
+ if (i < Strings.Count) and (Trim(Strings[i]) = '') then Strings.Delete(i);
+ Strings.SaveToFile(FileName);
+ finally
+ Strings.Free;
+ end;
+end;
+
+function SaveUPR(Entry, FileName: string): boolean;
+{ Saves UF parameter to end of file }
+var
+ UPRFile: TextFile;
+begin
+ Result := True;
+ try
+ AssignFile(UPRFile, FileName);
+ if FileExists(FileName) then
+ begin
+ if EntryExists(Entry, FileName) then DeleteEntry(Entry, FileName);
+ Append(UPRFile);
+ end
+ else
+ ReWrite(UPRFile);
+ WriteLn(UPRFile, MainForm.UPRString(MainCp, Entry));
+ CloseFile(UPRFile);
+ except on E: EInOutError do
+ begin
+ Application.MessageBox(PChar(Format(TextByKey('common-genericsavefailure'), [FileName])), 'Apophysis', 16);
+ Result := False;
+ end;
+ end;
+end;
+
+function IFSToString(cp: TControlPoint; Title: string): string;
+{ Creates a string containing a formated IFS parameter set }
+var
+ i: integer;
+ a, b, c, d, e, f, p: double;
+ Strings: TStringList;
+begin
+ Strings := TStringList.Create;
+ try
+ Strings.Add(CleanEntry(Title) + ' {');
+ for i := 0 to Transforms - 1 do
+ begin
+ a := cp.xform[i].c[0][0];
+ b := cp.xform[i].c[0][1];
+ c := cp.xform[i].c[1][0];
+ d := cp.xform[i].c[1][1];
+ e := cp.xform[i].c[2][0];
+ f := cp.xform[i].c[2][1];
+ p := cp.xform[i].density;
+ Strings.Add(Format('%.6g %.6g %.6g %.6g %.6g %.6g %.6g',
+ [a, b, c, d, e, f, p]));
+ end;
+ Strings.Add('}');
+ IFSToString := Strings.Text;
+ finally
+ Strings.Free;
+ end;
+end;
+
+function GetTitle(str: string): string;
+var
+ p: integer;
+begin
+ str := Trim(str);
+ p := Pos(' ', str);
+ GetTitle := Trim(Copy(str, 1, p));
+end;
+
+function GetComment(str: string): string;
+{ Extracts comment form line of IFS file }
+var
+ p: integer;
+begin
+ str := Trim(str);
+ p := Pos(';', str);
+ if p <> 0 then
+ GetComment := Trim(Copy(str, p + 1, Length(str) - p))
+ else
+ GetComment := '';
+end;
+
+function GetParameters(str: string; var a, b, c, d, e, f, p: double): boolean;
+var
+ Tokens: TStringList;
+begin
+ GetParameters := False;
+ Tokens := TStringList.Create;
+ try
+ try
+ GetTokens(str, tokens);
+ if Tokens.Count >= 7 then {enough tokens}
+ begin
+ a := StrToFloat(Tokens[0]);
+ b := StrToFloat(Tokens[1]);
+ c := StrToFloat(Tokens[2]);
+ d := StrToFloat(Tokens[3]);
+ e := StrToFloat(Tokens[4]);
+ f := StrToFloat(Tokens[5]);
+ p := StrToFloat(Tokens[6]);
+ Result := True;
+ end;
+ except on E: EConvertError do
+ begin
+ Result := False
+ end;
+ end;
+ finally
+ Tokens.Free;
+ end;
+end;
+
+function StringToIFS(strng: string): boolean;
+{ Loads an IFS parameter set from string}
+var
+ Strings: TStringList;
+ Comments: TStringList;
+ i, sTransforms: integer;
+ cmnt, sTitle: string;
+ a, b, c, d: double;
+ e, f, p: double;
+begin
+ MainCp.clear;
+ StringToIFS := True;
+ sTransforms := 0;
+ Strings := TStringList.Create;
+ Comments := TStringList.Create;
+ try
+ try
+ Strings.Text := strng;
+ if Pos('}', Strings.Text) = 0 then
+ raise EFormatInvalid.Create('No closing brace');
+ if Pos('{', Strings[0]) = 0 then
+ raise EFormatInvalid.Create('No opening brace.');
+ {To Do ... !!!!}
+ sTitle := GetTitle(Strings[0]);
+ if sTitle = '' then raise EFormatInvalid.Create('No identifier.');
+ cmnt := GetComment(Strings[0]);
+ if cmnt <> '' then Comments.Add(cmnt);
+ i := 1;
+ try
+ repeat
+ cmnt := GetComment(Strings[i]);
+ if cmnt <> '' then Comments.Add(cmnt);
+ if (Pos(';', Trim(Strings[i])) <> 1) and (Trim(Strings[i]) <> '') then
+ if GetParameters(Strings[i], a, b, c, d, e, f, p) then
+ begin
+ MainCp.xform[sTransforms].c[0][0] := a;
+ MainCp.xform[sTransforms].c[0][1] := c;
+ MainCp.xform[sTransforms].c[1][0] := b;
+ MainCp.xform[sTransforms].c[1][1] := d;
+ MainCp.xform[sTransforms].c[2][0] := e;
+ MainCp.xform[sTransforms].c[2][1] := f;
+ MainCp.xform[sTransforms].density := p;
+ inc(sTransforms);
+ end
+ else
+ EFormatInvalid.Create('Insufficient parameters.');
+ inc(i);
+ until (Pos('}', Strings[i]) <> 0) or (sTransforms = NXFORMS);
+ except on E: EMathError do
+ end;
+ if sTransforms < 2 then
+ raise EFormatInvalid.Create('Insufficient parameters.');
+ MainCp.name := sTitle;
+ Transforms := sTransforms;
+ for i := 1 to Transforms - 1 do
+ MainCp.xform[i].color := 0;
+ MainCp.xform[0].color := 1;
+
+ except on E: EFormatInvalid do
+ begin
+ Application.MessageBox(PChar(TextByKey('common-invalidformat')), PChar('Apophysis'), 16);
+ end;
+ end;
+ finally
+ Strings.Free;
+ Comments.Free;
+ end;
+end;
+
+
+function SaveIFS(cp: TControlPoint; Title, FileName: string): boolean;
+{ Saves IFS parameters to end of file }
+var
+ a, b, c: double;
+ d, e, f, p: double;
+ m: integer;
+ IFile: TextFile;
+begin
+ Result := True;
+ try
+ AssignFile(IFile, FileName);
+ if FileExists(FileName) then
+ begin
+ if EntryExists(Title, FileName) then DeleteEntry(Title, FileName);
+ Append(IFile);
+ end
+ else
+ ReWrite(IFile);
+ WriteLn(IFile, Title + ' {');
+ for m := 0 to Transforms - 1 do
+ begin
+ a := cp.xform[m].c[0][0];
+ c := cp.xform[m].c[0][1];
+ b := cp.xform[m].c[1][0];
+ d := cp.xform[m].c[1][1];
+ e := cp.xform[m].c[2][0];
+ f := cp.xform[m].c[2][1];
+ p := cp.xform[m].density;
+ Write(IFile, Format('%.6g %.6g %.6g %.6g %.6g %.6g %.6g',
+ [a, b, c, d, e, f, p]));
+ WriteLn(IFile, '');
+ end;
+ WriteLn(IFile, '}');
+ WriteLn(IFile, ' ');
+ CloseFile(IFile);
+ except on E: EInOutError do
+ begin
+ Application.MessageBox(PChar(Format(TextByKey('common-genericsavefailure'), [FileName])), 'Apophysis', 16);
+ Result := False;
+ end;
+ end;
+end;
+
+function TMainForm.SaveFlame(cp1: TControlPoint; title, filename: string): boolean;
+{ Saves Flame parameters to end of file }
+var
+ IFile: TextFile;
+ sl: TStringList;
+ i: integer;
+begin
+ Result := True;
+ try
+ AssignFile(IFile, filename);
+ if FileExists(filename) then
+ begin
+ if EntryExists(title, filename) then DeleteEntry(title, fileName);
+ Append(IFile);
+ end
+ else ReWrite(IFile);
+
+ sl := TStringList.Create;
+ try
+ cp1.SaveToStringList(sl);
+ WriteLn(IFile, title + ' {');
+ write(IFile, sl.Text);
+ WriteLn(IFile, 'palette:');
+ for i := 0 to 255 do
+ begin
+ WriteLn(IFile, IntToStr(cp1.cmap[i][0]) + ' ' +
+ IntToStr(cp1.cmap[i][1]) + ' ' +
+ IntToStr(cp1.cmap[i][2]))
+ end;
+ WriteLn(IFile, ' }');
+ finally
+ sl.free
+ end;
+ WriteLn(IFile, ' ');
+ CloseFile(IFile);
+
+ except on EInOutError do
+ begin
+ Application.MessageBox(PChar(Format(TextByKey('common-genericsavefailure'), [FileName])), 'Apophysis', 16);
+ Result := False;
+ end;
+ end;
+end;
+
+function ColorToXmlCompact(cp1: TControlPoint): string;
+var
+ i: integer;
+begin
+ Result := ' ';
+ for i := 0 to 255 do begin
+ if ((i and 7) = 0) then Result := Result + #13#10 + ' ';
+ Result := Result + IntToHex(cp1.cmap[i, 0],2)
+ + IntToHex(cp1.cmap[i, 1],2)
+ + IntToHex(cp1.cmap[i, 2],2);
+ end;
+ Result := Result + #13#10 + ' ';
+end;
+
+
+function ColorToXml(cp1: TControlPoint): string;
+var
+ i: integer;
+begin
+ Result := '';
+ for i := 0 to 255 do begin
+ Result := Result + ' ' + #13#10;
+ end;
+end;
+
+
+function FlameToXMLAS(const cp1: TControlPoint; title: string; exporting: boolean): string;
+var
+ t, i{, j}: integer;
+ FileList: TStringList;
+ x, y: double;
+ parameters: string;
+ curves, str: string;
+begin
+ FileList := TStringList.create;
+ x := cp1.center[0];
+ y := cp1.center[1];
+
+// if cp1.cmapindex >= 0 then pal := pal + 'gradient="' + IntToStr(cp1.cmapindex) + '" ';
+
+ try
+ parameters := 'version="' + AppVersionString + '" ';
+ if cp1.time <> 0 then
+ parameters := parameters + format('time="%g" ', [cp1.time]);
+
+ parameters := parameters +
+ 'size="' + IntToStr(cp1.width) + ' ' + IntToStr(cp1.height) +
+ format('" center="%g %g" ', [x, y]) +
+ format('scale="%g" ', [cp1.pixels_per_unit]);
+
+ if cp1.FAngle <> 0 then
+ parameters := parameters + format('angle="%g" ', [cp1.FAngle]) +
+ format('rotate="%g" ', [-180 * cp1.FAngle/Pi]);
+ if cp1.zoom <> 0 then
+ parameters := parameters + format('zoom="%g" ', [cp1.zoom]);
+
+// 3d
+ if cp1.cameraPitch <> 0 then
+ parameters := parameters + format('cam_pitch="%g" ', [cp1.cameraPitch]);
+ if cp1.cameraYaw <> 0 then
+ parameters := parameters + format('cam_yaw="%g" ', [cp1.cameraYaw]);
+ if cp1.cameraRoll <> 0 then
+ parameters := parameters + format('cam_roll="%g" ', [cp1.cameraRoll]);
+ if cp1.cameraPersp <> 0 then
+ parameters := parameters + format('cam_perspective="%g" ', [cp1.cameraPersp]);
+ if cp1.cameraZpos <> 0 then
+ parameters := parameters + format('cam_zpos="%g" ', [cp1.cameraZpos]);
+ if cp1.cameraDOF <> 0 then
+ parameters := parameters + format('cam_dof="%g" ', [cp1.cameraDOF]);
+//
+ parameters := parameters + format(
+ 'oversample="%d" filter="%g" quality="%g" ',
+ [cp1.spatial_oversample,
+ cp1.spatial_filter_radius,
+ cp1.sample_density]
+ );
+ if cp1.nbatches <> 1 then parameters := parameters + 'batches="' + IntToStr(cp1.nbatches) + '" ';
+ if cp1.hue_rotation <> 1 then parameters := parameters + format('hue="%g" ', [cp1.hue_rotation]); // AV
+
+ parameters := parameters +
+ format('background="%g %g %g" ', [cp1.background[0] / 255, cp1.background[1] / 255, cp1.background[2] / 255]) +
+ format('brightness="%g" ', [cp1.brightness]) +
+ format('gamma="%g" ', [cp1.gamma]);
+
+ if cp1.contrast <> 1 then // AV
+ parameters := parameters + format('contrast="%g" ', [cp1.contrast]);
+
+ if cp1.vibrancy <> 1 then
+ parameters := parameters + format('vibrancy="%g" ', [cp1.vibrancy]);
+
+ if cp1.gamma_threshold <> 0 then
+ parameters := parameters + format('gamma_threshold="%g" ', [cp1.gamma_threshold]);
+
+ if cp1.soloXform >= 0 then
+ parameters := parameters + format('soloxform="%d" ', [cp1.soloXform]);
+
+ parameters := parameters +
+ format('estimator_radius="%g" ', [cp1.estimator]) +
+ format('estimator_minimum="%g" ', [cp1.estimator_min]) +
+ format('estimator_curve="%g" ', [cp1.estimator_curve]);
+ if (cp1.enable_de) then
+ parameters := parameters + ('enable_de="1" ')
+ else parameters := parameters + ('enable_de="0" ');
+
+ str := '';
+ for i := 0 to cp1.used_plugins.Count-1 do begin
+ str := str + cp1.used_plugins[i];
+ if (i = cp1.used_plugins.Count-1) then break;
+ str := str + ' ';
+ end;
+ parameters := parameters + format('plugins="%s" new_linear="1" ', [str]);
+
+ for i := 0 to 3 do
+ begin
+ curves := curves + FloatToStr(cp1.curvePoints[i][0].x) + ' ';
+ curves := curves + FloatToStr(cp1.curvePoints[i][0].y) + ' ';
+ curves := curves + FloatToStr(cp1.curveWeights[i][0]) + ' ';
+
+ curves := curves + FloatToStr(cp1.curvePoints[i][1].x) + ' ';
+ curves := curves + FloatToStr(cp1.curvePoints[i][1].y) + ' ';
+ curves := curves + FloatToStr(cp1.curveWeights[i][1]) + ' ';
+
+ curves := curves + FloatToStr(cp1.curvePoints[i][2].x) + ' ';
+ curves := curves + FloatToStr(cp1.curvePoints[i][2].y) + ' ';
+ curves := curves + FloatToStr(cp1.curveWeights[i][2]) + ' ';
+
+ curves := curves + FloatToStr(cp1.curvePoints[i][3].x) + ' ';
+ curves := curves + FloatToStr(cp1.curvePoints[i][3].y) + ' ';
+ curves := curves + FloatToStr(cp1.curveWeights[i][3]) + ' ';
+ end;
+
+ curves := trim(curves);
+ parameters := parameters + format('curves="%s" ', [curves]);
+
+ FileList.Add('');
+ { Write transform parameters }
+ t := cp1.NumXForms;
+ for i := 0 to t - 1 do
+ FileList.Add(cp1.xform[i].ToXMLString);
+ if cp1.HasFinalXForm then
+ begin
+ // 'enabled' flag disabled in this release
+ FileList.Add(cp1.xform[t].FinalToXMLString(cp1.finalXformEnabled));
+ end;
+
+ { Write palette data }
+ if exporting or OldPaletteFormat then
+ FileList.Add(ColorToXml(cp1))
+ else
+ FileList.Add(ColorToXmlCompact(cp1));
+
+ FileList.Add(' ');
+ result := FileList.text;
+ finally
+ FileList.free
+ end;
+end;
+
+/////////// AV: working with embedded PNG-parameters ////////////////////////
+
+procedure TMainForm.ImportFromPNGClick(Sender: TObject);
+begin
+ OpenDialog.Title := TextByKey('common-open-apoimage');
+ OpenDialog.Filter := TextByKey('common-filter-png') + ' |*.png';
+ OpenDialog.InitialDir := ParamFolder;
+ OpenDialog.FileName := '';
+ if OpenDialog.Execute then
+ ImportThumbnailPNG(OpenDialog.FileName);
+end;
+
+procedure TMainForm.ImportThumbnailPNG(FileName: string);
+var
+ flameXML: string;
+begin
+ flameXML := MainForm.LoadXMLFlameTextPNG(FileName);
+ if flameXML <> '' then
+ begin
+ try
+ PasteFlameXML(flameXML);
+ except
+ Application.MessageBox(PChar(Format(TextByKey('common-openpngerror1'),
+ [ExtractFileName(FileName)])), PChar('Apophysis AV'), MB_ICONWARNING or MB_OK);
+ end;
+ end;
+end;
+
+function TMainForm.LoadXMLFlameTextPNG(FileName: string): string;
+var
+ PngObject: TPNGObject;
+ ChunkList: TPngList;
+ TextChunk: TChunkTEXT;
+ flameXML: string;
+ label loadedFlame;
+begin
+ Result := '';
+ PngObject := TPngObject.Create;
+ try
+ PngObject.LoadFromFile(FileName);
+ ChunkList := PngObject.Chunks;
+ if ChunkList <> nil then
+ begin
+ TextChunk := ChunkList.FindChunk(TChunkTEXT) as TChunkTEXT;
+ // iterate through text chunks until 'ApoFlame' keyword is found
+ while TextChunk <> nil do
+ begin
+ if TextChunk.Keyword = 'ApoFlame' then
+ begin
+ if FindFlameXML(String(TextChunk.Text), '') > 0 then
+ begin
+ Result := String(TextChunk.Text);
+ goto loadedFlame;
+ end;
+ break;
+ end else
+ ChunkList.RemoveChunk(TextChunk);
+ end;
+ Application.MessageBox(PChar(Format(TextByKey('common-openpngerror2'),
+ [ExtractFileName(FileName)])), PChar('Apophysis AV'), MB_ICONWARNING or MB_OK);
+ loadedFlame:
+ end;
+ except
+ Application.MessageBox(PChar(Format(TextByKey('common-openpngerror3'),
+ [ExtractFileName(FileName)])), PChar('Apophysis AV'), MB_ICONWARNING or MB_OK);
+ end;
+ PngObject.Free;
+end;
+
+///////////////////////////////
+
+
+function GetThumbnailBase64(const cp1: TControlPoint) : string;
+var
+ st: TMemoryStream;
+ tempcp : TControlPoint;
+ render : TRenderer;
+ buffer : array of byte;
+ base64 : string;
+ size : integer;
+ bmp : TJPegImage;
+ w, h, r: double;
+begin
+ w := cp1.Width;
+ h := cp1.Height;
+ r := w / h;
+ if (w < h) then
+ begin
+ w := r * ThumbnailSize;
+ h := ThumbnailSize;
+ end else if (w > h) then
+ begin
+ h := ThumbnailSize / r;
+ w := ThumbnailSize;
+ end else
+ begin
+ w := ThumbnailSize;
+ h := ThumbnailSize;
+ end;
+
+ render := TRenderer.Create;
+ tempcp := TControlPoint.create;
+ tempcp.Copy(cp1);
+
+ tempcp.AdjustScale(round(w), round(h));
+ tempcp.Width := round(w);
+ tempcp.Height := round(h);
+ tempcp.spatial_oversample := defOversample;
+ tempcp.spatial_filter_radius := defFilterRadius;
+ tempcp.sample_density := 10;
+
+ render.SetCP(tempcp);
+ render.Render;
+
+ st := TMemoryStream.Create;
+ bmp := TJpegImage.Create;
+ bmp.Assign(render.GetImage);
+ bmp.SaveToStream(st);
+ size := st.Size;
+ SetLength(buffer, size);
+ st.Seek(0, soBeginning);
+
+ st.ReadBuffer(buffer[0], length(buffer));
+ base64 := B64Encode(TBinArray(buffer), length(buffer));
+
+ tempcp.Free;
+ render.Free;
+ st.Free;
+ bmp.Free;
+
+ result := base64;
+end;
+
+function FlameToXML(const cp1: TControlPoint; exporting, embedthumb: boolean): String;
+var
+ t, i{, j}, pos: integer;
+ FileList: TStringList;
+ x, y: double;
+ parameters: string;
+ curves, str, buf, xdata: string;
+begin
+ FileList := TStringList.create;
+ x := cp1.center[0];
+ y := cp1.center[1];
+
+// if cp1.cmapindex >= 0 then pal := pal + 'gradient="' + IntToStr(cp1.cmapindex) + '" ';
+
+ try
+ parameters := 'version="' + AppVersionString + '" ';
+ if cp1.time <> 0 then
+ parameters := parameters + format('time="%g" ', [cp1.time]);
+
+ parameters := parameters +
+ 'size="' + IntToStr(cp1.width) + ' ' + IntToStr(cp1.height) +
+ format('" center="%g %g" ', [x, y]) +
+ format('scale="%g" ', [cp1.pixels_per_unit]);
+
+ if cp1.FAngle <> 0 then
+ parameters := parameters + format('angle="%g" ', [cp1.FAngle]) + // !?!?!?
+ format('rotate="%g" ', [-180 * cp1.FAngle/Pi]);
+ if cp1.zoom <> 0 then
+ parameters := parameters + format('zoom="%g" ', [cp1.zoom]);
+
+// 3d
+ if cp1.cameraPitch <> 0 then
+ parameters := parameters + format('cam_pitch="%g" ', [cp1.cameraPitch]);
+ if cp1.cameraYaw <> 0 then
+ parameters := parameters + format('cam_yaw="%g" ', [cp1.cameraYaw]);
+ if cp1.cameraRoll <> 0 then // AV
+ parameters := parameters + format('cam_roll="%g" ', [cp1.cameraRoll]);
+ if cp1.cameraPersp <> 0 then
+ parameters := parameters + format('cam_perspective="%g" ', [cp1.cameraPersp]);
+ if cp1.cameraZpos <> 0 then
+ parameters := parameters + format('cam_zpos="%g" ', [cp1.cameraZpos]);
+ if cp1.cameraDOF <> 0 then
+ parameters := parameters + format('cam_dof="%g" ', [cp1.cameraDOF]);
+//
+ parameters := parameters + format(
+ 'oversample="%d" filter="%g" quality="%g" ',
+ [cp1.spatial_oversample,
+ cp1.spatial_filter_radius,
+ cp1.sample_density]
+ );
+ if cp1.nbatches <> 1 then parameters := parameters + 'batches="' + IntToStr(cp1.nbatches) + '" ';
+ if cp1.hue_rotation <> 1 then parameters := parameters + format('hue="%g" ', [cp1.hue_rotation]); // AV
+
+ parameters := parameters +
+ format('background="%g %g %g" ', [cp1.background[0] / 255, cp1.background[1] / 255, cp1.background[2] / 255]) +
+ format('brightness="%g" ', [cp1.brightness]) +
+ format('gamma="%g" ', [cp1.gamma]);
+
+ if cp1.contrast <> 1 then // AV
+ parameters := parameters + format('contrast="%g" ', [cp1.contrast]);
+
+ if cp1.vibrancy <> 1 then
+ parameters := parameters + format('vibrancy="%g" ', [cp1.vibrancy]);
+
+ if cp1.gamma_threshold <> 0 then
+ parameters := parameters + format('gamma_threshold="%g" ', [cp1.gamma_threshold]);
+
+ if cp1.soloXform >= 0 then
+ parameters := parameters + format('soloxform="%d" ', [cp1.soloXform]);
+
+ //
+ parameters := parameters +
+ format('estimator_radius="%g" ', [cp1.estimator]) +
+ format('estimator_minimum="%g" ', [cp1.estimator_min]) +
+ format('estimator_curve="%g" ', [cp1.estimator_curve]);
+ if exporting then parameters := parameters +
+ format('temporal_samples="%d" ', [cp1.jitters]);
+ if (cp1.enable_de) then
+ parameters := parameters + ('enable_de="1" ')
+ else parameters := parameters + ('enable_de="0" ');
+
+ str := '';
+ for i := 0 to cp1.used_plugins.Count-1 do begin
+ str := str + cp1.used_plugins[i];
+ if (i = cp1.used_plugins.Count-1) then break;
+ str := str + ' ';
+ end;
+ parameters := parameters + format('plugins="%s" new_linear="1" ', [str]);
+
+ for i := 0 to 3 do
+ begin
+ curves := curves + FloatToStr(cp1.curvePoints[i][0].x) + ' ';
+ curves := curves + FloatToStr(cp1.curvePoints[i][0].y) + ' ';
+ curves := curves + FloatToStr(cp1.curveWeights[i][0]) + ' ';
+
+ curves := curves + FloatToStr(cp1.curvePoints[i][1].x) + ' ';
+ curves := curves + FloatToStr(cp1.curvePoints[i][1].y) + ' ';
+ curves := curves + FloatToStr(cp1.curveWeights[i][1]) + ' ';
+
+ curves := curves + FloatToStr(cp1.curvePoints[i][2].x) + ' ';
+ curves := curves + FloatToStr(cp1.curvePoints[i][2].y) + ' ';
+ curves := curves + FloatToStr(cp1.curveWeights[i][2]) + ' ';
+
+ curves := curves + FloatToStr(cp1.curvePoints[i][3].x) + ' ';
+ curves := curves + FloatToStr(cp1.curvePoints[i][3].y) + ' ';
+ curves := curves + FloatToStr(cp1.curveWeights[i][3]) + ' ';
+ end;
+
+ curves := trim(curves);
+ parameters := parameters + format('curves="%s" ', [curves]);
+
+ FileList.Add('');
+ { Write transform parameters }
+ t := cp1.NumXForms;
+ for i := 0 to t - 1 do
+ FileList.Add(cp1.xform[i].ToXMLString);
+ if cp1.HasFinalXForm then
+ begin
+ // 'enabled' flag disabled in this release
+ FileList.Add(cp1.xform[t].FinalToXMLString(cp1.finalXformEnabled));
+ end;
+
+ if (embedthumb and EmbedThumbnails) then begin
+ xdata := GetThumbnailBase64(cp1);
+ buf := '';
+ for i := 1 to length(xdata) do begin
+ buf := buf + xdata[i];
+ if (length(buf) = 150) then begin
+ FileList.Add(' ');
+ buf := '';
+ end;
+ end;
+ if (Length(buf) > 0) then FileList.Add(' ');
+ end;
+
+ { Write palette data }
+ if exporting or OldPaletteFormat then
+ FileList.Add(ColorToXml(cp1))
+ else
+ FileList.Add(ColorToXmlCompact(cp1));
+
+ FileList.Add(' ');
+ result := FileList.text;
+ finally
+ FileList.free
+ end;
+end;
+
+function RemoveExt(filename: string): string;
+var
+ ext: string;
+ p: integer;
+begin
+ filename := ExtractFileName(filename);
+ ext := ExtractFileExt(filename);
+ p := Pos(ext, filename);
+ Result := Copy(filename, 0, p - 1);
+end;
+
+function XMLEntryExists(title, filename: string): boolean;
+var
+ FileList: TStringList;
+begin
+
+ Result := false;
+ if FileExists(filename) then
+ begin
+ FileList := TStringList.Create;
+ try
+ FileList.LoadFromFile(filename);
+ if pos(' 0 then Result := true;
+ finally
+ FileList.Free;
+ end
+ end else
+ result := false;
+end;
+
+procedure DeleteXMLEntry(title, filename: string);
+var
+ Strings: TStringList;
+ p, i: integer;
+begin
+ Strings := TStringList.Create;
+ try
+ i := 0;
+ Strings.LoadFromFile(FileName);
+ while Pos('name="' + title + '"', Trim(Strings[i])) = 0 do
+ inc(i);
+
+ p := 0;
+ while p = 0 do
+ begin
+ p := Pos(' ', Strings[i]);
+ Strings.Delete(i);
+ end;
+ Strings.SaveToFile(FileName);
+ finally
+ Strings.Free;
+ end;
+end;
+
+
+function TMainForm.SaveXMLFlame(const cp1: TControlPoint; title, filename: string): boolean;
+{ Saves Flame parameters to end of file }
+var
+ Tag: string;
+ IFile: File;
+ FileList: TStringList;
+ i, p: integer;
+ bakname: string;
+begin
+ Tag := RemoveExt(filename);
+ Result := True;
+ try
+ if FileExists(filename) then
+ begin
+ bakname := ChangeFileExt(filename, '.bak');
+ if FileExists(bakname) then DeleteFile(bakname);
+ RenameFile(filename, bakname);
+
+ FileList := TStringList.create;
+ try
+ FileList.LoadFromFile(bakname);
+
+ if Pos(' 0 then
+ begin
+ i := 0;
+ while Pos('', FileList[i]);
+ FileList.Delete(i);
+ end;
+ end;
+
+ // fix first line
+ if (FileList.Count > 0) then begin
+ //FileList[0] := '';
+ // AV: fix fixed :-)
+ if (pos(' 0) then
+ FileList[0] := ''
+ else // single-flame support
+ FileList.Insert(0, '');
+ end;
+
+ if FileList.Count > 2 then
+ begin
+ // AV fix last line :-)
+ if (pos(' ', FileList[FileList.Count - 1]) = 0) then
+ FileList.Add(' ');
+
+ if pos(' 0 then
+ repeat
+ FileList.Delete(FileList.Count - 1);
+ until (Pos(' ', FileList[FileList.count - 1]) <> 0)
+ else
+ repeat
+ FileList.Delete(FileList.Count - 1);
+ until (Pos('<' + Tag + '>', FileList[FileList.count - 1]) <> 0) or
+ (Pos(' ', FileList[FileList.count - 1]) <> 0);
+ end else
+ begin
+ FileList.Delete(FileList.Count - 1);
+ end;
+
+ FileList.Add(Trim(FlameToXML(cp1, false, true)));
+ FileList.Add(' ');
+ FileList.SaveToFile(filename);
+
+ finally
+ if FileExists(bakname) and not FileExists(filename) then
+ RenameFile(bakname, filename);
+
+ FileList.Free;
+ end;
+ end
+ else
+ begin
+ // New file ... easy
+ FileList := TStringList.Create;
+ FileList.Text := '' + #$0D#$0A +
+ FlameToXML(cp1, false, true) + #$0D#$0A + ' ';
+ FileList.SaveToFile(filename, TEncoding.UTF8);
+ FileList.Destroy;
+ end;
+ except // AV: fixed multi-updating
+ Result := False; // AV: first assign the value, then exit
+ raise Exception.CreateFmt(TextByKey('common-genericsavefailure'), [FileName]); // AV
+ //Application.MessageBox(PChar(Format(TextByKey('common-genericsavefailure'), [FileName])), 'Apophysis', 16);
+ end;
+end;
+
+function TMainForm.SaveGradient(Gradient, Title, FileName: string): boolean;
+{ Saves gradient parameters to end of file }
+var
+ IFile: TextFile;
+begin
+ Result := True;
+ try
+ AssignFile(IFile, FileName);
+ if FileExists(FileName) then
+ begin
+ if EntryExists(Title, FileName) then DeleteEntry(Title, FileName);
+ Append(IFile);
+ end
+ else
+ ReWrite(IFile);
+ Write(IFile, Gradient);
+ WriteLn(IFile, ' ');
+ CloseFile(IFile);
+ except on EInOutError do
+ begin
+ Result := False;
+ raise Exception.CreateFmt(TextByKey('common-genericsavefailure'), [FileName]); // AV
+ end;
+ end;
+end;
+
+function RenameIFS(OldIdent: string; var NewIdent: string): boolean;
+{ Renames an IFS parameter set in a file }
+var
+ Strings: TStringList;
+ p, i: integer;
+ s: string;
+begin
+ Result := True;
+ NewIdent := CleanEntry(NewIdent);
+ Strings := TStringList.Create;
+ try
+ try
+ i := 0;
+ Strings.LoadFromFile(OpenFile);
+ if Pos(OldIdent + ' ', Trim(Strings.Text)) <> 0 then
+ begin
+ while Pos(OldIdent + ' ', Trim(Strings[i])) <> 1 do
+ begin
+ inc(i);
+ end;
+ p := Pos('{', Strings[i]);
+ s := Copy(Strings[i], p, Length(Strings[i]) - p + 1);
+ Strings[i] := NewIdent + ' ' + s;
+ Strings.SaveToFile(OpenFile);
+ end
+ else
+ Result := False;
+ except on Exception do Result := False;
+ end;
+ finally
+ Strings.Free;
+ end;
+end;
+
+function RenameXML(OldIdent: string; var NewIdent: string): boolean;
+{ Renames an XML parameter set in a file }
+var
+ Strings: TStringList;
+ i: integer;
+ bakname: string;
+begin
+ Result := True;
+ Strings := TStringList.Create;
+ try
+ try
+ i := 0;
+ Strings.LoadFromFile(OpenFile);
+ if Pos('name="' + OldIdent + '"', Strings.Text) <> 0 then
+ begin
+ while Pos('name="' + OldIdent + '"', Strings[i]) = 0 do
+ begin
+ inc(i);
+ end;
+ Strings[i] := StringReplace(Strings[i], OldIdent, NewIdent, []);
+
+ bakname := ChangeFileExt(OpenFile, '.bak');
+ if FileExists(bakname) then DeleteFile(bakname);
+ RenameFile(OpenFile, bakname);
+
+ Strings.SaveToFile(OpenFile);
+ end
+ else
+ Result := False;
+ except on Exception do
+ Result := False;
+ end;
+ finally
+ Strings.Free;
+ end;
+end;
+
+
+procedure ListIFS(FileName: string; sel: integer);
+{ List identifiers in file }
+var
+ i, p: integer;
+ Title: string;
+ ListItem: TListItem;
+ FStrings: TStringList;
+begin
+ MainForm.ParseLoadingBatch := true;
+ FStrings := TStringList.Create;
+ FStrings.LoadFromFile(FileName);
+ try
+ MainForm.ListView1.Items.BeginUpdate;
+ MainForm.ListView1.Items.Clear;
+ if (Pos('{', FStrings.Text) <> 0) then
+ begin
+ for i := 0 to FStrings.Count - 1 do
+ begin
+ p := Pos('{', FStrings[i]);
+ // AV: why do we use 2-nd condition? A rudiment from 3D-hack?
+ if (p <> 0) and (Pos('(3D)', FStrings[i]) = 0) then
+ begin
+ Title := Trim(Copy(FStrings[i], 1, p - 1));
+ if Title <> '' then
+ begin { Otherwise bad format }
+ if ((i mod 5) = 0) then
+ MainForm.LoadSaveProgress.Position :=
+ round(100 * i / FStrings.Count); // AV
+ ListItem := MainForm.ListView1.Items.Add;
+ Listitem.Caption := Title; // Trim(Copy(FStrings[i], 1, p - 1));
+ end;
+ end;
+ end;
+ end;
+ MainForm.LoadSaveProgress.Position := 0; // AV
+ MainForm.ListView1.Items.EndUpdate;
+
+ with MainForm.ListView1 do
+ if Items.Count > 0 then // AV
+ case sel of
+ 0: Selected := Items[Items.Count - 1];
+ 1: Selected := Items[0];
+ end;
+ finally
+ FStrings.Free;
+ end;
+ MainForm.ParseLoadingBatch := false; // AV
+end;
+
+procedure ListFlames(FileName: string; sel: integer);
+{ List identifiers in file }
+var
+ i, p: integer;
+ Title: string;
+ ListItem: TListItem;
+ FStrings: TStringList;
+begin
+ FStrings := TStringList.Create;
+ FStrings.LoadFromFile(FileName);
+ try
+ MainForm.ListView1.Items.BeginUpdate;
+ MainForm.ListView1.Items.Clear;
+ if (Pos('{', FStrings.Text) <> 0) then
+ begin
+ for i := 0 to FStrings.Count - 1 do
+ begin
+ p := Pos('{', FStrings[i]);
+ if (p <> 0) then
+ begin
+ Title := Trim(Copy(FStrings[i], 1, p - 1));
+ if Title <> '' then
+ begin { Otherwise bad format }
+ ListItem := MainForm.ListView1.Items.Add;
+ Listitem.Caption := Trim(Copy(FStrings[i], 1, p - 1));
+ end;
+ end;
+ end;
+ end;
+ MainForm.ListView1.Items.EndUpdate;
+ if sel = 1 then MainForm.ListView1.Selected := MainForm.ListView1.Items[0];
+ finally
+ FStrings.Free;
+ end;
+end;
+
+{ ****************************** Display ************************************ }
+
+procedure Trace1(const str: string);
+begin
+ if TraceLevel >= 1 then
+ TraceForm.MainTrace.Lines.Add('. ' + str);
+end;
+
+procedure Trace2(const str: string);
+begin
+ if TraceLevel >= 2 then
+ TraceForm.MainTrace.Lines.Add('. . ' + str);
+end;
+
+procedure TMainForm.HandleThreadCompletion(var Message: TMessage);
+var
+ oldscale: double;
+begin
+ Trace2(MsgComplete + IntToStr(message.LParam));
+ if not Assigned(Renderer) then begin
+ Trace2(MsgNotAssigned);
+ exit;
+ end;
+ if Renderer.ThreadID <> message.LParam then begin
+ Trace2(MsgAnotherRunning);
+ exit;
+ end;
+ Image.Cursor := crDefault;
+
+ if assigned(FViewImage) then begin
+ oldscale := FViewImage.Width / Image.Width;
+ FViewImage.Free;
+ end
+ else oldscale := FViewScale;
+
+ FViewImage := Renderer.GetTransparentImage;
+
+ if (FViewImage <> nil) and (FViewImage.Width > 0) then begin
+ FViewScale := FViewImage.Width / Image.Width;
+
+ FViewPos.X := FViewScale/oldscale * (FViewPos.X - FViewOldPos.X);
+ FViewPos.Y := FViewScale/oldscale * (FViewPos.Y - FViewOldPos.Y);
+
+ DrawImageView;
+{
+ case FMouseMoveState of
+ msZoomWindowMove: FMouseMoveState := msZoomWindow;
+ msZoomOutWindowMove: FMouseMoveState := msZoomOutWindow;
+// msDragMove: FMouseMoveState := msDrag;
+ msRotateMove: FMouseMoveState := msRotate;
+ end;
+}
+ if FMouseMoveState in [msZoomWindowMove, msZoomOutWindowMove, msRotateMove] then
+ DrawSelection := false;
+
+ Trace1(TimeToStr(Now) + ' : Render complete');
+ Renderer.ShowSmallStats;
+ end
+ else Trace2('WARNING: No image rendered!');
+
+ Renderer.WaitFor;
+ Trace2('Destroying RenderThread #' + IntToStr(Renderer.ThreadID));
+ Renderer.Free;
+ Renderer := nil;
+ Trace1('');
+end;
+
+procedure TMainForm.HandleThreadTermination(var Message: TMessage);
+begin
+ Trace2(MsgTerminated + IntToStr(message.LParam));
+ if not Assigned(Renderer) then begin
+ Trace2(MsgNotAssigned);
+ exit;
+ end;
+ if Renderer.ThreadID <> message.LParam then begin
+ Trace2(MsgAnotherRunning);
+ exit;
+ end;
+ Image.Cursor := crDefault;
+ Trace2(' Render aborted');
+
+ Trace2('Destroying RenderThread #' + IntToStr(Renderer.ThreadID));
+ Renderer.Free;
+ Renderer := nil;
+ Trace1('');
+end;
+
+procedure TMainForm.DrawPreview;
+var
+ cp : TControlPoint;
+ Render : TRenderer;
+ BM: TBitmap;
+begin
+ Render := TRenderer.Create;
+ bm := TBitmap.Create;
+
+ cp := MainCP.Clone;
+
+ cp.sample_density := 1;
+ cp.spatial_oversample := 1;
+ cp.spatial_filter_radius := 1;
+
+ //Render.NrThreads := NrTreads;
+ Render.SetCP(cp);
+ Render.Render;
+ BM.Assign(Render.GetImage);
+ Image.Picture.Graphic := bm;
+end;
+
+procedure TMainForm.DrawFlame;
+var
+ GlobalMemoryInfo: TMemoryStatus; // holds the global memory status information
+ RenderCP: TControlPoint;
+ Mem, ApproxMem: cardinal;
+ bs: integer;
+begin
+ RedrawTimer.Enabled := False;
+ if Assigned(Renderer) then begin
+ assert(Renderer.Suspended = false);
+
+ Trace2('Killing previous RenderThread #' + inttostr(Renderer.ThreadID));
+ Renderer.Terminate;
+ Renderer.WaitFor;
+ Trace2('Destroying RenderThread #' + IntToStr(Renderer.ThreadID));
+
+ Renderer.Free;
+ Renderer := nil;
+ end;
+
+ if not Assigned(Renderer) then
+ begin
+ if EditForm.Visible and ((MainCP.Width / MainCP.Height) <> (EditForm.cp.Width / EditForm.cp.Height))
+ then EditForm.UpdateDisplay(true); // preview only?
+ if AdjustForm.Visible then AdjustForm.UpdateDisplay(true); // preview only!
+
+ RenderCP := MainCP.Clone;
+ RenderCp.AdjustScale(Image.width, Image.height);
+
+ // following needed ?
+// cp.Zoom := Zoom;
+// cp.center[0] := center[0];
+// cp.center[1] := center[1];
+
+ RenderCP.sample_density := defSampleDensity;
+ // oversample and filter are just slowing us down here...
+ RenderCP.spatial_oversample := 1; // defOversample;
+ RenderCP.spatial_filter_radius := 0.001; {?} //defFilterRadius;
+ RenderCP.Transparency := true; // always generate transparency here
+
+ GlobalMemoryInfo.dwLength := SizeOf(GlobalMemoryInfo);
+ GlobalMemoryStatus(GlobalMemoryInfo);
+ Mem := GlobalMemoryInfo.dwAvailPhys;
+
+ if (singleBuffer) then bs := 16
+ else bs := 32;
+
+// if Output.Lines.Count >= 1000 then Output.Lines.Clear;
+ Trace1('--- Previewing "' + RenderCP.name + '" ---');
+ Trace1(Format(' Available memory: %f Mb', [Mem / (1024*1024)]));
+ ApproxMem := int64(RenderCp.Width) * int64(RenderCp.Height) {* sqr(Oversample)}
+ * (bs + 4 + 4); // +4 for temp image(s)...?
+ assert(MainPreviewScale <> 0);
+ if ApproxMem * sqr(MainPreviewScale) < Mem then begin
+ if ExtendMainPreview then begin
+ RenderCP.sample_density := RenderCP.sample_density / sqr(MainPreviewScale);
+ RenderCP.Width := round(RenderCp.Width * MainPreviewScale);
+ RenderCP.Height := round(RenderCp.Height * MainPreviewScale);
+ end;
+ end
+ else Trace1('WARNING: Not enough memory for extended preview!');
+ if ApproxMem > Mem then
+ Trace1('OUTRAGEOUS: Not enough memory even for normal preview! :-(');
+ Trace1(Format(' Size: %dx%d, Quality: %f',
+ [RenderCP.Width, RenderCP.Height, RenderCP.sample_density]));
+ FViewOldPos.x := FViewPos.x;
+ FViewOldPos.y := FViewPos.y;
+ StartTime := Now;
+ try
+ Renderer := TRenderThread.Create;
+ Renderer.TargetHandle := MainForm.Handle;
+ if TraceLevel > 0 then Renderer.Output := TraceForm.MainTrace.Lines;
+ Renderer.OnProgress := OnProgress;
+ Renderer.SetCP(RenderCP);
+ // Renderer.NrThreads := NrTreads;
+
+ Trace2('Starting RenderThread #' + inttostr(Renderer.ThreadID));
+ Renderer.Resume;
+
+ Image.Cursor := crAppStart;
+ except
+ Trace1('ERROR: Cannot start renderer!');
+ end;
+ RenderCP.Free;
+
+ end;
+end;
+
+{ ************************** IFS and triangle stuff ************************* }
+
+function FlameToString(Title: string): string;
+{ Creates a string containing the formated flame parameter set }
+var
+ I: integer;
+ sl, Strings: TStringList;
+begin
+ Strings := TStringList.Create;
+ sl := TStringList.Create;
+ try
+ Strings.Add(CleanEntry(Title) + ' {');
+ MainCp.SaveToStringList(sl);
+ Strings.Add(sl.text);
+ Strings.Add('palette:');
+ for i := 0 to 255 do
+ begin
+ Strings.Add(IntToStr(MainCp.cmap[i][0]) + ' ' +
+ IntToStr(MainCp.cmap[i][1]) + ' ' +
+ IntToStr(MainCp.cmap[i][2]))
+ end;
+ Strings.Add('}');
+ Result := Strings.Text;
+ finally
+ sl.Free;
+ Strings.Free;
+ end;
+end;
+
+procedure TMainForm.RandomBatch;
+{ Write a series of random ifs to a file }
+var
+ i: integer;
+ F: TextFile;
+ b, RandFile: string;
+begin
+ b := IntToStr(BatchSize);
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ try
+ AssignFile(F, AppPath + randFilename);
+ OpenFile := AppPath + randFilename;
+ ReWrite(F);
+ WriteLn(F, ''); // AV: fixed '');
+ for i := 0 to BatchSize - 1 do
+ begin
+ inc(RandomIndex);
+ Statusbar.SimpleText := Format(TextByKey('main-status-batchgenerate'), [(i+1), b]);
+ RandSeed := MainSeed;
+ if randGradient = 0 then cmap_index := random(NRCMAPS);
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ RandomizeCP(MainCp);
+ MainCp.CalcBoundbox;
+ MainCp.name := RandomPrefix + RandomDate + '-' + IntToStr(RandomIndex);
+ Write(F, FlameToXML(MainCp, False, false));
+ end;
+ Write(F, ' '); // AV: fixed '');
+ CloseFile(F);
+ except
+ on EInOutError do
+ Application.MessageBox(PChar(TextByKey('main-status-batcherror')), PChar('Apophysis'), 16);
+ end;
+ RandFile := AppPath + randFilename;
+ MainCp.name := '';
+end;
+
+{ ******************************** Menu ************************************ }
+
+function LoadXMLFlameText(filename, name: string) : string;
+var
+ i, p: integer;
+ FileStrings: TStringList;
+ ParamStrings: TStringList;
+ Tokens: TStringList;
+ time: integer;
+begin
+ time := -1;
+ FileStrings := TStringList.Create;
+ ParamStrings := TStringList.Create;
+ Result := '';
+
+ if pos('*untitled', name) <> 0 then
+ begin
+ Tokens := TStringList.Create;
+ GetTokens(name, tokens);
+ time := StrToInt(tokens[1]);
+ Tokens.free;
+ end;
+ try
+ { if UpperCase(ExtractFileExt(filename)) = '.PNG' then
+ FileStrings.Text := MainForm.LoadXMLFlameTextPNG(filename)
+ else }
+ FileStrings.LoadFromFile(filename);
+
+ for i := 0 to FileStrings.Count - 1 do
+ begin
+ pname := '';
+ ptime := '';
+ p := Pos(' 0) then
+ begin
+ MainForm.ListXMLScanner.LoadFromBuffer(TCharType(TStringType(FileStrings[i])));
+ MainForm.ListXMLScanner.Execute;
+ if pname <> '' then
+ begin
+ if (Trim(pname) = Trim(name)) then
+ begin
+ ParamStrings.Add(FileStrings[i]);
+ Break;
+ end;
+ end
+ else
+ begin
+ if ptime <> '' then
+ begin
+ if StrToInt(ptime) = time then
+ begin
+ ParamStrings.Add(FileStrings[i]);
+ Break;
+ end;
+ end;
+ end;
+ end;
+ end;
+ repeat
+ inc(i);
+ ParamStrings.Add(FileStrings[i]);
+ until pos(' ', Lowercase(FileStrings[i])) <> 0;
+
+ Result := ParamStrings.Text;
+
+ finally
+ FileStrings.free;
+ ParamStrings.free;
+ end;
+end;
+
+procedure AddThumbnail(renderer : TRenderer; width, height : double);
+var
+ Bmp: TBitmap;
+ x, y : double;
+begin
+ Bmp := TBitmap.Create;
+ Bmp.PixelFormat := pf24bit;
+ Bmp.HandleType := bmDIB;
+ Bmp.Width := ThumbnailSize;
+ Bmp.Height := ThumbnailSize;
+
+ x := ThumbnailSize / 2;
+ y := ThumbnailSize / 2;
+
+ x := x - width / 2;
+ y := y - height / 2;
+
+ with Bmp.Canvas do begin
+ Brush.Color := GetSysColor(5); // window background
+ FillRect(Rect(0, 0, Bmp.Width, Bmp.Height));
+ Draw(round(x), round(y), renderer.GetImage);
+ end;
+
+ MainForm.UsedThumbnails.Add(bmp, nil);
+
+ if (Bmp <> nil) then Bmp.Free;
+end;
+
+function ScanVariations(name:string):boolean;
+var
+ i,count:integer;
+ vname:string;
+begin
+ count:=NrVar;
+ for i:=0 to count - 1 do
+ begin
+ vname := VarNames(i);
+ if (vname = name) then
+ begin
+ Result := true;
+ exit;
+ end;
+ end;
+ for i := 0 to MainForm.SubstSource.Count - 1 do
+ begin
+ vname := MainForm.SubstSource[i];
+ if (vname = name) then
+ begin
+ Result := true;
+ exit;
+ end;
+ end;
+ Result := false;
+end;
+function ScanVariables(name:string):boolean;
+var
+ i,count:integer;
+begin
+ count:=GetNrVariableNames;
+ for i:=0 to count - 1 do
+ begin
+ if (GetVariableNameAt(i) = name) then
+ begin
+ Result := true;
+ exit;
+ end;
+ end;
+ for i := 0 to MainForm.SubstSource.Count - 1 do
+ begin
+ if (MainForm.SubstSource[i] = name) then
+ begin
+ Result := true;
+ exit;
+ end;
+ end;
+ Result := false;
+end;
+
+procedure TMainForm.mnuOpenClick(Sender: TObject);
+var
+ fn: string;
+begin
+ //ScriptEditor.Stopped := True;
+ MainMenuClick(nil); // AV
+
+ OpenDialog.Filter := TextByKey('common-filter-flamefiles') + '|*.flame;*.xml|'
+ + TextByKey('common-filter-templatefiles') + ' |*.template;*.temp|'
+ + TextByKey('common-filter-undofiles') + '|*.undo;*.apo|'
+ + TextByKey('common-filter-allfiles') + '|*.*';
+ OpenDialog.InitialDir := ParamFolder;
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(MainForm, '.flame', OpenDialog.Filter, OpenDialog.InitialDir,
+ TextByKey('common-browse'), fn, true, false, false, true) then
+ begin
+ OpenDialog.FileName := fn;
+ MainForm.CurrentFileName := OpenDialog.FileName;
+ LastOpenFile := OpenDialog.FileName;
+ Maincp.name := '';
+ ParamFolder := ExtractFilePath(OpenDialog.FileName);
+ OpenFile := OpenDialog.FileName;
+ //MainForm.Caption := AppVersionString + ' - ' + OpenFile; // --Z--
+ if APP_BUILD = '' then MainForm.Caption := AppVersionString + ' - ' + openFile
+ else MainForm.Caption := AppVersionString + ' ' + APP_BUILD + ' - ' + openFile;
+ OpenFileType := ftXML;
+ (* if UpperCase(ExtractFileExt(OpenDialog.FileName)) = '.IFS' then
+ begin
+ OpenFileType := ftIfs;
+ Variation := vLinear;
+ VarMenus[0].Checked := True;
+ end; *)
+ if (UpperCase(ExtractFileExt(OpenDialog.FileName)) = '.UNDO') or
+ (UpperCase(ExtractFileExt(OpenDialog.FileName)) = '.APO') then
+ OpenFileType := ftFla; // AV
+ if OpenFileType = ftXML then
+ ListXML(OpenDialog.FileName, 1)
+ else
+ ListIFS(OpenDialog.FileName, 1);
+ end;
+end;
+
+procedure TMainForm.mnuNextClick(Sender: TObject);
+begin
+ with ListView1 do
+ if Items.Count <> 0 then
+ Selected := Items[(Selected.Index + 1) mod Items.Count];
+end;
+
+procedure TMainForm.mnuPreviousClick(Sender: TObject);
+var
+ i: integer;
+begin
+ with ListView1 do
+ if Items.Count <> 0 then
+ begin
+ i := Selected.Index - 1;
+ if i < 0 then i := Items.Count - 1;
+ Selected := Items[i];
+ end;
+end;
+
+procedure TMainForm.mnuListRenameClick(Sender: TObject);
+var
+ i: integer;
+begin
+ if ListView1.SelCount <> 0 then
+ begin
+ if (UndoIndex <> 0) then // AV
+ if Application.MessageBox(PChar(Format(TextByKey('common-confirmrename'),
+ [ListView1.Selected.Caption])), 'Apophysis AV', 36) <> IDYES then exit;
+ ListView1.Items[ListView1.Selected.Index].EditCaption;
+ end;
+end;
+
+procedure TMainForm.mnuCopyUPRClick(Sender: TObject);
+begin
+ Clipboard.SetTextBuf(PChar(UPRString(MainCp, Maincp.name)));
+end;
+
+procedure TMainForm.mnuItemDeleteClick(Sender: TObject);
+var
+ c: boolean;
+begin
+ if ListView1.SelCount <> 0 then
+ begin
+ if ConfirmDelete then
+ begin
+ if (UndoIndex <> 0) then // AV: if the flame is not saved in the list
+ c := Application.MessageBox(
+ PChar(Format(TextByKey('common-confirmdelete'), [ListView1.Selected.Caption])
+ + #32 + TextByKey('common-deletecurrent')), 'Apophysis', 36) = IDYES
+ else
+ c := Application.MessageBox(
+ PChar(Format(TextByKey('common-confirmdelete'), [ListView1.Selected.Caption])), 'Apophysis', 36) = IDYES
+ end
+ else
+ c := True;
+ if c then
+ if ListView1.Focused and (ListView1.SelCount <> 0) then
+ begin
+ Application.ProcessMessages;
+ if OpenFileType = ftXML then
+ DeleteXMLEntry(ListView1.Selected.Caption, OpenFile)
+ else
+ DeleteEntry(ListView1.Selected.Caption, OpenFile);
+ {
+ if (ListView1.Selected.Index >= 0) and (ListView1.Selected.Index < UsedThumbnails.Count)
+ and (not ClassicListMode) then
+ UsedThumbnails.Delete(ListView1.Selected.Index);
+ }
+ ListView1.Items.Delete(ListView1.Selected.Index);
+ Application.ProcessMessages;
+ ListView1.Selected := ListView1.ItemFocused;
+ // AV: re-adjust the displayed numbers...
+ if EnumerateFlames.Checked then EnumerateFlamesClick(EnumerateFlames);
+ (*
+ // AV: I set ListView1.IconOptions.AutoArrange := True;
+ // for auto-updating the flame list without redrawing the thumbs.
+ // An alternative (but slow) way to do the same thing:
+
+ if ListView1.Items.Count > 0 then // refresh the list
+ begin
+ i := ListView1.ItemFocused.Index; // AV
+ if OpenFileType = ftXML then
+ UpdateThumbnails // AV
+ else
+ ListIFS(OpenFile, 2); // AV: for undo files
+ // AV: now scroll to the nearest item
+ i := min(i, ListView1.Items.Count - 1);
+ ListView1.Selected := ListView1.Items[i];
+ ListView1.Items[i].MakeVisible(true);
+ end;
+ *)
+ end;
+ end;
+end;
+
+procedure TMainForm.mnuOptionsClick(Sender: TObject);
+var isSmallThumb: boolean;
+begin
+ isSmallThumb := UseSmallThumbnails; // AV
+ OptionsForm.ShowModal;
+ // --Z--
+ StopThread;
+ RedrawTimer.Enabled := True;
+ tbQualityBox.Text := FloatToStr(defSampleDensity);
+ tbShowAlpha.Down := ShowTransparency;
+ if (isSmallThumb <> UseSmallThumbnails) then // update the thumbs
+ begin
+ SetThumbnailProperties; // AV
+ UpdateThumbnails; // AV
+ end;
+ if EnumerateFlames.Checked then EnumerateFlamesClick(EnumerateFlames); // AV
+
+ DrawImageView;
+ UpdateWindows;
+end;
+
+procedure TMainForm.mnuRefreshClick(Sender: TObject);
+begin
+ RedrawTimer.enabled := true;
+end;
+
+procedure TMainForm.mnuRefreshThumbClick(Sender: TObject);
+begin
+ if (ListView1.Selected = nil) or ParseLoadingBatch then exit;
+ RefreshThumbnail; // current only
+end;
+
+procedure TMainForm.mnuNormalWeightsClick(Sender: TObject);
+begin
+ StopThread;
+ UpdateUndo;
+ // TODO: ...something <-- AV: something's done :)
+ MainCp.NormalizeProbabilities;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.mnuRWeightsClick(Sender: TObject);
+begin
+ StopThread;
+ UpdateUndo;
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ MainCp.RandomizeWeights;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.mnuRandomBatchClick(Sender: TObject);
+begin
+ //ScriptEditor.Stopped := True;
+ MainMenuClick(nil); // AV
+
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ RandomBatch;
+ OpenFile := AppPath + randFilename;
+ OpenFileType := ftXML;
+ MainForm.Caption := AppVersionString + ' - ' + TextByKey('main-common-randombatch');
+ ListXML(OpenFile, 1);
+ ListView1.SetFocus; // AV
+ if batchsize = 1 then DrawFlame;
+end;
+
+function GradientString(c: TColorMap): string;
+var
+ strings: TStringList;
+ i, j, cl: integer;
+begin
+ strings := TStringList.Create;
+ for i := 0 to 255 do
+ begin
+ j := round(i * (399 / 255));
+ cl := (c[i][2] shl 16) + (c[i][1] shl 8) + (c[i][0]);
+ strings.Add(' index=' + IntToStr(j) + ' color=' + intToStr(cl));
+ end;
+ Result := Strings.Text;
+ strings.Free;
+end;
+
+function TMainForm.UPRString(cp1: TControlPoint; Entry: string): string;
+{ Returns a string containing an Ultra Fractal parameter set for copying
+ or saving to file }
+var
+ IterDensity, m, i, j: integer;
+ scale, a, b, c, d, e, f, p, v: double;
+ GradStrings, Strings: TStringList;
+ rept, cby, smap, sol: string;
+ uprcenter: array[0..1] of double; // camera center
+ Backcolor: longint;
+ xf_str: string;
+begin
+ cp1.Prepare;
+ uprcenter[0] := cp1.Center[0];
+ uprcenter[1] := cp1.Center[1];
+ cp1.Width := UPRWidth;
+ cp1.Height := UPRHeight;
+ scale := power(2, cp1.zoom) * CalcUPRMagn(cp1);
+ cp1.center[0] := uprCenter[0];
+ cp1.center[1] := uprCenter[1];
+ smap := 'no';
+ sol := 'no';
+ rept := '';
+ cby := 'Hit Frequency';
+ Strings := TStringList.Create;
+ GradStrings := TStringList.Create;
+ try
+ Strings.Add(CleanEntry(Entry) + ' {');
+ Strings.Add('fractal:');
+ Strings.Add(' title="' + CleanUPRTitle(Entry) +
+ '" width=' + IntToStr(UPRWidth) + ' height=' + IntToStr(UPRHeight) + ' layers=1');
+ Strings.Add('layer:');
+ Strings.Add(' method=linear caption="Background" opacity=100 mergemode=normal');
+ Strings.Add('mapping:');
+ Strings.Add(' center=' + floatToStr(cp1.center[0]) + '/' + floatToStr(-cp1.center[1]) +
+ ' magn=' + FloatToStr(scale));
+ Strings.Add('formula:');
+ Strings.Add(' maxiter=1 filename="' + UPRFormulaFile + '" entry="' + UPRFormulaIdent + '"');
+ Strings.Add('inside:');
+ Strings.Add(' transfer=none');
+ Strings.Add('outside:');
+ Strings.Add(' transfer=linear repeat=no ' + 'filename="' + UPRColoringFile + '" entry="'
+ + UPRColoringIdent + '"');
+ if (UPRAdjustDensity) and (scale > 1) then
+ IterDensity := Trunc(UPRSampleDensity * scale * scale)
+ else
+ IterDensity := UPRSampleDensity;
+ Strings.Add(' p_iter_density=' + IntToStr(IterDensity) + ' p_spat_filt_rad=' +
+ Format('%.3g', [UPRFilterRadius]) + ' p_oversample=' + IntToStr(UPROversample));
+ backcolor := 255 shl 24 + cp1.background[0] shl 16 + cp1.background[1] shl 8 + cp1.background[2];
+ Strings.Add(' p_bk_color=' + IntToStr(Backcolor) + ' p_contrast=' + FloatToStr(cp1.Contrast) +
+ ' p_brightness=' + FloatToStr(cp1.Brightness) + ' p_gamma=' + FloatToStr(cp1.Gamma));
+ Strings.Add(' p_white_level=200 p_xforms=' + inttostr(Transforms));
+ for m := 0 to Transforms do
+ begin
+ a := cp1.xform[m].c[0][0];
+ c := cp1.xform[m].c[0][1];
+ b := cp1.xform[m].c[1][0];
+ d := cp1.xform[m].c[1][1];
+ e := cp1.xform[m].c[2][0];
+ f := cp1.xform[m].c[2][1];
+ p := cp1.xform[m].Density;
+ if m < Transforms then xf_str := 'p_xf' + inttostr(m)
+ else begin
+ if cp1.HasFinalXForm = false then break;
+ xf_str := 'p_finalxf';
+ end;
+ Strings.Add(' ' + xf_str + '_p=' + Format('%.6g ', [p]));
+ Strings.Add(' ' + xf_str + '_c=' + floatTostr(cp1.xform[m].color));
+ Strings.Add(' ' + xf_str + '_sym=' + floatTostr(cp1.xform[m].symmetry));
+ Strings.Add(' ' + xf_str + '_cfa=' + Format('%.6g ', [a]) +
+ xf_str + '_cfb=' + Format('%.6g ', [b]) +
+ xf_str + '_cfc=' + Format('%.6g ', [c]) +
+ xf_str + '_cfd=' + Format('%.6g ', [d]));
+ Strings.Add(' ' + xf_str + '_cfe=' + Format('%.6g ', [e]) +
+ ' ' + xf_str + '_cff=' + Format('%.6g ', [f]));
+ for i := 0 to NRVAR-1 do
+ if cp1.xform[m].GetVariation(i) <> 0 then begin
+ Strings.Add(' ' + xf_str + '_var_' + VarNames(i) + '=' +
+ floatToStr(cp1.xform[m].GetVariation(i)));
+ for j:= 0 to GetNrVariableNames - 1 do begin
+ {$ifndef VAR_STR}
+ cp1.xform[m].GetVariable(GetVariableNameAt(j), v);
+ Strings.Add(' ' + xf_str + '_par_' + GetVariableNameAt(j) + '=' + floatToStr(v));
+ {$else}
+ Strings.Add(' ' + xf_str + '_par_' +
+ GetVariableNameAt(j) + '=' + cp1.xform[m].GetVariableStr(GetVariableNameAt(j)));
+ {$endif}
+ end;
+ end;
+ end;
+ Strings.Add('gradient:');
+ Strings.Add(GradientString(cp1.cmap));
+ Strings.Add('}');
+ UPRString := Strings.Text;
+ finally
+ GradStrings.Free;
+ Strings.Free;
+ end;
+end;
+
+procedure TMainForm.mnuRandomClick(Sender: TObject);
+begin
+ StopThread;
+ UpdateUndo;
+ inc(MainSeed);
+ RandomizeCP(MainCp);
+ inc(RandomIndex);
+ MainCp.name := RandomPrefix + RandomDate + '-' +
+ IntToStr(RandomIndex);
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+
+ if AdjustForm.visible then AdjustForm.UpdateDisplay;
+
+ StatusBar.Panels[3].text := maincp.name;
+ ResetLocation;
+ RedrawTimer.Enabled := true;
+ UpdateWindows;
+end;
+
+procedure TMainForm.mnuEqualizeClick(Sender: TObject);
+begin
+ StopThread;
+ UpdateUndo;
+ MainCP.EqualizeWeights;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.mnuEditorClick(Sender: TObject);
+begin
+ EditForm.Show;
+end;
+
+procedure TMainForm.mnuExitClick(Sender: TObject);
+begin
+ MainMenuClick(nil); // AV
+
+ Close;
+end;
+
+procedure TMainForm.mnuSaveUPRClick(Sender: TObject);
+{ Write a UPR to a file }
+begin
+ SaveForm.SaveType := stExportUPR;
+ SaveForm.Filename := UPRPath + 'Apophysis.upr'; // AV
+ SaveForm.Title := maincp.name;
+ if SaveForm.ShowModal = mrOK then
+ begin
+ UPRPath := SaveForm.FileName;
+ SaveUPR(SaveForm.Title, SaveForm.Filename);
+ end;
+end;
+
+procedure TMainForm.mnuSaveAsClick(Sender: TObject);
+{ Save parameters to a file }
+var saved: boolean; // AV
+begin
+ SaveForm.SaveType := stSaveParameters;
+ SaveForm.Filename := SavePath;
+ SaveForm.Title := maincp.name;
+ if SaveForm.ShowModal = mrOK then
+ begin
+ maincp.name := SaveForm.Title;
+ SavePath := SaveForm.Filename;
+ if ExtractFileExt(SavePath) = '' then
+ SavePath := SavePath + '.flame';
+ if (LowerCase(ExtractFileExt(SaveForm.Filename)) = '.undo') or
+ (LowerCase(ExtractFileExt(SaveForm.Filename)) = '.apo') then
+ saved := SaveFlame(maincp, maincp.name, SavePath) // AV
+ else
+ saved := SaveXMLFlame(maincp, maincp.name, SavePath);
+ StatusBar.Panels[3].Text := maincp.name;
+ if (SavePath = OpenFile) and saved then // AV: added status check
+ begin
+ if OpenFileType = ftXML then
+ // AV: fixed re-saving error with OpenDialog.FileName!
+ ListXML(OpenFile, 2, maincp.name) // AV: remember the current position
+ else
+ ListIFS(OpenFile, 0); // AV: fixed re-saving error!
+ end;
+ end;
+end;
+
+procedure TMainForm.mnuSaveAllAsClick(Sender: TObject);
+{ Save all parameters to a file }
+var
+ i, current: integer;
+ currentXML : string;
+begin
+ SaveForm.SaveType := stSaveAllParameters;
+ SaveForm.Filename := SavePath;
+ if SaveForm.ShowModal = mrOK then
+ begin
+ SavePath := SaveForm.Filename;
+ if ExtractFileExt(SavePath) = '' then
+ SavePath := SavePath + '.flame';
+ current := ListView1.ItemIndex;
+ currentXML := Trim(FlameToXML(Maincp, false, true));
+
+ for i := 0 to ListView1.Items.Count-1 do
+ begin
+ // -X- what if there are unsaved changes at the current CP?
+ // AV: this only can be if UndoIndex <> 0
+ if (i = current) and (UndoIndex <> 0) then begin
+ ParseXML(maincp, PCHAR(currentXML), true);
+ SaveXMLFlame(maincp, maincp.name, SavePath);
+ end else begin
+ // AV: cancel unneseccary multiple preview updated
+ LoadXMLFlame(OpenFile, ListView1.Items.Item[i].Caption, false);
+ SaveXMLFlame(maincp, maincp.name, SavePath);
+ end;
+ MainForm.LoadSaveProgress.Position :=
+ round(100 * i / (ListView1.Items.Count - 1)); // AV
+ end;
+ MainForm.LoadSaveProgress.Position := 0; // AV
+ // AV: we don't need to do this because it resets the Undo history!
+ {
+ ListXML(SavePath, 2);
+ if (current < 0) then current := 0;
+ ListView1.Selected := ListView1.Items[current];
+ LoadXMLFlame(SavePath, ListView1.Selected.caption);
+ }
+ end;
+end;
+
+function GradTitle(str: string): string;
+var
+ p: integer;
+begin
+ p := pos('{', str);
+ GradTitle := Trim(copy(str, 1, p - 1));
+end;
+
+procedure TMainForm.DisplayHint(Sender: TObject);
+var
+ T: TComponent;
+begin
+ T := MainForm.FindComponent('StatusBar');
+ if T <> nil then
+ if Application.Hint = '' then
+ begin
+ TStatusBar(T).SimpleText := '';
+ TStatusBar(T).SimplePanel := False;
+ TStatusBar(T).Refresh;
+ end
+ else
+ begin
+ // AV: fixed - someone forgot to change this property
+ TStatusBar(T).SimplePanel := True;
+ TStatusBar(T).SimpleText := Application.Hint;
+ end;
+end;
+
+procedure TMainForm.DownloadPluginsClick(Sender: TObject);
+begin
+ AboutForm.lblPluginsClick(nil);
+end;
+
+procedure TMainForm.MainMenuClick(Sender: TObject);
+begin
+ try // AV: sometimes this damn Stopped causes AccessViolations...
+ if ScriptEditor.btnPause.Down then ScriptEditor.btnPause.Click; // AV
+ ScriptEditor.Stopped := True;
+ except
+ // ?
+ end;
+end;
+
+procedure TMainForm.mnuScreenShotClick(Sender: TObject);
+begin
+ SaveScreenShot('Apophysis Main Window');
+end;
+
+{ ********************************* Form ************************************ }
+
+procedure TMainForm.FavoriteClick(Sender: TObject);
+var
+ i: integer;
+ s: string;
+begin
+ i := TMenuItem(Sender).Tag;
+ Script := favorites[i];
+ if FileExists(Script) then
+ begin
+ ScriptEditor.Editor.Lines.LoadFromFile(Script);
+ s := ExtractFileName(Script);
+ s := Copy(s, 0, length(s) - Length(ExtractFileExt(s)));
+ mnuRun.Caption := Format(TextByKey('main-menu-script-run2'), [s]);
+ btnRunScript.Hint := Format(TextByKey('main-menu-script-run2'), [s]);
+ ScriptEditor.Caption := s;
+ ScriptEditor.RunScript;
+ end else
+ TMenuItem(Sender).Enabled := False;
+end;
+
+procedure TMainForm.ScriptItemClick(Sender: TObject);
+var
+ s: string;
+begin
+ s := AppPath + 'Scripts\' + TMenuItem(Sender).Caption;
+ // AV: fixed Apo7X bug that didn't recognize the new extension
+ if TMenuItem(Sender).Tag = 1 then
+ s := s + '.aposcript'
+ else
+ s := s + '.asc';
+ if FileExists(s) then
+ begin
+ Script := s;
+ ScriptEditor.Editor.Lines.LoadFromFile(Script);
+ s := ExtractFileName(Script);
+ s := RemoveExt(s);
+ mnuRun.Caption := Format(TextByKey('main-menu-script-run2'), [s]);
+ btnRunScript.Hint := Format(TextByKey('main-menu-script-run2'), [s]);
+ ScriptEditor.Caption := s;
+ ScriptEditor.RunScript;
+ end else // if the script was removed or renamed
+ TMenuItem(Sender).Visible := False;
+end;
+
+procedure TMainForm.GetScripts;
+var
+ NewItem, NewItem2, MenuItem: TMenuItem;
+ searchResult: TSearchRec;
+ i: integer;
+ s, path, path1: string;
+ sl: TStringList;
+begin
+
+ sl := TStringList.Create;
+ if FileExists(AppPath + scriptFavsFilename) then
+ begin
+ Favorites.LoadFromFile(AppPath + scriptFavsFilename);
+ if Trim(Favorites.Text) <> '' then
+ begin
+ if Favorites.count <> 0 then
+ begin
+ FavouriteScripts1.Enabled := True;
+ FavouriteScripts1.Clear; // AV: refresh the menu everytime it updates
+ for i := 0 to Favorites.Count - 1 do
+ begin
+ if FileExists(Favorites[i]) then
+ begin
+ NewItem := TMenuItem.Create(FavouriteScripts1); // (Self);
+ if i < 12 then
+ NewItem.ShortCut := TextToShortCut('Ctrl+F' + IntToStr(i + 1));
+ NewItem.Tag := i;
+ s := ExtractFileName(Favorites[i]);
+ sl.Add(s);
+ s := RemoveExt(s);
+
+ MenuItem := Directory1.Find(s); // check the default folder
+ if (MenuItem <> nil) then
+ begin
+ path := LowerCase(ExtractFilePath(Favorites[i]));
+ if (path = LowerCase(AppPath + 'scripts\')) then
+ MenuItem.Free;
+ end;
+
+ NewItem.Caption := s;
+ NewItem.Hint := Format(TextByKey('main-menu-script-run3'), [s]);
+ NewItem.OnClick := FavoriteClick;
+ OnClick := FavoriteClick;
+ FavouriteScripts1.Add(NewItem);
+ end;
+ end;
+ end;
+ Directory1.Caption := TextByKey('main-menu-script-more');
+ end
+ else begin // disable unused items
+ FavouriteScripts1.Enabled := False;
+ Directory1.Caption := TextByKey('main-menu-script-directory');
+ end;
+ end;
+
+ // Try to find regular files matching *.asc in the scripts dir
+ path := AppPath + 'Scripts\*.asc';
+ if FindFirst(path, faAnyFile, searchResult) = 0 then
+ begin
+ Directory1.Enabled := True;
+ repeat
+ NewItem2 := TMenuItem.Create(Directory1); // (Self);
+ s := searchResult.Name;
+ if (sl.IndexOf(s) < 0) then
+ begin
+ s := RemoveExt(s);
+ NewItem2.AutoHotkeys := maManual; // AV: to prevent underlined letters
+ NewItem2.Caption := s;
+ NewItem2.Hint := Format(TextByKey('main-menu-script-run3'), [s]);
+ NewItem2.OnClick := ScriptItemClick;
+ if (Directory1.Find(s) = nil) then Directory1.Add(NewItem2);
+ end;
+ until (FindNext(searchResult) <> 0);
+ FindClose(searchResult);
+ end;
+ // AV: the same procedure for new extensions
+ path := AppPath + 'Scripts\*.aposcript';
+ if FindFirst(path, faAnyFile, searchResult) = 0 then
+ begin
+ Directory1.Enabled := True;
+ repeat
+ NewItem2 := TMenuItem.Create(Directory1); // (Self);
+ s := searchResult.Name;
+ if (sl.IndexOf(s) < 0) then
+ begin
+ s := RemoveExt(s);
+ NewItem2.AutoHotkeys := maManual; // AV: to prevent underlined letters
+ NewItem2.Caption := s;
+ NewItem2.Tag := 1; // AV: to identify scripts with different extensions
+ NewItem2.Hint := Format(TextByKey('main-menu-script-run3'), [s]);
+ NewItem2.OnClick := ScriptItemClick;
+ if (Directory1.Find(s) = nil) then Directory1.Add(NewItem2);
+ end;
+ until (FindNext(searchResult) <> 0);
+ FindClose(searchResult);
+ end;
+ if (Directory1.Count = 0) then Directory1.Enabled := False; // AV
+ sl.Free;
+end;
+
+procedure TMainForm.FormCreate(Sender: TObject);
+var
+ dte: string;
+ cmdl : TCommandLine;
+ Registry: TRegistry;
+ apoUI: string;
+ Layouts: array[0..7] of THandle;
+ lnum, i: byte;
+ ExtSM: HMenu;
+ extStyle: TSearchRec;
+begin
+ ApophysisSVN := APP_VERSION;
+ AppVersionString := APP_NAME +' '+ APP_VERSION;
+
+ SubstSource := TStringList.Create;
+ SubstTarget := TStringList.Create;
+
+ CreateSubstMap;
+ TbBreakWidth := 802;
+
+ ListXmlScanner := TEasyXmlScanner.Create(nil);
+ XmlScanner := TXmlScanner.Create(nil);
+
+ MainForm.ListXmlScanner.Normalize := False;
+ MainForm.ListXmlScanner.OnStartTag := ListXmlScannerStartTag;
+
+ MainForm.XmlScanner.Normalize := False;
+ MainForm.XmlScanner.OnContent := XmlScannerContent;
+ MainForm.XmlScanner.OnEmptyTag := XMLScannerEmptyTag;
+ MainForm.XmlScanner.OnEndTag := XmlScannerEndTag;
+ MainForm.XmlScanner.OnStartTag := XMLScannerStartTag;
+
+ AppPath := ExtractFilePath(Application.ExeName); // AV: moved here
+ ReadSettings;
+
+ InternalBitsPerSample := 0; // AV: now unused
+ // renderBitsPerSample := 0;
+
+ //SaveSettings;
+ LoadLanguage(LanguageFile);
+ InsertStrings;
+
+ AvailableLanguages := TStringList.Create;
+ AvailableLanguages.Add('');
+ ListLanguages;
+
+ MissingPluginList := TStringList.Create; // AV
+
+ C_SyncDllPlugins;
+
+ cmdl := TCommandLine.Create;
+ cmdl.Load;
+
+ if (NXFORMS > 100) then
+ AppVersionString := AppVersionString + ' (' + TextByKey('main-common-title-t500') + ')'
+ else if (NXFORMS < 100) or (cmdl.Lite) then
+ AppVersionString := AppVersionString + ' (' + TextByKey('main-common-title-lite') + ')';
+
+ SplashWindow.SetInfo(TextByKey('splash-loadingui'));
+
+ { //*************** GUI Style Stuff *****************************// }
+
+ // AV: trying to load externals GUI styles
+ apoUI := AppPath + 'Styles\';
+ if FindFirst(apoUI + '*.vsf', faAnyFile, extStyle) = 0 then
+ begin
+ repeat
+ if TStyleManager.IsValidStyle(apoUI + extStyle.Name) then
+ TStyleManager.LoadFromFile(apoUI + extStyle.Name);
+ until (FindNext(extStyle) <> 0);
+ FindClose(extStyle);
+ end;
+
+ { AV: Read Apophysis style name from registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Defaults', False) then
+ if Registry.ValueExists('UIStyle') then begin
+ apoUI := Registry.ReadString('UIStyle');
+ TStyleManager.TrySetStyle(apoUI, false);
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+
+ CreateStyleList; // create Apo GUI style menu...
+ ApplyThemedColors; // AV
+
+ { //******************************************************************// }
+
+ Screen.Cursors[crEditArrow] := LoadCursor(HInstance, 'ARROW_WHITE');
+ Screen.Cursors[crEditMove] := LoadCursor(HInstance, 'MOVE_WB');
+ Screen.Cursors[crEditRotate] := LoadCursor(HInstance, 'ROTATE_WB');
+ Screen.Cursors[crEditScale] := LoadCursor(HInstance, 'SCALE_WB');
+ Caption := AppVersionString + APP_BUILD;
+
+ mnuExportFLame.Enabled := FileExists(flam3Path);
+ mnuExportChaotica.Enabled := FileExists(chaoticaPath + '\chaotica.exe');
+
+ // AV: hack for creating screenshots of Apo windows
+ ExtSM := GetSystemMenu(Handle, False);
+ InsertMenu(ExtSM, UINT(5), MF_ByPosition or MF_Separator, 0, nil);
+ InsertMenu(ExtSM, UINT(6), MF_ByPosition, $C0, PChar(TextByKey('main-menu-screenshot')));
+
+ FMouseMoveState := msDrag;
+ LimitVibrancy := False;
+ Favorites := TStringList.Create;
+ GetScripts;
+ Randomize;
+ MainSeed := Random(123456789);
+ maincp := TControlPoint.Create;
+ ParseCp := TControlPoint.create;
+ MemCp := TControlPoint.Create; // AV
+ OpenFileType := ftXML;
+ Application.OnHint := DisplayHint;
+ CanDrawOnResize := False;
+
+ SplashWindow.SetInfo(TextByKey('splash-loadingsettings'));
+
+ Dte := FormatDateTime('yymmdd', Now);
+ if Dte <> RandomDate then
+ RandomIndex := 0;
+ RandomDate := Dte;
+ mnuExit.ShortCut := TextToShortCut('Alt+F4');
+
+ defKB := Screen.DefaultKbLayout;
+ if SetEngLayout then // AV: switch to English language if needed
+ begin
+ lnum := GetKeyboardLayoutList(High(Layouts) + 1, Layouts);
+ for i := 0 to lnum-1 do
+ if (LoWord(Layouts[i]) and $FF) = Lang_English then
+ begin
+ ActivateKeyboardLayout(Layouts[i], 0);
+ PInteger(@Screen.DefaultKbLayout)^ := -1; // AV: hack - to rewrite a read-only value
+ break;
+ end;
+ end;
+
+ SplashWindow.SetInfo(TextByKey('splash-loadingplugins'));
+ FillVariantMenu;
+
+ tbQualityBox.Text := FloatToStr(defSampleDensity);
+ tbShowAlpha.Down := ShowTransparency;
+ DrawSelection := true;
+ FViewScale := 1;
+
+ { ************ AV: setting flame thumbnails properties *************}
+ case ThumbPrevQual of
+ 0: begin
+ TThumbnailThread.FPreviewDensity := prevLowQuality;
+ mnuLowQuality.Checked := True;
+ end;
+ 1: begin
+ TThumbnailThread.FPreviewDensity := prevMediumQuality;
+ mnuMediumQuality.Checked := True;
+ end;
+ 2: begin
+ TThumbnailThread.FPreviewDensity := prevHighQuality;
+ mnuHighQuality.Checked := True;
+ end;
+ else TThumbnailThread.FPreviewDensity := 1; // just in case...
+ end;
+
+ ThumbnailPlaceholder := TBitmap.Create; // AV
+ SetThumbnailProperties; // AV
+ // AV: deleted duplicated image lists to reduce memory allocation
+ ListView1.LargeImages := UsedThumbnails;
+ // AV: to prevent updating flame list before it's created
+ GeneratingThumbs := True;
+
+ { *******************************************************************}
+
+ if not cmdl.Lite then
+ begin
+ if ClassicListMode = true then
+ btnViewListClick(nil)
+ else
+ btnViewIconsClick(nil);
+ end else
+ begin // AV: Lite version from command line cannot change NXFORM const :(
+ ListView1.ViewStyle := vsReport;
+ ToolBar.Perform(CM_CONTROLCHANGE, WPARAM(btnViewList), 0);
+ ToolBar.Perform(CM_CONTROLCHANGE, WPARAM(btnViewIcons), 0);
+ ToolBar.Perform(CM_CONTROLCHANGE, WPARAM(ToolButton9), 0);
+ TbBreakWidth := TbBreakWidth - (2 * 26 + 1 * 8);
+ end;
+ cmdl.Free; // <-- AV: fixed memory leak
+
+ SaveSettings; // AV: moved back from top to the end
+end;
+
+procedure TMainForm.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+ i: integer;
+ index: integer;
+ mins:integer;
+ cmdl : TCommandLine;
+ fn, flameXML : string;
+ openScript: string;
+ autoScript: TStringList; // AV
+begin
+ tbGuides.Down := EnableGuides;
+
+ { Read position from registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Main', False) then
+ begin
+ if Registry.ValueExists('Left') then
+ MainForm.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ MainForm.Top := Registry.ReadInteger('Top');
+ if Registry.ValueExists('Width') then
+ MainForm.Width := Registry.ReadInteger('Width');
+ if Registry.ValueExists('Height') then
+ MainForm.Height := Registry.ReadInteger('Height');
+ if Registry.ValueExists('SortFlames') then // AV
+ begin
+ if Registry.ReadBool('SortFlames') then SortFlames.Click;
+ end;
+ if Registry.ValueExists('EnumerateFlames') then // AV
+ EnumerateFlames.Checked := Registry.ReadBool('EnumerateFlames');
+ end;
+ Registry.CloseKey;
+
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Defaults', False) then
+ begin // AV
+ if Registry.ValueExists('RandBackColor') then
+ RandBackColor := Registry.ReadInteger('RandBackColor')
+ else RandBackColor := 0; // AV
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+ { Synchronize menus etc..}
+ // should be defaults....
+ SplashWindow.SetInfo(TextByKey('splash-initrenderer'));
+ UndoIndex := 0;
+ UndoMax := 0;
+ index := 1;
+ ListView1.RowSelect := True;
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ Variation := vRandom;
+ Maincp.brightness := defBrightness;
+ maincp.contrast := defContrast; // AV
+ maincp.gamma := defGamma;
+ maincp.vibrancy := defVibrancy;
+ maincp.sample_density := defSampleDensity;
+ maincp.spatial_oversample := defOversample;
+ maincp.spatial_filter_radius := defFilterRadius;
+ maincp.gammaThreshRelative := defGammaThreshold;
+
+ if KeepBackGround and (RandBackColor <> 0) then begin // AV
+ maincp.background[0] := RandBackColor and 255;
+ maincp.background[1] := RandBackColor shr 8 and 255;
+ maincp.background[2] := RandBackColor shr 16 and 255;
+ end;
+
+ inc(MainSeed);
+ RandSeed := MainSeed;
+
+// somehow this doesn't work:
+// Image.Width := BackPanel.Width - 2;
+// Image.Height := BackPanel.Height - 2;
+
+// so we'll do it 'bad' way ;-)
+ Image.Align := alNone;
+
+ SplashWindow.SetInfo(TextByKey('splash-initcolormap'));
+ if FileExists(AppPath + 'Gradients\default.map') then
+ begin
+ DefaultPalette := GradientBrowser.LoadFractintMap(AppPath + 'Gradients\default.map');
+ maincp.cmap := DefaultPalette;
+ end
+ else
+ begin
+ cmap_index := random(NRCMAPS);
+ GetCMap(cmap_index, 1, maincp.cmap);
+ DefaultPalette := maincp.cmap;
+ end;
+ if FileExists(AppPath + randFilename) then
+ DeleteFile(AppPath + randFilename);
+
+ cmdl := TCommandLine.Create;
+ cmdl.Load;
+
+ openScript := '';
+
+ // get filename from command line argument
+ SplashWindow.SetInfo(TextByKey('splash-initbatch'));
+ if ParamCount > 0 then
+ openFile := ParamStr(1)
+ else
+ openFile := defFlameFile;
+
+ if ((openFile = '') or (not FileExists(openFile))) and RememberLastOpenFile then begin
+ openFile := LastOpenFile;
+ index := LastOpenFileEntry;
+ end;
+
+ // if FileExists(openFile) and ((LowerCase(ExtractFileExt(OpenFile)) <> '.asc') or (LowerCase(ExtractFileExt(OpenFile)) <> '.aposcript')) then begin
+ // AV: something's wrong here...
+ if FileExists(openFile) and (not ((LowerCase(ExtractFileExt(OpenFile)) = '.asc') or (LowerCase(ExtractFileExt(OpenFile)) = '.aposcript'))) then begin
+ LastOpenFile := openFile;
+ LastOpenFileEntry := index;
+ end;
+
+ // if (openFile = '') or (not FileExists(openFile)) and ((LowerCase(ExtractFileExt(OpenFile)) <> '.asc') or (LowerCase(ExtractFileExt(OpenFile)) <> '.aposcript')) then
+ // AV: something's wrong here...
+ if (openFile = '') or (not FileExists(openFile)) and
+ (not ((LowerCase(ExtractFileExt(OpenFile)) = '.asc') or (LowerCase(ExtractFileExt(OpenFile)) = '.aposcript'))) then
+ begin
+ MainCp.Width := Image.Width;
+ MainCp.Height := Image.Height;
+ RandomBatch;
+ if APP_BUILD = '' then
+ MainForm.Caption := AppVersionString + ' - ' + TextByKey('main-common-randombatch')
+ else
+ MainForm.Caption := AppVersionString + ' ' + APP_BUILD + ' - ' + TextByKey('main-common-randombatch');
+ OpenFile := AppPath + randFilename;
+ ListXML(OpenFile, 1);
+ OpenFileType := ftXML;
+ if batchsize = 1 then DrawFlame;
+ end
+ else
+ begin
+ if (LowerCase(ExtractFileExt(OpenFile)) = '.apo') or (LowerCase(ExtractFileExt(OpenFile)) = '.undo') then
+ begin
+ ListFlames(OpenFile, 1);
+ OpenFileType := ftFla;
+ end else
+ if (LowerCase(ExtractFileExt(OpenFile)) = '.asc') or (LowerCase(ExtractFileExt(OpenFile)) = '.aposcript') then
+ begin
+ openScript := OpenFile;
+ RandomBatch;
+ if APP_BUILD = '' then
+ MainForm.Caption := AppVersionString + ' - ' + TextByKey('main-common-randombatch')
+ else
+ MainForm.Caption := AppVersionString + ' ' + APP_BUILD + ' - ' + TextByKey('main-common-randombatch');
+ OpenFile := AppPath + randFilename;
+ ListXML(OpenFile, 1);
+ OpenFileType := ftXML;
+ if batchsize = 1 then DrawFlame;
+ end else begin
+ ListXML(OpenFile, 2);
+ OpenFileType := ftXML;
+ MainForm.ListView1.Selected := MainForm.ListView1.Items[index - 1];
+ end;
+ if APP_BUILD = '' then MainForm.Caption := AppVersionString + ' - ' + openFile
+ else MainForm.Caption := AppVersionString + ' ' + APP_BUILD + ' - ' + openFile;
+ end;
+ ListView1.SetFocus; // AV
+ CanDrawOnResize := True;
+ Statusbar.Panels[3].Text := maincp.name;
+
+ AdjustForm.cmbPalette.Items.clear;
+ for i := 0 to NRCMAPS -1 do
+ AdjustForm.cmbPalette.Items.Add(cMapnames[i]);
+ AdjustForm.cmbPalette.ItemIndex := 0;
+
+ // ExportDialog.cmbDepth.ItemIndex := 2; // AV: changed inside ExportForm
+ // DoNotAskAboutChange := false;
+
+ if (AutoSaveFreq = 0) then mins := 1
+ else if (AutoSaveFreq = 1) then mins := 2
+ else if (AutoSaveFreq = 2) then mins := 5
+ else if (AutoSaveFreq = 3) then mins := 10
+ else begin
+ mins := 5;
+ AutoSaveFreq := 2;
+ AutoSaveEnabled := false;
+ end;
+
+ AutoSaveTimer.Interval := 60 * 1000 * mins;
+ AutoSaveTimer.Enabled := AutoSaveEnabled;
+
+ // loading done..now do what is told by cmdline ...
+ if (cmdl.CreateFromTemplate) then begin
+ if FileExists(cmdl.TemplateFile) then begin
+ fn := cmdl.TemplateFile;
+ flameXML := LoadXMLFlameText(fn, cmdl.TemplateName);
+ UpdateUndo;
+
+ ScriptEditor.Stopped := True;
+
+ StopThread;
+ InvokeLoadXML(flameXML);
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ Statusbar.Panels[3].Text := MainCp.name;
+ ResizeImage;
+ RedrawTimer.Enabled := True;
+ Application.ProcessMessages;
+ UpdateWindows;
+ //AdjustForm.TemplateRandomizeGradient;
+ AdjustForm.mnuRandomize.Click;
+ end;
+ end;
+ cmdl.Free; // <-- AV: fixed memory leak
+
+ // .. and run autoexec.asc
+ SplashWindow.SetInfo(TextByKey('splash-execstartupscript'));
+ if (FileExists(AppPath + 'autoexec.asc')) then
+ begin
+ // AV: first we must check that the file is not empty
+ autoScript := TStringList.Create;
+ autoScript.LoadFromFile(AppPath + 'autoexec.asc');
+ if Trim(autoScript.Text) <> '' then // AV
+ begin
+ ScriptEditor.LoadRunAndClear(AppPath + 'autoexec.asc');
+ mnuRun.Caption := TextByKey('main-menu-script-run');
+ btnRunScript.Hint := TextByKey('main-menu-script-run');
+ end;
+ autoScript.Free;
+ end;
+
+ if (openScript <> '') then begin
+ ScriptEditor.LoadScriptFile(openScript);
+ ScriptEditor.Show;
+ end;
+
+ if ScriptEditor.Editor.IsEmpty then // AV: is there any code?
+ begin
+ mnuStop.Enabled := False;
+ btnStopScript.Enabled := False;
+ end;
+
+ SplashWindow.Hide;
+ SplashWindow.Free;
+end;
+
+function TMainForm.SystemErrorMessage: string;
+var
+ P: PChar;
+begin
+ if FormatMessage(Format_Message_Allocate_Buffer + Format_Message_From_System,
+ nil,
+ GetLastError,
+ 0,
+ @P,
+ 0,
+ nil) <> 0 then
+ begin
+ Result := P;
+ LocalFree(Integer(P))
+ end
+ else
+ Result := '';
+end;
+
+function TMainForm.SystemErrorMessage2(errno: cardinal): string;
+var
+ P: PChar;
+begin
+ if FormatMessage(Format_Message_Allocate_Buffer + Format_Message_From_System,
+ nil,
+ errno,
+ 0,
+ @P,
+ 0,
+ nil) <> 0 then
+ begin
+ Result := P;
+ LocalFree(Integer(P))
+ end
+ else
+ Result := '';
+end;
+
+procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ if ConfirmExit and (UndoIndex <> 0) then
+ if Application.MessageBox(PChar(TextByKey('common-confirmexit')), 'Apophysis', MB_ICONWARNING or MB_YESNO) <> IDYES then
+ begin
+ Action := caNone;
+ exit;
+ end;
+
+ if ScriptEditor.btnPause.Down then ScriptEditor.btnPause.Click; // AV
+ ScriptEditor.Stopped := True;
+
+ HtmlHelp(0, nil, HH_CLOSE_ALL, 0);
+ { To capture secondary window positions }
+ if EditForm.visible then EditForm.Close;
+ if AdjustForm.visible then AdjustForm.close;
+ if GradientBrowser.visible then GradientBrowser.close;
+ if MutateForm.visible then MutateForm.Close;
+ if ScriptEditor.visible then ScriptEditor.Close;
+
+ { Stop the render thread }
+ if assigned(Renderer) then Renderer.Terminate;
+ if assigned(Renderer) then Renderer.WaitFor;
+
+ if RenderForm.Visible then RenderForm.Close;
+
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Main', True) then
+ begin
+ if MainForm.WindowState <> wsMaximized then begin
+ Registry.WriteInteger('Top', MainForm.Top);
+ Registry.WriteInteger('Left', MainForm.Left);
+ Registry.WriteInteger('Width', MainForm.Width);
+ Registry.WriteInteger('Height', MainForm.Height);
+ end;
+ Registry.WriteBool('SortFlames', SortFlames.Checked); // AV
+ Registry.WriteBool('EnumerateFlames', EnumerateFlames.Checked); // AV
+ end;
+ finally
+ Registry.Free;
+ end;
+ Application.ProcessMessages;
+ CanDrawOnResize := False;
+ if FileExists(AppPath + randFilename) then
+ DeleteFile(AppPath + randFilename);
+ if FileExists(AppPath + undoFilename) then
+ DeleteFile(AppPath + undoFilename);
+
+ if KeepBackGround then // AV
+ RandBackColor := MainCp.background[2] * 65536 + MainCp.background[1] * 256 + MainCp.background[0];
+ // AV: remember the flame position if the list was sorted
+ if assigned(ListView1.Selected) then
+ LastOpenFileEntry := ListView1.Selected.Index + 1;
+
+ SaveSettings;
+end;
+
+procedure TMainForm.FormDestroy(Sender: TObject);
+var i: word;
+begin
+ if assigned(Renderer) then Renderer.Terminate;
+ if assigned(Renderer) then Renderer.WaitFor;
+ if assigned(Renderer) then Renderer.Free;
+ if assigned(FViewImage) then FViewImage.Free;
+
+ ListXmlScanner.Free; // AV: fixed memory leak
+ XmlScanner.Free; // AV: fixed memory leak
+
+ // AV: all memory leaks with cp.used_plugins are fixed
+ MainCP.free;
+ ParseCp.free;
+ MemCp.free; // AV
+ Favorites.Free;
+
+ SubstSource.Free; // AV: fixed memory leak
+ SubstTarget.Free; // AV: fixed memory leak
+
+ MissingPluginList.Free; // AV
+
+ if assigned(ThumbnailPlaceholder) then
+ begin
+ ThumbnailPlaceholder.Free; // AV: fixed memory leak
+ ThumbnailPlaceholder := nil;
+ end;
+
+ AvailableLanguages.Free; // AV: fixed memory leak
+ for i := 0 to length(Translation.language) - 1 do
+ Translation.language[i].Free; // AV: fixed memory leaks
+
+ ActivateKeyboardLayout(defKB, 0); // AV: restore default user's language
+end;
+
+procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
+var
+ scale: double;
+begin
+ if Key = #27 then begin
+ case FMouseMoveState of
+ msZoomWindowMove:
+ FMouseMoveState := msZoomWindow;
+ msZoomOutWindowMove:
+ FMouseMoveState := msZoomOutWindow;
+ msDragMove:
+ begin
+ FMouseMoveState := msDrag;
+
+ scale := FViewScale * Image.Width / FViewImage.Width;
+ FViewPos.X := FViewPos.X - (FClickRect.Right - FClickRect.Left) / scale;
+ FViewPos.Y := FViewPos.Y - (FClickRect.Bottom - FClickRect.Top) / scale;
+ end;
+ msRotateMove:
+ FMouseMoveState := msRotate;
+ end;
+ DrawImageView;
+ end;
+
+ //ScriptEditor.Stopped := True;
+end;
+
+{ ****************************** Misc controls ****************************** }
+
+procedure TMainForm.BackPanelResize(Sender: TObject);
+begin
+ StopThread;
+ if CanDrawOnResize then
+ reDrawTimer.Enabled := True;
+
+ ResizeImage;
+ DrawImageView;
+end;
+
+ // AV: added the third parameter to prevent multiple updates of the previews
+procedure TMainForm.LoadXMLFlame(filename, name: string; upd: boolean = true);
+var
+ i, p: integer;
+ FileStrings: TStringList;
+ ParamStrings: TStringList;
+ Tokens: TStringList;
+ time: integer;
+begin
+ time := -1;
+ FileStrings := TStringList.Create;
+ ParamStrings := TStringList.Create;
+
+ if pos('*untitled', name) <> 0 then
+ begin
+ Tokens := TStringList.Create;
+ GetTokens(name, tokens);
+ time := StrToInt(tokens[1]);
+ Tokens.free;
+ end;
+ try
+ FileStrings.LoadFromFile(filename);
+ for i := 0 to FileStrings.Count - 1 do
+ begin
+ pname := '';
+ ptime := '';
+ p := Pos(' 0) then
+ begin
+ MainForm.ListXMLScanner.LoadFromBuffer(TCharType(TStringType(FileStrings[i])));
+ MainForm.ListXMLScanner.Execute;
+ if pname <> '' then
+ begin
+ if (Trim(pname) = Trim(name)) then
+ begin
+ ParamStrings.Add(FileStrings[i]);
+ Break;
+ end;
+ end
+ else
+ begin
+ if ptime='' then ptime:='0'; //hack
+ if StrToInt(ptime) = time then
+ begin
+ ParamStrings.Add(FileStrings[i]);
+ Break;
+ end;
+ end;
+ end;
+ end;
+ repeat
+ inc(i);
+ ParamStrings.Add(FileStrings[i]);
+ until pos(' ', Lowercase(FileStrings[i])) <> 0;
+
+ //ScriptEditor.Stopped := True; // AV: I hate this...
+ // If script preview isnit visible, it's useless,
+ // otherwise it loads wrong flame from sripter...
+
+ StopThread;
+ ParseXML(MainCp,ParamStrings.Text, true);
+
+ if upd then
+ begin // AV: to prevent redrawing when saving a batch
+ mnuSaveUndo.Enabled := false;
+ mnuUndo.Enabled := False;
+ mnuPopUndo.Enabled := False;
+ mnuRedo.enabled := False;
+ mnuPopRedo.enabled := False;
+ EditForm.mnuUndo.Enabled := False;
+ EditForm.mnuRedo.enabled := False;
+ EditForm.tbUndo.enabled := false;
+ EditForm.tbRedo.enabled := false;
+ AdjustForm.btnUndo.enabled := false;
+ AdjustForm.btnRedo.enabled := false;
+ btnUndo.Enabled := false;
+ btnRedo.enabled := false;
+
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+
+ UndoIndex := 0;
+ UndoMax := 0;
+ if fileExists(AppPath + undoFilename) then
+ DeleteFile(AppPath + undoFilename);
+ Statusbar.Panels[3].Text := Maincp.name;
+ RedrawTimer.Enabled := True;
+ Application.ProcessMessages;
+
+ EditForm.SelectedTriangle := 0; // (?)
+
+ UpdateWindows;
+ end; // end updates
+
+ finally
+ FileStrings.free;
+ ParamStrings.free;
+ end;
+end;
+
+procedure TMainForm.ResizeImage;
+var
+ pw, ph: integer;
+begin
+ pw := BackPanel.Width - 2;
+ ph := BackPanel.Height - 2;
+ begin
+ if (MainCP.Width / MainCP.Height) > (pw / ph) then
+ begin
+ Image.Width := pw;
+ Image.Height := round(MainCP.Height / MainCP.Width * pw);
+ Image.Left := 1;
+ Image.Top := (ph - Image.Height) div 2;
+ end
+ else begin
+ Image.Height := ph;
+ Image.Width := round(MainCP.Width / MainCP.Height * ph);
+ Image.Top := 1;
+ Image.Left := (pw - Image.Width) div 2;
+ end;
+ end;
+ //MainCP.AdjustScale(Image.Width, Image.Height);
+end;
+
+procedure TMainForm.ListViewColumnClick(Sender: TObject; Column: TListColumn);
+begin // AV
+ if Column = ListView1.Columns[0] then
+ SortFlames.Click // sorting flames alphabetically or chronologically
+ else // if Column = ListView1.Columns[1] then
+ EnumerateFlames.Click;
+end;
+
+procedure TMainForm.ListPopUpPopup(Sender: TObject); // AV
+var
+ i: byte;
+ IsSel: boolean;
+begin
+ IsSel := assigned(ListView1.Selected);
+ mnuListRename.Enabled := IsSel;
+ mnuItemDelete.Enabled := IsSel;
+ mnuRefreshThumb.Enabled := IsSel;
+
+ if ClassicListMode then
+ for i := 2 to 8 do ListPopUp.Items[i].Visible := False
+ else
+ for i := 2 to 8 do ListPopUp.Items[i].Visible := True;
+end;
+
+procedure TMainForm.ListViewDblClick(Sender: TObject);
+begin
+ if not (ClassicListMode or ParseLoadingBatch) then UpdateThumbnails;
+end;
+
+procedure TMainForm.ListViewChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+var
+ FStrings: TStringList;
+ IFSStrings: TStringList;
+ EntryStrings, Tokens: TStringList;
+ SavedPal: Boolean;
+ i, j: integer;
+ floatcolor: double;
+ s: string;
+ Palette: TcolorMap;
+ name:string;
+begin
+ if (ListView1.SelCount <> 0) and (Trim(ListView1.Selected.Caption) <> Trim(maincp.name)) then
+ begin
+ LastOpenFileEntry := ListView1.Selected.Index + 1;
+ RedrawTimer.Enabled := False; //?
+ StopThread;
+
+ if OpenFileType = ftXML then
+ begin
+ name := ListView1.Selected.caption;
+ ParseLoadingBatch := false;
+ LoadXMLFlame(OpenFile, name);
+ AnnoyUser;
+ end
+ else
+ begin
+ SavedPal := false;
+ //ScriptEditor.Stopped := True;
+
+ FStrings := TStringList.Create;
+ IFSStrings := TStringList.Create;
+ Tokens := TStringList.Create;
+ EntryStrings := TStringList.Create;
+ try
+ FStrings.LoadFromFile(OpenFile);
+ for i := 0 to FStrings.count - 1 do
+ if Pos(ListView1.Selected.Caption + ' {', Trim(FStrings[i])) = 1 then
+ break;
+ IFSStrings.Add(FStrings[i]);
+ repeat
+ inc(i);
+ IFSStrings.Add(FStrings[i]);
+ until Pos('}', FStrings[i]) <> 0;
+ maincp.Clear; // initialize control point for new flame;
+ maincp.background[0] := 0;
+ maincp.background[1] := 0;
+ maincp.background[2] := 0;
+ maincp.sample_density := defSampleDensity;
+ maincp.spatial_oversample := defOversample;
+ maincp.spatial_filter_radius := defFilterRadius;
+ if OpenFileType = ftFla then // AV: Undo flame list
+ begin
+ for i := 0 to FStrings.count - 1 do
+ begin
+ if Pos(ListView1.Selected.Caption + ' {', Trim(FStrings[i])) = 1 then
+ break;
+ end;
+ inc(i);
+ while (Pos('}', FStrings[i]) = 0) and (Pos('palette:', FStrings[i]) = 0) do
+ begin
+ EntryStrings.Add(FStrings[i]);
+ inc(i);
+ end;
+ if Pos('palette:', FStrings[i]) = 1 then
+ begin
+ SavedPal := True;
+ inc(i);
+ for j := 0 to 255 do begin
+ s := FStrings[i];
+ GetTokens(s, tokens);
+ floatcolor := StrToFloat(Tokens[0]);
+ Palette[j][0] := round(floatcolor);
+ floatcolor := StrToFloat(Tokens[1]);
+ Palette[j][1] := round(floatcolor);
+ floatcolor := StrToFloat(Tokens[2]);
+ Palette[j][2] := round(floatcolor);
+ inc(i);
+ end;
+ end;
+ FlameString := EntryStrings.Text;
+ maincp.ParseString(FlameString);
+ Transforms := MainCP.NumXForms;
+ end
+ else
+ begin
+ { Open *.ifs File }
+ Variation := vLinear;
+ VarMenus[0].Checked := True;
+ StringToIFS(IFSStrings.Text);
+ SetVariation(maincp);
+ maincp.CalcBoundBox;
+ end;
+ Center[0] := maincp.Center[0];
+ Center[1] := maincp.Center[1];
+ mnuSaveUndo.Enabled := false;
+ mnuUndo.Enabled := False;
+ mnuPopUndo.Enabled := False;
+ mnuRedo.enabled := False;
+ mnuPopRedo.enabled := False;
+ EditForm.mnuUndo.Enabled := False;
+ EditForm.mnuRedo.enabled := False;
+ EditForm.tbUndo.enabled := false;
+ EditForm.tbRedo.enabled := false;
+ AdjustForm.btnUndo.enabled := false;
+ AdjustForm.btnRedo.enabled := false;
+ btnUndo.Enabled := false;
+ btnRedo.enabled := false;
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ // Fix Apophysis 1.0 parameters with negative color parameteres!
+ for i := 0 to Transforms - 1 do
+ if maincp.xform[i].color < 0 then maincp.xform[i].color := 0;
+ if SavedPal then maincp.cmap := Palette;
+ UndoIndex := 0;
+ UndoMax := 0;
+ if fileExists(AppPath + undoFilename) then
+ DeleteFile(AppPath + undoFilename);
+ maincp.name := ListView1.Selected.Caption; // AV: fixed Apo7X bug
+ Statusbar.Panels[3].Text := maincp.name;
+ RedrawTimer.Enabled := True;
+ Application.ProcessMessages;
+ UpdateWindows;
+ finally
+ IFSStrings.Free;
+ FStrings.Free;
+ Tokens.free;
+ EntryStrings.free;
+ end;
+ end;
+ {if ResizeOnLoad then}
+ ResizeImage;
+ end;
+end;
+
+procedure TMainForm.UpdateWindows;
+begin
+ if AdjustForm.visible then AdjustForm.UpdateDisplay;
+ if EditForm.visible then EditForm.UpdateDisplay;
+ if MutateForm.visible then MutateForm.UpdateDisplay;
+ if CurvesForm.Visible then CurvesForm.SetCp(MainCp);
+end;
+
+procedure TMainForm.LoadUndoFlame(index: integer; filename: string);
+var
+ FStrings: TStringList;
+ IFSStrings: TStringList;
+ EntryStrings, Tokens: TStringList;
+ SavedPal: Boolean;
+ i, j: integer;
+ s: string;
+ Palette: TColorMap;
+begin
+ //ScriptEditor.Stopped := True;
+
+ FStrings := TStringList.Create;
+ IFSStrings := TStringList.Create;
+ Tokens := TStringList.Create;
+ EntryStrings := TStringList.Create;
+ try
+ FStrings.LoadFromFile(filename);
+ for i := 0 to FStrings.count - 1 do
+ if Pos(Format('%.4d-', [UndoIndex]), Trim(FStrings[i])) = 1 then
+ break;
+ IFSStrings.Add(FStrings[i]);
+ repeat
+ inc(i);
+ IFSStrings.Add(FStrings[i]);
+ until Pos('}', FStrings[i]) <> 0;
+ for i := 0 to FStrings.count - 1 do
+ begin
+ if Pos(Format('%.4d-', [UndoIndex]), Trim(Lowercase(FStrings[i]))) = 1 then
+ break;
+ end;
+ inc(i);
+ while (Pos('}', FStrings[i]) = 0) and (Pos('palette:', FStrings[i]) = 0) do
+ begin
+ EntryStrings.Add(FStrings[i]);
+ inc(i);
+ end;
+ SavedPal := false;
+ if Pos('palette:', FStrings[i]) = 1 then
+ begin
+ SavedPal := True;
+ inc(i);
+ for j := 0 to 255 do begin
+ s := FStrings[i];
+ GetTokens(s, tokens);
+ Palette[j][0] := StrToInt(Tokens[0]);
+ Palette[j][1] := StrToInt(Tokens[1]);
+ Palette[j][2] := StrToInt(Tokens[2]);
+ inc(i);
+ end;
+ end;
+ maincp.Clear;
+ FlameString := EntryStrings.Text;
+ maincp.zoom := 0;
+ maincp.center[0] := 0;
+ maincp.center[0] := 0;
+ maincp.ParseString(FlameString);
+ maincp.sample_density := defSampleDensity;
+ Center[0] := maincp.Center[0];
+ Center[1] := maincp.Center[1];
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ // Trim undo index from title
+ maincp.name := Copy(Fstrings[0], 6, length(Fstrings[0]) - 7);
+
+ if SavedPal then maincp.cmap := palette;
+ if AdjustForm.visible then AdjustForm.UpdateDisplay;
+
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ finally
+ IFSStrings.Free;
+ FStrings.Free;
+ Tokens.free;
+ EntryStrings.free;
+ end;
+end;
+
+procedure TMainForm.ResetColorSpeedClick(Sender: TObject);
+var i: integer;
+begin
+ StopThread;
+ UpdateUndo;
+ for i := 0 to Transforms-1 do
+ maincp.xform[i].symmetry := 0;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.ResetColorValuesClick(Sender: TObject);
+var i: integer;
+begin
+ StopThread;
+ UpdateUndo;
+ for i := 0 to Transforms-1 do
+ maincp.xform[i].color := 0;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.ResetLocation;
+begin
+ maincp.zoom := 0;
+ //maincp.FAngle := 0;
+ //maincp.Width := Image.Width;
+ //maincp.Height := Image.Height;
+ maincp.CalcBoundBox;
+ center[0] := maincp.center[0];
+ center[1] := maincp.center[1];
+end;
+
+
+procedure TMainForm.ListViewEdited(Sender: TObject; Item: TListItem;
+ var S: string);
+var Discard: boolean;
+begin
+ if (s <> Item.Caption) then
+ begin
+ // AV: fixed 'List index out of bounds' bugs
+ if (s = '') then
+ begin
+ MessageBox(Handle, PChar(TextByKey('save-status-notitle')), PCHar('Apophysis AV'), 48);
+ Discard := True;
+ end else if (ListView1.FindCaption(0, s, false, true, false) <> nil) then
+ begin
+ MessageBox(Handle, PChar(Format(TextByKey('save-status-alreadyexists3'),
+ [s])), PChar('Apophysis AV'), 48);
+ Discard := True;
+ end
+ else if OpenFileType = ftXML then
+ Discard := (not RenameXML(Item.Caption, s))
+ else
+ Discard := (not RenameIFS(Item.Caption, s));
+
+ if Discard then
+ s := Item.Caption
+ else
+ if SortFlames.Checked and EnumerateFlames.Checked then
+ EnumerateFlamesClick(EnumerateFlames);
+ end;
+end;
+
+procedure TMainForm.RedrawTimerTimer(Sender: TObject);
+{ Draw flame when timer fires. This seems to stop a lot of errors }
+begin
+ if FMouseMoveState in [msZoomWindowMove, msZoomOutWindowMove, msDragMove, msRotateMove] then exit;
+
+ RedrawTimer.enabled := False;
+ DrawFlame;
+end;
+
+procedure TMainForm.mnuVRandomClick(Sender: TObject);
+var i: integer;
+begin
+ mnuVRandom.Checked := True;
+ // AV: only one variation can be active here
+ for i := 0 to NRVAR - 1 do
+ VarMenus[i].Checked := False;
+ mnuBuiltinVars.Checked := False;
+ mnuPluginVars.Checked := False;
+ StopThread;
+ UpdateUndo;
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ repeat
+ Variation := vRandom;
+ SetVariation(maincp);
+ until not maincp.blowsup(1000);
+ inc(randomindex);
+ MainCp.name := RandomPrefix + RandomDate + '-' +
+ IntToStr(RandomIndex);
+ ResetLocation;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.mnuGradClick(Sender: TObject);
+begin
+ AdjustForm.UpdateDisplay;
+ AdjustForm.PageControl.TabIndex:=2;
+ AdjustForm.Show;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure swapcolor(var clist: array of cardinal; i, j: integer);
+var
+ t: cardinal;
+begin
+ t := clist[j];
+ clist[j] := clist[i];
+ clist[i] := t;
+end;
+
+function diffcolor(clist: array of cardinal; i, j: integer): cardinal;
+var
+ r1, g1, b1, r2, g2, b2: byte;
+begin
+ r1 := clist[j] and 255;
+ g1 := clist[j] shr 8 and 255;
+ b1 := clist[j] shr 16 and 255;
+ r2 := clist[i] and 255;
+ g2 := clist[i] shr 8 and 255;
+ b2 := clist[i] shr 16 and 255;
+ Result := abs((r1 - r2) * (r1 - r2)) + abs((g1 - g2) * (g1 - g2)) +
+ abs((b1 - b2) * (b1 - b2));
+end;
+
+procedure TMainForm.mnuSmoothGradientClick(Sender: TObject);
+begin
+ SmoothPalette;
+end;
+
+procedure TMainForm.SmoothPalette;
+{ From Draves' Smooth palette Gimp plug-in }
+var
+ Bitmap: TBitMap;
+ JPEG: TJPEGImage;
+ pal: TColorMap;
+ strings: TStringlist;
+ ident, FileName: string;
+ len, len_best, as_is, swapd: cardinal;
+ cmap_best, original, clist: array[0..255] of cardinal;
+ {p, total,} j, rand, tryit, i0, i1, x, y, i, iw, ih: integer;
+ fn: string;
+begin
+ //Total := Trunc(NumTries * TryLength / 100);
+ //p := 0;
+ Bitmap := TBitmap.Create;
+ JPEG := TJPEGImage.Create;
+ strings := TStringList.Create;
+ try
+ begin
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ OpenDialog.Filter := Format('%s|*.bmp;*.dib;*.jpg;*.jpeg|%s|*.bmp;*.dib|%s|*.jpg;*.jpeg|%s|*.*',
+ [TextByKey('common-filter-allimages'), TextByKey('common-filter-bitmap'),
+ TextByKey('common-filter-jpeg'), TextByKey('common-filter-allfiles')]);
+ OpenDialog.InitialDir := ImageFolder;
+ OpenDialog.Title := TextByKey('common-browse');
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(MainForm, OpenDialog.DefaultExt, OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ begin
+ OpenDialog.FileName := fn;
+ ImageFolder := ExtractFilePath(OpenDialog.FileName);
+ Application.ProcessMessages;
+ len_best := 0;
+ if (UpperCase(ExtractFileExt(Opendialog.FileName)) = '.BMP')
+ or (UpperCase(ExtractFileExt(Opendialog.FileName)) = '.DIB') then
+ Bitmap.LoadFromFile(Opendialog.FileName);
+ if (UpperCase(ExtractFileExt(Opendialog.FileName)) = '.JPG')
+ or (UpperCase(ExtractFileExt(Opendialog.FileName)) = '.JPEG') then
+ begin
+ JPEG.LoadFromFile(Opendialog.FileName);
+ with Bitmap do
+ begin
+ Width := JPEG.Width;
+ Height := JPEG.Height;
+ Canvas.Draw(0, 0, JPEG);
+ end;
+ end;
+ iw := Bitmap.Width;
+ ih := Bitmap.Height;
+ for i := 0 to 255 do
+ begin
+ { Pick colors from 256 random pixels in the image }
+ x := random(iw);
+ y := random(ih);
+ clist[i] := Bitmap.canvas.Pixels[x, y];
+ end;
+ original := clist;
+ cmap_best := clist;
+ for tryit := 1 to NumTries do
+ begin
+ clist := original;
+ // scramble
+ for i := 0 to 255 do
+ begin
+ rand := random(256);
+ swapcolor(clist, i, rand);
+ end;
+ // measure
+ len := 0;
+ for i := 0 to 255 do
+ len := len + diffcolor(clist, i, i + 1);
+ // improve
+ for i := 1 to TryLength do
+ begin
+ //inc(p);
+ // StatusBar.SimpleText := Format(TextByKey('main-status-calculatingpalette'), [p div total]);
+ i0 := 1 + random(254);
+ i1 := 1 + random(254);
+ if ((i0 - i1) = 1) then
+ begin
+ as_is := diffcolor(clist, i1 - 1, i1) + diffcolor(clist, i0, i0 + 1);
+ swapd := diffcolor(clist, i1 - 1, i0) + diffcolor(clist, i1, i0 + 1);
+ end
+ else if ((i1 - i0) = 1) then
+ begin
+ as_is := diffcolor(clist, i0 - 1, i0) + diffcolor(clist, i1, i1 + 1);
+ swapd := diffcolor(clist, i0 - 1, i1) + diffcolor(clist, i0, i1 + 1);
+ end
+ else
+ begin
+ as_is := diffcolor(clist, i0, i0 + 1) + diffcolor(clist, i0, i0 - 1) +
+ diffcolor(clist, i1, i1 + 1) + diffcolor(clist, i1, i1 - 1);
+ swapd := diffcolor(clist, i1, i0 + 1) + diffcolor(clist, i1, i0 - 1) +
+ diffcolor(clist, i0, i1 + 1) + diffcolor(clist, i0, i1 - 1);
+ end;
+ if (swapd < as_is) then
+ begin
+ swapcolor(clist, i0, i1);
+ len := abs(len + swapd - as_is);
+ end;
+ end;
+ if (tryit = 1) or (len < len_best) then
+ begin
+ cmap_best := clist;
+ len_best := len;
+ end;
+ end;
+ clist := cmap_best;
+ // clean
+ for i := 1 to 1024 do
+ begin
+ i0 := 1 + random(254);
+ i1 := i0 + 1;
+ as_is := diffcolor(clist, i0 - 1, i0) + diffcolor(clist, i1, i1 + 1);
+ swapd := diffcolor(clist, i0 - 1, i1) + diffcolor(clist, i0, i1 + 1);
+ if (swapd < as_is) then
+ begin
+ swapcolor(clist, i0, i1);
+ len_best := len_best + swapd - as_is;
+ end;
+ end;
+ { Convert to TColorMap, Gradient and save }
+ FileName := lowercase(ExtractFileName(Opendialog.FileName));
+ ident := CleanEntry(FileName);
+ strings.add(ident + ' {');
+ strings.add('gradient:');
+ strings.add(' title="' + CleanUPRTitle(FileName) + '" smooth=no');
+ for i := 0 to 255 do
+ begin
+ pal[i][0] := clist[i] and 255;
+ pal[i][1] := clist[i] shr 8 and 255;
+ pal[i][2] := clist[i] shr 16 and 255;
+ j := round(i * (399 / 255));
+ strings.Add(' index=' + IntToStr(j) + ' color=' + intToStr(clist[i]));
+ end;
+ strings.Add('}');
+ if not DirectoryExists(ExtractFilePath(defSmoothPaletteFile)) then // AV
+ begin
+ CreateDir(AppPath + 'Gradients\');
+ defSmoothPaletteFile := AppPath + 'Gradients\SmoothPalette.ugr';
+ end;
+ SaveGradient(Strings.Text, Ident, defSmoothPaletteFile);
+
+ StopThread;
+ UpdateUndo;
+ maincp.cmap := Pal;
+ maincp.cmapindex := -1;
+ AdjustForm.UpdateDisplay;
+
+ if EditForm.Visible then EditForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+ RedrawTimer.enabled := true;
+
+ end;
+ // StatusBar.SimpleText := '';
+ end;
+ finally
+ Bitmap.Free;
+ JPEG.Free;
+ strings.Free;
+ end;
+end;
+
+procedure TMainForm.SortFlamesClick(Sender: TObject);
+begin
+ StopThread;
+ SortFlames.Checked := not SortFlames.Checked;
+ if SortFlames.Checked then
+ begin
+ ListView1.SortType := stText;
+ // AV: to use Morph scripting method properly
+ ScriptForm.FileList.Sorted := True;
+ if ListView1.Items.Count > 1 then ListView1.AlphaSort;
+ EnumerateFlamesClick(EnumerateFlames);
+ end
+ else begin
+ ListView1.SortType := stNone;
+ ScriptForm.FileList.Sorted := False;
+ if (OpenFile <> '') then
+ if OpenFileType = ftXML then
+ begin
+ if assigned(ListView1.Selected) then
+ ListXML(OpenFile, 2, ListView1.Selected.Caption)
+ else
+ ListXML(OpenFile, 1);
+ end;
+ end;
+end;
+
+procedure TMainForm.Smoothize(const oldpal: TColorMap; const a, b: byte);
+{ AV: this one applies Smooth palette to the current gradient or its part }
+var
+ pal: TColorMap;
+ len, len_best, as_is, swapd: cardinal;
+ cmap_best, original, clist: array[0..255] of cardinal;
+ rand, tryit, i0, i1, i: integer;
+begin
+ try
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ Application.ProcessMessages;
+ len_best := 0;
+ for i := 0 to 255 do
+ clist[i] := OldPal[i, 2] * 65536 + OldPal[i, 1] * 256 + oldpal[i, 0];
+ original := clist;
+ cmap_best := clist;
+ for tryit := 1 to NumTries do
+ begin
+ clist := original;
+ // scramble
+ for i := a to b do
+ begin
+ { Pick color from randomly selected index of the palette }
+ rand := a + random(b - a + 1); // random(256);
+ swapcolor(clist, i, rand);
+ end;
+ // measure
+ len := 0;
+ for i := a to b do
+ len := len + diffcolor(clist, i, i + 1);
+ // improve
+ for i := 1 to TryLength do
+ begin
+ i0 := a + 1 + random(b - a - 1); // 1 + random(254);
+ i1 := a + 1 + random(b - a - 1); // 1 + random(254);
+ if ((i0 - i1) = 1) then
+ begin
+ as_is := diffcolor(clist, i1 - 1, i1) + diffcolor(clist, i0, i0 + 1);
+ swapd := diffcolor(clist, i1 - 1, i0) + diffcolor(clist, i1, i0 + 1);
+ end
+ else if ((i1 - i0) = 1) then
+ begin
+ as_is := diffcolor(clist, i0 - 1, i0) + diffcolor(clist, i1, i1 + 1);
+ swapd := diffcolor(clist, i0 - 1, i1) + diffcolor(clist, i0, i1 + 1);
+ end
+ else
+ begin
+ as_is := diffcolor(clist, i0, i0 + 1) + diffcolor(clist, i0, i0 - 1) +
+ diffcolor(clist, i1, i1 + 1) + diffcolor(clist, i1, i1 - 1);
+ swapd := diffcolor(clist, i1, i0 + 1) + diffcolor(clist, i1, i0 - 1) +
+ diffcolor(clist, i0, i1 + 1) + diffcolor(clist, i0, i1 - 1);
+ end;
+ if (swapd < as_is) then
+ begin
+ swapcolor(clist, i0, i1);
+ len := abs(len + swapd - as_is);
+ end;
+ end;
+ if (tryit = 1) or (len < len_best) then
+ begin
+ cmap_best := clist;
+ len_best := len;
+ end;
+ end;
+ clist := cmap_best;
+ // clean
+ for i := 1 to 1024 do
+ begin
+ i0 := a + 1 + random(b - a - 1); // 1 + random(254);
+ i1 := i0 + 1;
+ as_is := diffcolor(clist, i0 - 1, i0) + diffcolor(clist, i1, i1 + 1);
+ swapd := diffcolor(clist, i0 - 1, i1) + diffcolor(clist, i0, i1 + 1);
+ if (swapd < as_is) then
+ begin
+ swapcolor(clist, i0, i1);
+ len_best := len_best + swapd - as_is;
+ end;
+ end;
+ { Convert to TColorMap }
+ for i := 0 to 255 do
+ begin
+ pal[i][0] := clist[i] and 255;
+ pal[i][1] := clist[i] shr 8 and 255;
+ pal[i][2] := clist[i] shr 16 and 255;
+ end;
+
+ StopThread;
+ UpdateUndo;
+ maincp.cmap := Pal;
+ maincp.cmapindex := -1;
+ AdjustForm.UpdateDisplay;
+
+ if EditForm.Visible then EditForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+ RedrawTimer.enabled := true;
+
+ finally
+ end;
+end;
+
+procedure TMainForm.mnuThumbnailQualityClick(Sender: TObject); // AV
+begin
+ if TMenuItem(Sender).Checked then exit; // prevent unneseccary updating
+ TMenuItem(Sender).Checked := True;
+
+ case TMenuItem(Sender).Tag of
+ 0: TThumbnailThread.FPreviewDensity := prevMediumQuality;
+ 1: TThumbnailThread.FPreviewDensity := prevMediumQuality;
+ 2: TThumbnailThread.FPreviewDensity := prevHighQuality;
+ end;
+ ThumbPrevQual := TMenuItem(Sender).Tag;
+
+ // refresh the list of flame previews
+ if (OpenFile <> '') and (OpenFileType = ftXML) then
+ if not ParseLoadingBatch then UpdateThumbnails;
+end;
+
+procedure TMainForm.mnuToolbarClick(Sender: TObject);
+begin
+ Toolbar.Visible := not Toolbar.Visible;
+ mnuToolbar.Checked := Toolbar.visible;
+end;
+
+procedure TMainForm.mnuTraceClick(Sender: TObject);
+begin
+ TraceForm.Show;
+end;
+
+procedure TMainForm.mnuStatusBarClick(Sender: TObject);
+begin
+ // Statusbar.Visible := not Statusbar.Visible;
+ // AV: fixed Apo7X bug - someone forget to hide other components...
+ BottomDock.Visible := not BottomDock.Visible; // AV
+ mnuStatusbar.Checked := BottomDock.Visible; // Statusbar.visible;
+end;
+
+procedure TMainForm.mnuFileContentsClick(Sender: TObject);
+begin
+ ListBackPanel.Visible := not ListBackPanel.Visible;
+ mnuFileContents.Checked := ListBackPanel.Visible; // ListView1.Visible;
+ if ListBackPanel.Visible then
+ Splitter.Width := 4
+ else
+ Splitter.Width := 0;
+end;
+
+procedure TMainForm.Undo;
+begin
+ if UndoIndex = UndoMax then
+ SaveFlame(maincp, Format('%.4d-', [UndoIndex]) + maincp.name,
+ AppPath + undoFilename);
+ StopThread;
+ Dec(UndoIndex);
+ LoadUndoFlame(UndoIndex, AppPath + undoFilename);
+ mnuRedo.Enabled := True;
+ mnuPopRedo.Enabled := True;
+ btnRedo.Enabled := True;
+ EditForm.mnuRedo.Enabled := True;
+ EditForm.tbRedo.enabled := true;
+ AdjustForm.btnRedo.enabled := true;
+ if UndoIndex = 0 then begin
+ mnuUndo.Enabled := false;
+ mnuPopUndo.Enabled := false;
+ btnUndo.Enabled := false;
+ EditForm.mnuUndo.Enabled := false;
+ EditForm.tbUndo.enabled := false;
+ AdjustForm.btnUndo.enabled := false;
+ end;
+end;
+
+procedure TMainForm.mnuUndoClick(Sender: TObject);
+begin
+ Undo;
+ StatusBar.Panels[3].Text := maincp.name;
+end;
+
+procedure TMainForm.mnuUnflattenClick(Sender: TObject);
+var
+ i, t: integer;
+ refresh: boolean;
+begin
+ StopThread;
+ refresh := False;
+ if maincp.HasFinalXForm then t := Transforms
+ else t := Transforms - 1;
+
+ for i := 0 to t do
+ if maincp.xform[i].GetVariation(1) <> 0 then
+ begin
+ maincp.xform[i].SetVariation(1, 0);
+ refresh := True;
+ end;
+ if refresh then
+ begin
+ UpdateUndo;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ end;
+end;
+
+procedure TMainForm.Redo;
+begin
+ StopThread;
+ Inc(UndoIndex);
+
+ assert(UndoIndex <= UndoMax, 'Undo list index out of range!');
+
+ LoadUndoFlame(UndoIndex, AppPath + undoFilename);
+ mnuUndo.Enabled := True;
+ mnuPopUndo.Enabled := True;
+ btnUndo.Enabled := True;
+ EditForm.mnuUndo.Enabled := True;
+ EditForm.tbUndo.enabled := true;
+ AdjustForm.btnUndo.enabled := true;
+ if UndoIndex = UndoMax then begin
+ mnuRedo.Enabled := false;
+ mnuPopRedo.Enabled := false;
+ btnRedo.Enabled := false;
+ EditForm.mnuRedo.Enabled := false;
+ EditForm.tbRedo.enabled := false;
+ AdjustForm.btnRedo.enabled := false;
+ end;
+end;
+
+procedure TMainForm.mnuRedoClick(Sender: TObject);
+begin
+ Redo;
+ StatusBar.Panels[3].Text := maincp.name;
+end;
+
+// AV: added support for fast preview and params saving without rendering
+// for absolute beginners :)
+procedure TMainForm.mnuExportBitmapClick(Sender: TObject);
+var pic: TPNGObject;
+begin
+ SaveDialog.DefaultExt := 'png';
+ SaveDialog.Filter := Format('%s|*.png', [TextByKey('common-filter-png')]);
+ SaveDialog.Filename := maincp.name;
+ if SaveDialog.Execute then
+ begin
+ try
+ pic := TPNGObject.Create;
+ try
+ pic.Assign(Image.Picture.Bitmap);
+ pic.AddtEXt('ApoFlame', AnsiString(Trim(FlameToXML(Maincp, false, false))));
+ pic.SaveToFile(SaveDialog.Filename);
+ finally
+ pic.Free;
+ end;
+ except
+ Image.Picture.Bitmap.SaveToFile(ChangeFileExt(SaveDialog.FileName, '.bmp'));
+ end;
+ end;
+end;
+
+procedure TMainForm.mnuFullScreenClick(Sender: TObject);
+begin
+ FullScreenForm.ActiveForm := Screen.ActiveForm;
+ FullScreenForm.Width := Screen.Width;
+ FullScreenForm.Height := Screen.Height;
+ FullScreenForm.Top := 0;
+ FullScreenForm.Left := 0;
+ FullScreenForm.cp.Copy(maincp);
+ FullScreenForm.cp.cmap := maincp.cmap;
+ FullScreenForm.center[0] := center[0];
+ FullScreenForm.center[1] := center[1];
+ FullScreenForm.Calculate := True;
+ FullScreenForm.Show;
+end;
+
+procedure TMainForm.mnuRenderClick(Sender: TObject);
+var
+ Ext: string;
+ NewRender: Boolean;
+begin
+ NewRender := True;
+
+ if Assigned(RenderForm.Renderer) then
+ if Application.MessageBox(PChar(TextByKey('render-status-confirmstop')), 'Apophysis', 36) = ID_NO then
+ NewRender := false;
+
+ if NewRender then
+ begin
+
+ if Assigned(RenderForm.Renderer) then RenderForm.Renderer.Terminate;
+ if Assigned(RenderForm.Renderer) then RenderForm.Renderer.WaitFor; // hmm #1
+ RenderForm.ResetControls;
+ RenderForm.PageCtrl.TabIndex := 0;
+
+ case renderFileFormat of
+ 1: Ext := '.bmp';
+ 2: Ext := '.png';
+ 3: Ext := '.jpg';
+ end;
+
+ //RenderForm.caption := 'Render ' + #39 + maincp.name + #39 + ' to Disk';
+ RenderForm.Filename := RenderPath + maincp.name + Ext;
+ RenderForm.SaveDialog.FileName := RenderPath + maincp.name + Ext;
+ RenderForm.txtFilename.Text := ChangeFileExt(RenderForm.SaveDialog.Filename, Ext);
+
+ RenderForm.cp.Copy(MainCP);
+ RenderForm.cp.cmap := maincp.cmap;
+ RenderForm.zoom := maincp.zoom;
+ RenderForm.Center[0] := center[0];
+ RenderForm.Center[1] := center[1];
+ if Assigned(RenderForm.Renderer) then RenderForm.Renderer.WaitFor; // hmm #2
+ end;
+ RenderForm.Show;
+end;
+
+procedure TMainForm.mnuRenderAllClick(Sender: TObject);
+var
+ Ext: string;
+ NewRender: Boolean;
+begin
+ NewRender := True;
+
+ if Assigned(RenderForm.Renderer) then
+ if Application.MessageBox(PChar(TextByKey('render-status-confirmstop')), 'Apophysis', 36) = ID_NO then
+ NewRender := false;
+
+ if NewRender then
+ begin
+
+ if Assigned(RenderForm.Renderer) then RenderForm.Renderer.Terminate;
+ if Assigned(RenderForm.Renderer) then RenderForm.Renderer.WaitFor; // hmm #1
+ RenderForm.ResetControls;
+ RenderForm.PageCtrl.TabIndex := 0;
+
+ case renderFileFormat of
+ 1: Ext := '.bmp';
+ 2: Ext := '.png';
+ 3: Ext := '.jpg';
+ end;
+
+ //RenderForm.caption := 'Render all flames to disk';
+ RenderForm.bRenderAll := true;
+ RenderForm.Filename := RenderPath + maincp.name + Ext;
+ RenderForm.SaveDialog.FileName := RenderForm.Filename;
+ RenderForm.txtFilename.Text := ChangeFileExt(RenderForm.SaveDialog.Filename, Ext);
+
+ RenderForm.cp.Copy(MainCP);
+ RenderForm.cp.cmap := maincp.cmap;
+ RenderForm.zoom := maincp.zoom;
+ RenderForm.Center[0] := center[0];
+ RenderForm.Center[1] := center[1];
+ if Assigned(RenderForm.Renderer) then RenderForm.Renderer.WaitFor; // hmm #2
+ end;
+ RenderForm.Show;
+end;
+
+procedure TMainForm.mnuMutateClick(Sender: TObject);
+begin
+ MutateForm.Show;
+ MutateForm.UpdateDisplay;
+end;
+
+procedure TMainForm.mnuAdjustClick(Sender: TObject);
+begin
+ AdjustForm.UpdateDisplay;
+ AdjustForm.PageControl.TabIndex := 0;
+ AdjustForm.Show;
+end;
+
+procedure TMainForm.mnuResetLocationClick(Sender: TObject);
+var
+ scale: double;
+ dx, dy, cdx, cdy: double;
+ sina, cosa: extended;
+begin
+ StopThread; // AV
+ UpdateUndo;
+ try // AV
+ scale := MainCP.pixels_per_unit / MainCP.Width * power(2, MainCP.zoom);
+ cdx := MainCP.center[0];
+ cdy := MainCP.center[1];
+
+ ResetLocation;
+
+ cdx := MainCP.center[0] - cdx;
+ cdy := MainCP.center[1] - cdy;
+ Sincos(MainCP.FAngle, sina, cosa);
+ if IsZero(sina) then begin
+ dy := cdy*cosa {- cdx*sina};
+ dx := (cdx {+ dy*sina})/cosa;
+ end
+ else begin
+ dx := cdy*sina + cdx*cosa;
+ dy := (dx*cosa - cdx)/sina;
+ end;
+ FViewPos.x := FViewPos.x - dx * scale * Image.Width;
+ FViewPos.y := FViewPos.y - dy * scale * Image.Width;
+
+ FViewScale := FViewScale * MainCP.pixels_per_unit / MainCP.Width * power(2, MainCP.zoom) / scale;
+
+ DrawImageView;
+
+ RedrawTimer.enabled := true;
+ UpdateWindows;
+ except on EMathError do // AV
+ Trace2('Cannot calculate the flame scale and bounds...');
+ end;
+end;
+
+procedure TMainForm.mnuAboutClick(Sender: TObject);
+begin
+ AboutForm.ShowModal;
+end;
+
+procedure TMainForm.mnuOpenGradientClick(Sender: TObject);
+begin
+ GradientBrowser.Filename := GradientFile;
+ GradientBrowser.Show;
+end;
+
+procedure TMainForm.mnuSaveUndoClick(Sender: TObject);
+begin
+ if FileExists(AppPath + undoFilename) then
+ begin
+ SaveDialog.DefaultExt := 'undo';
+ SaveDialog.Filter := TextByKey('common-filter-undofiles') + '|*undo;*.apo';
+ SaveDialog.Filename := maincp.name;
+ if SaveDialog.Execute then
+ begin
+ if FileExists(SaveDialog.Filename) then DeleteFile(SaveDialog.Filename);
+ CopyFile(PChar(AppPath + undoFilename), PChar(SaveDialog.Filename), False);
+ end;
+ end;
+end;
+
+procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+begin
+ if Assigned(RenderForm.Renderer) then
+ if Application.MessageBox(PChar(TextByKey('render-status-confirmstop')), 'Apophysis', 36) = ID_NO then
+ CanClose := False;
+
+ AboutToExit := CanClose;
+end;
+
+procedure TMainForm.FormActivate(Sender: TObject);
+begin
+ if Assigned(Renderer) then Renderer.Priority := tpNormal;
+ mnuPaste.Enabled := FlameInClipboard; // AV
+end;
+
+procedure TMainForm.FormDeactivate(Sender: TObject);
+begin
+ if Assigned(Renderer) then Renderer.Priority := tpLower;
+end;
+
+procedure TMainForm.mnuCalculateColorsClick(Sender: TObject);
+var
+ i: integer;
+begin
+ StopThread;
+ UpdateUndo;
+ for i := 0 to Transforms - 1 do
+ maincp.xform[i].color := i / (transforms - 1);
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.mnuRandomizeColorValuesClick(Sender: TObject);
+var
+ i: integer;
+begin
+ inc(MainSeed);
+ RandSeed := MainSeed;
+ StopThread;
+ UpdateUndo;
+ for i := 0 to Transforms - 1 do
+ maincp.xform[i].color := random;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.mnuEditScriptClick(Sender: TObject);
+begin
+ ScriptEditor.Show;
+end;
+
+procedure TMainForm.mnuRunClick(Sender: TObject);
+begin
+ if not ScriptEditor.Editor.IsEmpty then // AV: is there any code?
+ ScriptEditor.RunScript;
+end;
+
+procedure TMainForm.mnuOpenScriptClick(Sender: TObject);
+begin
+ ScriptEditor.OpenScript;
+end;
+
+procedure TMainForm.mnuStopClick(Sender: TObject);
+begin
+ //ScriptEditor.Stopped := True;
+ // AV: what if script is paused?
+ ScriptEditor.btnStop.Click; // AV
+end;
+
+{
+procedure TMainForm.mnuImportGimpClick(Sender: TObject);
+var
+ flist: tStringList;
+begin
+ flist := TStringList.Create;
+ OpenDialog.Filter := Format('%s|*.*', [TextByKey('common-filter-allfiles')]);
+ try
+ if OpenDialog.Execute then
+ begin
+ flist.loadFromFile(OpenDialog.filename);
+ maincp.clear;
+ maincp.ParseStringList(flist);
+ maincp.Width := Image.Width;
+ maincp.Height := Image.Height;
+ maincp.zoom := 0;
+ maincp.CalcBoundBox;
+ center[0] := maincp.center[0];
+ center[1] := maincp.center[1];
+ RedrawTimer.Enabled := True;
+ Application.ProcessMessages;
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ UpdateWindows;
+ end;
+ finally
+ flist.free;
+ end;
+end;
+}
+
+procedure TMainForm.mnuManageFavoritesClick(Sender: TObject);
+var
+ MenuItem: TMenuItem;
+ i: integer;
+ s: string;
+begin
+ if FavoritesForm.ShowModal = mrOK then
+ begin
+ if favorites.count <> 0 then
+ begin
+ for i := 0 to Favorites.Count - 1 do
+ begin
+ s := ExtractFileName(Favorites[i]);
+ s := Copy(s, 0, length(s) - Length(ExtractFileExt(s)));
+ MenuItem := FavouriteScripts1.Find(s);
+ if MenuItem <> nil then
+ MenuItem.Free;
+ end;
+ end;
+ GetScripts;
+ end;
+end;
+
+procedure TMainForm.DisableFavorites;
+var
+ MenuItem: TMenuItem;
+ i: integer;
+ s: string;
+begin
+ for i := 0 to Favorites.Count - 1 do
+ begin
+ s := ExtractFileName(Favorites[i]);
+ s := Copy(s, 0, length(s) - Length(ExtractFileExt(s)));
+ MenuItem := FavouriteScripts1.Find(s);
+ if MenuItem <> nil then
+ MenuItem.Enabled := False;
+ end;
+end;
+
+procedure TMainForm.EnableFavorites;
+var
+ MenuItem: TMenuItem;
+ i: integer;
+ s: string;
+begin
+ for i := 0 to Favorites.Count - 1 do
+ begin
+ s := ExtractFileName(Favorites[i]);
+ s := Copy(s, 0, length(s) - Length(ExtractFileExt(s)));
+ MenuItem := FavouriteScripts1.Find(s);
+ if MenuItem <> nil then
+ MenuItem.Enabled := True;
+ end;
+end;
+
+procedure TMainForm.EnumerateFlamesClick(Sender: TObject);
+var i: integer;
+begin
+ with MainForm.ListView1.Items do
+ begin
+ BeginUpdate;
+ for i := 0 to Count - 1 do Item[i].SubItems.Clear; // AV: hide the index
+
+ if TMenuItem(Sender).Checked then
+ begin // AV: displaying the index
+ MainForm.ListView1.Column[1].Caption := ' N ';
+ if FlameEnumMode = 0 then
+ for i := 0 to Count - 1 do Item[i].SubItems.Add(IntToStr(i))
+ else
+ for i := 0 to Count - 1 do Item[i].SubItems.Add(IntToStr(i+1));
+ end
+ else
+ MainForm.ListView1.Column[1].Caption := '';
+
+ EndUpdate;
+ end;
+end;
+
+procedure TMainForm.mnuShowFullClick(Sender: TObject);
+begin
+ FullScreenForm.Calculate := False;
+ FullScreenForm.Show;
+end;
+
+procedure TMainForm.mnuImageSizeClick(Sender: TObject);
+begin
+ AdjustForm.UpdateDisplay;
+ AdjustForm.PageControl.TabIndex:=3;
+ AdjustForm.Show;
+end;
+
+procedure TMainForm.AddSymmetryClick(Sender: TObject);
+var finTX: TXForm;
+begin
+ if (Transforms + TMenuItem(Sender).Tag > NXForms) then Exit;
+ StopThread;
+ UpdateUndo;
+ finTX := TXForm.Create;
+ finTX.Assign(MainCp.xform[Transforms]);
+ MainCp.NormalizeProbabilities;
+ add_symmetry_to_control_point(MainCp, TMenuItem(Sender).Tag);
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ MainCp.xform[Transforms].Assign(finTX);
+ ResetLocation;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ finTX.Free;
+end;
+
+procedure TMainForm.AddTemplateClick(Sender: TObject); // AV
+var
+ tmpdir: string;
+begin
+ tmpdir := AppPath + 'Templates\';
+ if not DirectoryExists(tmpdir) then
+ CreateDir(tmpdir);
+
+ with SaveForm do
+ begin
+ SaveType := stSaveTemplate;
+ Filename := tmpdir + 'Fractal Templates.template';
+ Title := maincp.name;
+ ActiveControl := txtTitle;
+ if ShowModal = mrOK then
+ begin
+ maincp.name := Title;
+ SaveXMLFlame(maincp, maincp.name, Filename);
+ StatusBar.Panels[3].Text := maincp.name;
+ end;
+ end;
+end;
+
+procedure TMainForm.AddTileClick(Sender: TObject);
+var finTX: TXForm;
+begin
+ if (Transforms + 6 > NXForms) then Exit;
+ StopThread;
+ UpdateUndo;
+ finTX := TXForm.Create;
+ finTX.Assign(MainCp.xform[Transforms]);
+ MainCp.NormalizeProbabilities;
+ tile_control_point(MainCp, TMenuItem(Sender).Tag);
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ MainCp.xform[Transforms].Assign(finTX);
+ ResetLocation;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ finTX.Free;
+end;
+
+// AV: make a common event handler for Main and Adjust forms
+procedure TMainForm.ApplicationEventsActivate(Sender: TObject);
+begin
+ if GradientInClipboard then
+ begin
+ AdjustForm.mnuPaste.enabled := true;
+ AdjustForm.btnPaste.enabled := true;
+ mnuPaste.enabled := false;
+ end
+ else if FlameInClipboard then
+ begin
+ AdjustForm.mnuPaste.enabled := false;
+ AdjustForm.btnPaste.enabled := false;
+ if (pos('Memorized XForm Parameters', Clipboard.AsText) > 0) then
+ mnuPaste.enabled := False // AV: hack
+ else
+ mnuPaste.Enabled := true;
+ end
+ else
+ begin
+ AdjustForm.mnuPaste.enabled := false;
+ AdjustForm.btnPaste.enabled := false;
+ mnuPaste.enabled := false;
+ end;
+end;
+
+procedure TMainForm.ParseXML(var cp1: TControlPoint; const params: string; const ignoreErrors : boolean);
+var
+ i: integer;
+ h, s, v: real;
+begin
+ CurrentFlame := cp1.name;
+ nxform := 0;
+ FinalXformLoaded := false;
+ ActiveXformSet := 0;
+ XMLPaletteFormat := '';
+ XMLPaletteCount := 0;
+ SurpressHandleMissingPlugins := ignoreErrors;
+
+ ParseCp.Free; // we're creating this CP from the scratch
+ ParseCp := TControlPoint.create; // to reset variables properly (randomize)
+
+ XMLScanner.LoadFromBuffer(TCharType(TStringType(params)));
+ XMLScanner.Execute;
+
+ cp1.copy(ParseCp);
+
+ if (Parsecp.cmapindex = -2) then
+ begin
+ if cp1.cmapindex < NRCMAPS then
+ GetCMap(cp1.cmapindex, 1, cp1.cmap)
+ {else
+ ShowMessage('Palette index too high')};
+
+ if (cp1.hue_rotation > 0) and (cp1.hue_rotation < 1) then
+ for i := 0 to 255 do
+ begin
+ RGBToHSV(cp1.cmap[i][0], cp1.cmap[i][1], cp1.cmap[i][2], h, s, v);
+ h := Round(360 + h + (cp1.hue_rotation * 360)) mod 360;
+ HSVToRGB(h, s, v, cp1.cmap[i][0], cp1.cmap[i][1], cp1.cmap[i][2]);
+ end;
+ end;
+
+ if FinalXformLoaded = false then begin
+ cp1.xform[nxform].Clear;
+ cp1.xform[nxform].symmetry := 1;
+ end;
+
+ if nxform < NXFORMS then
+ for i := nxform to NXFORMS - 1 do
+ cp1.xform[i].density := 0;
+
+ // Check for symmetry parameter
+ if ParseCp.symmetry <> 0 then
+ begin
+ add_symmetry_to_control_point(cp1, ParseCp.symmetry);
+ cp1.symmetry := 0;
+ end;
+
+ cp1.FillUsedPlugins;
+ SurpressHandleMissingPlugins := false;
+end;
+
+procedure TMainForm.PasteFlameXML(flameXML: string); // AV
+begin
+ if (flameXML <> '') then
+ begin
+ UpdateUndo;
+ //ScriptEditor.Stopped := True;
+ MainMenuClick(nil); // AV
+
+ StopThread;
+ ParseXML(MainCP, PCHAR(flameXML), false);
+ AnnoyUser;
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ Statusbar.Panels[3].Text := MainCp.name;
+ if AutoSaveXML then // AV: saving loaded parameters in the current file
+ begin
+ if XMLEntryExists(MainCp.name, OpenFile) then
+ MainCp.name := MainCp.name + ' (new)'; // hmm...
+ if (OpenFile = AppPath + randfilename) then // random batch will be deleted
+ SaveXMLFlame(MainCp, MainCp.name,
+ IfThen(DirectoryExists(ExtractFilePath(AutoSavePath)), ExtractFilePath(AutoSavePath),
+ AppPath) + 'Saved by ApophysisAV.flame'); // :)
+ // AV: display these changes and scroll to the selected item
+ if SaveXMLFlame(MainCp, MainCp.name, OpenFile) then
+ ListXML(OpenFile, 2, MainCp.name);
+ end;
+ ResizeImage;
+ RedrawTimer.Enabled := True;
+ Application.ProcessMessages;
+ UpdateWindows;
+ end;
+end;
+
+procedure TMainForm.mnuPasteClick(Sender: TObject);
+begin
+ //if Clipboard.HasFormat(CF_TEXT) then
+ if FlameInClipboard then // AV
+ PasteFlameXML(Clipboard.AsText);
+end;
+
+procedure TMainForm.mnuCopyClick(Sender: TObject);
+var
+ txt: string;
+ i: integer;
+begin
+ txt := Trim(FlameToXML(Maincp, false, false));
+ Clipboard.SetTextBuf(PChar(txt));
+ mnuPaste.enabled := true;
+
+ AdjustForm.mnuPaste.enabled := False;
+ AdjustForm.btnPaste.enabled := False;
+
+ // AV: for pasting multiple transforms into editor
+ MemCp.Clear;
+ for i := 0 to Maincp.NumXForms - 1 do //FIXME: skip final transform!
+ MemCp.xform[i].Assign(Maincp.xform[i]);
+ EditForm.PasteTransform1.Enabled := True;
+end;
+
+function WinShellExecute(const Operation, AssociatedFile: string): Boolean;
+var
+ a1: string;
+ r: Cardinal;
+begin
+ a1 := Operation;
+ if a1 = '' then
+ a1 := 'open';
+
+ r := ShellExecute(
+ application.handle
+ , pchar(a1)
+ , pchar(AssociatedFile)
+ , ''
+ , ''
+ , SW_SHOWNORMAL
+ );
+ if (r > 32) then WinShellExecute := true
+ else WinShellExecute := false;
+end;
+
+procedure WinShellOpen(const AssociatedFile: string);
+begin
+ WinShellExecute('open', AssociatedFile);
+end;
+
+procedure TMainForm.mnuExportFlameClick(Sender: TObject);
+var
+ FileList: Tstringlist;
+ Ext, ex, Path: string;
+ cp1: TControlPoint;
+begin
+ if not FileExists(flam3Path) then
+ begin
+ Application.MessageBox(PChar(TextByKey('main-status-noflam3')), 'Apophysis', 16);
+ exit;
+ end;
+
+ // AV: we really don't need to waste the memory and create it at startup
+ ExportDialog := TExportDialog.Create(Application); // AV
+ case ExportFileFormat of
+ 1: Ext := 'jpg';
+ 2: Ext := 'ppm';
+ 3: Ext := 'png';
+ end;
+ FileList := TstringList.Create;
+ cp1 := TControlPoint.Create;
+ cp1.copy(Maincp);
+ ExportDialog.ImageWidth := ExportWidth;
+ ExportDialog.ImageHeight := ExportHeight;
+ ExportDialog.Sample_density := ExportDensity;
+ ExportDialog.Filter_Radius := ExportFilter;
+ ExportDialog.Oversample := ExportOversample;
+ try
+ ExportDialog.Filename := RenderPath + Maincp.name + '.' + Ext;
+ if ExportDialog.ShowModal = mrOK then
+ begin
+ ex := ExtractFileExt(ExportDialog.Filename);
+ if ExtractFileExt(ExportDialog.Filename) = '.ppm' then
+ ExportFileFormat := 2
+ else if ExtractFileExt(ExportDialog.Filename) = '.png' then
+ ExportFileFormat := 3
+ else
+ ExportFileFormat := 1;
+ case ExportFileFormat of
+ 1: Ext := 'jpg';
+ 2: Ext := 'ppm';
+ 3: Ext := 'png';
+ end;
+ ExportWidth := ExportDialog.ImageWidth;
+ ExportHeight := ExportDialog.ImageHeight;
+ ExportDensity := ExportDialog.Sample_density;
+ ExportFilter := ExportDialog.Filter_Radius;
+ ExportOversample := ExportDialog.Oversample;
+ ExportBatches := ExportDialog.Batches;
+ ExportEstimator := ExportDialog.Estimator;
+ ExportEstimatorMin := ExportDialog.EstimatorMin;
+ ExportEstimatorCurve := ExportDialog.EstimatorCurve;
+ ExportJitters := ExportDialog.Jitters;
+ ExportGammaTreshold := ExportDialog.GammaTreshold;
+ cp1.sample_density := ExportDensity;
+ cp1.spatial_oversample := ExportOversample;
+ cp1.spatial_filter_radius := ExportFilter;
+ cp1.nbatches := ExportBatches;
+ if (cp1.width <> ExportWidth) or (cp1.Height <> ExportHeight) then
+ cp1.AdjustScale(ExportWidth, ExportHeight);
+ cp1.estimator := ExportEstimator;
+ cp1.estimator_min := ExportEstimatorMin;
+ cp1.estimator_curve := ExportEstimatorCurve;
+ cp1.jitters := ExportJitters;
+ cp1.gamma_threshold := ExportGammaTreshold;
+ FileList.Text := FlameToXML(cp1, true, false);
+ FileList.SaveToFile(ChangeFileExt(ExportDialog.Filename, '.flame'));
+ FileList.Clear;
+ FileList.Add('@echo off');
+ FileList.Add('set verbose=1');
+ FileList.Add('set format=' + Ext);
+ if ExportFileFormat = 1 then
+ FileList.Add('set jpeg=' + IntToStr(JPEGQuality));
+ case ExportDialog.cmbDepth.ItemIndex of
+ 0: FileList.Add('set bits=16');
+ 1: FileList.Add('set bits=32');
+ 2: FileList.Add('set bits=33');
+ 3: FileList.Add('set bits=64');
+ end;
+ if ExportDialog.udStrips.Position > 1 then
+ FileList.Add('set nstrips=' + IntToStr(ExportDialog.udStrips.Position));
+ if (PNGTransparency > 0) then
+ FileList.Add('set transparency=1')
+ else
+ FileList.Add('set transparency=0');
+ FileList.Add('set out=' + ExportDialog.Filename);
+ FileList.Add('@echo Rendering "' + ExportDialog.Filename + '"');
+
+ FileList.Add('"' + flam3Path + '" < "' + ChangeFileExt(ExportDialog.Filename, '.flame') + '"');
+ Path := ExtractFilePath(ExtractFileDir(ExportDialog.Filename) + '\');
+
+ FileList.SaveToFile(ChangeFileExt(ExportDialog.Filename, '.bat'));
+ if ExportDialog.chkRender.Checked then
+ begin
+ SetCurrentDir(Path);
+ WinShellOpen(ChangeFileExt(ExportDialog.Filename, '.bat'));
+ end;
+ end;
+ finally
+ FileList.Free;
+ cp1.free;
+ ExportDialog.Free; // AV
+ end;
+
+end;
+
+////////////////////////////////////////////////////////////////////////////////
+
+procedure ParseCompactColors(cp: TControlPoint; count: integer; in_data: string; alpha: boolean = true);
+ function HexChar(c: Char): Byte;
+ begin
+ case c of
+ '0'..'9': Result := Byte(c) - Byte('0');
+ 'a'..'f': Result := (Byte(c) - Byte('a')) + 10;
+ 'A'..'F': Result := (Byte(c) - Byte('A')) + 10;
+ else
+ Result := 0;
+ end;
+ end;
+var
+ i, pos, len: integer;
+ c: char;
+ data: string;
+begin
+ // diable generating pallete
+ if Parsecp.cmapindex = -2 then
+ Parsecp.cmapindex := -1;
+
+ Assert(Count = 256, 'only 256 color gradients are supported at the moment');
+ data := '';
+ for i := 1 to Length(in_data) do
+ begin
+ c := in_data[i];
+ if CharInSet(c,['0'..'9']+['A'..'F']+['a'..'f']) then data := data + c;
+ end;
+
+ if alpha then len := count * 8
+ else len := count * 6;
+
+ Assert(len = Length(data), 'color-data size mismatch');
+
+ for i := 0 to Count-1 do begin
+ if alpha then pos := i*8 + 2
+ else pos := i*6;
+ Parsecp.cmap[i][0] := 16 * HexChar(Data[pos + 1]) + HexChar(Data[pos + 2]);
+ Parsecp.cmap[i][1] := 16 * HexChar(Data[pos + 3]) + HexChar(Data[pos + 4]);
+ Parsecp.cmap[i][2] := 16 * HexChar(Data[pos + 5]) + HexChar(Data[pos + 6]);
+ end;
+end;
+
+procedure TMainForm.ListXmlScannerStartTag(Sender: TObject;
+ TagName: string; Attributes: TAttrList);
+begin
+ pname := String(Attributes.value(TStringType('name')));
+ ptime := String(Attributes.value(TStringType('time')));
+ // pversion := String(Attributes.value(TStringType('version')));
+end;
+
+procedure TMainForm.XMLScannerStartTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+var
+ Tokens: TStringList;
+ v: TStringType;
+ ParsePos, i : integer;
+begin
+ Tokens := TStringList.Create;
+ try
+
+ if TagName='xformset' then // unused in this release...
+ begin
+ v := Attributes.Value(TStringType('enabled'));
+ if v <> '' then ParseCP.finalXformEnabled := (StrToInt(String(v)) <> 0)
+ else ParseCP.finalXformEnabled := true;
+
+ inc(activeXformSet);
+ end
+ else if TagName='flame' then
+ begin
+ BeginParsing;
+
+ v := Attributes.value(TStringType('version')); // AV
+ if (pos('Apophysis 2.0', String(v)) > 0) or (v = '') then
+ oldApo := true else oldApo := false;
+
+ v := Attributes.value(TStringType('name'));
+ if v <> '' then Parsecp.name := String(v) else Parsecp.name := 'untitled';
+ v := Attributes.Value('time');
+ if v <> '' then Parsecp.Time := StrToFloat(String(v));
+ v := Attributes.value('palette');
+ if v <> '' then
+ Parsecp.cmapindex := StrToInt(String(v))
+ else
+ Parsecp.cmapindex := -1;
+ v := Attributes.value('gradient');
+ if v <> '' then
+ Parsecp.cmapindex := StrToInt(String(v))
+ else
+ Parsecp.cmapindex := -1;
+
+ //ParseCP.hue_rotation := 1;
+ v := Attributes.value('hue'); // AV: to animate the palette
+ if v <> '' then
+ Parsecp.hue_rotation := StrToFloat(String(v))
+ else
+ ParseCP.hue_rotation := 1;
+
+ v := Attributes.Value('brightness');
+ if v <> '' then Parsecp.Brightness := StrToFloat(String(v));
+ v := Attributes.Value('gamma');
+ if v <> '' then Parsecp.gamma := StrToFloat(String(v));
+ v := Attributes.Value('contrast'); // AV
+ if v <> '' then Parsecp.contrast := StrToFloat(String(v));
+ v := Attributes.Value('vibrancy');
+ if v <> '' then Parsecp.vibrancy := StrToFloat(String(v));
+ if (LimitVibrancy) and (Parsecp.vibrancy > 1) then Parsecp.vibrancy := 1;
+ v := Attributes.Value('gamma_threshold');
+ if v <> '' then Parsecp.gamma_threshold := StrToFloat(String(v))
+ else Parsecp.gamma_threshold := 0;
+
+ v := Attributes.Value('zoom');
+ if v <> '' then Parsecp.zoom := StrToFloat(String(v));
+ v := Attributes.Value('scale');
+ if v <> '' then Parsecp.pixels_per_unit := StrToFloat(String(v));
+ v := Attributes.Value('rotate');
+ if v <> '' then Parsecp.FAngle := -PI * StrToFloat(String(v))/180;
+ v := Attributes.Value('angle');
+ if v <> '' then Parsecp.FAngle := StrToFloat(String(v));
+
+ // 3d
+ v := Attributes.Value('cam_pitch');
+ if v <> '' then Parsecp.cameraPitch := StrToFloat(String(v));
+ v := Attributes.Value('cam_yaw');
+ if v <> '' then Parsecp.cameraYaw := StrToFloat(String(v));
+ v := Attributes.Value('cam_roll');
+ if v <> '' then Parsecp.cameraRoll := StrToFloat(String(v));
+ v := Attributes.Value('cam_dist');
+ if v <> '' then Parsecp.cameraPersp := 1/StrToFloat(String(v));
+ v := Attributes.Value('cam_perspective');
+ if v <> '' then Parsecp.cameraPersp := StrToFloat(String(v));
+ v := Attributes.Value('cam_zpos');
+ if v <> '' then Parsecp.cameraZpos := StrToFloat(String(v));
+ v := Attributes.Value('cam_dof');
+ if v <> '' then Parsecp.cameraDOF := abs(StrToFloat(String(v)));
+
+ //density estimation
+ v := Attributes.Value('estimator_radius');
+ if v <> '' then Parsecp.estimator := StrToFloat(String(v));
+ v := Attributes.Value('estimator_minimum');
+ if v <> '' then Parsecp.estimator_min := StrToFloat(String(v));
+ v := Attributes.Value('estimator_curve');
+ if v <> '' then Parsecp.estimator_curve := StrToFloat(String(v));
+ v := Attributes.Value('enable_de');
+ if (v = '1') then Parsecp.enable_de := true;
+
+ v := Attributes.Value('new_linear');
+ if (v = '1') then // AV
+ Parsecp.noLinearFix := true
+ else ParseCp.noLinearFix := false;
+
+ v := Attributes.Value('curves');
+ if (v <> '') then begin
+ GetTokens(String(v), tokens);
+ ParsePos := -1;
+ for i := 0 to 3 do
+ begin
+ Inc(ParsePos);ParseCp.curvePoints[i][0].x := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curvePoints[i][0].y := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curveWeights[i][0] := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curvePoints[i][1].x := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curvePoints[i][1].y := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curveWeights[i][1] := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curvePoints[i][2].x := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curvePoints[i][2].y := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curveWeights[i][2] := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curvePoints[i][3].x := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curvePoints[i][3].y := StrToFloat(Tokens[ParsePos]);
+ Inc(ParsePos);ParseCp.curveWeights[i][3] := StrToFloat(Tokens[ParsePos]);
+ end;
+
+ end;
+
+ try
+ v := Attributes.Value('center');
+ GetTokens(String(v), tokens);
+
+ Parsecp.center[0] := StrToFloat(Tokens[0]);
+ Parsecp.center[1] := StrToFloat(Tokens[1]);
+ except
+ Parsecp.center[0] := 0;
+ Parsecp.center[1] := 0;
+ end;
+
+ v := Attributes.Value('size');
+ GetTokens(String(v), tokens);
+
+ Parsecp.width := StrToInt(Tokens[0]);
+ Parsecp.height := StrToInt(Tokens[1]);
+
+ try
+ v := Attributes.Value('background');
+ GetTokens(String(v), tokens);
+
+ Parsecp.background[0] := Floor(StrToFloat(Tokens[0]) * 255);
+ Parsecp.background[1] := Floor(StrToFloat(Tokens[1]) * 255);
+ Parsecp.background[2] := Floor(StrToFloat(Tokens[2]) * 255);
+ except
+ Parsecp.background[0] := 0;
+ Parsecp.background[1] := 0;
+ Parsecp.background[2] := 0;
+ end;
+
+ v := Attributes.Value('soloxform');
+ if v <> '' then Parsecp.soloXform := StrToInt(String(v));
+
+ v := Attributes.Value('plugins');
+ GetTokens(String(v), tokens);
+ if (tokens.Count > 0) then begin
+ ParseCP.used_plugins.Clear;
+
+ for i := 0 to tokens.Count - 1 do
+ ParseCP.used_plugins.Add(tokens[i]);
+ end;
+ (* // AV: commented out since it's useless
+ v := Attributes.Value('nick');
+ if Trim(String(v)) = '' then v := TStringType(SheepNick);
+ Parsecp.Nick := String(v);
+ v := Attributes.Value('url');
+ if Trim(String(v)) = '' then v := TStringType(SheepUrl);
+ Parsecp.URL := String(v);
+ *)
+ end
+ else if TagName='palette' then
+ begin
+ XMLPaletteFormat := String(Attributes.Value('format'));
+ XMLPaletteCount := StrToIntDef(String(Attributes.Value('count')), 256);
+ end;
+ finally
+ Tokens.free;
+ end;
+end;
+
+function flatten_val(Attributes: TAttrList): double;
+var
+ vv: array of double;
+ vn: array of string;
+ i: integer;
+ s: string;
+ d: boolean;
+begin
+ // AV: invert the behavior since it flatten real 3D figures like bubble
+ vn := ['crop', 'auger', 'bipolar', 'blur', 'blur_circle', 'blur_pixelize',
+ 'blur_zoom', 'horseshoe', 'diamond', 'disc', 'bent2', 'escher', 'eyefish',
+ 'fan2', 'flux', 'foci', 'log', 'bwraps', 'juliascope', 'julian', 'mobius',
+ 'noise', 'ngon', 'curl', 'rings2', 'scry', 'spherical', 'spiral', 'cropn',
+ 'swirl', 'wedge', 'checks', 'polar', 'polar2', 'linear', 'cross', 'pdj',
+ 'hyperbolic', 'radial_blur', 'elliptic', 'lazysusan', 'post_smartcrop',
+ 'circlecrop', 'rectangles'];
+
+ SetLength(vv, length(vn)); // AV
+
+ d := false;
+ for i := 0 to High(vn) do
+ begin
+ s := String(Attributes.Value(TStringType(vn[i])));
+ if (s <> '') then vv[i] := StrToFloat(s)
+ else vv[i] := 0;
+ d := d or (vv[i] <> 0);
+ end;
+
+ // AV: changed 0 to 1 and vice versa
+ if (d) then Result := 1
+ else Result := 0;
+
+ SetLength(vv, 0);
+ SetLength(vn, 0);
+end;
+
+function linear_val(Attributes: TAttrList): double;
+var
+ vv: array of double;
+ vn: array of string;
+ i: integer;
+ s: string;
+begin
+ SetLength(vv, 2);
+ vn := ['linear3D', 'linear'];
+
+ Result := 0;
+
+ for i := 0 to 1 do
+ begin
+ s := String(Attributes.Value(TStringType(vn[i])));
+ if (s <> '') then vv[i] := StrToFloat(s)
+ else vv[i] := 0;
+ Result := Result + vv[i];
+ end;
+
+ SetLength(vv, 0);
+ SetLength(vn, 0);
+end;
+
+procedure TMainForm.XmlScannerContent(Sender: TObject; Content: String);
+var i: byte;
+ h, s, v, hue: real;
+begin
+ if XMLPaletteCount <= 0 then begin
+ //ShowMessage('ERROR: No colors in palette!');
+ Application.MessageBox(PChar(TextByKey('common-invalidformat')), 'Apophysis', MB_ICONERROR);
+ exit;
+ end;
+ if XMLPaletteFormat = 'RGB' then
+ begin
+ ParseCompactColors(ParseCP, XMLPaletteCount, Content, false);
+ end
+ else if XMLPaletteFormat = 'RGBA' then
+ begin
+ ParseCompactColors(ParseCP, XMLPaletteCount, Content);
+ end
+ else begin
+ Application.MessageBox(PChar(TextByKey('common-invalidformat')), 'Apophysis', MB_ICONERROR);
+ exit;
+ end;
+ Parsecp.cmapindex := -1;
+
+ // AV: restored hue rotation support, useful for animation
+ hue := Parsecp.hue_rotation;
+ if (hue < 1) and (hue > 0) then
+ for i := 0 to 255 do
+ begin
+ RGBToHSV(Parsecp.cmap[i][0], Parsecp.cmap[i][1], Parsecp.cmap[i][2], h, s, v);
+ h := Round(360 + h + (hue * 360)) mod 360;
+ HSVToRGB(h, s, v, Parsecp.cmap[i][0], Parsecp.cmap[i][1], Parsecp.cmap[i][2]);
+ end;
+
+ XMLPaletteFormat := '';
+ XMLPaletteCount := 0;
+end;
+
+procedure TMainForm.XMLScannerEmptyTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+var
+ i, j, k, vindex: integer; // j, k - AV
+ v, l, s: TStringType;
+ d, floatcolor, vl, n: double;
+ Tokens: TStringList;
+begin
+
+ Tokens := TStringList.Create;
+ try
+ if (TagName = 'xform') or (TagName = 'finalxform') then
+ if {(TagName = 'finalxform') and} (FinalXformLoaded) then Application.MessageBox(PChar(TextByKey('common-invalidformat')), 'Apophysis', MB_ICONERROR)
+ else
+ begin
+ for i := 0 to Attributes.Count - 1 do begin
+ if not ScanVariations(String(attributes.Name(i))) and
+ not ScanVariables(String(attributes.Name(i))) then
+ CheckAttribute(String(Attributes.Name(i)));
+ end;
+ if (TagName = 'finalxform') or (activeXformSet > 0) then FinalXformLoaded := true;
+
+ with ParseCP.xform[nXform] do begin
+ Clear;
+ v := Attributes.Value('weight');
+ if (v <> '') and (TagName = 'xform') then density := StrToFloat(String(v));
+ if (TagName = 'finalxform') then
+ begin
+ v := Attributes.Value('enabled');
+ if v <> '' then ParseCP.finalXformEnabled := (StrToInt(String(v)) <> 0)
+ else ParseCP.finalXformEnabled := true;
+ end;
+
+ if activexformset > 0 then density := 0; // tmp...
+
+ ///////////// AV: checking variation order ////////////////////
+ // TODO: optimize!
+ v := Attributes.Value('var_order');
+ if v <> '' then begin
+ GetTokens(String(v), tokens);
+ k := -1;
+ for j := 0 to Tokens.Count-1 do
+ begin
+ vindex := ifs.IndexOf(Tokens[j]);
+ if vindex >= 0 then
+ begin
+ inc(k);
+ ifs.Move(vindex, k);
+ end;
+ end;
+ end;
+ //////////////////////////////////////////////////////////////
+
+ v := Attributes.Value('color');
+ if v <> '' then color := StrToFloat(String(v));
+ v := Attributes.Value('var_color');
+ if v <> '' then pluginColor := StrToFloat(String(v));
+ v := Attributes.Value('symmetry');
+ if v <> '' then symmetry := StrToFloat(String(v));
+ v := Attributes.Value('coefs');
+ GetTokens(String(v), tokens);
+ if Tokens.Count < 6 then Application.MessageBox(PChar(TextByKey('common-invalidformat')), 'Apophysis', MB_ICONERROR);
+ c[0][0] := StrToFloat(Tokens[0]);
+ c[0][1] := StrToFloat(Tokens[1]);
+ c[1][0] := StrToFloat(Tokens[2]);
+ c[1][1] := StrToFloat(Tokens[3]);
+ c[2][0] := StrToFloat(Tokens[4]);
+ c[2][1] := StrToFloat(Tokens[5]);
+
+ v := Attributes.Value('post');
+ if v <> '' then begin
+ GetTokens(String(v), tokens);
+ if Tokens.Count < 6 then Application.MessageBox(PChar(TextByKey('common-invalidformat')), 'Apophysis', MB_ICONERROR);
+ p[0][0] := StrToFloat(Tokens[0]);
+ p[0][1] := StrToFloat(Tokens[1]);
+ p[1][0] := StrToFloat(Tokens[2]);
+ p[1][1] := StrToFloat(Tokens[3]);
+ p[2][0] := StrToFloat(Tokens[4]);
+ p[2][1] := StrToFloat(Tokens[5]);
+ end;
+
+ v := Attributes.Value('chaos');
+ if v <> '' then begin
+ GetTokens(String(v), tokens);
+ for i := 0 to Tokens.Count-1 do
+ modWeights[i] := Abs(StrToFloat(Tokens[i]));
+ end;
+ //else for i := 0 to NXFORMS-1 do modWeights[i] := 1;
+
+ // for 2.09 flames compatibility
+ v := Attributes.Value('opacity');
+ if v <> '' then begin
+ if StrToFloat(String(v)) = 0.0 then begin
+ transOpacity := 0;
+ end else begin
+ transOpacity := StrToFloat(String(v));
+ end;
+ end;
+
+ // 7x.9 name tag
+ v := Attributes.Value('name');
+ if v <> '' then begin
+ TransformName := String(v);
+ end;
+
+ v := Attributes.Value('plotmode');
+ if v <> '' then begin
+ if v = 'off' then begin
+ transOpacity := 0;
+ end;
+ end;
+
+ // tricky: attempt to convert parameters to 15C+-format if necessary
+ if ParseCp.noLinearFix then
+ for i := 0 to 1 do
+ begin
+ SetVariation(i, 0);
+ v := TStringType(ReadWithSubst(Attributes, varnames(i)));
+ //v := Attributes.Value(AnsiString(varnames(i)));
+ if v <> '' then
+ SetVariation(i, StrToFloat(String(v)));
+ end
+ else begin
+ SetVariation(0, linear_val(Attributes));
+ if ApplyFlatten then // AV
+ SetVariation(1, flatten_val(Attributes));
+ end;
+
+ // now parse the rest of the variations...as usual
+ for i := 2 to NRVAR - 1 do
+ begin
+ SetVariation(i, 0);
+ v := TStringType(ReadWithSubst(Attributes, varnames(i)));
+ //v := Attributes.Value(AnsiString(varnames(i)));
+ if v <> '' then
+ SetVariation(i, StrToFloat(String(v)));
+ end;
+
+ // and the variables
+ for i := 0 to GetNrVariableNames - 1 do begin
+ v := TStringType(ReadWithSubst(Attributes, GetVariableNameAt(i)));
+ //v := Attributes.Value(AnsiString(GetVariableNameAt(i)));
+ if v <> '' then begin
+ {$ifndef VAR_STR}
+ d := StrToFloat(String(v));
+ SetVariable(GetVariableNameAt(i), d);
+ {$else}
+ SetVariableStr(GetVariableNameAt(i), String(v));
+ {$endif}
+ end;
+ end;
+
+ {***** AV: tryig to convert old Apo 2.0x variations into new ones *****}
+ if oldApo then begin
+ // AV: 'perspective' into 'projective'
+ v := Attributes.Value('perspective');
+ s := Attributes.Value('projective');
+ if (v <> '') and (s = '') then // avoid to overwrite
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('projective'), d);
+ v := Attributes.Value('perspective_dist');
+ l := Attributes.Value('perspective_angle');
+ vl := StrToFloat(String(v)); // dist
+ d := StrToFloat(String(l)); // angle
+ n := 0;
+ SetVariable('pr_A', n);
+ SetVariable('pr_B1', n);
+ SetVariable('pr_C1', n);
+ SetVariable('pr_A2', n);
+ SetVariable('pr_C2', n);
+ SetVariable('pr_A1', vl);
+ SetVariable('pr_C', vl);
+ n := -sin(d * pi * 0.5);
+ SetVariable('pr_B', n);
+ n := vl * cos(d * pi * 0.5);
+ SetVariable('pr_B2', n);
+ n := 1;
+ SetVariable('projective_mode', n);
+ end
+ else if (v <> '') and (s <> '') then
+ begin
+ MissingPlugin.MissingPluginList.Add('perspective');
+ MissingPlugin.MissingPluginList.Add('perspective_angle');
+ MissingPlugin.MissingPluginList.Add('perspective_dist');
+ end;
+
+ v := Attributes.Value('rings');
+ s := Attributes.Value('rings2');
+ if (v <> '') and (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('rings2'), d);
+ n := c[2][0];
+ SetVariable('rings2_val', n);
+ n := 1;
+ SetVariable('rings2_old', n);
+ end
+ else if (v <> '') and (s <> '') then
+ MissingPlugin.MissingPluginList.Add('rings');
+
+ v := Attributes.Value('fan');
+ s := Attributes.Value('fan2');
+ if (v <> '') and (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('fan2'), d);
+ n := c[2][0];
+ SetVariable('fan2_x', n);
+ n := c[2][1];
+ SetVariable('fan2_y', n);
+ n := 0; // AV: it is 1 only for 2.09 'fan2'
+ SetVariable('fan2_old', n);
+ end
+ else if (v <> '') and (s <> '') then
+ MissingPlugin.MissingPluginList.Add('fan');
+
+ v := Attributes.Value('bent');
+ if (v <> '') then
+ begin
+ s := Attributes.Value('bent2');
+ if (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('bent2'), d);
+ n := 2;
+ SetVariable('bent2_x', n);
+ n := 0.5;
+ SetVariable('bent2_y', n);
+ n := 1;
+ SetVariable('bent2_z', n);
+ end
+ else MissingPlugin.MissingPluginList.Add('bent');
+ end;
+
+ v := Attributes.Value('waves');
+ s := Attributes.Value('waves2');
+ if (v <> '') and (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('waves2'), d);
+ n := c[1][0];
+ SetVariable('waves2_scalex', n);
+ n := 1/(sqr(c[2][0]) + 1E-300);
+ SetVariable('waves2_freqx', n);
+ n := c[1][1];
+ SetVariable('waves2_scaley', n);
+ n := 1/(sqr(c[2][1]) + 1E-300);
+ SetVariable('waves2_freqy', n);
+ n := 0;
+ SetVariable('waves2_scalez', n);
+ SetVariable('waves2_freqz', n);
+ end
+ else if (v <> '') and (s <> '') then
+ MissingPlugin.MissingPluginList.Add('waves');
+
+ v := Attributes.Value('popcorn');
+ if (v <> '') then
+ begin
+ s := Attributes.Value('popcorn2');
+ if (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('popcorn2'), d);
+ n := c[2][0];
+ SetVariable('popcorn2_x', n);
+ n := c[2][1];
+ SetVariable('popcorn2_y', n);
+ n := 3;
+ SetVariable('popcorn2_c', n);
+ end
+ else MissingPlugin.MissingPluginList.Add('popcorn');
+ end;
+ end; // oldApo
+
+ // AV: Droste into Escher
+ v := Attributes.Value('droste');
+ s := Attributes.Value('escher');
+ if (v <> '') and (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('escher'), d);
+ v := Attributes.Value('droste_r1');
+ l := Attributes.Value('droste_r2');
+ try
+ vl := StrToFloat(String(v)); // r1
+ d := StrToFloat(String(l)); // r2
+ if (vl <> d) then
+ n := 2 * arctan(ln(d / vl) / 2 / pi)
+ else n := 0;
+ SetVariable('escher_beta', n);
+ except
+ n := 0;
+ SetVariable('escher_beta', n);
+ end;
+ end
+ else if (v <> '') and (s <> '') then
+ begin
+ MissingPlugin.MissingPluginList.Add('droste');
+ MissingPlugin.MissingPluginList.Add('droste_r1');
+ MissingPlugin.MissingPluginList.Add('droste_r2');
+ end;
+
+ // Spherical3D into inversion3D
+ v := Attributes.Value('Spherical3D');
+ if (v <> '') and (GetVariationIndex('Spherical3D')< 0) then
+ // if plugin is NOT available
+ begin
+ s := Attributes.Value('inversion3D');
+ if (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('inversion3D'), d);
+ n := 1;
+ SetVariable('inversion3D_radius', n);
+ n := 0;
+ SetVariable('inversion3D_x0', n);
+ SetVariable('inversion3D_y0', n);
+ SetVariable('inversion3D_z0', n);
+ end
+ else MissingPlugin.MissingPluginList.Add('Spherical3D');
+ end;
+
+ // secant into secant2
+ v := Attributes.Value('secant');
+ if (v <> '') and (GetVariationIndex('secant') < 0) then
+ // if plugin is NOT available
+ begin
+ s := Attributes.Value('secant2');
+ if (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('secant2'), d);
+ n := 1;
+ SetVariable('secant2_old', n);
+ end
+ else MissingPlugin.MissingPluginList.Add('secant');
+ end;
+
+ // arch into Z_arch
+ v := Attributes.Value('arch');
+ if (v <> '') then
+ begin
+ s := Attributes.Value('Z_arch');
+ if (s = '') then
+ begin
+ d := StrToFloat(String(v));
+ SetVariation(GetVariationIndex('Z_arch'), d);
+ SetVariable('Z_arch_weight', d);
+ end
+ else MissingPlugin.MissingPluginList.Add('arch');
+ end;
+
+ {*****************************************************************************}
+
+ // legacy variation/variable notation
+ v := Attributes.Value('var1');
+ if v <> '' then
+ begin
+ for i := 0 to NRVAR - 1 do
+ SetVariation(i, 0);
+ SetVariation(StrToInt(String(v)), 1);
+ end;
+ v := Attributes.Value('var');
+ if v <> '' then
+ begin
+ for i := 0 to NRVAR - 1 do
+ SetVariation(i, 0);
+ GetTokens(String(v), tokens);
+ if Tokens.Count > NRVAR then Application.MessageBox(PChar(TextByKey('common-invalidformat')), 'Apophysis', MB_ICONERROR);
+ for i := 0 to Tokens.Count - 1 do
+ SetVariation(i, StrToFloat(Tokens[i]));
+ end;
+ end;
+ Inc(nXform);
+ end;
+ if TagName = 'color' then
+ begin
+ // disable generating palette
+ //if Parsecp.cmapindex = -2 then
+ Parsecp.cmapindex := -1;
+
+ i := StrToInt(String(Attributes.value('index')));
+ v := Attributes.value('rgb');
+ GetTokens(String(v), tokens);
+ floatcolor := StrToFloat(Tokens[0]);
+ Parsecp.cmap[i][0] := round(floatcolor);
+ floatcolor := StrToFloat(Tokens[1]);
+ Parsecp.cmap[i][1] := round(floatcolor);
+ floatcolor := StrToFloat(Tokens[2]);
+ Parsecp.cmap[i][2] := round(floatcolor);
+ end;
+ if TagName = 'colors' then
+ begin
+ ParseCompactcolors(Parsecp, StrToInt(String(Attributes.value('count'))),
+ String(Attributes.value('data')));
+ Parsecp.cmapindex := -1;
+ end;
+ if TagName = 'symmetry' then
+ begin
+ i := StrToInt(String(Attributes.value('kind')));
+ Parsecp.symmetry := i;
+ end;
+ if TagName = 'xdata' then
+ begin
+ Parsecp.xdata := Parsecp.xdata + String(Attributes.value('content'));
+ end;
+ finally
+ Tokens.free;
+ end;
+end;
+
+procedure TMainForm.mnuFlamepdfClick(Sender: TObject);
+begin
+ WinShellOpen('http://www.flam3.com/flame_draves.pdf');
+end;
+
+procedure TMainForm.mnuFlattenClick(Sender: TObject);
+var
+ i, j, t: integer;
+ v: double;
+ refresh: boolean;
+ flat: array of integer;
+begin
+ StopThread;
+ refresh := False;
+ // AV: using new Delphi's feature for dynamic arrays
+ flat := [GetVariationIndex('crop'), GetVariationIndex('auger'),
+ GetVariationIndex('bipolar'), GetVariationIndex('blur'),
+ GetVariationIndex('blur_circle'), GetVariationIndex('blur_pixelize'),
+ GetVariationIndex('blur_zoom'), GetVariationIndex('horseshoe'),
+ GetVariationIndex('diamond'), GetVariationIndex('disc'),
+ GetVariationIndex('bent2'), GetVariationIndex('escher'),
+ GetVariationIndex('eyefish'), GetVariationIndex('fan2'),
+ GetVariationIndex('flux'), GetVariationIndex('foci'),
+ GetVariationIndex('log'), GetVariationIndex('bwraps'),
+ GetVariationIndex('juliascope'), GetVariationIndex('julian'),
+ GetVariationIndex('mobius'), GetVariationIndex('noise'),
+ GetVariationIndex('ngon'), GetVariationIndex('curl'),
+ GetVariationIndex('rings2'), GetVariationIndex('scry'),
+ GetVariationIndex('spherical'), GetVariationIndex('spiral'),
+ GetVariationIndex('circlecrop'), GetVariationIndex('swirl'),
+ GetVariationIndex('wedge'), GetVariationIndex('rectangles'),
+ GetVariationIndex('polar'), GetVariationIndex('polar2'),
+ GetVariationIndex('linear'), GetVariationIndex('cross'),
+ GetVariationIndex('pdj'), GetVariationIndex('hyperbolic'),
+ GetVariationIndex('radial_blur'), GetVariationIndex('elliptic'),
+ GetVariationIndex('lazysusan'), GetVariationIndex('checks'),
+ GetVariationIndex('cropn'), GetVariationIndex('post_smartcrop')];
+
+ if maincp.HasFinalXForm then t := Transforms
+ else t := Transforms - 1;
+
+ for i := 0 to t do
+ for j in flat do // AV: iterate only for chosen variation indices
+ begin
+ if (j < 0) then continue;
+ v := maincp.xform[i].GetVariation(j);
+ if (v <> 0) and (maincp.xform[i].GetVariation(1) = 0) then
+ begin
+ maincp.xform[i].SetVariation(1, 1); // apply flatten
+ refresh := True;
+ end;
+ end;
+
+ if refresh then
+ begin
+ UpdateUndo;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ end;
+
+ SetLength(flat, 0);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.ImageMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+(*
+ if button = mbMiddle then begin
+ //FMouseMoveState := msHeight;
+ exit;
+ end else if button = mbRight then begin
+ //FMouseMoveState := msPitchYaw;
+ camDragValueY := MainCP.cameraPitch * 180.0 / PI;
+ camDragValueX := MainCP.cameraYaw * 180.0 / PI;
+
+ camDragMode := true;
+ camDragPos.x := 0;
+ camDragPos.y := 0;
+ camDragOld.x := x;
+ camDragOld.y := y;
+ camMM := false;
+ //SetCaptureControl(TControl(Sender));
+
+ //Screen.Cursor := crNone;
+ //GetCursorPos(mousepos); // hmmm
+ //mousePos := (Sender as TControl).ClientToScreen(Point(x, y));
+ camDragged := false;
+ exit;
+ end;
+*)
+ if button <> mbLeft then exit;
+ FClickRect.TopLeft := Point(x, y);
+ FClickRect.BottomRight := FClickRect.TopLeft;
+ case FMouseMoveState of
+ msZoomWindow:
+ begin
+ FSelectRect.TopLeft := Point(x, y);
+ FSelectRect.BottomRight := Point(x, y);
+ DrawZoomWindow;
+
+// if ssAlt in Shift then
+// FMouseMoveState := msZoomOutWindowMove
+// else
+ FMouseMoveState := msZoomWindowMove;
+ end;
+ msZoomOutWindow:
+ begin
+ FSelectRect.TopLeft := Point(x, y);
+ FSelectRect.BottomRight := Point(x, y);
+ DrawZoomWindow;
+
+// if ssAlt in Shift then
+// FMouseMoveState := msZoomWindowMove
+// else
+ FMouseMoveState := msZoomOutWindowMove;
+ end;
+ msDrag:
+ begin
+ if not assigned(FViewImage) then exit;
+
+// FSelectRect.TopLeft := Point(x, y);
+// FSelectRect.BottomRight := Point(x, y);
+ FMouseMoveState := msDragMove;
+ end;
+ msRotate:
+ begin
+ FClickAngle := arctan2(y - Image.Height/2, Image.Width/2 - x);
+
+ FRotateAngle := 0;
+// FSelectRect.Left := x;
+ DrawRotateLines(FRotateAngle);
+ FMouseMoveState := msRotateMove;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
+const
+ snap_angle = 0.261799387799149; // AV: the same as 15*pi/180;
+var
+ dx, dy, cx, cy, sgn: integer;
+ sc, vx, vy, scale: double;
+ q : Extended;
+begin
+{
+ case FMouseMoveState of
+ msRotate, msRotateMove:
+ Image.Cursor := crEditRotate;
+ msDrag, msDragMove:
+ Image.Cursor := crEditMove;
+ else
+ Image.Cursor := crEditArrow;
+ end;
+}
+ case FMouseMoveState of
+ msZoomWindowMove,
+ msZoomOutWindowMove:
+ begin
+ if DrawSelection then DrawZoomWindow;
+ FClickRect.BottomRight := Point(x, y);
+ dx := x - FClickRect.TopLeft.X;
+ dy := y - FClickRect.TopLeft.Y;
+
+ if ssShift in Shift then begin
+ if (dy = 0) or (abs(dx/dy) >= Image.Width/Image.Height) then
+ dy := Round(dx / Image.Width * Image.Height)
+ else
+ dx := Round(dy / Image.Height * Image.Width);
+ FSelectRect.Left := FClickRect.TopLeft.X - dx;
+ FSelectRect.Top := FClickRect.TopLeft.Y - dy;
+ FSelectRect.Right := FClickRect.TopLeft.X + dx;
+ FSelectRect.Bottom := FClickRect.TopLeft.Y + dy;
+ end
+ else if ssCtrl in Shift then begin
+ FSelectRect.TopLeft := FClickRect.TopLeft;
+ sgn := IfThen(dy*dx >=0, 1, -1);
+ if (dy = 0) or (abs(dx/dy) >= Image.Width/Image.Height) then begin
+ FSelectRect.Right := x;
+ FSelectRect.Bottom := FClickRect.TopLeft.Y + sgn * Round(dx / Image.Width * Image.Height);
+ end
+ else begin
+ FSelectRect.Right := FClickRect.TopLeft.X + sgn * Round(dy / Image.Height * Image.Width);
+ FSelectRect.Bottom := y;
+ end;
+ end
+ else begin
+ sgn := IfThen(dy*dx >=0, 1, -1);
+ if (dy = 0) or (abs(dx/dy) >= Image.Width/Image.Height) then begin
+ cy := (y + FClickRect.TopLeft.Y) div 2;
+ FSelectRect.Left := FClickRect.TopLeft.X;
+ FSelectRect.Right := x;
+ FSelectRect.Top := cy - sgn * Round(dx / 2 / Image.Width * Image.Height);
+ FSelectRect.Bottom := cy + sgn * Round(dx / 2 / Image.Width * Image.Height);
+ end
+ else begin
+ cx := (x + FClickRect.TopLeft.X) div 2;
+ FSelectRect.Left := cx - sgn * Round(dy / 2 / Image.Height * Image.Width);
+ FSelectRect.Right := cx + sgn * Round(dy / 2 / Image.Height * Image.Width);
+ FSelectRect.Top := FClickRect.TopLeft.Y;
+ FSelectRect.Bottom := y;
+ end;
+ end;
+ DrawZoomWindow;
+ DrawSelection := true;
+ end;
+ msDragMove:
+ begin
+ assert(assigned(FviewImage));
+ assert(FViewScale <> 0);
+
+ scale := FViewScale * Image.Width / FViewImage.Width;
+ FViewPos.X := FViewPos.X + (x - FClickRect.Right) / scale;
+ FViewPos.Y := FViewPos.Y + (y - FClickRect.Bottom) / scale;
+ //FClickRect.BottomRight := Point(x, y);
+
+ DrawImageView;
+ end;
+ { msPitchYaw:
+ begin
+ if camDragMode and ( (x <> camDragOld.x) or (y <> camDragOld.y) ) then
+ begin
+ Inc(camDragPos.x, x - camDragOld.x);
+ Inc(camDragPos.y, y - camDragOld.y);
+
+ vx := Round6(camDragValueX + camDragPos.x / 10);
+ vy := Round6(camDragValueY - camDragPos.y / 10);
+
+ MainCP.cameraPitch := vy * PI / 180.0;
+ MainCP.cameraYaw := vx * PI / 180.0;
+
+ vx := Round(vx);
+ vy := Round(vy);
+
+ camDragged := True;
+ //StatusBar.Panels.Items[1].Text := Format('Pitch: %f°, Yaw: %f°', [vx,vy]);
+ end;
+ end; }
+ msRotateMove:
+ begin
+ if DrawSelection then DrawRotatelines(FRotateAngle);
+
+ FRotateAngle := arctan2(y-Image.Height/2, Image.Width/2-x) - FClickAngle;
+ if ssShift in Shift then // angle snap
+ FRotateAngle := Round(FRotateAngle/snap_angle)*snap_angle;
+ //SelectRect.Left := x;
+
+// pdjpointgen.Rotate(FRotateAngle);
+// FRotateAngle := 0;
+
+ DrawRotatelines(FRotateAngle);
+ DrawSelection := true;
+ {
+ Image.Refresh;
+ if AdjustForm.Visible then begin
+ MainCp.FAngle:=-FRotateAngle;
+ AdjustForm.UpdateDisplay;
+ end;
+ }
+ end;
+ end;
+ FClickRect.BottomRight := Point(x, y);
+end;
+
+function ScaleRect(r: TRect; scale: double): TSRect;
+begin
+ Result.Left := r.Left * scale;
+ Result.Top := r.Top * scale;
+ Result.Right := r.Right * scale;
+ Result.Bottom := r.Bottom * scale;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.ImageMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+var
+ scale: double;
+ rs: TSRect;
+begin
+ case FMouseMoveState of
+ msZoomWindowMove:
+ begin
+ DrawZoomWindow;
+ FMouseMoveState := msZoomWindow;
+ if (abs(FSelectRect.Left - FSelectRect.Right) < 10) or
+ (abs(FSelectRect.Top - FSelectRect.Bottom) < 10) then
+ Exit; // zoom to much or double clicked
+
+ StopThread;
+ UpdateUndo;
+ MainCp.ZoomtoRect(ScaleRect(FSelectRect, MainCP.Width / Image.Width));
+
+ FViewScale := FViewScale * Image.Width / abs(FSelectRect.Right - FSelectRect.Left);
+ FViewPos.x := FViewPos.x - ((FSelectRect.Right + FSelectRect.Left) - Image.Width)/2;
+ FViewPos.y := FViewPos.y - ((FSelectRect.Bottom + FSelectRect.Top) - Image.Height)/2;
+ DrawImageView;
+
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ end;
+ msZoomOutWindowMove:
+ begin
+ DrawZoomWindow;
+ FMouseMoveState := msZoomOutWindow;
+ if (abs(FSelectRect.Left - FSelectRect.Right) < 10) or
+ (abs(FSelectRect.Top - FSelectRect.Bottom) < 10) then
+ Exit; // zoom to much or double clicked
+
+ StopThread;
+ UpdateUndo;
+ MainCp.ZoomOuttoRect(ScaleRect(FSelectRect, MainCP.Width / Image.Width));
+
+ scale := Image.Width / abs(FSelectRect.Right - FSelectRect.Left);
+ FViewScale := FViewScale / scale;
+ FViewPos.x := scale * (FViewPos.x + ((FSelectRect.Right + FSelectRect.Left) - Image.Width)/2);
+ FViewPos.y := scale * (FViewPos.y + ((FSelectRect.Bottom + FSelectRect.Top) - Image.Height)/2);
+
+ DrawImageView;
+
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ end;
+ msDragMove:
+ begin
+ FClickRect.BottomRight := Point(x, y);
+ FMouseMoveState := msDrag;
+
+ if ((x = 0) and (y = 0)) or // double clicked
+ ((FClickRect.left = FClickRect.right) and (FClickRect.top = FClickRect.bottom))
+ then Exit;
+
+ StopThread;
+ UpdateUndo;
+ MainCp.MoveRect(ScaleRect(FClickRect, MainCP.Width / Image.Width));
+
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ end;
+ msRotateMove:
+ begin
+ DrawRotatelines(FRotateAngle);
+
+ FMouseMoveState := msRotate;
+
+ if (FRotateAngle = 0) then Exit; // double clicked
+
+ StopThread;
+ UpdateUndo;
+ if MainForm_RotationMode = 0 then MainCp.Rotate(FRotateAngle)
+ else MainCp.Rotate(-FRotateAngle);
+
+ if assigned(FViewImage) then begin
+ FViewImage.Free;
+ FViewImage := nil;
+ DrawImageView;
+ end;
+
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ end;
+ { msPitchYaw:
+ begin
+ camDragMode := false;
+ Screen.Cursor := crDefault;
+
+ if camDragged then
+ begin
+ camDragged := False;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ end;
+
+
+ end; }
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.DrawImageView;
+var
+ i, j: integer;
+ bm: TBitmap;
+ r: TRect;
+ scale: double;
+const
+ msg = #54; // 'NO PREVIEW';
+var
+ ok: boolean;
+ GlobalMemoryInfo: TMemoryStatus; // holds the global memory status information
+ area: int64;
+ gridp: integer;
+begin
+ bm := TBitmap.Create;
+ bm.Width := Image.Width;
+ bm.Height := Image.Height;
+ with bm.Canvas do begin
+ if ShowTransparency then begin
+ Brush.Color := $F0F0F0;
+ FillRect(Rect(0, 0, bm.Width, bm.Height));
+ Brush.Color := $C0C0C0;
+ for i := 0 to ((bm.Width - 1) shr 3) do begin
+ for j := 0 to ((bm.Height - 1) shr 3) do begin
+ if odd(i + j) then
+ FillRect(Rect(i shl 3, j shl 3, (i+1) shl 3, (j+1) shl 3));
+ end;
+ end;
+ end
+ else begin
+ Brush.Color := MainCP.background[0] or (MainCP.background[1] shl 8) or (MainCP.background[2] shl 16);
+ FillRect(Rect(0, 0, bm.Width, bm.Height));
+ end;
+ end;
+
+ ok := false;
+ if assigned(FViewImage) then begin
+ scale := FViewScale * Image.Width / FViewImage.Width;
+
+ r.Left := Image.Width div 2 + round(scale * (FViewPos.X - FViewImage.Width/2));
+ r.Right := Image.Width div 2 + round(scale * (FViewPos.X + FViewImage.Width/2));
+ r.Top := Image.Height div 2 + round(scale * (FViewPos.Y - FViewImage.Height/2));
+ r.Bottom := Image.Height div 2 + round(scale * (FViewPos.Y + FViewImage.Height/2));
+
+ GlobalMemoryInfo.dwLength := SizeOf(GlobalMemoryInfo);
+ GlobalMemoryStatus(GlobalMemoryInfo);
+ area := abs(r.Right - r.Left) * int64(abs(r.Bottom - r.Top));
+
+ if (area * 4 < GlobalMemoryInfo.dwAvailPhys div 2) or
+ (area <= Screen.Width*Screen.Height*4) then
+ try
+ FViewImage.Draw(bm.Canvas, r);
+ ok := true;
+ except
+ end;
+
+ // Gridlines for composition (taken from JK mod by Jed Kelsey)
+ if (EnableGuides) then begin
+ with bm.Canvas do begin
+ Pen.Width := 1;
+ Pen.Color := TColor(LineCenterColor); //$000000; // Center
+ MoveTo(0, bm.Height shr 1); LineTo(bm.Width, bm.Height shr 1);
+ MoveTo(bm.Width shr 1, 0); LineTo(bm.Width shr 1, bm.Height);
+ Pen.Color := TColor(LineThirdsColor); //$C000C0; // Thirds
+ gridp := Floor(bm.Height/3);
+ MoveTo(0, gridp); LineTo(bm.Width, gridp);
+ MoveTo(0, bm.Height-gridp); LineTo(bm.Width, bm.Height-gridp);
+ gridp := Floor(bm.Width/3);
+ MoveTo(gridp, 0); LineTo(gridp, bm.Height);
+ MoveTo(bm.Width-gridp, 0); LineTo(bm.Width-gridp, bm.Height);
+ Pen.Color := TColor(LineGRColor); //$0000F0; // "Golden Ratio" (per axis)
+ gridp := Floor(bm.Height * 0.61803399);
+ MoveTo(0, gridp); LineTo(bm.Width, gridp);
+ MoveTo(0, bm.Height-gridp); LineTo(bm.Width, bm.Height-gridp);
+ gridp := Floor(bm.Width * 0.61803399);
+ MoveTo(gridp, 0); LineTo(gridp, bm.Height);
+ MoveTo(bm.Width-gridp, 0); LineTo(bm.Width-gridp, bm.Height);
+ end;
+ end;
+ end;
+
+ if not ok then
+ with bm.Canvas do
+ begin
+ Font.Name := 'Wingdings'; // 'Arial';
+ Font.Height := bm.Height div 4;
+ Font.Color := $808080;
+ Brush.Style := bsClear;
+ i := (bm.Width - TextWidth(msg)) div 2;
+ j := (bm.Height - TextHeight(msg)) div 2;
+ Font.Color := 0;
+ TextOut(i+2,j+2, msg);
+ Font.Color := clWhite; //$808080;
+ TextOut(i,j, msg);
+ end;
+ Image.Picture.Graphic := bm;
+ //EditForm.PaintBackground;
+ Image.Refresh;
+ bm.Free;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+(*
+procedure TMainForm.DrawPitchYawLines(YawAngle: double; PitchAngle: double);
+var
+ bkuPen: TPen;
+ points: array[0..3] of TPoint;
+ i: integer;
+begin
+ bkuPen := TPen.Create;
+ bkuPen.Assign(Image.Canvas.Pen);
+ Image.Canvas.Pen.Mode := pmXor;
+ Image.Canvas.Pen.Color := clWhite;
+ Image.Canvas.Pen.Style := psDot; //psDash;
+ Image.Canvas.Brush.Style := bsClear;
+
+// Image.Canvas.Rectangle(FSelectRect);
+ points[0].x := 0;
+ points[0].y := round((Image.Height / 2) * sin(PitchAngle));
+ points[1].x := Image.Width - 1;
+ points[1].y := points[0].y;
+ points[2].x := points[1].x;
+ points[2].y := round((Image.Height) - ((Image.Height / 2) * sin(PitchAngle)));
+ points[3].x := points[0].x;
+ points[3].y := points[2].y;
+
+ Image.Canvas.MoveTo(Points[3].x, Points[3].y);
+ for i := 0 to 3 do begin
+ Image.Canvas.LineTo(Points[i].x, Points[i].y);
+ end;
+
+ Image.Canvas.Pen.Assign(bkuPen);
+ bkuPen.Free;
+end;
+ *)
+
+procedure TMainForm.DrawRotateLines(Angle: double);
+var
+ bkuPen: TPen;
+ points: array[0..3] of TPoint;
+ i,x,y: integer;
+begin
+ bkuPen := TPen.Create;
+ bkuPen.Assign(Image.Canvas.Pen);
+ Image.Canvas.Pen.Mode := pmXor;
+ Image.Canvas.Pen.Color := clWhite;
+ Image.Canvas.Pen.Style := psDot; //psDash;
+ Image.Canvas.Brush.Style := bsClear;
+
+// Image.Canvas.Rectangle(FSelectRect);
+ points[0].x := (Image.Width div 2)-1;
+ points[0].y := (Image.Height div 2)-1;
+ points[1].x := (Image.Width div 2)-1;
+ points[1].y := -Image.Height div 2;
+ points[2].x := -Image.Width div 2;
+ points[2].y := -Image.Height div 2;
+ points[3].x := -Image.Width div 2;
+ points[3].y := (Image.Height div 2)-1;
+
+ for i := 0 to 3 do begin
+ x := points[i].x;
+ y := points[i].y;
+
+ points[i].x := round(cos(Angle) * x + sin(Angle) * y) + Image.Width div 2;
+ points[i].y := round(-sin(Angle) * x + cos(Angle) * y) + Image.Height div 2;
+ end;
+
+ Image.Canvas.MoveTo(Points[3].x, Points[3].y);
+ for i := 0 to 3 do begin
+ Image.Canvas.LineTo(Points[i].x, Points[i].y);
+ end;
+
+ Image.Canvas.Pen.Assign(bkuPen);
+ bkuPen.Free;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.DrawZoomWindow;
+const
+ cornerSize = 32;
+var
+ bkuPen: TPen;
+ dx, dy, cx, cy: integer;
+ l, r, t, b: integer;
+begin
+ bkuPen := TPen.Create;
+ bkuPen.Assign(Image.Canvas.Pen);
+ with Image.Canvas do begin
+ Pen.Mode := pmXor;
+ Pen.Color := clWhite;
+ Brush.Style := bsClear;
+
+ Pen.Style := psDot; //psDash;
+
+ if ssShift in FShiftState then
+ begin
+ dx := FClickRect.Right - FClickRect.Left;
+ dy := FClickRect.Bottom - FClickRect.Top;
+ Rectangle(FClickRect.Left - dx, FClickRect.Top - dy, FClickRect.Right, FClickRect.Bottom);
+ end
+ else Rectangle(FClickRect);
+
+ dx := FSelectRect.Right - FSelectRect.Left;
+ if dx >= 0 then begin
+ l := FSelectRect.Left - 1;
+ r := FSelectRect.Right;
+ end
+ else begin
+ dx := -dx;
+ l := FSelectRect.Right - 1;
+ r := FSelectRect.Left;
+ end;
+ dx := min(dx div 2 - 1, cornerSize);
+
+ dy := FSelectRect.Bottom - FSelectRect.Top;
+ if dy >= 0 then begin
+ t := FSelectRect.Top - 1;
+ b := FSelectRect.Bottom;
+ end
+ else begin
+ dy := -dy;
+ t := FSelectRect.Bottom - 1;
+ b := FSelectRect.Top;
+ end;
+ dy := min(dy div 2, cornerSize);
+
+ pen.Style := psSolid;
+
+ MoveTo(l + dx, t);
+ LineTo(l, t);
+ LineTo(l, t + dy);
+ MoveTo(r - dx, t);
+ LineTo(r, t);
+ LineTo(r, t + dy);
+ MoveTo(r - dx, b);
+ LineTo(r, b);
+ LineTo(r, b - dy);
+ MoveTo(l + dx, b);
+ LineTo(l, b);
+ LineTo(l, b - dy);
+{
+ cx := (l + r) div 2;
+ cy := (t + b) div 2;
+ MoveTo(cx - dx div 2, cy);
+ LineTo(cx + dx div 2 + 1, cy);
+ MoveTo(cx, cy - dy div 2);
+ LineTo(cx, cy + dy div 2 + 1);
+}
+ Pen.Assign(bkuPen);
+ end;
+ bkuPen.Free;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.tbzoomwindowClick(Sender: TObject);
+begin
+ FMouseMoveState := msZoomWindow;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.tbzoomoutwindowClick(Sender: TObject);
+begin
+ FMouseMoveState := msZoomOutWindow;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.tbDragClick(Sender: TObject);
+begin
+ FMouseMoveState := msDrag;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.tbRotateClick(Sender: TObject);
+begin
+ FMouseMoveState := msRotate;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.FillVariantMenu;
+var
+ i: integer;
+ s: string;
+ NewMenuItem : TMenuItem;
+begin
+ SetLength(VarMenus, NrVar);
+ // AV: to prevent underlined letters with GUI themes
+ mnuBuiltinVars.AutoHotkeys := maManual;
+ mnuPluginVars.AutoHotkeys := maManual;
+
+ for i := 0 to NRVAR - 1 do begin
+ NewMenuItem := TMenuItem.Create(self);
+ s := varnames(i);
+ NewMenuItem.Caption := uppercase(s[1]) + copy(s, 2, length(s)-1);
+ NewMenuItem.OnClick := VariantMenuClick;
+ NewMenuItem.Enabled := True;
+ NewMenuItem.Name := 'var' + intTostr(i);
+ NewMenuItem.Tag := i;
+ NewMenuItem.GroupIndex := 2;
+ NewMenuItem.RadioItem := True;
+ // AV: exotic GUI styles not always work well :-/
+ if TStyleManager.ActiveStyle.Name <> 'Windows' then
+ if (i mod 30 = 0) then NewMenuItem.Break := mbBreak;
+ VarMenus[i] := NewMenuItem;
+ if i < NumBuiltinVars then
+ mnuBuiltinVars.Add(NewMenuItem)
+ else
+ mnuPluginVars.Add(NewMenuItem);
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TMainForm.VariantMenuClick(Sender: TObject);
+var i: integer;
+begin
+ TMenuItem(Sender).Checked := True;
+ // AV: only one variation type can be active,
+ // but Apo allows to check up to 3 menu items, confusing users...
+ mnuVRandom.Checked := False;
+ if (TMenuItem(Sender).Tag >= NumBuiltinVars) then
+ begin
+ for i := 0 to NumBuiltinVars-1 do
+ VarMenus[i].Checked := False; // AV
+ mnuBuiltinVars.Checked := False;
+ mnuPluginVars.Checked := True;
+ end
+ else begin
+ for i := NumBuiltinVars to NrVar - 1 do
+ VarMenus[i].Checked := False; // AV
+ mnuBuiltinVars.Checked := True;
+ mnuPluginVars.Checked := False;
+ end;
+ UpdateUndo;
+ Variation := TVariation(TMenuItem(Sender).Tag); // ?
+ SetVariation(maincp);
+ ResetLocation;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+////////// AV: Apo UI Appearance /////////////////////
+
+procedure TMainForm.CreateStyleList;
+var i: integer;
+ s: string;
+ apostyle : TMenuItem;
+ sm: TStyleManager;
+begin
+ sm := TStyleManager.Create;
+ for i := 0 to Length(sm.StyleNames)-1 do
+ begin
+ apostyle := TMenuItem.Create(mnuApoStyle);
+ s := sm.StyleNames[i];
+ apostyle.Caption := s;
+ if (sm.ActiveStyle.Name = s) then
+ apostyle.Checked := True;
+ apostyle.Name := 'style' + IntToStr(i);
+ apostyle.RadioItem := True;
+ apostyle.Enabled := True;
+ apostyle.Tag := i;
+ apostyle.OnClick := StyleItemClick;
+ mnuApoStyle.Add(apostyle);
+ end;
+ sm.Free;
+end;
+
+procedure TMainForm.ShowStyledWindows(Sender: TObject);
+begin
+ self.ApplyThemedColors;
+ ScriptEditor.AdjustScripterColors;
+ EditForm.RedrawButtons;
+ AboutForm.SetTitleColor;
+end;
+
+procedure TMainForm.StyleItemClick(Sender: TObject);
+var
+ newGUI: string;
+ Registry: TRegistry;
+begin
+ if not TMenuItem(Sender).Checked then
+ begin
+ TMenuItem(Sender).Checked := True;
+ newGUI := TStyleManager.StyleNames[TMenuItem(Sender).Tag];
+
+ try
+ StopThread;
+ self.OnShow := ShowStyledWindows;
+
+ if EditForm.Visible then EditForm.Close;
+ if AdjustForm.Visible then AdjustForm.Close;
+ if MutateForm.Visible then MutateForm.Close;
+ if ScriptEditor.Visible then ScriptEditor.Close;
+
+ TStyleManager.TrySetStyle(newGUI, false);
+
+ except on EAccessViolation do // hmmm...
+ Application.MessageBox(PChar(TextByKey('options-restartnotice')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ end;
+
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Defaults', True) then
+ Registry.WriteString('UIStyle', newGUI);
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+ end;
+end;
+//--Z--////////////////////////////////////////////////////////////////////////
+
+procedure TMainForm.tbQualityBoxKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := '.'; // AV
+ if not CharinSet(Key,['0'..'9', #8, #13, #27, '.']) then Key := #0; // AV
+ if key = #13 then
+ begin
+ tbQualityBoxSet(Sender);
+ key := #0;
+ end
+ else if key = #27 then // AV: Esc
+ tbQualityBox.Text := FloatToStr(defSampleDensity);
+end;
+
+procedure TMainForm.tbQualityBoxSet(Sender: TObject);
+var
+ q: double;
+begin
+ try
+ q := StrToFloat(tbQualityBox.Text);
+ except
+ exit;
+ end;
+ defSampleDensity := q;
+
+ StopThread;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.ImageDblClick(Sender: TObject);
+begin
+ if FMouseMoveState = msRotateMove then
+ begin
+ StopThread;
+ UpdateUndo;
+ MainCp.FAngle := 0;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+ end
+ else mnuResetLocationClick(Sender);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.tbShowAlphaClick(Sender: TObject);
+begin
+ //tbShowAlpha.Down := not tbShowAlpha.Down;
+ ShowTransparency := tbShowAlpha.Down;
+
+ DrawImageView;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.tbShowTraceClick(Sender: TObject);
+begin
+ TraceForm.Show;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TMainForm.FormKeyUpDown(Sender: TObject; var Key: Word;
+ Shift: TShiftState);
+var
+ MousePos: TPoint;
+begin
+ if Shift <> FShiftState then begin
+ if FMouseMoveState in [msZoomWindowMove, msZoomOutWindowMove, msRotateMove, msDragMove] then
+ begin
+ // hack: to generate MouseMove event
+ GetCursorPos(MousePos);
+ SetCursorPos(MousePos.x, MousePos.y);
+ end;
+
+ if (FMouseMoveState in [msZoomWindowMove, msZoomOutWindowMove]) then
+ begin
+ DrawZoomWindow;
+ FShiftState := Shift;
+ DrawZoomWindow;
+ end
+ else FShiftState := Shift;
+ end;
+end;
+
+{
+procedure TMainForm.ListViewChanging(Sender: TObject; Item: TListItem;
+ Change: TItemChange; var AllowChange: Boolean);
+var sc, fc: string;
+begin
+ if (Item = nil) or (Sender <> ListView1) then exit;
+
+ sc := ''; fc := '';
+ if (ListView1.Selected <> nil) then sc := ListView1.Selected.Caption;
+ if (ListView1.ItemFocused <> nil) then fc := ListView1.ItemFocused.Caption;
+
+ if (Trim(Item.Caption) = Trim(maincp.name)) and (Item.Selected) and
+ (Item.Selected) and (Change = ctState) then
+ begin
+ if (DoNotAskAboutChange = true) then
+ begin
+ exit;
+ end;
+ if (UndoIndex <> 0) then
+ begin
+ // hack
+ if (LastCaptionSel = sc) and (LastCaptionFoc = fc) then begin
+ AllowChange := LastDecision;
+ if Not AllowChange then begin
+ ListView1.OnChange := nil;
+ ListView1.OnChanging := nil;
+ ListView1.Selected := Item;
+ ListView1.ItemFocused := Item;
+ ListView1.OnChanging := ListViewChanging;
+ ListView1.OnChange := ListViewChange;
+ end;
+ Exit;
+ end;
+
+ LastCaptionSel := sc;
+ LastCaptionFoc := fc;
+
+ if Application.MessageBox('Do you really want to open another flame? All changes made to the current flame will be lost.', 'Apophysis', MB_ICONWARNING or MB_YESNO) <> IDYES then
+ begin
+ AllowChange := false;
+ ListView1.OnChange := nil;
+ ListView1.OnChanging := nil;
+ ListView1.Selected := Item;
+ ListView1.ItemFocused := Item;
+ ListView1.OnChanging := ListViewChanging;
+ ListView1.OnChange := ListViewChange;
+ end
+ else
+ begin
+ AllowChange := true;
+ end;
+
+ LastDecision := AllowChange;
+ end;
+ end;
+end;
+
+procedure TMainForm.ListViewInfoTip(Sender: TObject; Item: TListItem;
+ var InfoTip: String);
+var
+ Bitmap: TBitmap;
+ lcp: TControlPoint;
+begin
+ // flame preview in a tooltip...
+
+ BitMap := TBitMap.create;
+ Bitmap.PixelFormat := pf24bit;
+ BitMap.Width := 100;
+ BitMap.Height := 100;
+
+ lcp := TControlPoint.Create;
+ lcp.Copy(mainCP);
+ lcp.cmap := mainCP.cmap;
+
+ if Assigned(Renderer) then begin
+ Renderer.WaitFor;
+ Renderer.Free;
+ end;
+ if not Assigned(Renderer) then
+ begin
+ lcp.sample_density := 1;
+ lcp.spatial_oversample := 1;
+ lcp.spatial_filter_radius := 0.3;
+ lcp.AdjustScale(100, 100);
+ lcp.Transparency := false;
+ end;
+ try
+ Renderer := TRenderThread.Create;
+ assert(Renderer <> nil);
+ Renderer.BitsPerSample := 0
+ Renderer.TargetHandle := self.Handle;
+ Renderer.SetCP(lcp);
+ Renderer.Priority := tpLower;
+ Renderer.NrThreads := 1
+ Renderer.Resume;
+ Renderer.WaitFor;
+ except
+ end;
+
+ lcp.Free;
+ Bitmap.Free;
+end;
+}
+
+procedure TMainForm.btnViewIconsClick(Sender: TObject);
+var thumbs: TThumbnailThread;
+begin
+ ListView1.ViewStyle := vsIcon;
+ btnViewList.Down := false;
+ btnViewIcons.Down := true;
+ ClassicListMode := false;
+
+ // AV: refresh flame images ONLY if they didn't exist
+ if not GeneratingThumbs then
+ begin
+ thumbs := TThumbnailThread.Create;
+ thumbs.Start;
+ GeneratingThumbs := True;
+ end;
+
+ // AV: scroll down to the selected flame preview
+ if MainForm.ListView1.SelCount > 0 then
+ MainForm.ListView1.Selected.MakeVisible(True);
+end;
+
+procedure TMainForm.btnViewListClick(Sender: TObject);
+begin
+ ListView1.ViewStyle := vsReport;
+ btnViewList.Down := true;
+ btnViewIcons.Down := false;
+ ClassicListMode := true;
+ ListView1.Column[1].Caption := IfThen(EnumerateFlames.Checked,' N ', '');
+end;
+
+procedure TMainForm.XmlScannerEndTag(Sender: TObject; TagName: String);
+var sb : string;
+begin
+ if (TagName = 'flame') then begin
+ EndParsing(ParseCP, sb);
+ MainForm.StatusBar.Panels[0].Text := sb;
+ end;
+end;
+
+procedure TMainForm.tbCurvesClick(Sender: TObject);
+begin
+ AdjustForm.UpdateDisplay;
+ AdjustForm.PageControl.TabIndex:=4;
+ AdjustForm.Show;
+end;
+
+procedure TMainForm.tbMessagesClick(Sender: TObject);
+begin
+ if (LoadForm.Showing = false) then LoadForm.Show;
+end;
+
+procedure TMainForm.btNewClick(Sender: TObject);
+begin
+ StopThread; // AV
+ if AlwaysCreateBlankFlame then
+ EditForm.tbResetAll.Click // AV
+ else
+ if TemplateForm.ShowModal = mrOK then // AV
+ if AutoSaveXML then
+ // AV: create a flame from scratch (rather than replace the current) if needed
+ begin
+ MainCp.name := MainCp.name + FormatDateTime(' (MM-dd-yyyy hh-mm-ss)', Now);
+ if MainForm.SaveXMLFlame(MainCp, MainCp.name, OpenFile) then
+ if SortFlames.Checked then
+ ListXML(OpenFile, 2, MainCp.name) // show the new item
+ else
+ ListXML(OpenFile, 0); // show the last item
+ end;
+end;
+
+procedure TMainForm.FormResize(Sender: TObject);
+begin
+ if (MainForm.Width <= TbBreakWidth) then
+ Toolbar.Height := 26 * 2 + 8
+ else Toolbar.Height := 26;
+end;
+
+{
+// AV: exactly the same code exists in the Global module
+function Split(const fText: String; const fSep: Char; fTrim: Boolean=false; fQuotes: Boolean=false):TStringList;
+var vI: Integer;
+ vBuffer: String;
+ vOn: Boolean;
+begin
+ Result := TStringList.Create;
+ vBuffer:='';
+ vOn:=true;
+ for vI:=1 to Length(fText) do
+ begin
+ if (fQuotes and(fText[vI]=fSep)and vOn)or(Not(fQuotes) and (fText[vI]=fSep)) then
+ begin
+ if fTrim then vBuffer:=Trim(vBuffer);
+ if vBuffer='' then vBuffer:=fSep; // !!! e.g. split(',**',',')...
+ if vBuffer[1]=fSep then
+ vBuffer:=Copy(vBuffer,2,Length(vBuffer));
+ Result.Add(vBuffer);
+ vBuffer:='';
+ end;
+ if fQuotes then
+ begin
+ if fText[vI]='"' then
+ begin
+ vOn:=Not(vOn);
+ Continue;
+ end;
+ if (fText[vI]<>fSep)or((fText[vI]=fSep)and(vOn=false)) then
+ vBuffer:=vBuffer+fText[vI];
+ end else
+ if fText[vI]<>fSep then
+ vBuffer:=vBuffer+fText[vI];
+ end;
+ if vBuffer<>'' then
+ begin
+ if fTrim then vBuffer:=Trim(vBuffer);
+ Result.Add(vBuffer);
+ end;
+end;
+}
+
+procedure TMainForm.mnuResetUIClick(Sender: TObject);
+begin
+ ListBackPanel.Width := ThumbnailSize + 90;
+ Splitter.Left := ListBackPanel.Width;
+ ListView1.Columns[0].Width := ThumbnailSize + 30; // AV
+ ListView1.Columns[1].Width := 35; // AV
+end;
+
+procedure TMainForm.AutoSaveTimerTimer(Sender: TObject);
+var
+ filename,title : string;
+ Tag: string;
+ IFile: TextFile;
+ FileList, FileListPre: TStringList;
+ i, p: integer;
+ erase : boolean;
+ bakname: string;
+begin
+ erase := false;
+ filename := AutoSavePath;
+ title := CleanXMLName(maincp.name) + ' (' + FormatDateTime('MM-dd-yyyy hh:mm:ss', Now) + ')';
+ Tag := RemoveExt(filename);
+
+ if FileExists(filename) then begin
+ FileListPre := TStringList.create;
+ try
+ FileListPre.LoadFromFile(filename);
+ if (FileListPre.Count > 1000) then erase := true;
+ finally
+ FileListPre.Free;
+ end;
+
+ if (erase) then begin
+ bakname := ChangeFileExt(filename, '.bak');
+ if FileExists(bakname) then DeleteFile(bakname);
+ RenameFile(filename, bakname);
+ end;
+ end;
+
+ try
+ if FileExists(filename) then
+ begin
+ bakname := ChangeFileExt(filename, '.temp');
+ if FileExists(bakname) then DeleteFile(bakname);
+ RenameFile(filename, bakname);
+
+ FileList := TStringList.create;
+ try
+ FileList.LoadFromFile(bakname);
+
+ if Pos(' 0 then
+ begin
+ i := 0;
+ while Pos('', FileList[i]);
+ FileList.Delete(i);
+ end;
+ end;
+
+ // fix first line
+ if (FileList.Count > 0) then begin
+ FileList[0] := '';
+ end;
+
+ if FileList.Count > 2 then
+ begin
+ if pos(' 0 then
+ repeat
+ FileList.Delete(FileList.Count - 1);
+ until (Pos(' ', FileList[FileList.count - 1]) <> 0)
+ else
+ repeat
+ FileList.Delete(FileList.Count - 1);
+ until (Pos('<' + Tag + '>', FileList[FileList.count - 1]) <> 0) or
+ (Pos(' ', FileList[FileList.count - 1]) <> 0);
+ end else
+ begin
+ FileList.Delete(FileList.Count - 1);
+ end;
+
+ FileList.Add(Trim(FlameToXMLAS(maincp, title, false)));
+ FileList.Add('');
+ FileList.SaveToFile(filename);
+
+ finally
+ if FileExists(bakname) and not FileExists(filename) then
+ RenameFile(bakname, filename);
+
+ FileList.Free;
+ if FileExists(bakname) then DeleteFile(bakname);
+ end;
+ end
+ else
+ begin
+ // New file ... easy
+ AssignFile(IFile, filename);
+ ReWrite(IFile);
+ Writeln(IFile, '');
+ Write(IFile, FlameToXMLAS(maincp, title, false));
+ Writeln(IFile, ' ');
+ CloseFile(IFile);
+ end;
+ except on EInOutError do // AV
+ raise Exception.CreateFmt(TextByKey('common-genericsavefailure'),[title]);
+ end;
+end;
+
+procedure TMainForm.Restorelastautosave1Click(Sender: TObject);
+var fn:string;
+begin
+ if (not fileexists(AutoSavePath)) then
+ raise Exception.Create(TextByKey('main-status-noautosave')); // AV
+
+ //ScriptEditor.Stopped := True;
+ MainMenuClick(nil); // AV
+
+ fn := AutoSavePath;
+ MainForm.CurrentFileName := fn;
+ LastOpenFile := fn;
+ Maincp.name := '';
+ ParamFolder := ExtractFilePath(fn);
+ OpenFile := fn;
+ //MainForm.Caption := AppVersionString + ' - ' + OpenFile; // --Z--
+ if APP_BUILD = '' then MainForm.Caption := AppVersionString + ' - ' + openFile
+ else MainForm.Caption := AppVersionString + ' ' + APP_BUILD + ' - ' + openFile;
+ OpenFileType := ftXML;
+ ListXML(fn, 1)
+end;
+
+procedure TMainForm.mnuHelpTopicsClick(Sender: TObject);
+var
+ URL, HelpTopic: string;
+begin
+ {if EditForm.Active then HelpTopic := 'Transform editor.htm'
+// else if GradientForm.Active then HelpTopic := 'Gradient window.htm'
+ else if AdjustForm.Active then HelpTopic := 'Adjust window.htm'
+ else if MutateForm.Active then HelpTopic := 'Mutation window.htm'
+ else if RenderForm.Active then HelpTopic := 'Render window.htm';
+ HtmlHelp(0, nil, HH_CLOSE_ALL, 0);
+ URL := AppPath + 'Apophysis 2.0.chm';
+ if HelpTopic <> '' then URL := URL + '::\' + HelpTopic;
+ HtmlHelp(0, PChar(URL), HH_DISPLAY_TOC, 0); }
+ //if (FileExists(HelpPath)) then
+ if (HelpPath <> '') then begin
+ if (not WinShellExecute('open', HelpPath)) then begin
+ MessageBox(self.Handle, PCHAR(Format(TextByKey('common-genericopenfailure'), [HelpPath])),
+ PCHAR('Apophysis AV'), MB_ICONHAND);
+ end;
+ end else MessageBox(self.Handle, PCHAR(TextByKey('main-status-nohelpfile')),
+ PCHAR('Apophysis AV'), MB_ICONHAND);
+end;
+
+function TMainForm.RetrieveXML(cp : TControlPoint):string;
+begin
+ Result := FlameToXML(cp, false, false);
+end;
+
+procedure TMainForm.tbGuidesClick(Sender: TObject);
+begin
+// tbGuides.Down := not tbGuides.Down;
+ EnableGuides := tbGuides.Down;
+ DrawImageView;
+end;
+
+(*
+function WinExecAndWait32(FileName: string): integer;
+var
+ zAppName: array[0..1024] of Char;
+ zCurDir: array[0..255] of Char;
+ WorkDir: string;
+ StartupInfo: TStartupInfo;
+ ProcessInfo: TProcessInformation;
+ r : dword;
+begin
+ StrPCopy(zAppName, FileName);
+ GetDir(0, WorkDir);
+ StrPCopy(zCurDir, WorkDir);
+ FillChar(StartupInfo, Sizeof(StartupInfo), #0);
+ StartupInfo.cb := Sizeof(StartupInfo);
+
+ StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
+ StartupInfo.wShowWindow := 0;
+ if (not CreateProcess(nil, zAppName, nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo)) then
+ Result := -1
+ else begin
+ WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
+ GetExitCodeProcess(ProcessInfo.hProcess, r);
+ result := r;
+ CloseHandle(ProcessInfo.hProcess);
+ CloseHandle(ProcessInfo.hThread);
+ end;
+end;
+*)
+
+procedure TMainForm.mnuTurnFlameToScriptClick(Sender: TObject);
+var
+ txt: string;
+begin
+ txt := Trim(FlameToXML(Maincp, false, false));
+
+ ScriptEditor.ScriptFromFlame(txt);
+ ScriptEditor.Show;
+end;
+
+constructor TThumbnailThread.Create;
+begin
+ inherited create(True); // AV: don't run the thread immediately
+ FCount := MainForm.ListView1.Items.Count - 1;
+ FreeOnTerminate := true; // AV: fixed - someone forgot to free the memory
+ Trace2('Creating ThumbnailThread #' + IntToStr(self.ThreadID));
+end;
+
+destructor TThumbnailThread.Destroy;
+begin
+ // AV: added tracing to fix Apo7X memory leaks
+ Synchronize(
+ procedure
+ begin
+ Trace2('Destroying ThumbnailThread #' + IntToStr(self.ThreadID));
+ end);
+ inherited;
+end;
+
+procedure TThumbnailThread.Execute;
+var
+ Renderer : TRenderer;
+ cp : TControlPoint;
+ Thumbnail : TBitmap;
+ flameXML, fCaption : string;
+ w, h, i : integer;
+ r : double;
+ {
+ stored_thumb : TJPegImage;
+ stored_thumb_data : TBinArray;
+ stored_thumb_size : integer;
+ memstream : TMemoryStream;
+ }
+begin
+ inherited;
+ Renderer := TRenderer.Create;
+ cp := TControlPoint.Create;
+ Thumbnail := TBitmap.Create;
+ try // AV: added try-finally block
+ // AV: moved outside the loop for speed
+ Thumbnail.PixelFormat := pf24bit;
+ Thumbnail.HandleType := bmDIB;
+ Thumbnail.Width := FThumbnailSize;
+ Thumbnail.Height := FThumbnailSize;
+ Thumbnail.Canvas.Brush.Color := WinColor; // AV: theme-aware GetSysColor(5);
+
+ for i := 0 to FCount do
+ begin
+ cp.Clear;
+ fCaption := MainForm.ListView1.Items[i].Caption;
+ flameXML := LoadXMLFlameText(Openfile, fCaption);
+ MainForm.ParseXML(cp, PCHAR(flameXML), true);
+ {
+ // AV: great idea, but somehow it doesn't work and causes crashes :(
+ if (cp.xdata <> '') then
+ begin
+ stored_thumb := TJPegImage.Create;
+ B64Decode(cp.xdata, stored_thumb_data, stored_thumb_size);
+ memstream := TMemoryStream.Create;
+ memstream.Size := stored_thumb_size;
+ stored_thumb_size := Length(stored_thumb_data);
+ memstream.WriteBuffer(stored_thumb_data[0], stored_thumb_size);
+ memstream.Seek(0, soBeginning);
+ //-X- test thumbnail integrity... memstream.SaveToFile('C:\Test.jpg');
+ stored_thumb.LoadFromStream(memstream);
+ memstream.Free;
+
+ w := stored_thumb.Width;
+ h := stored_thumb.Height;
+
+ Thumbnail.Canvas.FillRect(Rect(0, 0, FThumbnailSize, FThumbnailSize));
+ Thumbnail.Canvas.Draw(round(FThumbnailSize / 2 - w / 2),
+ round(FThumbnailSize / 2 - h / 2), stored_thumb);
+
+ // AV: added thread synchronization for visual components
+ Synchronize(
+ procedure
+ begin
+ Trace2('Generating thumbnail for "' + fCaption + '"');
+ MainForm.UsedThumbnails.Add(Thumbnail, nil);
+ MainForm.ListView1.Items[i].ImageIndex := MainForm.UsedThumbnails.Count - 1;
+ end);
+
+ stored_thumb.Free;
+ end else }
+ begin
+ w := cp.Width;
+ h := cp.Height;
+ r := w / h;
+ if (w < h) then
+ begin
+ w := round(r * FThumbnailSize);
+ h := FThumbnailSize;
+ end else if (w > h) then
+ begin
+ h := round(FThumbnailSize / r);
+ w := FThumbnailSize;
+ end else
+ begin
+ w := FThumbnailSize;
+ h := FThumbnailSize;
+ end;
+ cp.AdjustScale(w, h);
+ cp.spatial_oversample := defOversample;
+ cp.spatial_filter_radius := defFilterRadius;
+ cp.sample_density := FPreviewDensity; // AV
+
+ Renderer.SetCP(cp);
+ Renderer.Render;
+
+ Thumbnail.Canvas.FillRect(Rect(0, 0, FThumbnailSize, FThumbnailSize));
+ Thumbnail.Canvas.Draw(round(FThumbnailSize / 2 - w / 2),
+ round(FThumbnailSize / 2 - h / 2), Renderer.GetImage);
+
+ // AV: added thread synchronization for updating visual components
+ Synchronize(
+ procedure
+ begin
+ MainForm.UsedThumbnails.Add(Thumbnail, nil);
+ MainForm.ListView1.Items[i].ImageIndex := MainForm.UsedThumbnails.Count - 1;
+ Trace2('Generating thumbnail for "' + fCaption + '"');
+ end);
+ end;
+ if Terminated then break; // AV
+ end;
+ finally
+ cp.Free;
+ Renderer.Free;
+ Thumbnail.Free;
+ Thumbnail := nil;
+ end;
+end;
+
+procedure ListXML(FileName: string; sel: integer; selname: string = '');
+var
+ FStrings : TStringList;
+ i, p : integer;
+ title : string;
+ thread : TThumbnailThread;
+ item : TListItem;
+begin
+ MainForm.ParseLoadingBatch := true;
+ FStrings := TStringList.Create;
+ FStrings.LoadFromFile(FileName);
+
+ MainForm.ListView1.Items.BeginUpdate;
+
+ try
+ // AV: moved all the main code inside try-finally block
+ // because Apo often crashes here
+ MainForm.ListView1.Items.Clear;
+
+ // AV: moved from TThumbnailThread.Execute - seems like it saves a lot of time
+ MainForm.UsedThumbnails.Clear;
+ MainForm.UsedThumbnails.Add(ThumbnailPlaceholder, nil);
+
+ if (Pos(' 0) then
+ begin
+ for i := 0 to FStrings.Count - 1 do
+ begin
+ p := Pos(' 0) then
+ begin
+ MainForm.ListXMLScanner.LoadFromBuffer(TCharType(TStringType(FStrings[i])));
+ MainForm.ListXMLScanner.Execute;
+
+ if Trim(pname) = '' then
+ Title := '*untitled ' + ptime
+ else
+ Title := Trim(pname);
+ if Title <> '' then
+ begin
+ if ((i mod 5) = 0) then
+ MainForm.LoadSaveProgress.Position :=
+ round(100 * i / FStrings.Count);
+ item := MainForm.ListView1.Items.Add;
+ item.Caption := Title;
+ item.ImageIndex := 0; // AV: now we can load a hourglass icon
+ end;
+ end;
+ end;
+ end;
+ MainForm.LoadSaveProgress.Position := 0;
+ //MainForm.ListView1.AllocBy := MainForm.ListView1.Items.Count;
+
+ if ClassicListMode then // AV: thumbs are useless
+ GeneratingThumbs := False
+ else begin
+ thread := TThumbnailThread.Create;
+ thread.Start; // AV: thread.Resume method is deprecated here
+ GeneratingThumbs := True;
+ end;
+
+ finally
+ MainForm.ListView1.Items.EndUpdate;
+ FStrings.Free;
+
+ with MainForm.ListView1 do // AV
+ if Items.Count > 0 then // AV: added a check
+ case sel of
+ 0: Selected := Items[Items.Count - 1];
+ 1: Selected := Items[0];
+ 2: if (selname <> '') then // AV: show the flame with the specified name
+ Selected := FindCaption(0, selname, false, true, false);
+ end;
+
+ if MainForm.EnumerateFlames.Checked then // AV: displaying indices
+ MainForm.EnumerateFlamesClick(MainForm.EnumerateFlames);
+ end;
+ MainForm.ParseLoadingBatch := false;
+end;
+
+procedure TMainForm.RefreshThumbnail;
+var
+ Renderer : TRenderer;
+ Thumbnail : TBitmap;
+ r, sd: double;
+ i, w, h, w_old, h_old: integer;
+begin
+ if not Assigned(ListView1.Selected) then exit;
+ i := ListView1.Selected.Index;
+ if (i > UsedThumbnails.Count) then exit;
+
+ w := Maincp.Width;
+ h := Maincp.Height;
+ w_old := w;
+ h_old := h;
+
+ r := w / h;
+ if (w < h) then
+ begin
+ w := round(r * ThumbnailSize);
+ h := ThumbnailSize;
+ end else if (w > h) then
+ begin
+ h := round(ThumbnailSize / r);
+ w := ThumbnailSize;
+ end else
+ begin
+ w := ThumbnailSize;
+ h := ThumbnailSize;
+ end;
+ sd := Maincp.sample_density;
+ Maincp.AdjustScale(w, h);
+ Maincp.spatial_oversample := defOversample;
+ Maincp.spatial_filter_radius := defFilterRadius;
+ Maincp.sample_density := TThumbnailThread.FPreviewDensity;
+
+ Renderer := TRenderer.Create;
+ Thumbnail := TBitmap.Create;
+ try
+ Renderer.SetCP(Maincp);
+ Renderer.Render;
+
+ Thumbnail.PixelFormat := pf24bit;
+ Thumbnail.HandleType := bmDIB;
+ Thumbnail.Width := ThumbnailSize;
+ Thumbnail.Height := ThumbnailSize;
+ Thumbnail.Canvas.Brush.Color := WinColor; // theme-aware system color
+ Thumbnail.Canvas.FillRect(Rect(0, 0, ThumbnailSize, ThumbnailSize));
+ Thumbnail.Canvas.Draw(round(ThumbnailSize / 2 - w / 2),
+ round(ThumbnailSize / 2 - h / 2), Renderer.GetImage);
+
+ try
+ UsedThumbnails.Replace(i + 1, Thumbnail, nil);
+ ListView1.Items.Item[i].Update;
+ Trace2('Updating thumbnail for "' + ListView1.Items[i].Caption + '"');
+ except
+ ListView1.Items[i].ImageIndex := 0;
+ end;
+ finally
+ Thumbnail.Free;
+ Thumbnail := nil;
+ Renderer.Free;
+ // restore old settings
+ Maincp.AdjustScale(w_old, h_old);
+ Maincp.sample_density := sd;
+ end;
+end;
+
+procedure TMainForm.UpdateThumbnails; // AV: refreshes images only
+var
+ i: integer;
+ thumbs: TThumbnailThread;
+begin
+ UsedThumbnails.Clear;
+ UsedThumbnails.Add(ThumbnailPlaceholder, nil);
+
+ with ListView1.Items do
+ begin
+ BeginUpdate;
+ for i := 0 to Count - 1 do Item[i].ImageIndex := 0; // hourglass icon
+ EndUpdate;
+ end;
+
+ thumbs := TThumbnailThread.Create;
+ thumbs.Start;
+ GeneratingThumbs := True;
+
+ // hightlight the item if possible
+ ListView1.Selected := ListView1.ItemFocused;
+end;
+
+procedure TMainForm.SetThumbnailProperties; // AV
+begin
+ if UseSmallThumbnails then
+ ThumbnailSize := 96
+ else
+ ThumbnailSize := 128;
+ UsedThumbnails.Height := ThumbnailSize;
+ UsedThumbnails.Width := ThumbnailSize;
+
+ TThumbnailThread.FThumbnailSize := ThumbnailSize;
+ LoadThumbnailPlaceholder(ThumbnailSize);
+
+ mnuResetUI.Click;
+end;
+
+procedure TMainForm.mnuReportFlameClick(Sender: TObject);
+var
+ str: string;
+ i : integer;
+begin
+ if (not LoadForm.Visible) then LoadForm.Show;
+ str := MainCP.name + #13#10 + StringOfChar('=', length(MainCP.name)) + #13#10 +
+ Format(TextByKey('main-report-transformcount'), [MainCp.NumXForms]) + #13#10 +
+ Format(TextByKey('main-report-finaltransform'), [IfThen(maincp.finalXformEnabled, TextByKey('common-yes'), TextByKey('common-no'))]) + #13#10 +
+ TextByKey('main-report-usedplugins');
+ MainCP.FillUsedPlugins;
+ if MainCp.used_plugins.Count = 0 then begin
+ LoadForm.Output.Text := LoadForm.Output.Text + #13#10 + str + ' ' + TextByKey('main-report-noplugins') + #13#10;
+ exit;
+ end;
+ for i := 0 to MainCP.used_plugins.Count-1 do begin
+ str := str + #13#10 + ' - ' + MainCP.used_plugins[i];
+ end;
+ // AV: added 3D and DC status
+ str := str + #13#10 + TextByKey('main-report-directcoloring') + #32 +
+ IfThen((pos('dc', str) > 0) or (pos('falloff', str) > 0) or (pos('affine3D', str) > 0),
+ TextByKey('common-yes'), TextByKey('common-no'));
+ str := str + #13#10 + TextByKey('main-report-flame3d') + #32 +
+ IfThen((MainCP.cameraPitch <> 0) or (MainCP.cameraRoll <> 0) or (pos('_rotate_', str) > 0),
+ TextByKey('common-yes'), TextByKey('common-no'));
+
+ LoadForm.Output.Text := LoadForm.Output.Text + #13#10 + str + #13#10;
+end;
+
+procedure TMainForm.mnuExportChaoticaClick(Sender: TObject);
+begin
+ MainCP.FillUsedPlugins;
+ C_ExecuteChaotica(FlameToXml(MainCp, false, false), MainCp.used_plugins, UseX64IfPossible);
+end;
+
+procedure TMainForm.mnuManualClick(Sender: TObject); // AV: Apo7X link is dead...
+begin
+ // AV: first link is for Russian people only
+ // WinShellOpen('https://books.google.ru/books?id=PbMAAQAAQBAJ&printsec=frontcover&hl=ru#v=onepage&q&f=false');
+ WinShellOpen('https://www.amazon.com/Fractals-Everywhere-Dover-Books-Mathematics/dp/0486488705');
+end;
+
+procedure TMainForm.CalculateColorSpeed1Click(Sender: TObject); // AV
+begin
+ StopThread;
+ UpdateUndo;
+ MainCp.CalculateColorSpeed;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.CalculateWeightsClick(Sender: TObject); // AV
+begin
+ StopThread;
+ UpdateUndo;
+ MainCp.CalculateWeights;
+ RedrawTimer.Enabled := True;
+ UpdateWindows;
+end;
+
+procedure TMainForm.CreateSubstMap;
+begin
+ // AV: set backward compatibility since both plugins crash the scripter
+ SubstSource.Add('epispiral'); SubstTarget.Add('Epispiral');
+ SubstSource.Add('epispiral_n'); SubstTarget.Add('Epispiral_n');
+ SubstSource.Add('epispiral_thickness'); SubstTarget.Add('Epispiral_thickness');
+ SubstSource.Add('epispiral_holes'); SubstTarget.Add('Epispiral_holes');
+
+ { AV: Apo7X has a bug here: when a source variation
+ is avaliable as a plugin, the application internally sets both versions
+ (source and substitute). It gives wrong visual results. So I added a checking }
+ if (GetVariationIndex('cross2') < 0) then begin // only if plugin is not loaded
+ SubstSource.Add('cross2'); SubstTarget.Add('cross');
+ end;
+ if (GetVariationIndex('bwraps2') < 0) then begin
+ SubstSource.Add('bwraps2'); SubstTarget.Add('bwraps');
+ SubstSource.Add('bwraps2_cellsize'); SubstTarget.Add('bwraps_cellsize');
+ SubstSource.Add('bwraps2_space'); SubstTarget.Add('bwraps_space');
+ SubstSource.Add('bwraps2_gain'); SubstTarget.Add('bwraps_gain');
+ SubstSource.Add('bwraps2_inner_twist'); SubstTarget.Add('bwraps_inner_twist');
+ SubstSource.Add('bwraps2_outer_twist'); SubstTarget.Add('bwraps_outer_twist');
+ end;
+ if (GetVariationIndex('pre_bwraps2') < 0) then begin
+ SubstSource.Add('pre_bwraps2'); SubstTarget.Add('pre_bwraps');
+ SubstSource.Add('pre_bwraps2_cellsize'); SubstTarget.Add('pre_bwraps_cellsize');
+ SubstSource.Add('pre_bwraps2_space'); SubstTarget.Add('pre_bwraps_space');
+ SubstSource.Add('pre_bwraps2_gain'); SubstTarget.Add('pre_bwraps_gain');
+ SubstSource.Add('pre_bwraps2_inner_twist'); SubstTarget.Add('pre_bwraps_inner_twist');
+ SubstSource.Add('pre_bwraps2_outer_twist'); SubstTarget.Add('pre_bwraps_outer_twist');
+ end;
+ if (GetVariationIndex('post_bwraps2') < 0) then begin
+ SubstSource.Add('post_bwraps2'); SubstTarget.Add('post_bwraps');
+ SubstSource.Add('post_bwraps2_cellsize'); SubstTarget.Add('post_bwraps_cellsize');
+ SubstSource.Add('post_bwraps2_space'); SubstTarget.Add('post_bwraps_space');
+ SubstSource.Add('post_bwraps2_gain'); SubstTarget.Add('post_bwraps_gain');
+ SubstSource.Add('post_bwraps2_inner_twist'); SubstTarget.Add('post_bwraps_inner_twist');
+ SubstSource.Add('post_bwraps2_outer_twist'); SubstTarget.Add('post_bwraps_outer_twist');
+ end;
+ if (GetVariationIndex('bwraps7') < 0) then begin
+ SubstSource.Add('bwraps7'); SubstTarget.Add('bwraps');
+ SubstSource.Add('bwraps7_cellsize'); SubstTarget.Add('bwraps_cellsize');
+ SubstSource.Add('bwraps7_space'); SubstTarget.Add('bwraps_space');
+ SubstSource.Add('bwraps7_gain'); SubstTarget.Add('bwraps_gain');
+ SubstSource.Add('bwraps7_inner_twist'); SubstTarget.Add('bwraps_inner_twist');
+ SubstSource.Add('bwraps7_outer_twist'); SubstTarget.Add('bwraps_outer_twist');
+ end;
+ if (GetVariationIndex('logn') < 0) then begin
+ SubstSource.Add('logn'); SubstTarget.Add('log');
+ SubstSource.Add('logn_base'); SubstTarget.Add('log_base');
+ end;
+ if (GetVariationIndex('circleblur') < 0) then begin // AV
+ SubstSource.Add('circleblur'); SubstTarget.Add('blur_circle');
+ end;
+ if (GetVariationIndex('circle2') < 0) then begin // AV
+ SubstSource.Add('circle2'); SubstTarget.Add('blur_circle');
+ end;
+ if (GetVariationIndex('boarders') < 0) then begin // AV
+ SubstSource.Add('boarders'); SubstTarget.Add('boarders2');
+ end;
+ if (GetVariationIndex('dc_boarders') < 0) then begin // AV
+ SubstSource.Add('dc_boarders'); SubstTarget.Add('boarders2');
+ end;
+ if (GetVariationIndex('splits3D') < 0) then begin // AV
+ SubstSource.Add('splits3D'); SubstTarget.Add('splits');
+ SubstSource.Add('splits3D_x'); SubstTarget.Add('splits_x');
+ SubstSource.Add('splits3D_y'); SubstTarget.Add('splits_y');
+ SubstSource.Add('splits3D_z'); SubstTarget.Add('splits_z');
+ end;
+ if (GetVariationIndex('blob_fl') < 0) then // AV
+ begin
+ SubstSource.Add('blob_fl'); SubstTarget.Add('blob');
+ SubstSource.Add('blob_fl_high'); SubstTarget.Add('blob_fl_high');
+ SubstSource.Add('blob_fl_low'); SubstTarget.Add('blob_low');
+ SubstSource.Add('blob_fl_waves'); SubstTarget.Add('blob_waves');
+ end;
+ if (GetVariationIndex('twintrian2') < 0) then begin // AV
+ SubstSource.Add('twintrian2'); SubstTarget.Add('twintrian');
+ end;
+ if (GetVariationIndex('Z_disc2') < 0) then // AV
+ begin
+ SubstSource.Add('Z_disc2'); SubstTarget.Add('disc2');
+ SubstSource.Add('Z_disc2_rot'); SubstTarget.Add('disc2_rot');
+ SubstSource.Add('Z_disc2_twist'); SubstTarget.Add('disc2_twist');
+ end;
+end;
+
+function TMainForm.ReadWithSubst(Attributes: TAttrList; attrname: string): string;
+var i: integer; v: TStringType;
+begin
+ v := Attributes.Value(TStringType(attrname));
+ if (v <> '') then begin
+ Result := String(v);
+ Exit;
+ end;
+
+ for i := 0 to SubstTarget.Count - 1 do begin
+ if (SubstTarget[i] = attrname) then begin
+ v := Attributes.Value(TStringType(SubstSource[i]));
+ if (v <> '') then begin
+ Result := String(v);
+ Exit;
+ end;
+ end;
+ end;
+
+ Result := '';
+end;
+
+end.
diff --git a/Forms/Mutate.dfm b/Forms/Mutate.dfm
new file mode 100644
index 0000000..1f801f4
--- /dev/null
+++ b/Forms/Mutate.dfm
@@ -0,0 +1,383 @@
+object MutateForm: TMutateForm
+ Left = 589
+ Top = 326
+ BorderIcons = [biSystemMenu, biMinimize]
+ BorderStyle = bsSingle
+ Caption = 'Mutation'
+ ClientHeight = 398
+ ClientWidth = 422
+ Color = clBtnFace
+ Constraints.MinHeight = 400
+ Constraints.MinWidth = 400
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poDefault
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ DesignSize = (
+ 422
+ 398)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object GroupBox1: TGroupBox
+ Left = 8
+ Top = 8
+ Width = 409
+ Height = 273
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ Caption = 'Directions'
+ TabOrder = 0
+ DesignSize = (
+ 409
+ 273)
+ object Panel10: TPanel
+ Left = 12
+ Top = 20
+ Width = 384
+ Height = 238
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ BevelOuter = bvNone
+ TabOrder = 0
+ object Panel6: TPanel
+ Left = 112
+ Top = 168
+ Width = 108
+ Height = 80
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 0
+ object Image6: TImage
+ Tag = 6
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = MutantClick
+ end
+ end
+ object Panel7: TPanel
+ Left = 0
+ Top = 168
+ Width = 108
+ Height = 80
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 1
+ object Image7: TImage
+ Tag = 7
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = MutantClick
+ end
+ end
+ object Panel4: TPanel
+ Left = 224
+ Top = 84
+ Width = 108
+ Height = 80
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 2
+ object Image4: TImage
+ Tag = 4
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = MutantClick
+ end
+ end
+ object Panel0: TPanel
+ Left = 112
+ Top = 84
+ Width = 108
+ Height = 80
+ HelpContext = 2003
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 3
+ object Image0: TImage
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = Image0Click
+ end
+ end
+ object Panel8: TPanel
+ Left = 0
+ Top = 84
+ Width = 108
+ Height = 80
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 4
+ object Image8: TImage
+ Tag = 8
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = MutantClick
+ end
+ end
+ object Panel3: TPanel
+ Left = 224
+ Top = 0
+ Width = 108
+ Height = 80
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 5
+ object Image3: TImage
+ Tag = 3
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = MutantClick
+ end
+ end
+ object Panel2: TPanel
+ Left = 112
+ Top = 0
+ Width = 108
+ Height = 80
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 6
+ object Image2: TImage
+ Tag = 2
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = MutantClick
+ end
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 108
+ Height = 80
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 7
+ object Image1: TImage
+ Tag = 1
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = MutantClick
+ end
+ end
+ object Panel5: TPanel
+ Left = 224
+ Top = 168
+ Width = 108
+ Height = 80
+ BevelOuter = bvLowered
+ Caption = 'PrevPnl3'
+ Color = clBlack
+ ShowCaption = False
+ TabOrder = 8
+ object Image5: TImage
+ Tag = 5
+ Left = 1
+ Top = 1
+ Width = 106
+ Height = 78
+ Align = alClient
+ PopupMenu = QualityPopup
+ Stretch = True
+ OnClick = MutantClick
+ end
+ end
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 8
+ Top = 288
+ Width = 409
+ Height = 105
+ Anchors = [akLeft, akRight, akBottom]
+ TabOrder = 1
+ DesignSize = (
+ 409
+ 105)
+ object scrollTime: TScrollBar
+ Left = 120
+ Top = 20
+ Width = 202
+ Height = 20
+ Anchors = [akLeft, akTop, akRight]
+ LargeChange = 5
+ Max = 50
+ Min = 1
+ PageSize = 0
+ Position = 1
+ TabOrder = 0
+ OnChange = scrollTimeChange
+ end
+ object cmbTrend: TComboBox
+ Left = 119
+ Top = 48
+ Width = 282
+ Height = 21
+ Style = csDropDownList
+ Anchors = [akLeft, akTop, akRight]
+ DropDownCount = 16
+ TabOrder = 1
+ OnChange = cmbTrendChange
+ Items.Strings = (
+ 'Random'
+ 'Linear')
+ end
+ object chkSameNum: TCheckBox
+ Left = 12
+ Top = 78
+ Width = 389
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Same no. of transforms'
+ TabOrder = 2
+ OnClick = chkSameNumClick
+ end
+ object pnlSpeed: TPanel
+ Left = 12
+ Top = 20
+ Width = 101
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Speed'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object txtTime: TEdit
+ Left = 328
+ Top = 20
+ Width = 73
+ Height = 21
+ Anchors = [akTop, akRight]
+ ReadOnly = True
+ TabOrder = 4
+ Text = '0.25'
+ end
+ object pnlTrend: TPanel
+ Left = 12
+ Top = 48
+ Width = 101
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Trend'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ end
+ object Timer: TTimer
+ Enabled = False
+ Interval = 100
+ OnTimer = TimerTimer
+ Left = 168
+ Top = 80
+ end
+ object QualityPopup: TPopupMenu
+ Images = MainForm.Buttons
+ Left = 144
+ Top = 40
+ object mnuLowQuality: TMenuItem
+ Caption = 'Low Quality'
+ RadioItem = True
+ OnClick = mnuLowQualityClick
+ end
+ object mnuMediumQuality: TMenuItem
+ Caption = 'Medium Quality'
+ Checked = True
+ RadioItem = True
+ OnClick = mnuMediumQualityClick
+ end
+ object mnuHighQuality: TMenuItem
+ Caption = 'High Quality'
+ RadioItem = True
+ OnClick = mnuHighQualityClick
+ end
+ object N3: TMenuItem
+ Caption = '-'
+ end
+ object mnuBack: TMenuItem
+ Caption = 'Previous'
+ Enabled = False
+ ImageIndex = 4
+ OnClick = mnuBackClick
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object mnuMaintainSym: TMenuItem
+ Caption = 'Maintain Symmetry'
+ Checked = True
+ OnClick = mnuMaintainSymClick
+ end
+ object N2: TMenuItem
+ Caption = '-'
+ end
+ object mnuResetLocation: TMenuItem
+ Caption = 'Reset Location'
+ Checked = True
+ OnClick = mnuResetLocationClick
+ end
+ end
+end
diff --git a/Forms/Mutate.pas b/Forms/Mutate.pas
new file mode 100644
index 0000000..69faaac
--- /dev/null
+++ b/Forms/Mutate.pas
@@ -0,0 +1,634 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit Mutate;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ExtCtrls, StdCtrls, ControlPoint, ComCtrls, Menus, Buttons, Cmap,
+ RenderingInterface, Translation, Curves;
+
+type
+ TMutateForm = class(TForm)
+ GroupBox1: TGroupBox;
+ Timer: TTimer;
+ GroupBox2: TGroupBox;
+ scrollTime: TScrollBar;
+ cmbTrend: TComboBox;
+ chkSameNum: TCheckBox;
+ QualityPopup: TPopupMenu;
+ mnuLowQuality: TMenuItem;
+ mnuMediumQuality: TMenuItem;
+ mnuHighQuality: TMenuItem;
+ N3: TMenuItem;
+ mnuResetLocation: TMenuItem;
+ mnuBack: TMenuItem;
+ N1: TMenuItem;
+ mnuMaintainSym: TMenuItem;
+ N2: TMenuItem;
+ Panel10: TPanel;
+ Panel6: TPanel;
+ Image6: TImage;
+ Panel7: TPanel;
+ Image7: TImage;
+ Panel4: TPanel;
+ Image4: TImage;
+ Panel0: TPanel;
+ Image0: TImage;
+ Panel8: TPanel;
+ Image8: TImage;
+ Panel3: TPanel;
+ Image3: TImage;
+ Panel2: TPanel;
+ Image2: TImage;
+ Panel1: TPanel;
+ Image1: TImage;
+ Panel5: TPanel;
+ Image5: TImage;
+ pnlSpeed: TPanel;
+ txtTime: TEdit;
+ pnlTrend: TPanel;
+ //procedure Panel10Resize(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure Image0Click(Sender: TObject);
+ procedure MutantClick(Sender: TObject);
+ procedure sbTimeChange(Sender: TObject);
+ procedure TimerTimer(Sender: TObject);
+ procedure scrollTimeChange(Sender: TObject);
+ procedure cmbTrendChange(Sender: TObject);
+ procedure btnCancelClick(Sender: TObject);
+ procedure mnuHighQualityClick(Sender: TObject);
+ procedure mnuLowQualityClick(Sender: TObject);
+ procedure mnuMediumQualityClick(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure chkSameNumClick(Sender: TObject);
+ procedure mnuResetLocationClick(Sender: TObject);
+ procedure mnuBackClick(Sender: TObject);
+ procedure mnuMaintainSymClick(Sender: TObject);
+ private
+ name: string;
+ bm: TBitmap;
+ PreviewDensity: double;
+ Updating: boolean;
+ cps: array[0..8] of TControlPoint;
+ Mutants: array[0..8] of TControlPoint;
+ Render: TRenderer;
+ Time: double;
+ bstop: boolean;
+ brightness, gamma, vibrancy, contrast, gamma_threshold: double;
+ width, height: integer; // AV: to keep original flame size
+ seed, InitSeed: integer;
+ procedure RandomSet;
+ procedure ShowMain;
+ procedure ShowMutants;
+ procedure Interpolate;
+ public
+ Zoom: Double;
+ Center: array[0..1] of double;
+ cmap: TColorMap;
+ procedure UpdateDisplay;
+ procedure UpdateFlame;
+ end;
+
+var
+ MutateForm: TMutateForm;
+
+implementation
+
+uses
+ Main, Global, Registry, Editor, Adjust, XFormMan;
+
+{$R *.DFM}
+
+procedure TMutateForm.UpdateFlame;
+begin
+ MainForm.StopThread;
+ MainForm.UpdateUndo;
+ MainCp.Copy(cps[0]);
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ MainCp.cmap := cmap;
+ MainCp.name := name; // this is kinda funny
+ MainCp.AdjustScale(width, height); // AV: restore normal size
+ if mnuResetLocation.checked then
+ begin
+ //MainForm.Mainzoom := cps[0].zoom;
+ MainForm.Center[0] := cps[0].Center[0];
+ MainForm.Center[1] := cps[0].Center[1];
+ end;
+ MainForm.RedrawTimer.enabled := true;
+ if EditForm.Visible then EditForm.UpdateDisplay;
+// if AdjustForm.Visible then AdjustForm.UpdateDisplay;
+end;
+
+procedure TMutateForm.UpdateDisplay;
+begin
+ cps[0].copy(MainCp);
+ cps[0].AdjustScale(Image0.Width, Image0.Height);
+ cps[0].cmap := MainCp.cmap;
+ cmap := MainCp.cmap;
+ name := Maincp.name;
+ zoom := MainCp.zoom;
+ width := MainCp.Width; // AV
+ height := MainCp.Height; // AV
+ center[0] := MainCp.center[0];
+ center[1] := MainCp.center[1];
+ vibrancy := cps[0].vibrancy;
+ gamma := cps[0].gamma;
+ gamma_threshold := cps[0].gamma_threshold; // AV
+ brightness := cps[0].brightness;
+ contrast := cps[0].contrast; // AV
+ Interpolate;
+ ShowMain;
+ Application.ProcessMessages;
+ ShowMutants;
+end;
+
+procedure TMutateForm.ShowMain;
+begin
+ cps[0].Width := Image0.Width;
+ cps[0].Height := Image0.Height;
+ cps[0].spatial_oversample := defOversample;
+ cps[0].spatial_filter_radius := defFilterRadius;
+ cps[0].sample_density := PreviewDensity;
+ cps[0].brightness := brightness;
+ cps[0].contrast := contrast; // AV
+ cps[0].gamma := gamma;
+ cps[0].gamma_threshold := gamma_threshold; // AV
+ cps[0].vibrancy := vibrancy;
+ cps[0].sample_density := PreviewDensity;
+ cps[0].cmap := cmap;
+ cps[0].background := MainCp.background;
+ if mnuResetLocation.checked then begin
+ cps[0].CalcBoundbox;
+ zoom := 0;
+ center[0] := cps[0].center[0];
+ center[1] := cps[0].Center[1];
+ end;
+ cps[0].zoom := zoom;
+ cps[0].center[0] := center[0];
+ cps[0].center[1] := center[1];
+
+ Render.SetCP(cps[0]);
+ Render.Render;
+ BM.Assign(Render.GetImage);
+ Image0.Picture.Graphic := bm;
+end;
+
+procedure TMutateForm.ShowMutants;
+var
+ i: integer;
+begin
+ if Visible = false then exit;
+ Updating := true;
+ for i := 1 to 8 do
+ begin
+ mutants[i].Width := Image1.Width;
+ mutants[i].Height := Image1.Height;
+ mutants[i].spatial_filter_radius := defFilterRadius;
+ mutants[i].spatial_oversample := defOversample;
+ mutants[i].sample_density := PreviewDensity;
+ mutants[i].brightness := brightness;
+ mutants[i].contrast := contrast; // AV
+ mutants[i].gamma := gamma;
+ mutants[i].vibrancy := vibrancy;
+ mutants[i].gamma_threshold := gamma_threshold; // AV
+
+ if mnuResetLocation.checked then
+ begin
+ mutants[i].CalcBoundbox;
+ mutants[i].zoom := 0;
+ end
+ else begin
+ mutants[i].zoom := zoom;
+ mutants[i].center[0] := center[0];
+ mutants[i].center[1] := center[1];
+ end;
+
+ Render.SetCP(mutants[i]);
+ Render.Render;
+ BM.Assign(Render.GetImage);
+
+ case i of
+ 1: begin
+ Image1.Picture.Graphic := bm;
+ Image1.Refresh;
+ end;
+ 2: begin
+ Image2.Picture.Graphic := bm;
+ Image2.Refresh;
+ end;
+ 3: begin
+ Image3.Picture.Graphic := bm;
+ Image3.Refresh;
+ end;
+ 4: begin
+ Image4.Picture.Graphic := bm;
+ Image4.Refresh;
+ end;
+ 5: begin
+ Image5.Picture.Graphic := bm;
+ Image5.Refresh;
+ end;
+ 6: begin
+ Image6.Picture.Graphic := bm;
+ Image6.Refresh;
+ end;
+ 7: begin
+ Image7.Picture.Graphic := bm;
+ Image7.Refresh;
+ end;
+ 8: begin
+ Image8.Picture.Graphic := bm;
+ Image8.Refresh;
+ end;
+ end;
+ Updating := false;
+ end;
+end;
+
+procedure TMutateForm.Interpolate;
+var i, j, k: Integer;
+begin
+ if MainCp = nil then Exit;
+
+ for i := 1 to 8 do
+ begin
+ if bstop then exit;
+ cps[0].Time := 0;
+ cps[i].Time := 1;
+ (* -X- something is not right here...
+ Mutants[i] may be destroyed already
+ Investigate? *)
+ Mutants[i].clear;
+ Mutants[i].InterpolateX(cps[0], cps[i], Time / 100);
+ Mutants[i].cmapindex := cps[0].cmapindex;
+ Mutants[i].cmap := cps[0].cmap;
+ Mutants[i].background := MainCp.background;
+ if mnuMaintainSym.Checked then // maintain symmetry
+ for j := 0 to transforms - 1 do
+ if cps[0].xform[j].Symmetry = 1 then
+ mutants[i].xform[j].Assign(cps[0].xform[j]);
+ end;
+end;
+
+procedure TMutateForm.RandomSet;
+var i, j, k: Integer;
+begin
+ RandSeed := seed;
+ for i := 1 to 8 do
+ begin
+ cps[i].clear;
+ if chkSameNum.checked then
+ cps[i].RandomCP(transforms, transforms, false)
+ else
+ cps[i].RandomCP(mutantMinTransforms, mutantMaxTransforms, false);
+
+ if cmbTrend.ItemIndex = NRVAR then // AV
+ cps[i].SetVariation(vRandom)
+ else
+ for j := 0 to cps[i].NumXforms-1 do
+ begin
+ for k := 0 to NrVar-1 do // AV: simplified the calculations
+ cps[i].xform[j].SetVariation(k, 0);
+ cps[i].xform[j].SetVariation(cmbTrend.ItemIndex, 1);
+ end;
+
+ if cps[0].HasFinalXForm = false then
+ begin
+ cps[i].xform[cps[i].NumXForms].Clear;
+ cps[i].xform[cps[i].NumXForms].symmetry := 1;
+ end;
+ end;
+ Interpolate;
+end;
+
+procedure TMutateForm.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+begin
+ { Read position from registry }
+
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Mutate', False) then
+ begin
+ if Registry.ValueExists('Left') then
+ MutateForm.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ MutateForm.Top := Registry.ReadInteger('Top');
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+ {
+ if (cps[0].xform[0].density <> 0) and Assigned(MainCp) then
+ begin // hmm...!?
+ //Interpolate; // AV: this method is already called inside RandomSet
+ ShowMain;
+ ShowMutants;
+ end;
+ }
+end;
+
+procedure TMutateForm.FormCreate(Sender: TObject);
+var
+ i: integer;
+begin
+ self.Caption := TextByKey('mutation-title');
+ GroupBox1.Caption := TextByKey('mutation-directions');
+ pnlSpeed.Caption := TextByKey('mutation-speed');
+ pnlTrend.Caption := TextByKey('mutation-trend');
+ chkSameNum.Caption := TextByKey('mutation-keepnumberoftransforms');
+ mnuLowQuality.Caption := TextByKey('common-lowquality');
+ mnuMediumQuality.Caption := TextByKey('common-mediumquality');
+ mnuHighQuality.Caption := TextByKey('common-highquality');
+ mnuResetLocation.Caption := TextByKey('common-resetlocation');
+ mnuMaintainSym.Caption := TextByKey('mutation-maintainsymmetry');
+ mnuBack.Caption := TextByKey('mutation-previous');
+ cmbTrend.Items.clear;
+
+ for i:= 0 to NRVAR -1 do // AV
+ cmbTrend.Items.Add(varnames(i));
+ cmbTrend.Items.Add(TextByKey('mutation-randomtrend'));
+
+ bm := TBitMap.Create;
+
+ case MutatePrevQual of
+ 0: begin
+ mnuLowQuality.Checked := true;
+ PreviewDensity := prevLowQuality;
+ end;
+ 1: begin
+ mnuMediumQuality.Checked := true;
+ PreviewDensity := prevMediumQuality;
+ end;
+ 2: begin
+ mnuHighQuality.Checked := true;
+ PreviewDensity := prevHighQuality;
+ end;
+ end;
+
+ Render := TRenderer.Create;
+ for i := 0 to 8 do
+ begin
+ cps[i] := TControlPoint.Create;
+ Mutants[i] := TControlPoint.Create;
+ end;
+
+ Time := 35;
+ scrollTime.Position := 25;
+ txtTime.Text := '0.25'; // AV
+ cmbTrend.ItemIndex := NRVAR; // AV
+ InitSeed := random(1234567890);
+ seed := InitSeed;
+ RandomSet;
+end;
+
+procedure TMutateForm.FormDestroy(Sender: TObject);
+var
+ i: integer;
+begin
+ Render.Stop;
+ Render.Free;
+ for i := 0 to 8 do
+ begin
+ cps[i].Free;
+ Mutants[i].Free;
+ end;
+ bm.free;
+end;
+
+procedure TMutateForm.Image0Click(Sender: TObject);
+begin
+ Render.Stop;
+ mnuBack.Enabled := true;
+ inc(seed);
+ RandomSet;
+ ShowMutants;
+end;
+
+procedure TMutateForm.MutantClick(Sender: TObject);
+var
+ i: integer;
+ cpt: TControlPoint;
+begin
+ cpt := TControlPoint.Create;
+ cpt.Copy(cps[0], false, transforms); // AV
+ bstop := true;
+
+ // AV: optimized fast version without checking indices
+ i := TImage(Sender).Tag;
+ cps[0].Time := 0;
+ cps[i].Time := 1;
+ cps[0].InterpolateX(cps[0], cps[i], Time / 100);
+
+ if mnuMaintainSym.Checked then // maintain symmetry
+ begin
+ for i := 0 to transforms - 1 do
+ begin
+ if cpt.xform[i].Symmetry = 1 then
+ cps[0].xform[i].Assign(cpt.xform[i]);
+ end;
+ end;
+
+ bstop := false;
+ ShowMain;
+ Interpolate;
+ ShowMutants;
+ UpdateFlame;
+ cpt.free;
+end;
+
+procedure TMutateForm.sbTimeChange(Sender: TObject);
+begin
+ bstop := true;
+ Render.Stop;
+ Time := scrollTime.Position;
+ bstop := false;
+ Interpolate;
+ ShowMutants;
+end;
+
+procedure TMutateForm.TimerTimer(Sender: TObject);
+begin
+ Timer.Enabled := false;
+ if (Time <> scrollTime.Position) and (not updating) then
+ begin
+ Time := scrollTime.Position;
+ Interpolate;
+ ShowMutants;
+ end;
+end;
+
+procedure TMutateForm.scrollTimeChange(Sender: TObject);
+begin
+ Timer.Enabled := true;
+ txtTime.Text := FloatToStr(scrollTime.Position / 100);
+end;
+
+procedure TMutateForm.cmbTrendChange(Sender: TObject);
+var
+ i, j, k: integer;
+begin
+ for i := 1 to 8 do
+ if cmbTrend.ItemIndex = NRVAR then
+ cps[i].SetVariation(VRandom) // AV
+ else
+ for j := 0 to cps[i].NumXforms-1 do
+ begin // AV
+ for k := 0 to NrVar-1 do
+ cps[i].xform[j].SetVariation(k, 0);
+ cps[i].xform[j].SetVariation(cmbTrend.ItemIndex, 1);
+ end;
+
+ Interpolate;
+ ShowMutants;
+end;
+
+procedure TMutateForm.btnCancelClick(Sender: TObject);
+begin
+ ModalResult := mrCancel;
+end;
+
+procedure TMutateForm.mnuHighQualityClick(Sender: TObject);
+begin
+ mnuHighQuality.Checked := True;
+ PreviewDensity := prevHighQuality;
+ MutatePrevQual := 2;
+ ShowMain;
+ ShowMutants;
+end;
+
+procedure TMutateForm.mnuLowQualityClick(Sender: TObject);
+begin
+ mnuLowQuality.Checked := True;
+ PreviewDensity := prevLowQuality;
+ MutatePrevQual := 0;
+ ShowMain;
+ ShowMutants;
+end;
+
+procedure TMutateForm.mnuMediumQualityClick(Sender: TObject);
+begin
+ mnuMediumQuality.Checked := True;
+ PreviewDensity := prevMediumQuality;
+ MutatePrevQual := 1;
+ ShowMain;
+ ShowMutants;
+end;
+
+procedure TMutateForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Mutate', True) then
+ begin
+ Registry.WriteInteger('Top', MutateForm.Top);
+ Registry.WriteInteger('Left', MutateForm.Left);
+ end;
+ finally
+ Registry.Free;
+ end;
+end;
+
+procedure TMutateForm.chkSameNumClick(Sender: TObject);
+begin
+ RandomSet;
+ // Interpolate; // AV: this method is already called inside RandomSet
+ ShowMutants;
+end;
+
+procedure TMutateForm.mnuResetLocationClick(Sender: TObject);
+begin
+ mnuResetLocation.Checked := not mnuResetLocation.Checked;
+ if not mnuResetLocation.checked then
+ begin
+ cps[0].width := MainCp.width;
+ cps[0].height := MainCp.height;
+ cps[0].pixels_per_unit := MainCp.pixels_per_unit;
+ cps[0].AdjustScale(Image0.width, Image0.Height);
+ cps[0].zoom := MainCp.zoom;
+ cps[0].center[0] := MainCp.center[0];
+ cps[0].center[1] := MainCp.center[1];
+ zoom := cps[0].zoom;
+ center[0] := cps[0].center[0];
+ center[1] := cps[0].center[1];
+ end;
+ ShowMain;
+ ShowMutants;
+end;
+
+procedure TMutateForm.mnuBackClick(Sender: TObject);
+begin
+ Render.Stop;
+ if seed > InitSeed then
+ dec(seed);
+ if seed = InitSeed then mnuBack.enabled := false;
+ RandomSet;
+ ShowMutants;
+end;
+
+procedure TMutateForm.mnuMaintainSymClick(Sender: TObject);
+begin
+ mnuMaintainSym.Checked := not mnuMaintainSym.Checked;
+ Interpolate;
+ ShowMutants;
+end;
+
+(*
+ procedure TMutateForm.Panel10Resize(Sender: TObject);
+ const gap:integer = 4 ;
+ var
+ w, h : integer;
+ begin
+ w := (Panel10.Width - 2*gap) div 3;
+ h := (Panel10.Height - 2*gap) div 3;
+
+ Panel0.Width := w; Panel1.Width := w; Panel2.Width := w;
+ Panel3.Width := w; Panel4.Width := w; Panel5.Width := w;
+ Panel6.Width := w; Panel7.Width := w; Panel8.Width := w;
+ Panel0.Height := h; Panel1.Height := h; Panel2.Height := h;
+ Panel3.Height := h; Panel4.Height := h; Panel5.Height := h;
+ Panel6.Height := h; Panel7.Height := h; Panel8.Height := h;
+
+ Panel2.Left := w + gap; Panel0.Left := w + gap; Panel6.Left := w + gap;
+ Panel3.Left := 2*(w + gap); Panel4.Left := 2*(w + gap); Panel5.Left := 2*(w + gap);
+
+ Panel8.Top := h + gap; Panel0.Top := h + gap; Panel4.Top := h + gap;
+ Panel7.Top := 2*(h + gap); Panel6.Top := 2*(h + gap); Panel5.Top := 2*(h + gap);
+ end;
+
+*)
+end.
+
+
diff --git a/Forms/Options.dfm b/Forms/Options.dfm
new file mode 100644
index 0000000..00884a8
--- /dev/null
+++ b/Forms/Options.dfm
@@ -0,0 +1,4308 @@
+object OptionsForm: TOptionsForm
+ Left = 899
+ Top = 428
+ BorderIcons = [biSystemMenu, biMinimize, biMaximize, biHelp]
+ BorderStyle = bsSingle
+ Caption = 'Options'
+ ClientHeight = 498
+ ClientWidth = 524
+ Color = clBtnFace
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ HelpFile = 'Apophysis AV.chm'
+ Icon.Data = {
+ 0000010001001010000001002000680400001600000028000000100000002000
+ 0000010020000000000040040000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007C75
+ 73FF4E4B4BFF544F4DFF544F4DFF544F4DFF56514DFF53504CFF524F4BFF524F
+ 4CFF524F4BFF514E4BFF544E46FF00000000000000000000000000000000D9CF
+ C8FFFFFFFFFFFBFDFFFFFBFDFFFFFFFFF6FFFFFFF6FFFFFFF6FFFFF9ECFFFFF0
+ E1FFFFEAD5FFFFEAD2FF544E46FF00000000000000000000000000000000D2C8
+ C1FFFFFFFFFFC4AFA2FFC4AFA2FFFFFBF9FFC4AFA2FFC4AFA2FFC4AFA2FFC4AF
+ A2FFC4AFA2FFFDDECBFF544E46FF00000000000000000000000000000000D2C8
+ C1FFFFFFFFFFFBFDFFFFFBFDFFFFFFFEFCFFFDFAF8FFFBF4EFFFFBEEE6FFFAE9
+ DEFFF8E2D2FFFFE2D0FF544E46FF00000000000000000000000000000000D3C9
+ C2FFFFFFFFFFC4AFA2FFC4AFA2FFFFFFFEFFC4AFA2FFC4AFA2FFC4AFA2FFC4AF
+ A2FFC4AFA2FFFFE5D6FF544E46FF00000000000000000000000000000000D1C7
+ C0FFFFFFFFFFFBFDFFFFFBFDFFFFFFFFFFFFFEFEFDFFFEFBF8FFFDF6F2FFFCF0
+ E8FFFCF0E8FFFFE9DCFF544E46FF00000000000000000000000000000000D1C8
+ C1FFFFFFFFFFFBFDFFFFFBFDFFFFFFFFFFFFFFFFFFFFFEFEFCFFB0ADACFF415C
+ 72FFE3D9D3FFFFEDE3FF544E46FF00000000000000000000000000000000D1C8
+ C1FFFFFFFFFFE2E9E9FF5E7584FFDFE4E5FFFFFFFFFFC2CACEFF4A6170FF2EA9
+ D6FF0B101BFF5D5C60FFA49D96FF00000000000000001C6629791C6629FFDF9D
+ 7DFFF1CAB7FF8FA4ACFF86D3E5FF4B6170FFA79289FF4A6170FF61C1DEFF574D
+ 59FF1FD0FFFF152733FF10070AFF02212EFF4F5665FF59785BFF188C32FFDF9D
+ 7DFFFFC5A4FFE5C9B9FF8FA4ACFF83E1F6FF4B6170FF7ACDE2FF526067FF68ED
+ FFFF413D50FF32B2DFFF1D99C8FF1593C4FF14628EFF406651FF29973FFFDF9D
+ 7DFFDF9D7DFFDF9D7DFFDABAAAFF8FA4ACFF7FE3F9FF538495FF68EDFFFF303A
+ 4FFF69DBF6FF58D2F3FF40C3EDFF31BBEAFF11A8ECFF50908CFF329E41FF0000
+ 0000000000000000000000000000869BA43341576FE168EDFFFF5898AEFF6EEB
+ FFFF72E1F9FF6ADDF7FF56CFF2FF4BC7EDFF22BAFAFF5FA2A6FF41AC53FF0000
+ 0000000000000000000000000000A2AAB7A686E0F7A642566BDD6EEBFFFF6EEB
+ FFFF6EEBFFFF72E2FAFF67D7F4FF54BDDCFF51728BFF699C89FF85CC85FF0000
+ 0000000000000000000096AAB005939EACDA86AEBCE06778854880A5B4FC8097
+ A3FF8096A0FF7A8F99FF738593FF5B7080FE7A8B967A41AC538741AC53C00000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000C
+ 0000000000000000000000000000F0000000F0000000E0000000FFFF0000}
+ OldCreateOrder = True
+ PopupMode = pmExplicit
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnShow = FormShow
+ DesignSize = (
+ 524
+ 498)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Tabs: TPageControl
+ Left = 8
+ Top = 8
+ Width = 512
+ Height = 456
+ ActivePage = PathsPage
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ MultiLine = True
+ TabOrder = 2
+ TabStop = False
+ object GeneralPage: TTabSheet
+ HelpContext = 1
+ Caption = 'General'
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ DesignSize = (
+ 504
+ 428)
+ object SpeedButton1: TSpeedButton
+ Left = 474
+ Top = 7
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = SpeedButton1Click
+ ExplicitLeft = 437
+ end
+ object pnlJPEGQuality: TPanel
+ Left = 8
+ Top = 36
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'JPEG Quality'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ end
+ object chkConfirmDel: TCheckBox
+ Left = 236
+ Top = 115
+ Width = 258
+ Height = 17
+ HelpContext = 1005
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Confirm delete'
+ TabOrder = 0
+ end
+ object chkOldPaletteFormat: TCheckBox
+ Left = 236
+ Top = 75
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Save gradient in old file format'
+ TabOrder = 1
+ WordWrap = True
+ end
+ object chkConfirmExit: TCheckBox
+ Left = 236
+ Top = 135
+ Width = 258
+ Height = 17
+ HelpContext = 1005
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Confirm exit'
+ TabOrder = 18
+ end
+ object chkConfirmStopRender: TCheckBox
+ Left = 236
+ Top = 155
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Confirm stop render'
+ TabOrder = 3
+ end
+ object cbUseTemplate: TCheckBox
+ Left = 236
+ Top = 35
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Always create blank flame'
+ TabOrder = 4
+ end
+ object cbMissingPlugin: TCheckBox
+ Left = 236
+ Top = 55
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Warn when plugins are missing'
+ TabOrder = 5
+ WordWrap = True
+ end
+ object cbEmbedThumbs: TCheckBox
+ Left = 236
+ Top = 255
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Enable thumbnail embedding'
+ TabOrder = 6
+ Visible = False
+ WordWrap = True
+ end
+ object pnlMultithreading: TPanel
+ Left = 8
+ Top = 92
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Multithreading'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 7
+ end
+ object cbNrTheads: TComboBox
+ Left = 112
+ Top = 92
+ Width = 113
+ Height = 21
+ Style = csDropDownList
+ ItemIndex = 0
+ TabOrder = 8
+ Text = 'Off'
+ Items.Strings = (
+ 'Off')
+ end
+ object pnlPNGTransparency: TPanel
+ Left = 8
+ Top = 64
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'PNG Transparency'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 11
+ end
+ object grpGuidelines: TGroupBox
+ Left = 8
+ Top = 124
+ Width = 217
+ Height = 135
+ Caption = 'Guidelines'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 13
+ object cbGL: TCheckBox
+ Left = 8
+ Top = 23
+ Width = 193
+ Height = 17
+ Caption = 'Enable'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnClick = cbGLClick
+ end
+ object pnlCenterLine: TPanel
+ Left = 112
+ Top = 48
+ Width = 97
+ Height = 21
+ Cursor = crHandPoint
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clBlack
+ TabOrder = 1
+ OnClick = pnlCenterLineClick
+ object shCenterLine: TShape
+ Left = 2
+ Top = 2
+ Width = 89
+ Height = 13
+ Align = alClient
+ OnMouseUp = shCenterLineMouseUp
+ end
+ end
+ object pnlThirdsLine: TPanel
+ Left = 112
+ Top = 72
+ Width = 97
+ Height = 21
+ Cursor = crHandPoint
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clBlack
+ TabOrder = 2
+ OnClick = pnlThirdsLineClick
+ object shThirdsLine: TShape
+ Left = 2
+ Top = 2
+ Width = 89
+ Height = 13
+ Align = alClient
+ OnMouseUp = shThirdsLineMouseUp
+ end
+ end
+ object pnlGRLine: TPanel
+ Left = 112
+ Top = 96
+ Width = 97
+ Height = 21
+ Cursor = crHandPoint
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clBlack
+ TabOrder = 3
+ OnClick = pnlGRLineClick
+ object shGRLine: TShape
+ Left = 2
+ Top = 2
+ Width = 89
+ Height = 13
+ Align = alClient
+ OnMouseUp = shGRLineMouseUp
+ end
+ end
+ object pnlCenter: TPanel
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Center'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object pnlThirds: TPanel
+ Left = 8
+ Top = 72
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Thirds'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object pnlGoldenRatio: TPanel
+ Left = 8
+ Top = 96
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Golden ratio'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ end
+ end
+ object Panel46: TPanel
+ Left = 8
+ Top = 8
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Language file'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 14
+ end
+ object txtLanguageFile: TComboBox
+ Left = 112
+ Top = 8
+ Width = 360
+ Height = 21
+ Style = csDropDownList
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 15
+ end
+ object cbPNGTransparency: TComboBox
+ Left = 112
+ Top = 64
+ Width = 113
+ Height = 21
+ Style = csDropDownList
+ ItemIndex = 0
+ TabOrder = 12
+ Text = 'Disabled'
+ Items.Strings = (
+ 'Disabled'
+ 'Enabled')
+ end
+ object txtJPEGquality: TComboBox
+ Left = 112
+ Top = 36
+ Width = 113
+ Height = 21
+ TabOrder = 10
+ Text = '100'
+ OnKeyPress = NumFieldKeyPress
+ Items.Strings = (
+ '60'
+ '80'
+ '100')
+ end
+ object chkEngLayout: TCheckBox
+ Left = 236
+ Top = 195
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Set English keyboard layout'
+ TabOrder = 16
+ end
+ object chkConfirmClearScript: TCheckBox
+ Left = 236
+ Top = 175
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Confirm clear script'
+ TabOrder = 17
+ end
+ object GroupBox15: TGroupBox
+ Left = 6
+ Top = 290
+ Width = 354
+ Height = 120
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'On render complete'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ DesignSize = (
+ 354
+ 120)
+ object btnBrowseSound: TSpeedButton
+ Left = 321
+ Top = 41
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnBrowseSoundClick
+ ExplicitLeft = 284
+ end
+ object btnPlay: TSpeedButton
+ Left = 321
+ Top = 14
+ Width = 24
+ Height = 24
+ Hint = 'Play'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFDEEAE0FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF096314DEEAE0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FF11681B04600FDEEAE0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF1A6F2420732C04
+ 600FDEEAE0FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FF23752E2F833D20732C04600FDEEAE0FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF2E7C3750A25A2F
+ 833D20732C04600FDEEAE0FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FF3883415DB06850A25A2F833D20732C0B6618DEEAE0FF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF438A4C6BBF766B
+ BF7650A25A2F7639D6EDD9FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FF4B90536BBF76A3DAB02F7639D6EDD9FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF52945AA3DAB02F
+ 7639D6EDD9FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FF5898602F7639D6EDD9FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF589860D6EDD9FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFD6EDD9FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnPlayClick
+ ExplicitLeft = 284
+ end
+ object Label44: TLabel
+ Left = 10
+ Top = 44
+ Width = 49
+ Height = 13
+ Caption = 'File name:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object txtSoundFile: TEdit
+ Left = 84
+ Top = 42
+ Width = 230
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 0
+ end
+ object chkPlaysound: TCheckBox
+ Left = 8
+ Top = 18
+ Width = 270
+ Height = 17
+ Caption = 'Play sound'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ end
+ object chkShowRenderStats: TCheckBox
+ Left = 8
+ Top = 72
+ Width = 306
+ Height = 17
+ Caption = 'Show extended render statistics'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ end
+ object chkShowRenderImage: TCheckBox
+ Left = 8
+ Top = 92
+ Width = 306
+ Height = 17
+ Caption = 'Show rendered image'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ end
+ end
+ object chkAutoSaveXML: TCheckBox
+ Left = 236
+ Top = 215
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Automatically save pasted parameters'
+ TabOrder = 19
+ end
+ object chkRandomTemplates: TCheckBox
+ Left = 236
+ Top = 95
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Randomize gradient for templates'
+ TabOrder = 20
+ WordWrap = True
+ end
+ object chkApplyFlatten: TCheckBox
+ Left = 236
+ Top = 235
+ Width = 258
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Apply flattening to old flames'
+ TabOrder = 21
+ WordWrap = True
+ end
+ end
+ object EditorPage: TTabSheet
+ Caption = 'Editor'
+ ImageIndex = 8
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ DesignSize = (
+ 504
+ 428)
+ object GroupBox1: TGroupBox
+ Left = 8
+ Top = 4
+ Width = 217
+ Height = 81
+ Caption = 'Editor Graph'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 0
+ DesignSize = (
+ 217
+ 81)
+ object chkUseXFormColor: TCheckBox
+ Left = 8
+ Top = 16
+ Width = 201
+ Height = 17
+ Caption = 'Use transform color'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ end
+ object chkHelpers: TCheckBox
+ Left = 8
+ Top = 36
+ Width = 201
+ Height = 17
+ Caption = 'Helper lines'
+ Checked = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 1
+ end
+ object chkShowAllXforms: TCheckBox
+ Left = 8
+ Top = 56
+ Width = 491
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Always show both type of transforms'
+ Checked = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 2
+ WordWrap = True
+ end
+ end
+ object GroupBox21: TGroupBox
+ Left = 231
+ Top = 4
+ Width = 268
+ Height = 128
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Editor defaults'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ DesignSize = (
+ 268
+ 128)
+ object chkAxisLock: TCheckBox
+ Left = 8
+ Top = 38
+ Width = 257
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Lock transform axis'
+ Checked = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 0
+ end
+ object chkExtendedEdit: TCheckBox
+ Left = 8
+ Top = 18
+ Width = 257
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Extended edit mode'
+ Checked = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 1
+ end
+ object chkXaosRebuild: TCheckBox
+ Left = 8
+ Top = 58
+ Width = 257
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Rebuild xaos links'
+ Checked = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ State = cbChecked
+ TabOrder = 2
+ end
+ object chkResetCoefs: TCheckBox
+ Left = 8
+ Top = 78
+ Width = 257
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Reset coefs by double-click'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ end
+ object chkResetLinear: TCheckBox
+ Left = 8
+ Top = 98
+ Width = 257
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Reset linear when other variation is set'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 4
+ end
+ end
+ object grpEditorColors: TGroupBox
+ Left = 8
+ Top = 92
+ Width = 217
+ Height = 155
+ Caption = 'Editor colors'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ object pnlBackground: TPanel
+ Left = 8
+ Top = 24
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Background'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object pnlReferenceC: TPanel
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Reference'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ end
+ object pnlHelpers: TPanel
+ Left = 8
+ Top = 72
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Helpers'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 7
+ end
+ object pnlGrid: TPanel
+ Left = 8
+ Top = 96
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Grid'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 8
+ end
+ object pnlBackColor: TPanel
+ Left = 112
+ Top = 24
+ Width = 97
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clBlack
+ TabOrder = 0
+ OnClick = pnlBackColorClick
+ object shBackground: TShape
+ Left = 1
+ Top = 1
+ Width = 91
+ Height = 15
+ Align = alClient
+ Pen.Style = psClear
+ OnMouseUp = shBackgroundMouseUp
+ end
+ end
+ object pnlReference: TPanel
+ Left = 112
+ Top = 48
+ Width = 97
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clGray
+ TabOrder = 1
+ OnClick = pnlReferenceClick
+ object shRef: TShape
+ Left = 1
+ Top = 1
+ Width = 91
+ Height = 15
+ Align = alClient
+ Pen.Style = psClear
+ OnMouseUp = shRefMouseUp
+ end
+ end
+ object pnlHelpersColor: TPanel
+ Left = 112
+ Top = 72
+ Width = 97
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clGray
+ TabOrder = 2
+ OnClick = pnlHelpersColorClick
+ object shHelpers: TShape
+ Left = 1
+ Top = 1
+ Width = 91
+ Height = 15
+ Align = alClient
+ Pen.Style = psClear
+ OnMouseUp = shHelpersMouseUp
+ end
+ end
+ object pnlGridColor1: TPanel
+ Left = 112
+ Top = 96
+ Width = 49
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clBlack
+ TabOrder = 3
+ OnClick = pnlGridColor1Click
+ object shGC1: TShape
+ Left = 1
+ Top = 1
+ Width = 43
+ Height = 15
+ Align = alClient
+ Pen.Style = psClear
+ OnMouseUp = shGC1MouseUp
+ end
+ end
+ object pnlGridColor2: TPanel
+ Left = 164
+ Top = 96
+ Width = 45
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clBlack
+ TabOrder = 4
+ OnClick = pnlGridColor2Click
+ object shGC2: TShape
+ Left = 1
+ Top = 1
+ Width = 39
+ Height = 15
+ Align = alClient
+ Pen.Style = psClear
+ OnMouseUp = shGC2MouseUp
+ end
+ end
+ object pnlReflection: TPanel
+ Left = 8
+ Top = 120
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Reflection'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ end
+ object pnlReflectionC: TPanel
+ Left = 112
+ Top = 120
+ Width = 97
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clGray
+ TabOrder = 10
+ OnClick = pnlReflectionCClick
+ object shReflection: TShape
+ Left = 1
+ Top = 1
+ Width = 91
+ Height = 15
+ Align = alClient
+ Pen.Style = psClear
+ OnMouseUp = shReflectionMouseUp
+ end
+ end
+ end
+ object chkEnableEditorPreview: TCheckBox
+ Left = 8
+ Top = 256
+ Width = 486
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Enable editor preview'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 3
+ OnClick = chkEnableEditorPreviewClick
+ end
+ object Panel48: TPanel
+ Left = 16
+ Top = 278
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Transparency'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object tbEPTransparency: TTrackBar
+ Left = 128
+ Top = 276
+ Width = 366
+ Height = 25
+ Anchors = [akLeft, akTop, akRight]
+ LineSize = 4
+ Max = 255
+ PageSize = 32
+ Frequency = 16
+ TabOrder = 5
+ end
+ end
+ object DisplayPage: TTabSheet
+ Caption = 'Display'
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ DesignSize = (
+ 504
+ 428)
+ object GroupBox2: TGroupBox
+ Left = 243
+ Top = 78
+ Width = 226
+ Height = 100
+ Anchors = [akTop, akRight]
+ Caption = 'Preview density'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ object pnlLowQ: TPanel
+ Tag = 8
+ Left = 8
+ Top = 24
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Low quality'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ OnDblClick = RenderPanelsDblClick
+ end
+ object pnlMediumQ: TPanel
+ Tag = 9
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Medium quality'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ OnDblClick = RenderPanelsDblClick
+ end
+ object pnlHighQ: TPanel
+ Tag = 10
+ Left = 8
+ Top = 72
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'High quality'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ OnDblClick = RenderPanelsDblClick
+ end
+ object txtHighQuality: TEdit
+ Left = 112
+ Top = 72
+ Width = 89
+ Height = 21
+ HelpContext = 1014
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtMediumQuality: TEdit
+ Left = 112
+ Top = 48
+ Width = 89
+ Height = 21
+ HelpContext = 1013
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtLowQuality: TEdit
+ Left = 112
+ Top = 24
+ Width = 89
+ Height = 21
+ HelpContext = 1012
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnKeyPress = NumFloatKeyPress
+ end
+ end
+ object grpRendering: TGroupBox
+ Left = 8
+ Top = 78
+ Width = 217
+ Height = 245
+ Caption = 'Rendering'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 0
+ object pnlDensity: TPanel
+ Left = 8
+ Top = 24
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Density'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 7
+ OnDblClick = RenderPanelsDblClick
+ end
+ object pnlGamma: TPanel
+ Tag = 1
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Gamma'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 8
+ OnDblClick = RenderPanelsDblClick
+ end
+ object pnlBright: TPanel
+ Tag = 2
+ Left = 8
+ Top = 72
+ Width = 105
+ Height = 29
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Brightness'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ OnDblClick = RenderPanelsDblClick
+ end
+ object pnlVibrancy: TPanel
+ Tag = 3
+ Left = 8
+ Top = 96
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Vibrancy'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 10
+ OnDblClick = RenderPanelsDblClick
+ end
+ object pnlRelGamma: TPanel
+ Tag = 4
+ Left = 8
+ Top = 120
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Gamma threshold'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 11
+ OnDblClick = RenderPanelsDblClick
+ end
+ object pnlOSample: TPanel
+ Tag = 5
+ Left = 8
+ Top = 144
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Oversample'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 12
+ OnDblClick = RenderPanelsDblClick
+ end
+ object pnlFilter: TPanel
+ Tag = 6
+ Left = 8
+ Top = 168
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Filter radius'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 13
+ OnDblClick = RenderPanelsDblClick
+ end
+ object txtGammaThreshold: TEdit
+ Left = 112
+ Top = 120
+ Width = 89
+ Height = 21
+ HelpContext = 1011
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 6
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtFilterRadius: TEdit
+ Left = 112
+ Top = 168
+ Width = 89
+ Height = 21
+ HelpContext = 1011
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtOversample: TEdit
+ Left = 112
+ Top = 144
+ Width = 89
+ Height = 21
+ HelpContext = 1010
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 15
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtVibrancy: TEdit
+ Left = 112
+ Top = 96
+ Width = 89
+ Height = 21
+ HelpContext = 1009
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtBrightness: TEdit
+ Left = 112
+ Top = 72
+ Width = 89
+ Height = 21
+ HelpContext = 1008
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtGamma: TEdit
+ Left = 112
+ Top = 48
+ Width = 89
+ Height = 21
+ HelpContext = 1007
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtSampleDensity: TEdit
+ Left = 112
+ Top = 24
+ Width = 89
+ Height = 21
+ HelpContext = 1006
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnKeyPress = NumFloatKeyPress
+ end
+ object pnlFuse: TPanel
+ Tag = 7
+ Left = 8
+ Top = 216
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Skipped iterations'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 14
+ OnDblClick = RenderPanelsDblClick
+ end
+ object txtFuse: TSpinEdit
+ Left = 112
+ Top = 216
+ Width = 89
+ Height = 22
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ MaxValue = 250
+ MinValue = 5
+ ParentFont = False
+ TabOrder = 4
+ Value = 15
+ OnKeyPress = NumFieldKeyPress
+ end
+ object pnlContrast: TPanel
+ Tag = 11
+ Left = 8
+ Top = 192
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Contrast'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 16
+ OnDblClick = RenderPanelsDblClick
+ end
+ object txtContrast: TEdit
+ Left = 112
+ Top = 192
+ Width = 89
+ Height = 21
+ HelpContext = 1011
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 17
+ OnKeyPress = NumFloatKeyPress
+ end
+ end
+ object GroupBox20: TGroupBox
+ Left = 8
+ Top = 2
+ Width = 491
+ Height = 73
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Main Window Preview'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ object Label48: TLabel
+ Left = 188
+ Top = 46
+ Width = 11
+ Height = 13
+ Caption = '%'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object chkShowTransparency: TCheckBox
+ Left = 250
+ Top = 20
+ Width = 233
+ Height = 17
+ Caption = 'Show Transparency'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ end
+ object chkExtendMainPreview: TCheckBox
+ Left = 8
+ Top = 20
+ Width = 225
+ Height = 17
+ Caption = 'Extend preview buffer'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ end
+ object pnlExtension: TPanel
+ Left = 8
+ Top = 42
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Buffer extension'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object cbExtendPercent: TComboBox
+ Left = 112
+ Top = 42
+ Width = 73
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnKeyPress = NumFieldKeyPress
+ Items.Strings = (
+ '0'
+ '10'
+ '25'
+ '50'
+ '100'
+ '150'
+ '200')
+ end
+ object chkUseSmallThumbs: TCheckBox
+ Left = 250
+ Top = 38
+ Width = 209
+ Height = 31
+ Caption = 'Use small thumbnails'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ WordWrap = True
+ end
+ end
+ object GroupBox7: TGroupBox
+ Left = 243
+ Top = 179
+ Width = 226
+ Height = 100
+ Anchors = [akTop, akRight]
+ Caption = 'Tile radius'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 3
+ object pnSTile: TPanel
+ Left = 8
+ Top = 24
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Square'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ OnDblClick = TilePanelDblClick
+ end
+ object pnRTile: TPanel
+ Tag = 1
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Rhombus '
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ OnDblClick = TilePanelDblClick
+ end
+ object pnHexTile: TPanel
+ Tag = 2
+ Left = 8
+ Top = 72
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Hexagonal'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ OnDblClick = TilePanelDblClick
+ end
+ object txtHexTile: TEdit
+ Left = 112
+ Top = 72
+ Width = 89
+ Height = 21
+ HelpContext = 1014
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtRTile: TEdit
+ Left = 112
+ Top = 48
+ Width = 89
+ Height = 21
+ HelpContext = 1013
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtSTile: TEdit
+ Left = 112
+ Top = 24
+ Width = 89
+ Height = 21
+ HelpContext = 1012
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnKeyPress = NumFloatKeyPress
+ end
+ end
+ object rgRotationMode: TRadioGroup
+ Left = 8
+ Top = 358
+ Width = 220
+ Height = 66
+ Anchors = [akLeft, akBottom]
+ Caption = 'Rotation Mode'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ Items.Strings = (
+ 'Rotate image'
+ 'Rotate frame')
+ ParentFont = False
+ TabOrder = 4
+ end
+ object rgZoomingMode: TRadioGroup
+ Left = 243
+ Top = 358
+ Width = 226
+ Height = 66
+ Anchors = [akRight, akBottom]
+ Caption = 'Zooming mode'
+ Items.Strings = (
+ 'Preserve quality'
+ 'Preserve speed')
+ TabOrder = 5
+ end
+ object rgEnumMode: TRadioGroup
+ Left = 243
+ Top = 298
+ Width = 226
+ Height = 55
+ Anchors = [akRight, akBottom]
+ Caption = 'Enumerating mode '
+ Items.Strings = (
+ 'From 0'
+ 'From 1')
+ TabOrder = 6
+ end
+ end
+ object RandomPage: TTabSheet
+ Caption = 'Random'
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ DesignSize = (
+ 504
+ 428)
+ object gpNumberOfTransforms: TGroupBox
+ Left = 8
+ Top = 6
+ Width = 209
+ Height = 75
+ Caption = 'Number of transforms'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 0
+ object udMinXforms: TUpDown
+ Left = 189
+ Top = 20
+ Width = 12
+ Height = 21
+ Associate = txtMinXForms
+ Min = 1
+ Position = 2
+ TabOrder = 2
+ end
+ object udMaxXForms: TUpDown
+ Left = 189
+ Top = 44
+ Width = 12
+ Height = 21
+ Associate = txtMaxXforms
+ Min = 2
+ Position = 6
+ TabOrder = 3
+ end
+ object Panel15: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Minimum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object Panel16: TPanel
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Maximum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object txtMaxXforms: TEdit
+ Left = 112
+ Top = 44
+ Width = 77
+ Height = 21
+ HelpContext = 1018
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '6'
+ OnChange = txtMaxXformsChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtMinXForms: TEdit
+ Left = 112
+ Top = 20
+ Width = 77
+ Height = 21
+ HelpContext = 1017
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = '2'
+ OnChange = txtMinXFormsChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ end
+ object gpFlameTitlePrefix: TGroupBox
+ Left = 269
+ Top = 88
+ Width = 217
+ Height = 122
+ Anchors = [akTop, akRight]
+ Caption = 'Random batch'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ object udBatchSize: TUpDown
+ Left = 195
+ Top = 20
+ Width = 13
+ Height = 21
+ Associate = txtBatchSize
+ Min = 1
+ Max = 300
+ Position = 10
+ TabOrder = 2
+ Thousands = False
+ end
+ object chkKeepBackground: TCheckBox
+ Left = 8
+ Top = 96
+ Width = 201
+ Height = 17
+ HelpContext = 1023
+ Caption = 'Keep background color'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ OnClick = chkKeepBackgroundClick
+ end
+ object Panel11: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Batch size'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object Panel12: TPanel
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Title prefix'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object txtBatchSize: TEdit
+ Left = 112
+ Top = 20
+ Width = 83
+ Height = 21
+ HelpContext = 1004
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '10'
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtRandomPrefix: TEdit
+ Left = 112
+ Top = 44
+ Width = 96
+ Height = 21
+ HelpContext = 1021
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = 'Apophysis'
+ end
+ object pnlRandBackground: TPanel
+ Left = 8
+ Top = 68
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Background'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ end
+ object pnlRandBackColor: TPanel
+ Left = 112
+ Top = 68
+ Width = 97
+ Height = 21
+ Cursor = crHandPoint
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ Color = clBlack
+ TabOrder = 7
+ OnClick = pnlRandBackColorClick
+ object shRandBackColor: TShape
+ Left = 2
+ Top = 2
+ Width = 89
+ Height = 13
+ Align = alClient
+ Brush.Color = clBlack
+ OnMouseUp = shRandBackColorMouseUp
+ ExplicitTop = 0
+ end
+ end
+ end
+ object gpMutationTransforms: TGroupBox
+ Left = 269
+ Top = 6
+ Width = 214
+ Height = 75
+ Anchors = [akTop, akRight]
+ Caption = 'Mutation transforms'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 3
+ object udMinMutate: TUpDown
+ Left = 197
+ Top = 20
+ Width = 12
+ Height = 21
+ Associate = txtMinMutate
+ Min = 2
+ Max = 12
+ Position = 2
+ TabOrder = 2
+ end
+ object udMaxMutate: TUpDown
+ Left = 197
+ Top = 44
+ Width = 12
+ Height = 21
+ Associate = txtMaxMutate
+ Min = 2
+ Max = 12
+ Position = 6
+ TabOrder = 3
+ end
+ object Panel13: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Minimum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object Panel14: TPanel
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Maximum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object txtMaxMutate: TEdit
+ Left = 112
+ Top = 44
+ Width = 85
+ Height = 21
+ HelpContext = 1020
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '6'
+ OnChange = txtMaxMutateChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtMinMutate: TEdit
+ Left = 112
+ Top = 20
+ Width = 85
+ Height = 21
+ HelpContext = 1019
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = '2'
+ OnChange = txtMinMutateChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ end
+ object gpForcedSymmetry: TGroupBox
+ Left = 8
+ Top = 88
+ Width = 209
+ Height = 97
+ Caption = 'Forced symmetry'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ object udSymOrder: TUpDown
+ Left = 187
+ Top = 43
+ Width = 13
+ Height = 21
+ Associate = txtSymOrder
+ Min = 2
+ Max = 2000
+ Position = 4
+ TabOrder = 2
+ Thousands = False
+ end
+ object udSymNVars: TUpDown
+ Left = 187
+ Top = 68
+ Width = 13
+ Height = 21
+ Associate = txtSymNVars
+ Min = 4
+ Position = 12
+ TabOrder = 4
+ Thousands = False
+ end
+ object Panel17: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Type'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object Panel18: TPanel
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Order'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 6
+ end
+ object Panel19: TPanel
+ Left = 8
+ Top = 68
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Limit'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 7
+ end
+ object txtSymNVars: TEdit
+ Left = 112
+ Top = 68
+ Width = 75
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '12'
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtSymOrder: TEdit
+ Left = 112
+ Top = 43
+ Width = 75
+ Height = 21
+ HelpContext = 1025
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '4'
+ OnKeyPress = NumFieldKeyPress
+ end
+ object cmbSymType: TComboBox
+ Left = 112
+ Top = 20
+ Width = 89
+ Height = 21
+ HelpContext = 1024
+ Style = csDropDownList
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ OnChange = cmbSymTypeChange
+ Items.Strings = (
+ 'None'
+ 'Bilateral'
+ 'Rotational'
+ 'Dihedral')
+ end
+ end
+ object grpGradient: TRadioGroup
+ Left = 8
+ Top = 192
+ Width = 209
+ Height = 121
+ HelpContext = 1029
+ Caption = 'On random flame'
+ ItemIndex = 0
+ Items.Strings = (
+ 'Use random preset'
+ 'Use default'
+ 'Use current'
+ 'Randomize'
+ 'Random from a file')
+ TabOrder = 4
+ end
+ object GroupBox16: TGroupBox
+ Left = 8
+ Top = 320
+ Width = 209
+ Height = 49
+ Caption = 'Random file to use'
+ TabOrder = 5
+ object btnGradientsFile: TSpeedButton
+ Left = 185
+ Top = 18
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnGradientsFileClick
+ end
+ object txtGradientsFile: TEdit
+ Left = 11
+ Top = 19
+ Width = 174
+ Height = 21
+ TabOrder = 0
+ end
+ end
+ end
+ object VariationsPage: TTabSheet
+ Caption = 'Variations'
+ ImageIndex = 4
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ DesignSize = (
+ 504
+ 428)
+ object btnSetAll: TButton
+ Left = 410
+ Top = 24
+ Width = 91
+ Height = 25
+ HelpContext = 1027
+ Anchors = [akTop, akRight]
+ Caption = 'Set All'
+ TabOrder = 0
+ OnClick = btnSetAllClick
+ end
+ object btnClearAll: TButton
+ Left = 410
+ Top = 52
+ Width = 91
+ Height = 25
+ HelpContext = 1028
+ Anchors = [akTop, akRight]
+ Caption = 'Clear All'
+ TabOrder = 1
+ OnClick = btnClearAllClick
+ end
+ object btnInvert: TButton
+ Left = 410
+ Top = 80
+ Width = 91
+ Height = 25
+ HelpContext = 1028
+ Anchors = [akTop, akRight]
+ Caption = 'Invert Selection'
+ TabOrder = 3
+ OnClick = btnInvertClick
+ end
+ object VarsPages: TPageControl
+ Left = 0
+ Top = 0
+ Width = 403
+ Height = 426
+ ActivePage = tabRandomVars
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ TabOrder = 2
+ object tabRandomVars: TTabSheet
+ Caption = 'Random choise'
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object clbVarEnabled: TCheckListBox
+ Left = 0
+ Top = 0
+ Width = 395
+ Height = 398
+ Align = alClient
+ Columns = 2
+ ItemHeight = 13
+ TabOrder = 0
+ TabWidth = 100
+ end
+ end
+ object tabFavouriteVars: TTabSheet
+ Caption = 'Favourites'
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object clbVarFavourite: TCheckListBox
+ Left = 0
+ Top = 0
+ Width = 395
+ Height = 398
+ Align = alClient
+ Columns = 2
+ ItemHeight = 13
+ TabOrder = 0
+ TabWidth = 100
+ end
+ end
+ end
+ end
+ object GradientPage: TTabSheet
+ Caption = 'Gradient'
+ ImageIndex = 5
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ DesignSize = (
+ 504
+ 428)
+ object GroupBox13: TGroupBox
+ Left = 8
+ Top = 186
+ Width = 209
+ Height = 79
+ Caption = 'Smooth palette'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 0
+ object Panel28: TPanel
+ Tag = 8
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Number of tries'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 2
+ OnDblClick = GradientPanelsDblClick
+ end
+ object Panel29: TPanel
+ Tag = 9
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Try length'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ OnDblClick = GradientPanelsDblClick
+ end
+ object txtTryLength: TEdit
+ Left = 112
+ Top = 44
+ Width = 89
+ Height = 21
+ HelpContext = 1003
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '10000'
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtNumtries: TEdit
+ Left = 112
+ Top = 20
+ Width = 89
+ Height = 21
+ HelpContext = 1002
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = '50'
+ OnKeyPress = NumFieldKeyPress
+ end
+ end
+ object GroupBox17: TGroupBox
+ Left = 8
+ Top = 8
+ Width = 209
+ Height = 81
+ Caption = 'Hue range'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ object udMinHue: TUpDown
+ Left = 185
+ Top = 20
+ Width = 15
+ Height = 21
+ HelpContext = 1032
+ Associate = txtMinHue
+ Max = 600
+ TabOrder = 0
+ end
+ object Panel20: TPanel
+ Tag = 1
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Maximum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 2
+ OnDblClick = GradientPanelsDblClick
+ end
+ object Panel21: TPanel
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Minimum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ OnDblClick = GradientPanelsDblClick
+ end
+ object udMaxHue: TUpDown
+ Left = 185
+ Top = 44
+ Width = 15
+ Height = 21
+ HelpContext = 1033
+ Associate = txtMaxHue
+ Max = 600
+ Position = 600
+ TabOrder = 4
+ end
+ object txtMaxHue: TEdit
+ Left = 112
+ Top = 44
+ Width = 73
+ Height = 21
+ HelpContext = 1033
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ Text = '600'
+ OnChange = txtMaxHueChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtMinHue: TEdit
+ Left = 112
+ Top = 20
+ Width = 73
+ Height = 21
+ HelpContext = 1032
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '0'
+ OnChange = txtMinHueChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ end
+ object GroupBox18: TGroupBox
+ Left = 266
+ Top = 8
+ Width = 209
+ Height = 81
+ Anchors = [akTop, akRight]
+ Caption = 'Saturation range'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ object Panel22: TPanel
+ Tag = 2
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Minimum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ OnDblClick = GradientPanelsDblClick
+ end
+ object Panel23: TPanel
+ Tag = 3
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Maximum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ OnDblClick = GradientPanelsDblClick
+ end
+ object udMinSat: TUpDown
+ Left = 185
+ Top = 20
+ Width = 15
+ Height = 21
+ HelpContext = 1034
+ Associate = txtMinSat
+ TabOrder = 2
+ end
+ object txtMinSat: TEdit
+ Left = 112
+ Top = 20
+ Width = 73
+ Height = 21
+ HelpContext = 1034
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '0'
+ OnChange = txtMinSatChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ object udmaxSat: TUpDown
+ Left = 185
+ Top = 44
+ Width = 15
+ Height = 21
+ HelpContext = 1035
+ Associate = txtMaxSat
+ Position = 100
+ TabOrder = 4
+ end
+ object txtMaxSat: TEdit
+ Left = 112
+ Top = 44
+ Width = 73
+ Height = 21
+ HelpContext = 1035
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ Text = '100'
+ OnChange = txtMaxSatChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ end
+ object GroupBox22: TGroupBox
+ Left = 8
+ Top = 96
+ Width = 209
+ Height = 81
+ Caption = 'Luminance range'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 3
+ object Panel24: TPanel
+ Tag = 5
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Maximum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ OnDblClick = GradientPanelsDblClick
+ end
+ object Panel25: TPanel
+ Tag = 4
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Minimum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ OnDblClick = GradientPanelsDblClick
+ end
+ object udMinLum: TUpDown
+ Left = 185
+ Top = 20
+ Width = 15
+ Height = 21
+ HelpContext = 1036
+ Associate = txtMinLum
+ Min = 1
+ Position = 1
+ TabOrder = 2
+ end
+ object txtMinLum: TEdit
+ Left = 112
+ Top = 20
+ Width = 73
+ Height = 21
+ HelpContext = 1036
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '1'
+ OnChange = txtMinLumChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ object udMaxLum: TUpDown
+ Left = 185
+ Top = 44
+ Width = 15
+ Height = 21
+ HelpContext = 1037
+ Associate = txtMaxLum
+ Position = 100
+ TabOrder = 4
+ end
+ object txtMaxLum: TEdit
+ Left = 112
+ Top = 44
+ Width = 73
+ Height = 21
+ HelpContext = 1037
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ Text = '100'
+ OnChange = txtMaxLumChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ end
+ object GroupBox23: TGroupBox
+ Left = 266
+ Top = 96
+ Width = 209
+ Height = 81
+ Anchors = [akTop, akRight]
+ Caption = 'Number of nodes'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 4
+ object Panel26: TPanel
+ Tag = 6
+ Left = 8
+ Top = 20
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Minimum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ OnDblClick = GradientPanelsDblClick
+ end
+ object Panel27: TPanel
+ Tag = 7
+ Left = 8
+ Top = 44
+ Width = 105
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Maximum'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ OnDblClick = GradientPanelsDblClick
+ end
+ object udMinNodes: TUpDown
+ Left = 185
+ Top = 20
+ Width = 15
+ Height = 21
+ HelpContext = 1030
+ Associate = txtMinNodes
+ Min = 2
+ Max = 64
+ Position = 2
+ TabOrder = 2
+ end
+ object txtMinNodes: TEdit
+ Left = 112
+ Top = 20
+ Width = 73
+ Height = 21
+ HelpContext = 1030
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ Text = '2'
+ OnChange = txtMinNodesChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ object udMaxNodes: TUpDown
+ Left = 185
+ Top = 44
+ Width = 15
+ Height = 21
+ HelpContext = 1031
+ Associate = txtMaxNodes
+ Min = 2
+ Max = 64
+ Position = 2
+ TabOrder = 4
+ end
+ object txtMaxNodes: TEdit
+ Left = 112
+ Top = 44
+ Width = 73
+ Height = 21
+ HelpContext = 1031
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 5
+ Text = '2'
+ OnChange = txtMaxNodesChange
+ OnKeyPress = NumFieldKeyPress
+ end
+ end
+ object rgColorBlend: TRadioGroup
+ Left = 266
+ Top = 183
+ Width = 209
+ Height = 82
+ Anchors = [akTop, akRight]
+ Caption = 'Color blending '
+ ItemIndex = 0
+ Items.Strings = (
+ 'RGB blend'
+ 'HSV blend'
+ 'No blend')
+ TabOrder = 5
+ end
+ object chkEqualStripes: TCheckBox
+ Left = 13
+ Top = 275
+ Width = 491
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = ' Use equal color stripes'
+ Checked = True
+ State = cbChecked
+ TabOrder = 6
+ WordWrap = True
+ end
+ end
+ object UPRPage: TTabSheet
+ Caption = 'UPR'
+ ImageIndex = 5
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ DesignSize = (
+ 504
+ 428)
+ object chkAdjustDensity: TCheckBox
+ Left = 274
+ Top = 264
+ Width = 228
+ Height = 33
+ Anchors = [akTop, akRight]
+ Caption = 'Adjust sample density'
+ TabOrder = 4
+ WordWrap = True
+ end
+ object GroupBox11: TGroupBox
+ Left = 274
+ Top = 184
+ Width = 228
+ Height = 81
+ Anchors = [akTop, akRight]
+ Caption = 'UPR size'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 1
+ object Panel37: TPanel
+ Left = 8
+ Top = 24
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Width'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 2
+ end
+ object Panel38: TPanel
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Height'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object txtUPRHeight: TEdit
+ Left = 112
+ Top = 48
+ Width = 105
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '480'
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtUPRWidth: TEdit
+ Left = 112
+ Top = 24
+ Width = 105
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = '640'
+ OnKeyPress = NumFieldKeyPress
+ end
+ end
+ object GroupBox9: TGroupBox
+ Left = 8
+ Top = 182
+ Width = 217
+ Height = 107
+ Caption = 'Parameter defaults'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 0
+ object Panel34: TPanel
+ Left = 8
+ Top = 24
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Sample density'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object Panel35: TPanel
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Filter radius'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ end
+ object Panel36: TPanel
+ Left = 8
+ Top = 72
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Oversample'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object txtUPROversample: TEdit
+ Left = 112
+ Top = 72
+ Width = 97
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ Text = '3'
+ OnKeyPress = NumFieldKeyPress
+ end
+ object txtUPRFilterRadius: TEdit
+ Left = 112
+ Top = 48
+ Width = 97
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = '0.7'
+ OnKeyPress = NumFloatKeyPress
+ end
+ object txtFIterDensity: TEdit
+ Left = 112
+ Top = 24
+ Width = 97
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = '35'
+ OnKeyPress = NumFloatKeyPress
+ end
+ end
+ object GroupBox4: TGroupBox
+ Left = 8
+ Top = 6
+ Width = 494
+ Height = 83
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Coloring algorithm'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 2
+ object Panel30: TPanel
+ Left = 8
+ Top = 24
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Title'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 2
+ end
+ object Panel31: TPanel
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'File name'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object txtFCFile: TEdit
+ Left = 112
+ Top = 48
+ Width = 337
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = 'apophysis.ucl'
+ end
+ object txtFCIdent: TEdit
+ Left = 112
+ Top = 24
+ Width = 337
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = 'apophysis-205'
+ end
+ end
+ object GroupBox5: TGroupBox
+ Left = 8
+ Top = 95
+ Width = 494
+ Height = 82
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Fractal formula'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 3
+ object Panel32: TPanel
+ Left = 8
+ Top = 24
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Title'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 2
+ end
+ object Panel33: TPanel
+ Left = 8
+ Top = 48
+ Width = 105
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'File name'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object txtFFFile: TEdit
+ Left = 112
+ Top = 48
+ Width = 337
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 1
+ Text = 'mt.ufm'
+ end
+ object txtFFIdent: TEdit
+ Left = 112
+ Top = 24
+ Width = 337
+ Height = 21
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ Text = 'mt-pixel'
+ end
+ end
+ end
+ object PathsPage: TTabSheet
+ Caption = 'Environment'
+ ImageIndex = 7
+ DesignSize = (
+ 504
+ 428)
+ object btnDefGradient: TSpeedButton
+ Left = 474
+ Top = 7
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnDefGradientClick
+ ExplicitLeft = 437
+ end
+ object btnSmooth: TSpeedButton
+ Left = 474
+ Top = 31
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnSmoothClick
+ ExplicitLeft = 437
+ end
+ object SpeedButton2: TSpeedButton
+ Left = 474
+ Top = 55
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = SpeedButton2Click
+ ExplicitLeft = 437
+ end
+ object btnRenderer: TSpeedButton
+ Left = 474
+ Top = 79
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnRendererClick
+ ExplicitLeft = 437
+ end
+ object btnHelp: TSpeedButton
+ Left = 474
+ Top = 103
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnHelpClick
+ ExplicitLeft = 437
+ end
+ object Label49: TLabel
+ Left = 245
+ Top = 301
+ Width = 37
+ Height = 13
+ Caption = 'minutes'
+ end
+ object btnFindDefaultSaveFile: TSpeedButton
+ Left = 437
+ Top = 272
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnFindDefaultSaveFileClick
+ end
+ object btnPluginPath: TSpeedButton
+ Left = 474
+ Top = 128
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnPluginPathClick
+ ExplicitLeft = 437
+ end
+ object btnSShotPath: TSpeedButton
+ Left = 474
+ Top = 155
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnSShotPathClick
+ ExplicitLeft = 437
+ end
+ object btnDefScript: TSpeedButton
+ Left = 474
+ Top = 181
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnDefScriptClick
+ ExplicitLeft = 437
+ end
+ object chkRememberLastOpen: TCheckBox
+ Left = 8
+ Top = 215
+ Width = 433
+ Height = 17
+ Caption = 'Remember last opened parameters'
+ TabOrder = 0
+ OnClick = chkRememberLastOpenClick
+ end
+ object Panel39: TPanel
+ Left = 8
+ Top = 8
+ Width = 139
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Default parameters'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtDefParameterFile: TEdit
+ Left = 146
+ Top = 8
+ Width = 329
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 2
+ OnDblClick = DefaultPathsDblCick
+ end
+ object Panel40: TPanel
+ Tag = 1
+ Left = 8
+ Top = 32
+ Width = 139
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Smooth palette file'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtDefSmoothFile: TEdit
+ Left = 146
+ Top = 32
+ Width = 329
+ Height = 21
+ HelpContext = 1001
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 3
+ OnDblClick = DefaultPathsDblCick
+ end
+ object Panel41: TPanel
+ Tag = 2
+ Left = 8
+ Top = 56
+ Width = 139
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Function library'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 8
+ OnDblClick = DefaultPathsDblCick
+ end
+ object Panel42: TPanel
+ Tag = 3
+ Left = 8
+ Top = 80
+ Width = 139
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'flam3'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 9
+ OnDblClick = DefaultPathsDblCick
+ end
+ object Panel43: TPanel
+ Tag = 4
+ Left = 8
+ Top = 104
+ Width = 139
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Help file'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 10
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtLibrary: TEdit
+ Left = 146
+ Top = 56
+ Width = 329
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 5
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtRenderer: TEdit
+ Left = 146
+ Top = 80
+ Width = 329
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 6
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtHelp: TEdit
+ Left = 146
+ Top = 104
+ Width = 329
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 7
+ OnDblClick = DefaultPathsDblCick
+ end
+ object cbEnableAutosave: TCheckBox
+ Left = 8
+ Top = 249
+ Width = 425
+ Height = 17
+ Caption = 'Enable autosave'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 13
+ OnClick = cbEnableAutosaveClick
+ end
+ object Panel44: TPanel
+ Tag = 8
+ Left = 24
+ Top = 273
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'File name'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 14
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtDefaultSaveFile: TEdit
+ Left = 136
+ Top = 273
+ Width = 302
+ Height = 21
+ HelpContext = 1000
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 12
+ end
+ object Panel45: TPanel
+ Left = 24
+ Top = 297
+ Width = 113
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Save frequency'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 15
+ end
+ object cbFreq: TComboBox
+ Left = 136
+ Top = 297
+ Width = 105
+ Height = 21
+ Style = csDropDownList
+ ItemIndex = 2
+ TabOrder = 11
+ Text = '5'
+ Items.Strings = (
+ '1'
+ '2'
+ '5'
+ '10')
+ end
+ object GroupBox3: TGroupBox
+ Left = 8
+ Top = 329
+ Width = 457
+ Height = 73
+ Caption = 'Chaotica 0.45+'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ TabOrder = 16
+ DesignSize = (
+ 457
+ 73)
+ object btnChaotica: TSpeedButton
+ Left = 425
+ Top = 18
+ Width = 24
+ Height = 24
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnChaoticaClick
+ end
+ object Panel47: TPanel
+ Left = 8
+ Top = 20
+ Width = 129
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Location'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 1
+ end
+ object cbC64: TCheckBox
+ Left = 8
+ Top = 48
+ Width = 441
+ Height = 17
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Use x64-version if possible'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 2
+ end
+ object txtChaotica: TEdit
+ Left = 136
+ Top = 20
+ Width = 289
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 0
+ end
+ object Panel49: TPanel
+ Left = 8
+ Top = 100
+ Width = 129
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'File name (x64)'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ Visible = False
+ end
+ end
+ object Panel50: TPanel
+ Tag = 5
+ Left = 8
+ Top = 130
+ Width = 139
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Plugin folder'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 17
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtPluginFolder: TEdit
+ Left = 146
+ Top = 130
+ Width = 329
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 18
+ OnDblClick = DefaultPathsDblCick
+ end
+ object pnlScreenShot: TPanel
+ Tag = 6
+ Left = 8
+ Top = 156
+ Width = 139
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Screenshot folder'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 19
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtSShotFolder: TEdit
+ Left = 146
+ Top = 156
+ Width = 329
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 20
+ end
+ object pnlScriptFile: TPanel
+ Tag = 7
+ Left = 8
+ Top = 182
+ Width = 139
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Default script file'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 21
+ OnDblClick = DefaultPathsDblCick
+ end
+ object txtDefScript: TEdit
+ Left = 146
+ Top = 182
+ Width = 329
+ Height = 21
+ HelpContext = 1000
+ Anchors = [akLeft, akTop, akRight]
+ ParentShowHint = False
+ ShowHint = False
+ TabOrder = 22
+ end
+ end
+ end
+ object btnOK: TButton
+ Left = 327
+ Top = 469
+ Width = 86
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'OK'
+ Default = True
+ TabOrder = 0
+ OnClick = btnOKClick
+ end
+ object btnCancel: TButton
+ Left = 422
+ Top = 469
+ Width = 86
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'Cancel'
+ TabOrder = 1
+ OnClick = btnCancelClick
+ end
+ object OpenDialog: TOpenDialog
+ Left = 424
+ Top = 392
+ end
+end
diff --git a/Forms/Options.pas b/Forms/Options.pas
new file mode 100644
index 0000000..b997b46
--- /dev/null
+++ b/Forms/Options.pas
@@ -0,0 +1,1796 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+//{$D-,L-,O+,Q-,R-,Y-,S-}
+unit Options;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ComCtrls, ExtCtrls, Buttons, Registry, Mask, CheckLst,
+ MMSystem, Translation, RegexHelper, FileCtrl, StrUtils, ShellAPI, ShlObj,
+ Vcl.Samples.Spin;
+
+type
+ TOptionsForm = class(TForm)
+ btnOK: TButton;
+ btnCancel: TButton;
+ OpenDialog: TOpenDialog;
+ GroupBox15: TGroupBox;
+ btnBrowseSound: TSpeedButton;
+ btnPlay: TSpeedButton;
+ Label44: TLabel;
+ txtSoundFile: TEdit;
+ chkPlaysound: TCheckBox;
+ Tabs: TPageControl;
+ GeneralPage: TTabSheet;
+ SpeedButton1: TSpeedButton;
+ pnlJPEGQuality: TPanel;
+ chkConfirmDel: TCheckBox;
+ chkOldPaletteFormat: TCheckBox;
+ chkConfirmExit: TCheckBox;
+ chkConfirmStopRender: TCheckBox;
+ cbUseTemplate: TCheckBox;
+ cbMissingPlugin: TCheckBox;
+ cbEmbedThumbs: TCheckBox;
+ pnlMultithreading: TPanel;
+ cbNrTheads: TComboBox;
+ pnlPNGTransparency: TPanel;
+ grpGuidelines: TGroupBox;
+ cbGL: TCheckBox;
+ pnlCenterLine: TPanel;
+ shCenterLine: TShape;
+ pnlThirdsLine: TPanel;
+ shThirdsLine: TShape;
+ pnlGRLine: TPanel;
+ shGRLine: TShape;
+ pnlCenter: TPanel;
+ pnlThirds: TPanel;
+ pnlGoldenRatio: TPanel;
+ Panel46: TPanel;
+ txtLanguageFile: TComboBox;
+ cbPNGTransparency: TComboBox;
+ txtJPEGquality: TComboBox;
+ EditorPage: TTabSheet;
+ GroupBox1: TGroupBox;
+ chkUseXFormColor: TCheckBox;
+ chkHelpers: TCheckBox;
+ GroupBox21: TGroupBox;
+ chkAxisLock: TCheckBox;
+ chkExtendedEdit: TCheckBox;
+ chkXaosRebuild: TCheckBox;
+ grpEditorColors: TGroupBox;
+ pnlBackground: TPanel;
+ pnlReferenceC: TPanel;
+ pnlHelpers: TPanel;
+ pnlGrid: TPanel;
+ pnlBackColor: TPanel;
+ shBackground: TShape;
+ pnlReference: TPanel;
+ shRef: TShape;
+ pnlHelpersColor: TPanel;
+ shHelpers: TShape;
+ pnlGridColor1: TPanel;
+ shGC1: TShape;
+ pnlGridColor2: TPanel;
+ shGC2: TShape;
+ chkEnableEditorPreview: TCheckBox;
+ Panel48: TPanel;
+ tbEPTransparency: TTrackBar;
+ DisplayPage: TTabSheet;
+ GroupBox2: TGroupBox;
+ pnlLowQ: TPanel;
+ pnlMediumQ: TPanel;
+ pnlHighQ: TPanel;
+ txtHighQuality: TEdit;
+ txtMediumQuality: TEdit;
+ txtLowQuality: TEdit;
+ grpRendering: TGroupBox;
+ pnlDensity: TPanel;
+ pnlGamma: TPanel;
+ pnlBright: TPanel;
+ pnlVibrancy: TPanel;
+ pnlRelGamma: TPanel;
+ pnlOSample: TPanel;
+ pnlFilter: TPanel;
+ txtGammaThreshold: TEdit;
+ txtFilterRadius: TEdit;
+ txtOversample: TEdit;
+ txtVibrancy: TEdit;
+ txtBrightness: TEdit;
+ txtGamma: TEdit;
+ txtSampleDensity: TEdit;
+ GroupBox20: TGroupBox;
+ Label48: TLabel;
+ chkShowTransparency: TCheckBox;
+ chkExtendMainPreview: TCheckBox;
+ pnlExtension: TPanel;
+ cbExtendPercent: TComboBox;
+ chkUseSmallThumbs: TCheckBox;
+ RandomPage: TTabSheet;
+ gpNumberOfTransforms: TGroupBox;
+ udMinXforms: TUpDown;
+ udMaxXForms: TUpDown;
+ Panel15: TPanel;
+ Panel16: TPanel;
+ txtMaxXforms: TEdit;
+ txtMinXForms: TEdit;
+ gpFlameTitlePrefix: TGroupBox;
+ udBatchSize: TUpDown;
+ chkKeepBackground: TCheckBox;
+ Panel11: TPanel;
+ Panel12: TPanel;
+ txtBatchSize: TEdit;
+ txtRandomPrefix: TEdit;
+ gpMutationTransforms: TGroupBox;
+ udMinMutate: TUpDown;
+ udMaxMutate: TUpDown;
+ Panel13: TPanel;
+ Panel14: TPanel;
+ txtMaxMutate: TEdit;
+ txtMinMutate: TEdit;
+ gpForcedSymmetry: TGroupBox;
+ udSymOrder: TUpDown;
+ udSymNVars: TUpDown;
+ Panel17: TPanel;
+ Panel18: TPanel;
+ Panel19: TPanel;
+ txtSymNVars: TEdit;
+ txtSymOrder: TEdit;
+ cmbSymType: TComboBox;
+ grpGradient: TRadioGroup;
+ GroupBox16: TGroupBox;
+ btnGradientsFile: TSpeedButton;
+ txtGradientsFile: TEdit;
+ VariationsPage: TTabSheet;
+ btnSetAll: TButton;
+ btnClearAll: TButton;
+ clbVarEnabled: TCheckListBox;
+ GradientPage: TTabSheet;
+ GroupBox13: TGroupBox;
+ Panel28: TPanel;
+ Panel29: TPanel;
+ txtTryLength: TEdit;
+ txtNumtries: TEdit;
+ GroupBox17: TGroupBox;
+ udMinHue: TUpDown;
+ Panel20: TPanel;
+ Panel21: TPanel;
+ udMaxHue: TUpDown;
+ txtMaxHue: TEdit;
+ txtMinHue: TEdit;
+ GroupBox18: TGroupBox;
+ Panel22: TPanel;
+ Panel23: TPanel;
+ udMinSat: TUpDown;
+ txtMinSat: TEdit;
+ udmaxSat: TUpDown;
+ txtMaxSat: TEdit;
+ GroupBox22: TGroupBox;
+ Panel24: TPanel;
+ Panel25: TPanel;
+ udMinLum: TUpDown;
+ txtMinLum: TEdit;
+ udMaxLum: TUpDown;
+ txtMaxLum: TEdit;
+ GroupBox23: TGroupBox;
+ Panel26: TPanel;
+ Panel27: TPanel;
+ udMinNodes: TUpDown;
+ txtMinNodes: TEdit;
+ udMaxNodes: TUpDown;
+ txtMaxNodes: TEdit;
+ UPRPage: TTabSheet;
+ chkAdjustDensity: TCheckBox;
+ GroupBox11: TGroupBox;
+ Panel37: TPanel;
+ Panel38: TPanel;
+ txtUPRHeight: TEdit;
+ txtUPRWidth: TEdit;
+ GroupBox9: TGroupBox;
+ Panel34: TPanel;
+ Panel35: TPanel;
+ Panel36: TPanel;
+ txtUPROversample: TEdit;
+ txtUPRFilterRadius: TEdit;
+ txtFIterDensity: TEdit;
+ GroupBox4: TGroupBox;
+ Panel30: TPanel;
+ Panel31: TPanel;
+ txtFCFile: TEdit;
+ txtFCIdent: TEdit;
+ GroupBox5: TGroupBox;
+ Panel32: TPanel;
+ Panel33: TPanel;
+ txtFFFile: TEdit;
+ txtFFIdent: TEdit;
+ PathsPage: TTabSheet;
+ btnDefGradient: TSpeedButton;
+ btnSmooth: TSpeedButton;
+ SpeedButton2: TSpeedButton;
+ btnRenderer: TSpeedButton;
+ btnHelp: TSpeedButton;
+ Label49: TLabel;
+ btnFindDefaultSaveFile: TSpeedButton;
+ chkRememberLastOpen: TCheckBox;
+ Panel39: TPanel;
+ txtDefParameterFile: TEdit;
+ Panel40: TPanel;
+ txtDefSmoothFile: TEdit;
+ Panel41: TPanel;
+ Panel42: TPanel;
+ Panel43: TPanel;
+ txtLibrary: TEdit;
+ txtRenderer: TEdit;
+ txtHelp: TEdit;
+ cbEnableAutosave: TCheckBox;
+ Panel44: TPanel;
+ txtDefaultSaveFile: TEdit;
+ Panel45: TPanel;
+ cbFreq: TComboBox;
+ GroupBox3: TGroupBox;
+ btnChaotica: TSpeedButton;
+ Panel47: TPanel;
+ cbC64: TCheckBox;
+ txtChaotica: TEdit;
+ Panel49: TPanel;
+ btnPluginPath: TSpeedButton;
+ Panel50: TPanel;
+ txtPluginFolder: TEdit;
+ pnlReflection: TPanel;
+ pnlReflectionC: TPanel;
+ shReflection: TShape;
+ GroupBox7: TGroupBox;
+ pnSTile: TPanel;
+ pnRTile: TPanel;
+ pnHexTile: TPanel;
+ txtHexTile: TEdit;
+ txtRTile: TEdit;
+ txtSTile: TEdit;
+ pnlFuse: TPanel;
+ txtFuse: TSpinEdit;
+ chkEngLayout: TCheckBox;
+ chkConfirmClearScript: TCheckBox;
+ pnlScreenShot: TPanel;
+ btnSShotPath: TSpeedButton;
+ txtSShotFolder: TEdit;
+ rgRotationMode: TRadioGroup;
+ rgZoomingMode: TRadioGroup;
+ chkShowRenderStats: TCheckBox;
+ btnDefScript: TSpeedButton;
+ pnlScriptFile: TPanel;
+ txtDefScript: TEdit;
+ chkAutoSaveXML: TCheckBox;
+ rgColorBlend: TRadioGroup;
+ chkEqualStripes: TCheckBox;
+ pnlContrast: TPanel;
+ txtContrast: TEdit;
+ chkRandomTemplates: TCheckBox;
+ chkResetCoefs: TCheckBox;
+ chkApplyFlatten: TCheckBox;
+ pnlRandBackground: TPanel;
+ pnlRandBackColor: TPanel;
+ shRandBackColor: TShape;
+ chkResetLinear: TCheckBox;
+ btnInvert: TButton;
+ chkShowAllXforms: TCheckBox;
+ VarsPages: TPageControl;
+ tabRandomVars: TTabSheet;
+ tabFavouriteVars: TTabSheet;
+ clbVarFavourite: TCheckListBox;
+ rgEnumMode: TRadioGroup;
+ chkShowRenderImage: TCheckBox;
+ procedure chkEnableEditorPreviewClick(Sender: TObject);
+ procedure btnChaoticaClick(Sender: TObject);
+ procedure SpeedButton1Click(Sender: TObject);
+ procedure btnCancelClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure btnOKClick(Sender: TObject);
+ procedure btnDefGradientClick(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure btnSmoothClick(Sender: TObject);
+ procedure cmbSymTypeChange(Sender: TObject);
+ procedure btnSetAllClick(Sender: TObject);
+ procedure btnClearAllClick(Sender: TObject);
+ procedure txtMinNodesChange(Sender: TObject);
+ procedure txtMaxNodesChange(Sender: TObject);
+ procedure txtMaxHueChange(Sender: TObject);
+ procedure txtMaxSatChange(Sender: TObject);
+ procedure txtMaxLumChange(Sender: TObject);
+ procedure txtMinHueChange(Sender: TObject);
+ procedure txtMinSatChange(Sender: TObject);
+ procedure txtMinLumChange(Sender: TObject);
+ procedure txtMinXFormsChange(Sender: TObject);
+ procedure txtMaxXformsChange(Sender: TObject);
+ procedure txtMinMutateChange(Sender: TObject);
+ procedure txtMaxMutateChange(Sender: TObject);
+ procedure btnRendererClick(Sender: TObject);
+ procedure SpeedButton2Click(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure pnlBackColorClick(Sender: TObject);
+ procedure pnlReferenceClick(Sender: TObject);
+ procedure pnlGridColor1Click(Sender: TObject);
+ procedure pnlGridColor2Click(Sender: TObject);
+ procedure pnlHelpersColorClick(Sender: TObject);
+ procedure btnBrowseSoundClick(Sender: TObject);
+ procedure pnlCenterLineClick(Sender: TObject);
+ procedure pnlThirdsLineClick(Sender: TObject);
+ procedure pnlGRLineClick(Sender: TObject);
+ procedure btnPlayClick(Sender: TObject);
+ procedure btnGradientsFileClick(Sender: TObject);
+ procedure shCenterLineMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+ procedure shThirdsLineMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+ procedure shGRLineMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+ procedure UpdateShapeColors;
+ procedure shBackgroundMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure shGC1MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure shGC2MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure shRefMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure shHelpersMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure chkRememberLastOpenClick(Sender: TObject);
+ procedure btnFindDefaultSaveFileClick(Sender: TObject);
+ procedure cbEnableAutosaveClick(Sender: TObject);
+ procedure btnHelpClick(Sender: TObject);
+ procedure cbGLClick(Sender: TObject);
+ procedure btnPluginPathClick(Sender: TObject);
+ procedure shReflectionMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure pnlReflectionCClick(Sender: TObject);
+ procedure RenderPanelsDblClick(Sender: TObject);
+ procedure GradientPanelsDblClick(Sender: TObject);
+ procedure NumFieldKeyPress(Sender: TObject; var Key: Char);
+ procedure NumFloatKeyPress(Sender: TObject; var Key: Char);
+ procedure TilePanelDblClick(Sender: TObject);
+ procedure btnSShotPathClick(Sender: TObject);
+ procedure btnDefScriptClick(Sender: TObject);
+ procedure DefaultPathsDblCick(Sender: TObject);
+ procedure pnlRandBackColorClick(Sender: TObject);
+ procedure shRandBackColorMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure chkKeepBackgroundClick(Sender: TObject);
+ procedure btnInvertClick(Sender: TObject);
+
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ OptionsForm: TOptionsForm;
+
+implementation
+
+{$R *.DFM}
+
+uses
+ Main, Global, Editor, ControlPoint, XFormMan, Adjust, FormRender;
+
+procedure TOptionsForm.btnCancelClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TOptionsForm.UpdateShapeColors;
+begin
+ shBackground.Brush.Color := pnlBackColor.Color;
+ shGC1.Brush.Color := pnlGridColor1.Color;
+ shGC2.Brush.Color := pnlGridColor2.Color;
+ shRef.Brush.Color := pnlReference.Color;
+ shReflection.Brush.Color := pnlReflectionC.Color; // AV
+ shHelpers.Brush.Color := pnlHelpersColor.Color;
+ shCenterLine.Brush.Color := pnlCenterLine.Color;
+ shThirdsLine.Brush.Color := pnlThirdsLine.Color;
+ shGRLine.Brush.Color := pnlGRLine.Color;
+ shRandBackColor.Brush.Color := pnlRandBackColor.Color; // AV
+end;
+
+procedure TOptionsForm.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+ i, j: integer;
+ s1, s2: string;
+begin
+ { Read position from registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Options', False) then
+ begin
+ if Registry.ValueExists('Left') then
+ OptionsForm.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ OptionsForm.Top := Registry.ReadInteger('Top');
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+
+ { General tab }
+ txtDefParameterFile.Text := DefFlameFile;
+ txtDefSmoothFile.Text := defSmoothPaletteFile;
+ txtNumtries.text := IntToStr(Numtries);
+ txtTryLength.text := IntToStr(Trylength);
+ udBatchSize.Position := BatchSize;
+// chkResize.checked := ResizeOnLoad;
+
+ if NrTreads <= 1 then
+ cbNrTheads.ItemIndex := 0 // AV: MT off
+ else if (NrTreads <= UseNrThreads) then
+ cbNrTheads.ItemIndex := NrTreads - 1 // AV: MT on
+ else
+ cbNrTheads.ItemIndex := UseNrThreads - 1; // AV: incorrect MT value
+ (* begin // AV: what if we'd have 100 threads? :)
+ //cbNrTheads.text := intTostr(NrTreads);
+ // Hack
+ cbNrTheads.ItemIndex := 0;
+ case NrTreads of
+ 2: cbNrTheads.ItemIndex := 1;
+ 3: cbNrTheads.ItemIndex := 2;
+ 4: cbNrTheads.ItemIndex := 3;
+ 5: cbNrTheads.ItemIndex := 4;
+ 6: cbNrTheads.ItemIndex := 5;
+ 7: cbNrTheads.ItemIndex := 6;
+ 8: cbNrTheads.ItemIndex := 7;
+ 9: cbNrTheads.ItemIndex := 8;
+ 10: cbNrTheads.ItemIndex := 9;
+ 11: cbNrTheads.ItemIndex := 10;
+ 12: cbNrTheads.ItemIndex := 11;
+ end;
+ end; *)
+
+ chkConfirmDel.Checked := ConfirmDelete;
+ chkOldPaletteFormat.Checked := OldPaletteFormat;
+ chkConfirmExit.Checked := ConfirmExit;
+ chkConfirmStopRender.Checked := ConfirmStopRender;
+ chkConfirmClearScript.Checked := ConfirmClearScript; // AV
+ chkRememberLastOpen.Checked := RememberLastOpenFile;
+ chkUseSmallThumbs.Checked := UseSmallThumbnails;
+ cbUseTemplate.Checked := AlwaysCreateBlankFlame;
+ cbMissingPlugin.Checked := WarnOnMissingPlugin;
+ cbEmbedThumbs.Checked := EmbedThumbnails;
+ chkEngLayout.Checked := SetEngLayout; // AV
+ chkAutoSaveXML.Checked := AutoSaveXML; // AV
+ chkEqualStripes.Checked := EqualStripes;
+ chkRandomTemplates.Checked := RandomizeTemplates;
+ chkApplyFlatten.Checked := ApplyFlatten;
+ //cbSinglePrecision.Checked := SingleBuffer;
+
+ rgRotationMode.ItemIndex := MainForm_RotationMode;
+ if PreserveQuality then
+ rgZoomingMode.ItemIndex := 0
+ else
+ rgZoomingMode.ItemIndex := 1;
+ rgEnumMode.ItemIndex := FlameEnumMode; // AV
+
+ txtJPEGQuality.text := IntToStr(JPEGQuality);
+
+ chkPlaySound.Checked := PlaySoundOnRenderComplete;
+ txtSoundFile.Text := RenderCompleteSoundFile;
+
+ //cbInternalBitsPerSample.ItemIndex := InternalBitsPerSample;
+
+ { Editor }
+ chkUseXFormColor.checked := UseTransformColors;
+ chkHelpers.Checked := HelpersEnabled;
+ chkExtendedEdit.Checked := ExtEditEnabled;
+ chkAxisLock.Checked := TransformAxisLock;
+ chkXaosRebuild.Checked := RebuildXaosLinks;
+ chkShowAllXforms.Checked := ShowAllXforms;
+ chkEnableEditorPreview.Checked := EnableEditorPreview;
+ tbEPTransparency.Position := EditorPreviewTransparency;
+ chkEnableEditorPreviewClick(self);
+ chkResetCoefs.Checked := AllowResetCoefs;
+ chkResetLinear.Checked := AllowResetLinear;
+
+ { Display tab }
+ txtSampleDensity.Text := FloatToStr(defSampleDensity);
+ txtGamma.Text := FloatToStr(defGamma);
+ txtBrightness.Text := FloatToStr(defBrightness);
+ txtContrast.Text := FloatToStr(defContrast); // AV
+ txtVibrancy.Text := FloatToStr(defVibrancy);
+ txtOversample.Text := IntToStr(defOversample);
+ txtFilterRadius.Text := FloatToStr(defFilterRadius);
+ txtGammaThreshold.Text := FloatToStr(defGammaThreshold);
+ txtFuse.Value := Fuse; // AV
+
+ txtLowQuality.Text := FloatToStr(prevLowQuality);
+ txtMediumQuality.Text := FloatToStr(prevMediumQuality);
+ txtHighQuality.Text := FloatToStr(prevHighQuality);
+
+ txtHexTile.Text := FloatToStr(HexTR); // AV
+ txtSTile.Text := FloatToStr(Round6(SquareTR)); // AV
+ txtRTile.Text := FloatToStr(RhombTR); // AV
+
+ pnlBackColor.Color := TColor(EditorBkgColor);
+ pnlGridColor1.Color := GridColor1;
+ pnlGridColor2.Color := GridColor2;
+ pnlReference.color := TColor(ReferenceTriangleColor);
+ pnlReflectionC.Color := TColor(FlipColor); // AV
+ pnlHelpersColor.Color := TColor(HelpersColor); // AV
+
+ cbPNGTransparency.ItemIndex := PNGTransparency;
+ chkShowTransparency.Checked := ShowTransparency;
+ cbExtendPercent.Text := FloatToStr((MainPreviewScale - 1) / 0.02);
+ chkExtendMainPreview.Checked := ExtendMainPreview;
+
+ chkShowRenderStats.Checked := ShowRenderStats;
+ chkShowRenderImage.Checked := ShowRenderImage; // AV
+
+ { Random tab }
+ udMinXforms.Position := randMinTransforms;
+ udMaxXforms.Position := randMaxTransforms;
+ udMinMutate.Position := mutantMinTransforms;
+ udMaxMutate.Position := mutantMaxTransforms;
+ txtRandomPrefix.text := RandomPrefix;
+ chkKeepbackground.Checked := KeepBackground;
+ cmbSymType.ItemIndex := SymmetryType;
+ if (SymmetryType = 0) or (SymmetryType = 1) then
+ begin
+ txtSymOrder.enabled := false;
+ txtSymNVars.enabled := false;
+ end;
+ udSymOrder.Position := SymmetryOrder;
+ udSymNVars.Position := SymmetryNVars;
+
+ pnlRandBackColor.Color := TColor(RandBackColor); // AV
+ chkKeepBackgroundClick(nil); // AV
+
+ { Variations tab }
+ for i := 0 to NRVAR -1 do
+ begin
+ clbVarEnabled.Checked[i] := Variations[i];
+ clbVarFavourite.Checked[i] := FavouriteVariations[i]; // AV
+ end;
+
+ { Gradient tab }
+ grpGradient.ItemIndex := randGradient;
+ txtGradientsFile.Text := randGradientFile;
+ udMinNodes.Position := MinNodes;
+ udMaxNodes.Position := MaxNodes;
+ udMinHue.Position := MinHue;
+ udMinSat.Position := MinSat;
+ udMinLum.Position := MinLum;
+ udMaxHue.Position := MaxHue;
+ udMaxSat.Position := MaxSat;
+ udMaxLum.Position := MaxLum;
+ rgColorBlend.ItemIndex := randColorBlend;
+
+ { UPR tab }
+ txtFIterDensity.text := IntToStr(UPRSampleDensity);
+ txtUPRFilterRadius.text := FloatToStr(UPRFilterRadius);
+ txtUPROversample.text := IntToStr(UPROversample);
+ txtFCIdent.text := UPRColoringIdent;
+ txtFCFile.text := UPRColoringFile;
+ txtFFIdent.text := UPRFormulaIdent;
+ txtFFFile.text := UPRFormulaFile;
+ txtUPRWidth.text := IntToStr(UPRWidth);
+ txtUPRHeight.text := IntToStr(UPRHeight);
+ chkAdjustDensity.checked := UPRAdjustDensity;
+
+ txtRenderer.Text := flam3Path;
+
+ txtHelp.Text := HelpPath;
+ txtLibrary.text := defLibrary;
+ txtDefScript.Text := defScriptFile; // AV
+
+ cbEnableAutosave.Checked := AutoSaveEnabled;
+ txtDefaultSaveFile.Text := AutoSavePath;
+ cbFreq.ItemIndex := AutoSaveFreq;
+
+ cbEnableAutosaveClick(nil);
+
+ pnlCenterLine.Color := TColor(LineCenterColor);
+ pnlThirdsLine.Color := TColor(LineThirdsColor);
+ pnlGRLine.Color := TColor(LineGRColor);
+ cbGL.Checked := EnableGuides;
+ cbGLClick(nil);
+ txtChaotica.Text := ChaoticaPath;
+
+ {$ifdef Apo7X64}
+ cbc64.Checked := true;
+ {$else}
+ cbC64.Checked := UseX64IfPossible;
+ {$endif}
+
+ txtPluginFolder.Text := PluginPath;
+ txtSShotFolder.Text := ScreenShotPath;
+
+ UpdateShapeColors;
+
+ j := -1;
+ txtLanguageFile.Items.Clear;
+ for i := 0 to AvailableLanguages.Count-1 do begin
+ if AvailableLanguages.Strings[i] = '' then begin
+ txtLanguageFile.Items.Add('Default (English)');
+ end else begin
+ LanguageInfo(AvailableLanguages.Strings[i], s1, s2);
+ if (s2 <> '') then s1 := s2 + ' (' + s1 + ')';
+ txtLanguageFile.Items.Add(s1);
+ end;
+ if (lowercase(AvailableLanguages.Strings[i]) = lowercase(languagefile)) then
+ j := i;
+
+ end;
+ txtLanguageFile.ItemIndex := j;
+end;
+
+procedure TOptionsForm.GradientPanelsDblClick(Sender: TObject);
+begin // AV: restore defaults
+ case TPanel(Sender).Tag of
+ 0: txtMinHue.Text := '0';
+ 1: txtMaxHue.Text := '600';
+ 2: txtMinSat.Text := '0';
+ 3: txtMaxSat.Text := '100';
+ 4: txtMinLum.Text := '1';
+ 5: txtMaxLum.Text := '100';
+ 6: txtMinNodes.Text := '2';
+ 7: txtMaxNodes.Text := '10';
+ 8: txtNumTries.Text := '10';
+ 9: txtTryLength.Text := '100000';
+ end;
+end;
+
+procedure TOptionsForm.NumFieldKeyPress(Sender: TObject; var Key: Char);
+begin
+ if not CharinSet(Key,['0'..'9', #8, #13])
+ then Key:= #0;
+end;
+
+procedure TOptionsForm.NumFloatKeyPress(Sender: TObject; var Key: Char);
+begin
+ if (Key = ',') then Key := FormatSettings.DecimalSeparator;
+ if not CharinSet(Key,['0'..'9', #8, #13, FormatSettings.DecimalSeparator])
+ then Key:= #0;
+end;
+
+procedure TOptionsForm.btnOKClick(Sender: TObject);
+var
+ vars: boolean;
+ i: integer;
+ warn: boolean;
+begin
+
+ { Variations tab }
+ { Get option values from controls. Disallow bad values }
+ vars := false;
+ for i := 0 to NRVAR-1 do begin
+ Variations[i] := clbVarEnabled.Checked[i];
+ vars := vars or Variations[i];
+ FavouriteVariations[i] := clbVarFavourite.Checked[i]; // AV
+ end;
+ if vars = false then
+ Variations[0] := true;
+
+ warn := (LanguageFile <> AvailableLanguages[txtLanguageFile.ItemIndex])
+ { or (UseSmallThumbnails <> chkUseSmallThumbs.Checked)}; // AV: fixed
+
+ { General tab }
+ JPEGQuality := StrToInt(txtJPEGQuality.text);
+ Numtries := StrToInt(txtNumtries.text);
+ if NumTries < 1 then Numtries := 1;
+ Trylength := StrToInt(txtTrylength.text);
+ if Trylength < 100 then trylength := 100;
+ if JPEGQuality > 100 then JPEGQuality := 100;
+ if JPEGQuality < 1 then JPEGQuality := 100;
+ BatchSize := udBatchSize.Position;
+ if BatchSize < 1 then BatchSize := 1;
+ if BatchSize > 300 then BatchSize := 300;
+
+ PNGTransparency := cbPNGTransparency.ItemIndex;
+ ShowTransparency := chkShowTransparency.Checked;
+
+ // NrTreads := StrToIntDef(cbNrTheads.text, 0); // AV: why? user cannot change this text!
+ NrTreads := cbNrTheads.ItemIndex + 1; // AV
+
+ ConfirmDelete := chkConfirmDel.Checked;
+ OldPaletteFormat := chkOldPaletteFormat.Checked;
+ ConfirmExit := chkConfirmExit.Checked;
+ ConfirmStopRender := chkConfirmStopRender.Checked;
+ RememberLastOpenFile := chkRememberLastOpen.Checked;
+ UseSmallThumbnails := chkUseSmallThumbs.Checked;
+ AlwaysCreateBlankFlame := cbUseTemplate.Checked;
+ EmbedThumbnails := cbEmbedThumbs.Checked;
+ WarnOnMissingPlugin := cbMissingPlugin.Checked;
+ SetEngLayout := chkEngLayout.Checked; // AV
+ ConfirmClearScript := chkConfirmClearScript.Checked; // AV
+ AutoSaveXML := chkAutoSaveXML.Checked; // AV
+ EqualStripes := chkEqualStripes.Checked; // AV
+ RandomizeTemplates := chkRandomTemplates.Checked;
+ ApplyFlatten := chkApplyFlatten.Checked;
+ LanguageFile := AvailableLanguages.Strings[txtLanguageFile.ItemIndex];
+ //SingleBuffer := cbSinglePrecision.Checked;
+
+ MainForm_RotationMode := rgRotationMode.ItemIndex;
+ PreserveQuality := (rgZoomingMode.ItemIndex = 0);
+ FlameEnumMode := rgEnumMode.ItemIndex; // AV
+
+ //InternalBitsPerSample := cbInternalBitsPerSample.ItemIndex;
+ LineCenterColor := pnlCenterLine.Color;
+ LineThirdsColor := pnlThirdsLine.Color;
+ LineGRColor := pnlGRLine.Color;
+ EnableGuides := cbGL.Checked;
+
+ // Editor
+ UseTransformColors := chkUseXFormColor.checked;
+ HelpersEnabled := chkHelpers.Checked;
+ ShowAllXforms := chkShowAllXforms.Checked;
+
+ ExtEditEnabled := chkExtendedEdit.Checked;
+ TransformAxisLock := chkAxisLock.Checked;
+ RebuildXaosLinks := chkXaosRebuild.Checked;
+ EnableEditorPreview := chkEnableEditorPreview.Checked;
+ EditorPreviewTransparency := tbEPTransparency.Position;
+ AllowResetCoefs := chkResetCoefs.Checked;
+ AllowResetLinear := chkResetLinear.Checked;
+
+ { Display tab }
+ try
+ defSampleDensity := StrToFloat(txtSampleDensity.Text);
+ if defSampleDensity > 100 then defSampleDensity := 100;
+ if defSampleDensity <= 0 then defSampleDensity := 0.1;
+ except
+ defSampleDensity := 5;
+ end;
+ try
+ defGamma := StrToFloat(txtGamma.Text);
+ if defGamma < 0.1 then defGamma := 0.1;
+ except
+ defGamma := 4;
+ end;
+ try
+ defBrightness := StrToFloat(txtBrightness.Text);
+ if defBrightness < 0.1 then defBrightness := 0.1;
+ except
+ defBrightness := 4;
+ end;
+ try // AV
+ defContrast := StrToFloat(txtContrast.Text);
+ if defContrast < 0.1 then defContrast := 0.1;
+ if defContrast > 10 then defContrast := 10;
+ except
+ defContrast := 1;
+ end;
+ try
+ defVibrancy := StrToFloat(txtVibrancy.Text);
+ if defVibrancy < 0 then defVibrancy := 0.1;
+ except
+ defVibrancy := 1;
+ end;
+ try
+ defFilterRadius := StrToFloat(txtFilterRadius.Text);
+ if defFilterRadius <= 0 then defFilterRadius := 0.1;
+ except
+ defFilterRadius := 0.2;
+ end;
+ try
+ defGammaThreshold := StrToFloat(txtGammaThreshold.Text);
+ if defGammaThreshold < 0 then
+ except
+ defGammaThreshold := 0.01;
+ end;
+ defOversample := StrToInt(txtOversample.Text);
+ if defOversample > 4 then defOversample := 4;
+ if defOversample < 1 then defOversample := 1;
+ try
+ prevLowQuality := StrToFloat(txtLowQuality.Text);
+ if prevLowQuality > 100 then prevLowQuality := 100;
+ if prevLowQuality < 0.01 then
+ except
+ prevLowQuality := 0.1;
+ end;
+ try
+ prevMediumQuality := StrToFloat(txtMediumQuality.Text);
+ if prevMediumQuality > 1000 then prevMediumQuality := 1000;
+ if prevMediumQuality < 0.01 then prevMediumQuality := 0.01;
+ except
+ prevMediumQuality := 1;
+ end;
+ try
+ prevHighQuality := StrToFloat(txtHighQuality.Text);
+ if prevHighQuality > 10000 then prevHighQuality := 10000;
+ if prevHighQuality < 0.01 then prevHighQuality := 0.01;
+ except
+ prevHighQuality := 5;
+ end;
+
+ Fuse := txtFuse.Value; // AV
+
+ try
+ HexTR := StrToFloat(txtHexTile.Text); // AV
+ if HexTR < 0.1 then HexTR := 0.1;
+ except
+ HexTR := 1;
+ end;
+ try
+ SquareTR := StrToFloat(txtSTile.Text); // AV
+ if SquareTR < 0.1 then SquareTR := 0.1;
+ except
+ SquareTR := 1;
+ end;
+ try
+ RhombTR := StrToFloat(txtRTile.Text); // AV
+ if RhombTR < 0.1 then RhombTR := 0.1;
+ except
+ RhombTR := 1;
+ end;
+
+ MainPreviewScale := 1 + 0.02 * StrToFloatDef(cbExtendPercent.Text, 0);
+ if MainPreviewScale < 1 then MainPreviewScale := 1
+ else if MainPreviewScale > 5 then MainPreviewScale := 5;
+ ExtendMainPreview := chkExtendMainPreview.Checked;
+
+ ShowRenderStats := chkShowRenderStats.Checked;
+ ShowRenderImage := chkShowRenderImage.Checked; // AV
+
+ { Random tab }
+ randMinTransforms := udMinXforms.Position;
+ randMaxTransforms := udMaxXforms.Position;
+ mutantMinTransforms := udMinMutate.Position;
+ mutantMaxTransforms := udMaxMutate.Position;
+ RandomPrefix := txtRandomPrefix.text;
+ SymmetryType := cmbSymType.ItemIndex;
+ SymmetryOrder := udSymOrder.Position;
+ SymmetryNVars := udSymNVars.Position;
+ KeepBackground := chkKeepbackground.Checked;
+
+ {Gradient tab }
+ randGradient := grpGradient.ItemIndex;
+ randGradientFile := txtGradientsFile.Text;
+ MinNodes := udMinNodes.Position;
+ MaxNodes := udMaxNodes.Position;
+ MinHue := udMinHue.Position;
+ MinSat := udMinSat.Position;
+ MinLum := udMinLum.Position;
+ MaxHue := udMaxHue.Position;
+ MaxSat := udMaxSat.Position;
+ MaxLum := udMaxLum.Position;
+ randColorBlend := rgColorBlend.ItemIndex;
+
+ { UPR options }
+ UPRSampleDensity := StrToInt(txtFIterDensity.text);
+ UPRFilterRadius := StrToFloat(txtUPRFilterRadius.text);
+ UPROversample := StrToInt(txtUPROversample.text);
+ UPRColoringIdent := txtFCIdent.text;
+ UPRColoringFile := txtFCFile.text;
+ UPRFormulaIdent := txtFFIdent.text;
+ UPRFormulaFile := txtFFFile.text;
+ UPRAdjustDensity := chkAdjustDensity.checked;
+ UPRWidth := StrToInt(txtUPRWidth.text);
+ UPRHeight := StrToInt(txtUPRHeight.text);
+
+ flam3Path := txtRenderer.text;
+
+ {Paths}
+ defLibrary := txtLibrary.text;
+ // if (not RememberLastOpenFile) then // AV: fixed
+ defFlameFile := txtDefParameterFile.Text;
+ defSmoothPaletteFile := txtDefSmoothFile.Text;
+ PlaySoundOnRenderComplete := chkPlaySound.Checked;
+ RenderCompleteSoundFile := txtSoundFile.Text;
+ HelpPath := txtHelp.Text;
+ ChaoticaPath := txtChaotica.text;
+ ScreenShotPath := txtSShotFolder.Text; // AV
+ if (RightStr(ScreenShotPath, 1) <> '\') and (ScreenShotPath <> '') then
+ ScreenShotPath := ScreenShotPath + '\';
+ defScriptFile := txtDefScript.Text; // AV
+
+ UseX64IfPossible := cbC64.Checked;
+
+ PluginPath := txtPluginFolder.Text;
+ if (PluginPath = '') or (not DirectoryExists(PluginPath)) then
+ PluginPath := ExtractFilePath(Application.ExeName); // AV
+ if (RightStr(PluginPath, 1) <> '\') and (PluginPath <> '') then
+ PluginPath := PluginPath + '\';
+
+ AutoSaveEnabled := cbEnableAutosave.Checked;
+ AutoSavePath := txtDefaultSaveFile.Text;
+ AutoSaveFreq := cbFreq.ItemIndex; // AV:
+
+ MainForm.mnuExportFLame.Enabled := FileExists(flam3Path);
+ MainForm.mnuExportChaotica.Enabled := FileExists(chaoticaPath + '\chaotica.exe');
+
+ if (warn) then
+ Application.MessageBox(PChar(TextByKey('options-restartnotice')), PChar('Apophysis'), MB_ICONWARNING);
+
+ Close;
+end;
+
+procedure TOptionsForm.btnDefGradientClick(Sender: TObject);
+var
+ fn:string;
+begin
+ OpenDialog.Filter := TextByKey('common-filter-flamefiles') + '|*.flame|' + TextBykey('common-filter-allfiles') + '|*.*';
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '.flame', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ txtDefParameterFile.text := fn;
+ end;
+end;
+
+procedure TOptionsForm.btnDefScriptClick(Sender: TObject);
+var
+ fn:string;
+begin
+ OpenDialog.Filter := TextByKey('common-filter-scriptfiles') + '|*.aposcript;*.asc|' + TextBykey('common-filter-allfiles') + '|*.*';;
+ if DirectoryExists(ScriptPath) then
+ OpenDialog.InitialDir := ScriptPath + '\'
+ else
+ OpenDialog.InitialDir := ExtractFilePath(Application.ExeName);
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '.asc', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ txtDefScript.Text := fn;
+end;
+
+procedure TOptionsForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Options', True) then
+ begin
+ Registry.WriteInteger('Top', OptionsForm.Top);
+ Registry.WriteInteger('Left', OptionsForm.Left);
+ end;
+ finally
+ Registry.Free;
+ end;
+
+end;
+
+procedure TOptionsForm.btnSmoothClick(Sender: TObject);
+var
+ fn:string;
+begin
+ OpenDialog.Filter := TextByKey('common-filter-gradientfiles') + '|*.gradient;*.ugr|' + TextBykey('common-filter-allfiles') + '|*.*';
+ OpenDialog.InitialDir := ExtractFilePath(defSmoothPaletteFile);
+ OpenDialog.FileName := '';
+ OpenDialog.DefaultExt := 'ugr';
+ if OpenSaveFileDialog(OptionsForm, OpenDialog.DefaultExt, OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ txtDefSmoothFile.text := fn;
+ end;
+end;
+
+procedure TOptionsForm.btnSShotPathClick(Sender: TObject);
+var sspath: string;
+begin
+ sspath := ScreenShotPath;
+ if SelectDirectory(TextByKey('options-tab-environment-screenshotshint'), '',
+ sspath, [sdNewFolder, sdShowEdit, sdNewUI, sdValidateDir], Self) then
+ txtSShotFolder.Text := sspath + '\';
+end;
+
+procedure TOptionsForm.cmbSymTypeChange(Sender: TObject);
+begin
+ if (cmbSymType.ItemIndex = 0) or (cmbSymType.ItemIndex = 1) then
+ begin
+ txtSymOrder.enabled := false;
+ txtSymNVars.enabled := false;
+ end else
+ begin
+ txtSymOrder.enabled := true;
+ txtSymNVars.enabled := true;
+ end;
+end;
+
+procedure TOptionsForm.DefaultPathsDblCick(Sender: TObject);
+begin // AV: reset paths
+ case TPanel(Sender).Tag of
+ 0: txtDefParameterFile.Text := '';
+ 1: txtDefSmoothFile.Text := AppPath + 'Gradients\SmoothPalette.ugr';
+ 2: txtLibrary.Text := AppPath + 'Functions.asc';
+ 3: txtRenderer.Text := GetEnvVarValue('PROGRAMFILES') + '\flam3-3.0.1\flam3-render.exe';
+ 4: txtHelp.Text := AppPath + 'Apophysis AV.chm';
+ 5: begin
+ txtPluginFolder.Text := AppPath + 'Plugins\';
+ if FileExists(AppPath + 'ApoPluginSrc.dat') then
+ DeleteFile(AppPath + 'ApoPluginSrc.dat'); // delete old string
+ end;
+ 6: txtSShotFolder.Text := AppPath + 'ScreenShots\';
+ 7: txtDefScript.Text := '';
+ 8: txtDefaultSaveFile.Text := AppPath + 'autosave.flame';
+ end;
+end;
+
+procedure TOptionsForm.btnSetAllClick(Sender: TObject);
+var
+ i: integer;
+begin
+ if VarsPages.ActivePageIndex = 0 then // AV
+ for i := 0 to NRVAR - 1 do clbVarEnabled.Checked[i] := True
+ //clbVarEnabled.CheckAll(cbChecked)
+ else
+ for i := 0 to NRVAR - 1 do clbVarFavourite.Checked[i] := True;
+ //clbVarFavourite.CheckAll(cbChecked);
+end;
+
+procedure TOptionsForm.btnClearAllClick(Sender: TObject);
+var
+ i: integer;
+begin
+ if VarsPages.ActivePageIndex = 0 then // AV
+ for i := 0 to NRVAR - 1 do clbVarEnabled.Checked[i] := False
+ //clbVarEnabled.CheckAll(cbUnchecked)
+ else
+ for i := 0 to NRVAR - 1 do clbVarFavourite.Checked[i] := False;
+ //clbVarFavourite.CheckAll(cbUnchecked);
+end;
+
+procedure TOptionsForm.txtMinNodesChange(Sender: TObject);
+begin
+ if StrToInt(txtMinNodes.Text) > udMaxNodes.position then
+ udMaxNodes.Position := StrToInt(txtMinNodes.Text);
+end;
+
+procedure TOptionsForm.txtMaxNodesChange(Sender: TObject);
+begin
+ if StrToInt(txtMaxNodes.Text) < udMinNodes.position then
+ udMinNodes.Position := StrToInt(txtMaxNodes.Text);
+end;
+
+procedure TOptionsForm.txtMaxHueChange(Sender: TObject);
+begin
+ if StrToInt(txtMaxHue.Text) < udMinHue.position then
+ udMinHue.Position := StrToInt(txtMaxHue.Text);
+end;
+
+procedure TOptionsForm.txtMaxSatChange(Sender: TObject);
+begin
+ if StrToInt(txtMaxSat.Text) < udMinSat.position then
+ udMinSat.Position := StrToInt(txtMaxSat.Text);
+end;
+
+procedure TOptionsForm.txtMaxLumChange(Sender: TObject);
+begin
+ if StrToInt(txtMaxLum.Text) < udMinLum.position then
+ udMinLum.Position := StrToInt(txtMaxLum.Text);
+end;
+
+procedure TOptionsForm.txtMinHueChange(Sender: TObject);
+begin
+ if StrToInt(txtMinHue.Text) > udMaxHue.position then
+ udMaxHue.Position := StrToInt(txtMinHue.Text);
+end;
+
+procedure TOptionsForm.txtMinSatChange(Sender: TObject);
+begin
+ if StrToInt(txtMinSat.Text) > udMaxSat.position then
+ udMaxSat.Position := StrToInt(txtMinSat.Text);
+end;
+
+procedure TOptionsForm.txtMinLumChange(Sender: TObject);
+begin
+ if StrToInt(txtMinLum.Text) > udMaxLum.position then
+ udMaxLum.Position := StrToInt(txtMinLum.Text);
+end;
+
+procedure TOptionsForm.txtMinXFormsChange(Sender: TObject);
+begin
+ if StrToInt(txtMinXForms.Text) > udMaxXForms.position then
+ udMaxXFOrms.Position := StrToInt(txtMinXForms.Text);
+end;
+
+procedure TOptionsForm.txtMaxXformsChange(Sender: TObject);
+begin
+ if StrToInt(txtMaxXForms.Text) < udMinXForms.position then
+ udMinXForms.Position := StrToInt(txtMaxXforms.Text);
+end;
+
+procedure TOptionsForm.txtMinMutateChange(Sender: TObject);
+begin
+ if StrToInt(txtMinMutate.Text) > udMaxMutate.position then
+ udMaxMutate.Position := StrToInt(txtMinMutate.Text);
+end;
+
+procedure TOptionsForm.txtMaxMutateChange(Sender: TObject);
+begin
+ if StrToInt(txtMaxMutate.Text) < udMinMutate.position then
+ udMinMutate.Position := StrToInt(txtMaxMutate.Text);
+end;
+
+procedure TOptionsForm.btnRendererClick(Sender: TObject);
+var
+ fn:string;
+begin
+ OpenDialog.Filter := TextBykey('common-filter-allfiles') + '|*.*';
+ OpenDialog.InitialDir := ExtractFilePath(flam3Path);
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ txtRenderer.text := fn;
+ end;
+
+end;
+
+procedure TOptionsForm.SpeedButton2Click(Sender: TObject);
+var
+ fn:string;
+begin
+ OpenDialog.Filter := TextByKey('common-filter-scriptfiles') + '|*.aposcript;*.asc|' + TextBykey('common-filter-allfiles') + '|*.*';;
+ OpenDialog.InitialDir := ExtractFilePath(defLibrary);
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '.asc', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ txtLibrary.text := fn;
+ end;
+end;
+
+procedure TOptionsForm.TilePanelDblClick(Sender: TObject);
+begin
+ case TPanel(Sender).Tag of
+ 0: txtSTile.Text := '1.414214';
+ 1: txtRTile.Text := '1';
+ 2: txtHexTile.Text := '2';
+ end;
+end;
+
+procedure TOptionsForm.FormCreate(Sender: TObject);
+var
+ i: integer;
+begin
+ // AV: to use only actual number of cores in the drop-down list
+ try
+ for i := 2 to GetCpuCount do
+ cbNrTheads.Items.Add(IntToStr(i));
+ except
+ cbNrTheads.Items.Clear;
+ for i := 1 to 12 do
+ cbNrTheads.Items.Add(IntToStr(i));
+ end;
+ UseNrThreads := cbNrTheads.Items.Count;
+
+ btnOK.Caption := TextByKey('common-ok');
+ btnCancel.Caption := TextByKey('common-cancel');
+ pnlLowQ.Caption := TextByKey('common-lowquality');
+ pnlMediumQ.Caption := TextByKey('common-mediumquality');
+ pnlHighQ.Caption := TextByKey('common-highquality');
+ btnDefGradient.Hint := TextByKey('common-browse');
+ btnSmooth.Hint := btnDefGradient.Hint;
+ SpeedButton2.Hint := btnDefGradient.Hint;
+ btnRenderer.Hint := btnDefGradient.Hint;
+ btnHelp.Hint := btnDefGradient.Hint;
+ btnPluginPath.Hint := btnDefGradient.Hint;
+ btnSShotPath.Hint := btnDefGradient.Hint;
+ btnChaotica.Hint := btnDefGradient.Hint;
+ btnFindDefaultSaveFile.Hint := btnDefGradient.Hint;
+ btnBrowseSound.Hint := btnDefGradient.Hint;
+ btnDefScript.Hint := btnDefGradient.Hint;
+ Panel37.Caption := TextByKey('common-width');
+ Panel38.Caption := TextByKey('common-height');
+ Panel31.Caption := TextByKey('common-filename');
+ Panel33.Caption := TextByKey('common-filename');
+ Panel44.Caption := TextByKey('common-filename');
+ pnlFilter.Caption := TextByKey('common-filterradius');
+ Panel35.Caption := TextByKey('common-filterradius');
+ pnlDensity.Caption := TextByKey('common-density');
+ Panel34.Caption := TextByKey('common-density');
+ pnlOSample.Caption := TextByKey('common-oversample');
+ Panel36.Caption := TextByKey('common-oversample');
+ pnlGamma.Caption := TextByKey('common-gamma');
+ pnlBright.Caption := TextByKey('common-brightness');
+ pnlVibrancy.Caption := TextByKey('common-vibrancy');
+ pnlContrast.Caption := TextByKey('common-contrast'); // AV
+ pnlRelGamma.Caption := TextByKey('common-gammathreshold');
+ cbPNGTransparency.Items[1] := TextByKey('common-enabled');
+ cbPNGTransparency.Items[0] := TextByKey('common-disabled');
+ Panel13.Caption := TextByKey('common-minimum');
+ Panel15.Caption := TextByKey('common-minimum');
+ Panel21.Caption := TextByKey('common-minimum');
+ Panel22.Caption := TextByKey('common-minimum');
+ Panel25.Caption := TextByKey('common-minimum');
+ Panel26.Caption := TextByKey('common-minimum');
+ Panel14.Caption := TextByKey('common-maximum');
+ Panel16.Caption := TextByKey('common-maximum');
+ Panel20.Caption := TextByKey('common-maximum');
+ Panel23.Caption := TextByKey('common-maximum');
+ Panel24.Caption := TextByKey('common-maximum');
+ Panel27.Caption := TextByKey('common-maximum');
+ Label49.Caption := TextByKey('common-minutes');
+ Panel47.Caption := TextByKey('common-filename');
+ Panel50.Caption := TextByKey('options-tab-general-pluginpath');
+ //Panel49.Caption := TextByKey('common-filename') + ' (x64)';
+ Panel48.Caption := TextByKey('options-tab-editor-previewtransparency');
+ pnlScreenShot.Caption := TextByKey('options-tab-environment-screenshots');
+ pnlScriptFile.Caption := TextByKey('options-tab-environment-defaultscript');
+ cbC64.Caption := TextByKey('options-tab-environment-usex64chaotica');
+ chkEnableEditorPreview.Caption := TextByKey('options-tab-editor-enablepreview');
+ chkAutoSaveXML.Caption := TextByKey('options-tab-general-autosavepasted');
+ self.Caption := TextByKey('options-title');
+ GeneralPage.Caption := TextByKey('options-tab-general-title');
+ Panel46.Caption := TextByKey('options-tab-general-language');
+ pnlMultithreading.Caption := TextByKey('options-tab-general-multithreading');
+ cbNrTheads.Items[0] := TextByKey('options-tab-general-multithreading-off');
+ //pnlBufferDepth.Caption := TextByKey('options-tab-general-bufferdepth');
+ pnlJPEGQuality.Caption := TextByKey('options-tab-general-jpegquality');
+ pnlPNGTransparency.Caption := TextByKey('options-tab-general-pngtransparency');
+ chkShowRenderStats.Caption := TextByKey('options-tab-general-showextendedstatistics');
+ chkShowRenderImage.Caption := TextByKey('options-tab-general-showrenderimage');
+ chkConfirmDel.Caption := TextByKey('options-tab-general-confirmdelete');
+ chkConfirmExit.Caption := TextByKey('options-tab-general-confirmexit');
+ chkconfirmStopRender.Caption := TextByKey('options-tab-general-confirmrenderstop');
+ chkConfirmClearScript.Caption := TextByKey('options-tab-general-confirmclearscript');
+ chkOldPaletteFormat.Caption := TextByKey('options-tab-general-oldgradientformat');
+ cbUseTemplate.Caption := TextByKey('options-tab-general-alwaysblankflame');
+ chkEqualStripes.Caption := TextByKey('options-tab-gradient-equalstripes');
+ cbMissingplugin.Caption := TextByKey('options-tab-general-enablemissingpluginswarning');
+ cbEmbedThumbs.Caption := TextByKey('options-tab-general-enablethumbnailembedding');
+ chkEngLayout.Caption := TextByKey('options-tab-general-setenglayout');
+ chkRandomTemplates.Caption := TextByKey('options-tab-general-templaterandcolor');
+ chkApplyFlatten.Caption := TextByKey('options-tab-general-autoflatten');
+ rgRotationMode.Caption := TextByKey('options-tab-general-rotatemode');
+ rgRotationMode.Items[0] := TextByKey('options-tab-general-rotateimage');
+ rgRotationMode.Items[1] := TextByKey('options-tab-general-rotateframe');
+ rgZoomingMode.Caption := TextByKey('options-tab-general-zoommode');
+ rgZoomingMode.Items[0] := TextByKey('options-tab-general-preservequality');
+ rgZoomingMode.Items[1] := TextByKey('options-tab-general-preservespeed');
+ rgEnumMode.Caption := TextByKey('options-tab-general-enummode');
+ rgEnumMode.Items[0] := TextByKey('options-tab-general-enum0');
+ rgEnumMode.Items[1] := TextByKey('options-tab-general-enum1');
+ grpGuidelines.Caption := TextByKey('options-tab-general-guides');
+ cbGl.Caption := TextByKey('options-tab-general-enableguides');
+ pnlCenter.Caption := TextByKey('options-tab-general-guidecentercolor');
+ pnlThirds.Caption := TextByKey('options-tab-general-guidethirdscolor');
+ pnlGoldenRatio.Caption := TextByKey('options-tab-general-guidegoldenratiocolor');
+ EditorPage.Caption := TextByKey('options-tab-editor-title');
+ GroupBox1.Caption := TextByKey('options-tab-editor-editorgraph');
+ GroupBox21.Caption := TextByKey('options-tab-editor-editordefaults');
+ chkUseXFormColor.Caption := TextByKey('options-tab-editor-usetransformcolor');
+ chkHelpers.Caption := TextByKey('options-tab-editor-helperlines');
+ chkShowAllXForms.Caption := TextByKey('options-tab-editor-alwaysshowbothtransformtypes');
+ chkResetCoefs.Caption := TextByKey('options-tab-editor-resetcoefs'); // AV
+ chkResetLinear.Caption := TextByKey('options-tab-editor-resetlinear'); // AV
+ pnlBackground.Caption := TextByKey('options-tab-editor-backgroundcolor');
+ pnlGrid.Caption := TextByKey('options-tab-editor-gridcolors');
+ pnlReferenceC.Caption := TextByKey('options-tab-editor-referencecolor');
+ pnlHelpers.Caption := TextByKey('options-tab-editor-helpercolors');
+ pnlReflection.Caption := TextByKey('editor-tab-triangle-reflection');
+ chkExtendedEdit.Caption := TextByKey('options-tab-editor-extendededit');
+ chkAxisLock.Caption := TextByKey('options-tab-editor-locktransformaxes');
+ chkXaosRebuild.Caption := TextByKey('options-tab-editor-rebuildxaoslinks');
+ DisplayPage.Caption := TextByKey('options-tab-display-title');
+ grpRendering.Caption := TextByKey('options-tab-display-rendering');
+ GroupBox2.Caption := TextByKey('options-tab-display-previewdensity');
+ GroupBox20.Caption := TextByKey('options-tab-display-mainpreview');
+ chkExtendMainPreview.Caption := TextByKey('options-tab-display-extendpreviewbuffer');
+ pnlExtension.Caption := TextByKey('options-tab-display-extenspreviewbufferlabel');
+ chkShowTransparency.Caption := TextByKey('options-tab-display-showtransparency');
+ chkUseSmallThumbs.Caption := TextByKey('options-tab-display-usesmallthumbs');
+ RandomPage.Caption := TextByKey('options-tab-random-title');
+ gpNumberOfTransforms.Caption := TextByKey('options-tab-random-numberoftransforms');
+ gpMutationTransforms.Caption := TextByKey('options-tab-random-mutationtransforms');
+ gpFlameTitlePrefix.Caption := TextByKey('options-tab-random-randombatch');
+ gpForcedSymmetry.Caption := TextByKey('options-tab-random-forcedsymmetry');
+ Panel11.Caption := TextByKey('options-tab-random-batchsize');
+ Panel12.Caption := TextByKey('options-tab-random-titleprefix');
+ chkKeepBackground.Caption := TextByKey('options-tab-random-keepbackground');
+ Panel17.Caption := TextByKey('options-tab-random-symtype');
+ Panel18.Caption := TextByKey('options-tab-random-symorder');
+ Panel19.Caption := TextByKey('options-tab-random-symlimit');
+ cmbSymType.Items[0] := TextByKey('options-tab-random-type-none');
+ cmbSymType.Items[1] := TextByKey('options-tab-random-type-bilateral');
+ cmbSymType.Items[2] := TextByKey('options-tab-random-type-rotational');
+ cmbSymType.Items[3] := TextByKey('options-tab-random-type-dihedral');
+ grpGradient.Caption := TextByKey('options-tab-random-onrandom');
+ grpGradient.Items[0] := TextByKey('options-tab-random-userandom');
+ grpGradient.Items[1] := TextByKey('options-tab-random-usedefault');
+ grpGradient.Items[2] := TextByKey('options-tab-random-usecurrent');
+ grpGradient.Items[3] := TextByKey('options-tab-random-randomcalculated');
+ grpGradient.Items[4] := TextByKey('options-tab-random-randomfromfile');
+ rgColorBlend.Caption := TextByKey('options-tab-gradient-colorblend');
+ rgColorBlend.Items[0] := TextByKey('options-tab-gradient-rgbblend');
+ rgColorBlend.Items[1] := TextByKey('options-tab-gradient-hsvblend');
+ rgColorBlend.Items[2] := TextByKey('options-tab-gradient-noblend');
+ GroupBox16.Caption := TextByKey('options-tab-random-filetouse');
+ VariationsPage.Caption := TextByKey('options-tab-variations-title');
+ tabRandomVars.Caption := TextByKey('options-tab-variations-random'); // AV
+ tabFavouriteVars.Caption := TextByKey('options-tab-variations-faves'); // AV
+ btnSetAll.Caption := TextByKey('options-tab-variations-setall');
+ btnClearAll.Caption := TextByKey('options-tab-variations-clearall');
+ btnInvert.Caption := TextByKey('options-tab-variations-invert');
+ GradientPage.Caption := TextByKey('options-tab-gradient-title');
+ GroupBox23.Caption := TextByKey('options-tab-gradient-numberofnodes');
+ GroupBox13.Caption := TextByKey('options-tab-gradient-smoothpalette');
+ GroupBox17.Caption := TextByKey('options-tab-gradient-huebetween');
+ GroupBox18.Caption := TextByKey('options-tab-gradient-satbetween');
+ GroupBox22.Caption := TextByKey('options-tab-gradient-lumbetween');
+ Panel28.Caption := TextByKey('options-tab-gradient-numtries');
+ Panel29.Caption := TextByKey('options-tab-gradient-trylength');
+ UPRPage.Caption := TextByKey('options-tab-upr-title');
+ GroupBox9.Caption := TextByKey('options-tab-upr-paramdefaults');
+ GroupBox4.Caption := TextByKey('options-tab-upr-coloralgorithm');
+ GroupBox11.Caption := TextByKey('options-tab-upr-uprsize');
+ GroupBox5.Caption := TextByKey('options-tab-upr-formula');
+ Panel30.Caption := TextByKey('options-tab-upr-identifier');
+ Panel32.Caption := TextByKey('options-tab-upr-identifier');
+ chkAdjustDensity.Caption := TextByKey('options-tab-upr-adjustdensity');
+ PathsPage.Caption := TextByKey('options-tab-environment-title');
+ Panel39.Caption := TextByKey('options-tab-environment-defaultparams');
+ Panel40.Caption := TextByKey('options-tab-environment-smoothpalette');
+ Panel41.Caption := TextByKey('options-tab-environment-functionlib');
+ //Panel42.Caption := TextByKey('options-tab-environment-exportrenderer');
+ Panel43.Caption := TextByKey('options-tab-environment-helpfile');
+ chkRememberLastOpen.Caption := TextByKey('options-tab-environment-rememberlastopen');
+ cbEnableAutosave.Caption := TextByKey('options-tab-environment-autosave');
+ panel45.Caption := TextByKey('options-tab-environment-savefrequency');
+ //cbSinglePrecision.Caption := TextByKey('options-tab-general-singleprecision');
+ grpEditorColors.Caption := TextByKey('editor-tab-color-title');
+ GroupBox15.Caption := TextByKey('options-tab-general-onrendercomplete');
+ chkPlaySound.Caption := TextByKey('options-tab-general-playsound');
+ btnPlay.Hint := TextByKey('options-tab-general-playhint');
+ Label44.Caption := TextByKey('options-tab-general-soundfile');
+ pnlFuse.Caption := TextByKey('options-tab-display-fuse');
+ pnHexTile.Caption := TextByKey('main-menu-flame-hextile');
+ pnRTile.Caption := TextByKey('main-menu-flame-rhombustile');
+ pnSTile.Caption := TextByKey('main-menu-flame-squaretile');
+ GroupBox7.Caption := TextByKey('options-tab-display-tileradius');
+ pnlRandBackground.Caption := TextByKey('options-tab-editor-backgroundcolor');
+
+ for i:= 0 to NRVAR - 1 do begin
+ clbVarEnabled.Items.Add(varnames(i));
+ clbVarFavourite.Items.Add(varnames(i)); // AV
+ end;
+
+ if not CheckX64 then // AV
+ begin
+ cbc64.Enabled := false;
+ UseX64IfPossible := false;
+ end;
+
+ Tabs.ActivePageIndex := 0; // AV
+ VarsPages.ActivePageIndex := 0; // AV
+end;
+
+procedure TOptionsForm.pnlCenterLineClick(Sender: TObject);
+begin
+ if (not cbGL.Checked) then exit;
+ AdjustForm.ColorDialog.Color := pnlCenterLine.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlCenterLine.Color := AdjustForm.ColorDialog.Color;
+ LineCenterColor := Integer(pnlCenterLine.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.pnlThirdsLineClick(Sender: TObject);
+begin
+ if (not cbGL.Checked) then exit;
+ AdjustForm.ColorDialog.Color := pnlThirdsLine.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlThirdsLine.Color := AdjustForm.ColorDialog.Color;
+ LineThirdsColor := Integer(pnlThirdsLine.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.RenderPanelsDblClick(Sender: TObject);
+begin // AV: reset values
+ case TPanel(Sender).Tag of
+ 0: txtSampleDensity.Text := '5';
+ 1: txtGamma.Text := '4';
+ 2: txtBrightness.Text := '4';
+ 3: txtVibrancy.Text := '1';
+ 4: txtGammaThreshold.Text := '0.01';
+ 5: txtOversample.Text := '1';
+ 6: txtFilterRadius.Text := '0.2';
+ 7: txtFuse.Value := 15;
+ 8: txtLowQuality.Text := '0.1';
+ 9: txtMediumQuality.Text := '1';
+ 10: txtHighQuality.Text := '5';
+ 11: txtContrast.Text := '1';
+ end;
+end;
+
+procedure TOptionsForm.pnlGRLineClick(Sender: TObject);
+begin
+ if (not cbGL.Checked) then exit;
+ AdjustForm.ColorDialog.Color := pnlGRLine.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlGRLine.Color := AdjustForm.ColorDialog.Color;
+ LineGRColor := Integer(pnlGRLine.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.pnlBackColorClick(Sender: TObject);
+begin
+ AdjustForm.ColorDialog.Color := pnlBackColor.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlBackColor.Color := AdjustForm.ColorDialog.Color;
+ EditorBkgColor := Integer(pnlBackColor.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.pnlRandBackColorClick(Sender: TObject);
+begin
+ AdjustForm.ColorDialog.Color := pnlRandBackColor.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlRandBackColor.Color := AdjustForm.ColorDialog.Color;
+ RandBackColor := Integer(pnlRandBackColor.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.pnlReferenceClick(Sender: TObject);
+begin
+ AdjustForm.ColorDialog.Color := pnlReference.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlReference.Color := AdjustForm.ColorDialog.Color;
+ ReferenceTriangleColor := Integer(pnlReference.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.pnlReflectionCClick(Sender: TObject);
+begin
+ AdjustForm.ColorDialog.Color := pnlReflectionC.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlReflectionC.Color := AdjustForm.ColorDialog.Color;
+ FlipColor := Integer(pnlReflectionC.Color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.pnlGridColor1Click(Sender: TObject);
+begin
+ AdjustForm.ColorDialog.Color := pnlGridColor1.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlGridColor1.Color := AdjustForm.ColorDialog.Color;
+ GridColor1 := Integer(pnlGridColor1.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.pnlGridColor2Click(Sender: TObject);
+begin
+ AdjustForm.ColorDialog.Color := pnlGridColor2.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlGridColor2.Color := AdjustForm.ColorDialog.Color;
+ GridColor2 := Integer(pnlGridColor2.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.pnlHelpersColorClick(Sender: TObject);
+begin
+ AdjustForm.ColorDialog.Color := pnlHelpersColor.Color;
+ if AdjustForm.ColorDialog.Execute then
+ begin
+ pnlHelpersColor.Color := AdjustForm.ColorDialog.Color;
+ HelpersColor := Integer(pnlHelpersColor.color);
+ UpdateShapeColors;
+ end;
+end;
+
+procedure TOptionsForm.btnBrowseSoundClick(Sender: TObject);
+var
+ fn:string;
+begin
+ if RenderCompleteSoundFile = '' then // AV
+ OpenDialog.InitialDir := GetEnvironmentVariable('WINDIR') + '\Media\'
+ else
+ OpenDialog.InitialDir := ExtractFilePath(RenderCompleteSoundFile);
+ OpenDialog.Filter := 'Waveform files (*.wav)|*.wav';
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '.wav', OpenDialog.Filter, OpenDialog.InitialDir,
+ TextByKey('common-openwav'), fn, true, false, false, true) then
+ begin
+ txtSoundFile.text := fn;
+ end;
+end;
+
+procedure TOptionsForm.btnPlayClick(Sender: TObject);
+begin
+ if txtSoundFile.text <> '' then
+ sndPlaySound(PChar(txtSoundFile.text), SND_FILENAME or SND_ASYNC)
+ else
+ sndPlaySound(pchar(SND_ALIAS_SYSTEMASTERISK), SND_ALIAS_ID or SND_NOSTOP or SND_ASYNC);
+end;
+
+procedure TOptionsForm.btnPluginPathClick(Sender: TObject);
+var
+ TitleName : string;
+ lpItemID : PItemIDList;
+ BrowseInfo : TBrowseInfo;
+ DisplayName : array[0..MAX_PATH] of char;
+ TempPath : array[0..MAX_PATH] of char;
+begin
+ FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
+ BrowseInfo.hwndOwner := self.Handle;
+ BrowseInfo.pszDisplayName := @DisplayName;
+ TitleName := TextByKey('options-selectplugins');
+ BrowseInfo.lpszTitle := PChar(TitleName);
+ BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
+ lpItemID := SHBrowseForFolder(BrowseInfo);
+ if lpItemId <> nil then begin
+ SHGetPathFromIDList(lpItemID, TempPath);
+ txtPluginFolder.Text := TempPath;
+ GlobalFreePtr(lpItemID);
+ end;
+end;
+
+procedure TOptionsForm.btnGradientsFileClick(Sender: TObject);
+var
+ fn:string;
+begin
+ OpenDialog.Filter := TextByKey('common-filter-gradientfiles') + '|*.gradient;*.ugr|' + TextBykey('common-filter-allfiles') + '|*.*';
+ OpenDialog.InitialDir := ExtractFilePath(randGradientFile);
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '.ugr', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ txtGradientsFile.text := fn;
+ end;
+end;
+
+procedure TOptionsForm.shBackgroundMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ pnlBackColorClick(Sender);
+end;
+
+procedure TOptionsForm.shCenterLineMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ pnlCenterLineClick(Sender);
+end;
+
+procedure TOptionsForm.shThirdsLineMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ pnlThirdsLineClick(Sender);
+end;
+
+procedure TOptionsForm.shGRLineMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ pnlGRLineClick(Sender);
+end;
+
+procedure TOptionsForm.shGC1MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ pnlGridColor1Click(Sender);
+end;
+
+procedure TOptionsForm.shGC2MouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ pnlGridColor2Click(Sender);
+end;
+
+procedure TOptionsForm.shRandBackColorMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ pnlRandBackColorClick(Sender);
+end;
+
+procedure TOptionsForm.shReflectionMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ pnlReflectionCClick(Sender);
+end;
+
+procedure TOptionsForm.shRefMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ pnlReferenceClick(Sender);
+end;
+
+procedure TOptionsForm.shHelpersMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ pnlHelpersColorClick(Sender);
+end;
+
+procedure TOptionsForm.chkRememberLastOpenClick(Sender: TObject);
+begin
+ if chkRememberLastOpen.Checked then begin
+ txtDefParameterFile.Enabled := false;
+ txtDefParameterFile.Text := ''; //LastOpenFile;
+ btnDefGradient.Enabled := false;
+ end else begin
+ txtDefParameterFile.Enabled := true;
+ btnDefGradient.Enabled := true;
+ end;
+
+ Panel39.Enabled := txtDefParameterFile.Enabled;
+
+ if (Panel39.Enabled) then Panel39.Font.Color := clWindowText
+ else Panel39.Font.Color := clGrayText;
+end;
+
+procedure TOptionsForm.btnFindDefaultSaveFileClick(Sender: TObject);
+var fn:string;
+begin
+ OpenDialog.Filter := TextByKey('common-filter-flamefiles') + '|*.flame|' + TextBykey('common-filter-allfiles') + '|*.*';
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '.flame', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, false, false, false, false) then
+ //if OpenDialog.Execute then
+ begin
+ txtDefaultSaveFile.text := fn;
+ end;
+end;
+
+procedure TOptionsForm.cbEnableAutosaveClick(Sender: TObject);
+begin
+ Panel44.Enabled := cbEnableAutoSave.Checked;
+ Panel45.Enabled := cbEnableAutoSave.Checked;
+ Label49.Enabled := cbEnableAutoSave.Checked;
+ if (Panel44.Enabled) then Panel44.Font.Color := clWindowText
+ else Panel44.Font.Color := clGrayText;
+ if (Panel45.Enabled) then Panel45.Font.Color := clWindowText
+ else Panel45.Font.Color := clGrayText;
+ txtDefaultSaveFile.Enabled := cbEnableAutoSave.Checked;
+ btnFindDefaultSaveFile.Enabled := cbEnableAutoSave.Checked;
+ cbFreq.Enabled := cbEnableAutoSave.Checked;
+end;
+
+procedure TOptionsForm.btnHelpClick(Sender: TObject);
+var
+ fn:string;
+begin
+ OpenDialog.Filter := TextBykey('common-filter-allfiles') + '|*.*';
+ OpenDialog.InitialDir := ExtractFilePath(helpPath);
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ txtHelp.text := fn;
+ end;
+end;
+
+procedure TOptionsForm.btnInvertClick(Sender: TObject);
+var
+ i: integer;
+begin
+ if VarsPages.ActivePageIndex = 0 then // AV
+ for i := 0 to NRVAR - 1 do
+ clbVarEnabled.Checked[i] := not clbVarEnabled.Checked[i]
+ else // AV
+ for i := 0 to NRVAR - 1 do
+ clbVarFavourite.Checked[i] := not clbVarFavourite.Checked[i];
+end;
+
+procedure TOptionsForm.cbGLClick(Sender: TObject);
+begin
+ pnlCenter.Enabled := cbGL.Checked;
+ pnlThirds.Enabled := cbGL.Checked;
+ pnlGoldenRatio.Enabled := cbGL.Checked;
+
+ if (pnlCenter.Enabled) then pnlCenter.Font.Color := clWindowText
+ else pnlCenter.Font.Color := clGrayText;
+
+ if (pnlThirds.Enabled) then pnlThirds.Font.Color := clWindowText
+ else pnlThirds.Font.Color := clGrayText;
+
+ if (pnlGoldenRatio.Enabled) then pnlGoldenRatio.Font.Color := clWindowText
+ else pnlGoldenRatio.Font.Color := clGrayText;
+end;
+
+procedure TOptionsForm.SpeedButton1Click(Sender: TObject);
+var fn, fn2, s1, s2:string; i : integer;
+begin
+ OpenDialog.Filter := 'Extensible Markup Language Files (*.xml)|*.xml';
+ OpenDialog.InitialDir := ExtractFilePath(helpPath);
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ fn2 := ExtractFilePath(Application.ExeName) + 'Languages\' + ExtractFileName(fn);
+ LanguageInfo(fn, s1, s2);
+ if s1 <> '' then begin
+ if not DirectoryExists(ExtractFilePath(Application.ExeName) + 'Languages\') then
+ CreateDirectory(PChar(ExtractFilePath(Application.ExeName) + 'Languages\'), nil);
+ if (lowercase(ExtractFilePath(fn)) <> lowercase(ExtractFilePath(Application.ExeName) + 'Languages\')) then
+ CopyFile(PChar(fn), PChar(fn2), False);
+ AvailableLanguages.Add(fn2);
+ i := AvailableLanguages.Count - 1;
+ if (s2 <> '') then
+ s1 := s2 + ' (' + s1 + ')';
+ txtLanguageFile.Items.Add(s1);
+ txtLanguageFile.ItemIndex := txtLanguageFile.Items.Count - 1;
+ end else begin
+ Application.MessageBox(PChar(TextByKey('common-invalidformat')), PChar('Apophysis'), MB_ICONERROR);
+ end;
+ end;
+end;
+
+procedure TOptionsForm.btnChaoticaClick(Sender: TObject);
+var fn: string;
+begin
+
+ // new b. 1550
+ fn := ChaoticaPath;
+ if SelectDirectory(fn, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then
+ begin
+ txtChaotica.Text := fn;
+ if not FileExists(fn + '\chaotica.exe') then
+ begin
+ MessageBox(0,
+ PCHAR('Could not find "' + fn + '\chaotica.exe" - invalid Chaotica 0.45+ path'),
+ PCHAR('Apophysis AV'), MB_ICONHAND or MB_OK);
+ txtChaotica.Text := ChaoticaPath;
+ fn := ChaoticaPath;
+ end;
+ end;
+ {OpenDialog.Filter := TextBykey('common-filter-allfiles') + '|*.*';
+ if sender = TSpeedButton(btnChaotica) then
+ OpenDialog.InitialDir := ExtractFilePath(ChaoticaPath)
+ else
+ OpenDialog.InitialDir := ExtractFilePath(ChaoticaPath64);
+ OpenDialog.FileName := '';
+ if OpenSaveFileDialog(OptionsForm, '', OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+ //if OpenDialog.Execute then
+ begin
+ if sender = TSpeedButton(btnChaotica) then txtChaotica.text := fn
+ else txtChaotica64.text := fn;
+ end; }
+end;
+
+procedure TOptionsForm.chkEnableEditorPreviewClick(Sender: TObject);
+begin
+ Panel48.Enabled := chkEnableEditorPreview.Checked;
+ if chkEnableEditorPreview.Checked then
+ Panel48.Font.Color := clWindowText
+ else Panel48.Font.Color := clGrayText;
+ tbEPTransparency.Enabled := chkEnableEditorPreview.Checked;
+end;
+
+procedure TOptionsForm.chkKeepBackgroundClick(Sender: TObject);
+begin
+ pnlRandBackGround.Enabled := not chkKeepBackground.Checked;
+ pnlRandBackColor.Enabled := not chkKeepBackground.Checked;
+
+ if (pnlRandBackGround.Enabled) then
+ pnlRandBackGround.Font.Color := clWindowText
+ else
+ pnlRandBackGround.Font.Color := clGrayText;
+end;
+
+end.
+
diff --git a/Forms/Preview.dfm b/Forms/Preview.dfm
new file mode 100644
index 0000000..96a8311
--- /dev/null
+++ b/Forms/Preview.dfm
@@ -0,0 +1,66 @@
+object PreviewForm: TPreviewForm
+ Left = 541
+ Top = 357
+ BorderIcons = [biSystemMenu, biMinimize]
+ BorderStyle = bsSizeToolWin
+ Caption = 'Preview'
+ ClientHeight = 147
+ ClientWidth = 196
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ PopupMenu = PreviewPopup
+ Scaled = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnKeyPress = FormKeyPress
+ PixelsPerInch = 96
+ TextHeight = 13
+ object BackPanel: TPanel
+ Left = 0
+ Top = 0
+ Width = 196
+ Height = 147
+ Align = alClient
+ BevelInner = bvLowered
+ BevelOuter = bvLowered
+ Color = clBlack
+ TabOrder = 0
+ object Image: TImage
+ Left = 2
+ Top = 2
+ Width = 192
+ Height = 143
+ Align = alClient
+ AutoSize = True
+ Stretch = True
+ ExplicitWidth = 200
+ ExplicitHeight = 153
+ end
+ end
+ object PreviewPopup: TPopupMenu
+ Left = 72
+ Top = 40
+ object MakeScreenShot: TMenuItem
+ Caption = 'Make a screenshot of the window'
+ ShortCut = 16471
+ OnClick = MakeScreenShotClick
+ end
+ object KeepFrame: TMenuItem
+ AutoCheck = True
+ Caption = 'Keep the window frame'
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object PreviewPause: TMenuItem
+ Caption = 'Pause the preview'
+ OnClick = PreviewPauseClick
+ end
+ end
+end
diff --git a/Forms/Preview.pas b/Forms/Preview.pas
new file mode 100644
index 0000000..2f1b3d1
--- /dev/null
+++ b/Forms/Preview.pas
@@ -0,0 +1,151 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit Preview;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ExtCtrls, ControlPoint, RenderingInterface, Translation, Vcl.Menus,
+ Vcl.Imaging.PNGimage;
+
+type
+ TPreviewForm = class(TForm)
+ BackPanel: TPanel;
+ Image: TImage;
+ PreviewPopup: TPopupMenu;
+ MakeScreenShot: TMenuItem;
+ KeepFrame: TMenuItem;
+ N1: TMenuItem;
+ PreviewPause: TMenuItem;
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure FormKeyPress(Sender: TObject; var Key: Char);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure MakeScreenShotClick(Sender: TObject); // AV
+ procedure PreviewPauseClick(Sender: TObject); // AV
+ private
+ public
+ cp: TControlPoint;
+ Render: TRenderer;
+ procedure DrawFlame;
+ end;
+
+var
+ PreviewForm: TPreviewForm;
+
+implementation
+
+uses Main, Global, ScriptForm;
+
+{$R *.DFM}
+
+procedure TPreviewForm.DrawFlame;
+begin
+ Render.Stop;
+ // AV: this is already done by cp.AdjustScale
+ {
+ cp.width := Image.width;
+ cp.Height := Image.Height;
+ }
+ Render.SetCP(cp);
+ Render.Render;
+ Image.Picture.Bitmap.Assign(Render.GetImage);
+ Application.ProcessMessages;
+end;
+
+
+procedure TPreviewForm.FormCreate(Sender: TObject);
+begin
+ self.Caption := TextByKey('preview-title');
+ MakeScreenShot.Caption := TextByKey('main-menu-screenshot');
+ KeepFrame.Caption := TextByKey('preview-keepframe');
+ cp := TControlPoint.Create;
+ Render := TRenderer.Create;
+ PreviewPause.Caption := TextByKey('preview-pause');
+end;
+
+procedure TPreviewForm.FormDestroy(Sender: TObject);
+begin
+ Render.Free;
+ cp.Free;
+end;
+
+procedure TPreviewForm.FormKeyPress(Sender: TObject; var Key: Char);
+begin
+ if ScriptEditor.btnPause.Down then ScriptEditor.btnPause.Click; // AV
+ ScriptEditor.Stopped := True;
+end;
+
+procedure TPreviewForm.MakeScreenShotClick(Sender: TObject);
+var
+ s: string;
+ pic: TPNGObject;
+begin
+ if not DirectoryExists(ScreenShotPath) then
+ begin
+ CreateDir(AppPath + 'ScreenShots\');
+ ScreenShotPath := AppPath + 'ScreenShots\';
+ end;
+ s := ScreenShotPath + 'Apophysis Animation Preview' + FormatDateTime(' (MM-dd-yyyy hh-mm-ss)', Now) + '.bmp';
+ try
+ if KeepFrame.Checked then
+ GetFormScreenShot(s)
+ else
+ begin
+ try
+ pic := TPNGObject.Create;
+ try
+ pic.Assign(Image.Picture.Bitmap);
+ if cp.name = '' then cp.name := RemoveExt(s);
+ pic.AddtEXt('ApoFlame', AnsiString(Trim(MainForm.RetrieveXML(cp))));
+ s := ChangeFileExt(s, '.png');
+ pic.SaveToFile(s);
+ finally
+ pic.Free;
+ end;
+ except
+ Image.Picture.Bitmap.SaveToFile(s);
+ end;
+ end;
+ Application.MessageBox(PChar(Format(TextByKey('common-screenshot-saved'),
+ [ExtractFileName(s), ExtractFilePath(s)])), PChar('Apophysis AV'), MB_ICONINFORMATION);
+ except
+ Application.MessageBox(PChar(TextByKey('common-screenshot-error')), PChar('Apophysis AV'), MB_ICONERROR);
+ end;
+end;
+
+procedure TPreviewForm.PreviewPauseClick(Sender: TObject);
+begin
+ ScriptEditor.btnPause.Click;
+end;
+
+procedure TPreviewForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ if ScriptEditor.btnPause.Down then ScriptEditor.btnPause.Click; // AV
+ ScriptEditor.Stopped := True;
+end;
+
+end.
+
diff --git a/Forms/Save.dfm b/Forms/Save.dfm
new file mode 100644
index 0000000..93f012d
--- /dev/null
+++ b/Forms/Save.dfm
@@ -0,0 +1,153 @@
+object SaveForm: TSaveForm
+ Left = 434
+ Top = 432
+ BorderStyle = bsDialog
+ Caption = 'Save Parameters'
+ ClientHeight = 153
+ ClientWidth = 517
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -14
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poOwnerFormCenter
+ OnCreate = FormCreate
+ OnShow = FormShow
+ DesignSize = (
+ 517
+ 153)
+ PixelsPerInch = 120
+ TextHeight = 16
+ object btnDefGradient: TSpeedButton
+ Left = 480
+ Top = 9
+ Width = 30
+ Height = 29
+ Hint = 'Browse...'
+ Anchors = [akTop, akRight]
+ Flat = True
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -15
+ Font.Name = 'Arial'
+ Font.Style = [fsBold]
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
+ 607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
+ 18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
+ 88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
+ 8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
+ 805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
+ C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
+ 7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
+ EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
+ D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
+ 98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
+ FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
+ A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
+ A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
+ 93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
+ 9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
+ ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ ParentFont = False
+ ParentShowHint = False
+ ShowHint = True
+ OnClick = btnDefGradientClick
+ end
+ object btnSave: TButton
+ Left = 310
+ Top = 116
+ Width = 93
+ Height = 30
+ Anchors = [akRight, akBottom]
+ Caption = '&Save'
+ Default = True
+ TabOrder = 2
+ OnClick = btnSaveClick
+ end
+ object btnCancel: TButton
+ Left = 410
+ Top = 116
+ Width = 92
+ Height = 30
+ Anchors = [akRight, akBottom]
+ Caption = 'Cancel'
+ TabOrder = 3
+ OnClick = btnCancelClick
+ end
+ object pnlTarget: TPanel
+ Left = 10
+ Top = 10
+ Width = 124
+ Height = 26
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Destination'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ OnDblClick = pnlTargetDblClick
+ end
+ object pnlName: TPanel
+ Left = 10
+ Top = 39
+ Width = 124
+ Height = 26
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Name'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 5
+ end
+ object txtFilename: TEdit
+ Left = 128
+ Top = 10
+ Width = 353
+ Height = 24
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ Text = 'txtFilename'
+ end
+ object txtTitle: TEdit
+ Left = 128
+ Top = 39
+ Width = 383
+ Height = 24
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 1
+ Text = 'txtTitle'
+ end
+ object optUseOldFormat: TRadioButton
+ Left = 10
+ Top = 79
+ Width = 304
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Use classic flame format'
+ Checked = True
+ TabOrder = 6
+ TabStop = True
+ end
+ object optUseNewFormat: TRadioButton
+ Left = 10
+ Top = 101
+ Width = 304
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ Caption = 'Use new flame format'
+ Enabled = False
+ TabOrder = 7
+ end
+end
diff --git a/Forms/Save.pas b/Forms/Save.pas
new file mode 100644
index 0000000..4d5fcdb
--- /dev/null
+++ b/Forms/Save.pas
@@ -0,0 +1,243 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit Save;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, Buttons, ExtCtrls, Translation;
+
+type
+ ESaveType = (stSaveParameters, stSaveAllParameters, stSaveGradient, stExportUPR, stSaveTemplate);
+ TSaveForm = class(TForm)
+ txtFilename: TEdit;
+ txtTitle: TEdit;
+ btnSave: TButton;
+ btnCancel: TButton;
+ btnDefGradient: TSpeedButton;
+ pnlTarget: TPanel;
+ pnlName: TPanel;
+ optUseOldFormat: TRadioButton;
+ optUseNewFormat: TRadioButton;
+ procedure FormCreate(Sender: TObject);
+ procedure btnSaveClick(Sender: TObject);
+ procedure btnCancelClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure btnDefGradientClick(Sender: TObject);
+ procedure pnlTargetDblClick(Sender: TObject);
+ private
+ public
+ Title: string;
+ Filename: string;
+ SaveType : ESaveType;
+ end;
+
+var
+ SaveForm: TSaveForm;
+
+implementation
+
+uses Main, Global, cmap;
+
+{$R *.DFM}
+
+function EntryExists(En, Fl: string): boolean;
+{ Searches for existing identifier in parameter files }
+var
+ FStrings: TStringList;
+ i: integer;
+begin
+ Result := False;
+ if FileExists(Fl) then
+ begin
+ FStrings := TStringList.Create;
+ try
+ FStrings.LoadFromFile(Fl);
+ for i := 0 to FStrings.Count - 1 do
+ if Pos(LowerCase(En) + ' {', Lowercase(FStrings[i])) = 1 then
+ Result := True;
+ finally
+ FStrings.Free;
+ end
+ end
+ else
+ Result := False;
+end;
+
+function SaveTypeTextKey(st : ESaveType) : string;
+begin
+ case st of
+ stSaveParameters: Result := 'save-type-parameters';
+ stSaveAllParameters: Result := 'save-type-allparameters';
+ stSaveGradient: Result := 'save-type-gradient';
+ stExportUPR: Result := 'save-type-exportupr';
+ stSaveTemplate: Result := 'save-type-template';
+ end;
+end;
+
+function SaveDefaultExt(st : ESaveType) : string;
+begin
+ case st of
+ stSaveParameters: Result := 'flame';
+ stSaveAllParameters: Result := 'flame';
+ stSaveGradient: Result := 'gradient';
+ stExportUPR: Result := 'upr';
+ stSaveTemplate: Result := 'template';
+ end;
+end;
+
+function SaveFilter(st : ESaveType): string;
+begin
+ case st of
+ stSaveParameters: Result := Format('%s|*.flame;*.xml|%s|*.*',
+ [TextByKey('common-filter-flamefiles'), TextByKey('common-filter-allfiles')]);
+ stSaveAllParameters: Result := Format('%s|*.flame;*.xml|%s|*.*',
+ [TextByKey('common-filter-flamefiles'), TextByKey('common-filter-allfiles')]);
+ stSaveGradient: Result := Format('%s|*.gradient;*.ugr|%s|*.*',
+ [TextByKey('common-filter-gradientfiles'), TextByKey('common-filter-allfiles')]);
+ stExportUPR: Result := Format('%s|*.upr|%s|*.*',
+ [TextByKey('common-filter-uprfiles'), TextByKey('common-filter-allfiles')]);
+ stSaveTemplate: Result := Format('%s|*.template;*.flame',
+ [TextByKey('common-filter-templatefiles')]);
+ end;
+
+end;
+
+procedure TSaveForm.btnSaveClick(Sender: TObject);
+var
+ t, f: string;
+ check, onestr: boolean;
+begin
+ t := Trim(txtTitle.Text);
+ f := Trim(txtFilename.Text);
+
+ if ((t = '') and txtTitle.Enabled) then
+ begin
+ Application.MessageBox(PChar(TextByKey('save-status-notitle')), 'Apophysis', 48);
+ Exit;
+ end;
+ if f = '' then
+ begin
+ Application.MessageBox(PChar(TextByKey('save-status-invalidfilename')), 'Apophysis', 48);
+ Exit;
+ end;
+ if ExtractFileExt(f) = '' then
+ begin
+ Application.MessageBox(PChar(TextByKey('save-status-invalidfilename')), 'Apophysis', 48);
+ Exit;
+ end;
+
+ if (SaveType = stSaveParameters) or (SaveType = stSaveTemplate) then // AV
+ begin
+ check := XMLEntryExists(t, f);
+ onestr := false;
+ end
+ else if SaveType = stSaveAllParameters then
+ begin
+ onestr := true;
+ check := FileExists(f);
+ end
+ else
+ begin
+ onestr := false;
+ t := CleanIdentifier(t);
+ check := EntryExists(t, f);
+ end;
+
+ if check then begin if onestr then begin
+ if Application.MessageBox(PChar(Format(TextByKey('save-status-alreadyexists2'), [f])),
+ 'Apophysis', 52) = ID_NO then exit;
+ end else begin
+ if Application.MessageBox(PChar(Format(TextByKey('save-status-alreadyexists'), [t, f])),
+ 'Apophysis', 52) = ID_NO then exit;
+ end end;
+
+ if (t = '*') then t := '';
+ Title := t;
+ Filename := f;
+ ModalResult := mrOK;
+end;
+
+procedure TSaveForm.btnCancelClick(Sender: TObject);
+begin
+ ModalResult := mrCancel;
+end;
+
+procedure TSaveForm.FormShow(Sender: TObject);
+begin
+ txtFilename.Text := Filename;
+ txtTitle.Text := Title;
+ //btnSave.SetFocus;
+ self.Caption := TextByKey(SaveTypeTextKey(SaveType));
+ {if (SaveType = stSaveParameters) or (SaveType = stSaveAllParameters) then
+ self.Height := 160
+ else self.Height := 120; }
+ if (SaveType = stSaveGradient) then // AV
+ pnlName.Caption := TextByKey('save-namepal')
+ else pnlName.Caption := TextByKey('save-name');
+
+ if (SaveType = stSaveAllParameters) then txtTitle.Text := '';
+ txtTitle.Enabled := (SaveType <> stSaveAllParameters);
+ if (not txtTitle.Enabled) then pnlName.Font.Color := clGrayText
+ else pnlName.Font.Color := clWindowText;
+
+ optUseOldFormat.Visible := (SaveType = stSaveParameters) or (SaveType = stSaveAllParameters);
+ optUseNewFormat.Visible := (SaveType = stSaveParameters) or (SaveType = stSaveAllParameters);
+
+ txtFileName.ReadOnly := (SaveType = stSaveTemplate); // AV
+end;
+
+procedure TSaveForm.pnlTargetDblClick(Sender: TObject);
+begin
+ if (SaveType = stSaveParameters) then // AV
+ txtFileName.Text := OpenFile;
+end;
+
+procedure TSaveForm.btnDefGradientClick(Sender: TObject);
+var
+ fn:string;
+begin
+ if OpenSaveFileDialog(self, SaveDefaultExt(SaveType), SaveFilter(SaveType),
+ ExtractFilePath(txtFilename.Text), TextByKey('common-browse'), fn, false,
+ false, false, false) then
+ if (SaveType <> stSaveTemplate) then
+ txtFileName.Text := fn
+ else
+ txtFileName.Text := AppPath + 'Templates\' + ExtractFileName(fn); // AV
+end;
+
+procedure TSaveForm.FormCreate(Sender: TObject);
+begin
+ btnCancel.Caption := TextByKey('common-cancel');
+ btnSave.Caption := TextByKey('common-ok');
+ btnDefGradient.Hint := TextByKey('common-browse');
+ pnlTarget.Caption := TextByKey('common-destination');
+ //pnlName.Caption := TextByKey('save-name');
+ optUseOldFormat.Caption := TextByKey('save-oldformat');
+ optUseNewFormat.Caption := TextByKey('save-newformat');
+end;
+
+end.
+
diff --git a/Forms/SavePreset.dfm b/Forms/SavePreset.dfm
new file mode 100644
index 0000000..5f28a48
--- /dev/null
+++ b/Forms/SavePreset.dfm
@@ -0,0 +1,63 @@
+object SavePresetForm: TSavePresetForm
+ Left = 295
+ Top = 331
+ BorderStyle = bsDialog
+ Caption = 'Save Preset'
+ ClientHeight = 66
+ ClientWidth = 349
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ DesignSize = (
+ 349
+ 66)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Button1: TButton
+ Left = 190
+ Top = 37
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'OK'
+ Default = True
+ ModalResult = 1
+ TabOrder = 1
+ OnClick = Button1Click
+ end
+ object Button2: TButton
+ Left = 270
+ Top = 37
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 2
+ end
+ object pnlName: TPanel
+ Left = 8
+ Top = 8
+ Width = 101
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Name'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 3
+ end
+ object txtPresetName: TEdit
+ Left = 104
+ Top = 8
+ Width = 239
+ Height = 21
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 0
+ end
+end
diff --git a/Forms/SavePreset.pas b/Forms/SavePreset.pas
new file mode 100644
index 0000000..85a3095
--- /dev/null
+++ b/Forms/SavePreset.pas
@@ -0,0 +1,70 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit SavePreset;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ StdCtrls, ExtCtrls, Translation;
+
+type
+ TSavePresetForm = class(TForm)
+ txtPresetName: TEdit;
+ Button1: TButton;
+ Button2: TButton;
+ pnlName: TPanel;
+ procedure FormCreate(Sender: TObject);
+ procedure Button1Click(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ SavePresetForm: TSavePresetForm;
+
+implementation
+
+{$R *.DFM}
+
+procedure TSavePresetForm.Button1Click(Sender: TObject);
+begin
+ if txtPresetName.Text = '' then
+ begin
+ Application.MessageBox(PChar(TextByKey('savepreset-notitle')), 'Apophysis', 48);
+ Exit;
+ end;
+end;
+
+procedure TSavePresetForm.FormCreate(Sender: TObject);
+begin
+ self.Caption := TextBykey('savepreset-title');
+ button1.Caption := TextByKey('common-ok');
+ button2.Caption := TextByKey('common-cancel');
+ pnlName.Caption := TextByKey('savepreset-name');
+end;
+
+end.
diff --git a/Forms/ScriptForm.dfm b/Forms/ScriptForm.dfm
new file mode 100644
index 0000000..9a7c5c9
--- /dev/null
+++ b/Forms/ScriptForm.dfm
@@ -0,0 +1,1482 @@
+object ScriptEditor: TScriptEditor
+ Left = 312
+ Top = 383
+ Caption = 'Script Editor'
+ ClientHeight = 485
+ ClientWidth = 583
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001010000001002000680400001600000028000000100000002000
+ 0000010020000000000040040000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000006349
+ 35146349352E927A69FF8C7563FF87705EFF6349352E7F6654FF7A624FFF755D
+ 4AFF6349352E6E5441FF6A513EFF674E3AFF6349352E00000000000000006349
+ 352EAE9888FFEFE3DDFFF2E7E1FFEDDFD7FF836B59FFB79B8BFFDBBDADFFD9B7
+ A6FF725946FFAE8B77FFD0A692FFCC9E87FF654B38FF6349352E00000000B7A2
+ 93FFFBF8F7FFF9F4F2FFF7F0ECFFF4EBE6FFF1E5DFFF7F6754FF7A624FFF765D
+ 4AFF735946FF6E5542FF6B523EFF674E3AFF654B38FF634935FF00000000B7A2
+ 93FFFDFCFBFFFBF9F7FFFAF5F2FFF7EFEDFFF4EAE6FFF2E5DFFFDDDCD7FFDFD7
+ CEFFDECDC0FFDEC5B6FFDEBFACFFDBBAA6FFD8B5A3FF634935FF00000000B7A2
+ 93FFFFFFFFFFB47F65FFB47F64FFEDDDD5FFB37E63FFF4EBE6FFF1E5DFFFEFDF
+ D7FFEBD9D1FFE8D3C9FFE5CDC1FFE1C6B9FFD6B3A1FF634A35FF00000000B9A4
+ 95FFFFFFFFFFFFFFFFFFFDFCFCFFFCF9F7FFFAF4F2FFF6F0ECFFF4EBE5FFF2E5
+ DFFFEEDFD8FFEBD9D0FFE8D3C8FFE5CCC1FFDBBDADFF634A36FF00000000BDA7
+ 98FFFFFFFFFF968E88FFEEDED7FF968E87FFEDDDD6FF968D86FF958C85FFF4EB
+ E6FFF2E5DFFFEFDFD8FFECD9D0FFE8D3C9FFE0C7BAFF634A35FF00000000C1AB
+ 9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFFFBF8F7FFFAF4F2FFF7F0
+ ECFFF4EAE6FFF1E5DFFFEEDFD7FFEBD9D0FFE6D1C6FF634A35FF00000000C5AF
+ A0FFFFFFFFFFB48065FFB48065FF968E88FFC2B0A3FF968E87FF968E86FFF9F4
+ F2FFF7EFECFFF4EBE6FFF2E5DFFFEFDFD8FFEADBD1FF634936FF00000000C8B2
+ A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFFFCF8
+ F7FFF9F5F2FFF7F0ECFFF4EBE6FFF1E5DFFFEEE2DAFF644A36FF00000000C9B4
+ A5FFFFFFFFFFFFFFFFFF66A365FF66A365FF66A365FFC0B4ADFF66A365FF66A3
+ 65FF66A264FFFAF5F2FFF7F0ECFFF4EBE6FFEEE2DAFF644A36FF00000000C8B2
+ A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFCFBFFFBF9F7FFFAF4F2FFF7F0EDFFF3EAE4FF644A36FF00000000C8B2
+ A3FFCAB4A5FFCBB5A6FFCAB4A5FFC9B3A4FFC7B2A3FFC6B0A1FFC3AE9FFFC1AC
+ 9DFFBFAA9BFFBDA899FFBBA697FFB9A495FFB8A394FFB7A293FF000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ 0000FFFF00000003000000010000000100000001000000010000000100000001
+ 0000000100000001000000010000000100000001000000010000FFFF0000}
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Splitter1: TSplitter
+ Left = 0
+ Top = 373
+ Width = 583
+ Height = 4
+ Cursor = crVSplit
+ Align = alBottom
+ end
+ object ToolBar: TToolBar
+ Left = 560
+ Top = 0
+ Width = 23
+ Height = 373
+ Align = alRight
+ AutoSize = True
+ Caption = 'ToolBar'
+ Images = MainForm.Buttons
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 0
+ object btnNew: TToolButton
+ Left = 0
+ Top = 0
+ Hint = 'New'
+ Caption = 'btnNew'
+ ImageIndex = 0
+ Wrap = True
+ OnClick = btnNewClick
+ end
+ object btnOpen: TToolButton
+ Left = 0
+ Top = 22
+ Hint = 'Open'
+ Caption = 'btnOpen'
+ ImageIndex = 1
+ Wrap = True
+ OnClick = btnOpenClick
+ end
+ object btnSave: TToolButton
+ Left = 0
+ Top = 44
+ Hint = 'Save'
+ Caption = 'btnSave'
+ ImageIndex = 2
+ Wrap = True
+ OnClick = btnSaveClick
+ end
+ object btnFavorite: TToolButton
+ Left = 0
+ Top = 66
+ Caption = 'Add to favorites'
+ ImageIndex = 20
+ Wrap = True
+ OnClick = btnFavoriteClick
+ end
+ object btnRun: TToolButton
+ Left = 0
+ Top = 88
+ Hint = 'Run'
+ Caption = 'btnRun'
+ ImageIndex = 43
+ Wrap = True
+ OnClick = btnRunClick
+ end
+ object btnStop: TToolButton
+ Left = 0
+ Top = 110
+ Hint = 'Stop'
+ Caption = 'btnStop'
+ Enabled = False
+ ImageIndex = 36
+ Wrap = True
+ OnClick = btnStopClick
+ end
+ object btnBreak: TToolButton
+ Left = 0
+ Top = 132
+ Hint = 'Break'
+ Enabled = False
+ ImageIndex = 37
+ Wrap = True
+ OnClick = btnBreakClick
+ end
+ object btnPause: TToolButton
+ Left = 0
+ Top = 154
+ Hint = 'Pause'
+ Caption = 'Pause'
+ Enabled = False
+ ImageIndex = 47
+ Wrap = True
+ OnClick = btnPauseClick
+ end
+ object CodeButton: TToolButton
+ Left = 0
+ Top = 176
+ Hint = 'Show code blocks | Show or hide a panel with code templates'
+ Caption = 'Code Button'
+ ImageIndex = 45
+ OnClick = CodeButtonClick
+ end
+ end
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 466
+ Width = 583
+ Height = 19
+ Hint = 'Press for automathic code completition '
+ Anchors = [akLeft, akRight]
+ Panels = <>
+ SimplePanel = True
+ SimpleText = 'Press for automathic code completition '
+ end
+ object BackPanel: TPanel
+ Left = 123
+ Top = 0
+ Width = 437
+ Height = 373
+ Align = alClient
+ AutoSize = True
+ BevelInner = bvLowered
+ BevelOuter = bvLowered
+ Caption = 'BackPanel'
+ TabOrder = 2
+ object Editor: TScrMemo
+ Left = 2
+ Top = 2
+ Width = 433
+ Height = 369
+ Cursor = crIBeam
+ PopupMenu = PopupMenu
+ ActiveLineSettings.ShowActiveLine = False
+ ActiveLineSettings.ShowActiveLineIndicator = False
+ ActiveLineSettings.ActiveLineTextColor = clWhite
+ Align = alClient
+ AutoCompletion.Delay = 300
+ AutoCompletion.Font.Charset = DEFAULT_CHARSET
+ AutoCompletion.Font.Color = clWindowText
+ AutoCompletion.Font.Height = -11
+ AutoCompletion.Font.Name = 'MS Sans Serif'
+ AutoCompletion.Font.Style = []
+ AutoCompletion.ColorProp = clGreen
+ AutoCompletion.Height = 120
+ AutoCompletion.StartToken = '.'
+ AutoCompletion.Width = 400
+ AutoCorrect.Active = True
+ AutoCorrect.OldValue.Strings = (
+ 'GammaTreshold'
+ 'bedin'
+ 'linear3D'
+ 'gammatreshold'
+ 'gammaTreshold'
+ 'fan')
+ AutoCorrect.NewValue.Strings = (
+ 'GammaThreshold'
+ 'begin'
+ 'linear'
+ 'GammaThreshold'
+ 'GammaThreshold'
+ 'fan2')
+ AutoHintParameterPosition = hpBelowCode
+ BlockColor = clGradientActiveCaption
+ BookmarkGlyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 0800000000000001000000000000000000000001000000000000000000000000
+ 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA
+ A6000020400000206000002080000020A0000020C0000020E000004000000040
+ 20000040400000406000004080000040A0000040C0000040E000006000000060
+ 20000060400000606000006080000060A0000060C0000060E000008000000080
+ 20000080400000806000008080000080A0000080C0000080E00000A0000000A0
+ 200000A0400000A0600000A0800000A0A00000A0C00000A0E00000C0000000C0
+ 200000C0400000C0600000C0800000C0A00000C0C00000C0E00000E0000000E0
+ 200000E0400000E0600000E0800000E0A00000E0C00000E0E000400000004000
+ 20004000400040006000400080004000A0004000C0004000E000402000004020
+ 20004020400040206000402080004020A0004020C0004020E000404000004040
+ 20004040400040406000404080004040A0004040C0004040E000406000004060
+ 20004060400040606000406080004060A0004060C0004060E000408000004080
+ 20004080400040806000408080004080A0004080C0004080E00040A0000040A0
+ 200040A0400040A0600040A0800040A0A00040A0C00040A0E00040C0000040C0
+ 200040C0400040C0600040C0800040C0A00040C0C00040C0E00040E0000040E0
+ 200040E0400040E0600040E0800040E0A00040E0C00040E0E000800000008000
+ 20008000400080006000800080008000A0008000C0008000E000802000008020
+ 20008020400080206000802080008020A0008020C0008020E000804000008040
+ 20008040400080406000804080008040A0008040C0008040E000806000008060
+ 20008060400080606000806080008060A0008060C0008060E000808000008080
+ 20008080400080806000808080008080A0008080C0008080E00080A0000080A0
+ 200080A0400080A0600080A0800080A0A00080A0C00080A0E00080C0000080C0
+ 200080C0400080C0600080C0800080C0A00080C0C00080C0E00080E0000080E0
+ 200080E0400080E0600080E0800080E0A00080E0C00080E0E000C0000000C000
+ 2000C0004000C0006000C0008000C000A000C000C000C000E000C0200000C020
+ 2000C0204000C0206000C0208000C020A000C020C000C020E000C0400000C040
+ 2000C0404000C0406000C0408000C040A000C040C000C040E000C0600000C060
+ 2000C0604000C0606000C0608000C060A000C060C000C060E000C0800000C080
+ 2000C0804000C0806000C0808000C080A000C080C000C080E000C0A00000C0A0
+ 2000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0E000C0C00000C0C0
+ 2000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0A000808080000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FDFD25252525
+ 2525252525252525FDFDFD2E25FFFFFFFFFFFFFFFFFFFF25FDFDFD2525252525
+ 2525252525252525FDFD9A9AB7B7B7B7B7B7B7B7B7B72525FDFDFD25B7B7B7B7
+ B7B7B7B7B7B72525FDFD9A9AB7B7B7B7B7B7B7B7B7B72525FDFDFD25BFB7BFBF
+ B7B7B7B7B7B72525FDFD9A9ABFBFBFB7BFBFB7B7B7B72525FDFDFD25BFBFBFBF
+ BFB7BFBFB7B72525FDFD9A9ABFBFBFB7BFBFBFB7BFB72525FDFDFD25BFBFBFBF
+ BFBFBFBFBFB72525FDFD9A9ABFBFBFBFBFB7BFBFB7B72525FDFDFD25BFBFBFBF
+ BFBFBFBFBFB72525FDFD9A9ABFBFBFBFBFBFBFBFBFB725FDFDFDFD2525252525
+ 25252525252525FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD}
+ BorderColor = 16765615
+ BorderStyle = bsNone
+ ClipboardFormats = [cfText, cfRTF]
+ CodeFolding.Enabled = True
+ CodeFolding.LineColor = clTeal
+ CodeFolding.ExpandGlyph.Data = {
+ 06050000424D060500000000000036040000280000000D0000000D0000000100
+ 080000000000D000000000000000000000000001000000000000000000000000
+ 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA
+ A6000020400000206000002080000020A0000020C0000020E000004000000040
+ 20000040400000406000004080000040A0000040C0000040E000006000000060
+ 20000060400000606000006080000060A0000060C0000060E000008000000080
+ 20000080400000806000008080000080A0000080C0000080E00000A0000000A0
+ 200000A0400000A0600000A0800000A0A00000A0C00000A0E00000C0000000C0
+ 200000C0400000C0600000C0800000C0A00000C0C00000C0E00000E0000000E0
+ 200000E0400000E0600000E0800000E0A00000E0C00000E0E000400000004000
+ 20004000400040006000400080004000A0004000C0004000E000402000004020
+ 20004020400040206000402080004020A0004020C0004020E000404000004040
+ 20004040400040406000404080004040A0004040C0004040E000406000004060
+ 20004060400040606000406080004060A0004060C0004060E000408000004080
+ 20004080400040806000408080004080A0004080C0004080E00040A0000040A0
+ 200040A0400040A0600040A0800040A0A00040A0C00040A0E00040C0000040C0
+ 200040C0400040C0600040C0800040C0A00040C0C00040C0E00040E0000040E0
+ 200040E0400040E0600040E0800040E0A00040E0C00040E0E000800000008000
+ 20008000400080006000800080008000A0008000C0008000E000802000008020
+ 20008020400080206000802080008020A0008020C0008020E000804000008040
+ 20008040400080406000804080008040A0008040C0008040E000806000008060
+ 20008060400080606000806080008060A0008060C0008060E000808000008080
+ 20008080400080806000808080008080A0008080C0008080E00080A0000080A0
+ 200080A0400080A0600080A0800080A0A00080A0C00080A0E00080C0000080C0
+ 200080C0400080C0600080C0800080C0A00080C0C00080C0E00080E0000080E0
+ 200080E0400080E0600080E0800080E0A00080E0C00080E0E000C0000000C000
+ 2000C0004000C0006000C0008000C000A000C000C000C000E000C0200000C020
+ 2000C0204000C0206000C0208000C020A000C020C000C020E000C0400000C040
+ 2000C0404000C0406000C0408000C040A000C040C000C040E000C0600000C060
+ 2000C0604000C0606000C0608000C060A000C060C000C060E000C0800000C080
+ 2000C0804000C0806000C0808000C080A000C080C000C080E000C0A00000C0A0
+ 2000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0E000C0C00000C0C0
+ 2000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0A000808080000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFF608080808
+ 0808080808F6FF000000F64049494949494949494940F60000000849F6F6F6F6
+ FFF6F6F6F649F60000000849F6FFFF074907FFFFF649080000000849F6FFFF07
+ 0007FFFFF649080000000849F60707F740F70707F649080000000849FF490040
+ 40400049FF49080000000849F60707F740F70707F649080000000849F6FFFF07
+ 0007FFFFF649080000000849F6FFFF074907FFFFF649080000000849F6F6F6F6
+ F6F6F6F6F64908000000F64049494949494949494940F6000000FFF6F6F6F6F6
+ F6F6F6F6F6F6FF000000}
+ CodeFolding.CollapsedGlyph.Data = {
+ 06050000424D060500000000000036040000280000000D0000000D0000000100
+ 080000000000D000000000000000000000000001000000000000000000000000
+ 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA
+ A6000020400000206000002080000020A0000020C0000020E000004000000040
+ 20000040400000406000004080000040A0000040C0000040E000006000000060
+ 20000060400000606000006080000060A0000060C0000060E000008000000080
+ 20000080400000806000008080000080A0000080C0000080E00000A0000000A0
+ 200000A0400000A0600000A0800000A0A00000A0C00000A0E00000C0000000C0
+ 200000C0400000C0600000C0800000C0A00000C0C00000C0E00000E0000000E0
+ 200000E0400000E0600000E0800000E0A00000E0C00000E0E000400000004000
+ 20004000400040006000400080004000A0004000C0004000E000402000004020
+ 20004020400040206000402080004020A0004020C0004020E000404000004040
+ 20004040400040406000404080004040A0004040C0004040E000406000004060
+ 20004060400040606000406080004060A0004060C0004060E000408000004080
+ 20004080400040806000408080004080A0004080C0004080E00040A0000040A0
+ 200040A0400040A0600040A0800040A0A00040A0C00040A0E00040C0000040C0
+ 200040C0400040C0600040C0800040C0A00040C0C00040C0E00040E0000040E0
+ 200040E0400040E0600040E0800040E0A00040E0C00040E0E000800000008000
+ 20008000400080006000800080008000A0008000C0008000E000802000008020
+ 20008020400080206000802080008020A0008020C0008020E000804000008040
+ 20008040400080406000804080008040A0008040C0008040E000806000008060
+ 20008060400080606000806080008060A0008060C0008060E000808000008080
+ 20008080400080806000808080008080A0008080C0008080E00080A0000080A0
+ 200080A0400080A0600080A0800080A0A00080A0C00080A0E00080C0000080C0
+ 200080C0400080C0600080C0800080C0A00080C0C00080C0E00080E0000080E0
+ 200080E0400080E0600080E0800080E0A00080E0C00080E0E000C0000000C000
+ 2000C0004000C0006000C0008000C000A000C000C000C000E000C0200000C020
+ 2000C0204000C0206000C0208000C020A000C020C000C020E000C0400000C040
+ 2000C0404000C0406000C0408000C040A000C040C000C040E000C0600000C060
+ 2000C0604000C0606000C0608000C060A000C060C000C060E000C0800000C080
+ 2000C0804000C0806000C0808000C080A000C080C000C080E000C0A00000C0A0
+ 2000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0E000C0C00000C0C0
+ 2000C0C04000C0C06000C0C08000C0C0A000F0FBFF00A4A0A000808080000000
+ FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFF608080808
+ 0808080808F6FF000000F64049494949494949494940F60000000849F6F6F6F6
+ F6F6F6F6F649F60000000849F6FFFFFFFFFFFFFFF649080000000849F6FFFFFF
+ FFFFFFFFF649080000000849F607070707070707F649080000000849FF490000
+ 00000049FF49080000000849F607070707070707F649080000000849F6FFFFFF
+ FFFFFFFFF649080000000849F6FFFFFFFFFFFFFFF649080000000849F6F6F6F6
+ F6F6F6F6F64908000000F64049494949494949494940F6000000FFF6F6F6F6F6
+ F6F6F6F6F6F6FF000000}
+ Ctl3D = False
+ DelErase = True
+ EnhancedHomeKey = False
+ Gutter.Font.Charset = DEFAULT_CHARSET
+ Gutter.Font.Color = clWindowText
+ Gutter.Font.Height = -13
+ Gutter.Font.Name = 'Courier New'
+ Gutter.Font.Style = []
+ Gutter.BorderColor = 16765615
+ Gutter.GutterColor = 14722429
+ Gutter.GutterColorTo = 16572875
+ Gutter.ModifiedColorBkg = clGreen
+ Gutter.ModifiedColor = clBlue
+ Gutter.ShowModified = True
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -13
+ Font.Name = 'COURIER NEW'
+ Font.Style = []
+ HiddenCaret = False
+ Lines.Strings = (
+ '')
+ MarkerList.UseDefaultMarkerImageIndex = False
+ MarkerList.DefaultMarkerImageIndex = -1
+ MarkerList.ImageTransparentColor = 33554432
+ OleDropTarget = []
+ PrintOptions.MarginLeft = 0
+ PrintOptions.MarginRight = 0
+ PrintOptions.MarginTop = 0
+ PrintOptions.MarginBottom = 0
+ PrintOptions.PageNr = False
+ PrintOptions.PrintLineNumbers = False
+ RightMarginColor = 14869218
+ ScrollHint = False
+ SelColor = clWhite
+ SelBkColor = clHighlight
+ ShowRightMargin = True
+ SmartTabs = False
+ SyntaxStyles = Styler
+ TabOrder = 0
+ TabStop = True
+ TrimTrailingSpaces = False
+ UILanguage.ScrollHint = 'Row'
+ UILanguage.Undo = 'Undo'
+ UILanguage.Redo = 'Redo'
+ UILanguage.Copy = 'Copy'
+ UILanguage.Cut = 'Cut'
+ UILanguage.Paste = 'Paste'
+ UILanguage.Delete = 'Delete'
+ UILanguage.SelectAll = 'Select All'
+ UrlAware = False
+ UrlStyle.TextColor = clBlue
+ UrlStyle.BkColor = clWhite
+ UrlStyle.Style = [fsUnderline]
+ UseStyler = True
+ Version = '3.7.6.0'
+ WordWrap = wwNone
+ OnDragOver = EditorDragOver
+ OnDragDrop = EditorDragDrop
+ OnGetAutoCompletionList = EditorGetAutoCompletionList
+ OnChange = EditorChange
+ end
+ end
+ object Console: TMemo
+ Left = 0
+ Top = 377
+ Width = 583
+ Height = 89
+ Align = alBottom
+ Constraints.MinHeight = 20
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 3
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 123
+ Height = 373
+ Hint = 'Select a block and drag it into the Script editor'
+ Align = alLeft
+ AutoSize = True
+ Caption = 'Panel1'
+ ParentShowHint = False
+ ShowHint = True
+ TabOrder = 4
+ Visible = False
+ object ScrCodeList1: TScrCodeList
+ Left = 1
+ Top = 1
+ Width = 121
+ Height = 371
+ ParentCustomHint = False
+ SyntaxStyles = Styler
+ Align = alLeft
+ CodeBlocks = <
+ item
+ Code.Strings = (
+ 'with Transform do'
+ 'begin'
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'with Flame do '
+ 'begin'
+ ' // 3D-rotation'
+ ' Pitch := ; // around X-axis'
+ ' Yaw := ; // around Z-axis'
+ ' Roll := ; // around Y-axis'
+ ' Z := ; // camera height'
+ ' Perspective := ;'
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'for i:=0 to N do'
+ 'begin'
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'if () then begin'
+ ' // instructions'
+ 'end else begin'
+ ''
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'case () of'
+ ' : ; // n1: action1;'
+ ' : ; // n2: action2;'
+ 'else // action'
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'while () do begin'
+ ' // instructions'
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'try'
+ 'except'
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'repeat'
+ ' // instructions'
+ 'until ();')
+ end
+ item
+ Code.Strings = (
+ 'function Fn(): variant;'
+ 'begin'
+ ' Result := ;'
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'procedure Pr();'
+ 'begin'
+ 'end;')
+ end
+ item
+ Code.Strings = (
+ 'if not '
+ 'InputQuery('#39' '#39', '#39' '#39', )'
+ 'then Exit;')
+ end
+ item
+ Code.Strings = (
+ 'if () then'
+ ' // action'
+ 'else if () then '
+ ' // action'
+ 'else ;')
+ end
+ item
+ Caption = 'Task Dialog'
+ Code.Strings = (
+ 'try'
+ 'tdlg := TTaskDialog.Create(nil);'
+ 'tdlg.Title := '#39'User'#39#39's Dialog'#39';'
+ 'tdlg.Caption := '#39'Apophysis'#39'; '
+ 'tdlg.Flags := [tfUseHiconMain]; '
+ 'tdlg.CustomMainIcon := Apophysis.Icon; '
+
+ '// tdlg.CustomMainIcon := Screen.ActiveForm.Icon; ' +
+ ' '
+ 'tdlg.Text := '#39'A question for the user: '#39';'
+
+ 'tdlg.RadioButtons.Add.Caption := '#39'First variant'#39'; ' +
+ ' '
+ 'tdlg.RadioButtons.Add.Caption := '#39'Second variant'#39';'
+ 'tdlg.CommonButtons := [tcbOK, tcbCancel]; '
+ 'tdlg.Execute;'
+ 'if tdlg.ModalResult = mrCancel then '
+ 'begin'
+ '{ instructions for the Cancel button } '
+ 'end else { instructions for the OK button } '
+ ' case tdlg.RadioButton.ID of '
+ ' 0: begin'
+ ' { instructions for the 1-st variant } '
+ ' end; '
+ ' 1: begin'
+ ' { instructions for the 2-nd variant } '
+ ' end;'
+ ' end; // end case'
+ 'tdlg.Free;'
+ 'except'
+ 'MessageDlg('#39'This dialog type is not supported.'#39', mtError, 4, 0);'
+ 'exit;'
+ 'end; ')
+ end
+ item
+ Caption = 'Dialog with Links'
+ Code.Strings = (
+ 'try'
+ 'tdlg := TTaskDialog.Create(nil);'
+ 'tdlg.Title := '#39'User'#39#39's Dialog'#39';'
+ 'tdlg.Caption := '#39'Apophysis'#39'; '
+ 'tdlg.Flags := [tfUseCommandLinks, tfExpandFooterArea];'
+ 'tdlg.MainIcon := tdiInformation; '
+ '// tdlg.MainIcon := tdiShield;'
+ 'tdlg.ExpandedText := '#39'Additional text'#39'; '
+ 'tdlg.ExpandButtonCaption := '#39'More...'#39'; '
+ 'tdlg.Text := '#39'Text message or a question'#39';'
+ 'btn := tdlg.Buttons.Add;'
+ 'btn.Caption := '#39'1'#39';'
+ 'btn.CommandLinkHint:= '#39'First variant'#39';'
+ 'btn := tdlg.Buttons.Add;'
+ 'btn.Caption := '#39'2'#39';'
+ 'btn.CommandLinkHint:= '#39'Another variant'#39';'
+ 'tdlg.CommonButtons := [tcbCancel]; '
+ 'tdlg.Execute;'
+ 'case tdlg.ModalResult of '
+ ' 100: begin'
+ ' { instructions for the 1-st button } '
+ ' end; '
+ ' 101: begin'
+ ' { instructions for the 2-nd button } '
+ ' end;'
+ ' mrCancel: begin'
+
+ ' { instructions for the Cancel button } ' +
+ ' '
+ ' end;'
+ 'end;'
+ 'tdlg.Free;'
+ 'except'
+ 'MessageDlg('#39'This dialog type is not supported.'#39', mtError, 4, 0);'
+ 'exit;'
+ 'end; ')
+ end>
+ CodeBlockColor = clWhite
+ CodeBlockColorTo = clMoneyGreen
+ CodeBlockSelectColor = clSkyBlue
+ CodeBlockSelectColorTo = clHotLight
+ CodeBlockCaptionColor = 8238973
+ CodeBorderColor = clHighlight
+ CodeBorderSelectColor = clBlue
+ CodeBorderWidth = 2
+ CodeIndent = 1
+ DragMode = dmAutomatic
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ IntegralHeight = True
+ ItemHeight = 48
+ ItemStyle = isVariableHeight
+ ParentFont = False
+ ParentShowHint = False
+ PopupMenu = CodeBlockPopup
+ ShowHint = False
+ TabOrder = 0
+ UseStyler = True
+ Version = '3.1.0.2'
+ OnContextPopup = ScrCodeList1ContextPopup
+ OnDragDrop = ScrCodeList1DragDrop
+ OnDragOver = ScrCodeList1DragOver
+ OnBlockDblClick = ScrCodeList1BlockDblClick
+ OnBlockRightClick = ScrCodeList1BlockRightClick
+ end
+ end
+ object MainOpenDialog: TOpenDialog
+ DefaultExt = 'asc'
+ Filter = 'Apophysis Script Files (*.asc)|*.asc|Text files (*.txt)|*.txt'
+ Options = [ofHideReadOnly, ofFileMustExist, ofEnableSizing]
+ Left = 290
+ Top = 239
+ end
+ object MainSaveDialog: TSaveDialog
+ DefaultExt = 'asc'
+ Filter = 'Apophysis Script Files (*.asc)|*.asc|Text files (*.txt)|*.txt'
+ Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
+ Left = 280
+ Top = 56
+ end
+ object PopupMenu: TPopupMenu
+ Images = MainForm.Buttons
+ Left = 360
+ Top = 56
+ object mnuUndo: TMenuItem
+ Caption = 'Undo'
+ ImageIndex = 4
+ OnClick = mnuUndoClick
+ end
+ object mnuRedo: TMenuItem
+ Caption = 'Redo'
+ ImageIndex = 5
+ OnClick = mnuRedoClick
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object mnuCut: TMenuItem
+ Caption = 'Cut'
+ ImageIndex = 6
+ ShortCut = 16472
+ OnClick = mnuCutClick
+ end
+ object mnuCopy: TMenuItem
+ Caption = 'Copy'
+ ImageIndex = 7
+ ShortCut = 16451
+ OnClick = mnuCopyClick
+ end
+ object mnuPaste: TMenuItem
+ Caption = 'Paste'
+ ImageIndex = 8
+ ShortCut = 16470
+ OnClick = mnuPasteClick
+ end
+ object N2: TMenuItem
+ Caption = '-'
+ end
+ object FindReplace: TMenuItem
+ Caption = 'Find and replace'
+ ImageIndex = 39
+ OnClick = FindReplaceClick
+ end
+ object N4: TMenuItem
+ Caption = '-'
+ end
+ object CommentOut: TMenuItem
+ Caption = 'Comment out the selection by...'
+ object N5: TMenuItem
+ Caption = '{ ... }'
+ OnClick = SurroundByClick
+ end
+ object N6: TMenuItem
+ Caption = '(* ... *)'
+ OnClick = SurroundByClick
+ end
+ object N7: TMenuItem
+ Caption = '// ...'
+ OnClick = SurroundByClick
+ end
+ end
+ object SurroundBlock: TMenuItem
+ Caption = 'Surround the selection by...'
+ object BeginEnd1: TMenuItem
+ Caption = 'begin ... end'
+ OnClick = SurroundByClick
+ end
+ object TryExcept1: TMenuItem
+ Caption = 'try ... except'
+ OnClick = SurroundByClick
+ end
+ end
+ object N3: TMenuItem
+ Caption = '-'
+ end
+ object ShowCodeHints: TMenuItem
+ AutoCheck = True
+ Caption = 'Show hints for code blocks'
+ OnClick = ShowCodeHintsClick
+ end
+ object AddFromClipboard: TMenuItem
+ Caption = 'Add code blocks from clipboard'
+ OnClick = AddFromClipboardClick
+ end
+ object N8: TMenuItem
+ Caption = '-'
+ end
+ object CollapseBlocks: TMenuItem
+ Caption = 'Collapse all blocks of code'
+ OnClick = CollapseBlocksClick
+ end
+ object ExpandBlocks: TMenuItem
+ Caption = 'Expand all blocks of code'
+ OnClick = ExpandBlocksClick
+ end
+ end
+ object Scripter: TatPascalScripter
+ SourceCode.Strings = (
+ '')
+ SaveCompiledCode = False
+ OnCompileError = ScripterCompileError
+ OnRuntimeError = ScripterRuntimeError
+ ShortBooleanEval = True
+ LibOptions.SearchPath.Strings = (
+ '$(APPDIR)\Scripts'
+ '$(APPDIR)'
+ '$(CURDIR)')
+ LibOptions.SourceFileExt = '.asc'
+ LibOptions.CompiledFileExt = '.pcu'
+ LibOptions.FormFileExt = '.afm'
+ LibOptions.UseScriptFiles = True
+ CallExecHookEvent = False
+ Left = 480
+ Top = 200
+ end
+ object OpenDialog: TOpenDialog
+ DefaultExt = 'flame'
+ Filter =
+ 'Flame files (*.flame)|*.flame|Apophysis 1.0 parameters (*.apo;*.' +
+ 'fla)|*.apo;*.fla|All files (*.*)|*.*'
+ Options = [ofHideReadOnly, ofFileMustExist, ofEnableSizing]
+ Left = 283
+ Top = 173
+ end
+ object SaveDialog: TSaveDialog
+ DefaultExt = 'flame'
+ Filter = 'Flame files (*.flame)|*.flame'
+ Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofEnableSizing]
+ Left = 278
+ Top = 111
+ end
+ object Styler: TScrPascalMemoStyler
+ AutoBlockEnd = True
+ BlockStart = 'begin,try,case,class,record'
+ BlockEnd = 'end'
+ LineComment = '//'
+ MultiCommentLeft = '{'
+ MultiCommentRight = '}'
+ CommentStyle.TextColor = clNavy
+ CommentStyle.BkColor = clWhite
+ CommentStyle.Style = [fsItalic]
+ NumberStyle.TextColor = clFuchsia
+ NumberStyle.BkColor = clWhite
+ NumberStyle.Style = [fsBold]
+ HighlightStyle.TextColor = clWhite
+ HighlightStyle.BkColor = 3487231
+ HighlightStyle.Style = [fsBold]
+ AllStyles = <
+ item
+ KeyWords.Strings = (
+ 'absolute'
+ 'abstract'
+ 'and'
+ 'array'
+ 'as'
+ 'asm'
+ 'assembler'
+ 'automated'
+ 'begin'
+ 'break'
+ 'case'
+ 'cdecl'
+ 'class'
+ 'class'
+ 'const'
+ 'constructor'
+ 'continue'
+ 'default'
+ 'deprecated'
+ 'destructor'
+ 'dispid'
+ 'dispinterface'
+ 'div'
+ 'do'
+ 'downto'
+ 'dynamic'
+ 'else'
+ 'end'
+ 'except'
+ 'exports'
+ 'external'
+ 'far'
+ 'file'
+ 'finalise'
+ 'finally'
+ 'for'
+ 'forward'
+ 'function'
+ 'if'
+ 'implementation'
+ 'in'
+ 'inherited'
+ 'initialise'
+ 'inline'
+ 'interface'
+ 'is'
+ 'label'
+ 'library'
+ 'message'
+ 'mod'
+ 'near'
+ 'nil'
+ 'not'
+ 'object'
+ 'of'
+ 'or'
+ 'out'
+ 'overload'
+ 'override'
+ 'packed'
+ 'pascal'
+ 'platform'
+ 'private'
+ 'procedure'
+ 'program'
+ 'program'
+ 'property'
+ 'protected'
+ 'public'
+ 'published'
+ 'raise'
+ 'record'
+ 'register'
+ 'reintroduce'
+ 'repeat'
+ 'resourcestring'
+ 'safecall'
+ 'set'
+ 'shl'
+ 'shr'
+ 'stdcall'
+ 'step'
+ 'stored'
+ 'string'
+ 'then'
+ 'threadvar'
+ 'to'
+ 'try'
+ 'type'
+ 'unit'
+ 'until'
+ 'uses'
+ 'var'
+ 'virtual'
+ 'while'
+ 'with'
+ 'xor')
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clGreen
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = [fsBold]
+ BGColor = clWhite
+ StyleType = stKeyword
+ BracketStart = #0
+ BracketEnd = #0
+ Info = 'Pascal Standard Default'
+ end
+ item
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlue
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = []
+ BGColor = clWhite
+ StyleType = stBracket
+ BracketStart = #39
+ BracketEnd = #39
+ Info = 'Simple Quote'
+ end
+ item
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlue
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = []
+ BGColor = clWhite
+ StyleType = stBracket
+ BracketStart = '"'
+ BracketEnd = '"'
+ Info = 'Double Quote'
+ end
+ item
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clRed
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = []
+ BGColor = clWhite
+ StyleType = stSymbol
+ BracketStart = #0
+ BracketEnd = #0
+ Symbols = ' ,;:.(){}[]=+-*/^%<>#'#13#10
+ Info = 'Symbols Delimiters'
+ end
+ item
+ CommentLeft = '(*'
+ CommentRight = '*)'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clNavy
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = [fsItalic]
+ BGColor = clWhite
+ StyleType = stComment
+ BracketStart = #0
+ BracketEnd = #0
+ end>
+ AutoCompletion.Strings = (
+ 'procedure ShowMessage(TextMessage: string)'
+ 'function MessageDlg(Msg: string, DlgType, Buttons, 0): integer'
+
+ 'function MessageBox(0, Prompt, Caption, DlgStyle: integer): inte' +
+ 'ger'
+ 'function InputBox(Caption, Prompt, Value: variant): variant'
+
+ 'function InputQuery(Caption, Prompt, var Value: variant): boolea' +
+ 'n'
+ 'procedure Interpret(script: string)'
+ 'procedure RotateFlame(Degrees: double)'
+ 'procedure RotateReference(Degrees: double)'
+ 'procedure StoreFlame(index: integer)'
+ 'procedure GetFlame(FlameNumber: integer)'
+ 'procedure LoadFlame(FlameNumber: integer)'
+ 'var UpdateFlame: boolean'
+ 'var ActiveTransform: integer'
+ 'procedure SetActiveTransform(index: integer)'
+ 'var SelectedTransform: integer'
+ 'function Transforms: integer'
+ 'function FileCount: integer'
+ 'procedure AddTransform'
+ 'procedure DeleteTransform'
+ 'function DeleteFile(filename: string): boolean'
+ 'procedure CopyTransform'
+ 'procedure Clear'
+ 'procedure Preview'
+ 'procedure Render'
+ 'procedure Beep'
+ 'procedure MessageBeep(sound_type: integer)'
+ 'procedure Print(data: variant)'
+ 'procedure AddSymmetry(symmetry_type: integer)'
+
+ 'procedure Morph(Flame1_Num: integer, Flame2_Num: integer, Speed:' +
+ ' double, interp_type: integer = 3)'
+ 'procedure SetRenderBounds'
+ 'procedure SetFlameFile(FlameFile_name: string)'
+ 'procedure ListFile(FlameFile_name: string)'
+ 'procedure SaveFlame(FlameFile_name: string)'
+ 'function GetFileName: string'
+ 'procedure ShowStatus(TextMessage: string)'
+ 'procedure RandomFlame(randomness_type: integer)'
+ 'procedure RandomGradient'
+ 'procedure PresetGradient(gradient_number: integer)'
+ 'procedure SaveGradient(Title: string, FileName: string)'
+ 'procedure SetVariation(var_index)'
+ 'const ProgramVersionString'
+ 'function VariationIndex(var_name: string): integer'
+ 'function VariationName(var_index: integer): string'
+ 'function VariableIndex(param_name: string): integer'
+ 'function VariableName(param_index: integer): string'
+ 'procedure CalculateScale'
+ 'procedure CalculateBounds'
+ 'procedure CalculateColors'
+ 'procedure CalculateWeights'
+ 'procedure CalculateColorSpeed'
+ 'procedure RandomizeColorSpeed'
+ 'procedure RandomizeColors'
+ 'procedure RandomizeWeights'
+ 'procedure NormalizeWeights'
+ 'procedure EqualizeWeights'
+ 'procedure NormalizeVars'
+ 'function GetSaveFileName: string'
+ 'function ExtractFilePath(full_filename: string): string'
+ 'function ExtractFileName(full_filename: string): string'
+ 'function ExtractFileExt(filename: string): string'
+
+ 'function CopyFile(Source: string, Destination: string, keep_exis' +
+ 'ting: boolean = false): boolean'
+
+ 'function RenameFile(Source: string, Destination: string): boolea' +
+ 'n'
+ 'procedure DeleteFile(full_filename: string)'
+ 'function FileExists(full_filename: string): boolean'
+ 'var CurrentFile: readonly'
+ 'function CreateDir(folder_name: string)'
+ 'class TStringList'
+ 'constructor Create'
+
+ 'function Copy(source: string, start_pos, length: integer): strin' +
+ 'g'
+ 'class Renderer'
+ 'property Filename: string'
+ 'property Width: integer'
+ 'property Height: integer'
+ 'property MaxMemory: integer'
+ 'property EmbedParameters: boolean'
+ 'class Flame'
+ 'property Gamma: double'
+ 'property GammaThreshold: double'
+ 'property Brightness: double'
+ 'property Vibrancy: double'
+ 'property Contrast: double'
+ 'property Time: double'
+ 'property Zoom: double'
+ 'property Width: integer'
+ 'property Height: integer'
+ 'property PreviewWidth: integer'
+ 'property PreviewHeight: integer'#9' '
+ 'property Angle: double'
+ 'property Pitch: double'
+ 'property Yaw: double'
+ 'property Roll: double'
+ 'property Perspective: double'
+ 'property SampleDensity: double'
+ 'property Quality: double'
+ 'property Oversample: double'
+ 'property FilterRadius: double'
+ 'property Scale: double'
+ 'property Hue: double'
+ 'property Gradient[][]: integer'
+ 'property Background[]: integer'
+ 'property Name: string'
+ 'property Batches: integer'
+ 'property FinalXformEnabled: boolean'
+ 'var LimitVibrancy: boolean'
+ 'var DateCode: readonly'
+ 'procedure DecodeDate(date, year, month, day)'
+ 'procedure DecodeTime(time, hour, minute, sec, millisec)'
+ 'function Now: TDateTime'
+ 'procedure Exit'
+ 'var Stopped: boolean'
+ 'class Transform'
+ 'property coefs[][]: double'
+ 'property post[][]: double'
+ 'property Color: double'
+ 'property VarColor: double'
+ 'property Opacity: double'
+ 'property PlotMode: integer'
+ 'property Weight: double'
+ 'property Symmetry: double'
+ 'property ColorSpeed: double'
+ 'property Chaos[]: double'
+ 'procedure RotatePXOrigin(Degrees: double)'
+ 'procedure RotatePX(Degrees: double)'
+ 'procedure ScalePX(Factor: double)'
+ 'procedure Scale(Factor: double)'
+ 'procedure Translate(X: double, Y: double)'
+ 'procedure Rotate(Degrees: double)'
+
+ 'procedure Multiply(a00: double, a10: double, a01: double, a11: d' +
+ 'ouble)'
+ 'procedure TranslatePX(X: double, Y: double)'
+
+ 'procedure MultiplyPX(a00: double, a10: double, a01: double, a11:' +
+ ' double)'
+ 'procedure FlipHoriz'
+ 'procedure FlipPXHoriz'
+ 'procedure FlipVert'
+ 'procedure FlipPXVert'
+ 'procedure RotateOrigin(Degrees: double)'
+ 'property Variation[]: double'
+ 'property Variable[]: double'
+ 'property postXformEnabled: boolean'
+ 'method SwapCoefs'
+ 'class Options'
+ 'property JPEGQuality: integer'
+ 'property BatchSize: integer'
+ 'var BatchIndex: integer'
+ 'property ParameterFile: string'
+ 'property Multithreading: integer'
+ 'property SmoothPaletteFile'
+ 'property NumTries'
+ 'property TryLength'
+ 'property ConfirmDelete'
+ 'property Transparency: integer'
+ 'property PreviewLowQuality'
+ 'property PreviewMediumQuality'
+ 'property PreviewHighQuality'
+ 'property MinTransforms: integer'
+ 'property MaxTransforms: integer'
+ 'property MutateMinTransforms: integer'
+ 'property MutateMaxTransforms: integer'
+ 'property RandomPrefix'
+ 'property KeepBackground: integer'
+ 'property SymmetryType: integer'
+ 'property SymmetryOrder: integer'
+ 'property Variations[]: boolean'
+ 'property GradientOnRandom: integer'
+ 'property GradientFileOnRandom: string'
+ 'property MinNodes: integer'
+ 'property MaxNodes: integer'
+ 'property MinHue: integer'
+ 'property MaxHue: integer'
+ 'property MinSaturation: integer'
+ 'property MaxSaturation: integer'
+ 'property MinLuminance: integer'
+ 'property MaxLuminance: integer'
+ 'property UPRSampleDensity'
+ 'property UPRFilterRadius'
+ 'property UPROversample'
+ 'property UPRAdjustDensity: boolean'
+ 'property UPRColoringIdent: string'
+ 'property UPRColoringFile: string'
+ 'property UPRFormulaFile: string'
+ 'property UPRFormulaIdent: string'
+ 'property UPRWidth: integer'
+ 'property UPRHeight: integer'
+ 'property ExportRenderer: string'
+ 'property EvenGradientStripes: boolean'
+ 'property ColorBlending: integer'
+ 'class Pivot'
+ 'property Mode: integer'
+ 'procedure Set(X: double, Y: double)'
+ 'procedure Reset'
+ 'keyword for'
+ 'keyword begin'
+ 'keyword end'
+ 'keyword and'
+ 'keyword repeat'
+ 'keyword until'
+ 'keyword while'
+ 'keyword with'
+ 'keyword case'
+ 'keyword try'
+ 'keyword except'
+ 'keyword finally'
+ 'keyword downto'
+ 'keyword step'
+ 'keyword procedure'
+ 'keyword function'
+ 'const True'
+ 'const False'
+ 'keyword div'
+ 'keyword mod'
+ 'keyword uses'
+ 'unit System'
+ 'unit Dialogs'
+ 'unit Windows'
+ 'function random: double'
+
+ 'function RandomRange(startnum: integer, lastnum: integer): integ' +
+ 'er'
+ 'function Round(value: double): integer'
+ 'function Trunc(value: double): integer'
+ 'function abs(value: double): double'
+ 'function sqrt(value: double): double'
+ 'function Int(value: double): double'
+ 'function DegToRad(Degrees: double): double'
+ 'function RadToDeg(Radians: double): double'
+ 'function VarToStr(value: variant): string'
+ 'function IntToStr(num: integer): string'
+ 'function FloatToStr(num: double): string'
+ 'function StrToInt(num: variant): integer'
+ 'function StrToFloat(num: variant): double'
+ 'function Length(str: string): integer'
+ 'function Trim(str: string): string'
+ 'function AnsiLowerCase(str: string): string'
+ 'function AnsiUpperCase(str: string): string'
+ 'function Pos(substr: string, str: string): integer'
+ 'function Copy(str: string, index: integer, len: integer): string'
+ 'procedure Delete(str: string, index: integer, len: integer)'
+ 'function Format(settings: string,[values]): string'
+
+ 'function FormatDateTime(settings: string, date: TDateTime): stri' +
+ 'ng'
+
+ 'function VarArrayCreate([array_indexes: integer], data_type): ar' +
+ 'ray'
+ 'function hypot(X: double, Y: double): double'
+ 'function ArcTan2(Y: double, X: double): double'
+ 'function ArcSin(X: double): double'
+ 'function ArcCos(X: double): double'
+ 'procedure Dec(num: integer)'
+ 'procedure Inc(num: integer)'
+ 'function Odd(num: integer): boolean'
+ 'function StringOfChar(symbol: char, count: integer): string'
+ 'function GetEnvironmentVariable(sys_const: string): string;'
+ 'const PI'
+ 'const NVARS'
+ 'const NumVariables'
+ 'const NXFORMS'
+ 'const INSTALLPATH'
+ 'const SYM_NONE'
+ 'const SYM_BILATERAL'
+ 'const SYM_ROTATIONAL'
+ 'const SYM_DIHEDRAL'
+ 'const NMAPS'
+ 'const V_RANDOM = -1'
+ 'const V_LINEAR = 0'
+ 'unit Classes'
+ 'unit Forms'
+ 'const mrOK'
+ 'const mrCancel'
+ 'const mrYes'
+ 'const mrNo'
+ 'const mrRetry'
+ 'const mrClose'
+ 'object Apophysis : TApplication'
+ 'method SwapVariations(var1_name, var2_name: string)'
+ 'method SortVariationsByName'
+ 'method SortVariationsByIndex'
+ 'method PrintVariationsOrder'
+ 'method CopyVariationsOrder(transform_index: integer)'
+ 'method SetVariationOrder(var_name, index: integer)'
+ 'function GetVariationOrder(var_name: string): integer'
+ 'class TTaskDialog'
+ 'const tcbClose'
+ 'const tcbRetry'
+ 'const tcbNo'
+ 'const tcbYes'
+ 'const tcbOK'
+ 'const tcbCancel'
+ 'const tdiNone'
+ 'const tdiWarning'
+ 'const tdiError'
+ 'const tdiInformation'
+ 'const tdiShield'
+ 'const mtWarning'
+ 'const mtError'
+ 'const mtInformation'
+ 'const mtConfirmation'
+ 'const mtCustom'
+ 'const tfUseCommandLinks'
+ 'const tfVerificationFlagChecked'
+ 'const tfUseHiconMain'
+ 'const tfExpandFooterArea'
+ 'const tfExpandedByDefault'
+ 'const tfAllowDialogCancellation'
+ 'const tfUseHiconFooter'
+ 'const tfNoDefaultRadioButton'
+ 'const tfCanBeMinimized'
+ 'const tfShowProgressBar'
+ 'const tfShowMarqueeProgressBar'
+ 'const tfCallbackTimer'
+ 'const tfPositionRelativeToWindow'
+ 'const pbsNormal'
+ 'const pbsError'
+ 'const pbsPaused'
+ 'const BLEND_RGB'
+ 'const BLEND_HSV'
+ 'const BLEND_NONE')
+ HintParameter.TextColor = clBlack
+ HintParameter.BkColor = clInfoBk
+ HintParameter.HintCharStart = '('
+ HintParameter.HintCharEnd = ')'
+ HintParameter.HintCharDelimiter = ';'
+ HintParameter.HintClassDelimiter = '.'
+ HintParameter.HintCharWriteDelimiter = ','
+ HintParameter.Parameters.Strings = (
+ 'ShowMessage(TextMessage: string);'
+
+ 'MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMs' +
+ 'gDlgButtons; HelpCtx: Longint): Integer;'
+
+ 'InputQuery(const Caption: string, const Prompt: string, var Valu' +
+ 'e: variant): boolean'
+
+ 'InputBox(const Caption: string, const Prompt: string, const Defa' +
+ 'ultValue: variant): variant'
+ 'DeleteFile(const filename: string);'
+ 'RotateFlame(Degress: double)'
+ 'RotateReference(Degress: double)'
+ 'Rotate(Degrees: double)'
+ 'RotatePX(Degrees: double)'
+ 'RotateOrigin(Degrees: double)'
+ 'RotatePXOrigin(Degrees: double)'
+ 'Multiply(a00: double, a10: double, a01: double, a11: double)'
+ 'MultiplyPX(a00: double, a10: double, a01: double, a11: double)'
+ 'StoreFlame(FlameNumber: integer)'
+ 'GetFlame(FlameNumber: integer)'
+ 'LoadFlame(FlameNumber: integer)'
+ 'Scale(Factor: double)'
+ 'ScalePX(Factor: double)'
+ 'Translate(X: double, Y: double)'
+ 'TranslatePX(X: double, Y: double)'
+ 'SetActiveTransform(TransformNumber: integer)'
+ 'Print(data: variant)'
+ 'RandomRange(startnum: integer, lastnum: integer): integer'
+ 'Round(value: double): integer'
+ 'Trunc(value: double): integer'
+ 'abs(value: double): double'
+ 'sqrt(value: double): double'
+ 'Int(value: double): double'
+ 'DegToRad(Degrees: double): double'
+ 'RadToDeg(Radians: double): double'
+ 'VarToStr(value: variant): string'
+ 'IntToStr(num: integer): string'
+ 'FloatToStr(num: double): string'
+ 'StrToInt(num: variant): integer'
+ 'StrToFloat(num: variant): double'
+ 'sin(Radians: double)'
+ 'sin(Radians: double)'
+ 'ArcTan2(Y: double, X: double)'
+ 'hypot(X: double, Y: double)'
+ 'power(number: double, num_power: double)'
+ 'FormatDateTime(format_settings: string, date: TDateTime): string'
+ 'Format(format_settings: string,[values: variant_array]): string'
+
+ 'DecodeDate(date: TDateTime, year: integer, month: integer, day: ' +
+ 'integer)'
+
+ 'DecodeTime(time: TDateTime, hour: integer, minute: integer, seco' +
+ 'nd: integer, millisecond: integer)'
+
+ 'VarArrayCreate([array_low_index: integer, array_high_index: inte' +
+ 'ger ], data_type: integer)'
+ 'AddSymmetry(symmetry_type: integer)'
+
+ 'Morph(Flame1_Number: integer, Flame2_Number: integer, Speed: dou' +
+ 'ble, interp_type: integer = 3)'
+ 'SetFlameFile(const filename: string)'
+ 'ListFile(const filename: string)'
+ 'SaveFlame(const filename: string)'
+ 'ShowStatus(TextMessage: string)'
+ 'RandomFlame(randomness_type: integer)'
+ 'SaveGradient(Title: string, FileName: string)'
+ 'SetVariation(Number: integer)'
+ 'VariationIndex(var_name: string): integer'
+ 'VariationName(var_index: integer): string'
+
+ 'CopyFile(Source: string, Destination: string, keep_existing: boo' +
+ 'lean = false)'
+ 'LoadFromFile(full_filename: string)'
+ 'SaveToFile(full_filename: string)'
+ 'Add(text: string): integer'
+ 'IndexOf(text_string: string): integer'
+ 'Delete(string_index: integer)'
+ 'MessageBox(0, Prompt, Caption, DlgStyle: integer): integer'
+ 'InputBox(Caption, Prompt, Value: variant): variant'
+ 'Copy(source: string, start_pos, length: integer): string')
+ HexIdentifier = '$'
+ Description = 'Pascal'
+ Filter = 'Pascal Files (*.pas,*.dpr,*.dpk,*.inc)|*.pas;*.dpr;*.dpk;*.inc'
+ DefaultExtension = '.pas'
+ StylerName = 'Pascal'
+ Extensions = 'pas;dpr;dpk;inc'
+ RegionDefinitions = <
+ item
+ Identifier = 'procedure'
+ RegionStart = 'begin'
+ RegionEnd = 'end'
+ RegionType = rtClosed
+ ShowComments = False
+ end
+ item
+ Identifier = 'constructor'
+ RegionStart = 'begin'
+ RegionEnd = 'end'
+ RegionType = rtClosed
+ ShowComments = False
+ end
+ item
+ Identifier = 'destructor'
+ RegionStart = 'begin'
+ RegionEnd = 'end'
+ RegionType = rtClosed
+ ShowComments = False
+ end
+ item
+ Identifier = 'interface'
+ RegionStart = 'interface'
+ RegionType = rtOpen
+ ShowComments = False
+ end
+ item
+ Identifier = 'unit'
+ RegionStart = 'unit'
+ RegionType = rtFile
+ ShowComments = False
+ end
+ item
+ Identifier = 'implementation'
+ RegionStart = 'implementation'
+ RegionType = rtOpen
+ ShowComments = False
+ end
+ item
+ Identifier = 'case'
+ RegionStart = 'case'
+ RegionEnd = 'end'
+ RegionType = rtIgnore
+ ShowComments = False
+ end
+ item
+ Identifier = 'try'
+ RegionStart = 'try'
+ RegionEnd = 'end'
+ RegionType = rtIgnore
+ ShowComments = False
+ end
+ item
+ Identifier = 'function'
+ RegionStart = 'begin'
+ RegionEnd = 'end'
+ RegionType = rtClosed
+ ShowComments = False
+ end
+ item
+ Identifier = '{$region'
+ RegionStart = '{$region'
+ RegionEnd = '{$endregion'
+ RegionType = rtClosed
+ ShowComments = False
+ end>
+ Left = 472
+ Top = 264
+ end
+ object ScrMemoFindReplaceDialog1: TScrMemoFindReplaceDialog
+ AutoHighlight = True
+ NotFoundMessage = 'Text not found'
+ AdvMemo = Editor
+ Options = [frDown]
+ Left = 283
+ Top = 8
+ end
+ object CodeBlockPopup: TPopupMenu
+ Left = 376
+ Top = 112
+ object mnuDeleteBlock: TMenuItem
+ Caption = 'Delete'
+ OnClick = mnuDeleteBlockClick
+ end
+ object Editcaption1: TMenuItem
+ Caption = 'Edit caption...'
+ OnClick = Editcaption1Click
+ end
+ end
+end
diff --git a/Forms/ScriptForm.pas b/Forms/ScriptForm.pas
new file mode 100644
index 0000000..becf428
--- /dev/null
+++ b/Forms/ScriptForm.pas
@@ -0,0 +1,5913 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit ScriptForm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ExtCtrls, StdCtrls, ControlPoint, Buttons, ComCtrls, ToolWin, Menus,
+ XFormMan, XForm, GradientHlpr, cmap,LibXmlParser, LibXmlComps, Math, Translation,
+ atScript, atPascal, ScripterInit, ScrMemo, Scrmps, ScrCodeList;
+
+const
+ NCPS = 10; // AV: max number of flames for animation
+ scriptFavsFilename = 'scriptsAV.fav';
+
+type
+ TOptions = class
+ public
+ end;
+ TFlame = class
+ public
+ end;
+ TScriptRender = class
+ public
+ MaxMemory, Width, Height: integer;
+ Filename: string;
+ EmbedParameters: boolean; // AV: to write flame params into PNG
+ end;
+ TPivot = class
+ public
+ end;
+ TScriptEditor = class(TForm)
+ MainOpenDialog: TOpenDialog;
+ MainSaveDialog: TSaveDialog;
+ ToolBar: TToolBar;
+ btnOpen: TToolButton;
+ btnSave: TToolButton;
+ btnRun: TToolButton;
+ StatusBar: TStatusBar;
+ btnNew: TToolButton;
+ PopupMenu: TPopupMenu;
+ mnuCut: TMenuItem;
+ mnuCopy: TMenuItem;
+ mnuPaste: TMenuItem;
+ mnuUndo: TMenuItem;
+ N1: TMenuItem;
+ BackPanel: TPanel;
+ Editor: TScrMemo;
+ Scripter: TatPascalScripter;
+ Splitter1: TSplitter;
+ Console: TMemo;
+ btnStop: TToolButton;
+ btnBreak: TToolButton;
+ OpenDialog: TOpenDialog;
+ SaveDialog: TSaveDialog;
+ Styler: TScrPascalMemoStyler;
+ Panel1: TPanel;
+ ScrCodeList1: TScrCodeList;
+ CodeButton: TToolButton;
+ btnPause: TToolButton;
+ ScrMemoFindReplaceDialog1: TScrMemoFindReplaceDialog;
+ FindReplace: TMenuItem;
+ N2: TMenuItem;
+ ShowCodeHints: TMenuItem;
+ N3: TMenuItem;
+ CommentOut: TMenuItem;
+ N4: TMenuItem;
+ N5: TMenuItem;
+ N6: TMenuItem;
+ SurroundBlock: TMenuItem;
+ N7: TMenuItem;
+ BeginEnd1: TMenuItem;
+ TryExcept1: TMenuItem;
+ mnuRedo: TMenuItem;
+ AddFromClipboard: TMenuItem;
+ CodeBlockPopup: TPopupMenu;
+ mnuDeleteBlock: TMenuItem;
+ Editcaption1: TMenuItem;
+ btnFavorite: TToolButton;
+ N8: TMenuItem;
+ CollapseBlocks: TMenuItem;
+ ExpandBlocks: TMenuItem;
+ procedure F2SXMLStartTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+ procedure F2SXMLEndTag(Sender: TObject; TagName: string);
+ procedure F2SXMLEmptyTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+ procedure F2SXMLContent(Sender: TObject; Content: string);
+ // procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure btnOpenClick(Sender: TObject);
+ procedure btnSaveClick(Sender: TObject);
+ procedure btnRunClick(Sender: TObject);
+ procedure btnNewClick(Sender: TObject);
+ procedure mnuCutClick(Sender: TObject);
+ procedure mnuCopyClick(Sender: TObject);
+ procedure mnuPasteClick(Sender: TObject);
+ procedure mnuUndoClick(Sender: TObject);
+ procedure EditorChange(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure ScripterCompileError(Sender: TObject; var msg: string; row,
+ col: Integer; var ShowException: Boolean);
+ procedure btnStopClick(Sender: TObject);
+ procedure btnBreakClick(Sender: TObject);
+ procedure btnFavoriteClick(Sender: TObject);
+ procedure EditorGetAutoCompletionList(Sender: TObject; AToken: string;
+ AList: TStringList);
+ procedure ScrCodeList1DragDrop(Sender, Source: TObject; X, Y: Integer);
+ procedure ScrCodeList1DragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+ procedure EditorDragDrop(Sender, Source: TObject; X, Y: Integer);
+ procedure EditorDragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+ procedure CodeButtonClick(Sender: TObject);
+ procedure btnPauseClick(Sender: TObject);
+ procedure ScripterRuntimeError(Sender: TObject; var msg: string; row,
+ col: Integer; var ShowException: Boolean);
+ procedure FindReplaceClick(Sender: TObject);
+ procedure ShowCodeHintsClick(Sender: TObject);
+ procedure SurroundByClick(Sender: TObject);
+ procedure mnuRedoClick(Sender: TObject);
+ procedure ScrCodeList1BlockDblClick(Sender: TObject;
+ ACodeBlock: TCodeBlock);
+ procedure AddFromClipboardClick(Sender: TObject);
+ procedure mnuDeleteBlockClick(Sender: TObject);
+ procedure ScrCodeList1BlockRightClick(Sender: TObject;
+ ACodeBlock: TCodeBlock);
+ procedure ScrCodeList1ContextPopup(Sender: TObject; MousePos: TPoint;
+ var Handled: Boolean);
+ procedure Editcaption1Click(Sender: TObject);
+ procedure CollapseBlocksClick(Sender: TObject);
+ procedure ExpandBlocksClick(Sender: TObject);
+ public
+ cp: TControlPoint;
+ Stopped: boolean;
+ cmap: TColorMap;
+ Flame: TFlame;
+ Options: TOptions;
+ Pivot: TPivot;
+ Renderer: TScriptRender;
+ Another: TScriptRender;
+ AddedXForms : integer;
+ chaosLines : TStringList;
+ procedure LoadRunAndClear(scriptFile:string);
+ procedure LoadScriptFile(filename:string);
+ procedure ScriptFromFlame(flameXML:string);
+ procedure UpdateFlame;
+ procedure PrepareScripter;
+ procedure OpenScript;
+ procedure RunScript;
+ procedure AdjustScripterColors;
+
+ { Flame interface }
+ procedure SetFlameNameProc(AMachine: TatVirtualMachine);
+ procedure GetFlameNameProc(AMachine: TatVirtualMachine);
+ procedure SetFlameHueProc(AMachine: TatVirtualMachine);
+ procedure GetFlameHueProc(AMachine: TatVirtualMachine);
+ procedure GetFlameGammaProc(AMachine: TatVirtualMachine);
+ procedure SetFlameGammaProc(AMachine: TatVirtualMachine);
+ procedure GetFlameGammaThresholdProc(AMachine: TatVirtualMachine);
+ procedure SetFlameGammaThresholdProc(AMachine: TatVirtualMachine);
+ procedure GetFlameBrightnessProc(AMachine: TatVirtualMachine);
+ procedure SetFlameBrightnessProc(AMachine: TatVirtualMachine);
+ procedure GetFlameVibrancyProc(AMachine: TatVirtualMachine);
+ procedure SetFlameVibrancyProc(AMachine: TatVirtualMachine);
+ procedure GetFlameContrastProc(AMachine: TatVirtualMachine);
+ procedure SetFlameContrastProc(AMachine: TatVirtualMachine);
+ procedure GetFlameTimeProc(AMachine: TatVirtualMachine);
+ procedure SetFlameTimeProc(AMachine: TatVirtualMachine);
+ procedure GetFlameDensityProc(AMachine: TatVirtualMachine);
+ procedure SetFlameDensityProc(AMachine: TatVirtualMachine);
+ procedure GetFlameOversampleProc(AMachine: TatVirtualMachine);
+ procedure SetFlameOversampleProc(AMachine: TatVirtualMachine);
+ procedure GetFlameFilterRadiusProc(AMachine: TatVirtualMachine);
+ procedure SetFlameFilterRadiusProc(AMachine: TatVirtualMachine);
+ procedure GetFlameWidthProc(AMachine: TatVirtualMachine);
+ procedure SetFlameWidthProc(AMachine: TatVirtualMachine);
+ procedure GetFlameHeightProc(AMachine: TatVirtualMachine);
+ procedure SetFlameHeightProc(AMachine: TatVirtualMachine);
+ procedure GetFlameZoomProc(AMachine: TatVirtualMachine);
+ procedure SetFlameZoomProc(AMachine: TatVirtualMachine);
+ procedure GetFlameXProc(AMachine: TatVirtualMachine);
+ procedure SetFlameXProc(AMachine: TatVirtualMachine);
+ procedure GetFlameYProc(AMachine: TatVirtualMachine);
+ procedure SetFlameYProc(AMachine: TatVirtualMachine);
+ procedure GetFlamePixelsPerUnitProc(AMachine: TatVirtualMachine);
+ procedure SetFlamePixelsPerUnitProc(AMachine: TatVirtualMachine);
+ procedure GetFlamePaletteProc(AMachine: TatVirtualMachine);
+ procedure SetFlamePaletteProc(AMachine: TatVirtualMachine);
+ procedure GetFlameBackgroundProc(AMachine: TatVirtualMachine);
+ procedure SetFlameBackgroundProc(AMachine: TatVirtualMachine);
+ // procedure SetFlameNickProc(AMachine: TatVirtualMachine);
+ // procedure GetFlameNickProc(AMachine: TatVirtualMachine);
+ // procedure SetFlameURLProc(AMachine: TatVirtualMachine);
+ // procedure GetFlameURLProc(AMachine: TatVirtualMachine);
+ procedure SetFlameBatchesProc(AMachine: TatVirtualMachine);
+ procedure GetFlameBatchesProc(AMachine: TatVirtualMachine);
+ procedure GetFlameFinalxformEnabledProc(AMachine: TatVirtualMachine);
+ procedure SetFlameFinalxformEnabledProc(AMachine: TatVirtualMachine);
+ procedure GetFlameSoloXformProc(AMachine: TatVirtualMachine);
+ procedure SetFlameSoloXformProc(AMachine: TatVirtualMachine);
+ procedure GetFlameAngleProc(AMachine: TatVirtualMachine);
+ procedure SetFlameAngleProc(AMachine: TatVirtualMachine);
+ procedure GetFlamePitchProc(AMachine: TatVirtualMachine);
+ procedure SetFlamePitchProc(AMachine: TatVirtualMachine);
+ procedure GetFlameRollProc(AMachine: TatVirtualMachine);
+ procedure SetFlameRollProc(AMachine: TatVirtualMachine);
+ procedure GetFlameYawProc(AMachine: TatVirtualMachine);
+ procedure SetFlameYawProc(AMachine: TatVirtualMachine);
+ procedure GetFlameCamZposProc(AMachine: TatVirtualMachine);
+ procedure SetFlameCamZposProc(AMachine: TatVirtualMachine);
+ procedure GetFlamePerspectiveProc(AMachine: TatVirtualMachine);
+ procedure SetFlamePerspectiveProc(AMachine: TatVirtualMachine);
+ procedure GetFlameDOFProc(AMachine: TatVirtualMachine);
+ procedure SetFlameDOFProc(AMachine: TatVirtualMachine);
+
+ procedure GetPreviewHeightProc(AMachine: TatVirtualMachine);
+ procedure SetPreviewHeightProc(AMachine: TatVirtualMachine);
+ procedure GetPreviewWidthProc(AMachine: TatVirtualMachine);
+ procedure SetPreviewWidthProc(AMachine: TatVirtualMachine);
+
+
+ { Transform interface }
+ procedure GetTransformAProc(AMachine: TatVirtualMachine);
+ procedure SetTransformAProc(AMachine: TatVirtualMachine);
+ procedure GetTransformBProc(AMachine: TatVirtualMachine);
+ procedure SetTransformBProc(AMachine: TatVirtualMachine);
+ procedure GetTransformCProc(AMachine: TatVirtualMachine);
+ procedure SetTransformCProc(AMachine: TatVirtualMachine);
+ procedure GetTransformDProc(AMachine: TatVirtualMachine);
+ procedure SetTransformDProc(AMachine: TatVirtualMachine);
+ procedure GetTransformEProc(AMachine: TatVirtualMachine);
+ procedure SetTransformEProc(AMachine: TatVirtualMachine);
+ procedure GetTransformFProc(AMachine: TatVirtualMachine);
+ procedure SetTransformFProc(AMachine: TatVirtualMachine);
+ procedure GetTransformVarProc(AMachine: TatVirtualMachine);
+ procedure SetTransformVarProc(AMachine: TatVirtualMachine);
+ procedure GetTransformVariProc(AMachine: TatVirtualMachine);
+ procedure SetTransformVariProc(AMachine: TatVirtualMachine);
+
+ procedure GetTransformChaosProc(AMachine: TatVirtualMachine);
+ procedure SetTransformChaosProc(AMachine: TatVirtualMachine);
+ procedure GetTransformPlotModeProc(AMachine: TatVirtualMachine);
+ procedure SetTransformPlotModeProc(AMachine: TatVirtualMachine);
+ procedure GetTransformOpacityProc(AMachine: TatVirtualMachine);
+ procedure SetTransformOpacityProc(AMachine: TatVirtualMachine);
+
+ procedure GetTransformColorProc(AMachine: TatVirtualMachine);
+ procedure SetTransformColorProc(AMachine: TatVirtualMachine);
+ procedure GetTransformVarColorProc(AMachine: TatVirtualMachine);
+ procedure SetTransformVarColorProc(AMachine: TatVirtualMachine);
+ procedure GetTransformWeightProc(AMachine: TatVirtualMachine);
+ procedure SetTransformWeightProc(AMachine: TatVirtualMachine);
+ procedure GetTransformSymProc(AMachine: TatVirtualMachine);
+ procedure SetTransformSymProc(AMachine: TatVirtualMachine);
+
+ // AV: something new
+ procedure GetTransformNameProc(AMachine: TatVirtualMachine);
+ procedure SetTransformNameProc(AMachine: TatVirtualMachine);
+ procedure TransformSwapCoefsProc(AMachine: TatVirtualMachine);
+ procedure TransformResetVariables(AMachine: TatVirtualMachine);
+ // AV: variation order editing
+ procedure TransformMoveVarProc(AMachine: TatVirtualMachine);
+ procedure TransformExchangeVarsProc(AMachine: TatVirtualMachine);
+ procedure TransformCopyVarOrderProc(AMachine: TatVirtualMachine);
+ procedure TransformSortVarsProc(AMachine: TatVirtualMachine);
+ procedure TransformDefaultVarOrderProc(AMachine: TatVirtualMachine);
+ procedure TransformGetVarOrderProc(AMachine: TatVirtualMachine);
+ procedure TransformDisplayVarsProc(AMachine: TatVirtualMachine);
+
+ procedure GetTransformVariationProc(AMachine: TatVirtualMachine);
+ procedure SetTransformVariationProc(AMachine: TatVirtualMachine);
+ procedure GetTransformVariableProc(AMachine: TatVirtualMachine);
+ procedure SetTransformVariableProc(AMachine: TatVirtualMachine);
+
+ procedure GetTransformCoefsProc(AMachine: TatVirtualMachine);
+ procedure SetTransformCoefsProc(AMachine: TatVirtualMachine);
+ procedure GetTransformPostCoefsProc(AMachine: TatVirtualMachine);
+ procedure SetTransformPostCoefsProc(AMachine: TatVirtualMachine);
+
+ procedure TransformClearProc(AMachine: TatVirtualMachine);
+ procedure TransformRotateProc(AMachine: TatVirtualMachine);
+ procedure TransformScaleProc(AMachine: TatVirtualMachine);
+ procedure TransformRotateOriginProc(AMachine: TatVirtualMachine);
+
+ // AV: added reflections
+ procedure TransformFlipHorizProc(AMachine: TatVirtualMachine);
+ procedure TransformFlipVertProc(AMachine: TatVirtualMachine);
+ // AV: post-affine transformations
+ procedure TransformRotatePXOriginProc(AMachine: TatVirtualMachine);
+ procedure TransformRotatePXProc(AMachine: TatVirtualMachine);
+ procedure TransformFlipPXHorizProc(AMachine: TatVirtualMachine);
+ procedure TransformFlipPXVertProc(AMachine: TatVirtualMachine);
+ procedure TransformScalePXProc(AMachine: TatVirtualMachine);
+ procedure GetTransformPostxformEnabledProc(AMachine: TatVirtualMachine);
+ procedure SetTransformPostxformEnabledProc(AMachine: TatVirtualMachine);
+
+ { Render interface }
+ procedure GetRenderFilenameProc(AMachine: TatVirtualMachine);
+ procedure SetRenderFilenameProc(AMachine: TatVirtualMachine);
+ procedure GetRenderWidthProc(AMachine: TatVirtualMachine);
+ procedure SetRenderWidthProc(AMachine: TatVirtualMachine);
+ procedure GetRenderHeightProc(AMachine: TatVirtualMachine);
+ procedure SetRenderHeightProc(AMachine: TatVirtualMachine);
+ procedure GetRenderMaxMemoryProc(AMachine: TatVirtualMachine);
+ procedure SetRenderMaxMemoryProc(AMachine: TatVirtualMachine);
+ procedure GetRenderEmbedParams(AMachine: TatVirtualMachine); // AV
+ procedure SetRenderEmbedParams(AMachine: TatVirtualMachine); // AV
+ procedure FillFileList;
+
+ { Options interface }
+ procedure GetJPEGQuality(AMachine: TatVirtualMachine);
+ procedure SetJPEGQuality(AMachine: TatVirtualMachine);
+ procedure GetMultithreading(AMachine: TatVirtualMachine);
+ procedure SetMultithreading(AMachine: TatVirtualMachine);
+ procedure GetBatchSize(AMachine: TatVirtualMachine);
+ procedure SetBatchSize(AMachine: TatVirtualMachine);
+ procedure GetParameterFile(AMachine: TatVirtualMachine);
+ procedure SetParameterFile(AMachine: TatVirtualMachine);
+ procedure GetSmoothPaletteFile(AMachine: TatVirtualMachine);
+ procedure SetSmoothPaletteFile(AMachine: TatVirtualMachine);
+ procedure GetNumTries(AMachine: TatVirtualMachine);
+ procedure SetNumTries(AMachine: TatVirtualMachine);
+ procedure GetTryLength(AMachine: TatVirtualMachine);
+ procedure SetTryLength(AMachine: TatVirtualMachine);
+ procedure GetConfirmDelete(AMachine: TatVirtualMachine);
+ procedure SetConfirmDelete(AMachine: TatVirtualMachine);
+ // procedure GetFixedReference(AMachine: TatVirtualMachine);
+ // procedure SetFixedReference(AMachine: TatVirtualMachine);
+ procedure GetSampleDensity(AMachine: TatVirtualMachine);
+ procedure SetSampleDensity(AMachine: TatVirtualMachine);
+ procedure GetGamma(AMachine: TatVirtualMachine);
+ procedure SetGamma(AMachine: TatVirtualMachine);
+ procedure GetGammaThreshold(AMachine: TatVirtualMachine);
+ procedure SetGammaThreshold(AMachine: TatVirtualMachine);
+ procedure GetRandomGradientFile(AMachine: TatVirtualMachine);
+ procedure SetRandomGradientFile(AMachine: TatVirtualMachine);
+ procedure GetBrightness(AMachine: TatVirtualMachine);
+ procedure SetBrightness(AMachine: TatVirtualMachine);
+ procedure GetContrast(AMachine: TatVirtualMachine);
+ procedure SetContrast(AMachine: TatVirtualMachine);
+ procedure GetVibrancy(AMachine: TatVirtualMachine);
+ procedure SetVibrancy(AMachine: TatVirtualMachine);
+ procedure GetOversample(AMachine: TatVirtualMachine);
+ procedure SetOversample(AMachine: TatVirtualMachine);
+ procedure GetFilterRadius(AMachine: TatVirtualMachine);
+ procedure SetFilterRadius(AMachine: TatVirtualMachine);
+ procedure GetTransparency(AMachine: TatVirtualMachine);
+ procedure SetTransparency(AMachine: TatVirtualMachine);
+ procedure GetLowQuality(AMachine: TatVirtualMachine);
+ procedure SetLowQuality(AMachine: TatVirtualMachine);
+ procedure GetMediumQuality(AMachine: TatVirtualMachine);
+ procedure SetMediumQuality(AMachine: TatVirtualMachine);
+ procedure GetHighQuality(AMachine: TatVirtualMachine);
+ procedure SetHighQuality(AMachine: TatVirtualMachine);
+ procedure GetMinTransforms(AMachine: TatVirtualMachine);
+ procedure SetMinTransforms(AMachine: TatVirtualMachine);
+ procedure GetMaxTransforms(AMachine: TatVirtualMachine);
+ procedure SetMaxTransforms(AMachine: TatVirtualMachine);
+ procedure GetMutateMinTransforms(AMachine: TatVirtualMachine);
+ procedure SetMutateMinTransforms(AMachine: TatVirtualMachine);
+ procedure GetMutateMaxTransforms(AMachine: TatVirtualMachine);
+ procedure SetMutateMaxTransforms(AMachine: TatVirtualMachine);
+ procedure GetPrefix(AMachine: TatVirtualMachine);
+ procedure SetPrefix(AMachine: TatVirtualMachine);
+ procedure GetKeepBackground(AMachine: TatVirtualMachine);
+ procedure SetKeepBackground(AMachine: TatVirtualMachine);
+ procedure GetSymmetryType(AMachine: TatVirtualMachine);
+ procedure SetSymmetryType(AMachine: TatVirtualMachine);
+ procedure GetSymmetryOrder(AMachine: TatVirtualMachine);
+ procedure SetSymmetryOrder(AMachine: TatVirtualMachine);
+ procedure GetVariations(AMachine: TatVirtualMachine);
+ procedure SetVariations(AMachine: TatVirtualMachine);
+ procedure GetRandomGradient(AMachine: TatVirtualMachine);
+ procedure SetRandomGradient(AMachine: TatVirtualMachine);
+ // AV: new gradient options
+ procedure GetGradientBlending(AMachine: TatVirtualMachine);
+ procedure SetGradientBlending(AMachine: TatVirtualMachine);
+ procedure GetEqualGradient(AMachine: TatVirtualMachine);
+ procedure SetEqualGradient(AMachine: TatVirtualMachine);
+ procedure GetMinNodes(AMachine: TatVirtualMachine);
+ procedure SetMinNodes(AMachine: TatVirtualMachine);
+ procedure GetMaxNodes(AMachine: TatVirtualMachine);
+ procedure SetMaxNodes(AMachine: TatVirtualMachine);
+ procedure GetMinHue(AMachine: TatVirtualMachine);
+ procedure SetMinHue(AMachine: TatVirtualMachine);
+ procedure GetMaxHue(AMachine: TatVirtualMachine);
+ procedure SetMaxHue(AMachine: TatVirtualMachine);
+ procedure GetMinSat(AMachine: TatVirtualMachine);
+ procedure SetMinSat(AMachine: TatVirtualMachine);
+ procedure GetMaxSat(AMachine: TatVirtualMachine);
+ procedure SetMaxSat(AMachine: TatVirtualMachine);
+ procedure GetMinLum(AMachine: TatVirtualMachine);
+ procedure SetMinLum(AMachine: TatVirtualMachine);
+ procedure GetMaxLum(AMachine: TatVirtualMachine);
+ procedure SetMaxLum(AMachine: TatVirtualMachine);
+ procedure GetUPRSampleDensity(AMachine: TatVirtualMachine);
+ procedure SetUPRSampleDensity(AMachine: TatVirtualMachine);
+ procedure GetUPROversample(AMachine: TatVirtualMachine);
+ procedure SetUPROversample(AMachine: TatVirtualMachine);
+ procedure GetUPRFilterRadius(AMachine: TatVirtualMachine);
+ procedure SetUPRFilterRadius(AMachine: TatVirtualMachine);
+ procedure GetUPRColoringIdent(AMachine: TatVirtualMachine);
+ procedure SetUPRColoringIdent(AMachine: TatVirtualMachine);
+ procedure GetUPRColoringFile(AMachine: TatVirtualMachine);
+ procedure SetUPRColoringFile(AMachine: TatVirtualMachine);
+ procedure GetUPRFormulaIdent(AMachine: TatVirtualMachine);
+ procedure SetUPRFormulaIdent(AMachine: TatVirtualMachine);
+ procedure GetUPRFormulaFile(AMachine: TatVirtualMachine);
+ procedure SetUPRFormulaFile(AMachine: TatVirtualMachine);
+ procedure GetUPRAdjustDensity(AMachine: TatVirtualMachine);
+ procedure SetUPRAdjustDensity(AMachine: TatVirtualMachine);
+ procedure GetUPRWidth(AMachine: TatVirtualMachine);
+ procedure SetUPRWidth(AMachine: TatVirtualMachine);
+ procedure GetUPRHeight(AMachine: TatVirtualMachine);
+ procedure SetUPRHeight(AMachine: TatVirtualMachine);
+ procedure GetExportPath(AMachine: TatVirtualMachine);
+ procedure SetExportPath(AMachine: TatVirtualMachine);
+
+ { Pivot interface }
+ procedure GetPivotModeProc(AMachine: TatVirtualMachine);
+ procedure SetPivotModeProc(AMachine: TatVirtualMachine);
+ procedure GetPivotXProc(AMachine: TatVirtualMachine);
+ procedure SetPivotXProc(AMachine: TatVirtualMachine);
+ procedure GetPivotYProc(AMachine: TatVirtualMachine);
+ procedure SetPivotYProc(AMachine: TatVirtualMachine);
+ procedure SetPivotProc(AMachine: TatVirtualMachine);
+ procedure ResetPivotProc(AMachine: TatVirtualMachine);
+
+ // AV: moved here from TOperationLibrary
+ procedure CopyFileProc(AMachine: TatVirtualMachine);
+ end;
+ TTransform = class
+ public
+ { Transform class only serves as an
+ interface to active transform }
+ end;
+
+ // TMatrix = array[0..2, 0..2] of double; // AV: we already have such a type
+
+var
+ ScriptEditor: TScriptEditor;
+ LastParseError: string;
+ NumTransforms: integer; // Keeps track of number of xforms in flame.
+ ActiveTransform: integer; // Operations affect this transform.
+ LastError: string;
+ color: double;
+ cps: array[0..NCPS - 1] of TControlPoint;
+ Transform: TTransform;
+ Stopped, ResetLocation, UpdateIt: Boolean;
+ ParamFile: string;
+ FileList: TStringList;
+ ErrorOutOfRange, RTError, DTError: string; // AV
+
+implementation
+
+uses Main, Editor, Adjust, Global, Mutate, Registry, Preview, LoadTracker,
+ ScriptRender, ap_math, ap_classes, ap_sysutils, ap_Dialogs,
+ SavePreset, ap_windows, ap_FileCtrl, ap_Forms(*, bmdll32*);
+
+{$R *.DFM}
+
+//const
+// ErrorOutOfRange = 'Transform out of range!';
+
+type
+ TOperationLibrary = class(TatScripterLibrary)
+ protected
+ procedure RotateFlameProc(AMachine: TatVirtualMachine);
+ procedure RotateReferenceProc(AMachine: TatVirtualMachine);
+ procedure RotateProc(AMachine: TatVirtualMachine);
+ procedure ScaleProc(AMachine: TatVirtualMachine);
+ procedure MulProc(AMachine: TatVirtualMachine);
+ procedure TranslateProc(AMachine: TatVirtualMachine);
+ // AV: added for completeness
+ procedure MulPXProc(AMachine: TatVirtualMachine);
+ procedure TranslatePXProc(AMachine: TatVirtualMachine);
+
+ procedure GetActiveTransformProc(AMachine: TatVirtualMachine);
+ procedure SetActiveTransformProc(AMachine: TatVirtualMachine);
+ procedure GetSelectedTransformProc(AMachine: TatVirtualMachine); // AV
+ procedure SetSelectedTransformProc(AMachine: TatVirtualMachine); // AV
+ procedure TransformsProc(AMachine: TatVirtualMachine);
+ procedure FileCountProc(AMachine: TatVirtualMachine);
+ procedure AddTransformProc(AMachine: TatVirtualMachine);
+ procedure DeleteTransformProc(AMachine: TatVirtualMachine);
+ procedure CopyTransformProc(AMachine: TatVirtualMachine);
+ procedure ClearProc(AMachine: TatVirtualMachine);
+ procedure PreviewProc(AMachine: TatVirtualMachine);
+ procedure Print(AMachine: TatVirtualMachine);
+ procedure MorphProc(AMachine: TatVirtualMachine);
+ procedure RenderProc(AMachine: TatVirtualMachine);
+ procedure AddSymmetryProc(AMachine: TatVirtualMachine);
+ procedure StoreFlameProc(AMachine: TatVirtualMachine);
+ procedure GetFlameProc(AMachine: TatVirtualMachine);
+ procedure LoadFlameProc(AMachine: TatVirtualMachine);
+ procedure SetRenderBounds(AMachine: TatVirtualMachine);
+ procedure GetFileName(AMachine: TatVirtualMachine);
+ procedure ListFileProc(AMachine: TatVirtualMachine);
+ procedure SetParamFileProc(AMachine: TatVirtualMachine);
+ procedure SaveFlameProc(AMachine: TatVirtualMachine);
+ procedure ShowStatusProc(AMachine: TatVirtualMachine);
+ procedure RandomFlame(AMachine: TatVirtualMachine);
+ procedure RandomGradientProc(AMachine: TatVirtualMachine);
+ procedure PresetGradientProc(AMachine: TatVirtualMachine); // AV
+ procedure SaveGradientProc(AMachine: TatVirtualMachine);
+ procedure GetVariation(AMachine: TatVirtualMachine);
+ procedure SetVariation(AMachine: TatVirtualMachine);
+
+ procedure VariationIndexProc(AMachine: TatVirtualMachine);
+ procedure VariationNameProc(AMachine: TatVirtualMachine);
+ procedure VariableIndexProc(AMachine: TatVirtualMachine);
+ procedure VariableNameProc(AMachine: TatVirtualMachine);
+
+ procedure CalculateScale(AMachine: TatVirtualMachine);
+ procedure NormalizeVars(AMachine: TatVirtualMachine);
+ procedure CalculateBounds(AMachine: TatVirtualMachine);
+ procedure GetSaveFileName(AMachine: TatVirtualMachine);
+ // procedure CopyFileProc(AMachine: TatVirtualMachine);
+ procedure GetCurrentFile(AMachine: TatVirtualMachine);
+
+ // AV: added Flame Menu items
+ procedure CalculateColors(AMachine: TatVirtualMachine);
+ procedure CalculateWeights(AMachine: TatVirtualMachine);
+ procedure RandomizeColors(AMachine: TatVirtualMachine);
+ procedure RandomizeColorSpeed(AMachine: TatVirtualMachine);
+ procedure CalculateColorSpeed(AMachine: TatVirtualMachine);
+ procedure RandomizeWeights(AMachine: TatVirtualMachine);
+ procedure NormalizeWeights(AMachine: TatVirtualMachine);
+ procedure EqualizeWeights(AMachine: TatVirtualMachine);
+
+ procedure Init; override;
+ end;
+
+procedure TScriptEditor.ScriptFromFlame(flameXML: string);
+var
+ i : integer;
+ xml : TXmlScanner;
+begin
+ // Clear & Set caption to "New Script"
+ btnNewClick(btnNew);
+
+ chaosLines := TStringList.Create;
+ xml := TXmlScanner.Create(nil);
+ xml.Normalize := True;
+ xml.OnContent := F2SXMLContent; // AV: temporary unused
+ xml.OnEmptyTag := F2SXMLEmptyTag;
+ xml.OnEndTag := F2SXMLEndTag;
+ xml.OnStartTag := F2SXMLStartTag;
+ xml.LoadFromBuffer(TCharType(TStringType(flameXML))); // AV: changed from ANSI
+ xml.Execute;
+ xml.Destroy;
+
+ // use chaosLines...
+ for i := 0 to chaosLines.Count - 1 do
+ Editor.Lines.Add(chaosLines.Strings[i]);
+ chaosLines.Destroy;
+end;
+
+{ ************************ Options interface ********************************* }
+
+procedure TScriptEditor.GetJPEGQuality(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(JPEGQuality);
+end;
+
+procedure TScriptEditor.SetJPEGQuality(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v > 0) and (v <= 100) then JPEGQuality := v;
+ end;
+end;
+
+procedure TScriptEditor.GetBatchSize(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(BatchSize);
+end;
+
+procedure TScriptEditor.SetBatchSize(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 10) and (v <= 100) then BatchSize := v;
+ end;
+end;
+
+procedure TScriptEditor.GetParameterFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defFlameFile);
+end;
+
+procedure TScriptEditor.SetParameterFile(AMachine: TatVirtualMachine);
+var s: string;
+ i: integer;
+begin
+ with AMachine do
+ begin
+ s := GetInputArgAsString(0);
+ if (s = '') or FileExists(s) then
+ defFlameFile := s
+ else begin
+ LastError := 'SetFlameFile: ' + TextByKey('common-noparamfile');
+ i := LineNumberFromInstruction(AMachine.CurrentInstruction);
+ Editor.ActiveLine := i; // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ AMachine.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetRandomGradientFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(randGradientFile);
+end;
+
+procedure TScriptEditor.SetRandomGradientFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ randGradientFile := GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetSmoothPaletteFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defSmoothPaletteFile);
+end;
+
+procedure TScriptEditor.SetSmoothPaletteFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ defSmoothPaletteFile := GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetNumTries(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(NumTries);
+end;
+
+procedure TScriptEditor.SetNumTries(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v > 0) and (v <= 100) then NumTries := v;
+ end;
+end;
+
+procedure TScriptEditor.GetTryLength(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(TryLength);
+end;
+
+procedure TScriptEditor.SetTryLength(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 100) and (v <= 1000000) then TryLength := v;
+ end;
+end;
+
+procedure TScriptEditor.GetConfirmDelete(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(ConfirmDelete);
+end;
+
+procedure TScriptEditor.SetConfirmDelete(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ConfirmDelete := GetInputArgAsBoolean(0);
+end;
+
+procedure TScriptEditor.GetContrast(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defContrast);
+end;
+
+procedure TScriptEditor.SetContrast(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.1) and (v <= 10) then defContrast := v;
+ end;
+end;
+
+(*
+ procedure TScriptEditor.GetFixedReference(AMachine: TatVirtualMachine);
+ begin
+ with AMachine do
+ ReturnOutPutArg(true); //ReferenceMode = 0);
+ end;
+
+ procedure TScriptEditor.SetFixedReference(AMachine: TatVirtualMachine);
+ begin
+ // with AMachine do
+ // if GetInputArgAsBoolean(0) then ReferenceMode := 0
+ // else ReferenceMode := 1;
+ end;
+*)
+
+procedure TScriptEditor.GetSampleDensity(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defSampleDensity);
+end;
+
+procedure TScriptEditor.SetSampleDensity(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.1) and (v <= 100) then defSampleDensity := v;
+ end;
+end;
+
+procedure TScriptEditor.GetGamma(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defGamma);
+end;
+
+procedure TScriptEditor.SetGamma(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.1) and (v <= 100) then defGamma := v;
+ end;
+end;
+
+procedure TScriptEditor.GetGammaThreshold(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defGammaThreshold);
+end;
+
+procedure TScriptEditor.SetGammaThreshold(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v > 0) then defGammaThreshold := v;
+ end;
+end;
+
+procedure TScriptEditor.SetGradientBlending(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v < 3) then randColorBlend := v;
+ end;
+end;
+
+procedure TScriptEditor.GetGradientBlending(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(randColorBlend);
+end;
+
+procedure TScriptEditor.GetBrightness(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defBrightness);
+end;
+
+procedure TScriptEditor.SetBrightness(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.1) and (v <= 100) then defBrightness := v;
+ end;
+end;
+
+procedure TScriptEditor.GetVibrancy(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defVibrancy);
+end;
+
+procedure TScriptEditor.SetVibrancy(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0) and (v <= 100) then defVibrancy := v;
+ end;
+end;
+
+procedure TScriptEditor.ShowCodeHintsClick(Sender: TObject);
+begin
+ ScrCodeList1.ShowHint := ShowCodeHints.Checked;
+ Panel1.ShowHint := not ShowCodeHints.Checked;
+end;
+
+procedure TScriptEditor.GetOversample(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defOversample);
+end;
+
+procedure TScriptEditor.SetOversample(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 1) and (v <= 4) then defOversample := v;
+ end;
+end;
+
+procedure TScriptEditor.GetFilterRadius(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(defFilterRadius);
+end;
+
+procedure TScriptEditor.SetFilterRadius(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.1) then defFilterRadius := v;
+ end;
+end;
+
+procedure TScriptEditor.GetTransparency(AMachine: TatVirtualMachine);
+begin
+ AMachine.ReturnOutPutArg(PNGTransparency);
+end;
+
+procedure TScriptEditor.SetTransparency(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ if AMachine.GetInputArgAsInteger(0) = 0 then
+ PNGTransparency := 0
+ else
+ PNGTransparency := 1;
+end;
+
+procedure TScriptEditor.GetLowQuality(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(prevLowQuality);
+end;
+
+procedure TScriptEditor.SetLowQuality(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.01) and (v <= 100) then prevLowQuality := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMediumQuality(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(prevMediumQuality);
+end;
+
+procedure TScriptEditor.SetMediumQuality(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.01) and (v <= 100) then prevMediumQuality := v;
+ end;
+end;
+
+procedure TScriptEditor.GetHighQuality(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(prevHighQuality);
+end;
+
+procedure TScriptEditor.SetHighQuality(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.01) and (v <= 100) then prevHighQuality := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMinTransforms(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(randMinTransforms);
+end;
+
+procedure TScriptEditor.SetMinTransforms(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 2) and (v <= NXFORMS) and (v <= randMaxTransforms) then
+ randMinTransforms := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMaxTransforms(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(randMaxTransforms);
+end;
+
+procedure TScriptEditor.SetMaxTransforms(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 2) and (v <= NXFORMS) and (v >= randMinTransforms) then
+ randMaxTransforms := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMutateMinTransforms(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(mutantMinTransforms);
+end;
+
+procedure TScriptEditor.SetMutateMinTransforms(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 2) and (v <= NXFORMS) and (v <= mutantMaxTransforms) then
+ mutantMinTransforms := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMutateMaxTransforms(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(mutantMaxTransforms);
+end;
+
+procedure TScriptEditor.SetMutateMaxTransforms(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 2) and (v <= NXFORMS) and (v >= mutantMinTransforms) then
+ mutantMaxTransforms := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMultithreading(AMachine: TatVirtualMachine);
+var v: integer;
+begin
+ AMachine.ReturnOutputArg(NrTreads);
+end;
+
+procedure TScriptEditor.SetMultithreading(AMachine: TatVirtualMachine);
+var v: integer;
+begin
+ v := AMachine.GetInputArgAsInteger(0);
+ if (v > 0) and (v <= UseNrThreads) then // AV: changed max MT value
+ NrTreads := v
+ else begin
+ LastError := 'Options.Multithreading: ' + TextByKey('script-status-varoutofrange');
+ v := LineNumberFromInstruction(AMachine.CurrentInstruction);
+ Editor.ActiveLine := v; // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ AMachine.Halt;
+ end;
+end;
+
+procedure TScriptEditor.GetPrefix(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(RandomPrefix);
+end;
+
+procedure TScriptEditor.SetPrefix(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ RandomPrefix := GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetKeepBackground(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(KeepBackground);
+end;
+
+procedure TScriptEditor.SetKeepBackground(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ KeepBackground := GetInputArgAsBoolean(0);
+end;
+
+procedure TScriptEditor.GetSymmetryType(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(SymmetryType);
+end;
+
+procedure TScriptEditor.SetSymmetryType(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v <= 3) then SymmetryType := v;
+ end;
+end;
+
+procedure TScriptEditor.GetSymmetryOrder(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(SymmetryOrder);
+end;
+
+procedure TScriptEditor.SetSymmetryOrder(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 2) and (v <= 2000) then SymmetryOrder := v;
+ end;
+end;
+
+procedure TScriptEditor.GetVariations(AMachine: TatVirtualMachine);
+var
+ I: Integer;
+begin
+ with AMachine do
+ begin
+ i := GetArrayIndex(0);
+ if (i >= 0) and (i < NRVAR) then
+ ReturnOutPutArg(Variations[i]);
+ end;
+end;
+
+procedure TScriptEditor.SetVariations(AMachine: TatVirtualMachine);
+var
+ v: boolean;
+ i, vars: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsBoolean(0);
+ i := GetArrayIndex(0);
+ if (i >= 0) and (i < NRVAR) then
+ begin
+ Variations[i] := v;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetRandomGradient(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(randGradient);
+end;
+
+procedure TScriptEditor.SetRandomGradient(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v <= 4) then randGradient := v; // AV: fixed - was max=3
+ end;
+end;
+
+procedure TScriptEditor.GetMinNodes(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(MinNodes);
+end;
+
+procedure TScriptEditor.SetMinNodes(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 2) and (v <= 64) and (v <= MaxNodes) then MinNodes := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMaxNodes(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(MaxNodes);
+end;
+
+procedure TScriptEditor.SetMaxNodes(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 2) and (v <= 64) and (v >= MinNodes) then MaxNodes := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMinHue(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(MinHue);
+end;
+
+procedure TScriptEditor.SetMinHue(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v <= 600) and (v <= MaxHue) then MinHue := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMaxHue(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(MaxHue);
+end;
+
+procedure TScriptEditor.SetMaxHue(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v <= 600) and (v >= MinHue) then MaxHue := v;
+ end;
+end;
+
+
+procedure TScriptEditor.GetMinSat(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(MinSat);
+end;
+
+procedure TScriptEditor.SetMinSat(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v <= 100) and (v <= MaxSat) then MinSat := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMaxSat(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(MaxSat);
+end;
+
+procedure TScriptEditor.SetMaxSat(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v <= 100) and (v >= MinSat) then MaxSat := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMinLum(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(MinLum);
+end;
+
+procedure TScriptEditor.SetMinLum(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v <= 100) and (v <= MaxLum) then MinLum := v;
+ end;
+end;
+
+procedure TScriptEditor.GetMaxLum(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(MaxLum);
+end;
+
+procedure TScriptEditor.SetMaxLum(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) and (v <= 100) and (v >= MinLum) then MaxLum := v;
+ end;
+end;
+
+procedure TScriptEditor.GetUPRSampleDensity(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRSampleDensity);
+end;
+
+procedure TScriptEditor.SetUPRSampleDensity(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v > 0) then UPRSampleDensity := v;
+ end;
+end;
+
+procedure TScriptEditor.GetUPROversample(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPROversample);
+end;
+
+procedure TScriptEditor.SetUPROversample(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v > 0) then UPROversample := v;
+ end;
+end;
+
+procedure TScriptEditor.GetUPRFilterRadius(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRFilterRadius);
+end;
+
+procedure TScriptEditor.SetUPRFilterRadius(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v > 0) then UPRFilterRadius := v;
+ end;
+end;
+
+procedure TScriptEditor.GetUPRColoringIdent(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRColoringIdent);
+end;
+
+procedure TScriptEditor.SetUPRColoringIdent(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ UPRColoringIdent := GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetUPRColoringFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRColoringFile);
+end;
+
+procedure TScriptEditor.SetUPRColoringFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ UPRColoringFile := GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetUPRFormulaFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRFormulaFile);
+end;
+
+procedure TScriptEditor.SetUPRFormulaFile(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ UPRFormulaFile := GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetUPRFormulaIdent(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRFormulaIdent);
+end;
+
+procedure TScriptEditor.SetUPRFormulaIdent(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ UPRFormulaIdent := GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetUPRAdjustDensity(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRAdjustDensity);
+end;
+
+procedure TScriptEditor.SetUPRAdjustDensity(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ UPRAdjustDensity := GetInputArgAsBoolean(0);
+end;
+
+procedure TScriptEditor.GetUPRWidth(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRWidth);
+end;
+
+procedure TScriptEditor.SetUPRWidth(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v > 0) then UPRWidth := v;
+ end;
+end;
+
+procedure TScriptEditor.GetUPRHeight(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(UPRHeight);
+end;
+
+procedure TScriptEditor.SetUPRHeight(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v > 0) then UPRHeight := v;
+ end;
+end;
+
+procedure TScriptEditor.GetEqualGradient(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(EqualStripes);
+end;
+
+procedure TScriptEditor.SetEqualGradient(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ EqualStripes := GetInputArgAsBoolean(0);
+end;
+
+procedure TScriptEditor.GetExportPath(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(flam3Path);
+end;
+
+procedure TScriptEditor.SetExportPath(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ flam3Path := GetInputArgAsString(0);
+end;
+
+{ ***************************** Operation Library **************************** }
+
+procedure TOperationLibrary.Init;
+begin
+ Scripter.DefineMethod('RotateFlame', 1, tkNone, nil, RotateFlameProc);
+ Scripter.DefineMethod('RotateReference', 1, tkNone, nil, RotateReferenceProc);
+ Scripter.DefineMethod('Rotate', 1, tkNone, nil, RotateProc);
+ Scripter.DefineMethod('Multiply', 4, tkNone, nil, MulProc);
+ Scripter.DefineMethod('StoreFlame', 1, tkNone, nil, StoreFlameProc);
+ Scripter.DefineMethod('GetFlame', 1, tkNone, nil, GetFlameProc);
+ Scripter.DefineMethod('LoadFlame', 1, tkNone, nil, LoadFlameProc);
+ Scripter.DefineMethod('Scale', 1, tkNone, nil, ScaleProc);
+ Scripter.DefineMethod('Translate', 2, tkNone, nil, TranslateProc);
+
+ Scripter.DefineMethod('MultiplyPX', 4, tkNone, nil, MulPXProc);
+ Scripter.DefineMethod('TranslatePX', 2, tkNone, nil, TranslatePXProc);
+
+ Scripter.DefineProp('SelectedTransform', tkInteger,
+ GetSelectedTransformProc, SetSelectedTransformProc); // AV
+ Scripter.DefineProp('ActiveTransform', tkInteger,
+ GetActiveTransformProc, SetActiveTransformProc);
+ Scripter.DefineMethod('SetActiveTransform', 1, tkInteger, nil, SetActiveTransformProc);
+ Scripter.DefineMethod('Transforms', 0, tkInteger, nil, TransformsProc);
+ Scripter.DefineMethod('FileCount', 0, tkInteger, nil, FileCountProc);
+ Scripter.DefineMethod('AddTransform', 0, tkNone, nil, AddTransformProc);
+ Scripter.DefineMethod('DeleteTransform', 0, tkNone, nil, DeleteTransformProc);
+ Scripter.DefineMethod('CopyTransform', 0, tkNone, nil, CopyTransformProc);
+ Scripter.DefineMethod('Clear', 0, tkNone, nil, ClearProc);
+ Scripter.DefineMethod('Preview', 0, tkNone, nil, PreviewProc);
+ Scripter.DefineMethod('Render', 0, tkNone, nil, RenderProc);
+ Scripter.DefineMethod('Print', 1, tkNone, nil, Print);
+ Scripter.DefineMethod('AddSymmetry', 1, tkNone, nil, AddSymmetryProc);
+ Scripter.DefineMethod('Morph', 4, tkNone, nil, MorphProc, false, 1);
+ Scripter.DefineMethod('SetRenderBounds', 0, tkNone, nil, SetRenderBounds);
+ Scripter.DefineMethod('SetFlameFile', 1, tkNone, nil, SetParamFileProc);
+ Scripter.DefineMethod('ListFile', 1, tkNone, nil, ListFileProc);
+ Scripter.DefineMethod('SaveFlame', 1, tkNone, nil, SaveFlameProc);
+ Scripter.DefineMethod('GetFileName', 0, tkString, nil, GetFileName);
+ Scripter.DefineMethod('ShowStatus', 1, tkNone, nil, ShowStatusProc);
+ Scripter.DefineMethod('RandomFlame', 1, tkNone, nil, RandomFlame);
+ Scripter.DefineMethod('RandomGradient', 0, tkNone, nil, RandomGradientProc);
+ Scripter.DefineMethod('PresetGradient', 1, tkNone, nil, PresetGradientProc); // AV
+ Scripter.DefineMethod('SaveGradient', 2, tkNone, nil, SaveGradientProc);
+ Scripter.DefineMethod('Variation', 0, tkInteger, nil, GetVariation); // AV: ?
+ Scripter.DefineMethod('SetVariation', 1, tkInteger, nil, SetVariation); // AV: fixed
+
+ Scripter.AddConstant('ProgramVersionString', AppVersionString);
+ Scripter.DefineMethod('VariationIndex', 1, tkInteger, nil, VariationIndexProc);
+ Scripter.DefineMethod('VariationName', 1, tkString, nil, VariationNameProc);
+ Scripter.DefineMethod('VariableIndex', 1, tkInteger, nil, VariableIndexProc);
+ Scripter.DefineMethod('VariableName', 1, tkString, nil, VariableNameProc);
+
+ Scripter.DefineMethod('CalculateScale', 0, tkNone, nil, CalculateScale);
+ Scripter.DefineMethod('CalculateBounds', 0, tkNone, nil, CalculateBounds);
+ Scripter.DefineMethod('NormalizeVars', 0, tkNone, nil, NormalizeVars);
+ Scripter.DefineMethod('GetSaveFileName', 0, tkString, nil, GetSaveFileName);
+ // Scripter.DefineMethod('CopyFile', 2, tkString, nil, CopyFileProc);
+
+ Scripter.DefineMethod('CalculateColors', 0, tkNone, nil, CalculateColors);
+ Scripter.DefineMethod('CalculateColorSpeed', 0, tkNone, nil, CalculateColorSpeed);
+ Scripter.DefineMethod('CalculateWeights', 0, tkNone, nil, CalculateWeights);
+ Scripter.DefineMethod('NormalizeWeights', 0, tkNone, nil, NormalizeWeights);
+ Scripter.DefineMethod('RandomizeColors', 0, tkNone, nil, RandomizeColors);
+ Scripter.DefineMethod('RandomizeColorSpeed', 0, tkNone, nil, RandomizeColorSpeed);
+ Scripter.DefineMethod('RandomizeWeights', 0, tkNone, nil, RandomizeWeights);
+ Scripter.DefineMethod('EqualizeWeights', 0, tkNone, nil, EqualizeWeights);
+
+ Scripter.DefineProp('CurrentFile', tkString, GetCurrentFile, nil);
+
+ //Scripter.DefineMethod('BM_Open', 1, tkInteger, nil, BM_OpenProc);
+ //Scripter.DefineMethod('BM_DllCFunc', 2, tkInteger, nil, BM_DllCFuncProc);
+end;
+
+procedure TOperationLibrary.RandomFlame(AMachine: TatVirtualMachine);
+var
+ i: integer;
+begin
+ try
+ i := AMachine.GetInputArgAsInteger(0);
+ MainForm.RandomizeCP(ScriptEditor.cp, i);
+ for i := 0 to NXFORMS - 1 do
+ if ScriptEditor.cp.xform[i].density = 0 then break;
+ NumTransforms := i;
+ except on E: EMathError do
+ end;
+end;
+
+procedure TOperationLibrary.RandomGradientProc(AMachine: TatVirtualMachine);
+begin
+ ScriptEditor.cp.cmap := GradientHelper.RandomGradient;
+end;
+
+procedure TOperationLibrary.PresetGradientProc(AMachine: TatVirtualMachine);
+var i: integer;
+begin
+ i := AMachine.GetInputArgAsInteger(0);
+ if (i >= -1) and (i < NRCMAPS) then
+ GetCMap(i, 1, ScriptEditor.cp.cmap);
+end;
+
+procedure TOperationLibrary.CalculateScale(AMachine: TatVirtualMachine);
+var
+ x, y: double;
+begin
+ x := ScriptEditor.cp.center[0];
+ y := ScriptEditor.cp.center[1];
+ ScriptEditor.cp.CalcBoundBox;
+ ScriptEditor.cp.center[0] := x;
+ ScriptEditor.cp.center[1] := y;
+end;
+
+procedure TOperationLibrary.CalculateBounds(AMachine: TatVirtualMachine);
+begin
+ ScriptEditor.cp.CalcBoundBox;
+end;
+
+procedure TOperationLibrary.CalculateColors(AMachine: TatVirtualMachine);
+var i: integer;
+begin
+ for i := 0 to NumTransforms-1 do
+ ScriptEditor.cp.xform[i].color := i / (NumTransforms-1);
+end;
+
+procedure TOperationLibrary.CalculateWeights(AMachine: TatVirtualMachine);
+begin
+ ScriptEditor.cp.CalculateWeights;
+end;
+
+procedure TOperationLibrary.RandomizeColors(AMachine: TatVirtualMachine);
+var i: integer;
+begin
+ for i := 0 to NumTransforms-1 do
+ ScriptEditor.cp.xform[i].color := random;
+end;
+
+procedure TOperationLibrary.RandomizeColorSpeed(AMachine: TatVirtualMachine);
+var i: integer;
+begin
+ for i := 0 to NumTransforms-1 do
+ ScriptEditor.cp.xform[i].symmetry := 2 * random - 1;
+end;
+
+procedure TOperationLibrary.CalculateColorSpeed(AMachine: TatVirtualMachine);
+begin
+ ScriptEditor.cp.CalculateColorSpeed;
+end;
+
+procedure TOperationLibrary.RandomizeWeights(AMachine: TatVirtualMachine);
+begin
+ ScriptEditor.cp.RandomizeWeights;
+end;
+
+procedure TOperationLibrary.NormalizeWeights(AMachine: TatVirtualMachine);
+begin
+ ScriptEditor.cp.NormalizeProbabilities;
+end;
+
+procedure TOperationLibrary.EqualizeWeights(AMachine: TatVirtualMachine);
+begin
+ ScriptEditor.cp.EqualizeWeights;
+end;
+
+procedure TOperationLibrary.SetRenderBounds(AMachine: TatVirtualMachine);
+begin
+ ScriptRenderForm.SetRenderBounds;
+end;
+
+procedure TOperationLibrary.SetSelectedTransformProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+begin
+ try
+ with AMachine do
+ i := GetInputArgAsInteger(0);
+ if (i >= 0) and (i < EditForm.cbTransforms.Items.Count) then
+ EditForm.SelectedTriangle := i
+ else raise EFormatInvalid.Create('SelectedTransform: ' + ErrorOutOfRange);
+ except on E: EFormatInvalid do
+ begin
+ Application.ProcessMessages;
+ LastError := E.Message;
+ ScriptEditor.Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ ScriptEditor.Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.GetFileName(AMachine: TatVirtualMachine);
+begin
+ if ScriptEditor.OpenDialog.Execute then
+ with AMachine do
+ ReturnOutputArg(ScriptEditor.OpenDialog.Filename)
+ else
+ begin
+ LastError := 'GetFileName: ' + TextByKey('save-status-invalidfilename');
+ ScriptEditor.Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ ScriptEditor.Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ AMachine.Halt;
+ end;
+end;
+
+procedure TOperationLibrary.GetSaveFileName(AMachine: TatVirtualMachine);
+begin
+ if ScriptEditor.SaveDialog.Execute then
+ with AMachine do
+ ReturnOutputArg(ScriptEditor.SaveDialog.Filename)
+ else
+ begin
+ LastError := 'GetSaveFileName: ' + TextByKey('save-status-invalidfilename');
+ ScriptEditor.Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ ScriptEditor.Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ AMachine.Halt;
+ end;
+end;
+
+procedure TOperationLibrary.GetSelectedTransformProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutputArg(EditForm.SelectedTriangle);
+end;
+
+(*
+procedure TOperationLibrary.CopyFileProc(AMachine: TatVirtualMachine);
+var
+ src, dest: string;
+ FileList: TStringList;
+begin
+{ // AV: this doesn't work with Unicode strings and conflicts with Windows.CopyFile
+ src := AMachine.GetInputArgAsString(0);
+ dest := AMachine.GetInputArgAsString(1);
+ FileList := TStringList.Create;
+ try
+ if FileExists(src) then
+ begin
+ FileList.LoadFromFile(src);
+ try
+ FileList.SaveToFile(dest);
+ except
+ LastError := 'CopyFile: ' + TextByKey('common-genericcopyfailure');
+ AMachine.Halt;
+ end;
+ end
+ else
+ begin
+ LastError := 'CopyFile: ' + TextByKey('common-genericcopyfailure');
+ AMachine.Halt;
+ end;
+ finally
+ FileList.free;
+ end;
+end;
+ *)
+
+procedure TOperationLibrary.SetParamFileProc(AMachine: TatVirtualMachine);
+var
+ filen: string;
+begin
+ filen := AMachine.GetInputArgAsString(0);
+ if FileExists(filen) then
+ begin
+ ParamFile := filen;
+ ScriptEditor.FillFileList;
+ end
+ else
+ begin
+ LastError := 'SetFlameFile: ' + TextByKey('common-noparamfile');
+ AMachine.RuntimeError(LastError); // AV
+ AMachine.Halt;
+ if LoadForm.CheckBox1.Checked then LoadForm.Show; // AV
+ end;
+end;
+
+procedure TOperationLibrary.RotateProc(AMachine: TatVirtualMachine);
+begin
+ try
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then raise EFormatInvalid.Create(ErrorOutOfRange);
+ with AMachine do
+ ScriptEditor.cp.xform[ActiveTransform].Rotate(GetInputArgAsFloat(0));
+ except on E: EFormatInvalid do
+ begin
+ // ScriptEditor.Console.Lines.Add('Rotate: ' + E.message);
+ LastError := 'Rotate: ' + E.Message;
+ Application.ProcessMessages;
+ end;
+ end;
+end;
+
+
+procedure TOperationLibrary.MulPXProc(AMachine: TatVirtualMachine);
+var k, m, l, n, pa, pb, pc, pd: double;
+begin
+ try
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then raise EFormatInvalid.Create(ErrorOutOfRange);
+ with AMachine do
+ begin
+ k := GetInputArgAsFloat(0);
+ m := GetInputArgAsFloat(1);
+ l := GetInputArgAsFloat(2);
+ n := GetInputArgAsFloat(3);
+ end;
+ with ScriptEditor.cp.xform[ActiveTransform] do begin
+ pa := p[0,0];
+ pb := -p[1,0];
+ pc := -p[0,1];
+ pd := p[1,1];
+ p[0,0] := pa * k + pc * l;
+ p[0,1] := -(pa * m + pc * n);
+ p[1,0] := -(pb * k + pd * l);
+ p[1,1] := pb * m + pd * n;
+ end;
+ except on E: EFormatInvalid do
+ begin
+ // ScriptEditor.Console.Lines.Add('MultiplyPX: ' + E.message);
+ LastError := 'MultiplyPX: ' + E.Message;
+ Application.ProcessMessages;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.MulProc(AMachine: TatVirtualMachine);
+var k, m, l, n, ca, cb, cc, cd: double;
+begin
+ if ScriptEditor.cp.xform[ActiveTransform].postXswap then
+ begin
+ MulPXProc(AMachine);
+ Exit;
+ end;
+ try
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then raise EFormatInvalid.Create(ErrorOutOfRange);
+ with AMachine do
+ // ScriptEditor.cp.xform[ActiveTransform].Multiply(GetInputArgAsFloat(0), GetInputArgAsFloat(1), GetInputArgAsFloat(2), GetInputArgAsFloat(3));
+ begin
+ k := GetInputArgAsFloat(0);
+ m := GetInputArgAsFloat(1);
+ l := GetInputArgAsFloat(2);
+ n := GetInputArgAsFloat(3);
+ end;
+ with ScriptEditor.cp.xform[ActiveTransform] do begin
+ ca := c[0,0];
+ cb := -c[1,0];
+ cc := -c[0,1];
+ cd := c[1,1];
+ c[0,0] := ca * k + cc * l;
+ c[0,1] := -(ca * m + cc * n);
+ c[1,0] := -(cb * k + cd * l);
+ c[1,1] := cb * m + cd * n;
+ end;
+ except on E: EFormatInvalid do
+ begin
+ // ScriptEditor.Console.Lines.Add('Multiply: ' + E.message);
+ LastError := 'Multiply: ' + E.Message;
+ Application.ProcessMessages;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.Print(AMachine: TatVirtualMachine);
+begin
+ ScriptEditor.Console.Lines.Add(AMachine.GetInputArg(0));
+ Application.ProcessMessages;
+end;
+
+procedure TOperationLibrary.ShowStatusProc(AMachine: TatVirtualMachine);
+begin
+ MainForm.StatusBar.Panels[0].Text := AMachine.GetInputArg(0);
+ Application.ProcessMessages;
+end;
+
+
+procedure TOperationLibrary.SaveFlameProc(AMachine: TatVirtualMachine);
+var
+ filename: string;
+begin
+ with AMachine do
+ begin
+ filename := GetInputArgAsString(0);
+ (*if (LowerCase(ExtractFileExt(filename)) = '.apo') or
+ (LowerCase(ExtractFileExt(filename)) = '.fla') then
+ MainForm.SaveFlame(ScriptEditor.cp, ScriptEditor.cp.name, filename)
+ else *)
+ MainForm.SaveXMLFlame(ScriptEditor.cp, ScriptEditor.cp.name, filename)
+ end;
+end;
+
+procedure TOperationLibrary.SaveGradientProc(AMachine: TatVirtualMachine);
+var
+ gradstr: TStringList;
+begin
+ gradstr := TStringList.Create;
+ try
+ gradstr.add(CleanIdentifier(AMachine.GetInputArgAsString(1)) + ' {');
+ gradstr.add(MainForm.GradientFromPalette(ScriptEditor.cp.cmap, AMachine.GetInputArgAsString(1)));
+ gradstr.add('}');
+ MainForm.SaveGradient(gradstr.text, AMachine.GetInputArgAsString(1), AMachine.GetInputArgAsString(0))
+ finally
+ gradstr.free
+ end;
+end;
+
+procedure TOperationLibrary.ListFileProc(AMachine: TatVirtualMachine);
+var
+ flafile: string;
+ i: integer;
+begin
+ flafile := AMachine.GetInputArgAsString(0);
+ if FileExists(flafile) then
+ begin
+ OpenFile := flafile;
+ MainForm.Caption := AppVersionString + ' - ' + OpenFile;
+ (*if (LowerCase(ExtractFileExt(flafile)) = '.apo') or
+ (LowerCase(ExtractFileExt(flafile)) = '.undo') then
+ begin
+ ListIFS(OpenFile, 1);
+ OpenFileType := ftFla
+ end
+ else
+ begin*)
+ ListXML(OpenFile, 1);
+ OpenFileType := ftXML;
+ //end;
+ MainForm.SetFocus;
+ end
+ else
+ begin
+ try
+ LastError := 'ListFile: ' + Format(TextByKey('common-genericopenfailure'), [Flafile]);
+ except
+ LastError := 'Cannot list file: ' + Flafile;
+ end;
+ i := LineNumberFromInstruction(AMachine.CurrentInstruction);
+ ScriptEditor.Editor.ActiveLine := i; // AV
+ ScriptEditor.Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ AMachine.Halt;
+ end;
+end;
+
+procedure TOperationLibrary.StoreFlameProc(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ v := AMachine.GetInputArgAsInteger(0);
+ if (v >= 0) and (v < NCPS) then
+ begin
+ cps[v].copy(ScriptEditor.cp);
+ cps[v].cmap := ScriptEditor.cp.cmap;
+ end
+ else begin
+ LastError := 'StoreFlame(' + IntToStr(v) + '): ' + TextByKey('script-status-varoutofrange');
+ ScriptEditor.Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ ScriptEditor.Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ AMachine.Halt;
+ end;
+end;
+
+procedure TOperationLibrary.GetFlameProc(AMachine: TatVirtualMachine);
+var
+ i, v: integer;
+begin
+ v := AMachine.GetInputArgAsInteger(0);
+ if (v >= 0) and (v < NCPS) then
+ begin
+ ScriptEditor.cp.copy(cps[v]);
+ ScriptEditor.cp.cmap := cps[v].cmap;
+
+ for i := 0 to NXFORMS - 1 do
+ if ScriptEditor.cp.xform[i].density = 0 then break;
+ NumTransforms := i;
+ end
+ else begin
+ LastError := 'GetFlame(' + IntToStr(v) + '): ' + TextByKey('script-status-varoutofrange');
+ ScriptEditor.Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ ScriptEditor.Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ AMachine.Halt;
+ end;
+end;
+
+procedure LoadXMLFlame(index: integer);
+var
+ FStrings: TStringList;
+ IFSStrings: TStringList;
+ EntryStrings, Tokens: TStringList;
+ i: integer;
+begin
+ FStrings := TStringList.Create;
+ IFSStrings := TStringList.Create;
+ Tokens := TStringList.Create;
+ EntryStrings := TStringList.Create;
+ try
+ FStrings.LoadFromFile(ParamFile);
+
+ for i := 0 to FStrings.count - 1 do
+ begin
+ if Pos('', FStrings[i]) <> 0;
+ MainForm.ParseXML(ScriptEditor.Cp, IFSStrings.Text, true);
+ for i := 0 to NXFORMS - 1 do
+ if ScriptEditor.cp.xform[i].density = 0 then break;
+ NumTransforms := i;
+// FlameName := FileList[index];
+ finally
+ IFSStrings.Free;
+ FStrings.Free;
+ Tokens.free;
+ EntryStrings.free;
+ end;
+end;
+
+procedure LoadFlame(index: integer);
+var
+ FStrings: TStringList;
+ IFSStrings: TStringList;
+ EntryStrings, Tokens: TStringList;
+ SavedPal: Boolean;
+ i, j: integer;
+ FlameString, s: string;
+ Palette: TcolorMap;
+// x, y: double;
+begin
+ SavedPal := false;
+ FStrings := TStringList.Create;
+ IFSStrings := TStringList.Create;
+ Tokens := TStringList.Create;
+ EntryStrings := TStringList.Create;
+ try
+ FStrings.LoadFromFile(ParamFile);
+ for i := 0 to FStrings.count - 1 do
+ if Pos(FileList[index] + ' ', Trim(FStrings[i])) = 1 then
+ break;
+ IFSStrings.Add(FStrings[i]);
+ repeat
+ inc(i);
+ IFSStrings.Add(FStrings[i]);
+ until Pos('}', FStrings[i]) <> 0;
+ ScriptEditor.cp.Clear; // initialize control point for new flame;
+ ScriptEditor.cp.background[0] := 0;
+ ScriptEditor.cp.background[1] := 0;
+ ScriptEditor.cp.background[2] := 0;
+ ScriptEditor.cp.sample_density := defSampleDensity;
+ ScriptEditor.cp.spatial_oversample := defOversample;
+ ScriptEditor.cp.spatial_filter_radius := defFilterRadius;
+ for i := 0 to FStrings.count - 1 do
+ begin
+ if Pos(Lowercase(FileList[index]) + ' ', Trim(Lowercase(FStrings[i]))) = 1 then
+ break;
+ end;
+ inc(i);
+ while (Pos('}', FStrings[i]) = 0) and (Pos('palette:', FStrings[i]) = 0) do
+ begin
+ EntryStrings.Add(FStrings[i]);
+ inc(i);
+ end;
+ if Pos('palette:', FStrings[i]) = 1 then
+ begin
+ SavedPal := True;
+ inc(i);
+ for j := 0 to 255 do begin
+ s := FStrings[i];
+ GetTokens(s, Tokens);
+ Palette[j][0] := StrToInt(Tokens[0]);
+ Palette[j][1] := StrToInt(Tokens[1]);
+ Palette[j][2] := StrToInt(Tokens[2]);
+ inc(i);
+ end;
+ end;
+ FlameString := EntryStrings.Text;
+ ScriptEditor.cp.ParseString(FlameString);
+ for i := 0 to NXFORMS - 1 do
+ if ScriptEditor.cp.xform[i].density = 0 then break;
+ NumTransforms := i;
+ if SavedPal then ScriptEditor.cp.cmap := Palette;
+ ScriptEditor.cp.name := FileList[index];
+ finally
+ IFSStrings.Free;
+ FStrings.Free;
+ Tokens.free;
+ EntryStrings.free;
+ end;
+end;
+
+procedure TOperationLibrary.LoadFlameProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+begin
+ i := AMachine.GetInputArgAsInteger(0);
+ if (i >= 0) and (i < FileList.count) then
+ begin
+ (*if (LowerCase(ExtractFileExt(ParamFile)) = '.undo') or
+ (LowerCase(ExtractFileExt(ParamFile)) = '.apo') then
+ LoadFlame(i)
+ else*)
+ LoadXMLFlame(i); ;
+ end;
+end;
+
+procedure TOperationLibrary.RotateFlameProc(AMachine: TatVirtualMachine);
+var
+ Triangles: TTriangles;
+ i: integer;
+ r: double;
+ tx: TXForm;
+begin
+ tx := TXForm.Create;
+ tx.Assign(scripteditor.cp.xform[NumTransforms]);
+ ScriptEditor.cp.TrianglesFromCp(Triangles);
+ r := AMachine.GetInputArgAsFloat(0) * pi / 180;
+ for i := -1 to NumTransforms - 1 do
+ begin
+ Triangles[i] := RotateTriangle(Triangles[i], r);
+ end;
+ ScriptEditor.cp.GetFromTriangles(Triangles, NumTransforms);
+ scripteditor.cp.xform[NumTransforms].Assign(tx);
+ tx.Free;
+end;
+
+procedure TOperationLibrary.AddSymmetryProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+ tx: TXForm;
+begin
+ tx := TXForm.Create;
+ tx.Assign(scripteditor.cp.xform[NumTransforms]);
+
+ ScriptEditor.cp.NormalizeProbabilities; // AV
+ add_symmetry_to_control_point(ScriptEditor.cp, AMachine.GetInputArgAsInteger(0));
+ for i := 0 to NXFORMS - 1 do
+ if ScriptEditor.cp.xform[i].density = 0 then break;
+ NumTransforms := i;
+ scripteditor.cp.xform[i].Assign(tx);
+ tx.Free;
+end;
+
+procedure TOperationLibrary.RotateReferenceProc(AMachine: TatVirtualMachine);
+var
+ Triangles: TTriangles;
+ r: double;
+ tx: TXForm;
+begin
+ tx := TXForm.Create;
+ tx.Assign(scripteditor.cp.xform[NumTransforms]);
+ ScriptEditor.cp.TrianglesFromCp(Triangles);
+ r := AMachine.GetInputArgAsFloat(0) * pi / 180;
+ Triangles[-1] := RotateTriangle(Triangles[-1], r);
+ ScriptEditor.cp.GetFromTriangles(Triangles, NumTransforms);
+ scripteditor.cp.xform[NumTransforms].Assign(tx);
+ tx.Free;
+end;
+
+procedure TOperationLibrary.ScaleProc(AMachine: TatVirtualMachine);
+begin
+ try
+ if (ActiveTransform < 0) or (ActiveTransform >= ScriptEditor.cp.NumXForms) then raise EFormatInvalid.Create(ErrorOutOfRange);
+ with AMachine do
+ ScriptEditor.cp.xform[ActiveTransform].Scale(GetInputArgAsFloat(0));
+ except on E: EFormatInvalid do
+ begin
+ //ScriptEditor.Console.Lines.Add('Scale: ' + E.message);
+ Application.ProcessMessages;
+ LastError := 'Scale: ' + E.Message;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.GetActiveTransformProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutputArg(ActiveTransform);
+end;
+
+procedure TOperationLibrary.GetCurrentFile(AMachine: TatVirtualMachine);
+begin
+with AMachine do
+ ReturnOutputArg(OpenFile);
+end;
+
+procedure TOperationLibrary.TransformsProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutputArg(NumTransforms);
+end;
+
+procedure TOperationLibrary.GetVariation(AMachine: TatVirtualMachine);
+var
+ i, n: integer;
+begin
+ with AMachine do
+ begin
+ // AV: something was wrong here, I rewrote it...
+ { i := integer(Variation);
+ if (i >= NRVAR) or (i < 0) then
+ i := -1; }
+ i := 0;
+ if MainForm.mnuVRandom.Checked then i := -1
+ else
+ for n := 0 to NRVAR - 1 do
+ if MainForm.VarMenus[n].Checked then
+ begin
+ i := n;
+ break;
+ end;
+ ReturnOutputArg(i);
+ end
+end;
+
+procedure TOperationLibrary.SetVariation(AMachine: TatVirtualMachine);
+var
+ i: integer;
+begin
+ with AMachine do
+ begin
+ i := GetInputArgAsInteger(0);
+ if (i < 0) or (i >= NRVAR) then
+ i := NRVAR;
+ if i = NRVAR then
+ begin
+ MainForm.mnuVRandom.Checked := True;
+ // AV: outdated type...
+ Variation := vRandom;
+ // AV: only one variation type can be active
+ for i := 0 to NRVAR - 1 do
+ MainForm.VarMenus[i].Checked := False;
+ MainForm.mnuBuiltinVars.Checked := False;
+ MainForm.mnuPluginVars.Checked := False;
+ end else
+ begin
+ MainForm.VarMenus[i].Checked := True;
+ MainForm.mnuVRandom.Checked := False;
+ Variation := TVariation(i);
+ if (i >= NumBuiltinVars) then
+ begin
+ for i := 0 to NumBuiltinVars-1 do
+ MainForm.VarMenus[i].Checked := False; // AV: fixme
+ MainForm.mnuBuiltinVars.Checked := False;
+ MainForm.mnuPluginVars.Checked := True;
+ end
+ else begin
+ for i := NumBuiltinVars to NrVar - 1 do
+ MainForm.VarMenus[i].Checked := False; // AV: fixme
+ MainForm.mnuBuiltinVars.Checked := True;
+ MainForm.mnuPluginVars.Checked := False;
+ end;
+ end;
+ end
+end;
+
+procedure TOperationLibrary.VariationIndexProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+ str: string;
+begin
+ with AMachine do begin
+ str := LowerCase(GetInputArgAsString(0));
+ i := NRVAR-1;
+ while (i >= 0) and (LowerCase(varnames(i)) <> str) do Dec(i);
+ ReturnOutputArg(i);
+ end;
+end;
+
+procedure TOperationLibrary.VariationNameProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+ str: string;
+begin
+ with AMachine do begin
+ i := GetInputArgAsInteger(0);
+ if (i >= 0) and (i < NRVAR) then
+ ReturnOutputArg(varnames(i))
+ else
+ ReturnOutputArg('');
+ end;
+end;
+
+procedure TOperationLibrary.VariableIndexProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+ str: string;
+begin
+ with AMachine do begin
+ str := LowerCase(GetInputArgAsString(0));
+ i := GetNrVariableNames-1;
+ while (i >= 0) and (LowerCase(GetVariableNameAt(i)) <> str) do Dec(i);
+ ReturnOutputArg(i);
+ end;
+end;
+
+procedure TOperationLibrary.VariableNameProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+ str: string;
+begin
+ with AMachine do begin
+ i := GetInputArgAsInteger(0);
+ if (i >= 0) and (i < GetNrVariableNames) then
+ ReturnOutputArg(GetVariableNameAt(i))
+ else
+ ReturnOutputArg('');
+ end;
+end;
+
+procedure TOperationLibrary.FileCountProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutputArg(FileList.Count);
+end;
+
+procedure TOperationLibrary.ClearProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+begin
+ NumTransforms := 0;
+ ActiveTransform := -1;
+{
+ for i := 0 to NXFORMS - 1 do
+ ScriptEditor.cp.xform[i].density := 0;
+}
+ ScriptEditor.cp.Clear;
+ ScriptEditor.cp.xform[0].symmetry := 1;
+
+ with ScriptEditor.cp do
+ begin // AV: added 3D-camera resetting for new flames
+ cameraPitch := 0;
+ cameraYaw := 0;
+ cameraRoll := 0;
+ cameraPersp := 0;
+ cameraZPos := 0;
+ cameraDOF := 0;
+ end;
+end;
+
+procedure TOperationLibrary.MorphProc(AMachine: TatVirtualMachine);
+var
+ a, b, i: integer;
+ v: double;
+begin
+ with AMachine do
+ begin
+ a := GetInputArgAsInteger(0);
+ b := GetInputArgAsInteger(1);
+ v := GetInputArgAsFloat(2);
+ if (a >= 0) and (a < NCPS) and (b >= 0) and (b < NCPS) then
+ begin // AV: added interpolation type, with default value "linear / HSV"
+ case InputArgCount of
+ 3: ScriptEditor.cp.InterpolateAll(cps[a], cps[b], v, 3);
+ 4: ScriptEditor.cp.InterpolateAll(cps[a], cps[b], v, GetInputArgAsInteger(3));
+ else Exit;
+ end;
+ for i := 0 to NXFORMS - 1 do
+ if ScriptEditor.cp.xform[i].density = 0 then break;
+ NumTransforms := i;
+ end
+ else begin
+ LastError := Format('Morph(%d, %d, %g): ', [a, b, v]) +
+ TextByKey('script-status-varoutofrange');
+ RuntimeError(LastError);
+ Scripter.Halt;
+ if LoadForm.CheckBox1.Checked then LoadForm.Show; // AV: show errors
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.PreviewProc(AMachine: TatVirtualMachine);
+begin
+ if NumTransforms > 0 then
+ begin
+ //AMachine.Paused := True; // AV: it doesn't let to pause the animation
+ PreviewForm.cp.Copy(ScriptEditor.cp);
+ PreviewForm.cp.AdjustScale(PreviewForm.Image.Width, PreviewForm.Image.Height);
+ PreviewForm.Show;
+ PreviewForm.DrawFlame;
+ //AMachine.Paused := False; // AV: it doesn't let to pause the animation
+ Application.ProcessMessages;
+ end
+ else AMachine.Halt;
+end;
+
+procedure TOperationLibrary.RenderProc(AMachine: TatVirtualMachine);
+begin
+ if NumTransforms > 0 then
+ begin
+ ScriptRenderForm.cp.Copy(ScriptEditor.cp);
+ try
+ ScriptRenderForm.Caption := Format(ScriptRenderForm.Hint,
+ [ExtractFileName(ScriptEditor.Renderer.Filename)]); // AV
+ except
+ ScriptRenderForm.Caption := TextByKey('common-trace-rendering-oneslice');
+ end;
+ ScriptRenderForm.Show;
+ ScriptRenderForm.Render;
+ end
+ else AMachine.Halt;
+end;
+
+procedure TOperationLibrary.SetActiveTransformProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+begin
+ try
+ with AMachine do
+ i := GetInputArgAsInteger(0);
+ if (i >= 0) and (i < NXFORMS) then
+ ActiveTransform := i
+ else raise EFormatInvalid.Create('SetActiveTransform: ' + ErrorOutOfRange);
+ except on E: EFormatInvalid do
+ begin
+ Application.ProcessMessages;
+ LastError := E.Message;
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.AddTransformProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+begin
+ try
+ if NumTransforms < NXFORMS then
+ begin
+ ActiveTransform := NumTransforms;
+ inc(NumTransforms);
+ scriptEditor.cp.xform[NumTransforms].Assign(scriptEditor.cp.xform[ActiveTransform]);
+ scriptEditor.cp.xform[ActiveTransform].Clear;
+ ScriptEditor.cp.xform[ActiveTransform].density := 0.5;
+ end
+ else raise EFormatInvalid.Create('AddTransform: ' + TextByKey('script-status-toomanytransforms'));
+ except on E: EFormatInvalid do
+ begin
+ Application.ProcessMessages;
+ LastError := E.Message;
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.DeleteTransformProc(AMachine: TatVirtualMachine);
+var
+ i, j: integer;
+begin
+ try
+ // I'm not sure, but *maybe* this will help scripts not to screw up finalXform
+ if ActiveTransform = NumTransforms then
+ // final xform - just clear it
+ begin
+ scriptEditor.cp.xform[NumTransforms].Clear;
+ scriptEditor.cp.xform[NumTransforms].symmetry := 1;
+ scriptEditor.cp.finalXformEnabled := false;
+ exit;
+ end;
+ if NumTransforms <= 1 then exit;
+
+ // delete xform from all probability tables
+ for i := 0 to NumTransforms-1 do
+ with scriptEditor.cp.xform[i] do begin
+ for j := ActiveTransform to NumTransforms-1 do
+ modWeights[j] := modWeights[j+1];
+ modWeights[NumTransforms-1] := 1;
+ end;
+ //
+
+ with scriptEditor.cp do begin
+ if ActiveTransform = (NumTransforms - 1) then
+ Dec(ActiveTransform)
+ else begin
+ for i := ActiveTransform to NumTransforms - 2 do
+ xform[i].Assign(xform[i + 1]);
+ end;
+ Dec(NumTransforms);
+ xform[NumTransforms].Assign(xform[NumTransforms+1]);
+ xform[NumTransforms+1].Clear;
+ end;
+ except
+ Application.ProcessMessages;
+ LastError := 'DeleteTransform: Oops!';
+ i := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ ScriptEditor.Editor.ActiveLine := i;
+ ScriptEditor.Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+end;
+
+
+procedure TOperationLibrary.CopyTransformProc(AMachine: TatVirtualMachine);
+var
+ old, i: integer;
+begin
+ try
+ if NumTransforms < NXFORMS then
+ with ScriptEditor.cp do
+ begin
+ old := ActiveTransform;
+ ActiveTransform := NumTransforms;
+ inc(NumTransforms);
+ xform[NumTransforms].Assign(xform[ActiveTransform]); // final xform
+ xform[ActiveTransform].Assign(xform[old]);
+
+ for i := 0 to NumTransforms-1 do
+ xform[i].modWeights[ActiveTransform] := xform[i].modWeights[old];
+ xform[ActiveTransform].modWeights[ActiveTransform] := xform[old].modWeights[old];
+ end
+ else raise EFormatInvalid.Create(TextByKey('script-status-toomanytransforms'));
+ except on E: EFormatInvalid do
+ begin
+ Application.ProcessMessages;
+ LastError := 'CopyTransform: ' + E.Message;
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.TranslateProc(AMachine: TatVirtualMachine);
+var x, y: double;
+begin
+ if ScriptEditor.cp.xform[ActiveTransform].postXswap then
+ begin
+ TranslatePXProc(AMachine);
+ Exit;
+ end;
+ try
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then // was: NXFORMS-1
+ raise EFormatInvalid.Create(ErrorOutOfRange);
+ with AMachine do
+ // AV: matrix multiplication must not affect the translation
+ // ScriptEditor.cp.xform[ActiveTransform].Translate(GetInputArgAsFloat(0), GetInputArgAsFloat(1));
+ begin
+ x := GetInputArgAsFloat(0);
+ y := -1 * GetInputArgAsFloat(1);
+ end;
+ with ScriptEditor.cp.xform[ActiveTransform] do begin
+ c[2,0] := c[2,0] + x;
+ c[2,1] := c[2,1] + y;
+ end;
+ except on E: EFormatInvalid do
+ begin
+ Application.ProcessMessages;
+ LastError := 'Translate: ' + E.Message;
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.TranslatePXProc(AMachine: TatVirtualMachine);
+var x, y: double;
+begin
+ try
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then
+ raise EFormatInvalid.Create(ErrorOutOfRange);
+ with AMachine do
+ begin
+ x := GetInputArgAsFloat(0);
+ y := -1 * GetInputArgAsFloat(1);
+ end;
+ with ScriptEditor.cp.xform[ActiveTransform] do begin
+ p[2,0] := p[2,0] + x;
+ p[2,1] := p[2,1] + y;
+ end;
+ except on E: EFormatInvalid do
+ begin
+ Application.ProcessMessages;
+ LastError := 'TranslatePX:' + E.Message;
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TOperationLibrary.NormalizeVars(AMachine: TatVirtualMachine);
+begin
+ NormalizeVariations(ScriptEditor.cp);
+end;
+
+{ ************************************* Form ********************************* }
+
+procedure TScriptEditor.FormCreate(Sender: TObject);
+var
+ i: integer;
+begin
+ self.Caption := TextByKey('script-title');
+ btnBreak.Hint := TextByKey('script-break');
+ btnNew.Hint := TextByKey('script-new');
+ btnOpen.Hint := TextByKey('script-open');
+ btnSave.Hint := TextByKey('script-save');
+ btnRun.Hint := TextByKey('script-run');
+ btnStop.Hint := TextByKey('script-stop');
+ btnFavorite.Hint := TextByKey('script-faves');
+ CodeButton.Hint := TextByKey('script-codeblocks');
+ btnPause.Hint := TextByKey('script-pause');
+ ShowCodeHints.Caption := TextByKey('script-codeblockhints');
+ Panel1.Hint := TextByKey('script-codeblockhint');
+ mnuUndo.Caption := TextByKey('common-undo');
+ mnuRedo.Caption := TextByKey('common-redo');
+ mnuCut.Caption := TextByKey('common-cut');
+ mnuCopy.Caption := TextByKey('common-copy');
+ mnuPaste.Caption := TextByKey('common-paste');
+ mnuDeleteBlock.Caption := TextByKey('common-delete');
+ EditCaption1.Caption := TextByKey('common-rename');
+ FindReplace.Caption := TextByKey('script-findreplace');
+ SurroundBlock.Caption := TextByKey('script-surround');
+ CommentOut.Caption := TextByKey('script-commentout');
+ CollapseBlocks.Caption := TextByKey('script-collapsecode');
+ ExpandBlocks.Caption := TextByKey('script-expandcode');
+ AddFromClipboard.Caption := TextByKey('script-clipboardview');
+ ScrMemoFindReplaceDialog1.NotFoundMessage := TextByKey('script-textnotfound');
+ StatusBar.Hint := TextByKey('script-status-default');
+ StatusBar.SimpleText := StatusBar.Hint;
+
+ // AV: changed to variable
+ ErrorOutOfRange := TextByKey('script-status-outofrange');
+ RTError := #13#10 + TextByKey('script-runtimeerror') + #13#10 +
+ StringOfChar('=', length(TextByKey('script-runtimeerror'))) + #13#10;
+ DTError := #13#10 + TextByKey('script-compileerror') + #13#10 +
+ StringOfChar('=', length(TextByKey('script-compileerror'))) + #13#10;
+
+ // AV: added language translation here:
+ SaveDialog.Filter := TextByKey('common-filter-flamefiles') + '|*.flame;*rand;*.template|'
+ + TextByKey('common-filter-allfiles') + '|*.*';
+ OpenDialog.Filter := TextByKey('common-filter-flamefiles') + '|*.flame;*rand;*.template|' +
+ TextByKey('common-filter-scriptfiles') + '|*.asc;*aposcript|' +
+ TextByKey('common-filter-allfiles') + '|*.*';
+
+ Transform := TTransform.create;
+ FileList := TStringList.Create;
+ Flame := TFlame.Create;
+ Options := TOptions.Create;
+ Pivot := TPivot.Create;
+ Renderer := TScriptRender.create;
+ Another := TScriptRender.create;
+ cp := TControlPoint.create;
+ for i := 0 to 9 do
+ cps[i] := TControlPoint.create;
+ ScriptEditor.PrepareScripter;
+
+ if (defScriptFile <> '') then // AV
+ try
+ if FileExists(defScriptFile) then begin
+ LoadScriptFile(defScriptFile);
+ Script := defScriptFile;
+ end;
+ except
+ Editor.Lines.Clear;
+ end;
+
+ AdjustScripterColors; // AV: change scripter font ang background for dark themes
+end;
+
+procedure TScriptEditor.FormDestroy(Sender: TObject);
+var
+ i: integer;
+begin
+ FileList.Free;
+ Renderer.Free;
+ Another.Free;
+ for i := 0 to 9 do
+ cps[i].free;
+ cp.free;
+ Flame.Free;
+ Transform.Free;
+ Options.Free;
+ Pivot.Free;
+end;
+
+procedure TScriptEditor.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+begin
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Script', False) then
+ begin
+ { Size and position }
+ if Registry.ValueExists('Left') then
+ ScriptEditor.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ ScriptEditor.Top := Registry.ReadInteger('Top');
+ if Registry.ValueExists('Width') then
+ ScriptEditor.Width := Registry.ReadInteger('Width');
+ if Registry.ValueExists('Height') then
+ ScriptEditor.Height := Registry.ReadInteger('Height');
+ if Registry.ValueExists('PreviewFrame') then // AV
+ PreviewForm.KeepFrame.Checked := Registry.ReadBool('PreviewFrame');
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+
+ mnuUndo.Enabled := Editor.CanUndo; // AV
+ mnuRedo.Enabled := Editor.CanRedo; // AV
+end;
+
+procedure TScriptEditor.FormClose(Sender: TObject;
+ var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ { Defaults }
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Script', True) then
+ begin
+ { Size and position }
+ if ScriptEditor.WindowState <> wsMaximized then begin
+ Registry.WriteInteger('Top', ScriptEditor.Top);
+ Registry.WriteInteger('Left', ScriptEditor.Left);
+ Registry.WriteInteger('Width', ScriptEditor.Width);
+ Registry.WriteInteger('Height', ScriptEditor.Height);
+ Registry.WriteBool('PreviewFrame', PreviewForm.KeepFrame.Checked); // AV
+ end;
+ end;
+ finally
+ Registry.Free;
+ end;
+end;
+{ ************************ Flame interface *********************************** }
+
+{ The TFlame class is used only as an interface. The control point parameters
+ are read and set directly. Parameter ranges aren't limited but values not
+ in the correct range are ignored. }
+
+procedure TScriptEditor.GetFlameGammaThresholdProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.gammaThreshRelative);
+end;
+
+procedure TScriptEditor.SetFlameGammaThresholdProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v > 0) then cp.gammaThreshRelative := v;
+ end;
+end;
+
+procedure TScriptEditor.GetFlameGammaProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.Gamma);
+end;
+
+procedure TScriptEditor.SetFlameGammaProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v > 0) and (v <= 5) then cp.Gamma := v; // AV: added max check
+ end;
+end;
+
+procedure TScriptEditor.GetFlameBrightnessProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.Brightness);
+end;
+
+procedure TScriptEditor.SetFlameBrightnessProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v > 0) and (v <= 100) then cp.Brightness := v; // AV: added max check
+ end;
+end;
+
+procedure TScriptEditor.GetFlameVibrancyProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.Vibrancy);
+end;
+
+procedure TScriptEditor.SetFlameVibrancyProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v > 0) and (v <= 30) then cp.Vibrancy := v; // AV: added max check
+ end;
+end;
+
+procedure TScriptEditor.GetFlameContrastProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.Contrast); // AV
+end;
+
+procedure TScriptEditor.SetFlameContrastProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0.1) and (v <= 10) then cp.Contrast := v; // AV
+ end;
+end;
+
+procedure TScriptEditor.GetFlameTimeProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.Time);
+end;
+
+procedure TScriptEditor.SetFlameTimeProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0) then cp.Time := v;
+ end;
+end;
+
+procedure TScriptEditor.GetPreviewHeightProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(PreviewForm.ClientHeight);
+end;
+
+procedure TScriptEditor.SetPreviewHeightProc(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 100) and (v <= Screen.Height - 34) then
+ PreviewForm.ClientHeight:= v;
+ end;
+end;
+
+procedure TScriptEditor.GetPreviewWidthProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(PreviewForm.ClientWidth);
+end;
+
+procedure TScriptEditor.SetPreviewWidthProc(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 100) and (v <= Screen.Width - 16) then
+ PreviewForm.ClientWidth:= v;
+ end;
+end;
+
+procedure TScriptEditor.GetFlameZoomProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.Zoom);
+end;
+
+procedure TScriptEditor.SetFlameZoomProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= -3) and (v <= 3) then cp.Zoom := v; // AV: added check
+ end;
+end;
+
+procedure TScriptEditor.GetFlameXProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.center[0]);
+end;
+
+procedure TScriptEditor.SetFlameXProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.center[0] := GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.GetFlameYProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.center[1]);
+end;
+
+procedure TScriptEditor.SetFlameYProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.center[1] := GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.GetFlameDensityProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.sample_density);
+end;
+
+procedure TScriptEditor.SetFlameDensityProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if v >= 0 then cp.sample_density := v;
+ end;
+end;
+
+procedure TScriptEditor.GetFlameOversampleProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.spatial_oversample);
+end;
+
+procedure TScriptEditor.SetFlameOversampleProc(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ { Range = 1 to 4 ... (document this) }
+ if (v >= 1) and (v <= 4) then cp.spatial_oversample := v;
+ end;
+end;
+
+procedure TScriptEditor.GetFlameFilterRadiusProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.spatial_filter_radius);
+end;
+
+procedure TScriptEditor.SetFlameFilterRadiusProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if v >= 0 then cp.spatial_filter_radius := v;
+ end;
+end;
+
+procedure TScriptEditor.GetFlameFinalxformEnabledProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.finalXformEnabled);
+end;
+
+procedure TScriptEditor.SetFlameFinalxformEnabledProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.finalXformEnabled := (GetInputArgAsInteger(0) <> 0);
+end;
+
+procedure TScriptEditor.GetFlameSoloXformProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.soloXform);
+end;
+
+procedure TScriptEditor.SetFlameSoloXformProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.soloXform := GetInputArgAsInteger(0);
+ if (cp.soloXform < 0) or (cp.soloXform >= NumTransforms) then
+ cp.soloXform := -1;
+end;
+
+procedure TScriptEditor.GetFlameWidthProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.width);
+end;
+
+procedure TScriptEditor.SetFlameWidthProc(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if v >= 1 then cp.width := v;
+ end;
+end;
+
+procedure TScriptEditor.GetFlameHeightProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.height);
+end;
+
+procedure TScriptEditor.SetFlameHeightProc(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if v >= 1 then cp.height := v;
+ end;
+end;
+
+procedure TScriptEditor.GetFlamePixelsPerUnitProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+// ReturnOutPutArg(cp.pixels_per_unit);
+ ReturnOutPutArg(100 * cp.pixels_per_unit/cp.Width);
+end;
+
+procedure TScriptEditor.SetFlamePixelsPerUnitProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+// cp.pixels_per_unit := GetInputArgAsInteger(0); <<--- hmm, ppu isn't integer :-\
+ cp.pixels_per_unit := GetInputArgAsFloat(0) * cp.Width / 100.0;
+end;
+
+procedure TScriptEditor.GetFlamePaletteProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do // AV: was Integer(GetArrayIndex())
+ ReturnOutPutArg(cp.cmap[GetArrayIndexAsInteger(0), GetArrayIndexAsInteger(1)]);
+end;
+
+procedure TScriptEditor.SetFlamePaletteProc(AMachine: TatVirtualMachine);
+var
+ i0, i1, v: integer;
+begin
+ with AMachine do
+ begin
+ i0 := GetArrayIndexAsInteger(0); // AV: was GetArrayIndex(0)
+ i1 := GetArrayIndexAsInteger(1); // AV: was GetArrayIndex(1)
+ v := GetInputArgAsInteger(0);
+ if (i0 >= 0) and (i0 <= 255) and (i1 >= 0) and (i1 <= 2) and
+ (v >= 0) and (v < 256) then
+ cp.cmap[i0, i1] := v
+ else begin
+ LastError := 'Flame.Gradient[' + IntToStr(i0) + ', ' + IntToStr(i1) + ']: '
+ + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetFlameBackgroundProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do // AV: was Integer(GetArrayIndex(0))
+ ReturnOutPutArg(cp.background[GetArrayIndexAsInteger(0)]);
+end;
+
+procedure TScriptEditor.SetFlameBackgroundProc(AMachine: TatVirtualMachine);
+var
+ i, v: integer;
+begin
+ with AMachine do
+ begin
+ i := GetArrayIndexAsInteger(0); // AV: was GetArrayIndex(0)
+ v := GetInputArgAsInteger(0);
+ if (i >= 0) and (i <= 2) and (v >= 0) and (v < 256) then
+ cp.Background[i] := v
+ else begin
+ LastError := 'Flame.Background[' + IntToStr(i) + ']: '
+ + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.SetFlameNameProc(AMachine: TatVirtualMachine);
+begin
+ cp.name := AMachine.GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetFlameNameProc(AMachine: TatVirtualMachine);
+begin
+ AMachine.ReturnOutPutArg(cp.name);
+end;
+
+(*
+procedure TScriptEditor.SetFlameNickProc(AMachine: TatVirtualMachine);
+begin
+ cp.nick := AMachine.GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetFlameURLProc(AMachine: TatVirtualMachine);
+begin
+ AMachine.ReturnOutPutArg(cp.url);
+end;
+
+procedure TScriptEditor.SetFlameURLProc(AMachine: TatVirtualMachine);
+begin
+ cp.url := AMachine.GetInputArgAsString(0);
+end;
+
+procedure TScriptEditor.GetFlameNickProc(AMachine: TatVirtualMachine);
+begin
+ AMachine.ReturnOutPutArg(cp.nick);
+end;
+*)
+
+procedure TScriptEditor.SetFlameHueProc(AMachine: TatVirtualMachine);
+var
+ n: double;
+ //i: byte;
+ //h, s, v: real;
+begin
+ n := AMachine.GetInputArgAsFloat(0);
+ if (n >= 0) and (n <= 1) then
+ begin
+ cp.hue_rotation := n;
+ {if (n = 0) or (n = 1) then exit;
+ for i := 0 to 255 do
+ begin
+ RGBToHSV(cp.cmap[i][0], cp.cmap[i][1], cp.cmap[i][2], h, s, v);
+ h := Round(360 + h + (n * 360)) mod 360;
+ HSVToRGB(h, s, v, cp.cmap[i][0], cp.cmap[i][1], cp.cmap[i][2]);
+ end; }
+ end;
+end;
+
+procedure TScriptEditor.GetFlameHueProc(AMachine: TatVirtualMachine);
+begin
+ AMachine.ReturnOutPutArg(cp.hue_rotation);
+end;
+
+procedure TScriptEditor.GetFlameBatchesProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.nbatches);
+end;
+
+procedure TScriptEditor.SetFlameBatchesProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.nbatches := GetInputArgAsInteger(0);
+end;
+
+procedure TScriptEditor.GetFlameAngleProc(AMachine: TatVirtualMachine);
+var
+ v:double;
+begin
+ // AV: fixed, someone forgot to translate from/to radians
+ v := cp.FAngle * 180 / PI;
+ with AMachine do
+ ReturnOutPutArg(v);
+end;
+
+procedure TScriptEditor.SetFlameAngleProc(AMachine: TatVirtualMachine);
+var
+ v:double;
+begin
+ // AV: fixed, someone forgot to translate from/to radians
+ with AMachine do
+ v := GetInputArgAsFloat(0);
+ cp.FAngle := v * PI / 180;
+end;
+
+procedure TScriptEditor.GetFlamePitchProc(AMachine: TatVirtualMachine);
+var
+ v:double;
+begin
+ // fix: someone forgot to translate from/to radians
+ v := cp.cameraPitch * 180 / PI;
+ with AMachine do
+ ReturnOutPutArg(v);
+end;
+
+procedure TScriptEditor.SetFlamePitchProc(AMachine: TatVirtualMachine);
+var
+ v:double;
+begin
+ // fix: someone forgot to translate from/to radians
+ with AMachine do
+ v := GetInputArgAsFloat(0);
+ cp.cameraPitch := v * PI / 180;
+end;
+
+procedure TScriptEditor.GetFlameRollProc(AMachine: TatVirtualMachine);
+var
+ v:double;
+begin
+ // fix: someone forgot to translate from/to radians
+ v := cp.cameraRoll * 180 / PI;
+ with AMachine do
+ ReturnOutPutArg(v);
+end;
+
+procedure TScriptEditor.SetFlameRollProc(AMachine: TatVirtualMachine);
+var
+ v:double;
+begin
+ // fix: someone forgot to translate from/to radians
+ with AMachine do
+ v := GetInputArgAsFloat(0);
+ cp.cameraRoll := v * PI / 180;
+end;
+
+procedure TScriptEditor.GetFlameYawProc(AMachine: TatVirtualMachine);
+var
+ v:double;
+begin
+ // fix: someone forgot to translate from/to radians
+ v := cp.cameraYaw * 180 / PI;
+ with AMachine do
+ ReturnOutPutArg(v);
+end;
+
+procedure TScriptEditor.SetFlameYawProc(AMachine: TatVirtualMachine);
+var
+ v:double;
+begin
+ // fix: someone forgot to translate from/to radians
+ with AMachine do
+ v := GetInputArgAsFloat(0);
+ cp.cameraYaw := v * PI / 180;
+end;
+
+procedure TScriptEditor.GetFlameCamZposProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.cameraZpos);
+end;
+
+procedure TScriptEditor.SetFlameCamZposProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.cameraZpos := GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.GetFlamePerspectiveProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.cameraPersp);
+end;
+
+procedure TScriptEditor.SetFlamePerspectiveProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.cameraPersp := GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.GetFlameDOFProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.cameraDOF);
+end;
+
+procedure TScriptEditor.SetFlameDOFProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.cameraDOF := GetInputArgAsFloat(0);
+end;
+
+{ *************************** Transform interface **************************** }
+
+procedure TScriptEditor.GetTransformPostxformEnabledProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].postXswap);
+end;
+
+procedure TScriptEditor.SetTransformPostxformEnabledProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.xform[ActiveTransform].postXswap := (GetInputArgAsInteger(0) <> 0);
+end;
+///////////////////////////////
+procedure TScriptEditor.GetTransformAProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].c[0, 0]);
+end;
+
+procedure TScriptEditor.SetTransformAProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.xform[ActiveTransform].c[0, 0] := GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.GetTransformBProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ v := cp.xform[ActiveTransform].c[1, 0];
+ with AMachine do
+ ReturnOutPutArg(-v); // AV: fixed the sign
+end;
+
+procedure TScriptEditor.SetTransformBProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ v := GetInputArgAsFloat(0);
+ cp.xform[ActiveTransform].c[1, 0] := -v; // AV: fixed the sign
+end;
+
+procedure TScriptEditor.GetTransformCProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ v := cp.xform[ActiveTransform].c[0, 1];
+ with AMachine do
+ ReturnOutPutArg(-v); // AV: fixed the sign
+end;
+
+procedure TScriptEditor.SetTransformCProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ v := GetInputArgAsFloat(0);
+ cp.xform[ActiveTransform].c[0, 1] := -v; // AV: fixed the sign
+end;
+
+procedure TScriptEditor.GetTransformDProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].c[1, 1]);
+end;
+
+procedure TScriptEditor.SetTransformDProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.xform[ActiveTransform].c[1, 1] := GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.GetTransformEProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].c[2, 0]);
+end;
+
+procedure TScriptEditor.SetTransformEProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ cp.xform[ActiveTransform].c[2, 0] := GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.GetTransformFProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ v := cp.xform[ActiveTransform].c[2, 1];
+ with AMachine do
+ ReturnOutPutArg(-v); // AV: fixed the sign
+end;
+
+procedure TScriptEditor.SetTransformFProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ v := GetInputArgAsFloat(0);
+ cp.xform[ActiveTransform].c[2, 1] := -v; // AV: fixed the sign
+end;
+
+procedure TScriptEditor.GetTransformColorProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].Color);
+end;
+
+procedure TScriptEditor.SetTransformColorProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0) and (v <= 1) then
+ cp.xform[ActiveTransform].Color := v
+ else begin
+ LastError := 'Transform.Color: ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetTransformVarColorProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].pluginColor);
+end;
+
+procedure TScriptEditor.SetTransformVarColorProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0) and (v <= 1) then
+ cp.xform[ActiveTransform].pluginColor := v
+ else begin
+ LastError := 'Transform.VarColor: ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetTransformWeightProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].density);
+end;
+
+procedure TScriptEditor.SetTransformWeightProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 1E-6) and (v <= MAX_WEIGHT) then // AV: was min=0 that is not allowed
+ cp.xform[ActiveTransform].density := v
+ else begin
+ LastError := 'Transform.Weight: ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetTransformSymProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].symmetry);
+end;
+
+procedure TScriptEditor.SetTransformSymProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+ s: string;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= -1) and (v <= 1) then
+ cp.xform[ActiveTransform].symmetry := v
+ else begin
+ s := AMachine.CurrentPropertyName;
+ LastError := 'Transform.' + s + ': ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetTransformVarProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do // AV: was GetArrayIndex(0)
+ ReturnOutPutArg(cp.xform[ActiveTransform].GetVariation(GetArrayIndexAsInteger(0)));
+end;
+
+procedure TScriptEditor.SetTransformVarProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+ i: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ i := GetArrayIndexAsInteger(0); // AV: was GetArrayIndex(0)
+ if (i >= 0) and (i < NRVAR) then
+ cp.xform[ActiveTransform].SetVariation(i, v);
+ end;
+end;
+
+procedure TScriptEditor.GetTransformVariProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do begin // AV: was GetArrayIndex(0)
+ cp.xform[ActiveTransform].GetVariable(GetVariableNameAt(GetArrayIndexAsInteger(0)), v);
+ ReturnOutPutArg(v);
+ end;
+end;
+
+procedure TScriptEditor.SetTransformVariProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+ i: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ i := GetArrayIndexAsInteger(0); // AV: was GetArrayIndex(0)
+ if (i >= 0) and (i < GetNrVariableNames) then
+ cp.xform[ActiveTransform].SetVariable(GetVariableNameAt(i), v);
+ end;
+end;
+
+procedure TScriptEditor.GetTransformChaosProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(cp.xform[ActiveTransform].modWeights[Integer(GetArrayIndex(0))]);
+end;
+
+procedure TScriptEditor.SetTransformChaosProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+ i: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ i := GetArrayIndexAsInteger(0); // AV: was GetArrayIndex(0)
+ if (i >= 0) and (i < NumTransforms) then
+ cp.xform[ActiveTransform].modWeights[i] := v
+ else begin
+ LastError := 'Transform.Chaos[' + IntToStr(i) + ']: '
+ + TextByKey('script-status-varoutofrange');
+ i := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLine := i; // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetTransformPlotModeProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ if cp.xform[ActiveTransform].transOpacity=0 then
+ ReturnOutPutArg(1)
+ else
+ ReturnOutPutArg(0);
+end;
+
+procedure TScriptEditor.SetTransformPlotModeProc(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v <> 0) then cp.xform[ActiveTransform].transOpacity := 1
+ else cp.xform[ActiveTransform].transOpacity := 0;
+ end;
+end;
+
+procedure TScriptEditor.GetTransformOpacityProc(AMachine: TatVirtualMachine);
+begin
+ AMachine.ReturnOutPutArg(cp.xform[ActiveTransform].transOpacity)
+end;
+
+procedure TScriptEditor.SetTransformOpacityProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ if (v >= 0) and (v <= 1) then // AV: add a check
+ cp.xform[ActiveTransform].transOpacity := v
+ else begin // AV: add error handler
+ LastError := 'Transform.Opacity: ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+// -- vars as props --
+
+procedure TScriptEditor.GetTransformVariationProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+ v: double;
+begin
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.Variation[]: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ with AMachine do
+ begin
+ i := 0;
+ while (i < NRVAR) and (Lowercase(varnames(i)) <> Lowercase(CurrentPropertyName)) do Inc(i);
+ if (i < NRVAR) then
+ ReturnOutPutArg(cp.xform[ActiveTransform].GetVariation(i))
+ else begin // shouldn't happen
+ LastError := 'Cannot find variation at index ' + CurrentPropertyName + ' - ignoring';
+ // ScriptEditor.Console.Lines.Add(LastError);
+ // Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.SetTransformVariationProc(AMachine: TatVirtualMachine);
+var
+ i: integer;
+ v: double;
+begin
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.Variation[]: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ with AMachine do
+ begin
+ i := 0;
+ while (i < NRVAR) and (lowercase(varnames(i)) <> lowercase(CurrentPropertyName)) do Inc(i);
+ if (i < NRVAR) then
+ cp.xform[ActiveTransform].SetVariation(i, GetInputArgAsFloat(0))
+ else begin // shouldn't happen
+ LastError := 'Cannot find variation at index ' + CurrentPropertyName + ' - ignoring';
+ // ScriptEditor.Console.Lines.Add(LastError);
+ // Scripter.Halt;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.GetTransformVariableProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.Variable[]: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ with AMachine do
+ begin
+ cp.xform[ActiveTransform].GetVariable(CurrentPropertyName, v);
+ ReturnOutPutArg(v);
+ end;
+end;
+
+procedure TScriptEditor.SetTransformVariableProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+begin
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.Variable[]: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ with AMachine do
+ begin
+ v := GetInputArgAsFloat(0);
+ cp.xform[ActiveTransform].SetVariable(CurrentPropertyName, v);
+ end
+end;
+
+//////////// Variaton Order Utils ///////////
+procedure TScriptEditor.TransformMoveVarProc(AMachine: TatVirtualMachine);
+var
+ v: string;
+ i, n: integer;
+begin
+ with AMachine do begin
+ v := GetInputArgAsString(0); // name
+ n := GetInputArgAsInteger(1); // position
+ end;
+ i := GetVariationIndex(v);
+ if (i >= 0) and (n >= 0) and (n < NrVar) then
+ begin
+ i := cp.xform[ActiveTransform].ifs.IndexOf(v);
+ cp.xform[ActiveTransform].ifs.Move(i, n);
+ end;
+end;
+
+procedure TScriptEditor.TransformExchangeVarsProc(AMachine: TatVirtualMachine);
+var
+ v, s: string;
+ i, n: integer;
+begin
+ with AMachine do begin
+ v := GetInputArgAsString(0);
+ s := GetInputArgAsString(1);
+ end;
+ i := GetVariationIndex(v);
+ n := GetVariationIndex(s);
+ if (i >= 0) and (i < NrVar) and (n >= 0) and (n < NrVar) then
+ cp.xform[ActiveTransform].ifs.Exchange(i, n);
+end;
+
+procedure TScriptEditor.TransformCopyVarOrderProc(AMachine: TatVirtualMachine);
+var i: integer;
+begin
+ i := AMachine.GetInputArgAsInteger(0);
+ if (i <> ActiveTransform) and (i >= 0) and (i <= Transforms) then
+ cp.xform[ActiveTransform].ifs.Assign(cp.xform[i].ifs);
+end;
+
+procedure TScriptEditor.TransformGetVarOrderProc(AMachine: TatVirtualMachine);
+var v: string;
+ i: integer;
+begin
+ with AMachine do
+ v := GetInputArgAsString(0);
+ i := cp.xform[ActiveTransform].ifs.IndexOf(v);
+ AMachine.ReturnOutPutArg(i);
+end;
+
+procedure TScriptEditor.TransformSortVarsProc(AMachine: TatVirtualMachine);
+begin
+ cp.xform[ActiveTransform].ifs.Sort;
+ cp.xform[ActiveTransform].ifs.Sorted := False;
+end;
+
+procedure TScriptEditor.TransformDefaultVarOrderProc(AMachine: TatVirtualMachine);
+var i: integer;
+begin
+ for i := 0 to NrVar-1 do
+ cp.xform[ActiveTransform].ifs.Strings[i] := Varnames(i);
+end;
+
+procedure TScriptEditor.TransformDisplayVarsProc(AMachine: TatVirtualMachine);
+var i: integer;
+begin
+ Console.Lines.Add('');
+ if ActiveTransform = Transforms then
+ Console.Lines.Add('Variation Order for Final Transform')
+ else
+ Console.Lines.Add('Variation Order for Transform ' + IntToStr(ActiveTransform + 1));
+ Console.Lines.Add('===========================');
+ for i := 0 to NrVar-1 do
+ Console.Lines.Add(IntToStr(i) + #32#32 + cp.xform[ActiveTransform].ifs.Strings[i]);
+end;
+////////////////////////////////////////////
+
+procedure TScriptEditor.GetTransformNameProc(AMachine: TatVirtualMachine);
+begin
+ if (ActiveTransform < 0) or (ActiveTransform >= Transforms) then begin
+ LastError := 'Transform.Name: ' + ErrorOutOfRange;
+ Editor.ActiveLine := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ exit;
+ end;
+
+ with AMachine do ReturnOutputArg(cp.xform[ActiveTransform].TransformName);
+end;
+
+procedure TScriptEditor.SetTransformNameProc(AMachine: TatVirtualMachine);
+begin
+ if (ActiveTransform < 0) or (ActiveTransform >= Transforms) then begin
+ LastError := 'Transform.Name: ' + ErrorOutOfRange;
+ Editor.ActiveLine := LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ exit;
+ end;
+
+ with AMachine do
+ cp.xform[ActiveTransform].TransformName := GetInputArgAsString(0);;
+end;
+
+// -- coefs & post-coefs --
+
+procedure TScriptEditor.GetTransformCoefsProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+ i, j: integer;
+begin
+{
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.coefs[]: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+}
+ with AMachine do begin
+ i := GetArrayIndex(0);
+ j := GetArrayIndex(1);
+ if (i < 0) or (i > 2) or (j < 0) or (j > 1) then begin
+ LastError := 'Transform.coefs[]: ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ exit;
+ end;
+ v := cp.xform[ActiveTransform].c[i, j];
+ if (i=0)and(j=0) or (i=1)and(j=1) or (i=2)and(j=0) then
+ ReturnOutPutArg(v)
+ else
+ ReturnOutPutArg(-v);
+ end;
+end;
+
+procedure TScriptEditor.SetTransformCoefsProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+ i, j: integer;
+begin
+{
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.coefs[]: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+}
+ with AMachine do
+ begin
+ i := GetArrayIndex(0);
+ j := GetArrayIndex(1);
+ if (i < 0) or (i > 2) or (j < 0) or (j > 1) then begin
+ LastError := 'Transform.coefs[]: ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ exit;
+ end;
+ v := GetInputArgAsFloat(0);
+ if (i=0)and(j=0) or (i=1)and(j=1) or (i=2)and(j=0) then
+ cp.xform[ActiveTransform].c[i, j] := v
+ else if (i=0)and(j=1) or (i=1)and(j=0) or (i=2)and(j=1) then
+ cp.xform[ActiveTransform].c[i, j] := -v;
+ end;
+end;
+
+procedure TScriptEditor.GetTransformPostCoefsProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+ i, j: integer;
+begin
+{
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.post[]: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+}
+ with AMachine do begin
+ i := GetArrayIndex(0);
+ j := GetArrayIndex(1);
+ if (i < 0) or (i > 2) or (j < 0) or (j > 1) then begin
+ LastError := 'Transform.post[]: ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ exit;
+ end;
+ v := cp.xform[ActiveTransform].p[i, j];
+ if (i=0)and(j=0) or (i=1)and(j=1) or (i=2)and(j=0) then
+ ReturnOutPutArg(v)
+ else
+ ReturnOutPutArg(-v);
+ end;
+end;
+
+procedure TScriptEditor.SetTransformPostCoefsProc(AMachine: TatVirtualMachine);
+var
+ v: double;
+ i, j: integer;
+begin
+{
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.post[]: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+}
+ with AMachine do
+ begin
+ i := GetArrayIndex(0);
+ j := GetArrayIndex(1);
+ if (i < 0) or (i > 2) or (j < 0) or (j > 1) then begin
+ LastError := 'Transform.post[]: ' + TextByKey('script-status-varoutofrange');
+ Editor.ActiveLine :=
+ LineNumberFromInstruction(AMachine.CurrentInstruction); // AV
+ Editor.ActiveLineSettings.ShowActiveLine := true; // AV
+ Scripter.Halt;
+ exit;
+ end;
+ v := GetInputArgAsFloat(0);
+ if (i=0)and(j=0) or (i=1)and(j=1) or (i=2)and(j=0) then
+ cp.xform[ActiveTransform].p[i, j] := v
+ else if (i=0)and(j=1) or (i=1)and(j=0) or (i=2)and(j=1) then
+ cp.xform[ActiveTransform].p[i, j] := -v;
+ end;
+end;
+
+procedure TScriptEditor.TransformSwapCoefsProc(AMachine: TatVirtualMachine);
+var
+ i, j: integer;
+ t: double;
+begin
+ with cp.xform[ActiveTransform] do
+ for i := 0 to 2 do
+ for j := 0 to 1 do
+ begin
+ t := c[i, j];
+ c[i,j] := p[i, j];
+ p[i, j] := t;
+ end;
+end;
+
+procedure TScriptEditor.TransformResetVariables(AMachine: TatVirtualMachine);
+var i: integer;
+begin
+ for i:= 0 to GetNrVariableNames - 1 do begin
+ cp.xform[ActiveTransform].ResetVariable(GetVariableNameAt(i));
+ end;
+end;
+
+procedure TScriptEditor.CodeButtonClick(Sender: TObject);
+begin
+ Panel1.Visible := not Panel1.Visible;
+ CodeButton.Down := Panel1.Visible;
+end;
+
+procedure TScriptEditor.CollapseBlocksClick(Sender: TObject);
+begin
+ Editor.CollapseAllNodes;
+end;
+
+procedure TScriptEditor.SurroundByClick(Sender: TObject); // AV: for code auto-completition
+var i, j, k, m: integer;
+begin
+ if Sender = N5 then
+ Editor.Selection := ' { ' + Editor.Selection + ' } '
+ else if Sender = N6 then
+ Editor.Selection := ' (* ' + Editor.Selection + ' *) '
+ else if Sender = N7 then
+ with Editor do begin
+ if (SelStartY = SelEndY) then
+ InsertTextAtXY( ' // ', SelStartX, SelStartY)
+ else begin
+ mnuUndo.Enabled := True;
+ BeginUpdate;
+ if (SelStartY > SelEndY) then
+ begin
+ j := SelEndX;
+ k := SelEndY;
+ m := SelStartY;
+ end
+ else begin
+ j := SelStartX;
+ k := SelStartY;
+ m := SelEndY;
+ end;
+ for i := k + 1 to m do
+ InsertTextAtXY(' // ', 0, i);
+ InsertTextAtXY(' // ', j, k);
+ EndUpdate;
+ end;
+ end
+ else
+ with Editor do
+ begin
+ //if SelLength = 0 then exit;
+ mnuUndo.Enabled := True;
+ BeginUpdate;
+ if (SelEndY = Lines.Count-1) then Lines.Add('');
+ if (SelStartY > SelEndY) then
+ begin
+ k := SelEndY;
+ m := SelStartY;
+ end
+ else begin
+ k := SelStartY;
+ m := SelEndY;
+ end;
+ BlockIndent(k, m, 4);
+ if Sender = BeginEnd1 then begin
+ InsertTextAtXY('begin'#13#10, 0, k);
+ InsertTextAtXY('end;'#13#10, 0, m + 2);
+ end
+ else begin // if Sender = TryExcept1
+ InsertTextAtXY('try'#13#10, 0, k);
+ InsertTextAtXY('except'#13#10#13#10'end;'#13#10, 0, m + 2);
+ end;
+ EndUpdate;
+ end;
+end;
+
+procedure TScriptEditor.TransformClearProc(AMachine: TatVirtualMachine);
+begin
+ cp.xform[ActiveTransform].Clear;
+ if ActiveTransform < Transforms then
+ cp.xform[ActiveTransform].density := 0.5
+ else
+ cp.xform[ActiveTransform].symmetry := 1;
+end;
+
+procedure TScriptEditor.TransformRotateOriginProc(AMachine: TatVirtualMachine);
+var
+ tx, ty, rad, sinr, cosr: double;
+begin
+
+ if cp.xform[ActiveTransform].postXswap then
+ begin
+ TransformRotatePXOriginProc(AMachine);
+ Exit;
+ end;
+
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.RotateOrigin: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ rad := AMachine.GetInputArgAsFloat(0) * pi / 180;
+ SinCos(rad, sinr, cosr);
+ with EditForm.WorldPivot do
+ with cp.xform[ActiveTransform] do begin
+ tx := x + (c[2,0] - x) * cosr - (-c[2,1] - y) * sinr;
+ ty := y + (c[2,0] - x) * sinr + (-c[2,1] - y) * cosr;
+ c[2,0] := tx;
+ c[2,1] := -ty;
+ end;
+end;
+
+procedure TScriptEditor.TransformRotatePXOriginProc(AMachine: TatVirtualMachine);
+var
+ tx, ty, rad, sinr, cosr: double;
+begin
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ LastError := 'Transform.RotatePXOrigin: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ rad := AMachine.GetInputArgAsFloat(0) * pi / 180;
+ SinCos(rad, sinr, cosr);
+ with EditForm.WorldPivot do
+ with cp.xform[ActiveTransform] do begin
+ tx := x + (p[2,0] - x) * cosr - (-p[2,1] - y) * sinr;
+ ty := y + (p[2,0] - x) * sinr + (-p[2,1] - y) * cosr;
+ p[2,0] := tx;
+ p[2,1] := -ty;
+ end;
+end;
+
+// AV -- pivot-aware reflections --
+
+procedure TScriptEditor.TransformFlipHorizProc(AMachine: TatVirtualMachine);
+begin
+ if cp.xform[ActiveTransform].postXswap then
+ begin
+ TransformFlipPXHorizProc(AMachine);
+ Exit;
+ end;
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ LastError := 'Transform.FlipHoriz: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ with cp.xform[ActiveTransform] do
+ begin
+ c[0,0] := -c[0,0];
+ c[1,0] := -c[1,0];
+ with EditForm do
+ if (PivotMode = PivotWorld) then
+ c[2,0] := 2 * WorldPivot.x - c[2,0];
+ end;
+end;
+
+procedure TScriptEditor.TransformFlipPXHorizProc(AMachine: TatVirtualMachine);
+begin
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ LastError := 'Transform.FlipPXHoriz: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ with cp.xform[ActiveTransform] do
+ begin
+ p[0,0] := -p[0,0];
+ p[1,0] := -p[1,0];
+ with EditForm do
+ if (PivotMode = PivotWorld) then
+ p[2,0] := 2 * WorldPivot.x - p[2,0];
+ end;
+end;
+
+procedure TScriptEditor.TransformFlipVertProc(AMachine: TatVirtualMachine);
+begin
+ if cp.xform[ActiveTransform].postXswap then
+ begin
+ TransformFlipPXVertProc(AMachine);
+ Exit;
+ end;
+
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ LastError := 'Transform.FlipVert: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ with cp.xform[ActiveTransform] do
+ begin
+ c[0,1] := -c[0,1];
+ c[1,1] := -c[1,1];
+ with EditForm do
+ if (PivotMode = PivotWorld) then
+ c[2,1] := -2 * WorldPivot.y - c[2,1];
+ end;
+end;
+
+procedure TScriptEditor.TransformFlipPXVertProc(AMachine: TatVirtualMachine);
+begin
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ LastError := 'Transform.FlipPXVert: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ with cp.xform[ActiveTransform] do
+ begin
+ p[0,1] := -p[0,1];
+ p[1,1] := -p[1,1];
+ with EditForm do
+ if (PivotMode = PivotWorld) then
+ p[2,1] := -2 * WorldPivot.y - p[2,1];
+ end;
+end;
+
+// -- pivot-aware rotating & scaling --
+
+procedure TScriptEditor.TransformRotateProc(AMachine: TatVirtualMachine);
+var
+ Triangles: TTriangles;
+ px, py: double;
+
+ tx: TXForm;
+begin
+ if cp.xform[ActiveTransform].postXswap then
+ begin
+ TransformRotatePXProc(AMachine);
+ Exit;
+ end;
+
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ LastError := 'Transform.Rotate: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ tx := TXForm.Create;
+ tx.Assign(scripteditor.cp.xform[NumTransforms]); // just in case (?)
+
+ EditForm.ScriptGetPivot(px, py);
+ cp.TrianglesFromCp(Triangles); // it's ugly but it works...
+ Triangles[ActiveTransform] :=
+ RotateTrianglePoint(Triangles[ActiveTransform], px, py, AMachine.GetInputArgAsFloat(0) * pi / 180);
+ cp.GetFromTriangles(Triangles, NumTransforms);
+
+ cp.xform[NumTransforms].Assign(tx);
+ tx.Free;
+end;
+
+procedure TScriptEditor.TransformScaleProc(AMachine: TatVirtualMachine);
+var
+ Triangles: TTriangles;
+ px, py: double;
+
+ tx: TXForm;
+begin
+ if cp.xform[ActiveTransform].postXswap then
+ begin
+ TransformScalePXProc(AMachine);
+ Exit;
+ end;
+
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.Scale: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+
+ tx := TXForm.Create;
+ tx.Assign(scripteditor.cp.xform[NumTransforms]); // just in case (?)
+
+ EditForm.ScriptGetPivot(px, py);
+ cp.TrianglesFromCp(Triangles); // it's ugly but it works...
+ Triangles[ActiveTransform] :=
+ ScaleTrianglePoint(Triangles[ActiveTransform], px, py, AMachine.GetInputArgAsFloat(0));
+ cp.GetFromTriangles(Triangles, NumTransforms);
+
+ cp.xform[NumTransforms].Assign(tx);
+ tx.Free;
+end;
+
+procedure TScriptEditor.TransformScalePXProc(AMachine: TatVirtualMachine);
+var
+ i, j: integer;
+ s: double;
+begin
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then begin
+ // ScriptEditor.Console.Lines.Add(ErrorOutOfRange);
+ LastError := 'Transform.ScalePX: ' + ErrorOutOfRange;
+ Scripter.Halt;
+ exit;
+ end;
+ s := AMachine.GetInputArgAsFloat(0);
+ with cp.xform[ActiveTransform] do
+ begin
+ for i := 0 to 1 do
+ for j:= 0 to 1 do
+ p[i,j] := p[i,j] * s;
+ with EditForm do
+ if (PivotMode = PivotWorld) then
+ begin
+ p[2,0] := WorldPivot.x + (p[2,0]- WorldPivot.x) * s;
+ p[2,1] := -WorldPivot.y + (p[2,1]+ WorldPivot.y) * s;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.TransformRotatePXProc(AMachine: TatVirtualMachine);
+var
+ v, tx, ty, tx0, tx1, ty0, ty1, sv, cv: double;
+begin
+ try
+ if (ActiveTransform < 0) or (ActiveTransform > NXFORMS) then
+ raise EFormatInvalid.Create('Transform.RotatePX: ' + ErrorOutOfRange);
+ with AMachine do
+ v := GetInputArgAsFloat(0) * PI / 180;
+ SinCos(v, sv, cv);
+ with cp.xform[ActiveTransform] do
+ begin
+ tx0 := p[0,0] * cv - (-p[0,1] * sv);
+ tx1 := p[0,0] * sv + (-p[0,1] * cv);
+ ty0 := -p[1,0] * cv - p[1,1] * sv;
+ ty1 := -p[1,0] * sv + p[1,1] * cv;
+ p[0,0] := tx0;
+ p[0,1] := -tx1;
+ p[1,0] := -ty0;
+ p[1,1] := ty1;
+ with EditForm do
+ if (PivotMode = PivotWorld) then
+ begin
+ tx := WorldPivot.x + (p[2,0] - WorldPivot.x) * cv - (-p[2,1] - WorldPivot.y) * sv;
+ ty := WorldPivot.y + (p[2,0] - WorldPivot.x) * sv + (-p[2,1] - WorldPivot.y) * cv;
+ p[2,0] := tx;
+ p[2,1] := -ty;
+ end;
+ end;
+ except on E: EFormatInvalid do
+ begin
+ Application.ProcessMessages;
+ LastError := 'Transform.RotatePX: ' + E.Message;
+ Scripter.Halt;
+ end;
+ end;
+end;
+
+{ *************************** Render interface ****************************** }
+
+
+procedure TScriptEditor.GetRenderEmbedParams(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutputArg(TScriptRender(CurrentObject).EmbedParameters);
+end;
+
+procedure TScriptEditor.SetRenderEmbedParams(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ TScriptRender(CurrentObject).EmbedParameters := GetInputArgAsBoolean(0);
+end;
+
+procedure TScriptEditor.GetRenderFilenameProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(TScriptRender(CurrentObject).Filename);
+end;
+
+procedure TScriptEditor.SetRenderFilenameProc(AMachine: TatVirtualMachine);
+var rdir: string;
+begin
+ rdir := AMachine.GetInputArgAsString(0);
+ if DirectoryExists(ExtractFilePath(rdir)) then
+ begin // AV
+ if ExtractFileExt(rdir) = '' then
+ rdir := rdir + '.jpg';
+ TScriptRender(AMachine.CurrentObject).Filename := rdir;
+ end
+ else begin
+ LastError := 'Renderer.FileName: ' + TextByKey('render-status-pathdoesnotexist');
+ AMachine.RuntimeError(LastError); // AV
+ AMachine.Halt;
+ if LoadForm.CheckBox1.Checked then LoadForm.Show; // AV
+ end;
+end;
+
+procedure TScriptEditor.GetRenderWidthProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(TScriptRender(CurrentObject).Width);
+end;
+
+procedure TScriptEditor.SetRenderWidthProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ TScriptRender(CurrentObject).Width := GetInputArgAsInteger(0);
+end;
+
+procedure TScriptEditor.GetRenderHeightProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(TScriptRender(CurrentObject).Height);
+end;
+
+procedure TScriptEditor.SetRenderHeightProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ TScriptRender(CurrentObject).Height := GetInputArgAsInteger(0);
+end;
+
+procedure TScriptEditor.GetRenderMaxMemoryProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do
+ ReturnOutPutArg(TScriptRender(CurrentObject).MaxMemory);
+end;
+
+procedure TScriptEditor.SetRenderMaxMemoryProc(AMachine: TatVirtualMachine);
+var
+ v: integer;
+begin
+ with AMachine do
+ begin
+ v := GetInputArgAsInteger(0);
+ if (v >= 0) then
+ TScriptRender(CurrentObject).MaxMemory := v;
+ end;
+end;
+
+{ **************************************************************************** }
+
+procedure TScriptEditor.GetPivotModeProc(AMachine: TatVirtualMachine);
+begin
+ AMachine.ReturnOutputArg(Integer(EditForm.PivotMode));
+end;
+
+procedure TScriptEditor.SetPivotModeProc(AMachine: TatVirtualMachine);
+var
+ n: integer;
+begin
+ n := AMachine.GetInputArgAsInteger(0);
+ if n = 0 then
+ EditForm.PivotMode := pivotLocal
+ else
+ EditForm.PivotMode := pivotWorld;
+end;
+
+procedure TScriptEditor.GetPivotXProc(AMachine: TatVirtualMachine);
+begin
+// EditForm.ScriptGetPivot(px, py);
+// AMachine.ReturnOutputArg(px);
+ if EditForm.PivotMode = pivotLocal then
+ AMachine.ReturnOutputArg(EditForm.LocalPivot.x)
+ else
+ AMachine.ReturnOutputArg(EditForm.WorldPivot.x);
+end;
+
+procedure TScriptEditor.SetPivotXProc(AMachine: TatVirtualMachine);
+begin
+ if EditForm.PivotMode = pivotLocal then
+ EditForm.LocalPivot.x := AMachine.GetInputArgAsFloat(0)
+ else
+ EditForm.WorldPivot.x := AMachine.GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.GetPivotYProc(AMachine: TatVirtualMachine);
+begin
+// EditForm.ScriptGetPivot(px, py);
+// AMachine.ReturnOutputArg(py);
+ if EditForm.PivotMode = pivotLocal then
+ AMachine.ReturnOutputArg(EditForm.LocalPivot.y)
+ else
+ AMachine.ReturnOutputArg(EditForm.WorldPivot.y);
+end;
+
+procedure TScriptEditor.SetPivotYProc(AMachine: TatVirtualMachine);
+begin
+ if EditForm.PivotMode = pivotLocal then
+ EditForm.LocalPivot.y := AMachine.GetInputArgAsFloat(0)
+ else
+ EditForm.WorldPivot.y := AMachine.GetInputArgAsFloat(0);
+end;
+
+procedure TScriptEditor.SetPivotProc(AMachine: TatVirtualMachine);
+begin
+ with AMachine do begin
+ if EditForm.PivotMode = pivotLocal then begin
+ EditForm.LocalPivot.x := GetInputArgAsFloat(0);
+ EditForm.LocalPivot.y := GetInputArgAsFloat(1);
+ end
+ else begin
+ EditForm.WorldPivot.x := GetInputArgAsFloat(0);
+ EditForm.WorldPivot.y := GetInputArgAsFloat(1);
+ end;
+ end;
+end;
+
+procedure TScriptEditor.ResetPivotProc(AMachine: TatVirtualMachine);
+begin
+ try // AV: scripter crashes here when pivot = (0,0)
+ EditForm.btnResetPivotClick(nil);
+ except
+ end; // all the work is already done
+end;
+
+{ ********************************* Scripter ********************************* }
+
+procedure TScriptEditor.PrepareScripter;
+var
+ i: integer;
+begin
+ Scripter.AddLibrary(TatSysUtilsLibrary);
+ with Scripter.defineClass(TScriptRender) do
+ begin
+ DefineProp('Filename', tkString, GetRenderFilenameProc, SetRenderFilenameProc);
+ DefineProp('Width', tkInteger, GetRenderWidthProc, SetRenderWidthProc);
+ DefineProp('Height', tkInteger, GetRenderHeightProc, SetRenderHeightProc);
+ DefineProp('MaxMemory', tkInteger, GetRenderMaxMemoryProc, SetRenderMaxMemoryProc);
+ DefineProp('EmbedParameters', tkVariant, GetRenderEmbedParams, SetRenderEmbedParams);
+ end;
+ Scripter.AddObject('Renderer', Renderer);
+
+ { Flame interface }
+ with Scripter.defineClass(TFlame) do
+ begin
+ DefineProp('Gamma', tkFloat, GetFlameGammaProc, SetFlameGammaProc);
+ DefineProp('GammaThreshold', tkFloat, GetFlameGammaThresholdProc, SetFlameGammaThresholdProc);
+ DefineProp('Brightness', tkFloat, GetFlameBrightnessProc, SetFlameBrightnessProc);
+ DefineProp('Vibrancy', tkFloat, GetFlameVibrancyProc, SetFlameVibrancyProc);
+ DefineProp('Contrast', tkFloat, GetFlameContrastProc, SetFlameContrastProc); // AV
+ DefineProp('Time', tkFloat, GetFlameTimeProc, SetFlameTimeProc);
+ DefineProp('Zoom', tkFloat, GetFlameZoomProc, SetFlameZoomProc);
+ DefineProp('X', tkFloat, GetFlameXProc, SetFlameXProc);
+ DefineProp('Y', tkFloat, GetFlameYProc, SetFlameYProc);
+ DefineProp('Width', tkFloat, GetFlameWidthProc, SetFlameWidthProc);
+ DefineProp('Height', tkFloat, GetFlameHeightProc, SetFlameHeightProc);
+ DefineProp('SampleDensity', tkFloat, GetFlameDensityProc, SetFlameDensityProc);
+ DefineProp('Quality', tkFloat, GetFlameDensityProc, SetFlameDensityProc);
+ DefineProp('Oversample', tkInteger, GetFlameOversampleProc, SetFlameOversampleProc);
+ DefineProp('FilterRadius', tkFloat, GetFlameFilterRadiusProc, SetFlameFilterRadiusProc);
+ DefineProp('Scale', tkFloat, GetFlamePixelsPerUnitProc, SetFlamePixelsPerUnitProc);
+ DefineProp('Gradient', tkInteger, GetFlamePaletteProc, SetFlamePaletteProc, nil, false, 2);
+ DefineProp('Background', tkInteger, GetFlameBackgroundProc, SetFlameBackgroundProc, nil, false, 1);
+ DefineProp('Name', tkString, GetFlameNameProc, SetFlameNameProc);
+ // DefineProp('Nick', tkString, GetFlameNickProc, SetFlameNickProc);
+ // DefineProp('URL', tkString, GetFlameURLProc, SetFlameURLProc);
+ DefineProp('Hue', tkFloat, GetFlameHueProc, SetFlameHueProc);
+ DefineProp('Batches', tkInteger, GetFlameBatchesProc, SetFlameBatchesProc);
+ DefineProp('FinalXformEnabled', tkInteger, GetFlameFinalxformEnabledProc, SetFlameFinalxformEnabledProc);
+ DefineProp('Angle', tkFloat, GetFlameAngleProc, SetFlameAngleProc);
+ DefineProp('Pitch', tkFloat, GetFlamePitchProc, SetFlamePitchProc);
+ DefineProp('Yaw', tkFloat, GetFlameYawProc, SetFlameYawProc);
+ DefineProp('Roll', tkFloat, GetFlameRollProc, SetFlameRollProc);
+ DefineProp('Perspective', tkFloat, GetFlamePerspectiveProc, SetFlamePerspectiveProc);
+ DefineProp('Z', tkFloat, GetFlameCamZposProc, SetFlameCamZposProc);
+ DefineProp('DOF', tkFloat, GetFlameDOFProc, SetFlameDOFProc);
+ DefineProp('SoloXform', tkInteger, GetFlameSoloXformProc, SetFlameSoloXformProc);
+
+ DefineProp('PreviewWidth', tkInteger, GetPreviewWidthProc, SetPreviewWidthProc);
+ DefineProp('PreviewHeight', tkInteger, GetPreviewHeightProc, SetPreviewHeightProc);
+ end;
+ Scripter.AddObject('Flame', Flame);
+
+ { Transform interface }
+ with Scripter.defineClass(TTransform) do
+ begin
+ DefineProp('coefs', tkFloat, GetTransformCoefsProc, SetTransformCoefsProc, nil, false, 2);
+ DefineProp('post', tkFloat, GetTransformPostCoefsProc, SetTransformPostCoefsProc, nil, false, 2);
+ DefineProp('Color', tkFloat, GetTransformColorProc, SetTransformColorProc);
+ DefineProp('VarColor', tkFloat, GetTransformVarColorProc, SetTransformVarColorProc);
+ DefineProp('Weight', tkFloat, GetTransformWeightProc, SetTransformWeightProc);
+ DefineProp('Symmetry', tkFloat, GetTransformSymProc, SetTransformSymProc);
+ DefineProp('ColorSpeed', tkFloat, GetTransformSymProc, SetTransformSymProc);
+ for i:= 0 to NRVAR - 1 do begin
+ DefineProp(Varnames(i), tkFloat, GetTransformVariationProc, SetTransformVariationProc);
+ Editor.SyntaxStyles.AutoCompletion.Add('property ' + Varnames(i) + ': double');
+ end;
+ for i:= 0 to GetNrVariableNames - 1 do begin
+ DefineProp(GetVariableNameAt(i), tkFloat, GetTransformVariableProc, SetTransformVariableProc);
+ Editor.SyntaxStyles.AutoCompletion.Add('property ' + GetVariableNameAt(i) + ': double');
+ end;
+ Editor.SyntaxStyles.AutoCompletion.Sort;
+ while Editor.SyntaxStyles.AutoCompletion.Strings[0] = '' do Editor.SyntaxStyles.AutoCompletion.Delete(0);
+
+ DefineMethod('Clear', 0, tkNone, nil, TransformClearProc);
+ DefineMethod('Rotate', 1, tkNone, nil, TransformRotateProc);
+ DefineMethod('Scale', 1, tkNone, nil, TransformScaleProc);
+ DefineMethod('RotateOrigin', 1, tkNone, nil, TransformRotateOriginProc);
+
+ DefineMethod('RotatePXOrigin', 1, tkNone, nil, TransformRotatePXOriginProc);
+ DefineMethod('RotatePX', 1, tkNone, nil, TransformRotatePXProc);
+ DefineMethod('ScalePX', 1, tkNone, nil, TransformScalePXProc);
+ DefineMethod('FlipPXHoriz', 0, tkNone, nil, TransformFlipPXHorizProc);
+ DefineMethod('FlipHoriz', 0, tkNone, nil, TransformFlipHorizProc);
+ DefineMethod('FlipPXVert', 0, tkNone, nil, TransformFlipPXVertProc);
+ DefineMethod('FlipVert', 0, tkNone, nil, TransformFlipVertProc);
+ DefineMethod('SwapCoefs', 0, tkNone, nil, TransformSwapCoefsProc);
+ DefineMethod('ResetVariables', 0, tkNone, nil, TransformResetVariables);
+
+ DefineMethod('SetVariationOrder', 2, tkNone, nil, TransformMoveVarProc);
+ DefineMethod('SwapVariations', 2, tkNone, nil, TransformExchangeVarsProc);
+ DefineMethod('SortVariationsByName', 0, tkNone, nil, TransformSortVarsProc);
+ DefineMethod('SortVariationsByIndex', 0, tkNone, nil, TransformDefaultVarOrderProc);
+ DefineMethod('GetVariationOrder', 1, tkInteger, nil, TransformGetVarOrderProc);
+ DefineMethod('CopyVariationsOrder', 1, tkInteger, nil, TransformCopyVarOrderProc);
+ DefineMethod('PrintVariationsOrder', 0, tkNone, nil, TransformDisplayVarsProc);
+
+ DefineProp('a', tkFloat, GetTransformAProc, SetTransformAProc);
+ DefineProp('b', tkFloat, GetTransformBProc, SetTransformBProc);
+ DefineProp('c', tkFloat, GetTransformCProc, SetTransformCProc);
+ DefineProp('d', tkFloat, GetTransformDProc, SetTransformDProc);
+ DefineProp('e', tkFloat, GetTransformEProc, SetTransformEProc);
+ DefineProp('f', tkFloat, GetTransformFProc, SetTransformFProc);
+ DefineProp('Variation', tkFloat, GetTransformVarProc, SetTransformVarProc, nil, false, 1);
+ DefineProp('Variable', tkFloat, GetTransformVariProc, SetTransformVariProc, nil, false, 1);
+ DefineProp('Chaos', tkFloat, GetTransformChaosProc, SetTransformChaosProc, nil, false, 1);
+ DefineProp('PlotMode', tkInteger, GetTransformPlotModeProc, SetTransformPlotModeProc);
+ DefineProp('Opacity', tkFloat, GetTransformOpacityProc, SetTransformOpacityProc);
+
+ DefineProp('PostXformEnabled', tkInteger, GetTransformPostxformEnabledProc, SetTransformPostxformEnabledProc);
+ DefineProp('Name', tkString, GetTransformNameProc, SetTransformNameProc);
+ end;
+ Scripter.AddObject('Transform', Transform);
+
+ { Options interface }
+ with Scripter.defineClass(TOptions) do
+ begin
+ DefineProp('JPEGQuality', tkInteger, GetJPEGQuality, SetJPEGQuality);
+ DefineProp('BatchSize', tkInteger, GetBatchSize, SetBatchSize);
+ DefineProp('ParameterFile', tkString, GetParameterFile, SetParameterFile);
+ DefineProp('SmoothPaletteFile', tkString, GetSmoothPaletteFile, SetSmoothPaletteFile);
+ DefineProp('NumTries', tkInteger, GetNumTries, SetNumTries);
+ DefineProp('TryLength', tkInteger, GetTryLength, SetTryLength);
+ DefineProp('ConfirmDelete', tkVariant, GetConfirmDelete, SetConfirmDelete);
+ DefineProp('Multithreading', tkInteger, GetMultithreading, SetMultithreading);
+ //DefineProp('FixedReference', tkVariant, GetFixedReference, SetFixedReference);
+ DefineProp('SampleDensity', tkFloat, GetSampleDensity, SetSampleDensity);
+ DefineProp('Gamma', tkFloat, GetGamma, SetGamma);
+ DefineProp('GammaThreshold', tkFloat, GetGammaThreshold, SetGammaThreshold);
+ DefineProp('Brightness', tkFloat, GetBrightness, SetBrightness);
+ DefineProp('Vibrancy', tkFloat, GetVibrancy, SetVibrancy);
+ DefineProp('Contrast', tkFloat, GetContrast, SetContrast); // AV
+ DefineProp('Oversample', tkInteger, GetOversample, SetOversample);
+ DefineProp('FilterRadius', tkFloat, GetFilterRadius, SetFilterRadius);
+ DefineProp('Transparency', tkInteger, GetTransparency, SetTransparency);
+ DefineProp('PreviewLowQuality', tkFloat, GetLowQuality, SetLowQuality);
+ DefineProp('PreviewMediumQuality', tkFloat, GetMediumQuality, SetMediumQuality);
+ DefineProp('PreviewHighQuality', tkFloat, GetHighQuality, SetHighQuality);
+ DefineProp('MinTransforms', tkInteger, GetMinTransforms, SetMinTransforms);
+ DefineProp('MaxTransforms', tkInteger, GetMaxTransforms, SetMaxTransforms);
+ DefineProp('MutateMinTransforms', tkInteger, GetMutateMinTransforms, SetMutateMinTransforms);
+ DefineProp('MutateMaxTransforms', tkInteger, GetMutateMaxTransforms, SetMutateMaxTransforms);
+ DefineProp('RandomPrefix', tkString, GetPrefix, SetPrefix);
+ DefineProp('KeepBackground', tkInteger, GetKeepBackground, SetKeepBackground);
+ DefineProp('SymmetryType', tkInteger, GetSymmetryType, SetSymmetryType);
+ DefineProp('SymmetryOrder', tkInteger, GetSymmetryOrder, SetSymmetryOrder);
+ DefineProp('Variations', tkVariant, GetVariations, SetVariations, nil, false, 1);
+ DefineProp('GradientOnRandom', tkInteger, GetRandomGradient, SetRandomGradient);
+ DefineProp('GradientFileOnRandom', tkString, GetRandomGradientFile, SetRandomGradientFile);
+ DefineProp('ColorBlending', tkInteger, GetGradientBlending, SetGradientBlending); // AV
+ DefineProp('MinNodes', tkInteger, GetMinNodes, SetMinNodes);
+ DefineProp('MaxNodes', tkInteger, GetMaxNodes, SetMaxNodes);
+ DefineProp('MinHue', tkInteger, GetMinHue, SetMinHue);
+ DefineProp('MaxHue', tkInteger, GetMaxHue, SetMaxHue);
+ DefineProp('MinSaturation', tkInteger, GetMinSat, SetMinSat);
+ DefineProp('MaxSaturation', tkInteger, GetMaxSat, SetMaxSat);
+ DefineProp('MinLuminance', tkInteger, GetMinLum, SetMinLum);
+ DefineProp('MaxLuminance', tkInteger, GetMaxLum, SetMaxLum);
+ DefineProp('UPRSampleDensity', tkInteger, GetUPRSampleDensity, SetUPRSampleDensity);
+ DefineProp('UPRFilterRadius', tkFloat, GetUPRFilterRadius, SetUPRFilterRadius);
+ DefineProp('UPROversample', tkInteger, GetUPROversample, SetUPROversample);
+ DefineProp('UPRAdjustDensity', tkVariant, GetUPRAdjustDensity, SetUPRAdjustDensity);
+ DefineProp('EvenGradientStripes', tkVariant, GetEqualGradient, SetEqualGradient);
+ DefineProp('UPRColoringIdent', tkString, GetUPRColoringIdent, SetUPRColoringIdent);
+ DefineProp('UPRColoringFile', tkString, GetUPRColoringFile, SetUPRColoringFile);
+ DefineProp('UPRFormulaFile', tkString, GetUPRFormulaFile, SetUPRFormulaFile);
+ DefineProp('UPRFormulaIdent', tkString, GetUPRFormulaIdent, SetUPRFormulaIdent);
+ DefineProp('UPRWidth', tkInteger, GetUPRWidth, SetUPRWidth);
+ DefineProp('UPRHeight', tkInteger, GetUPRHeight, SetUPRHeight);
+ DefineProp('ExportRenderer', tkInteger, GetExportPath, SetExportPath);
+ end;
+ Scripter.AddObject('Options', Options);
+
+ with Scripter.defineClass(TPivot) do
+ begin
+ DefineProp('Mode', tkInteger, GetPivotModeProc, SetPivotModeProc);
+ DefineProp('X', tkFloat, GetPivotXProc, SetPivotXProc);
+ DefineProp('Y', tkFloat, GetPivotYProc, SetPivotYProc);
+ DefineMethod('Set', 2, tkNone, nil, SetPivotProc);
+ DefineMethod('Reset', 0, tkNone, nil, ResetPivotProc);
+ end;
+ Scripter.AddObject('Pivot', Pivot);
+
+ Scripter.AddComponent(OpenDialog);
+ Scripter.AddLibrary(TOperationLibrary);
+
+ { Variables and constants }
+ Scripter.AddConstant('PI', pi);
+ Scripter.AddConstant('NVARS', NRVAR);
+ Scripter.AddConstant('NumVariables', GetNrVariableNames);
+ Scripter.AddConstant('NXFORMS', NXFORMS);
+ Scripter.AddConstant('INSTALLPATH', ExtractFilePath(Application.exename));
+ Scripter.AddConstant('SYM_NONE', 0);
+ Scripter.AddConstant('SYM_BILATERAL', 1);
+ Scripter.AddConstant('SYM_ROTATIONAL', 2);
+ Scripter.AddConstant('SYM_DIHEDRAL', 3); // AV
+ Scripter.AddConstant('NMAPS', NRCMAPS); // AV
+
+ Scripter.AddConstant('mrOK', mrOK); // AV
+ Scripter.AddConstant('mrCancel', mrCancel); // AV
+ Scripter.AddConstant('mrNo', mrNo); // AV
+ Scripter.AddConstant('mrYes', mrYes); // AV
+ Scripter.AddConstant('mrRetry', mrRetry); // AV
+ Scripter.AddConstant('mrClose', mrClose); // AV
+ Scripter.AddConstant('mrAbort', mrAbort); // AV
+
+ Scripter.AddConstant('BLEND_RGB', 0); // AV
+ Scripter.AddConstant('BLEND_HSV', 1); // AV
+ Scripter.AddConstant('BLEND_NONE', 2); // AV
+
+ { Variables }
+ // AV: they are already defined in TOperationLibrary
+ // Scripter.AddVariable('SelectedTransform', EditForm.SelectedTriangle);
+ // Scripter.AddVariable('ActiveTransform', ActiveTransform);
+ Scripter.AddVariable('UpdateFlame', UpdateIt);
+ Scripter.AddVariable('ResetLocation', ResetLocation);
+ Scripter.AddVariable('BatchIndex', RandomIndex);
+ Scripter.AddVariable('DateCode', RandomDate);
+ Scripter.AddVariable('Stopped', Stopped);
+ Scripter.AddVariable('ShowProgress', ShowProgress);
+ Scripter.AddVariable('LimitVibrancy', LimitVibrancy);
+ // Scripter.AddVariable('CurrentFile', OpenFile); // AV: added handlers
+ // Scripter.AddVariable('Compatibility', Compatibility); // obsolete
+
+ { Variations }
+ Scripter.AddConstant('V_LINEAR', 0);
+ Scripter.AddConstant('V_RANDOM', -1);
+
+ // Scripter.AddLibrary(TatWindowsLibrary);
+ // Scripter.AddLibrary(TatFormsLibrary);
+ Scripter.AddLibrary(TatMathLibrary);
+ Scripter.AddLibrary(TatDialogsLibrary);
+ Scripter.AddLibrary(TatSysUtilsLibrary);
+ Scripter.AddLibrary(TatFileCtrlLibrary);
+ Scripter.AddLibrary(TatClassesLibrary);
+ { Nonsense - it's the only way to get the last real
+ library to work! }
+ Scripter.AddObject('Not_Any_Thing_Useful', Another);
+ Scripter.AddObject('IglooFunkyRubber', Another);
+ Scripter.AddObject('Scrumptious', Another);
+ // Scripter.AddObject('Darn it', Another);
+ Scripter.AddObject('Apophysis', Application); // AV :-)
+
+ // AV: user must not be able to use them!
+ Scripter.SystemLibrary.MethodByName('Scripter').Free;
+ Scripter.SystemLibrary.MethodByName('Machine').Free;
+ // AV: moved into main library to let user choose which CopyFile must be called
+ Scripter.SystemLibrary.DefineMethod('CopyFile', 3, tkVariant, nil, CopyFileProc, false, 1);
+
+ RegisterClasses([TButton, TLabel, TEdit, TComboBox]); // AV: to load external Delphi forms
+end;
+
+{ ************************* Buttons ***************************************** }
+
+procedure TScriptEditor.btnNewClick(Sender: TObject);
+var
+ c: boolean;
+begin
+ if ConfirmClearScript then
+ begin
+ if Editor.LinesModified then // AV: if script changes not saved yet
+ c := (Application.MessageBox(PChar(TextByKey('script-confirmclear')), 'Apophysis', 52) = IDYES)
+ else
+ c := True;
+ end
+ else c := True;
+ if c then begin
+ Editor.Lines.Clear;
+ Caption := TextByKey('script-title'); //'New Script';
+ Script := '';
+ if Scripter.Running then btnBreak.Click; // AV: stop the previous script
+ StatusBar.SimpleText := StatusBar.Hint; // AV
+ end;
+end;
+
+procedure TScriptEditor.LoadScriptFile(filename:string);
+var
+ s: string;
+ fn:string;
+begin
+ Editor.Lines.LoadFromFile(filename);
+ s := ExtractFileName(filename);
+ s := Copy(s, 0, length(s) - Length(ExtractFileExt(s)));
+ MainForm.mnuRun.Caption := Format(TextByKey('main-menu-script-run2'), [s]);
+ Caption := s;
+end;
+
+procedure TScriptEditor.OpenScript;
+var
+ s: string;
+ fn:string;
+begin
+ MainOpenDialog.InitialDir := ScriptPath;
+ MainOpenDialog.Filename := '';
+ MainOpenDialog.Filter := Format('%s|*.aposcript;*.asc|%s|*.*', [TextByKey('common-filter-scriptfiles'), TextByKey('common-filter-allfiles')]);
+ if OpenSaveFileDialog(ScriptEditor, '.aposcript', MainOpenDialog.Filter, MainOpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
+// if MainOpenDialog.execute then
+ begin
+ MainOpenDialog.FileName := fn;
+ Script := MainOpenDialog.Filename;
+ Editor.Lines.LoadFromFile(MainOpenDialog.Filename);
+ s := ExtractFileName(MainOpenDialog.Filename);
+ s := Copy(s, 0, length(s) - Length(ExtractFileExt(s)));
+ MainForm.mnuRun.Caption := Format(TextByKey('main-menu-script-run2'), [s]);
+ Caption := s;
+ ScriptPath := ExtractFileDir(MainOpenDialog.Filename);
+ end;
+end;
+
+procedure TScriptEditor.btnOpenClick(Sender: TObject);
+begin
+ OpenScript;
+end;
+
+procedure TScriptEditor.btnPauseClick(Sender: TObject);
+begin
+ if Scripter.Running then
+ Scripter.Paused := not Scripter.Paused
+ else Scripter.Paused := False;
+ btnPause.Down := Scripter.Paused;
+ if btnPause.Down then begin
+ StatusBar.SimpleText := TextByKey('script-status-paused');
+ PreviewForm.PreviewPause.Caption := TextbyKey('preview-resume');
+ end else begin
+ if Scripter.Running then
+ StatusBar.SimpleText := TextByKey('script-status-executing')
+ else
+ StatusBar.SimpleText := StatusBar.Hint;
+ PreviewForm.PreviewPause.Caption := TextbyKey('preview-pause');
+ end;
+end;
+
+procedure TScriptEditor.btnSaveClick(Sender: TObject);
+var fn : string;
+begin
+ if Script = '' then fn := ''
+ else fn := ChangeFileExt(ExtractFileName(Script), '.aposcript');
+ if OpenSaveFileDialog(ScriptEditor, '.aposcript',
+ Format('%s|*.aposcript;*.asc|%s|*.*',
+ [TextByKey('common-filter-scriptfiles'),
+ TextByKey('common-filter-allfiles')]),
+ ScriptPath, TextByKey('common-browse'), fn,
+ false, true, false, false) then
+ //if MainSaveDialog.Execute then
+ begin
+ MainOpenDialog.FileName := fn;
+ Script := fn;
+ Editor.Lines.SaveToFile(fn);
+ Caption := ExtractFileName(fn);
+ ScriptPath := ExtractFileDir(fn);
+ if ScriptPath = AppPath + 'Scripts' then
+ MainForm.GetScripts; // AV: refreshing the menu
+ end;
+end;
+
+procedure TScriptEditor.FillFileList;
+var
+ i, p: integer;
+ ext, Title: string;
+ FStrings: TStringList;
+begin
+ FStrings := TStringList.Create;
+ FStrings.LoadFromFile(ParamFile);
+ try
+ FileList.Clear;
+
+ ext := LowerCase(ExtractFileExt(ParamFile));
+ (*if (ext = '.fla') or (ext = '.apo') then
+ begin
+
+ // Get names from .fla or .apo file
+ if (Pos('{', FStrings.Text) <> 0) then
+ for i := 0 to FStrings.Count - 1 do
+ begin
+ p := Pos('{', FStrings[i]);
+ if (p <> 0) then
+ begin
+ Title := Trim(Copy(FStrings[i], 1, p - 1));
+ if Title <> '' then
+ begin { Otherwise bad format }
+ FileList.Add(Trim(Copy(FStrings[i], 1, p - 1)));
+ end;
+ end;
+ end;
+
+ end
+ else
+
+ begin *)
+ // Get names from .flame file
+ if (Pos(' 0) then
+ begin
+ for i := 0 to FStrings.Count - 1 do
+ begin
+ p := Pos(' 0) then
+ begin
+ pname := '';
+ MainForm.ListXMLScanner.LoadFromBuffer(PANSICHAR(AnsiString(FSTrings[i])));
+ MainForm.ListXMLScanner.Execute;
+ if Trim(pname) = '' then
+ Title := '*untitled ' + ptime
+ else
+ FileList.Add(pname);
+ end;
+ end;
+
+ end;
+ //end;
+ finally
+ FStrings.Free;
+ end;
+end;
+
+procedure TScriptEditor.CopyFileProc(AMachine: TatVirtualMachine);
+var
+ src, dest: string;
+ v: boolean; // AV
+begin
+// AV: original method doesn't work properly and conflicts with Windows.CopyFile
+ with AMachine do
+ begin
+ src := GetInputArgAsString(0);
+ dest := GetInputArgAsString(1);
+ if FileExists(src) and DirectoryExists(ExtractFilePath(dest)) then
+ try
+ case InputArgCount of
+ 2: begin
+ v := Windows.CopyFile(PChar(src), PChar(dest), false); // rewrite
+ ReturnOutputArg(v);
+ end;
+ 3: begin
+ v := GetInputArgAsBoolean(2);
+ v := Windows.CopyFile(PChar(src), PChar(dest), v);
+ ReturnOutputArg(v);
+ end;
+ end;
+ except
+ LastError := 'CopyFile: ' + TextByKey('common-genericcopyfailure');
+ RuntimeError(LastError); // AV
+ Halt;
+ if LoadForm.CheckBox1.Checked then LoadForm.Show; // AV
+ end
+ else begin
+ if not FileExists(src) then
+ LastError := 'CopyFile: ' + TextByKey('common-noparamfile')
+ else
+ LastError := 'CopyFile: ' + TextByKey('render-status-pathdoesnotexist');
+ RuntimeError(LastError); // AV
+ Halt;
+ if LoadForm.CheckBox1.Checked then LoadForm.Show; // AV
+ end;
+ end;
+end;
+
+procedure TScriptEditor.FindReplaceClick(Sender: TObject);
+begin
+ ScrMemoFindReplaceDialog1.Execute;
+end;
+
+procedure TScriptEditor.RunScript;
+var
+ lib: TStringList;
+ favs, defs: boolean; // current status of submenus
+begin
+ btnRun.Enabled := False;
+ btnBreak.Enabled := True;
+ btnPause.Enabled := True;
+ MainForm.btnRunScript.Enabled := False;
+ MainForm.mnuRun.Enabled := False;
+ favs := (MainForm.FavouriteScripts1.Count > 0);
+ defs := (MainForm.Directory1.Count > 0);
+ MainForm.FavouriteScripts1.Enabled := False;
+ // MainForm.DisableFavorites;
+ MainForm.Directory1.Enabled := False;
+
+ ParamFile := OpenFile;
+ FillFileList;
+ { Set defaults }
+ { Set render defaults }
+ Renderer.Width := 320;
+ Renderer.Height := 240;
+ Renderer.EmbedParameters := False; // AV
+ Stopped := False;
+ UpdateIt := True;
+ ResetLocation := False;
+ Console.Clear;
+ LastError := '';
+ ActiveTransform := EditForm.SelectedTriangle;
+ NumTransforms := Transforms;
+ cp.copy(MainCp);
+ cmap := MainCp.cmap;
+ Application.ProcessMessages;
+ Randomize;
+ StatusBar.SimpleText := TextByKey('script-status-executing');
+ // what in the sweet loving sake of jesus is this fuck?
+ // AV: this is really strange...
+ if Pos('stopped', Lowercase(Editor.Lines.text)) <> 0 then
+ begin
+ btnStop.Enabled := True;
+ MainForm.mnuStop.Enabled := True;
+ MainForm.btnStopScript.Enabled := True;
+ end;
+ with Scripter do
+ begin
+ SourceCode.Assign(Editor.Lines);
+ if FileExists(defLibrary) then
+ begin
+ lib := TStringList.Create;
+ try
+ Lib.LoadFromFile(defLibrary);
+ with Scripts.Add do
+ begin
+ SourceCode := lib;
+ SelfRegisterAsLibrary('Functions');
+ end;
+ finally
+ lib.free;
+ end;
+ end;
+ //Compile;
+ Execute;
+ end;
+ if (NumTransforms < 1) and UpdateIt then
+ begin
+ Console.Lines.Add(TextByKey('script-status-notransforms'));
+ ScriptRenderForm.Close;
+ btnRun.Enabled := True;
+ btnStop.Enabled := False;
+ MainForm.btnRunScript.Enabled := True;
+ MainForm.btnStopScript.Enabled := False;
+ MainForm.mnuRun.Enabled := True;
+ MainForm.mnuStop.Enabled := False;
+ btnBreak.Enabled := False;
+ btnPause.Enabled := False;
+ StatusBar.SimpleText := StatusBar.Hint;
+ // AV: to continue work with these scripts
+ MainForm.FavouriteScripts1.Enabled := favs;
+ MainForm.Directory1.Enabled := defs;
+ Exit;
+ end
+ else
+ if (LastError = '') and UpdateIt then
+ begin
+ MainForm.UpdateUndo;
+ MainCp.Copy(cp);
+ UpdateFlame;
+ if ResetLocation then MainForm.ResetLocation;
+ end
+ else
+ begin
+ Console.Lines.Add(LastError);
+ end;
+ ScriptRenderForm.Close;
+ btnRun.Enabled := True;
+ btnStop.Enabled := False;
+ MainForm.btnRunScript.Enabled := True;
+ MainForm.btnStopScript.Enabled := False;
+ MainForm.mnuRun.Enabled := True;
+ MainForm.mnuStop.Enabled := False;
+ btnBreak.Enabled := False;
+ btnPause.Enabled := False;
+ // restore the status of submenus
+ MainForm.FavouriteScripts1.Enabled := favs;
+ MainForm.Directory1.Enabled := defs;
+ StatusBar.SimpleText := StatusBar.Hint;
+end;
+
+procedure TScriptEditor.btnRunClick(Sender: TObject);
+begin
+ RunScript;
+end;
+
+{ ****************************** Update flame ******************************* }
+
+procedure TScriptEditor.UpdateFlame;
+begin
+ MainForm.StopThread;
+ MainForm.UpdateUndo;
+ MainCp.Copy(cp);
+// MainCp.name := FlameName;
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ MainCp.AdjustScale(MainForm.Image.Width, MainForm.Image.Height);
+ if ResetLocation then MainCp.CalcBoundBox else
+ begin;
+ MainCp.Zoom := cp.zoom;
+ MainCp.center[0] := cp.center[0];
+ MainCp.center[1] := cp.center[1];
+ end;
+ MainCp.cmap := cp.cmap;
+ MainForm.RedrawTimer.enabled := true;
+ if EditForm.Visible then EditForm.UpdateDisplay;
+ if AdjustForm.Visible then AdjustForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+end;
+
+(*
+procedure copyxform(var dest: Txform; const source: TXform);
+var
+ i: integer;
+begin
+ dest.c[0, 0] := source.c[0, 0];
+ dest.c[0, 1] := source.c[0, 1];
+ dest.c[1, 0] := source.c[1, 0];
+ dest.c[1, 1] := source.c[1, 1];
+ dest.c[2, 0] := source.c[2, 0];
+ dest.c[2, 1] := source.c[2, 1];
+ dest.color := source.color;
+// hmm, why no symmetry here? // dest.symmetry := source.symmetry;
+ dest.density := source.density;
+ for i := 0 to NRVAR - 1 do
+ dest.SetVariation(i, source.GetVariation(i));
+end;
+*)
+
+{ ************************ Editor Popup menu ********************************* }
+
+procedure TScriptEditor.mnuCutClick(Sender: TObject);
+begin
+ if Editor.CanCut then Editor.CutToClipboard;
+end;
+
+procedure TScriptEditor.mnuDeleteBlockClick(Sender: TObject);
+begin
+ with ScrCodeList1 do
+ if ItemIndex >= 0 then
+ CodeBlocks.Delete(ItemIndex);
+end;
+
+procedure TScriptEditor.mnuCopyClick(Sender: TObject);
+begin
+ if Editor.CanCopy then Editor.CopyToClipboard;
+end;
+
+procedure TScriptEditor.mnuPasteClick(Sender: TObject);
+begin
+ if Editor.CanPaste then Editor.PasteFromClipboard;
+end;
+
+procedure TScriptEditor.mnuRedoClick(Sender: TObject);
+begin
+ if Editor.CanRedo then Editor.Redo;
+end;
+
+procedure TScriptEditor.mnuUndoClick(Sender: TObject);
+begin
+ if Editor.CanUndo then Editor.Undo;
+end;
+
+procedure TScriptEditor.EditCaption1Click(Sender: TObject);
+var
+ scap: string; // empty string by default
+begin
+ if ScrCodeList1.ItemIndex < 0 then exit;
+ scap := ScrCodeList1.CodeBlocks[ScrCodeList1.ItemIndex].Caption;
+ if not InputQuery(TextByKey('script-codeblock'),
+ TextByKey('script-codeblockrename'), scap) then exit;
+ ScrCodeList1.CodeBlocks[ScrCodeList1.ItemIndex].Caption := scap;
+end;
+
+procedure TScriptEditor.EditorChange(Sender: TObject);
+begin
+ // Editor.activeLine := -1; // <<== AV: it's the source of bugs...
+ Editor.ActiveLineSettings.ShowActiveLine := false;
+ {if not Editor.CanUndo then mnuUndo.Enabled := false
+ else mnuUndo.Enabled := true; }
+ // AV: optimized
+ mnuUndo.Enabled := Editor.CanUndo;
+ mnuRedo.Enabled := Editor.CanRedo;
+end;
+
+{********** AV: let's make it more interactive! ************ }
+
+procedure TScriptEditor.EditorDragDrop(Sender, Source: TObject; X, Y: Integer);
+begin
+ if (source is TScrCodeList) then
+ Editor.DropText(X, Y, ScrCodeList1.CodeBlocks[ScrCodeList1.itemindex].Code.Text);
+end;
+
+procedure TScriptEditor.EditorDragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+begin
+ Accept := true; // AV: so you can drag and drop any text inside the Scripter!
+end;
+
+procedure TScriptEditor.EditorGetAutoCompletionList(Sender: TObject;
+ AToken: string; AList: TStringList); // AV: so the scripter will resemble a real IDE
+var i: integer;
+begin
+ if (LowerCase(AToken) = 'transform.') then
+ begin
+ ALIst.AddObject('property coefs[][]: array of double', TObject(ttProp));
+ ALIst.AddObject('property post[][]: array of double', TObject(ttProp));
+ ALIst.AddObject('property A: double', TObject(ttProp));
+ ALIst.AddObject('property B: double', TObject(ttProp));
+ ALIst.AddObject('property C: double', TObject(ttProp));
+ ALIst.AddObject('property D: double', TObject(ttProp));
+ ALIst.AddObject('property E: double', TObject(ttProp));
+ ALIst.AddObject('property F: double', TObject(ttProp));
+ ALIst.AddObject('property Color: double', TObject(ttProp));
+ ALIst.AddObject('property VarColor: double', TObject(ttProp));
+ ALIst.AddObject('property Opacity: double', TObject(ttProp));
+ ALIst.AddObject('property PlotMode: integer', TObject(ttProp));
+ ALIst.AddObject('property Weight: double', TObject(ttProp));
+ ALIst.AddObject('property Symmetry: double', TObject(ttProp));
+ ALIst.AddObject('property ColorSpeed: double', TObject(ttProp));
+ ALIst.AddObject('property Chaos[]: array of double', TObject(ttProp));
+ ALIst.AddObject('property Name: string', TObject(ttProp));
+ ALIst.AddObject('procedure Clear', TObject(ttMethod));
+ ALIst.AddObject('method Rotate(Degrees: double)', TObject(ttMethod));
+ ALIst.AddObject('method RotatePXOrigin(Degrees: double)', TObject(ttMethod));
+ ALIst.AddObject('method RotatePX(Degrees: double)', TObject(ttMethod));
+ ALIst.AddObject('method ScalePX(Factor: double)', TObject(ttMethod));
+ ALIst.AddObject('method FlipHoriz', TObject(ttMethod));
+ ALIst.AddObject('method FlipPXHoriz', TObject(ttMethod));
+ ALIst.AddObject('method FlipVert', TObject(ttMethod));
+ ALIst.AddObject('method FlipPXVert', TObject(ttMethod));
+ ALIst.AddObject('method Scale(Factor: double)', TObject(ttMethod));
+ ALIst.AddObject('method RotateOrigin(Degrees: double)', TObject(ttMethod));
+ ALIst.AddObject('property Variation[]: array of double', TObject(ttProp));
+ ALIst.AddObject('property Variable[]: array of double', TObject(ttProp));
+ ALIst.AddObject('property postXformEnabled: boolean', TObject(ttProp));
+ ALIst.AddObject('method SwapCoefs', TObject(ttMethod));
+ ALIst.AddObject('method ResetVariables', TObject(ttMethod));
+ ALIst.AddObject('method SwapVariations(var1_name, var2_name: string)', TObject(ttMethod));
+ ALIst.AddObject('method SortVariationsByName', TObject(ttMethod));
+ ALIst.AddObject('method SortVariationsByIndex', TObject(ttMethod));
+ ALIst.AddObject('method PrintVariationsOrder', TObject(ttMethod));
+ ALIst.AddObject('method SetVariationOrder(var_name, index: integer)', TObject(ttMethod));
+ ALIst.AddObject('method CopyVariationsOrder(transform_index: integer)', TObject(ttMethod));
+ ALIst.AddObject('function GetVariationOrder(var_name: string): integer', TObject(ttMethod));
+
+ for i:= 0 to NRVAR - 1 do
+ ALIst.AddObject('property ' + varnames(i) + ': double', TObject(ttProp));
+ for i:= 0 to GetNrVariableNames - 1 do begin
+ ALIst.AddObject('property ' + GetVariableNameAt(i) + ': double', TObject(ttProp));
+ end;
+ end;
+ if (LowerCase(AToken) = 'flame.') then
+ begin
+ ALIst.AddObject('property Gamma: double', TObject(ttProp));
+ ALIst.AddObject('property GammaThreshold: double', TObject(ttProp));
+ ALIst.AddObject('property Brightness: double', TObject(ttProp));
+ ALIst.AddObject('property Vibrancy: double', TObject(ttProp));
+ ALIst.AddObject('property Contrast: double', TObject(ttProp));
+ ALIst.AddObject('property Scale: double', TObject(ttProp));
+ ALIst.AddObject('property Width: integer', TObject(ttProp));
+ ALIst.AddObject('property Weight: integer', TObject(ttProp));
+ ALIst.AddObject('property PreviewWidth: integer', TObject(ttProp));
+ ALIst.AddObject('property PreviewHeight: integer', TObject(ttProp));
+ ALIst.AddObject('property Zoom: double', TObject(ttProp));
+ ALIst.AddObject('property Angle: double', TObject(ttProp));
+ ALIst.AddObject('property Pitch: double', TObject(ttProp));
+ ALIst.AddObject('property Yaw: double', TObject(ttProp));
+ ALIst.AddObject('property Roll: double', TObject(ttProp));
+ ALIst.AddObject('property Perspective: double', TObject(ttProp));
+ ALIst.AddObject('property Z: double', TObject(ttProp));
+ ALIst.AddObject('property X: double', TObject(ttProp));
+ ALIst.AddObject('property Y: double', TObject(ttProp));
+ ALIst.AddObject('property DOF: double', TObject(ttProp));
+ ALIst.AddObject('property Name: string', TObject(ttProp));
+ ALIst.AddObject('property SampleDensity: double', TObject(ttProp));
+ ALIst.AddObject('property Quality: double', TObject(ttProp));
+ ALIst.AddObject('property Time: double', TObject(ttProp));
+ ALIst.AddObject('property Hue: double', TObject(ttProp));
+ ALIst.AddObject('property Oversample: integer', TObject(ttProp));
+ ALIst.AddObject('property FilterRadius: double', TObject(ttProp));
+ ALIst.AddObject('property FinalXformEnabled: boolean', TObject(ttProp));
+ ALIst.AddObject('property Background[]: array of integer', TObject(ttProp));
+ ALIst.AddObject('property Gradient[][]: array of integer', TObject(ttProp));
+ end;
+ if (LowerCase(AToken) = 'pivot.') then
+ begin
+ ALIst.AddObject('property X: double', TObject(ttProp));
+ ALIst.AddObject('property Y: double', TObject(ttProp));
+ ALIst.AddObject('property Mode: integer', TObject(ttProp));
+ ALIst.AddObject('procedure Set( X: double, Y: double)', TObject(ttMethod));
+ ALIst.AddObject('procedure Reset', TObject(ttMethod));
+ end;
+ if (LowerCase(AToken) = 'renderer.') then
+ begin
+ ALIst.AddObject('property Filename: string', TObject(ttProp));
+ ALIst.AddObject('property Width: integer', TObject(ttProp));
+ ALIst.AddObject('property Height: integer', TObject(ttProp));
+ ALIst.AddObject('property MaxMemory: integer', TObject(ttProp));
+ ALIst.AddObject('property EmbedParameters: boolean', TObject(ttProp));
+ end;
+ if (LowerCase(AToken) = 'options.') then
+ begin
+ ALIst.AddObject('property JPEGQuality: integer', TObject(ttProp));
+ ALIst.AddObject('property BatchSize: integer', TObject(ttProp));
+ ALIst.AddObject('property ParameterFile: string', TObject(ttProp));
+ ALIst.AddObject('property SmoothPaletteFile: string', TObject(ttProp));
+ ALIst.AddObject('property NumTries: integer', TObject(ttProp));
+ ALIst.AddObject('property TryLength: integer', TObject(ttProp));
+ ALIst.AddObject('property ConfirmDelete: boolean', TObject(ttProp));
+ ALIst.AddObject('property Transparency: integer', TObject(ttProp));
+ ALIst.AddObject('property Multithreading: integer', TObject(ttProp));
+ ALIst.AddObject('property Gamma: double', TObject(ttProp));
+ ALIst.AddObject('property GammaThreshold: double', TObject(ttProp));
+ ALIst.AddObject('property Brightness: double', TObject(ttProp));
+ ALIst.AddObject('property Vibrancy: double', TObject(ttProp));
+ ALIst.AddObject('property Contrast: double', TObject(ttProp));
+ ALIst.AddObject('property PreviewLowQuality: double', TObject(ttProp));
+ ALIst.AddObject('property PreviewMediumQuality: double', TObject(ttProp));
+ ALIst.AddObject('property PreviewHighQuality: double', TObject(ttProp));
+ ALIst.AddObject('property Variations[]: array of boolean', TObject(ttProp));
+ ALIst.AddObject('property MinTransforms: integer', TObject(ttProp));
+ ALIst.AddObject('property MutateMinTransforms: integer', TObject(ttProp));
+ ALIst.AddObject('property MaxTransforms: integer', TObject(ttProp));
+ ALIst.AddObject('property MutateMaxTransforms: integer', TObject(ttProp));
+ ALIst.AddObject('property RandomPrefix: string', TObject(ttProp));
+ ALIst.AddObject('property KeepBackground: integer', TObject(ttProp));
+ ALIst.AddObject('property SymmetryType: integer', TObject(ttProp));
+ ALIst.AddObject('property SymmetryOrder: integer', TObject(ttProp));
+ ALIst.AddObject('property MinNodes: integer', TObject(ttProp));
+ ALIst.AddObject('property MaxNodes: integer', TObject(ttProp));
+ ALIst.AddObject('property MaxSaturation: integer', TObject(ttProp));
+ ALIst.AddObject('property MinSaturation: integer', TObject(ttProp));
+ ALIst.AddObject('property MaxLuminance: integer', TObject(ttProp));
+ ALIst.AddObject('property MinLuminance: integer', TObject(ttProp));
+ ALIst.AddObject('property GradientOnRandom: integer', TObject(ttProp));
+ ALIst.AddObject('property GradientFileOnRandom: string', TObject(ttProp));
+ ALIst.AddObject('property ColorBlending: integer', TObject(ttProp));
+ ALIst.AddObject('property EvenGradientStripes: boolean', TObject(ttProp));
+ ALIst.AddObject('property ExportRenderer: string', TObject(ttProp));
+ end;
+ if pos('tstringlist', LowerCase(AToken))> 0 then
+ ALIst.AddObject('constructor Create', TObject(ttMethod));
+
+ // AV: easter eggs ;-)
+ if ((pos('apo', LowerCase(AToken))> 0) or (pos('ifs', LowerCase(AToken))> 0)) then
+ begin
+ AList.Clear;
+ ALIst.AddObject('procedure LoadFromFile(full_filename: string)', TObject(ttProc));
+ ALIst.AddObject('procedure SaveToFile(full_filename: string)', TObject(ttProc));
+ ALIst.AddObject('function Add(text: string): integer', TObject(ttFunc));
+ ALIst.AddObject('function AddPair(Name, Value: string): TStrings', TObject(ttFunc));
+ ALIst.AddObject('function IndexOfName(Name: string): integer', TObject(ttFunc));
+ ALIst.AddObject('property KeyNames[index: integer]: string', TObject(ttProp));
+ ALIst.AddObject('property Names[index: integer]: string', TObject(ttProp));
+ ALIst.AddObject('property Values[Name: string]: string', TObject(ttProp));
+ ALIst.AddObject('property ValueFromIndex[index: integer]: string', TObject(ttProp));
+ ALIst.AddObject('function IndexOf(text_str: string): integer', TObject(ttFunc));
+ ALIst.AddObject('property Count: integer', TObject(ttProp));
+ ALIst.AddObject('procedure Insert(index: integer, str: string)', TObject(ttProc));
+ ALIst.AddObject('procedure Delete(str_index: integer)', TObject(ttProc));
+ ALIst.AddObject('procedure Move(CurIndex, NewIndex: integer)', TObject(ttProc));
+ ALIst.AddObject('property Strings[]: array of string', TObject(ttProp));
+ ALIst.AddObject('property NameValueSeparator: char', TObject(ttProp));
+ ALIst.AddObject('property CommaText: string', TObject(ttProp));
+ ALIst.AddObject('property Text: string', TObject(ttProp));
+ ALIst.AddObject('destructor Free', TObject(ttMethod));
+ ALIst.AddObject('procedure Clear', TObject(ttProc));
+ ALIst.AddObject('procedure Sort', TObject(ttProc));
+ ALIst.AddObject('property Sorted: boolean', TObject(ttProp));
+ ALIst.AddObject('procedure Assign(sourse: TStrings)', TObject(ttProc));
+ ALIst.AddObject('procedure AddStrings(strings: TStrings)', TObject(ttProc));
+ end;
+
+ if (LowerCase(AToken) = 'apophysis.') or (LowerCase(AToken) = 'application.') then
+ begin
+ AList.Clear;
+ ALIst.AddObject('function MessageBox(Promt, Caption: string, DlgStyle: integer = 0): integer;',
+ TObject(ttFunc));
+ ALIst.AddObject('property Icon', TObject(ttProp));
+ ALIst.AddObject('property Title', TObject(ttProp));
+ ALIst.AddObject('property ExeName', TObject(ttProp));
+ ALIst.AddObject('procedure ProcessMessages', TObject(ttMethod));
+ end;
+
+ if pos('ttaskdialog', LowerCase(AToken))> 0 then
+ ALIst.AddObject('constructor Create(nil)', TObject(ttMethod));
+
+ if (pos('tdlg', LowerCase(AToken))> 0) then
+ begin
+ AList.Clear;
+ ALIst.AddObject('destructor Destroy', TObject(ttMethod));
+ ALIst.AddObject('property Title: string', TObject(ttProp));
+ ALIst.AddObject('property Caption: string', TObject(ttProp));
+ ALIst.AddObject('property MainIcon', TObject(ttProp));
+ ALIst.AddObject('property CustomMainIcon', TObject(ttProp));
+ ALIst.AddObject('property ExpandedText: string', TObject(ttProp));
+ ALIst.AddObject('property ExpandButtonCaption: string', TObject(ttProp));
+ ALIst.AddObject('property Text: string', TObject(ttProp));
+ ALIst.AddObject('property VerificationText: string', TObject(ttProp));
+ ALIst.AddObject('property CommonButtons: [set]', TObject(ttProp));
+ ALIst.AddObject('property DefaultButton', TObject(ttProp));
+ ALIst.AddObject('method Execute', TObject(ttMethod));
+ ALIst.AddObject('property ModalResult: integer', TObject(ttProp));
+ ALIst.AddObject('property Buttons', TObject(ttProp));
+ ALIst.AddObject('property RadioButtons', TObject(ttProp));
+ ALIst.AddObject('property Button', TObject(ttProp));
+ ALIst.AddObject('property RadioButton', TObject(ttProp));
+ ALIst.AddObject('property Flags: [set]', TObject(ttProp));
+ ALIst.AddObject('property FooterText: string', TObject(ttProp));
+ ALIst.AddObject('property FooterIcon', TObject(ttProp));
+ ALIst.AddObject('property CustomFooterIcon', TObject(ttProp));
+ ALIst.AddObject('property ProgressBar', TObject(ttProp));
+ ALIst.AddObject('property OnVerificationClicked: procedure', TObject(ttProp));
+ end;
+ if (pos('buttons.', LowerCase(AToken))> 0) then
+ begin
+ AList.Clear;
+ ALIst.AddObject('method Add', TObject(ttMethod));
+ ALIst.AddObject('method Delete(i)', TObject(ttMethod));
+ if (pos('radiobuttons.', LowerCase(AToken))> 0) then
+ ALIst.AddObject('property Items[i]', TObject(ttProp));
+ end;
+ if (pos('radiobutton.', LowerCase(AToken))> 0) then
+ begin
+ AList.Clear;
+ ALIst.AddObject('property ID: integer', TObject(ttProp));
+ ALIst.AddObject('property Index: integer', TObject(ttProp));
+ end;
+ if (pos('btn', LowerCase(AToken))> 0) or (pos('.button.', LowerCase(AToken))> 0) then
+ begin
+ AList.Clear;
+ ALIst.AddObject('property Caption: string', TObject(ttProp));
+ ALIst.AddObject('property CommandLinkHint: string', TObject(ttProp));
+ ALIst.AddObject('property ModalResult: integer', TObject(ttProp));
+ end;
+ if (pos('progressbar.', LowerCase(AToken))> 0) then
+ begin
+ AList.Clear;
+ ALIst.AddObject('property Min: integer', TObject(ttProp));
+ ALIst.AddObject('property Max: integer', TObject(ttProp));
+ ALIst.AddObject('property Position: integer', TObject(ttProp));
+ ALIst.AddObject('property MarqueeSpeed: integer', TObject(ttProp));
+ ALIst.AddObject('property State: integer', TObject(ttProp));
+ end;
+
+ if (AList.Count > 1) then AList.Sorted := True;
+end;
+
+procedure TScriptEditor.ExpandBlocksClick(Sender: TObject);
+begin
+ Editor.ExpandAllNodes;
+end;
+
+{ ****************************** }
+
+procedure TScriptEditor.ScrCodeList1BlockDblClick(Sender: TObject;
+ ACodeBlock: TCodeBlock);
+begin
+ with Editor do
+ DropText(CurX, CurY, ScrCodeList1.CodeBlocks[ScrCodeList1.itemindex].Code.Text);
+end;
+
+procedure TScriptEditor.ScrCodeList1BlockRightClick(Sender: TObject;
+ ACodeBlock: TCodeBlock);
+begin
+ ScrCodeList1.ItemIndex := ACodeBlock.Index;
+end;
+
+procedure TScriptEditor.ScrCodeList1ContextPopup(Sender: TObject;
+ MousePos: TPoint; var Handled: Boolean);
+begin
+ if (ScrCodeList1.Items.Count > 1) then
+ mnuDeleteBlock.Enabled := True
+ else
+ mnuDeleteBlock.Enabled := False;
+end;
+
+procedure TScriptEditor.ScrCodeList1DragDrop(Sender, Source: TObject; X,
+ Y: Integer);
+begin
+ ScrCodeList1.CodeBlocks.Add(Editor.Selection);
+end;
+
+procedure TScriptEditor.ScrCodeList1DragOver(Sender, Source: TObject; X,
+ Y: Integer; State: TDragState; var Accept: Boolean);
+begin
+ Accept := (source is TScrMemo);
+end;
+
+procedure TScriptEditor.ScripterCompileError(Sender: TObject;
+ var msg: string; row, col: Integer; var ShowException: Boolean);
+var ps: integer;
+begin
+ btnRun.Enabled := True;
+ btnStop.Enabled := False;
+ btnBreak.Enabled := False;
+ btnPause.Enabled := False;
+ MainForm.btnRunScript.Enabled := True;
+ MainForm.btnStopScript.Enabled := False;
+ MainForm.mnuRun.Enabled := True;
+ MainForm.mnuStop.Enabled := False;
+ { AV: in previous Apo versions,
+ user cannot load a Script
+ after simple syntax error - it's not normally... }
+ if (MainForm.FavouriteScripts1.Count > 0) then
+ MainForm.FavouriteScripts1.Enabled := True; // AV
+ if (MainForm.Directory1.Count > 0) then
+ MainForm.Directory1.Enabled := True; // AV
+
+ StatusBar.SimpleText := TextByKey('script-status-compileerror'); // AV
+
+ Editor.ActiveLine := row - 1;
+ Editor.ActiveLineSettings.ShowActiveLine := True;
+ if LanguageFile <> '' then // AV: if we need to translate from/to English
+ begin
+ if pos('Unknown ident', msg) > 0 then
+ msg := StringReplace(msg, 'Unknown identifier or variable is not declared',
+ TextByKey('script-status-noidentifier'), [])
+ else if pos('Syntax err', msg) > 0 then
+ msg := StringReplace(msg, 'Syntax error',
+ TextByKey('script-status-syntaxerror'), [])
+ else if pos('Unknown member id', msg) > 0 then
+ msg := StringReplace(msg, 'Unknown member identifier',
+ TextByKey('script-status-noclassmember'), [])
+ else if pos('Unknown method or rout', msg) > 0 then
+ msg := StringReplace(msg, 'Unknown method or routine',
+ TextByKey('script-status-unknownmethod'), [])
+ else if pos('value to const', msg) > 0 then
+ msg := StringReplace(msg, 'Cannot assign a value to constant',
+ TextByKey('script-status-constassign'), [])
+ else if pos('Too many param', msg) > 0 then
+ begin
+ msg := StringReplace(msg, 'Too many parameters for method',
+ TextByKey('script-status-toomanyparams'), []);
+ ps := pos('#', TextByKey('script-status-expectparams'));
+ if (ps <> 0) then begin
+ msg := StringReplace(msg, 'Expected ', Copy(TextByKey('script-status-expectparams'), 1, ps - 1), []);
+ msg := StringReplace(msg, ' parameters', Copy(TextByKey('script-status-expectparams'), ps + 1,
+ length(TextByKey('script-status-expectparams')) - ps), []);
+ end;
+ end
+ else if pos('Not enough act', msg) > 0 then
+ begin
+ msg := StringReplace(msg, 'Not enough actual parameters for method',
+ TextByKey('script-status-notenoughparams'), []);
+ ps := pos('#', TextByKey('script-status-expectparams'));
+ if (ps <> 0) then begin
+ msg := StringReplace(msg, 'Expected ', Copy(TextByKey('script-status-expectparams'), 1, ps - 1), []);
+ msg := StringReplace(msg, ' parameters', Copy(TextByKey('script-status-expectparams'), ps + 1,
+ length(TextByKey('script-status-expectparams')) - ps), []);
+ end;
+ end
+ else if (pos('Method ', msg) > 0) and (pos('expects vari', msg) > 0) then
+ begin
+ ps := pos('#', TextByKey('script-status-expectvar'));
+ if (ps <> 0) then begin
+ msg := StringReplace(msg, 'Method ', Copy(TextByKey('script-status-expectvar'), 1, ps - 1), []);
+ msg := StringReplace(msg, ' expects variable reference', Copy(TextByKey('script-status-expectvar'), ps + 1,
+ length(TextByKey('script-status-expectvar')) - ps), []);
+ end;
+ end
+ else if pos('Assign to meth', msg) > 0 then
+ begin
+ ps := pos('#', TextByKey('script-status-notassign'));
+ if (ps <> 0) then begin
+ msg := StringReplace(msg, 'Assign to method ', Copy(TextByKey('script-status-notassign'), 1, ps - 1), []);
+ msg := StringReplace(msg, ' is not allowed', Copy(TextByKey('script-status-notassign'), ps + 1,
+ length(TextByKey('script-status-notassign')) - ps), []);
+ end;
+ end
+ else if pos('called as a me', msg) > 0 then
+ begin
+ ps := pos('#', TextByKey('script-status-propnotfunc'));
+ if (ps <> 0) then begin
+ msg := StringReplace(msg, 'Property ', Copy(TextByKey('script-status-propnotfunc'), 1, ps - 1), []);
+ msg := StringReplace(msg, ' cannot be called as a method', Copy(TextByKey('script-status-propnotfunc'), ps + 1,
+ length(TextByKey('script-status-propnotfunc')) - ps), []);
+ end;
+ end;
+ end;
+ Console.Lines.Add(TextByKey('script-line') + #32 + IntToStr(row) + ' : '+ msg);
+ LoadForm.Output.Text := LoadForm.Output.Text + DTError + TextByKey('script-line') + ': '#39 +
+ Editor.Lines[row-1] + #39', '+ TextByKey('script-position') +
+ ': '+ IntToStr(col) + #13#10 + msg + #13#10; // AV
+ ScriptRenderForm.Close;
+ ShowException := true;
+ Application.ProcessMessages;
+ if LoadForm.CheckBox1.Checked then LoadForm.Show; // AV
+end;
+
+procedure TScriptEditor.ScripterRuntimeError(Sender: TObject; var msg: string;
+ row, col: Integer; var ShowException: Boolean); // AV
+begin
+ btnRun.Enabled := True;
+ btnStop.Enabled := False;
+ btnBreak.Enabled := False;
+ btnPause.Enabled := False;
+ MainForm.btnRunScript.Enabled := True;
+ MainForm.btnStopScript.Enabled := False;
+ MainForm.mnuRun.Enabled := True;
+ MainForm.mnuStop.Enabled := False;
+ StatusBar.SimpleText := TextByKey('script-status-runtimeerror'); // AV
+ { AV: in previous Apo versions,
+ user cannot continue work in Script editor
+ after runtime error - it's not normally... }
+ if (MainForm.FavouriteScripts1.Count > 0) then
+ MainForm.FavouriteScripts1.Enabled := True; // AV
+ if (MainForm.Directory1.Count > 0) then
+ MainForm.Directory1.Enabled := True; // AV
+
+ Editor.ActiveLine := row - 1;
+ Editor.ActiveLineSettings.ShowActiveLine := True;
+ if LanguageFile <> '' then
+ { AV: We don't need to translate from-to English }
+ begin
+ if pos('not an array', msg) > 0 then
+ msg := StringReplace(msg, 'Variable is not an array',
+ TextByKey('script-status-varnotarray'), [])
+ else if pos('find form f', msg) > 0 then
+ msg := StringReplace(msg, 'Cannot find form file',
+ TextByKey('script-status-noformfile'), []);
+ end;
+ LoadForm.Output.Text := LoadForm.Output.Text + RTError + TextByKey('script-line') + ': '#39 +
+ Editor.Lines[row-1] + #39', '+ TextByKey('script-position') +
+ ': '+ IntToStr(col) + #13#10 + msg + #13#10;
+ ScriptRenderForm.Close;
+ ShowException := true;
+ Application.ProcessMessages;
+ if LoadForm.CheckBox1.Checked then LoadForm.Show; // AV
+end;
+
+procedure TScriptEditor.btnStopClick(Sender: TObject);
+begin
+ Console.Lines.Add(TextByKey('script-status-stopped')); // AV
+ if btnPause.Down then btnPause.Click; // AV
+ Stopped := True;
+end;
+
+procedure TScriptEditor.AddFromClipboardClick(Sender: TObject);
+begin
+ AddFromClipboard.Checked := not AddFromClipboard.Checked;
+ ScrCodeList1.ClipboardView := AddFromClipboard.Checked;
+end;
+
+procedure TScriptEditor.AdjustScripterColors; // AV
+var
+ i: integer;
+ BackColor: TColor;
+begin
+ BackColor := Editor.BkColor;
+ with Styler do // default
+ begin
+ for i := 0 to AllStyles.Count-1 do
+ AllStyles[i].BGColor := BackColor;
+ CommentStyle.BkColor := BackColor;
+ NumberStyle.BkColor := BackColor;
+ NumberStyle.TextColor := clFuchsia;
+ end;
+ Editor.BlockColor := MidColor;
+ Editor.Gutter.GutterColor := BrightColor;
+ Editor.Gutter.GutterColorTo := MidColor;
+ Editor.Gutter.GutterColorTo := MidColor;
+ Editor.Gutter.Font.Color := TextColor;
+ ScrCodeList1.Font.Color := Editor.Font.Color;
+
+ if IsDarkTheme then // AV: adaptating the scripter to dark themes
+ begin
+ with Styler do
+ begin
+ AllStyles[0].Font.Color := clLime;
+ AllStyles[4].Font.Color := clAqua;
+ CommentStyle.TextColor := clAqua;
+ end;
+ with Editor.AutoCompletion do begin
+ Font.Color := clWhite;
+ ColorFunc := $00C6C600; // turquoise
+ ColorProc := $00C6C600;
+ ColorMethod := $00C6C600;
+ ColorProp := $0020B9FB; // orange
+ ColorIdentifier := $00E901BA; // violet
+ ColorVar := clSkyBlue;
+ end;
+ end
+ else
+ begin
+ with Styler do // default
+ begin
+ AllStyles[0].Font.Color := clGreen;
+ AllStyles[4].Font.Color := clNavy;
+ CommentStyle.TextColor := clNavy;
+
+ if (CurrentStyle = 'Calypso SLE') or
+ (CurrentStyle = 'Emerald') or (CurrentStyle = 'Coral') then
+ NumberStyle.TextColor := $009F009F;
+ end;
+ with Editor.AutoCompletion do begin
+ Font.Color := TextColor;
+ ColorFunc := clNavy;
+ ColorProc := clNavy;
+ ColorMethod := clNavy;
+ ColorProp := clGreen;
+ ColorIdentifier := clTeal;
+ ColorVar := clBlue;
+ end;
+ end;
+end;
+
+procedure TScriptEditor.btnBreakClick(Sender: TObject);
+begin
+ LastError := TextByKey('script-status-break');
+ if btnPause.Down then btnPause.Click; // AV
+ Scripter.Halt;
+ btnPause.Enabled := False;
+ StatusBar.SimpleText := StatusBar.Hint;
+end;
+
+procedure TScriptEditor.btnFavoriteClick(Sender: TObject);
+// AV: rewrite and bring back to life a very old method
+var
+ i: integer;
+ there: boolean;
+begin
+ if Trim(Editor.Lines.Text)= '' then exit;
+ there := False;
+ for i := 0 to Favorites.Count - 1 do
+ if Lowercase(Script) = LowerCase(Favorites[i]) then begin
+ There := true;
+ break;
+ end;
+ if there then begin
+ Application.MessageBox(PChar(Format(TextByKey('common-favscriptexists'),
+ [ExtractFileName(Script)])), PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+
+ if (Script = '') or Editor.LinesModified then btnSave.Click;
+ if Script <> '' then begin
+ Favorites.Add(Script);
+ Favorites.SaveToFile(AppPath + scriptFavsFilename);
+ MainForm.GetScripts;
+ Application.MessageBox(PChar(Format(TextByKey('common-favscriptadded'),
+ [ExtractFileName(Script)])), PChar('Apophysis AV'), MB_ICONINFORMATION);
+ end;
+end;
+
+{ // AV: now it's deprecated
+procedure TScriptEditor.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
+begin
+ if GetKeyState(VK_CONTROL) >= 0 then
+ Exit;
+
+ if Msg.CharCode = Ord('C') then begin
+ Editor.CopyToClipBoard;
+ Handled := True;
+ end;
+
+ if Msg.CharCode = Ord('V') then begin
+ Editor.PasteFromClipBoard;
+ Handled := True;
+ end;
+
+ if Msg.CharCode = Ord('X') then begin
+ Editor.CutToClipBoard;
+ Handled := True;
+ end;
+end;
+}
+
+procedure TScriptEditor.F2SXMLContent(Sender: TObject; Content: string);
+begin
+ // todo: palette
+end;
+
+procedure TScriptEditor.F2SXMLEmptyTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+var
+ i,n: integer;
+ v,w: TStringType;
+ d, floatcolor: double;
+ Tokens: TStringList;
+begin
+
+ Tokens := TStringList.Create;
+ try
+ if (TagName = 'xform') or (TagName = 'finalxform') then
+ Editor.Lines.Add('');
+ if TagName = 'finalxform' then begin
+ Editor.Lines.Add('{ Final Transform }');
+ Editor.Lines.Add('Flame.FinalXformEnabled := True;');
+ Editor.Lines.Add('SetActiveTransform(transforms);');
+ end else begin
+ w := TStringType('{ Transform ' + IntToStr(AddedXForms + 1));
+ v := Attributes.Value('name');
+ if (v <> '') then w := w + ' (' + v + ')';
+ w := w + ' }';
+ Editor.Lines.Add(String(w));
+ Editor.Lines.Add('AddTransform;');
+ end;
+ Editor.Lines.Add('with Transform do begin');
+ //Editor.Lines.Add(' for i := 0 to NXFORMS do Chaos[i] := 1;');
+
+ v := Attributes.Value('var_order');
+ if v <> '' then begin
+ GetTokens(String(v), tokens);
+ n := -1;
+ for i := 0 to Tokens.Count-1 do
+ if (GetVariationIndex(Tokens[i]) >= 0) then begin
+ inc(n);
+ Editor.Lines.Add(Format(' SetVariationOrder(''%s'', %d);', [Tokens[i], n]));
+ end;
+ end;
+
+ v := Attributes.Value(TStringType(varnames(0)));
+ if v = '' then
+ Editor.Lines.Add(' Variation[0] := 0; // linear');
+
+ for i := 0 to NRVAR - 1 do
+ begin
+ v := Attributes.Value(TStringType(varnames(i)));
+ if v <> '' then
+ //Editor.Lines.Add(' ' + varnames(i) + ' := ' + String(v) + ';');
+ Editor.Lines.Add(Format(' %s := %.6g;', [varnames(i), StrToFloat(String(v))]));
+ end;
+
+ for i := 0 to GetNrVariableNames - 1 do begin
+ v := Attributes.Value(TStringType(GetVariableNameAt(i)));
+ if v <> '' then begin
+ Editor.Lines.Add(' ' + GetVariableNameAt(i) + ' := ' + String(v) + ';');
+ end;
+ end;
+
+ v := Attributes.Value('weight');
+ if (v <> '') and (TagName = 'xform') then
+ Editor.Lines.Add(Format(' Weight := %.6g;', [StrToFloat(String(v))]));
+ v := Attributes.Value('color');
+ if (v <> '') then Editor.Lines.Add(' Color := ' + String(v) + ';');
+ v := Attributes.Value('var_color');
+ if (v <> '') then Editor.Lines.Add(' VarColor := ' + String(v) + ';');
+ v := Attributes.Value('symmetry');
+ if (v <> '') and (TagName = 'xform') then Editor.Lines.Add(' Symmetry := ' + String(v) + ';');
+ v := Attributes.Value('opacity');
+ if v <> '' then begin
+ Editor.Lines.Add(' Opacity := ' + String(v) + ';');
+ end;
+
+ v := Attributes.Value('coefs');
+ if (v <> '') then begin
+ GetTokens(String(v), tokens);
+ Editor.Lines.Add(Format(' coefs[0,0] := %.6g; // a', [StrToFloat(Tokens[0])]));
+ Editor.Lines.Add(Format(' coefs[1,0] := %.6g; // b', [StrToFloat(Tokens[2]) * (-1)]));
+ Editor.Lines.Add(Format(' coefs[0,1] := %.6g; // c', [StrToFloat(Tokens[1]) * (-1)]));
+ Editor.Lines.Add(Format(' coefs[1,1] := %.6g; // d', [StrToFloat(Tokens[3])]));
+ Editor.Lines.Add(Format(' coefs[2,0] := %.6g; // e', [StrToFloat(Tokens[4])]));
+ Editor.Lines.Add(Format(' coefs[2,1] := %.6g; // f', [StrToFloat(Tokens[5]) * (-1)]));
+ end;
+
+ v := Attributes.Value('post');
+ if v <> '' then begin
+ GetTokens(String(v), tokens);
+ Editor.Lines.Add(Format(' post[0,0] := %.6g;', [StrToFloat(Tokens[0])]));
+ Editor.Lines.Add(Format(' post[0,1] := %.6g;', [StrToFloat(Tokens[1]) * (-1)]));
+ Editor.Lines.Add(Format(' post[1,0] := %.6g;', [StrToFloat(Tokens[2]) * (-1)]));
+ Editor.Lines.Add(Format(' post[1,1] := %.6g;', [StrToFloat(Tokens[3])]));
+ Editor.Lines.Add(Format(' post[2,0] := %.6g;', [StrToFloat(Tokens[4])]));
+ Editor.Lines.Add(Format(' post[2,1] := %.6g;', [StrToFloat(Tokens[5]) * (-1)]));
+ end;
+
+
+ v := Attributes.Value('chaos');
+ if v <> '' then begin
+ chaosLines.Add('');
+ chaosLines.Add('{ Weight modifiers for transform ' + IntToStr(AddedXForms + 1) + ' }');
+ chaosLines.Add('SetActiveTransform(' + IntToStr(AddedXForms) + ');');
+ chaosLines.Add('with Transform do begin');
+ GetTokens(String(v), tokens);
+ for i := 0 to Tokens.Count-1 do
+ chaosLines.Add(' chaos[' + IntToStr(i) + '] := ' + Tokens[i] + ';') ;
+ chaosLines.Add('end;');
+ end;
+
+ Editor.Lines.Add('end;');
+ AddedXForms := AddedXForms + 1;
+ finally
+ Tokens.free;
+ end;
+end;
+
+procedure TScriptEditor.F2SXMLEndTag(Sender: TObject; TagName: string);
+begin
+//
+end;
+
+procedure TScriptEditor.F2SXMLStartTag(Sender: TObject; TagName: string;
+ Attributes: TAttrList);
+var
+ Tokens: TStringList;
+ v: TStringType;
+ f, b: double;
+begin
+ Tokens := TStringList.Create;
+ try
+
+ if TagName='flame' then
+ begin
+ AddedXForms := 0;
+ Editor.Lines.Add('{ Flame }');
+ Editor.Lines.Add('Clear;');
+ // Editor.Lines.Add('if (pos(''7x'', LowerCase(ProgramVersionString)) > 0) then');
+ // Editor.Lines.Add(' AngleTransform := 180 / PI else AngleTransform := 1;');
+ Editor.Lines.Add('with Flame do begin');
+
+ v := Attributes.Value(TStringType('size'));
+ if (v <> '') then begin
+ GetTokens(String(v), tokens);
+
+ Editor.Lines.Add(' Width := ' + Tokens[0] + ';');
+ Editor.Lines.Add(' Height := ' + Tokens[1] + ';');
+
+ f := 100 / StrToFloat(Tokens[0]);
+ end else f := 0;
+ b := 0;
+
+ v := Attributes.Value(TStringType('brightness'));
+ if (v <> '') then begin
+ Editor.Lines.Add(' Brightness := ' + String(v) + ';');
+ b := StrToFloat(String(v));
+ end;
+ v := Attributes.Value(TStringType('gamma'));
+ if (v <> '') then Editor.Lines.Add(' Gamma := ' + String(v) + ';');
+ v := Attributes.Value(TStringType('vibrancy'));
+ if (v <> '') then Editor.Lines.Add(' Vibrancy := ' + String(v) + ';');
+ v := Attributes.Value(TStringType('contrast'));
+ if (v <> '') then Editor.Lines.Add(' Contrast := ' + String(v) + ';');
+ v := Attributes.Value(TStringType('gamma_threshold'));
+ if (v <> '') then begin
+ if b <> 0 then b := StrToFloat(String(v)) / b;
+ Editor.Lines.Add(' GammaThreshold := ' + FloatToStr(b) + ';');
+ end;
+
+ v := Attributes.Value(TStringType('zoom'));
+ if (v <> '') then Editor.Lines.Add(' Zoom := ' + String(v) + ';');
+ v := Attributes.Value(TStringType('scale'));
+ if (v <> '') then Editor.Lines.Add(Format(' Scale := %.6g;', [StrToFloat(String(v)) * f]));
+ v := Attributes.Value(TStringType('angle'));
+ if (v <> '') then
+ // Editor.Lines.Add(' Angle := ' + FloatToStr(StrToFloat(String(v))* 180 / PI) + '; ');
+ Editor.Lines.Add(Format(' Angle := %.6g; // Flame rotation', [StrToFloat(String(v)) * 180 / PI]));
+
+ // 3d
+ v := Attributes.Value(TStringType('cam_pitch'));
+ if (v <> '') then
+ Editor.Lines.Add(Format(' Pitch := %.6g;', [StrToFloat(String(v)) * 180 / PI]));
+ v := Attributes.Value(TStringType('cam_roll')); // AV
+ if (v <> '') then
+ Editor.Lines.Add(Format(' Roll := %.6g;', [StrToFloat(String(v)) * 180 / PI]));
+ v := Attributes.Value(TStringType('cam_yaw'));
+ if (v <> '') then
+ Editor.Lines.Add(Format(' Yaw := %.6g;', [StrToFloat(String(v)) * 180 / PI]));
+ v := Attributes.Value(TStringType('cam_perspective'));
+ if (v <> '') then Editor.Lines.Add(' Perspective := ' + String(v) + ';');
+ v := Attributes.Value(TStringType('cam_zpos'));
+ if (v <> '') then Editor.Lines.Add(' Z := ' + String(v) + ';');
+ v := Attributes.Value(TStringType('cam_dof'));
+ if (v <> '') then Editor.Lines.Add(' DOF := ' + String(v) + ';');
+
+ try
+ v := Attributes.Value(TStringType('center'));
+ if (v <> '') then begin
+ GetTokens(String(v), tokens);
+ Editor.Lines.Add(' X := ' + Tokens[0] + ';');
+ Editor.Lines.Add(' Y := ' + Tokens[1] + ';');
+ end;
+ except
+ Editor.Lines.Add(' X := 0;');
+ Editor.Lines.Add(' Y := 0;');
+ end;
+
+ try
+ v := Attributes.Value(TStringType('background'));
+ if (v <> '') then begin
+ GetTokens(String(v), tokens);
+
+ Editor.Lines.Add(Format(' Background[0] := %g; // red component', [Int(StrToFloat(Tokens[0]) * 255)]));
+ Editor.Lines.Add(Format(' Background[1] := %g; // green component', [Int(StrToFloat(Tokens[1]) * 255)]));
+ Editor.Lines.Add(Format(' Background[2] := %g; // blue component', [Int(StrToFloat(Tokens[2]) * 255)]));
+
+ end;
+ except
+ Editor.Lines.Add(' Background[0] := 0; // red component');
+ Editor.Lines.Add(' Background[1] := 0; // green component');
+ Editor.Lines.Add(' Background[2] := 0; // blue component');
+ end;
+
+ v := Attributes.Value(TStringType('soloxform'));
+ if (v <> '') then Editor.Lines.Add('SoloXform := ' + String(v) + ';');
+
+ Editor.Lines.Add('end;');
+ end;
+ finally
+ Tokens.free;
+ end;
+end;
+
+procedure TScriptEditor.LoadRunAndClear(scriptFile:string);
+begin
+ LoadScriptFile(scriptFile);
+ RunScript;
+ btnNewClick(btnNew);
+end;
+
+end.
+
+
diff --git a/Forms/ScriptRender.dfm b/Forms/ScriptRender.dfm
new file mode 100644
index 0000000..59066bd
--- /dev/null
+++ b/Forms/ScriptRender.dfm
@@ -0,0 +1,40 @@
+object ScriptRenderForm: TScriptRenderForm
+ Left = 390
+ Top = 391
+ BorderStyle = bsDialog
+ Caption = 'ScriptRenderForm'
+ ClientHeight = 58
+ ClientWidth = 285
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ DesignSize = (
+ 285
+ 58)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object btnCancel: TButton
+ Left = 96
+ Top = 28
+ Width = 95
+ Height = 25
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = '&Cancel'
+ TabOrder = 0
+ OnClick = btnCancelClick
+ end
+ object ProgressBar: TProgressBar
+ Left = 8
+ Top = 8
+ Width = 271
+ Height = 13
+ Anchors = [akLeft, akTop, akRight]
+ TabOrder = 1
+ end
+end
diff --git a/Forms/ScriptRender.pas b/Forms/ScriptRender.pas
new file mode 100644
index 0000000..ea971ff
--- /dev/null
+++ b/Forms/ScriptRender.pas
@@ -0,0 +1,178 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit ScriptRender;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+ ComCtrls, StdCtrls, RenderThread, cmap, ControlPoint, Translation;
+
+type
+ TScriptRenderForm = class(TForm)
+ btnCancel: TButton;
+ ProgressBar: TProgressBar;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure btnCancelClick(Sender: TObject);
+ private
+// PixelsPerUnit: double;
+ StartTime: TDateTime;
+ Remainder: TDateTime;
+
+ procedure HandleThreadCompletion(var Message: TMessage);
+ message WM_THREAD_COMPLETE;
+ procedure HandleThreadTermination(var Message: TMessage);
+ message WM_THREAD_TERMINATE;
+ public
+ Renderer: TRenderThread;
+ ColorMap: TColorMap;
+ cp: TControlPoint;
+ Filename: string;
+ ImageWidth, ImageHeight, Oversample: Integer;
+ zoom, Sample_Density, Brightness, Gamma, Vibrancy, Filter_Radius: double;
+ center: array[0..1] of double;
+ procedure OnProgress(prog: double);
+ procedure Render;
+ procedure SetRenderBounds;
+ end;
+
+var
+ ScriptRenderForm: TScriptRenderForm;
+ Cancelled: boolean;
+
+implementation
+
+uses Global, Math, FormRender, ScriptForm, Main;
+{$R *.DFM}
+
+procedure TScriptRenderForm.SetRenderBounds;
+begin
+ cp.copy(ScriptEditor.cp);
+ cp.AdjustScale(ScriptEditor.Renderer.Width, ScriptEditor.Renderer.Height);
+ // --?-- cp.CalcBoundBox;
+ cp.center[0] := ScriptEditor.cp.center[0];
+ cp.center[1] := ScriptEditor.cp.center[1];
+ cp.zoom := ScriptEditor.cp.zoom;
+end;
+
+procedure TScriptRenderForm.Render;
+begin
+ assert(not Assigned(Renderer));
+ Renderer := TRenderThread.Create;
+
+ Cancelled := False;
+ ScriptEditor.Scripter.Paused := True;
+ StartTime := Now;
+ Remainder := 1;
+ cp.copy(ScriptEditor.cp);
+ Filename := ScriptEditor.Renderer.Filename;
+
+ cp.AdjustScale(ScriptEditor.Renderer.Width, ScriptEditor.Renderer.Height);
+
+ //cp.Transparency := (PNGTransparency <> 0) and (UpperCase(ExtractFileExt(ScriptEditor.Renderer.FileName)) = '.PNG');
+ if (UpperCase(ExtractFileExt(ScriptEditor.Renderer.FileName)) = '.PNG') then
+ begin // AV: added new property
+ cp.Transparency := (PNGTransparency <> 0);
+ if ScriptEditor.Renderer.EmbedParameters then
+ Renderer.EmbedText(Trim(MainForm.RetrieveXML(cp))); // AV
+ end
+ else
+ cp.Transparency := False; // AV
+
+ Renderer.OnProgress := OnProgress;
+ Renderer.SetCP(cp);
+ if (ScriptEditor.Renderer.MaxMemory > 0) then
+ Renderer.MaxMem := ScriptEditor.Renderer.MaxMemory;
+ Renderer.TargetHandle := Handle;
+ renderPath := ExtractFilePath(ScriptEditor.Renderer.Filename);
+ Renderer.Priority := tpLower;
+
+ Renderer.NrThreads := NrTreads; // AV: now works fine
+ Renderer.Resume;
+
+// Renderer.SaveImage(FileName);
+// ScriptEditor.Scripter.Paused := False;
+end;
+
+procedure TScriptRenderForm.OnProgress(prog: double);
+var
+ Elapsed: TDateTime;
+begin
+ prog := (Renderer.Slice + Prog) / Renderer.NrSlices;
+ ProgressBar.Position := round(100 * prog);
+ Elapsed := Now - StartTime;
+ // if prog > 0 then Remainder := Elapsed * (1/prog - 1);
+ //Application.ProcessMessages;
+end;
+
+procedure TScriptRenderForm.FormDestroy(Sender: TObject);
+begin
+ cp.free;
+ assert(not Assigned(Renderer)); //if Assigned(Renderer) then Renderer.free;
+end;
+
+procedure TScriptRenderForm.FormCreate(Sender: TObject);
+begin
+ //Renderer := TRenderThread.Create;
+ self.Hint := TextByKey('script-rendering');
+ btnCancel.Caption := TextByKey('common-cancel');
+ cp := TControlPoint.Create;
+end;
+
+procedure TScriptRenderForm.btnCancelClick(Sender: TObject);
+begin
+ ScriptEditor.Scripter.Halt;
+ Cancelled := True;
+// Renderer.Stop;
+ if Assigned(Renderer) then begin
+ Renderer.Terminate;
+ Renderer.WaitFor;
+ Renderer.Free;
+ Renderer := nil;
+ end;
+ LastError := TextByKey('script-status-cancelrender');
+end;
+
+procedure TScriptRenderForm.HandleThreadCompletion(var Message: TMessage);
+begin
+ Renderer.SaveImage(FileName);
+
+ Renderer.Free;
+ Renderer := nil;
+
+ ScriptEditor.Scripter.Paused := False;
+end;
+
+procedure TScriptRenderForm.HandleThreadTermination(var Message: TMessage);
+begin
+ if Assigned(Renderer) then
+ begin
+ Renderer.Free;
+ Renderer := nil;
+ end;
+end;
+
+end.
+
diff --git a/Forms/SplashForm.dfm b/Forms/SplashForm.dfm
new file mode 100644
index 0000000..8b71384
--- /dev/null
+++ b/Forms/SplashForm.dfm
@@ -0,0 +1,3638 @@
+object SplashWindow: TSplashWindow
+ Left = 0
+ Top = 0
+ BorderIcons = []
+ BorderStyle = bsNone
+ Caption = 'Apophysis AV'
+ ClientHeight = 400
+ ClientWidth = 400
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clSkyBlue
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnCreate = FormCreate
+ OnHide = FormHide
+ OnShow = FormShow
+ DesignSize = (
+ 400
+ 400)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object BackgroundImage: TImage
+ Left = 0
+ Top = 0
+ Width = 400
+ Height = 400
+ Align = alClient
+ Picture.Data = {
+ 0A544A504547496D616765E8BD0100FFD8FFE000104A46494600010101006000
+ 600000FFDB004300020101020101020202020202020203050303030303060404
+ 0305070607070706070708090B0908080A0807070A0D0A0A0B0C0C0C0C07090E
+ 0F0D0C0E0B0C0C0CFFDB004301020202030303060303060C0807080C0C0C0C0C
+ 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C
+ 0C0C0C0C0C0C0C0C0C0C0C0C0CFFC00011080190019003012200021101031101
+ FFC4001F0000010501010101010100000000000000000102030405060708090A
+ 0BFFC400B5100002010303020403050504040000017D01020300041105122131
+ 410613516107227114328191A1082342B1C11552D1F02433627282090A161718
+ 191A25262728292A3435363738393A434445464748494A535455565758595A63
+ 6465666768696A737475767778797A838485868788898A92939495969798999A
+ A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6
+ D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301
+ 01010101010101010000000000000102030405060708090A0BFFC400B5110002
+ 0102040403040705040400010277000102031104052131061241510761711322
+ 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728
+ 292A35363738393A434445464748494A535455565758595A636465666768696A
+ 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7
+ A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3
+ E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FC20
+ B84781E458D73279859D8B67E5F439E4720FD78CD457122DD5CB43F7D5B8CF99
+ B4B7427249E000319C1E9EB5B5AE69F3C42E9DFCA6F2F1BFCA0AA55970082BD5
+ 70CFC8C63D31915CE5EDA49692336F25594A641EDE87DB81C7618AE7A7696A77
+ D68CA1A5896E2DC245B54BAB95040917E60A4160C31C01820FE5D79223FECFDD
+ 651E59186338DDCF5C8E3AF3BBDB9E3823912D25BABC11C5E631E592307E7DDD
+ 801D7278FAFA678ABC341D4B4F9F71B3D422946595A58580247DE232BED8FC0E
+ 7D2B4DBA9928B96A96851B4D39A0BA8DA36DB346CA42EE1B8B6EE38EDCE3D7A7
+ D33A5F6E84B471C92425616507CB88B062370264C8C1EDC82701B8CF350CDAA4
+ 90996666DCCCBB1918165CB75EBF423D3F320759F0AAD341D77C551C7ACAB456
+ 6B3079E3585BE40BB0920A80A07DE073DB1D33918D6A9C90751A6EDDB73A70B8
+ 7F6B51528349B7D5D918B2687191BB7FDA0E4B3649553825036DC03B7771C7CD
+ 8C13C9C1ADA97850C1147242A6E21D81DA43198C2EE3C6077C9C819383B874E7
+ 1FA5BF04FE25FECB7F0DBC276DF6FF0007DD5C6A50907ED11F8676E65E00DB30
+ 71B7D89719C16EC48F0BFF00828BF8D3C13E36D3239BC1BE11B8D1AC6372239E
+ 7921B67C8728764625727F8810383E613D706BE172DE35AD8ACC160FEA752116
+ DFBF2B25FF0007E47E899A700D0C265F3C5FD729CE5149F2C6EDFDFF00E697C8
+ F8CDFCB5840CEE8D80605412A4F248C1E9C9C7AE013F57492796CDB583F99C82
+ E0E24048048E99CE3A9C743D0F4B5A7E9535F5AE233F68DA5330AF2D92D8181D
+ B918E9EDDC131369ACD1E46DB891632648D493C6482D91C0DB907193827D338F
+ BEE647E69CAD2B92F857C4579E0BD556FAC5DA199485C2C8479CB9CF38CE7054
+ 647AE3B8CD7D8DABFC35D1FF006BAFD9793C47A6D9DBC7E28F0F48F6F79042C7
+ F79B9C3C448C8DCA374B1823F857A815F17C966D0745DD1B370ECA03750738EB
+ EDC1E4F42718AF73FD8EFF00685BCF819F117ED126E9349BB6B74BE8589F2FCA
+ 8D9640EA3A029B41247F0C84818F94FCE71260ABD5A2B178276AD4DDD7F79758
+ BF557B79D8FA8E14CC30F46BCB058F57A15572BEBCADED25E8D2BDBA5CF1EBCD
+ 0A4D02F3C990CF0DD5A96122B9DB2425796523AAB6EC8E7A9E38C731BCDF666D
+ AC4CACC071211C103918EEB9CE071D7B702BF43BFE0B6BFB1A68DE14F1FE87F1
+ 0FE1EAC72785FC71A747A9B243208E02F2C9332AA2A8EA40CF270A5C103926BF
+ 3E3C4E9E64924D1A4918BADAFE648436CDB84C65472060E4F27807009E4E19E2
+ 0A19D6029E3E8AB732D53DE2D3B38BF34EE639E64F5729C5CF0D3D52D53D55D3
+ D9DBF0F523F0578826F0B78AACF558E46DD6D729B8E3F84F0C33DB2B91EB8FC6
+ BD67C4BE269AEF4F4B7B886158ED259B4E69C45E73B87769095E48C38381D770
+ C70836E7C6D6E24B894A7EEE4698A420B1C0382300E71C6081B8F1FCEBD4347D
+ 5A3BBF07D9DE4B0AAEA10C5F66126D1CBC4AAA927DD6562230A5893C05E01C73
+ E8E614A2E51A8D5DAD3FAFC4C729AD2E4A94632B27AFF9FCF6FB8D6F84F750DA
+ 6B725935E4703423E78E390798A18E65C60855F9B6F00E0827395000FA1BE328
+ 92E6CCDD44374DA8BC3326622A07991C2C548CF519605063033D9588F996D66B
+ 8D375680476F66ED1E09CC4C7019308FB42EEF9989F9307017A64AE3E97D4356
+ 32F837C3AA022C96F02C3242B2868A4500E376CE3FE5A2704E4156C67835F0BC
+ 494DAC4D1C42D77EDEBF9A3F4EE11A9196071184968D59ADFD3F04CF36F1C699
+ 1EA1E22D22D561D90991C4913261B02E03676E14972ABC93F30E83248AF23F17
+ E8F31D49A490B7977D3FDAE58C4CFE67C858A065249239215F77439040C06FA2
+ BC516AB6B3DAB41F346904B70EE30705B634A1491B8960338C0EBC0F94578DFC
+ 4A9EE6F46912ACCBE4BDADBED6DA249A776693694DE0296CA6405F9484460790
+ 2BD2C87152764B6FF877F7FF0091E0F1260631BB7DFF00C97DC716FA61BBD063
+ D416D1566BF54B78E4936471C07E66908078390A063014AB91C1232FF06595AC
+ D1DC4F71710CD1E9D0F9AEAC9FBB31C59631E39FBC48000C025886CF41BFE25F
+ 0BFDAFC1BA198E63B67375A87911E3721698C3C9DE154A98F38233819E0E56A8
+ B5BC3A5F82B5AF38B5D5D6A0D15BDAC00167F263FDE48F9DBB5391185C31EAD8
+ 03AD7D1C6B7342C9EEEDF8DBFE09F36B0CA1515D74BFADE37FBEEFD75303C136
+ B26B9A8C77126E922F341795E35708C43E4B6E239CFCC307042B75DA056AF8F7
+ 56974EF10D9DAC71AADD7D922BA370AA4E565C491BB6319063954F1CE64079C2
+ 91ADAAE9F67A1787A1D1ADCC774F6970C75436F20896245DBE6B296E03975D99
+ 0481E5A60E5FE5E4FC637B7BAAF886FB56D5B75BEA3AA4EED290AB9591DC3B14
+ 09F32A84E8A7B740381574E4AA54E7E9ADBBFF005FF00E7ADCD4A93A49EBA5DF
+ 4D3757F5B2FBFB1D0783B54D42D4C702BCDE49655484166799C050395E19791C
+ E012BC7CA318EA34AFF8486FAD15C0B886658BF7617E5639D8F83D0F403865E7
+ 8E71F7B9BF0BE99A8247132D9991AE77894C6C438D80331CA85C9F994F5C6146
+ 48CE4E947AF2CF793DBB59CC56C44AAE61BB38DD9EA5890782F8CE0E085C1000
+ 15C3888B9CDF25AE252AD4631724EDF99AF26ABE20B06980FB55C2C2AA2411CB
+ 2360E323049DD9E9CEDDDCFA30AA5FF0B2751D2F4D852E167858802599E63015
+ 66C1081BEF0C01CE7A90012738ABFE1BF0C5AF8D3598E3B159A1B50AA5BCC652
+ 5034815B60070182903AE3701DF247A2F8EFF619F17782FF0067AFF8585F6B7F
+ EC3903B12AACAC84C9E5040A3EE46586709C6D6C8DB8C579388CC70586A90A58
+ A9A8CA4D249E8DB7B2F53D9C16538CC5D19D6C353728C536DD95ADD5FA69D0F2
+ C93E315DE9DA8AC6B2482405B73F9AD0AB066CFEED589C6428F94E00231C0241
+ BBFF000BDE7B87F29A4BE01D58C6ED287922C70065909C1F94723A9C1CE0678B
+ 8743FED2BE8FCCFB2DB5D6EDEE56401647009648F2704E492DCE412003D56BA4
+ F01FC2DB8F186A0B0A99FCB918AF98EEAA8A43007B704100ED1803628EBC2FAD
+ 5A8E1A11E6A8780BDA56A8A9D3D6ECD88FE2E3FD9DE35BC8E23361DE368D76A9
+ E9D14ECE1B3CB00410411F282793D675F5D4AE2DEE9ADE3B7B8D82E1154B496B
+ B30BF36DC1217EEB609CF1DC727E86FD9B7F621B1F8FDF1222D1E1D436EA171A
+ 44AF1093F7AD1CF6ED868CF0A171CE323382010304578BFED5DFB33F883F65FF
+ 008B371E1BD4A15918422681B7EDF3C6E92342339DA0BAB1DA76E14003208CF9
+ 59767596D6C73C0529FEF5479ACF476EEBB9EC661C2F9850C14730A914E9B76B
+ A69DBB5ED76BD763C9BC4372E933C7743CE3E423154F984608C107EEED230461
+ 8023A702A841A5DD6A65A592499BCC5C0690ECF2DB680092C3013A0CE40F9063
+ 3802AC7883CC1A8BC8D6F2A61B6CAA9264F99C02778E73B9B0475038EC6BA1F8
+ 63A42EA96573F68687E45DC483B5A30B97CAAA9C03B72413C71D194107EBE551
+ 53A7CE7CA61E83AD57D99C9BC924C44DB5A6B5E08F972C8A5B68DDD7AE4AF507
+ EEE49C54525A47696D32AAEC2101933860327E5524753D33D395E9C73EBFA2FE
+ CB1E24D574DBDBAD36CD751B8B68639E4B7B64DECF04C23646CF039F98AAE1B9
+ 1FC58CD797788BC38DA4EAD776D1EE59E3768E55707127CA0EEF9BB67710C703
+ 382303EEE787C7D0AF270A524DADEDD3B5FF0043AB159562B0D0552BC1A52DAE
+ B7F4EFB197FD9B345242ACDE4E02B02D80A7D1812403DF1FE3C99DCCEE3CB6E5
+ F76762924A13F2E39CEEC15031F3672DC8A4D425BEB27F2DB72B4036E00C819C
+ 023A1072300E320AE4739AD2D1C7DB6C9A35FF005DBC6C850EE76F9154F53CE4
+ F41D86EEA4A8AEA94ACAE70C2379595CA1697137DA4CB1C2F23403E7F2598707
+ A7239C0EFC8EBD413505BEAAA272D32C5701D3615907C8072371DA7391CE3038
+ C93CF39BFE23D3523BFDF02E15DDA38118E7CCE59411F313C63032727008F4AC
+ E430DECB6F1EE923F39B0E42EE018819239C1C95E48031EFC5546CD5C24DC5F2
+ 0CBED37CE7F3AD7CC911B0EC447B7CA3D4E40C8032DC7CC7819E3A0A522EE0B2
+ 166C91B48CF238E339EDCFE55A57965FD8572A774AB25BBEDC81B77630739EDC
+ 9E38E98CE39024296B7476DC2F965890E547523FBA7279C9CF403B67BD5465D4
+ C6514DD968CC6555858FDFE18038C7E348C1D431DADB5B9200C05FF3FE156756
+ D324D31C1FBF0CA4949369F9BB60E790477079FD0D576B9923DA3E65651D7BFA
+ 7F2C552EE8CE51B3B31389373B7F16785C2F27A71E9F4A1247B59D5959A39108
+ 3C71B48E869B22EC651C9E33EDF853A791A7019BAE3AE7AE2A89F326BEBB8EE6
+ 42C2355DC172A0F43DF1C7E43B0E2AAF2188E87DE81F2153807BD2B8E17A118E
+ A2807AEA2F94CAECBB5B729C631D0D186019B80C32083F974FC6A6B596349195
+ 99763AE0FCBD081C7E19EA4738CD45B1640DB77160381D7BFF0085016D0F57F1
+ 118356B497CC326DDE1CE46D5018296CEE19C0DCA327E63B871C62B97FB05BFD
+ B2E11A25678C7EE37103632B65BE66DA0AE036324B162B80726BA0F10594B15B
+ C4B1346A642BFBC07C98D09EFB98924EE24027246D041C938E635362FBA46691
+ 6E0FDD07E52A4A8F9401C0E7B76CF4CE6BC9C2EDA3D0FAACC396F751D57F5BB2
+ E69FE27B8D32D9A3B6D4AEAD3E4198ECF7C0D21C6412CA416C13C6EFA76155D7
+ 4C9B553BAEAF2F23DCE3E76F31C2023A1CE5BE6E31D73951FC5F2E5DD5FB1B43
+ 0FDA24F2D09C2938E4F19E3F1E49239C0F5A4B7BCBDB06090CF2C6BB46D11394
+ DA1B1FA90A0E335D8A0D2D0F1DD6527696DFD799B5278366D3FC891755B4B846
+ 512BAA79919872C0F49117E6FC319E327915A1A2F8DE6B0B3FB3DEE93A2EA567
+ 70EB3B096D992604310A59E1DAC73CE412D820E0291C66E91E2FD51A593C92B7
+ 52338256E238E60CD961FC61B2DF39191CE1B1CF4ABD6DAFCDAE4AAD716D6AB1
+ F97B49B60D0A8239DCDB39620162090704AF7245632BBD27668EAA3CA9A749B5
+ EBAAFC6E9FA6A759E08F8810DFB892E26B3B4664CA7DAE1B89565C003AA79AF9
+ 01891B8007E525B8159DE3FD0356D675085AE229AD5A58F30C72AF12A90D8319
+ 6EAA581C31233F36E26A0D0BC11A96BB7B1E99A4AC935FC814B5ADC20F325523
+ 7A80F8236E327248504F7C8C7D25E16FF825D7C76D63C05F6C87C1AC2DDE559D
+ 333DB34D0A0EE245FDE2E46189DDF39386404027C0CC336CB72E9A9E22B429B9
+ 6DCD24BEEB9F5797E558ECC283A7EC2734B7714ED7ECFA5FCB4F467C83E26F09
+ EA9E17BFF2EFADE4B19A5C488B2B08FCE8D9B2AC4838DA41182091820838ADA4
+ BB8F5E36A2F124F3371F3258D55A620820300189CEE4CF0013F3750C0577FF00
+ 12EC752F0E6A727847C5F0C9637DA583039B79D5D51978CB424EC1F2EE198C27
+ 079DD935E7373E169B4B976C32437D0CCDF2ED6C6D0C7E420704FCD9E08C6E03
+ 390483EBE1F171AF4E336D6BAA69E8D3EA99E366193CB0B524A8A6E29D9A92F7
+ A2D746BCB66EC89FC55E09BCF025C42B7914CDA4DFC4268DE1C95F2B80C76B02
+ 3701B8E33C647CDEBBD37C3C36FA1DADFDADD35E5A2B9DCECB87B77380372965
+ E392095390517A6335E85FB35FC40D0743D62C3C17F14A396E7C25A949FBBD4A
+ DA4CCDA434A0913ABE39551B0ED0C70327041207AE7C63FD90B5DFD9FECAFACD
+ AC1750F0FEA9FBFD3B5385524B7B872598185F182ACA42946031F2118F9057CF
+ E3388BEAD898612BFBB37AC5FD99AEB67FCCB771F9EA8F5F07C33F58C34B1941
+ 73456925F6A9CAD7D7FBAF5B3F2E8C3E00FED2926ABF0E2D3E19F8F96E2EBC37
+ 25AA59E9125DC7E63DBA48584438FBD95958F27E5C005406DA7E47F18F8624D0
+ F53B9D2E7669F6B48E42292AAEACF8E48076EC66381C93CB2A926BDA3C57A15C
+ 59780D9963F2B56B12C166446761170E303AB1037862B9E5979E99E47C49A79F
+ 117C3CD1A595766A1A4426DAE659D42C7392C6552C4B0C2EDDE8C47DE2D80CC1
+ 98D6792D1A385AF52BD05CB1A92F792D94B57CC979F5F337CF2B57C5E1A961B1
+ 0F9A54A2F95BDDC6E97237E5676ECAE78FDB42D285B58E18CDC1962657240652
+ 01C8C91C0E5783C6467A035D87857E7D3B5285A4BA60163B9553195659110294
+ 073950158B2E3391129C8E8398BCD2A38F5992196E9EE3CC601660328DF3E7E6
+ 240600F3C9C11807A1C0EA347BABCD2BFB3EFAE1FCF8F4994B4B1BA03B90E178
+ 2BC876F9873F3060092030AFADACEF1B23E3309EED4BBEFF00D7E1A9D2D846D7
+ 5A5DADCC125D5C5F5C06561E616FB3C98577C827A06CED209298C804E36FB268
+ 5AEC9ACFC37B38F75BB85565865CF12104A7CE482C132B18DD83F7C027EE91E6
+ 765E0F53ABC9A6ACDBBED589EDE5953EE91BC3B2EE504E407DD8C85E8B95E6BB
+ 2F0C5E4CBE0FF266F2638ADDA4B860AB208D924F2A239C93C9519C16CB10E339
+ 0A47C666DC95631B6AD3BEBE77FF00863F45C8E55284A5D138D9DBC9ABFF009F
+ 73AED424D33C4DF0F74FB8F312163A7C98C3C8ACCD23CAB975C17246E191C6D5
+ 5CEDF946DF3AF89FE1B9A3BCB58DB4FB5B8BA9B4D8ED520DCA2650B000300FCC
+ DB865C1CE0231E80F1DEE87A2DCEB3F0EACF4F4B568F5AD46D9890C81A19A59C
+ 7EECC2577E33E6448412DFBC57C7DFC1EFBC7BF0027F1CF8F2DB58FB45D5FF00
+ 876C74C6D5AD2E4C2E1AC2086636B0C12A480FCA2748AD98331E32E071C7CF50
+ CC2960AB72CE5A5E5F86C95BFE1DD9D9743E9F139662330C3AA908EA942EF6D5
+ D96B73E6AF8A7E159BC31A069BA3FDAAD6FAF2E63B7457B2DFB206302379071B
+ 54152C4B2852377392739EE7E377C156F83DE09D0F4BFEC99A1BC93CC906B52C
+ FB85F196D6D244488336D0B014B870C98690DD0C83F267E98F897F06F45D13E2
+ 65BF8A34DB3D3E6BFD2FC21378B48D3AD849A79BC867B9F36E0B8C7EEA3D91BA
+ AE0F984C6814ABB0AABA9EB9E1AF8B49F0D7C03A0C1A2DA6ADE13D62F6FB51B9
+ D62EA1D42CF4F49E3896395A75FDD4CAB301B460C5CC6B20D84839478AAA5654
+ 2A508370BC9CFCB47BF92692F36FB96B84E9D09E229559AF6894630E8ECB96FB
+ D9BDF5B6D6BEC99E49FB30FEC757DF1D7C4363E0CBA58F4AD63C572C7ABBDCAC
+ 5865B58AD0DCC308553F2A6251238C9243C4AC124504FCEDE25D12EB4CF120B1
+ BA79BED504ECA332844651331DACC9D30B1B31627801002A2BD5BC15FF000500
+ F127C12F8CBE26F127836E0EAD632DECF0D84FA8068FF76CAE81DF39DB24A195
+ CAB3280411D8D78AEB1A9DDF8AB52BCD5561B3896691E68FCB29F69753E64D92
+ 305B009E480320AF25457D4E5586CD638DAB5716D2A528C5C527AA96BCDE6B4E
+ 55F23E3736C56515707468E5E9BA89B52D1EAAFA3BECD3D5AB6AAEEE7E837FC1
+ 30F49F01EAFE36D5E4F105C68F368A746BA810CEF1F9935D6C89DA26FE16DA3C
+ C191DB2000179F877E28CB69A178C2FA1896CCB35CDCC4F3183E5BB05D8B3A82
+ BB3664060492A46C04000679396CB52D0AFD2F66BCBFB5B585480B03EC604965
+ 29F2ED392A1881D55594608201C4B8B992FAF21BEBF79A59242AC43E15A76076
+ E572B83F313D7905483B6964FC30F099857C77B6735514572F44E37FBDBBEBE8
+ 8CF3FE2CFADE068E09D1E574DBD6FA34EDAA5656FC743D0BE1F7C5D7F06431C4
+ CD1C9A7CF3B4B20998C6CAA5D30AADDB2BCFCA4EDDD8C8385AFB66CFFE0A37E1
+ 3D77F622D7FE15C9632C1BC4F6BA7897673BC4842820F1B0B30E9FC0307B9FCF
+ DD17C291EB5AA8F32EA18AD6DE34FDE0903B162101D9B400EA42F5009C86E48E
+ 4DAB78BED77AD059C6D78EECDE4456BBA4565C07CED56C06539C01D77B03467D
+ C2997669384EBA7CD4E4A69A76B34F46CE0CA78AB33CB69CA9D1519464B96CD5
+ FA5B45BF537B53D1047601ACECA69A6B6C079558372176FC8CA413B941CAF42C
+ CBCF016B220F126A1E1EFF004AB559A3B989C4D29D98DA980D85D981804B9006
+ 081B8AE09615A7199B446FB36E8ECE68862513862CAC5F19661B880A00049E57
+ 6F524E6A1D70DBEAB62CAB77A6C902B2CD1AC24A85C753C13B01461F77F8B20B
+ 7233ED53B7C353DE47CFDABB95EDCAD7C9FE87A9FECCBFB755E7ECFF00E32B3D
+ 72E2C59B54D1668E6175E761648F7026165E8892465B69CED24212DC607AAFFC
+ 1477F6B5F00FED93E1AD03C55A6DBCB0EBB6112FDAE2961224B84DBB1D182FCA
+ 4E2346041651B4918DC6BE45D37C0DAB78C266B5D3B43BD964937B130DB929C7
+ CAA0000EE38E48C924B0CE3923475EFD9B3C61A6DA7F694DE0FD7ED54848096B
+ 695485604646506E620107920753D4B57CF6278772659AD2CCF9FD9D785D2B4A
+ D74FECB57DBB763EB72FCF33AAB95D4C02A3ED29C95AFC8DB8EA9DD34BA3B6FB
+ E8715E25B9D3E7D596EA20DE6347FEB199BE72142A9C13919C365738FEEB3004
+ 1EA3E1EF8A6D7E1DF89B6EE8648D6E432A93E5DB86539501F39E439DC32BD073
+ 915CF6ADE15D474CB810CF14CE632CC77479F98282065815270D8C72176FD772
+ 6A7E1DB8B2B16696EB6FDA22CC2D14BF3B81862BB48F3382D9C631C8C7072BF6
+ 328D3AB4FD9B774D58F8FA4EB50ADED231B493BEBD0FB9BFE09A3F1C341D07E3
+ 2D85F493473785E48E5D275489C4866B7B779408A47E08628086F94FC8072705
+ 4D677FC1717F623B3F835F15EC3C79E1786187C3FE29FDD4CD12E2282EB2C401
+ B7F89B6BE3191FBBE73BC67E1AF097C40D57C0BADFDB2C669ED6691C4537952E
+ FF003538CA9072A41C9CFBFA57D14BFF000527D5BE2D7ECFD2F803C78E750B08
+ 770B7BA6667B8F2C1DCA8ED9DC4AB04E411B9500E4E6BF3CC570A66180E20A59
+ E65B2E6A6D725485F5717D5746E2F5F43EFF000BC559766792CF28CC9B84D26E
+ 0ED78F32B35E71BEB7E966FADADF38CFAA4B721A498FD9E7842302C142B263E4
+ C0C7A36723390FEE6AD7863C2B75E21D5648F4B63FDAB06E9042B20DEE31FF00
+ 2CF39258F180327F1A6F8865B3D5EF5D8C8AB2383E6286DAA76B7CAC30A3EF2E
+ 5CB6D5196CE724838F696DFD9FADEC91A44856450EA25DAE841E48DC0739071D
+ 0FD38AFD3ACDC7DDD1FDE7E66E51535ED3DE5E4EC7756092149B49BA5B8B4D5E
+ DF719A0757FF0059904EE5D8486DAB9CB642AA755E03737E2BF0D4D0790D35BA
+ 42B30678662CA8A790086E0018DBB79C0049CE062AD6B1E216F1788A1BCB88EE
+ 350F2C470DCCD80F22F3C48E4852C339DC72495C6E3F2EDD6D3B5C6F127848D8
+ EB8249A5BAC4705C3A3B490B619B71207218953C0E464962735CCB9E1697DEBF
+ CBC8EB7ECEA5E1E5A3FD1F99C0C5AA49653B19A256CC84B44E0ECEEBB4F391C6
+ E1C9040E86B52D34483506F2E19249AE18B8C4A028230480AFCF272FE8015239
+ 271587A8DAC8AAADB15500C3323EE5623B939EBCE31C7AF7A7585DAC6CBE6B16
+ 85410D1925449C67181D391D7D706BBDC6EAE8F214ECED246B5FF862EAD19310
+ 8DACC8861138676DCBB9369C73C71C0EA3E95CFDCDB790F8C9F7E3A1F435D359
+ 5C4F1DA48DB5644584AB79A02908EF83905B00658303C0070C304126ADB18EFE
+ F516E17C98E40B04A6320E08DC0305C8CE300119C1E7905B226326B7349534EC
+ 918861611EEDADE5AB10083B8020679EDFFEB3D6A2C945CEE5F9BE6E80E304FF
+ 009C568EA7E1F9AC2FEE2DCB67ECAFE5C854975033F78103EEF7CF1D6AB69D03
+ 25E46AC8DFBC23394CE46EE71DFB638FA56CA5A5CE6941A7664689B60594F964
+ 12460F723F0E9C8FC8D176B1F98CD1C788D892B939E0E71F97F4A9F52D3A5B19
+ B6798AAAC72AA1FD40FC3F3C1F6A8A22D3C689EC71918C9E78FCF1D7B9ED9269
+ 6FA83D34642A92065501BE6391C75EDFE3448BB7701F32A9C640EBFE7148E433
+ 60617D4FA9A425906DF5E6A8CCF4CD4A78CC92346ED69E6294D92267CC1C0280
+ F1DB041E71F2F23AD63DD69533796B24AAAAA3685693FD51231C8E4A60B01CF3
+ 8C6323045ED42FE3B98A592CE591CB44A591BEF1180A49E01E72070703A67818
+ C56B9DD13472470F98ADB49C70482738E0939F5C9E47A9AF368C5A5A1F518CC4
+ 29BD7506D3AD52DC159A1DB921548CB221E85B90A7390719CF0D9000A996F808
+ 7CA4119994BB1F2A24276804F6049C60939E718240F98D55B575BD7F9A3332C4
+ 9CC61F0CA460000E091D73F81C67147D8E6BE68D36DAA49B8E106C8D70C0EDC9
+ 27D41CE7A0FC2B7E5FE638635249FEECD6B6F1DEAC6C9615BE92CD1632A61887
+ EEDF3C6E39520672A32383C74C53BFB5586A0B75777524D38606576C37DDCE7D
+ C292586546719AA3A6E872DF23B35D476C5570472FF3E07A0200E0927D33E840
+ DAFF00846ECACAD9267F11692CEBBBCD8A28AE9988C6376EF25976F5C90C4647
+ 201158CA504ECBF23AA9C6AB5CD37F7BB7E6CE83C13F19EC740D5BCED5B49B9B
+ EBE6388EFED751C797F3000E1E397CCC0E31BC02B91C1C63E84F017C79F11789
+ 6DA38743F106B9AD5F3B4BBB46B3D4AEE378C85626411AAAC4514E48542C02AF
+ CC02EE07E71F08685A6F89B568EDE6D4B4C48B60092BA3ED62BF2A2B29191BC8
+ 41D39539E00C57D05FB387ECA9E1D9923BCF1E78A7C41E0DB68E5F3EC10E9025
+ 794797CCD047232BED50B8DEA9C32ED3F3614FC8F11C32F85275B131775D3965
+ 2FB924DFDC7DF70AE23349545470F34E2F5F8A31B35D6FB37DAF7BF43CE7C61E
+ 13D4BC5162DE25D53C397FAB471A4D0EA3AAD9DD2FD9D6795775B972B1ED84C6
+ 76A32C9FEB5636C18F3BD767C01A2B788A38ADB4FF0009F87B48855D2E19F512
+ D218E3672CB3169A4C7959213780158468B966791A4F68FDA1FE1E2FC09BB9B5
+ 1F871E2FF1878EEE35464D4357B6BBD2DADDA386768F133152648BCC32C28197
+ 69632019F9B0DE55A97C14D4FC752B2DC68F3F879AE0CA9B75778ECBC9986E0E
+ 6392E1E37DBE606520962AC1BEF30AE0C1E694B15845520F961D1BE64D79384A
+ CFD3A5B63E9A9E5753098D7CF0756564E51F775BEB7E6516F5EA9EB7DEEF51DA
+ 87ECE569AFC434ED2F5CF0DEADA9C7E58834CD3750713CD2EE553E589F0AD230
+ 2A31016626350131C9FD2AFF00824DDC43F15FF643F117C19F8916BE659E8D22
+ DF592EA081AFB4886587680AC7E5785711B02A48E0F5CAB37C0BF0174CB1F0C7
+ 8DF4FF0005FC5AD06DEEBC1FAA47BB4FD5E28DBED1A3C8C85F7C727FCB4B6660
+ 032B72BBF7280C39FD22D53F651D73F668B586EF41D623D59AEFC3FF00DA369A
+ 96EDF6F716E88E375ACBB8BDC46AAD0B3C7282F1C523126454263FCC7C46C62C
+ 4E1A194D59DA726A74A7A5AF1EB192D9AFB516935DDAD4FABC972CCBEB57789A
+ 6BD8CDE8E17774D59ECD6EBA3E66A49B5CAB5B7E5C7EDC027F83DF17756F0FC2
+ AF6B3786AEDADE096DC956BE80B48633E60CF27E66EBB8AAB6E21715E13A2EBC
+ 7C39ADF98A1752D16F0B712C6551F7FDE8C8397F9979EFCB6572724FAF7C70B0
+ D635A8EE2D7C5107D975CD3E7B88248A780ADC23B8FB98607E56DACBB5F0CBB4
+ FCA7803C6C5B34575750C88F706E1CC320556636F27DE546DDC332BF6C9C84E7
+ 3D47ECDC3F4D47010A552D2924949AD9BD355EBBFF0048FC5B8865525984AA46
+ EA2DDD26B55FDD6BF07E972E7832CF47D73C59742EEDFED091ACEE4BCA618E18
+ B66564121551F781E9B7963E82AB47A54310BFF3BCBFB3CBE595D9857C989CC6
+ 0A8450DC800600243F1C93892F7429ADAD2058BECEB744889E53297FB5472464
+ AB7CA33CA92029E70BCE09615ADAC4516A776B1D9DAA59C9E579A96D117912D5
+ 94AE0A3A1DBB8BABB670305C0EA457AD2A894AE9E8FF000B7F9FFC39E453C3CA
+ 51B496A9FA5EFF00E5FF000C769E0665D5F47D12F976CB790ABD8DCBBBB8DB10
+ 05728392C497FBE49C82E33DEBD6BE0E7851A78BC49A05BDE59DB6A9AA4113C5
+ 6D248375D461F98E1560D9983221527231E6A67E650DE7FF00087459E6D1ED6E
+ D1ADD1751B331BE642161BA5DA4A9E0EE0FE5EECE4633283DABE9EF861E199B5
+ 5D46D75E86F175092E349D888F68D717168D6E62754D8F80DB21B799A360CA57
+ CB44CAEE2A7F35E24CC7D8F3422F4E9EA9DD27A5ADBAE87EC3C1F93AC43855A9
+ 1BA8A4E5FE1B5A4D75DACF6767BE899A9F05BC1B633FFC20FE1BD42F2E048DA9
+ 692FA58D4629BEC96315DC24BB8938036CB72D70D090BB3C920804865BDA05A6
+ A5E24F871A7D9EADF2CDAF68F73E19F0CA4E4A4897B73BECE72DFBB1B9A3920B
+ 8588150FBE4897FD6B6EAF5BF879F01ECFE227823C6F6F3ADAE95E2EF0978226
+ D52DA18D4092F223777372278CEEC3045BB75E0E36DCC2C4FC81CEFEBBF07EF7
+ F684F821FB2BC3A5E9775A7F8963065D60DAC6E194416F0DDB5C63921A68FCB9
+ 58B73E633F182057E595B3CC3FB6E6A8EDEF2BB76F77DC94EEBA72CAD6BF9B4F
+ 57A7DC621C9496122F4E57076D15959C5CBAA696CD6CD6F73C33C4BF0D3FE105
+ F88D7FE07D42F9ECFF00E16EBC36CF7B2BAC66013AA1B78CFF0000F2EF9CC930
+ 4015961DBF2090EDF12FDBCFE1AEAFF027EC7A086D4ED75EF1169D6D1EB89B8B
+ 5C335B17B53013B89C3B4424000054BAED242853FA19F1F7F639F157ED87F1FB
+ C4DF1016CE1B7D2FC23E1E8ED6D9377EE66D626B60D2301803F72ED248426E21
+ 9631F3600AE3FE317ECA1AC78B3E2B78CBF68AF1A2C67C31E1231DB784ACAED3
+ 68F11DEC2BE45B5C347D4C71CC6E252490A7E43CAEEAE9C9F8E70946A52AB52A
+ 26ED79416AE551D9420BBB7EEDFA2E5BBB59B3C9CC3030AD879D28A5194E518D
+ F997341349DB7D6FCD27B5ECAFB5CFC88F897E0C9BC23BF47BA86C6C354B35FF
+ 004B516E545A5C385722498E08755DC36FF0F19C9C0ABBF04FE19CDE3BD2B58F
+ 175EBB59F85340585750D44A2B99262001046486CC8C18F0BC00070A42E3DFBC
+ 3FFB2A5BFED35F1CFC3BE1AD2E69163D7F56B8BBD4B5AD42166B6B78FE469656
+ 5049DB1AA019006F63C056562B43FE0A31F143C3373369FF000BFE16B4C7E13F
+ 8327DB0DC496496E7C4FA82FEEE6BE270412599C2FCC70A18610600FD9297113
+ C454A596E1D37524B9A726B4846F6BFF008A4D3504F54AEDEDAFE5788C8FEAD5
+ 6AE2EB27C91D211D7DF974575A5A374E56DEDA1F2778A62F36F679E27F262B99
+ 0C62CD6E5B11E49DA09DC46E5642D8048CE3A9245751F027F674F10FED0DF10A
+ 3F0B784F4F9354D461CB4A608CBC368A10EEDD80A72486048C01F30E76823AEF
+ D913F620F177ED99F1C23F07F85FECBA5D85AC6B3EADAF5CC4CB63A2DA008AF3
+ C81390E5951123CB49239C01D4A7E977C65BEF80BFF04E7F81D67F0AFE1878A3
+ C43AEEBB7512C5E257D0EDE2875EF104A729BAE6ED91D6CE22E40489448F8040
+ 4571E61CF8B38E2196D486559747DAE2AA2BA4936A11FE7A8D6CADB276BBDDA5
+ A9E3F0EF0DBC7E23DB632F1A29B4DD9EAFF95349A4DFF925D5AF827E24FC2FF8
+ 77F02A09345BA9A4F166B36045B5C436370B1DB24836AB2CF767059B2AA19200
+ 9852B8994E41F3E77F14F89EC9AD74743A0E96D2622D3349B016914C8BFDE203
+ 49361470F23BB8058B1E08AF77F895A5EA1E1236B78BE1BD07C076B7E50C22DA
+ 132EA02256CB3C9753079F9F9CE10AAB6EDB843B6A8FC0EF02EB9F1E62BA5F0A
+ EB1E1DF0A786747411EA9E25F136AB06990B0DAD20489E520BB8652C40562776
+ EDA0633C785CE1C309F59AAF992D5CA6D349FA24D277D128F337B5D9F718FE1F
+ A74F11EC657A6ADA4631E5935BEADBBDAD66DCAC96F6479FFC22FD813C67F11C
+ CF6BA1699ABEAD343B85D490C40DAC4C5F03748C15372EE0594B1395C923201E
+ EBC5BFB07F88BE1369374BAD43A3E98CB08F36EDB54B69E562E3E72E8B26482F
+ C8DC0E492181C6FAA5F19BC37E11F862DA7DA69FF1113C64D09185B2667B38DB
+ 396086550CE18331DC33D8E064D7CDD7D1C37DAF4C2CE4B368EFB885D9D20552
+ 7612A46000D83BCA97C0F5272077E0A599E64FDB46BA8D3DECE94937AF9CA3FF
+ 00A4BF99C99853C9B28E5A4F0DCF3B7FCFD5A5D5D3BC632FD3E57D3A2D7CDF59
+ F8A2648750B2BC2B024B12C4AE924926CE7E5072B97D99D9C10A9C1C926C691F
+ B6378E3E190B7FECDF186BFA7DC4C195C4173BE143B94F2BC2300BC60818C0E3
+ 3CD79E6B2D736B235C416F73F67651FBDE6313165DA1B732E4138200E461B1F3
+ 02D591A5C3F6ABC492FAE92D597251E485B71906318C637364E0E7046320E719
+ FB0FECBC3D68258A8A9AF38A7F86A8F81AB9E6328D46F0539536DF493565A75B
+ ADBD4F7D97F6EEBDF1FE971D9FC42F0AF853C4D14BC36A5696BF62BE8D882B9D
+ F01085BEF1C6DE010739073CB6A1ADF83B5DD5FED9A3FDA6D2386532456CE616
+ 6818A91C1406370487C8C1C2AE42E0D792C8ABA7DEA85FB5B2CA42AEE410B38C
+ E321793D791CF4C81D4E2CDB6B725B6E9943B4672199785667E31BB862429201
+ C6496627B8314720C2D0BBC2A704FA26F97FF01D97C9235ADC658FC54553C7B8
+ D5B7DA94539FFE06AD26BD5BF235FC47E1CB6B5BC759CDB95DE88198EC914F21
+ 31B4326D2BF32E07DDC1E0609E5754D0869F0ACCB711DD5BB1FF00964FF3A039
+ C654F38393CFD3A6413B77DAC1D3A58E248D1AD5A1127921DA312272C09CE41C
+ 1EF9E0818E40C558EE434CB2279E8155DE36810348231CE78C2F4F94923A1030
+ 3BFAD4B9A28F9BAF2A53934A36FEBF1FEB631EE74D6B59247762F1630DB43000
+ 9E9F7803DC1C9F7A9ECECBEDB0AE579EB1AC8E7A6707240CE36FD0739E3807B5
+ D3BC3F0F8DC182CE355D489540A02AC739C9CFCF900BFCA000301B819DC497E5
+ AFAD7FB2EDA485A6F261050DCC0F857DC1D89503A6410DC1E3907038AA8D6527
+ CBD5057C0BA515516B17D7CFFE07628DADAB4691FDA3CB8D59DE37695B2533FC
+ 24632318E08EE4E0F5C6A5D5F2EA506DDF70DF3ABDBBCA4330E0650125491903
+ 1803A10318E67D2EE66B5D40F9CE9E5B80CF98079678FBD838CFDD7F4EDD0F15
+ 9DAA4126833BA499DEA72CB21FC8F1D41E79C76183CD5735DEBB98C29D969B11
+ 5E4F26A68FF6A959D6663B582E70C09EA077E7FC3AE465EA36AF6173245CBAE1
+ 589CF073D0FEBF866B6EFE38E4759D6366B6500B67059170A1B9C7FB4B83D395
+ C73C53FC59043246B209966F2D86F9301588650CABB7B1033C8C82727249AA8D
+ 477B13530EACDA6655AEA78824593866DBB5CAEE5700818F5E06E391C9356AD0
+ B40595D97C947DEE8D1EEDA3E656CEDCE095C1F438C823033936EB182ABE62AE
+ E1B496070B9CF248CF4EBC558875566668D632B1B3398C8CB3A038E878DD8C63
+ 078E4F4CE6B468E58D4B3D4DA91FFB6B488668E48DA4B783CAB8600E648C12AB
+ BB69C9D8801E8381CF45CE4EBBA6CBA2DC346DB65507EF8F981EE083D0865DAC
+ 3A8208ABDA16A0BA5EA323C6ACD6AF206765556654C1C81D46ED8CDCE78C67B6
+ 6ABEA90ECD5D6C659A310AB790F26E76C286C06F9802001838C0E3B0E9511BA9
+ 58DA4D4A3AEFFD7E65868D75BD1D36B45F6A8C64FCFB8C8723180060640C7201
+ E1467AD73728C39C723DAAD38FB049246CABB9728719CF51C83D3FCF4A734909
+ B3586351E66F6DCC32778C0DA3F307EB9ED5715639EA4AFBEE51EBD29C780436
+ 7767B8A723A842A7D476A595BCF390AABEC0FF0089AD0CBA1D6FD924F326F397
+ 16BF784D21F90E032A93820F2738CF5F9B1D0E61B575B268E52637F94AB796C0
+ F18DB93C646771C1001E9C8CF1207B8D6ADFED578649E6DA02C9B3E5DAB80BB3
+ 046EC640E08C0500020556B75B8CB35BBB431F9843499F9739CAA67A330CF73D
+ C74519AE3B3D99EC4AAA6F996C45711B5BC4F347E6346CD80C832A8DD586EC1C
+ 738C607233CF632E9E63606393742AC39631EE78D8A8078DC383D3F1E7900D4B
+ 6B671DC6F92420F9D16F0B26E6DEC72C18741DC8C76DF91B8E01E8B44F07DC38
+ DDB7ECAACDBA36E1A4C16E1940FDE7523E618E841181F2952AC62BDE1D0C3CAA
+ 4AF15A18561299E430C31FDA2054F3A28CC6E1A263FC4BB4EEE0A8EA48E7A671
+ 5D1E9DE03D606AB35AC9A7DECD34927C91A593CE242DF29CB0E195700E09C640
+ 3D724F63A2F866CE566B5592EA6452102AC7BD9803B8AB0C31CFDE5DAC0023E6
+ C805ABB1B5F8791DC24D70DA4DE4826431CCA26755452724617695077E0332F1
+ 90C30338F0F159BC69E88FA4C0E46EA2BB77D7FAEE79EBFC3FBCF0EB470DFE8B
+ 35A4703150268258448CB81BF95049230485C1181D0935D77C2BF04788347F1F
+ 68F368F69049AA6BB281611A08E68678C86C33A3068B77CB92B22371FC2A704F
+ 4169FB3BB4965717CBA44924321DBE747732F00AE18A0650A4EFC7CA4EDE40E3
+ 15D0785740D5F4086F9B49D5352D2E1B17F3278A1D7278D132C1555A39700B01
+ C280B9E10AFDDDC3C5C4E6D1A909284937B6BB7CECD9F5185C95519C1CE2D6B7
+ D1D9FCB449FF005A1EAFAC7ECDEFE18F0227887C6BE0DF04DF691636A4EACF65
+ E3287CF9558044B88A386512432AEF398C318A42400918F95BCFFC1B610E87A8
+ 1BDF86FE15D17C48B2813AADDC136A17F6E7AAF9D02B2C4DB4E70CA986F30EF0
+ C482BEBBF023E1AF88BC7BE15D21A482CE3B4F31350D1E63E285D1D6E278D9D4
+ CE222C1A57E1944B008CA6C006E2ACA1FA0E8973A778CE7B7F877A1F8D75EB9D
+ 31C33E89AD6B57DA858CA40D9B6DAE2DBCB8FCA263DA0B05384203B05D87E0F0
+ F9A497B4C3D5A8A525D136A097F79393B7ABB2D93D123F498E0FD9D4A789A709
+ 538BFB5A7B4BDAFA691BFE6F74D5DA3A2FD92BC657DFB5278CEDFC0FE235F0CD
+ BEBCB3EDFF00847F5CF0D5AD9DAEA41B29BADE58922921982B0C472974393F33
+ 1F92BE9EFDBA2D7C7DF03BF655F0CF839AC7529ECF47D7E2B2B3D512647B9D22
+ E97023F32474C48AA59518BC6BB925F9BE56463E67F0DFE25EAFF12FE20699A0
+ FC6CF01E8BE07B791560D3F597F0FE34D8C30E545E23F996D2FA199A54621785
+ 2303E9BFF8285E8FF11FC37268A249B4DD7B49874992C359BF3E5DC2DCDAED29
+ 13DEDA1015D24124891DCAB2AC64C996456764FCBB3DC77367F86A4E30E4BB92
+ 8DD38DD2DE33564EF7B5B74EC9B7748FA4C3E3BF7B4A9D5945B6DEB28C94EE92
+ 49F64D5F5D3ADD5D6DF95FF173C4571FB4378A566D6347B6D2759B08058DDFD9
+ E1F252ED0208A395180DAAC812361C004B1197DD83E63E22FD9EF517B26D43CB
+ 5B36855412007255812A4156272CB8207A9CF23247AF5C4BE11F10DDEA77162B
+ 3D9C9613C718B3BB1F34A0B1561B4E7023054704F0DC8FBB5ECDF09FC136F2FD
+ 99AF6DE09AC6F156291422CF1BC7D881C8C8C7420FCA00391C57E975788A795D
+ 34A9C5C63D13E9B68BF4FB8F5A9F86B86E21854C452AD1725D93BBB69D158FCF
+ 7D47C3E2DE69B48BE175E62B3369CED1233EE0C18C4146376F071B4F3B873C35
+ 55D340B7BCB1BA8D9A0335C1DA0C642C29952A482A4804F63CE0640CE51BEC2F
+ DB27F62D5F04EBF2CDA64361F65B510B24F6F1F9914D114F303670402DF74923
+ EF765E0D78BFC46F85935C49F6EB1D3ED6CE3D3ED55679A25599A610901DE685
+ 98F93349B54927E467662990F91F6796714613194615212D24B5BF47E9E7DB5B
+ 5BD4FC4B36E09C7602BCA0D3972D9A693F7A3BDD7A7776D1F9245BF8736771E2
+ EBB863D3F499AE6D6DC34B2436E88D30508CD21418C4AEAAAEE039C92801EA4B
+ 7D83FB2CFC30BAF14EA8DA6E98D776B737174B756CF14A49B95608AB2C5218F7
+ 3446E37201BC6C6B94249DA6BE67FD9EF496BED0F5382E12DACCC8A86CB5208D
+ BACA6899AE08731FCCCCFBC65B1B82AF43B307E88FD89F47F154B6DA3DAF87EF
+ 2EACBC53A6DAEFD2A6476F2D6750AD6D1823236C8D8058A856202F25C01F9E71
+ A623F715630928F2F7DB557BBF467E95C1B4674A9BACEE9B8369F44EEBDD9764
+ D1F6E7C07F0341F19F44D27C79790C7E18934DF86B7BA06BEAA86081E6B32209
+ 9D5011B374293653F876B8EDCFAA37ED17E17F853E36D261F0C68B17F6069FA2
+ 4702EA25B98A1469F722AA92773ADADBA678077900838CF0FF00127E291F0FF8
+ 2FC310E991CF617DAB4EDABCD0AC222B699757C898B2918FDDBB3F0A7E52E57D
+ 08F91BED0740D5F425D46F2EAE2E2E34EB88BCB506381E59E67F294C436A98D8
+ 2B74C062983BB1B47F3EE0727966CE75F12DA82BA8C75692BBF3D6CAD6BE9676
+ B6E7AB97F0F2CC249E2EFECF58A8A6F6BB576F797471E895D3573D47E20FFC14
+ AB5BF08FC00F1BDBDE5FE929AC5AAB699A3471C224B68EEE6679EE2ED59B05BC
+ B4689371C9CEFE407C57C17F1C3FE0A51E3DF8A0D0787754F116A5A9693E1DB1
+ 95963B9458A327A34A2345011B6AA469F303C9F997EFD7AA78FF00E1DDDC7F08
+ F559246B8B7BAB193646863DDBCBAAB2E1B1C9050303FF004CC019200AF8A7C4
+ D0AC1A3C91DBB2CC2EAEC318248FCC919958042CDB4968CEE24280C018570B86
+ C57EF9C0DC3192BE7AAA9465252DECB46D747D34FCCF03C4AC2E2725C7BA184B
+ 42FEF3E5B6AFBADBE2D1F7D5AEACEDBC7BF1E356F0569D7B226B17965AB78A2D
+ 9EDA5F2D8C72E9B62CA1C5B46C23561232E095560A40525640428F11F0EF8475
+ EF8BFE3F86C74FB378E4910ABCAB948B4F552387DA081B518020124B38C00491
+ 5DAF8AFC0BFDAB1AC97106BD75A8DB0FB3EA534E8CB325CAE234458D72DE66F3
+ B09C6419010B80D8F4BF0FF86AFB4B31E996ACB717D72EB1490DBA1914160C42
+ EEDC774519978233B999CE554328FD3A188C3E5D41BA315CF2BDDB565A7A744A
+ D64FA5BB9F98CB038ACD717155E52F671B689B6F5D5FCDBDDAEB7EA91EB3F0E7
+ E24EA5F0D3E0D69BF0BFE15CF73A4DC6A83CDD635B82355BAB99D9719F30636B
+ 053B14F0150154C0CB3745E18F0C7857F657F0E4DE20F1032EBBAC5BB1FB2AC8
+ D833DC0566DC0B13C7CCC0B91D59860019AE97E0F7C3BD37E10F8126B8665B9D
+ 426329BFD4625E448DF318611C31FBAA3B2E3192475F9BFF00683F1EB78AFC43
+ 0ED6493C976081A65921B51C315208CFCDB7891B904B007AE7F2AC2D2FED3C65
+ 4C3D16D5272BD492F8AA3F37BDBA25D1743F74C67B1E1DCBE38AAD14F13CB682
+ FB3495BA2D9CBAB7BB7D4E13E3078FF56F8D3F1066D5B584BABCB898161676D2
+ 95B5B140A4024AFEF015F9DF0A091C6186DAF4DD1FE2F7C25F87FF00052C741F
+ 0D7C38F1078E3C5CD12C777AEEA77B15AD84170773C91DB5A2EE3B118604934F
+ 92467CB00B579DF877C2DFDBFA47D9E3B1322C85A59F4EF2C46B3E4E144CDC28
+ 8D14293B98E327E78C002B3756D09AC21925BC669631208EDEE2181DADA59C46
+ A5D2DE3755DEE498009381B012770DAC7F45A983C257843097718536AD18C9C5
+ 69A2BF2B4DAF2BD9F5E6E9F8BC71D8A962658C4EF39EF26937E77BAFC1ECFA2E
+ BE77E29D54E9DAA4DA85BC30E9B0659D521665321FBA42A2E7774DDCE178EA0E
+ 41E66F2E95F495FB1DAC76B04312ACE225DEB70CA3971B8B2965738CF4030172
+ 300741E24916DB4FDBA8346CDB372ED65DFD416CE48EC33BD48CF0406DB458D8
+ 6A7ACE90B258697A85BDAC974CA27F27ED52615403E5A6634C67E5DC5893B9BE
+ EE4AD7DA50928D34DFDEDE9FF04F91C6538C2A4A327AB57E5B26D79F68F4FE91
+ C1AC0B1CD7093431DC4ABB14C51C6CA0A02BF779DD9381DB9279E00359F73657
+ 2F76FF00BC9A79A4DDF6732C78DB1825413938008C8C0C8C8C64F7E9AFF4FBDD
+ 1EE55EE24BAB18DA385195A631B8CA9249543FDE018E481F77F0AF6BE1D8B585
+ 0B73790D9C3BBFD75CA4DB9CF21DC60139C942460E3BE3014FB11A914B9BA7DE
+ 7C8D5A739CB91E8EFE9F7FFC13020B8B94BDF2E36B82AA0467C893CC590AAE73
+ 91818E871E8B9246322196681A76566B868F1B9774780EBD4E4923E80E3A6781
+ 9C0D9F12F8452CBCC75BB8EFA485E343E5C4E8A8B90BC87505486F94AE010411
+ CF5ACBD293789BE6FF004C8DB6819D84FCC9F748231863DF8C63D0E368CD4A3C
+ C8E49529467C92FEBEE18599648580F2D4818642133F3AE304E47DE5CF520609
+ 1D0D422D4583EEB912C724670B1852B9208DD923D39E41EABF4A79BCFBCC57CC
+ 62DE5E013B4AF20AFD39C8C7A1073D4B4E9FFDA533ADBCD1A8854878FCD2A0F2
+ 000371CE08DA33DBBF02AD799949A7B6A5987536B5BE65FB3F9B23ED91A50C63
+ 69141DD9076820E72370E491DF241F41BD861F8BBE1CB8D696323C63E1DB7173
+ AADBA80ABAADA2939B94C9CB4F12946948FBC87CC2B98E576F37860BA8A50BFB
+ FDCC198B742A9B7191B8827E5208E9EFED6FC1BE2AD53E1A78F74FD73492CB71
+ A6CDF68883212B38C90C92293F346D86475390C0B039C9CF36228392E6A5F1AD
+ BCFC9F93DBEE7D0F4B038D549BA55F5A72F89755DA4BFBD1BDD77D56CD9D76A9
+ A2FF0061DBE9BAEC36EB7BA1EA00C0FB613E592AAB98A4CAEE564F95B2776176
+ 95E41355BE22F84E7FB2B5FC71B8B652D2ABE3F7A223F7723A8C723E62070460
+ 1C67B6F8B5A3C5E187B3B9F0FC0F3F833C796CBAAD9DB9DF29806E21EDD828FF
+ 00596F30788B13B9810C78635CFF0081E592F34B4D1F5A86492D6712DA79DE41
+ F2E12C15636078C80771F973D49C93803CDA38994E9C7111DBF1B766BF993BA7
+ E87A78FC0AA35E5849EFDD6D7D2CD3FE592B497933CC6DEFE0B227E449143315
+ 1D5B07201041E1C6723F84633835B2B62B7104D66D234C971E5B4122480F0300
+ 02339C67036F38CF19C0CE26A3A3DCC1AC7D9DBCCC47214DD2218F85661B8E78
+ 1F75B3CF556FAD6FF82755846A496B248D0EFD8F2CA32CC07DD3B76E0E407603
+ B85C8E7A37B552DCBCD13E730F773E4975D3F4394BCB29ACD9331C8BBD43AEE5
+ EA3AE7DC7BFA536CD1AE0B46ACDF3005BA9527DFF3EBFE35DA78BB47B2D5CB43
+ 6B71343716419561998B000052A80B615403BC0E4E72BD73C7171623983168DB
+ 71C95C718EF9E9F95553A8A71B98D6A2E9CEDD07DADDB46447E67951EE52780C
+ 037F7BF31D476CFAE0EAF880AC69B657DD2208D0EC6070AAA703B7523D38FA11
+ 9C6965DB70AC01640FB94B0E48EBC8391EE7AFE22AEBCBE75AFCCEC42807693F
+ 331EA4E39C83EA7D7A76AA6B52232D2C36F97CDD5265DFE7AC2EC88EA400D827
+ 9EBD09E7BD514658A76F97E40490A5B3F4FAFF005F6A92EE4C5D48CA3EEB11BB
+ 3F87D307D3F5A6A40F3453346CDB23C17EBCE4E07F938AA5A10EF26428446DC8
+ DD4E8CE4B6EC743DBDA9D0C6B2363E666E303D4FA77A119776EC2B0507861F5C
+ 7D6A893B42FA6E94BBAD55351BB781904B3C412141FDE48D73BB03764B63B71E
+ B1CF6F242E1EFA777796312AA970546705B82081861CE464FA1C9A34EB3B8D44
+ 7EFE5096F112A2EAED0EC8F674C6EE491BB9550480D9C0C56FF84BC1D71E35F1
+ 25B58E91637125F497021474899CCA038612275C613E625C303DB24907CFA952
+ 34D3949E8B77FD6C8F7A951751A8C15DBD92EAFF0057F32878674CBCD6E4B158
+ 225B7F32460EF18263444C67956E32BB812083F272706BD83C11F04AEA0FB3A4
+ D7524F1B1599F7EEF2892360063DC3E65C820B923079C0622BDB7E067EC64B69
+ A6DC6BDE2287EC9656BE58B8D8C11EE261BD4051CE4B101B68CEDCB71C151D2C
+ 3A1697A0799A86AB736FA36970A192DE38A1225F2880BB123C8118397CB3328C
+ 02327E62FF009BE69C694EAD4950C1EB6D1DB5BBECBBB3F56C93C3FAD4A8C713
+ 8DD39B549E9A2EAFB2F5EBA1C1F853C0525AD843F63B75B78E3CBBEC431AED25
+ 792FC3AEE51D49238C92CDCB7636FF0006F5CD13488E5B96B58ED9CAB35C33B2
+ E470A5433601E83F889385FA1C2F17FED63A7F8774C9E1F0DDAE936770BBFC9B
+ A96159AE47CA17CC5DCA555B395263443904063815E3FF00107E357893C75753
+ 4D336A16D1ED1306D4AECCD2331DDBB6B4920930B8C000918563C9009F230F97
+ E678C7CF24A9C7FBDABFEBFA67B588CC326C02E48B7567FDDD12F9EA7A87C42F
+ 0D69FA6362E35855B852F0AAABBAAC6A9FEB1186DDA738CED0DD50900679E175
+ 9D02D747D4FF00D16F96DE5B576746B3990950EAC01DC1D76F50013C7DD01725
+ 42F0B3DC25AEA42E26D4DADE77C15BC24CF3DD020E7647850FC00B8C0ED953C5
+ 5CD1E75D3EE63DB67AC6A690DBE10C53C51386002850A0B800EE7201E305C8CF
+ 247D261F2B9D08A4EA5FE563E5F159B431336D52515EAD9F407C2DB15B8F135A
+ CB71F10FC3FAA5BDE43BE7BCD50FDA3EC99432340CB385999F90A7ECD818180F
+ 8DB8F739F42F0FD8E91A449A1787743D6E4B87F320B8B4F0FCF657BA52EE509E
+ 49696E526DEC18A24F1C8CCCCFE5804115F236856F025E5B48BA2DCCB6B85880
+ B8B8F91D40DE2360AAAD92C181C80DDF7026BD63E1CFC5ED1FE1C457B75FF08C
+ AB8D4A2F2A38C5F490D80899373A18DD8175230BB647E09191919AF8CCEF2FAC
+ E5ED294A4EDD172A4F7DDAB5BFE06DBDFEEF21C6D1F67ECEA4631EAA4DCDB5E8
+ BF2EC7DD9F0664F8C5A8E9FF006CD43E33786EFB44D35C452F85BC4B732F8721
+ 55042B44AA62B76327F0E4C320257E604F03DC3F6A1F00F867E20FC0BF0CEBF2
+ DCF8B7C22FE1FDF60F636D3C3730DB995576A2C90AB1F2D9C602C24AB6FD9240
+ C315F0EFC33F1C7867E2CF8B11359D15B5592EE3334165AA22DDA4916C53BE11
+ F685551C190ED91708E0E1C8DA3EB8FD9A7F6B2D37C1DAFAF853C0FF000F3C6D
+ 67E1996164D4AD6C35A1AA5BCC1B8DF1DACEC0440EDE0C1212C73C13B947E1FC
+ 4785C552C4C71546369D3D6C9422B95EE9BD9B7AD9F236DF5EFF004F5F035E31
+ 857C2FBD152BDE2DC53D1F326DDD36F5B595D6CECAEDFE79F8ABE0E7D962961D
+ 66E34892D6D2FAE2DD75ED3C069ED5C0FF005171086574F94BAA80A361738C80
+ 00EC3E077C3EBCD1EC6032F93F61B85D9282C81613862AC09DD85C9507A6E2E3
+ 382A76FD75FB607EC756B6106A1AE422C7501AE3302D71A25D69173A7B37DD13
+ C007DD0140F994A3796841EF58BF02BE1669BE288A1B36DD24F09FB2DC2DBBB3
+ FDA18654B8DB14AA721BE4CAE01006028247D06238C28E372DF6907EAADB3F4E
+ 9F72F2491FA070AD4A5420F33A4DF2455D357BDFB3BA4ECBCCE4A4F867A8F88E
+ C22D2E45B759ADC9B778AEE16024CB3EFC1C153B4EC04641073C1AE3BC71FB32
+ 5EF87355B7BD7D3ACE1BD9C9B1D42216E1AD5ADC22411C6D264B888A170501C0
+ 31C4D8F9415FB30F82749F0BE90DF6ABBB5B65BE80DCAD943A5ADCC36D74A3FD
+ 1AED23919FC967CA248A8EC8720F28548EE3C49E24FF0085BDA3E9D6BA7C9E0B
+ BED4A589DDE79F418A3BCF35199044084237B15C840776D75E1FE623E068715D
+ 4A32BD2F875BE8F5D35ECBF5BA3A71DC6DED6709CE829D2BBBC9A7171D3752E5
+ 764F5BABF45AB4EC7E59E89F059F42B3D26E7CCB6B7FF847E6756D3A4806DD51
+ E4B8C484B72182C2426D7E8A9C6DDEC0FA47C07F12EAFE0CD7F4DB1D07536B0F
+ 125A4B2C565A8D8B30F3E3DCA5554B0DDB77FCFB5C0FB88700E2BD2BE24F81A1
+ F0FF00C4BB8D1EFECFEC2D70EAE228C06FB2CC7E5213B32E4E01CE307A86C9AE
+ 07E3BFC313F0D75AD2EEED585D5A22A98DF7EF12AE3383C023A153C0C00338E9
+ 5F612CDFFB422A957DE49B5B5BAFDFBBDFBF91F6B95E4794D4E5A38756F6D1D1
+ 3B38CB45FAA3E88F8FAF73E31D5F4DD266323C9A869B12BA4B00F32D4AB83750
+ 10C70B22CC84A818E5976E0579BEBDF09EDBC333248B64CD35BE5217690321F9
+ B2307186054C72ED1C8273D189AF6EF09F8FDBE3A68D67E261637526A66D6E66
+ FDF72351DB26F8B9E8362E232060EE467CF071D469FF0007F5A7F89B0E8FE201
+ 7B36A48ED188163566CDC18A26922C0DA36468CC011822355E80B57E7D87CDA7
+ 825F5695972DEEAFD6FAFCB5D5FA9F9FD0CE16591587C4454654D3E68DD5DB8B
+ 7AAB2DAF6D74B5EEEDAA5F20FEDF57D147F01F49D2F4BB7B7FB665A5BA970706
+ E460FCC4E000372F4C746008DF81F9E37FE0CBCBDF19FF0063FDA34F69ED76DB
+ 0BA8ADC496EEA199DDD1CEE42B231DC0855DCE3241DAB5FAE3FF000544F82D0F
+ C3ED7D5F4A5C69FA94B16AAB22484433C8AC143C5820B48ECD9DA58ED743B976
+ 81257C15E1DF84163E00FF008486F3568B4BF106A13DDC36D6B6562B22892E1A
+ 584792B2B20C6C463975014162C19F383FB2F87D9D53C3658E31DDBBA4F7BB76
+ EBDBEED0F99CE72259DD0C2E6B876E50A89BD6F7497BD24F7D799B497A74393F
+ 82BFB384D3EBCB7B34D16E855A349E53E6DBDB3E76891B6A95FDDA02CAE47DE9
+ 5401C1CFAA786FE0A49A6DDDBDE5A4CDA5CF7245A308A0F3858DB928BE544A5C
+ 192EF2CC5A31B5913863F36D1F50FECB9FB26DA2D8E8B79771C967A4B5CDD40C
+ 8913192E12CE069198A2B12E7CD920DB924B97B61D8E7D96F3F67B8FC21A62BC
+ 5A6EAC2F6CF4B5D36CD618CFDA753D56F5CB4D6D037F76146633DC303B4C9222
+ 9423E5F9FCF3C4252C54A9735FA5B44BAAB6BA3D6DE9BF73A2385C9F2951C336
+ DD5BEB6E926E51DEDAB524AEFECA777B2B7C1DF162FAF13C1763A3F86EC6E6EB
+ 5386D9AE1A1B545792C61308FF0049B96285436048C4EE3B0B6E382AAABE093F
+ C3FB5D7EFE68B4DB8B8BCB3B0052E2FE2CDC4DAB5CC8AFBE38623D99B72911BF
+ 0837B83E62A1FD3CF8B9FB346869A1F8DA368F43D7740F02AC765AA35BB8B7D3
+ 20B865DC7CD98C89E6C9F2A46DB86D32382C162041F8EFE3EFC4DF85FACCDE21
+ B5B5F1B1B8B8D27C3E52C62D39DE3D3D26908F2AC2CCC6116674DCAD23F300F3
+ 5CC68E4230F7B857881CE1C987A72F36937BDAD7D2FD6EAF6D2EF5763C6CF7EA
+ B98D4559D656D1252F76DEEF35B5D3E171BEF2D79568B5E37F676F0F683A678E
+ F4DB1F107D9F495D48FDA34FB28EE18CCF18645539E36E463258807690A70188
+ FD10F17FFC1233C2BFB4178023B83229736DBAD60D534C31C6B9E7E49A2C4982
+ 4E49133024E76F2C0FE5FF00843F669D5D3C0371F152E2F34BBCD265D521D3CC
+ 334CC9713BC81B66D20966DB12139CE55150752057D09F023F6A8F8DBFB36FC3
+ 39FC59E07D53C496FE10D3963FB6C136E9ED215919510B237DC52DF28C6E0C47
+ 2E30D8F7336C3BAD5556C1E2F96517CBD2DCFDBDEBBBEB6F3E87E5D9A6071D46
+ A350A3A35CD7567EEEF76E3AADEF6D2DB58F28FDA97FE0918DF00FC4171752C3
+ 347A7445984D0C8352855D8B60F9836C8A14B7FCB4424286C13B9837CBDF11FC
+ 13A6EABA8C5A5D9F893C457D716EBE523F9C2DF4D8D0EF1E5463CB8CA2673F2B
+ 8CEDEC37007F483C75FF00053D9BF6AEF06C963E33F0037F6846AC5B54D2ADDA
+ 09BCCC600658FE565032482173824B118AF82FC6112DDFC42116830C77B35E0F
+ B47CD6D133A468EC30A4AFCCCC182AED619C1C6460D7DB6438ACC6CE38F9DE70
+ 5BAB25EAEF76BE4F53E4FF00963ECFDDA8F7B36DBBF47A5F5B6E9B5DCF25D63E
+ 064B0EAD7179F63F125BC7244466CAD9A6390AC7786247CACC324E5793C1C8C1
+ 86EEE3C25A642D0DAE977DA45CDD40D1C93CF78B23C401524FCA7E5241C04C47
+ CB15CF24D7AD5D6B3E24F00E836FE738F39984F6D047A1AABC71CAC814BAC6A8
+ CC38271312E463E5CF0D86FF000FB55F1769AFA858CF26B532BB4B3DB5ADC624
+ CB2E76985A3765600E7057A638CE33F49473494D278897BB7B26A4D27EBA5BEF
+ 3B2B645085FEAD16A56BB528A6D5FB6AFCF6B1E17E22D7A1FED36DD7F7EB3676
+ 492DC4EABE780482A19467B0019865739C0E4D66D968EBADDEDEC73496767249
+ FE949717B78C23909C9382AB8624856CB1190B93BBB7A869FE38F0F69B1DE0F1
+ 0687A8C9756D1AC5FE973931C2DBBE64C44235662093F3F0A7A7A0CFB8F1E787
+ EDACD5A3B3D26EA10658DD4D9BA6E4E33B3E41B582ED1B8AB30C00181208FA48
+ E2AA5B9614DFAE96F91F25532FA0E5CD52AAF4B6BF3D6E8F32D6FC2ADE1DBDB9
+ DD2E9F36E63229B76678979E047201DF3C72411D7A026BDA4ABBB132ECB8404C
+ A218C46C14F24E7A118031C7F11F415D46B5069BE2088B698DF6391B7C6B1485
+ 5248D17031E61DAACA4939C8DC49032791587AAACB63B7CEBC5BEB78D15A3263
+ 6788A86C858DB19DBC72A0A80777F779F4A954725696E78B88A0A13F73E1E9D9
+ 940799FE8F1EE6F32589C346243F316421085038E38C633C7270C3162D6D23BB
+ B14C7EE5A37658E464070E32C158804EE39033CF3B43000835A5A54DE4A32C76
+ F1CD22B662FF004767653B99B2A15893C8009EA3774A745A8DAA32DD2ADE4316
+ FDFBA3FDF795315CB001BEEB61461873C2F230714EA3E8850A0BED497CEEBB1D
+ E7836E478E3E01EB1E1DBA81A5BAF0B4EFAE6961988790290979087CFDD68BC9
+ 7217BC39E0F2380B7F17DD69DA242B24F73B6DE4F36DE34B831A972A46EC0E71
+ C05DB95E33C0E71EB3E18F0B0F0E5BC3E24B399F52D0EE246826950B38B7F303
+ 8684ED278913CCC6EDD9DAEA0EE526BC8755D33ECBA8DFE9EB132C91CA56D59C
+ 1591F0C085CA1DADF29C76032BC8078F2B01284AAD450F86FCDE8DE925E5AEBF
+ 367D3674AAAC361E53F8E31706FBC559C1B6B7D1B8AF28A5D08F58D6B5093478
+ EE1A65B82B23C6C0805A1C025786048E3CC23939E3D2B2F49F11C0FA94734D69
+ 6B188C96223057276919DBCAE3A13C7F0F7EF3493335A5DDBCD2B27DA8E0EE1E
+ 5E590820301851F7BBF03AFA63260B96B4915D3CB0CA70704E33DBBF07DC6063
+ F1AF66115CB63E3AA54929293FC4E835416ECEDE5ABC71C885D768DACE30C33F
+ 29C1EBBB271C47CE4F5A36F69BAEA1871032B33A9688EE570C005C85F463DF90
+ 319E82ABC3AD32DE4CD323C824DC46F73B94E1B6FCD9191F367038240EBD0C77
+ 175FD9B793496D3491A3B131127E66504ED39F6C0FCE9C62D6839D48CAD21D67
+ 6E57568E3942C924DB1064799F79719E3391C8F7FCB9B3ADDA45A36A2D6D1867
+ B3BA2B245873B48C95C9C7DEFE2E47A679151EB53FDAF55BEBC8E15F23ED3BF7
+ 22FCB19624A8E41C743C671C1ED835A3A9B47AE6936AB0491892CA0641E6024E
+ 4296387E9CED6233CE4903801A9BBDD3263156715BF439BBC90CB296FBC8AAAB
+ 9E790001D4F3DBE9E9C628B09E4892548CE3CE411B8C6778DC180C7D403F8512
+ DBAC778D1993283BF1C719FF00EB547E5ED9543160A719F5C569D0E7D7A11838
+ F5FC29EEED2C5F757E53924000F6FF000FD691C6C6214823DE88D8E3CBFE1638
+ 2073544DBB9DDE92B79E23D4104B12BAACCBC0C88F24B148931F2A83938E7710
+ 1B073D3EEAFD967E04689F093C131F893581E5DE5E3C96D6972A72444A332483
+ 1B4A92C0000E091B4655871F39FC09F0ADAE8DE29B217D1C11DC69B120C101FC
+ 9919B680DB8E7790AE570015C1EE715DBFC5EF8E3AD7C6FF001468FE17F0AE9D
+ A85DDC5E05B2B5B4D3B3BAE328738D8A4FDF6FBCA4E770C95C90DF99F13CB139
+ 84D6070EF9296F395ECADBFE27ECDC234F09965296618B8F3D56ED08DAEEFB6D
+ AFE0B73D1FF684FDB22D6736FA7F87CC8BA468F881556232F9921552EFB49EBD
+ 31B8100A1DA09C15F18F09D87C41FDA53537B7F0DE81AA788216CBC92FD96573
+ FBD5C60C992D1A291F7C371B1471F367EB0FD8B7FE0957E0FF001BF8B96DFE2F
+ F89352D67C4D6AC218FC05E1F84FFC4B59CAB2AEA57BE598ADD9B729FB3C7BE4
+ 738FB800AF49FDB2FF006F2F82FF00F04E4F0A4BE08F00C7A4FC40F1C42593FB
+ 12C2216BE1BD0652300DDB432BB5D48300185652D904492A10D19F8AC3E7184C
+ 2578E53C3D86788AFBF334D412FE672D2EBAF35D45F46F43E8730A95F17CD8FE
+ 23ACE8D2E908AF79DB4B456C92DB56D5FADEE8F8F27FD8FF0052F86DE09BCF14
+ 78BAE9F4F82D9D965B86B80D0973B8321B871B013C70BBD81500608C8F17D5FE
+ 2CE83E1697503A4F9DAA23B792BF290AEB86C2B48DC3704FCAB195C60EE239AC
+ 8F8B9FB4E78D3F6A7F197F6D78EF5AD4358B8D82385182C767A7C608063B7B68
+ D522853A7CB1A8072D9E726B8CBDB1B5D2805485BECEDB19829E653D473D4001
+ B2318ED9CE457EA396E57888C2F99CD4A6FA4748AF24DEAFD74F43E0331CD28C
+ E1CF95C1420B4BCB59B7DEC925F9FA9B371E39BDBDBD95A2B6B5D2ED705A47D8
+ CC599402480FBC6FCE73B154FCC73819C4BA56BFA8DFDEFDB5B50BCBC955CC11
+ 2AB6C120E46780C4F40318EAEBC9E86BF83BE18EBDE3591218B4DD4AFD848142
+ 40A4480ED3C8E73918F4201073D49ADED13C31A87C38D4A391AE560BA8D15915
+ A45936A1E08239DAA1766E2475DBC12315E9CE5423EE41AE6EDFD6A79346962E
+ 6D549A7CBDFF00AB263F40D75A1D4E168FE68A42600B7570E10A9C3142ABB0FF
+ 00B5D73938FE118F51F0AF8C26589964B6D22C0C85BC86B68A46919C3A118672
+ CE08248209380EB8C018AF28D32EEEFC55AC1923F2DBE458E54B54957080A329
+ F906D5666C13C0C15C919249DF432DB2D92CF716EB0DC9213ECD730F9B149B40
+ 4DE01DEBCA90BB87F7876E3CAC7E1A35172BB5CF7F2CC4BA579C6EF5FEBD3D0F
+ 6FF86DE395D76D1B4EFED68F4BD623C0B592F6EE60130ACC523DD22C386C72B2
+ 0624FAB0E3DDFE0349FD9F3DACDA86B30DE59D8C6B7969AB59E9B1DFD9DBAE57
+ E6923954055432AA9631E18CC4E7E704FCEDE07FD9DBC45E20F12AD9B4DA6C8D
+ 2240867BCBA864D3D9E4479922FB40E9230CFC8AA48224F95BE6AFAC3E16FC1F
+ 923F1958D9EB17525DEA1A7D98B4B8B8B0D537ADE8DD946336D21648D42AF20E
+ E555CE433D7E4BC5B5B074E0E0AA2D55F64DAF46D7E1AF9DFA7EF1C0383C6E2A
+ AA954A2ED15ADDD97CD5EDF95CF67F87BFB5EDC7C39F88EDAD47E38F11DE5BEA
+ 92225DCB0BA4D1DDC38F923304D1F94A555502808011D081BB3EF163F107E1DF
+ 8CB578F5FD0354BED0351D4364D6F6CF6B0C96B72F81E65B4A6DDC88199F0409
+ 084DBCA9505B6F86F873F660D7BC51B67BA8ECE2DDD6595E1D9C0544030DB914
+ 285F97040DA700F7E1FF00681F843ABFC10F08C9AF4175672D9DBBF94AF6F721
+ C9917002FC98C31383B0E38071B80E7F13AD97E5F8DAEA187A9CB51FBBA5B5BE
+ C9A4ADF83D34D0FD9F159264588926B12A8D651E57C96E5924B67A59BD3AF4BA
+ 56DD7E93FC0FF1678775589B45F18683FD8FAA6B00AC42FEDD1413C9FDD15F95
+ A2DA410072BC8CB751E55FB56FECD6DF0BFC590DF787EFA6B76C9BE8ADA26631
+ 5EE5D3A03CC6C0B6027CF8DA0E4E4E3E3BF801FF00052AF1478C75EB1D23C65A
+ 6DFF0088343D06DD6EAE248E1593CC810AE77B312E9903CB69233BB6BC6BB7E4
+ 20FD6DE10F8C3E16F89FA1497FE1CD46E752D3CC6B35ACB7F3798D6C88E04A8C
+ 8E85B7C2D9F970F947464DEEB2475F2F8CE17CCF26C57B4947DD7BA5EF475765
+ BEDA6B6D5DB5F4FC8F0786C465B98FD770956F095F9A2AF2A6FA2B7359C747B5
+ 9F93BA76F0FF0083FF001F254F186AD078FAD449A0FEF229264B1FB55FF9E40C
+ A97259A276500FA9DD803209AF2FFDACF53D73E20FC37D266F08E91A8DF785D6
+ 49956F9AD9F779BE6485D3636D7428DBE3D8E148D98232C009FF006B6F0BC16F
+ 7D36ADA59BC86D669A317B2C1771335DA96C42E194EC247984025B054A91D015
+ EA7F63CF8C5A57C1FF00106ADA4EBDE3BF10490EACACE64455BAB29D0C6CDE76
+ D93FD5E78F30BBC408DC73800D7DE51C0C30F059AE129F34F4FDDD9DB4566D24
+ B757BDDF4DD6BA7DC6678EF655155C2C5C2564F4765D6CE292BA934DA7A3BBEC
+ 7A07FC137FC7BAE6B3F09F4FD3F5DB75D234EF07CCD2B5A5DE23BA78E7900DC0
+ C83E58DFED11000303BC3E46E5403DEBF683FDA0F4FD27E3443E21D2EFA17B7D
+ 2E78EDEE267DC32925B2B4981C2E4364F4192DDC1AF9CBE14F89747D07E3BEA9
+ A858F8AA3BEB0F125BC2B2D8C3279F712428E258E62C84C614B479DC086C85C0
+ 3BF213E3578AEC348D22DED6D5EF2F2DEEAE23791265E6F1D972548C0C1E5102
+ E4F5079DD5F1F996570C566DEDD41C79D6C9592E6B392D7CD33CDFEC2A58ACD1
+ E33177778BBBB249A9DB9DBE976EEF7FB5F77A27ED9BAD43F1C3E24F87ADFC3D
+ 0DC4DA25E1FB7C4C583AAB3A2AB00572833E567F11EBCF89FC25F00CDE37F8D5
+ 24D3AC3A8368B731CB7CD3C8FE447E75C471B3B6DC80598C685D401B427002E6
+ B4A3F8FB7DA77ECF0BAD59689A4FF67F875DB4E8A783FD1A489A4890BC972817
+ 9917748B92C461010B92BB7B2FD853C2BAA78C7C2BAA6B5A7F93A85DF882DDEE
+ 4E94A402C1591A377948C27227E464AA827A900F47256CBF0134FDD8C7DC5AF5
+ 6EEEF6BF47F79F4585C4D2CAF249D08B8A5452841B776F9A4EF2725B5E3D5DAD
+ 2DFBBF4C97E3BD8FC3A135BE82F63A54774D2DE0952366688CCC599171D36170
+ 502F27CA8739DA48D387FE0A316FE0F92E0F892256D2EC9B66A9E41F3A5788C2
+ 447696A4146DC4ED673BB1B8B658E087C8F859F03BC49E3BB3BCD4359D3ED747
+ D2BC373226AA55FCC8EE937F1E50230ACAA5C64F193818DA49F8C7FE0A5BF1C7
+ 4ED6FE216ADA6787ECD34FF0DDF5DC851B11CBFDA862FDDF5C96C15653F28C60
+ 80B9C330E1C8B86F099A63161270E67BB95F6D774FBB576ADEA7C3E2B2DC92AA
+ AB4E74FDA4E0B592927693B72A725D5A6E4B7B25756D8F72FDA23F6ACF861FB5
+ 5FC25B3D2FC309AD59DB2DCB451F84218E3B7D1E4BAC7EEE531AEC96FA443B48
+ 40C910C3332121C9F81BE38FC23B3F82374D79E35F1868DABF8A3CA022F0F787
+ 42DF49A7FCACBB2EEE231E4405548CC1089186D00A4648279B8EEBC4175E1D92
+ CBC3DA834126A37327F6C5C58C6A61656D80465F28CAAAA0803014B8750AFC96
+ EF7F669F809A0E9573FDA1AC68BFF0B09A30AF159EA05ADF444901E03A46FBEE
+ 02F40BB9548382848AFDC728CA70DC3B424E159BA777EEE8E6FCB99D924FEF6A
+ CF993563E7564B8CC7C2183CB283E68DDDE4FDD6DEDBBBCADDDDF5F89F53C47E
+ 167C3CF1A7ED13A8EA0BE17D0750D5AC6D9CBDF5C5819859C2A1480669FEE87C
+ 02143306CEDF92BD1BC37F18BC4DF073C07ACF812E3C556F71E1DD76489F54B1
+ 37F673B996290156088ED247F3AE7711CED24E7927E8EFDA17F6ACD6BC4BE12B
+ 3F0DEAD36822C6DD92DF4FF0B787BC3F6567A4E98C0B1DDB5A338639E429DF80
+ 070735E63E2FF09E9BFB3EE9BA6CDAF59D8DBF88EED5649B47FEC7B4BA86DC1C
+ CBB669A3B9DDBB6AB123C98C2F1C10327D4A7C472C625F59C3C7964FDC86B26D
+ AD79B99A5AA693BA8D93EACF36A7014A92F618EC5B85657E6E595D249D92D2CA
+ D7DD37BBD93B1CDFECF1FB4E78DBF673F8B1A2DEF83E2B5D7A15BC8E6FECEBAB
+ 1926B798A920922319076E7AED1818DBC7CBCFFC4ED4350B3F8C7A878D3FE10D
+ 8BC2775757F2EA765A64B148D1C2F23990825B0AD1AEE65518DC4151C9535CF7
+ 8CBE2B5C789EF9751B8D374881ACE722DAD20805ACE13E75F9D43F6242ED2B90
+ 6373B7B0E52E7E24EB16B14BE4F887506B7BBDBE659ADC7EEDD885DC9B59884F
+ 9439C8EDD48E48F769E593A95FEB2A9C633947965BEAAF7B36B4D2FBB8DF757D
+ CF2BD9E5F808469BAF526A2EF16946F1F452D6DCD77653EB73D4FF00684FDBDB
+ C39F1F7E02E8BE15F1B7C3AB8B4F1C7865A68F48F15699308259E12CED2D85C2
+ 7CECF11E1906F6647DA07CAC50FCF117C41D71F43B7B3FED4BE7B04BFF00B425
+ 8EA416592CC32ABB18571B53054B65141CA8003743A3E2CF16307F324F9EE265
+ 4C421705C4728E71905B014119DA4004E3F82B9FB2F881649763FB5B4F67B7B7
+ 7016EAC176CF002158870C4099576A6E0DE593D7CC01B0DF4D93E4F430987F67
+ 87A5EEDDBB733924DEFCAA5B2BF44D2EC7C96618E55F13273AF66EEEED59BBBB
+ B72716ECF7F2D757D49BE25EA70C7E2192EB5AB5690DC3826E2EA167B6781738
+ 24F3824B7384054041C741871FC1FB1F1A5A36A3A5F8834ED3E2863793C81249
+ 29640704463019B1C90305B939240CD7B06ABADE87E23F0F69B27D86D756F07D
+ F40B05F2CF23CF05ACCC41C421505C5BB1CE7CA72C1724AB95E4F8778834A1E0
+ B8639BC20E4A2DC3EC334A4DC49C804238554DDFBC50703710010769DA7D7CB2
+ BCEA47923784969D1C7D1DF67DD5BAAB5D1E4F1061DE1E7FBD4A506AF6575277
+ D5495ADCD177D1A76D1954582F83F53B5FB55FDD6937D1AB18F534883BCC724F
+ CE8BF33296383BFE7001E08C838FE37F175D346AB13596EB895A4966B32B13DC
+ 00C4C7BCA80A40451821719DD9F9C354773E3ABED4E38F65D2B46B3090400295
+ 90A2805C82A3EF6031DC7960DCE49356BC05A3FF00C24B757964DAA69F65791C
+ 27C9594FD9E09B07E650CC0AB1DB9EB8DC072C39C7D1A8F22F6B5BA6E7C5CA7E
+ D1FB0C3DED2E9FF02F6FC2EFAF432E2D43EDDACC712AAC724C5099D6D7CB6859
+ CFCD8111024FBC4AEEC75C646DE7B2F87FE026D6EC67D3EF0476B6FAA5B3CB61
+ 751DB3347F695191133E3E53BD768C0C6E74F98266B8DD5FC017FA2EAAAAB262
+ 4318776FB4AEE81371EB82372855032A4839E09E0574DE0E9F5AF0F064B79BEC
+ F34789166910C824909C0673CE73B84678F99467A02498A97353FDD495FF00AF
+ 537C061EA42AFF00B45395BD1DBF4FE91E95FB3D6AA752965F0CDC58DC5C47AB
+ B36957B650BED5B847F9950161859098C6D7C82AC6266FB855BC9FE366892780
+ BC77F678AFA6BD68E24B88AEFECC2049D54BAA4853EF479429B973957DEA4647
+ 1E81FF00099E9B70575AB1B38AD7528E6612A5BC6D1A4F16DF9CB46DC2B364FD
+ C2B192F9083E6CF25FB4E6BD278B750D1F5492669EF2FE4B99EEE47209695E45
+ 7981E705FCF6998AE005DFC0C74F272F8CD639CED6535AA7DD7F5F3F91EC6692
+ 82CB5D372BB859C5AFE5BD92F55ADFB74DF5E4B55F0EFF00C24F689A8D9B7993
+ BA196EE350431932EC580C1F94AA93D78E7B75E7751B692CBF73342F1CD22066
+ C8F957E63EFF002F6F4C1CF183CE9F86B5996C14BAE2DDE389A349411BC31DE3
+ 3FDE180C727D9477E67F1078A1F5DB62B7B32EF8CC6E93A47960433703DB1237
+ 19E88B8E0003E8A3CF1972F43E5251A5528BA8B497E072F701635540CAF951C0
+ E7677C73D3279E3FFAD4F07F7324775E66F857FD1D7AA962C339F6C6791DC0F5
+ 3565F4C92349001B842E517E5C9254AF7C772FD323AFB56DDAF8516CF41B1D5E
+ E235BAB08EE9609A349086C1F981C9036E78E4FCA43A1E4E4D6D2A918EE70D3A
+ 329B76E8AEFD0E79A710E9F347B5FF007854A1C0E8376723B1E40E3D0F5AAD6C
+ A30A015791BEE00B920E46339E3A67D6A67B981E25DD1B34DBC86DE30A8BF2E3
+ 1CF6C30E7A0ED9E8E8268ED45D308C4924D1ED899460236E5248FC0118E98635
+ A18EEEE3751B511431C855775C297540FBBCB0199483CF1D3A1E71CF42330166
+ 2732659906D0A47E03FCFB62AE3903438432C71E5DF0F9DD23B7EECE08FE1001
+ 3838E727AF510DC1F2E2119DABF451DB23391EFE99A943B6F6209A16912364DC
+ DFC39E32C7AF1DCF6FF38A4F2F7C8AD1990A8192D8E73FE48ABCF692369024F2
+ E358F2006C72C719FCF1DBDF3CF5ACF917E70ABF2F4CFA0AA8B14E36D4FA29A1
+ 93C4FACEA4B6B7969A5D8DD317BED564603ECA132A7F779F9860003E607048CE
+ 06D1EA9F037E296ABA56AABE13F84F15D68DA96B523595FF008861880D63524F
+ BA55256024B5B7C73E5A156382CCE15715F3E78975D5D6754BAB2F3A64B792ED
+ AE2E848ECAACD9E541EA768DBD3939EA7B7A8EADE328FE0769573E0ED356D63F
+ 11EACA63F14DC81B63D3222415D26324FC8C4AE6E4E4313B6DC9091CC25F87CC
+ 303ED292A4D5DBDA2F6564AF297F35BA27A5EDA5DDD7EAD96E29C2ABAD2768AD
+ 1CBABBEBCB1E91BEADB5AEFADAC7AFFC77FDB7F43FD93FE195C7C3AF82735BEA
+ 3E24D4A26B4D7BC6692B7CA65DC64834F3C000E7125CE41930E1556224C9F0FB
+ 69D717771E74D2ACF7F31FDEF9B3249CE401962705B1D4139180793D34354D56
+ 4BCD5247DDF69DD94818284F200C9F917E5C6371ED81B4F6E4508B4FB8D6F529
+ ACE3DAC148679656C2B01B739391C6727182C48C75E9EA64993E1F2EA4D53F8A
+ 5ACE4F793F37A69D92B24B448F97CFB32AD8FC473CBE18E918A5A45764969F33
+ 5BE1DFC3AD4FC6FE20B6D374FF00B1C72DE6466E6E638E18F839798961B540CF
+ CCD8FBDDB06BED5F85137ECD3FB0FC1249E22F0F47FB4478FB88E0B6B6D427B2
+ D074773D448FE5E2E1C328CE3230790BCD7C876BA8DDF85B4DD534DD3F5011BA
+ 6D5927B226377C6E254BFDE38CAA90170320127A3637867C26FAF5D1F2DA3165
+ 6A9999D634DDDC67921482DC004F24800375AE7CDB2D7984792B5594292DD45B
+ 8B97AC95A497945AF5E876603111C1C3D9D2A6A5565F69FD9B7F2A4D6BE6DF92
+ 47D85F147E34F883F6AB486EBC590CD63A3ACF1A69BA568D20B5B2D3959818C2
+ E03C87EEAF2EA58E090718C725FB40FEC21F10BC07616BACC9E10D59743D5214
+ 78754BDB6B8DA5492C3F7B32C68CFB739038247CB8C01577F661FDA0DBF671D5
+ 997C03E1BD1AFBC5F624467C4BE29B537F7766EA1711D9DAEF36D16C240DF289
+ 482EA0019DA7EEAF879FB4F789BF6C4D0E1F08FC7DF895E11B7D16FA6C37F6FC
+ 91497F7AE26055AD2CADD0CAAB8E04862D9B8654A8C357E71996638EC92AC160
+ A945508EEB5E6B778C127F8BBBEA91FA9E5F93C73AA4EA62A7ABB5E6DBF8BA45
+ 5A2DC9F925A5AD1BE87E59C7F0ABC4D75AF490CD6BA806B746411344EE6DCC8C
+ 4A027070DB9FAE0F39FBB9C8FA0FE0FF00FC13BE3D663B7B8D76FEDF46219634
+ 6BA4754466EB24A155C918C0DA012483D36835EF9F1EFF00645BEF82FE3E92FB
+ C2FF00D8FA9782F496DB63AFC532DBC7A892CA7EE48DBBCF52E0111A82573907
+ E72DC5587ED113788BFE3DE1B6874B8E5FB389A44631C722EE1B4676AB16DA00
+ 381C139E84D72E65C599863A8C67965946DAB5BAF2B6E9F96E7E9DC1FE1BF0F6
+ 17F7B9CCF9EFF0AB3D5DAEF46AEADDA4959EEB467A27C1CFD9C34DF0CC8FA7E9
+ F2477D129D91492E2EA18141DCC637731B2F232005C396CB023705FBBBE19FEC
+ F36DE1FF00863278934F8F4AD675392153169F6594B4D3E2D9F34D29276C6A16
+ 32553209018F0A303C57F63CD661D5EE6C61863D36F163B96749A2516BB5C0C0
+ 70489B68E392D030EB9DA016AFBEAF7F6735F8B76FA65AC3AB4963A5B584535F
+ 5F0995AF6FA621885919361668C13B4B1200DC40E5B3FCE5C65C418978A8D1C4
+ 36AEDDDEBADAD7BAB7DC7B3C75C4985CAA74B01844A851DDB4B78AE8F9526EF6
+ 5B34FA6C7C8FF145BC3BE04D634FBEBBF10C5AC58E9F3336A36BA3ABC2658936
+ B2AFCFB80DD9DB95C6776000793E53FB44FC7CF87BE2BF01C2BA5F86E5D2E3F1
+ 44EF75AB4371A9CB6B0C1B1A56548A6F29DA49BCB72A0EDC162C494C0C7D9BF1
+ 87FE09C9F0EF45B431CBA94D26A1AA8FB318EE65790DD3153B7CC48F68319E49
+ 010F55C608C9F88FF6CDFD82F47F06EA1A84505DCD6B1E997521F9E53F658155
+ 7E4DEF2BF92ACC48F923918AE54302CC71D5C2D8BCA2B62210A9527CEBC9A56F
+ FB75AEBD55F5D3A939571164D99D08D2C3D49CEA24F9799FB352F58A4E3249EC
+ DD9AB2D4DBF83FF19BE0BEA7F06BC41629E15B1F87BE1786692FAF6FAF6F45C5
+ E6AC3CB27C84469163450CACB9690A648C29DD83E5BF0B7C63E1EF1DDE7FC237
+ F0BEE348D4B4D82FA4BED5E38AE7CA793781B20F2E50A92A0556DC485E836ED2
+ A31F29FC6C975BF0C95B3BCB65B4834A91228EEE3B1845CE5DA4086470063732
+ 90016F995700E3ADCD1759D6345BF8BC457DE2FBDB6D5EF4A4770F657DF67984
+ 2888DE50E57AAFDD084E48C603633FAC53E10A54E8CEAD1AADBA8EE936E4AFD1
+ BBDDCBBDEEADA2B5B438B035AA52AFEC7A46CDDDECF5D9B6AD776D354E3B58FA
+ A75DF853E3CD5BC1B3C7A87867588F4B8E1FB30BE96D4C71CC3771995D31FEAC
+ 2AA92148033B09700F92784BE0EEBBE15FB45F1D5E1D1FC476EEE9308E7F385C
+ 46E595B7942559B71F9979C042480700FBC782BF6CFD0ADBE1C5AC5E26F1A78D
+ 678F5A985B59DC5C1B6366E638C6E867DD1C7E5AE1BF76C260C41DC71838E07E
+ 247C3CD3FE20F88EDADAD574BF0A6C889B2BA1726EA6298768F1E48C314063CE
+ D2546D5C1DBB5479796E231B479A8E2A2A116F749D9DB7BF35AFE6AC7D04A9AC
+ 557BD6B4E706924AF6B696DBAF63D9FE06F80ECFC41F0E745D0E48F4FF00074F
+ 124373A35E42934D67721B27C9967DAAA0EEE4AB060771DBC9D8B97F1A7C2FE2
+ 8F0FF8A6D7EC7A7866D2564BA79D9F7DBF9B1C7952029F9711A055C0C018600B
+ 01987E1B7C71D43E1349E1FF000CE9704D716F3CB268BAB437B0899B54825442
+ 97106EE19525259906D64E195D58135DDF8BE3D43C6B67F6CD1E1D3EDEE2CEE7
+ EC9A8037CB1AC6AD95DD22B3615951FA82C01C1CE0B11F278955E8639D49D9C2
+ 576AFB5DE9EAAFD9B6AEF7E875C6A545565466DC60ACBD1E9E5A2765A26FCADB
+ 2D4F879E256D4FE065A58DE69F1D9EB179671CD1EAC6D1AD6364766D9095466D
+ EF19560C481B41CE4E481DA7857E2D6ABF0AAF9BC3FA5D8D9C1A2BD9DB2CF749
+ 20792408B931C4B8214BCDB86E604A87C6785DB693E1DD95BF833ECFA6C966D6
+ 96E4A4E2375410DEDAE5A6DC30085772CA180E4C6F919CE7CCFC3BE18BEF18FC
+ 426D16D566B7BA9B3E40950885D83282F2B03800E36E70146F2D935F1D5A387C
+ 4CEAB92B4536DA77D1F7FEB4470E1E8E071746A7B6B4A9A726D4AFDD7BDBFD94
+ B6D96F6D4FA7BE327ED25A7EA5FB2C69FE0DF0BBAB6A9AC69EABAD5CF94E3FB3
+ 5170D2B4AAA43339CE026464B819E707F3EFC39FB375BF8B3C6F27D874FD52EE
+ 679D23FED1BAB854167B433B11214DA372F9923E490801237E2BDDF4FF0017F8
+ FBC59AF5E783E286F2782EE15B313DE6EF37018E16695036D50B1B740011C9C9
+ 205767F06E4B7F1278ADBC3FE11D3EE356D52D6ECC6D6D2DB4900B765419DACC
+ 084185521DD0121464D6F81C66232CA33850D5B57D1ECBA37A2B6BA25B6F7D4C
+ F2DC0D1C872FAF4A108CB99BAADB95D26F69CDD9597D98A76D15EF7B9E457BFB
+ 036A569E08F2D34BD37ECB833BC16D3334912A1505991707E456456C03895C45
+ 862081C27C48D3357F0B5BFF0061E8762F1DF2C623BB79079D3873D2110C655D
+ 7AAAB6F1122E49E7807EDC87F6BDF02F87B56B7D03C5120F0EEBED328B792D61
+ 5244916E48E4953E745031FBBCACBE592595542E47C87FB647ED77E28D47C4EE
+ BA5F82ECECFC23A745B1355852FA7B3B40819DCB5D48AB6ECEEFB1E52D02B9EC
+ 79C9EFE1DC766B8EC4AA55E8DD6B24E4EC9F66B56A5E471E0789B3895474F194
+ 7D9C1D973C55959ED6B3D74D74F7924DDB449F9B7ECFBFF04FAF197C7FBAD62D
+ 744DB7D74B0324A27DEB1C8406DF1991430653FF004CD641961F292BC7CE9FB4
+ E7C17F147C16F1849E1FF11785B58D15AD00854CA8B6B0DDA2150CFE67DC64CE
+ 0B7CC70A003B4E52BE8AFD89BF689BFF00843F1CB4BD4BC13E369B50F1A788A2
+ 8ED317CADF6794A3B84B4266FF00590E082A001B4BE54A92DB7EAAFDA63F6FBD
+ 2FF6D3FD9D35B8F5AF006A1E18F19787D41FEDDD3E14BCB0DEA71F31CF991282
+ 720BEE553CEEEE3F64C2E2F1186ADCD51A6B4D1A706AEF96FAF4BE8B6BF4D4FC
+ 9F3AC46368E3E5469D3F69464DDA506A4D6977A27AE8F5BF5F248FC8DD7FC3F6
+ B15F43FE956ACAAFB5E58E5F3A39082A03174F95D8061C92A01E0060D918BE32
+ D3574BD35A4B684DA5D42C6292D85BE5A457232E59595D7E7538620839DA3819
+ 3EF56D7773278424D6AEBC3BAB6A5A55C4DE545ACFDBAE0DC4D28F301FF56B83
+ C424F0558046CE4122BCF3E227C319B4FD456EBC4D63E22F1259EA089E52E9B7
+ CA1915F6F939562B20C9DCAAE22DBB72723EF0FABCBF335EDB92A69CAEDBA776
+ B7496D7F27662CC32594E83AD077E6D7552564F66ED776F44D58F9C3C409A9B5
+ 945A85FDBEA1259A0CCF2E1D3A37386D87EEC84A92705BCB3DCAA9C342351B9D
+ 3A2B3DD1AC805BC56EE0DB8908F983312485CEE56E18021701F3923D8FC7ABA5
+ E8D7D2E916FE19DD77244ABE5DF19C5CA95C6C32E19E240C76302402AACE4E32
+ 48E02FBC2F67E14BBB55B78F555B868E28A33232C785653B595D66679707CB3B
+ 63083217240E17F44C0E3233859C6DDB6D57DFF8E9E47E5D9965AE9D4F726A5B
+ 73774EFB6CAF7EDF79D67C1EB2B38358FB15E5DE9F656BAD39B1B8120964B3BA
+ 6209DAF8C9C92E981B4302780080451F8EDF03F50F82322DE5F69F0EB1E1BB99
+ 16DED752B5BA0E22457015438F954E0B851328719390768CD5F84FE3FD26DB53
+ BCB6D4ADE3BEB79A248A5B4B955B8B7B843B10127EFA3852C55FCC568CA80370
+ C8AF6C9FE2269DAA786C784D6EAEAD34BBA67375A76AF74B3C0B984C79591634
+ 1B401226369C2A28ED8AF171D88C560F18AAC53717F12E96EE9AD535F34D595C
+ FA9CBE384CCB2AFAA546972DF91EADA93E8D3BC795BD5A5CB67776EA781D843E
+ 07F14E88F0C3A65F497531F2564927792681436CE1542AB723386072401F2862
+ 0F232DA3595EDC59DDF87B4F7859BED76D756ECFFBB0A4B6D24758CFCE4F2193
+ 2C4361401A1F1F3E1F37C12F1335A595CC7AB6912CE7EC1ABD8C922D9DE15D8B
+ 221665043A8DA31F2950518616419E662F334DD4ED247569170B3DC59806DE37
+ 5C28F9595CEE3B4C80950A721BAE4E7EB70718CA92AD4E4DC65AABDFD74D74F4
+ 7E8CFCDB3194E159E1EB4146707676B5BB6BDD7E6B5443A8C76FE1E4F32DDBCE
+ 4BA42B6D3C823936AEE60CA4B12AAEB9DC0AE0F2AC0F4DD7EDED1D74F83508EE
+ 245DAA3CD7642FB0C6BC2B21C03CB763D7D4826B57C5DA57856DEFAD66B0D52E
+ 2FAF243109A36852378368C6E27959470BF310BFC41B24B30D9D7FC3D71E06D2
+ 9AD956185217791627B89098A52BBF697C9C91960761C3763CE6ADE2A2D452BD
+ DF7D3F3338E0E71949369A5D9A76FB8C6D1FC4AFE05D6EC6F63B159A3323A6D9
+ E40A04C40014856C955DE189CED6327014126B67F6B8D4F43D4AD3C3FA9787F4
+ 4934B8664B9B2BA9A5624DDCA82DE532052018F1E685119E1576FF007AB88436
+ FAF7990CCE3EDD7D188D1C4A7CBF37CCFE2EF8F941F4E549C60B1B7F14EC2F34
+ 8F869E11D3E4BEB7BA86717DAC7D9D72D259CB35C1B771282B90ECB65130E80A
+ B21F5273961A0B174ABB7692BADDD9AE56FD34F3F337FAD55781AD878A4E2D27
+ B26D3524B7B5D5D6FF00E470D69A918774BB6131B382DE665B3C0CF1C67D4FA6
+ 074EF6AF278F56937C2CA2E151B7854F9588562CC39C01804F3DB3F4AA70F971
+ 451878FF0079B86E5DB82070430E476CFB1FC8D58B4D3DB557BC93E655B50AEC
+ 8DD36EF8E3000EB900F233D075AF69A5BB3E6A3297C2BA96B4FBF86FB40FECB6
+ FB386B8BC668E4972A22DFE580DC1C2AFCBCF5E83B0E6E7867C43245A16A1A54
+ B37FA25E949802A1543A16DBF330E067DB183D8E315E55FB25D5CBBC367179B0
+ B5CB407EF057F942AE79E031239CED21B9C567DA58DA4A616BA93C98E7DCCC51
+ 3718C7201038C8C8C1E73C823359CA3192B3F5F99B53A9284D3EB6B7CBFA647E
+ 22816DEF2611ACC5727F7928C3B739C91EB8EB8F51EB55F4EB39266575DD1FCA
+ CE4971C807191C8EF8E3F1ADB36DFDB160B70D32B5C40EB14B273865FBA1F9C0
+ 38E739C74E4F3515959AEF0A2393CC9A5DC885C28239196DC31EB8E01C739EB5
+ 71A9A5BA93530D69A6B696A8A73411D83C69E4C8BE646195DCED12364F2A48FB
+ A7A03CF4CE412715EE564949F387CD8DDC72579DA7BF3CE7F9E6BA1BAD1E3BFB
+ D9266464B5B340427CAAAB1F001C024E4E464139EBC9E40C4BA959E591A3DD86
+ 521998E093B7E607F0C9FF0038A519A7B15570F28479A5B74F31FF0062DBE186
+ 93CC0ACF31055BA0DABDBB96C9C7A73EFC50122FD9097123C8CD85DCD95000C7
+ 4EB9EDE98AEC6C3C3D347F0DD6599D61B769E47F9973905554311CF7C6D3819C
+ B0C9CA83CD0B58522C8693924ABE42E1B271D7E83BFE34E9D44DBF533AD41C79
+ 5BEA933D47C05AA7FC20FA32F8B269A39356690FF60C6E878B96EB7582318B7C
+ 6506706464C06F2DC0C4B1D35B4FD23ED570AAB773317814CCCAC8546448C490
+ DD79C8C73EBD4747AA4D26B3731418B85B7B38D2189A48798B96FBC00C659F71
+ CF5619E46303ACF84DFB2CF8BBF6849D97C3BA2DF5C5BC28A6F2786379D2D100
+ 27CC7C64F96304EEDA40049C0E4D7CE6231D470F175F112515D5BEDD174FF873
+ EEB0381AB8AE5A1878B95974EEF76DFDCBA68979B3C9F56B7172B6F22F98925C
+ C637AC7F711FE62D8EEA0165E00EF807757D17FB307FC1353C6DFB497C2FF17F
+ 8AB49D5345D2F4BF05DBC379A98B9E7EC31B9D8266CAE767CACF919E15B19238
+ E535FF00D9CA6F879A2ADCDD49A6DF347706DBCBB77666936ED6240C7CCADD06
+ 7032AD907040F58FD963F693F881FB2CF873C6DA6E8CD6B1E9FF0010B478F45B
+ E8AE63DB1BC7BDDB72C785F9C79A493DF76074CD7879EE71899E05CB279C7DA2
+ 6ADCDB35CCAEB5FEEDCF472FC96952C5286670D1DB4BB5D37D2CDF5B5BADAFA1
+ E20DF0525F077885741BDB8659AE244964861DBBA4620305F986595B6C6C1769
+ 0C70412791EE5FB7DFFC13FF00C2BFB167ED070786FC3FE2EB9F135858A44B7C
+ 92B2AA25EA411962BB065A20F232AB6D072A546761AF0DF1BF8EF50BAF1E5D6A
+ 9E64D23DC3ACA21320DA817738EC08319462401805940182730DB78BB54F11F8
+ 8D757BED464D5B5281639A5925B9244206047966F99DF76E72CC7201CE412715
+ 5A8E6552AD2C4FB6B41465CD1495A52925677E9CBAFDE74E129E02954943D8DF
+ DE4A37E9677BBBF96E95AF7D764CFA33C61FB0578C3F67DFDA0F49F00E97716B
+ AF78C35CB1B3792C74AB732C9637D38123E9C33F2B4A8FB51E4076215619041C
+ 50F861A6DF7C339DD1B47D2ECF5693549A2BDBCD5240F1466372D2872A4BBAC6
+ B192E149521E40436DE394F833F1EFC65E01F88E7C550EABA949E26D6ACEF2DE
+ D6E4B0698C772AF0BBA6E5725DD198649C9532E49524B7D4DF077F682D3F41F0
+ 678674DF13E876775A3E97A9C9E21D41A1CDB5EEB3A81591A248FCB6C9418811
+ 1810230CEC02BB094FC5E655331C3414714956D17338FBADB57BD96D6D925D5B
+ D6C9367EB3C338BC247F7987BAE5EFE6B57AB6936B649AE54ECE5B1F4A7EC95F
+ B6D7FC265E196F0BFC4ED3AE3C6DE11B3BC86CED5357B2B7B3B58EF36964FB1E
+ 9D6F6EC65D9F332B058F015997CD385AF4AF883FF04EDF813F1326D535EB3F1E
+ 4DA45D69AEFA76A171AA5B472490DE492168ACF7A8686DB01991618905C28031
+ B4A935E03E0BF88DF0CFC23AA68F6F1E9B791CDA1C97379AF2DBDDC2F05BC92F
+ 9BB2D0303BEE242546E085E246B91E665BCD136478B7F6EC987862DB41F0E5AE
+ 8BA1ACD3ADED9DDEAF70237B06DEEDE733B611E493CC0E0E142B336D03219BF2
+ 8C465B889E21CF2A8CE8DF7B594757BB5AABB5AE8B5D1DB63DBC65383AFEDB05
+ 51D16DFBC972B8BD7A2775A77B5DB6A4DB91F54E81FB1A7C2AFD9E3C4563A649
+ E32D5AD524B582EA45B2D2675B7B256DE37CAEEE4203E59043666246084DBC6B
+ EB7FB4B7823E167F6749FDA1E28F1468B6ECD3CF345AECF049A8CBCB08E483CA
+ 54501B2DB04B231DCC7AE2BE79F076BD75F1B747D2F49B111EA563B55A09A23E
+ 6ADFBFCA046F70D248CBB463F763CB083667B57D29AFFEC63A0FC3CF87AC356D
+ 774CB8F151D3A4D424FED372B61A3DA460798488CA966F986141C6EC01EA7F3F
+ CDA51A75E34F34AB294E4ED6D2FEBA2D3F2B799F4988A181A54E87F6DE2AA559
+ 4EE9421CAAEAD6724E114E295FABB2F395ADF3A5BFFC1433C4FF0013FC57E3AD
+ 33E18783EDDA3B3B3FB7DBC975B6392CA069113CB8E58CF9FE61567F9FED2BB8
+ AAE026D1BB85FF0084C3E23FC5ED42D6CFC4515D47AE5ABC96933ADECF733DAC
+ EE1101927BC72A729C10FE6E3F7840395DB5FC63FB4569BFB105E78A7C1BE09D
+ 3FC3D6D63E26BB48356D62E6F5E7BABEB35D8D2DB5BF0B1AC0F223A19132DF79
+ B0BF205F8EFE3B7C5FD53E317C5FD4352D7E693CB37D24B0C368ECF1DA22905D
+ 56352B1E093966D9B72BB536200ABFABE47C2F4AACA4F0F4634E165CB27794DE
+ 893BABDB577D3EFD4E19CA397D46DD1B49B496B6766934DDD36B4D2EF7DDD9BD
+ 3EE01FB1AF877C0DA25D6BDE36F13587893C6DA8394D0B41B4D260D46E6E245E
+ 048C91FCCCBF3A800425000003C28AF91FE37FC2DB4BEF175BF9CA6F35299BCF
+ D425B613F9091BA97313C6C1A48E545DC0843B5768180412707C0BF1F27D304F
+ A3E9B6F36B56375285B99A54904F367E408D346FB962656C85DB8076FCADB483
+ D0E9B7DE25D03E21B368FACEBF63670931DC596A121BB8A171F290C501F30AAE
+ D3BC46A53B60F27E8B2FCBB19809CE788ADCCDABABAE5565A2492D97C9EBBBD9
+ 1D54F9715151A09D5E696AD59D9EFA5B592496F7BEEB666F7C37F87C9736ADA1
+ DAEB9756BA0DC45124F6B704DC432303BA37911D44624576E1994EDDE792A083
+ F52FC0AF8011DEF846C7C39E25B3D1EFBC342DA38ECB5486E57FD072AFB44BB4
+ 078E404331DC08C02CB9046DABF0FF00C5F78D616D63A9685A35F7D8E41BE5B7
+ B98946D50A4302B193F3658E719CE072CACABF57FC5BFDA07C0FE25F1C697AAF
+ C3DF08FD8F4D92DA06BC96091B4F293CA85A68222582B9468F9CA004B8E9C9AF
+ 89E20CD7135684E4ADEEB4EDCCB99B77F793D36B6B7EEB47D3DFCC3DB61A74D6
+ 1F0EE529C649CD594636B28C5DDDE2DDF4E9A3D1EA52D07F622B8D37E0CE8BA8
+ EA9242FA56A2DE7E91AA5B4BBDA206408AF3632ACAC8A557393894B1DA41C74D
+ E22FD83A46D6AF35A6FDF69B7D047A55FE49B531DE804A078DB39DA242CCC80E
+ E5DB860581AD0F867E22F13FC448F46BC6BAD6750B5D2D668F4C13989E38A58A
+ 3332DBB6D18669034EF2673B92DC96600815F417857C29ABCD67A15BDD5DDE5D
+ 68322C7247A75BCE1A183CC59095EDF2444AB8273B9D401B55573F97E659B421
+ 8895B9F939745A5DCED152BE8EC93BCACBCB6BDCFC8B3EE2CCE3015A5ED2BC79
+ 9B93692D2CDECBAA9592D7457BBB2B6BF0FC7E06D6FE13C7756371F6EB3BAD4A
+ D6EEEEEE6B95C8139DBBB7AA8C306DE08EA7233CF43D05A78463F03780ED7527
+ 9E1D6354D49DADEE2E121DF6B69241B48C06F99541900CF1B8E47241C7D85F16
+ 3E137FC2DBB1B8B38B49167AA5AD94D6FF006C333334CCF86F2E255C108B95C9
+ DB800E01615F27E95F0E752D1EC2EB499A6B7D0E28247B8963BD126E36E37952
+ 81B2589F9C9CF1D39C819F36AE26751734E49B7CADB8DECEEAF6BB57BAD9ADAE
+ B7B5AFEF647C5B4F36C3F34DAA728B4E71D1F32D6D66AEECB4B2B3D95EC717E1
+ 4F1235EFC4A8F5C6D61AC6C2D53CB8A1B3558E27467CB905506E66F97E552777
+ CA0900007D8BFE0A17FB44DD7C2EF86763E1CF867690F846DFC40C26BDBF785A
+ 1BABB8D9026D19194F9720BB7CCD82101F9987CFFF0010B49D3750F0958B6977
+ 17D199EE7ED16ECA8C5AF381B9C0070ABB98918008C63E63927D213F664F1B7C
+ 67F102FF00C245A3F89353D3C69D0BDB6AA47D8347F29517EE972AE380C43487
+ 9CF230411EB61A2D5455A2AF14BDE8F2A6ED17A795B9B7BBDCFA4CCB03957D73
+ 0B99E6334A9D2E6BC2564A56B25A68A4D3BBD5BB3BD95EF6FCF9D7FE1FF88351
+ D6EF6EEEB52F38C2CF30BE47F32E2D1F9C3C48465D87CA559CF018E73B43567B
+ 7C39D3B576B77F1D5CF8CBC6DA7E9F32C9685B534B08D368E7323248FC904F01
+ 48248C8C73FA3B77E0CF85B6FE1B934BD5BC49A3C6B6FB81B9768A4B8B220820
+ EE4CCB206C6461243DB8251D7E4FF88DAD7C3BF187C48B0F0FC9E25B8D72DB50
+ BA8A1924D3AC99BC925B6AE146573B70C13019092A58B002BEE324E28C46365E
+ CE14DC547AA8B4EDDD3B69F26BE67B50C6E4B8E8D6957C1D46A29BB49CD46497
+ 5BA5AF4DF55A5B4B33C535BF0B69336857171E0CF0ADA785F47B4C5BC97771E7
+ 5C3993763FD75C4885DC003E503037642E1B9C1D2BE33DEF85356BE92D759D5A
+ 35D42CAE3499069A1ADDB580E36BC61189122B2EFC927827A961C7D99FF0504F
+ F8262F88BE01786AD7C61E08BAB3F147813560934DABDBCE3CEB405020CE770F
+ 2CAAAE1E33B8B139C60357C15E2BF875A958EB1345E5B6ACA80CCAD144F1A958
+ CA8DDBDF1BB3DC00A4827071935FA0E053945D0C549EBD24EEFA6EDDEFDD1F07
+ 5337CAF1F4638DCB30707D39973696E9CBCD7D3AA69FDD666AEA3FB467883C3F
+ F0F756D2743F114BA7F8675CB74B0D434DB98A19AD7CA52595FCB757DA51BF79
+ E60024DDB5B7139AE07E0FEA1A2D9789EE3CCD4EC606F2D96150C61BA12AB965
+ 09179722799B18EC50B8DEDCEDC97AE17E245FEAC279A1B3963658A5525A39A3
+ 559F8657DDB97A860386DC7A103E6E78DD1AE5BC45A9069BFD16D635CF469F7C
+ 83853991FAB92776481F37CC3A15FB7C0E434D61E6E0F979B576B5DF6BDB56FF
+ 00AD0F85C6714456312A9413DB7725B595D393925A25BA7D2C8FA034FF000FEB
+ 967A8CBA7E8DE2E8758B3D52E05C4969A8DBC56323A919D9205DC247420630CA
+ 32370CB028BE4FE3CF841E2EF067C445D4B53D1ED63D2EC66F364B868D52CDDF
+ EE3EF963CB3FCC76ED525812DC64B13EDDE13F87D63E39F87D1EAD7536BDE1FD
+ 604122D96AFA1DC457AB29518026B71B245C6C600C8DCF254B8E0F8DFC52F889
+ F13FE1DE8D6D65A85C5D5F69774C6E74FD4E5B7668EF3748C04CD24832B80A47
+ 96E142088E01C966C725AF5E588953A2E17F864A4B95BEEE2E2B95BB7CD755A1
+ 5C5181C1D3C3C6B49D49434945C5F372F6528C9B92577BFC2F469EA79AF8ACC7
+ E1CB8964B3D3EDECE2B88A3D8B61030112E54990B337992AB832290DB80CAE76
+ 9C11D26ABE12B8F0DE8B0CD14664B5762CF0DCC5F68650542E36ECCE704B6E50
+ 00DAD9248E7D2BE03E9563F1844FA3EA16D63A85D5A33496466959B1B887F391
+ 15B80A492570428760548F947B66ABFB01F89A2F02C11EA3A5FF00A33870972B
+ FBD16BF36F88C73A928C410AAAAC54E30A0EE602BBF32E2AC360EB470F897CB2
+ 4ECEED7BC9ECD7A7CB5EA791438271F89C1ACC29352A734F92DA59A7AAB74BBD
+ B47F95BE5BF875E12D1BE25E9BAD68BA8DC5D4C214FED582DEF6F7CB5B196088
+ 34A54BB8F34CB0A344147CCEFE5E0B6D28DC1F89AD6D3C1FAB4377A1D9C12476
+ E86658BCD33885401912B679566F94907EF2EE5642A28F1769F7BF0FFC64DA35
+ D2DD69FA947388A45B85749448AC55CA86603F854005B202FCD924B562DE7883
+ 51D6AFB524B79AF02C3279F1C734C2346C6F62541C29D983D393B70A1472BF63
+ 84A13E775613BC2493B74D74BF9DFBFCDEE7E718DC44791529C2D522ED7DDE9A
+ DBE5DBE4B621D4E59B52B3B3BE47B7B1BAB399E216B247B66863136F5E360572
+ ACEC03B1662362E02A103ABBFD574CD43E044F316861BC8EFA384BC6DB5A345F
+ BADB71CA26D0C07CE40230783B16CDBC3D07C398EE33787C416B3ACEB1DC13F6
+ 3D8E30B24792BB9FF84866656618C6C1C71BA4DAC3AB59EA11332FD9267678A3
+ 3FBB63B41284AF240E46092470467B9EAD2B6AD38F24BEFB74F4ECCE2973516F
+ 552F691EF7B5D75ECFBAE87371BC7A16B90C8D24D34859564F2BE6C608E139C9
+ E002AD9C1DCA3B66BACF89BE38FED9F15247A6DBB58E9F0699696A17CFF3D5DD
+ 2D523965DE429FDE4C65942E320C8146702B0F4FD31AD832CD0C7E4B15F35A48
+ CC80AA942CFF0021C821770217048C77E9871EBF341E65C486393CE91A430C8B
+ B80DC5B2307B64FB124F7E6BD374E339A9F54ADF79E651C4CA845C365277F4B7
+ E3AFE83F4F8E2F13EBD1EEF2E19A669A572542C60942C3000C050E08E9C0FA71
+ BFF0E7C4FA6F847C571C9A9692B71A6DF3B94697023310DCA181C61C07439232
+ 0EC207522B9FD2B4CFB4491DDAACD04303033B45097F2546D5DC092324B31E03
+ 0C12BC838C49AB45FDA3AD2C31B06B7D34A5B46F0FCCA154E37027B927791C02
+ CC78E49AD6A538D44E12DAC7351A93A6D5487C57BAF3DBA3F9FDE33C41A2DBCF
+ 7D711585C4F3C7012A3CD18314619C6D2790DC2C7820E327033D6A0B5D33FB4D
+ D9197CC11FCCCDCF201E99EBD3A1C03CFA019E9EFAC6DFC3DE1848E3B594CB73
+ 1959F331387E7682A4E32A0804718CE79C2D735717BE45BEF62BE6282C104AA4
+ 64E0852B9CE3BE79C9C0C77A29D47256415B0F1A6F9A76EED7A92695A8AE9F78
+ AE2399A39488642A0F972263195E012DDC1E31B78E79AB135BE665F298C5E5A7
+ EF7E7DDE5A0CAB7F08EBD0761800F6AA31C1269F7476B88D972A155B01DF9E01
+ 208C1CF4C8CF35BBA06926D1D67B711C9B9C7921C7DE032C379001E5416C0619
+ 1B7AE4292A597BC8BC3DE4BD9CFA7E06AFC59B65D17C71AB6990AACD3DACB1DA
+ 8650198B22AC45D4704E4A7000006EE0018A83C25F0C6FAEF5386D5AC7ED9717
+ 8C9008522122A48FC2E173B99F24703A0E48C575DE10F0E59F8F7C517B7DAA5D
+ BE916FA94CF2DCDD3B9516C1A4072B1A82F2C8E7E558D177BF27B175BBE24D4B
+ 4DF00787A6B7B3916C26BA6685E4F33FE4136CD8568B0B9325DCABFEB4A12B14
+ 64C60B36F11F97F5A6AD87A7F1595FFAFEBF157F6BEA2A6DE26B3F775B7A74D3
+ B6DABD3D6CEDCC7C5286D6DA0B1D0B45921BE6B6699A79EDE32F1DE4A58EE78D
+ B04B2A105158F195620F401FA1FC194B38EF2EBC49AB68FE19D3F28D14B3389A
+ 79812DB76418638E186E200E063AFCD83A87C5083C35E547A00689A289144DB4
+ 61B68FEEE491DCE4B679076E40238FD5F5ABBD7653757B753DD4B8C2F9CDBCAA
+ E4600C8C6324F038EBC0AE8A787AEE9A8465CABBDAF2D75F45F3BFA1CD5B1D83
+ 8D475250F692564A37B4124ADAB5694BE4D77B9ED96D25AF872D1AF248E3BAB9
+ 9003E498C0694E010381B87CC4641EFB71DB3F45FEC33FF050CF137EC27E3A87
+ 5AD212D753D32EF0BA9D9DCC224DA40203452281B08C282A410707A1208F9D7E
+ 1AE857DF10BC4E2CECD1646979010A74C02A323200E9F2E08001E9D6BAAF1DF8
+ 6A6F0BEA1169AC2449A390C4AC390CEC71BB8EFB467E898ECC1BE2F39C161317
+ 196071894D4D6A9F6FD2DDCFBDC96AD5A74D4A9FBB16EDD357D6F76AEADBA7A7
+ 43D5FF00684FDA4FFE1A03E2C6A7AC58E8717872CF53BA37115969C9B6485CB6
+ F7F2D7A4618FCDC602B3B11E95DD7C16FD89BC7DF1D74C9356B7B1FEC1F0DC6C
+ 0CDA95D966DC0127059FE666EB851D71D000587B37FC12F7FE09EBA7F8BA69BC
+ 5DE3265B7D06C3F7B7ACE00F3DB6E4469B860390B9E400002C72BB55FEA2FDA2
+ BF690D2F548ADB45D061874AD06C5C5ADAC3126E07240F95320C8C4907939CE3
+ 272541FC833EE2BA7819C72CCA21771B2BBBB51FF37EA7ECDC2F80AB8CC4B850
+ 85A2BF8952DB2FE54FF0B2D3D4FCCEF8C1FB012E8A64B85BA6B896256DA64465
+ 24E304FDE2598FAA0E9C670B5F3378DBC1FF00F088CB710A5BB054DD34BBB6B8
+ 0D9CAE1BA118073C7560318C67ECCFDA5FF6C8D12DB53934BD1DA3D46691C5B4
+ F389C496EB8237979148F398020ED42B1020280E739F9AF5AB2BCD76DDB52D52
+ 58D56E2D45C307D8DB98BED8E0E8B9E32F81C6D6200CAB57E83C278ECD654154
+ CC767B27A3FB8E3F11B2CE197C9472C8A55B776776EFBDFB7E7AEA91DC7EC65F
+ 08EE3C6FE391B9264B9909B655656E61DA88FBC73C3160A00E0B6EE76A907E81
+ FDB3A7D33E099B1F0969BF619BC450D98179385DDFD9A186E58A18F711E79F99
+ 9B71EB2139C80D5D7FEC31E12D3BF666FD923C45F19B5E85989D44E95A1D9480
+ 4A6E248FCD548914753E76DE149C9DD8EB8AF9A7F6F0D2F5EF85BA8368BE2ABE
+ B78FE21788EC575EF14DBFDA019348170DBE1B663B9BF7B24614B74FDDBC78DD
+ BF79F0A388966D9F4A37FDD526E36EF2495FE50BD9F7934BA9E6D171C0E4AA8D
+ 149D4926DED7B6F657EAD6BA6CAEFA1E77AB7ED0D3698D259E8A6158E162B75B
+ 02F9330DDB820462731827773932364E7690952CBE323E25D56C9DD6E96CF52B
+ B54BC9485BCBA924797198636606460A7764100650175DCB97E85FB09FC461E3
+ 7D1FC1B0F87C5D78DB5EB586EE2F0E424FDB6C95E1FB42A4D1B6D093791FBC75
+ 3F71082D86276FBA7EC53FB2D45F0DBE2DC7E22F88D66F6765E1D976456F2424
+ 42668DF7B88DBA305C120AE412C39C60B7D3E6D9965980A12AF06A528ABA49FB
+ D26F6B7CF67B1E5E4392E7199578D19A718CACE4FA463ABFBDA4F4DDBF9B5F76
+ 7FC1303C27A6EA67C2FA63787E6B7B7B39CCB34FE47FC4C2EDC005DE6C1776CE
+ 0ED52544632A33F3B1FA6BE347ECC5E2FF00DA2359B8F0668FF67FB3D980758D
+ 62F11A393F7BB99614F989509190BB02804C7B88E467E47FD917F6BDD0747F17
+ C76761A5DC6B9A86A12AC91D9476C667500003CCC9C728C06D5DBB78C1396DBF
+ A09E24F8E9ADD9785B52D5BC55A7378774958D9E6D1B4E31BEA1772ED8BCB174
+ FB8188B92018402DB701D9772AB7F26711C7174B3678DA91E5BEAAFDDBD347BE
+ EFFA47DB71456C76599A51AB94A8B828A8D37269DE49AF7A305AB7ABE8A3CDCA
+ E56B23E37F8E7FF04B3F03FC25F0C43E24BCD634FF00105F436D2B43BEF4BCA3
+ 6F98865512302C0611810311F9521E40DCBF9EDFB497C09D2F47F195E695A159
+ 7D9E2B065D85DE3DD01DA3CDDF290CF267195123C21460EC0700FA0FEDB9FB79
+ 78C3F68FF883AFE91A85EEA5756FA7D82D8E9DA1DABBC569008240892CB1C5F2
+ 3485848776CC46429080E14791F85754D427F03C975E26D7ADEC248EE4436F6D
+ 670C7773B29DEAA0EEDD820AB31766DCC41C96AFD9B8572FCD705858E2B1D5F9
+ E6EDEEBBF5D55ACBA6B7B2B79D8E8C3C2AE29BC2E7751CE6F99B94631F76DA34
+ E4F915FCEFAFA9E6FA359C769ACD840967A4D9468CAE25F306F6FB8C0B6DDC58
+ 0CF7272189DC38C7BD7C22B397C37731C9696BA55C4AD36F58E5B389ED212BF2
+ 81B5B95CF38041CEE2304E4D5FD02DAC7C67A47DA7568B485BBD3E58A4DF6C20
+ 3E4A48AC59A4DBB15583ED201669097E49CE2BEADFD89FF676F07FC56BAD4342
+ D6BE2068BE1BD724B763A5C7ABE943EC334878647B80EA55A319C2F073DFB1F5
+ 732CDDE25AA0A2949E9ACB46F7F89D92F9D8FAAC8F2DC3E5186A998E26AFEEE3
+ 6F860E4D2BDB58A4DE96D5DAC96B7691D27ED17F10BE1EFC5AF0CF80F58F01E9
+ 56FE1BF16DE295D7F44B67FF00897C57288804900DA77C72B923A82BE58C8E94
+ FF00D917F676F1A7ED39E24864B6B0FED2D2E3B965D47508756B681ACD8A3A2C
+ ED1390EECA92165CA9DC70727041F38D5BF67ED6B47D7F564D5AF3C376B0E8F7
+ F35ACF2DCDD3869D564310B8851372955E18EDC10B938200AFAB3E13F85BC3FF
+ 00003F673D6AE3C35E3CD0BC47F113C437296B1DF59C3B2DEDA02C6561186286
+ 6930189665203312475CFE719A66142AD59D49F2DF44ED250DB4693B3D5AD6D1
+ 4F5D6CD5D9EB7106330F93E471C065151D4A9524A1094D4A7CBCF26DB94E3CB6
+ 8C53566DDED15A49E87B15CFED23E03F80F3436BF0FF0047D13C41E24B1BB8D3
+ 5B920FB4420CE0BC2268A260638C3B34A0146E11880ACAC0D7A87C37F8F9E31D
+ 4AE5535AF0C87B18EF25977C76A4622D9989C610052F92A4E171B8B1214951E1
+ 5FB1FF008126D73556F135C3CB71ABCCFF00628EE8D885B359810F2CC5142F12
+ 0770181E0330E7AD7DB9E15D26C7C2567676A42EC9623B9DD8B336090002FD00
+ 03A76E99AF9FCA711986331338E1F12B0F4E16E6934945CA4E30578A494AFA29
+ 4A4AF257BDDEFF00CB3C6F2CB30155E0FD93AD56DEF549CA4E57B74D9251D797
+ 45DAD649BC2D63C3BA7DDE9B69A8D9ADAD8C37D23BDC146759E794F3B43AE372
+ E14649E19540F7AF943F690B3B2B3D675BD666D6235B655021494957B69885C6
+ E5F99C3103807EEF639C57D5FF00127C6D0F83B4496CA2FB419AEDF25ADD7708
+ 43111A9238DC0330CE08C1DB9C0E6BE0BFDA2FE2AFDA753974B31E8F7135C191
+ F55BFB6B958E192443C05DB9018E431CFCC77118E09AF378930F4678D853A2A2
+ AA72A75143E18CDAB4ACB6574936ADA49F2F477E8F0BF0389C4635CE37E5DBA5
+ F96F77BF92B6F7D95ACF4F19F12FF6A5BEB1A7C7A2B347677FB1DE696DA469A1
+ 0E1897480862432AB306DA7A00AA4E456E7FC14B3F6ADD43E356AFA5F86F46D4
+ 3C4D63E1CB046B386192292CD6F264C297742AA09246154A9C056385CD76DFB2
+ FE9D1FC0BF116B3E2EF8B5650FF66DB5AB47A7696D14ECBAACA7732379A1FECE
+ 6158FCC53BF00B32E324807C4FE287EDC9A5F8CEDEFB47B5F857E17F0FE9619E
+ 453035C3491A919E1D9CAA2AB1F970A5705481838AF5701869457B6A32536B47
+ 18B6AEBBB6E3CAEDD15FEE3FA4F2CA7F5ECF69D7A584FAC470AB4AAA508C39AA
+ 2576B9B5938D92BC745777B33E67D62E75CF0F5ACCEBAA491DD79C0CB1CBA79B
+ 88E750400ADB9860800E5718393919C05E4E3B2B84BA6BDB5F173DBBD99DF1D8
+ D86951582290FB82B6D7507009C9C6E3BB8C12DBBDFF00E297ED51A278DB528E
+ EA1F07EA5A6DD5C7936F7005F41711DE4983FBCC948F242927688F202925DF15
+ DEFEDB7FF04FB7F83BF043C37F10FC0ECFE24F0BF896DD21BD940569B46BB3BB
+ CC49154E197CCF313AFC8CB8C125597F40C9E58B941D4AB4791AB5F48BFBDDB6
+ F34EE7BB9F67593E1DD0A799D1A94EB56725151AB26B995B9A31B371BBDD6BAA
+ 5B3BA4FCC349FDB1FC4907C28F1778323D7B526F0FF8874F695B4BBA613DB473
+ 165C8DAE0323B364F9B11504211B49C13E05E21D7B47B6D0F4B86F3C4177AE58
+ AAC91DF696D6FE4DCC53851B584B200BE492480BDB27726597779EF8EADB52B2
+ BEB890B7931A4864200F337B11B813B5F39054104F009C0EC6BCBF5FF8D7A879
+ B1C735E5DD9F93809390DB9C0701543601C30460439C11C9C630DF6F83C96789
+ 6A7095D2B69DB4B6F66F6ECD347E478ECE32CCB94FEAF4A5073776DF2372D6ED
+ BE5504FE69DD697491EF1E39454F0AE8B6771E2BFEC98F5C8DDADA48FC3EB94B
+ 55466DB2CF6EA1659369C2ED2AAA1C8240F957C47C6BE1EB1B7F1569FA1D95ED
+ D79B32B31B9891A466C890A9631A86E0ED1FC672E7010A80BE83F0BFC6BE23F8
+ 91E166B7BAD725B48DEDFF0073792C2C6CBCB0C424571E402A002ADCBEDDA57F
+ 880AD5F88DE2FBEF871E05BFB8D77C29E15D6A4B211DA5AEABA6CCB227924B1C
+ ACAB82A5F72A85201C17C027EE76E06A55C1D7F61A395DE89A576F66BDD57B75
+ 57BE87879C6068E2F0DF5D8C9FB2B2777CD2B25AB8CA2A4DC6FBDD2B5AD66788
+ F856FB57F0CDDC3E1FFED692DE469A648EE2E6DCEE8B038C239CA16C0C019C6D
+ E71906B55BC6127837E20C96FE2059AFAC646586EADCCE45B4F1842C15E300B3
+ 6D75046082A72464815DD7C375F0AF8F618D353D4F49D1752B02AB63A8C93941
+ 1866C16DEAC0BB30217E6CBE00E3209AFADFC57FF04C1B7F8F3F0E34F4D2F5CD
+ 2758D61A05BE824D36DD2E1A22C9F3192155429148181C16254E1940DC419CE3
+ 8B32FCBF10A39827052BA6ECD6BFCCA495BF1BDF647160F85719572F588C3D58
+ 4A3BC5732D97D9926FDDD6F672DD5B5DEDF06FC52F14F847C47AC5AFF64DB6A1
+ F65B59DA2B2892DBEC79806CD91346AC5032603055DCC793B98B00DF717EC39F
+ F050D5F87FA3E85A1FC518F5ED5FC17C5B4B6C8A6D6D74CB70A104849E1803B8
+ 10082AAAA773039AF09F1AFF00C12AFE25FC196B79B5AF0ECFA8E996EEAF05E5
+ B965497E4008DB3A83192011920264B7CC73C71DF14FC6D3F807C29269F671FD
+ B61B0B854BBB3BE915660ABF7BCC58DF68D8CBBB7A6D007CC41C7CBC79AD1C9F
+ 88B0B0C0E1E6AB46FF001292BC6FD53DD3F5B6BA3D0E6C053C6E5AEAE37131E4
+ 8C96C968DA5AD9A77BAE8E2EEBA1FADBFB79FF00C116BC0BFB547C2887C69E08
+ 4F2EF66B41A9D85D4307DA669E3640E81E4C933C678208CB0E0AB6060FE107C7
+ EF839AC7C24F88B369BAB5ABE9AD1A791791CBFEAA55F997702005F28AE36B02
+ 42EEC001949AFAFF00F60AFF0082B77C4AFF00827578B74DB18EE16F3E1ADECA
+ 3FB4BC277E8D8B12DB099AD8B957B7E1B7F9790A77E36FCA597EA5FF0082A67C
+ 07F087FC1407E0B69FF1C3E0C0B1B9B19A34FEDCB09422C96E1B869E20B968DB
+ 9CC8A006603705FBC0FCDF09E2B3BE0ECC29E599BD4F6D83A9A53AADFC2FF965
+ A68DF6BB57D9B3E6F15839E6F42AAADEFD58B4D4D6EFFBB35BB6FECCBAFC32D5
+ A3F213C417917895E4D2F4A3269D242B34491215696751197F2CB60061F22B64
+ 93F78118C96AE474FD2BCFBFB6749649649B6796632DF29DC4E490D85FA9206D
+ 39CE5891E8FAD697E1DF86FE25B2F0F5AD95D5CF89349D4924BEBA337976F020
+ 7CA85C9259B05B2E73F805C54FFB22782A4F1BF8FEEE691636B2B0B66B99A788
+ 2AAC2155A670CCC0B6E3B76F2C3048C6EEA3F7C96610C3E1278849A825757DDD
+ EFAF7D7468F8BC2E495B1D98D1C1269CE52E576D546D6BA7D2EB5BF4D0E1BE2D
+ DAB68314D0BF996CF22853146083B571BB2A71B72A5481FEC8030320F3D61612
+ 4B6968FF006586658DBCD2E13E531AF0738273CA2B74C0E738190777E2A6A63C
+ 4FE25B8B8B4BA86F156E1EDAD258D55488F7615B254654ED381C6D2C79E84D0F
+ 06C9797304EB3347F66B74672625564B701D43B31E8DC361550E49917A0201F5
+ 30DCD1C3A72DFA9E2E37D94B1D38C3E1D52F45FE66C78D357F0EDD782BC3F6F6
+ FA3343ABC568CB7724329DD24401FDE326E3861B1481850CBBB3B4104F2BE16B
+ 6B1FF849A49248E5B7D25642E9BCE1D94F29C93839C29247AF04039AA5AFBCD2
+ DD493BFCAD78E648CCAFE6385CE724E327AFA024863E9534ED18B768EDD0AB3F
+ 2BB55B681B890338070D92001CF5E4E703A29D1E5872A6F5F3EEEFF81CB52BB9
+ D5552497BB6E8B5B6DF7DAECB3E2EF182EBF76C2CED843A2DBB6561C70E03120
+ 938201278273939EFC01CDC3A6FF00684EA4C8ACC7E660AE0F638E00E318E73F
+ D466E4F693DB436FF3C7E4CF18D8C1036FC364FD0E49E99E7AF15D44DE03D1F4
+ 7F0B59EA177ADD82DE6A5712C6DA5D92C92EA1610A6079B20751126E2CDB57CC
+ 2E4212422952FA73428C6CBE5D4C630A98AABCD3F57D17925F92473FA169EFA8
+ EAF15AF98B6ED24A9B5DBD33D830048048E0606013C62BDBBE26DC785FC3FF00
+ 0D7C3B226BD18D4A6320BAB07D39E0BAB7543FBB639CF99191CA9C9E53E6EA14
+ F96DE7C61B7F026BDAA1F05E9634BB1BE46822935610EA3A842878DCB218C245
+ 271F2B468AC81880E7963C0DCEA336A3A849757134B34D336E924725D9C93C92
+ 49E7F135CD5B053C44E33937151D6DA5DE9B3D1DBE4CDA8E634F0909C2294E52
+ D2EEE92B3DD6AAFF00348EF356F8EB259A5BC5A2DAAD9FD8FF00D44F2ED768D8
+ 647988A000B2107058EE200017680057177BAADD6B576D2CD35C5CCD226C6777
+ 67603AE073D0018C7402A17B6DC4FCADF336179C85F6E99E9F8FE5CDCB6805BC
+ 0D26E5F4FA1C7EA78F5C576C69D3A4BDC5A9E7CAA57C43B547A2E9D17C881CFE
+ EBFD634CDD64EADD7EBDFB5436F01BC46C37CDBB014F451F5F4E829ED2626F94
+ F962565230FD0FBFB8CFF3A743A9794FB56DD6439E0B286273EB9073D4F1DFF0
+ 15B6A72C9A6F53F5DFF621FD853E1CD8FEC890F8E7E2778F63F08AEDF3D2DB4B
+ B58A469C8CA859669DC00BC7FAB0802F232DD07CD7A4CBA4F8FF00F684BC9AC6
+ F87FC23B6778C6DE47B68E169151B05D962F94F1903AFCCFD4E6BE78F16FC4FB
+ 8F11E876B1CD34979F614F250DD3F164AA0E157702028C80154282587A8C6AF8
+ 13E217FC22BA743E444F13C257866C1937301B4E31C06DA7938242E47071F94D
+ 3E19C6D19D7C5D6AEE72AADDA364A3057D9757D3567ECF1E24C2D59C30D87A7C
+ B18DB56F576496EA2B47ABD5C9DFA9FA5DE25FDB1ECF49F0347A0E9F27D8747D
+ 160DA63593E69DD88FBFD0176600B107682000422201F1A7ED39FB785F25C2E9
+ FA3C85037CF7B73093C215388A32792A73963805812BF2AB3AD78EEB5F176EAE
+ A0BC876E6410BC8A87EEC8D26C0324E7A076E06414F94F079E03C49771EB3AA0
+ 50CCD98E12792558EC4CB1CE4F2DC9FA0C7159F0FF0000E0F0B5FEB3888F337A
+ EBF9B3E973AF12B12B2C595653FBB8C746D6F393BB936FF05D95FBDCF63D6EEE
+ 3B1BD76B38EDE1B6B8659A07886480E11838E4E003919F4E3B607AF780BE065C
+ F8ABF647D73C78B348DE2BB7D712DB4FD2C0F31BEC36B633DCDF5F4B1E721636
+ 96D3CB3D0932025B2057856876326B9E17D3EDA0B8864B9B6B550240C1B032C0
+ 641200C7CCBD8008319CF1F4A7FC134AFBFB7FC43E22F86F6B6DE66B1F116D22
+ F0CC37EEAC174CB112A6A17F315240F2FCAB150CC0A9DBB87CC0B635CEA53C36
+ 165529BFE1B4DFF85357EAB4B6AFCAE919E0EBC6BCE1392E5525BBB257EAAED3
+ F87A5BEF3E8FF85BF18745F82C9F0FF48F115BB6A163F02F479B535B254496DE
+ 5BF121924BC2A49CCA03C515B82302E6EE2919B3034727E78DCFC66D5BE237ED
+ 19AA7C40D7D61D5FC59AC6A92EBD78F7B1AB5B7DA65937468911E1E24728A13E
+ EAC71E36ED18AFA1BE27CDAB7C6CF887E341A4ACD2AF8A35B8ED61853E4F36DA
+ 07C5B46CC000CAD3B46EC3A66D53249208EC3E107ECB5AA7ECD1E26F1F7877C7
+ 5F0FFC23AC7883C45A6B69F6115D169351F0F5F190324B6F184638D8245E8015
+ 910AC83907E6729C660B2BC3D4AB59A752A2BB57B3D5F34BF1936FE5E47DA669
+ C1B8DCCF1746AE5B4EEAEED6D5D9349BB3E89D9B7ADAEDF53CF7F648F0C7C529
+ 7C5BAC788F5EB5F1A43A6DE6967C47E21BC92C9AD6E2EF469E75596E61965DA5
+ D2E6468C3C89C3831292632E95F5EF83BE237C63F0B4B6FE1DD5BE1DC9AFC2B7
+ 2FA42E8F77A6C771636A7ED5144F6504418855F36E6D0492712CF35C15326DF3
+ 437C57F137C7DF137C35A259C5E2BD435C8EDF4BD2E2F0CE9F0090AAA69D14C2
+ 716E42E37AB4AA8C43E4B158C63E518F48F18B6B7E00FD94B44F196ABAF6B5FD
+ A5AD6B0608C1BE742F1C522DCDDCE5B05B092380197A3B871931E0F367783963
+ 6A42A3F6769BE58A49BDBB34D6BBDFD15B6B9CFC3752A606A56A58E52BD15CD2
+ 55135BED6BD9A6EEDA7DB54D6E7D85E2AFDBCDBF669F863A8DFDA68FE09F09F8
+ 8AF92DB6693E18B285EEE68EE22DC5AEEF720C032E58AC6159C4808D81F0BF5D
+ 7FC13642F8B3E18EB5E2FD726B7D45ACA5F2ECAD5110C7E6FCCAA5507CABFDC4
+ 5E31B9C9C6EAFC1EF00F89B54F186832F86E1D363BABCD425816CD0C994CEFF2
+ F61C0382032E572092BD71B73FB79FB327832FBF67CF84571F0DC5EC3772EA12
+ 4465915B1E6BCCAB298A33D798C92CDD555C6482735F8DF8AD9251CBF011C3C1
+ AF6B297DF15CB77D6C95FAB6F7D4EAC662E3996595A1868287B4707CD6B4B963
+ 25CC937AB4A2D5DB7D559DAD6F843F6BFF0008E8BF0AB57D42C34B6B3B1D6358
+ BC9E496FADD23925961C192350ADD10E7767A9CE4E0609F97346F849E2AF88D2
+ DB9D3B5237D1DE0FB558DD4C599120491D01DAAAC47EF239023202C5B7E3255A
+ BF487F6FCF82B67FF0CEFA978EAFAC5753B3D73581241291B56E42B2EF6CF1B2
+ 22B1E3A8DC11F03819F89BC3FA5EA5E19F11EBDA9EB7F6B8FC37A8452DCE9FA3
+ B37D9AEEEA6C29821964DF9542163578C647010000F3F61C139D2A995B9D177A
+ 89D9B959DDAB68BAE89ECDA565AB3EC31D2A7993A73AAE52A30D1A85D72CB693
+ 96BCA9735D3D1CAEED6E871BE18F807E2BBAF17431DDDD5F2D9AB89646650BE6
+ 100F51F2FCC476382508381BB35F657ECE7FB1878DBC7FE12D6751F0DE9FAFEB
+ 0FA7C8B0DEA697600309303E532B1511FCA3242F1D7240AF9DFC3FFB5669BE17
+ D1A3B7B7825F3AE2D7ED10410169638AE03B111C6BB40F2D7CD6264C966253E6
+ DA38FA97F66CF8F5F10F43BEF33C1B1EBDA4AAC68AF0DADC7D931F21CB5C2ABE
+ D6DA09650C39C93B78E3AB38C6633DA45E329DA1B6964DF9EB7EA7AD94D7A54B
+ 0D3FEC2945D6BA95EAB6E315BEAF4B689D9EE9BDAF6347F67FFD8EB5FF008A1E
+ 189F58BCB86D03424D86EB59D72E4A2D982769FDC9C36D241F9990212830457D
+ 25E2EB3F04DE7C38F87BE0FD15AEB52D23C317F34635E90ECB5D62E5961732C4
+ 23DF1EE0000A1998C608DDB7EF578BFC1FF84DE3EFDABFC43A8C367AD5CDEDC5
+ BC8D25C4F731B5BC56FBD8077E846D723187632308F76C5CAE7EA2F10F87E5F8
+ 71F0D74EF00E876327889BC325353BAD5AD0C53DD81248C2E14438F2E10032A2
+ E2491C8E480A09AFC6F36CDAA467568CEB454B4F76D6695FA369D9BBEAF4D2EA
+ F76D4BC3E34CFAAD5CC28C6AE254EA464DAA70BC5534E0E3CF29495E4FDE4A2A
+ D14D49B50D2E7A37ECE3731786DF47B5BCBCBABABE98CAA7ECA58C1096C160DB
+ 865D4330018E3E66C7435F405E4B6BAF69474DBE98D9CDB88B69B0CEEA7192C4
+ 30E83B7500608F6F96747697517BCD3FC2FB21FECB69E6B52EA4DE4B214184B6
+ E5511428625307E6527866AF58F869F1A34DF1E58345A8497567AE69B1234F6D
+ 24A00192E40239DEF888F4E07254D7CE6479DCF0AAAC1C6328CD3E78CD3E5947
+ 7E57669A6DA4E2D5AD24B55BAFE75E29CAEAD6ACF1B1BDD6AEDBC6EEE9B56D9D
+ FD3E672BF123F65DF1B78A358B5874EF1542DA6DEDC5D46F89DB72C0F9083064
+ 058C673950D97DA41C6307C97FE18BBC21E13F07BC7E32D53C3FE21D7B41826B
+ BD3B4ED36FA4B2BFBFB64471244A3277316493E6880718607BE3D1BE3A43E2AD
+ 0B4FB8F31FECB1B4697B1BA48935C451C45DF706CEF0E54C8C8AC46E28CA9B70
+ 58FC71F1CAEB5AF17EAE185BFDBA781A7BCB3F3D5ACDF6B4BB8C51BECC48C19B
+ CC279064926FBAA12BEA72D78655396342549A5792727EEF3463CB25EEC5A77B
+ BF7AE9C5A4D36AE7E89C1385CDB1F4E34618D8D3A7D5C2294B4BBD64ACF5BF2B
+ B35657D7442FED3FFB7DDBFC5C4BAF0EFF00C2BBF075E782DADC1B19ED6296CA
+ F218CA23A37EE9F6AB286560AE8FCBAFDDCB0AF9762D0749F14E89A6DAE9BAB5
+ D43AA5D6E430B8C399A56CAC7B4E37AB1C9014904B1239DC076DA9FC24D4BC45
+ F0CF52F1159F8375A6D13C3663FED9BA9E445B75FB449E52A312036E3B50762A
+ 00EA300F05E0DF14DAFC36F8A1A0F8A16E34F75D25D6E20B7BE87CC58AE01DC8
+ EE0027CC38661B41C9424AF191FA16170D3AAD39369CB5E6B2F7ADA6BD1F96DD
+ BA24BFA6725A796E45964E9E4EACE93F7973DD73A4D2E74DC92E64D395926934
+ ECD591C4F8CBC050F84EE350D2FC4DA3B5ADC69A5A168DD3635A4E31B95BE5E3
+ 6FA0278E790A71D5DD7ED57AF69FF03B5DF05E89AC3DC78735F749EE749B995A
+ E7CDD9B774CA8C33B805E0A0070155CEC402BD23FE0AE9F11FC2FF00B4E7C67D
+ 2FE227C3DB8F2AF356D1A01AE59C1223C965A8C4A437CB824B04550597875456
+ 041EBF9E5E20F132F85EF9842F25D5C2C80BB00BB914FDD2579000E4E38DBCE7
+ 39C57DF6072D75652A74AA7359DBC9A5EB6B27B9F9CE61C54B1784A58ACDB031
+ A727AB5B5A6B469C6CA3CF16DF2BB5D277BEBA7ACF8AF541E3B115BFDA96E96E
+ 0C76F676E23786DEEB2AC4C536D657DCA78DC3819C807396F39F8A5E0AB5975B
+ BDF22E3C36BA7E92CFF688ED8B4B2EEC65957CC6DECA07791817607AF53CAF84
+ 3E355CD8F8A63FDF0B80D323BDA8459A1CAFCC731BFCB9603A9209EE7A57A15E
+ 6A8BA9AC3AB69B671EADE442E27D32F67821BA4E719F3180670C1491C1C60824
+ 84527D9583AD97D449FC36D3A2BBEFB25EBB5CF92C462F0D9DA9CA92BCEFAC6C
+ DBE54FA6B2724BAC55E56E9BB3C7FC2FACDE787757B7D4F47D59B4B4B792E633
+ 2DAC9FBE400287F9B83B76ED0581607E41D315DB45A96B1E30F06596AAD26A17
+ 8B76C04F2C3A898E550AB36E500838386DBF3F0492802AF22F78AFE2A68561E2
+ F5D060D0C692B6F0AC9FBB95A68A59028F3088A463B989CE1B3BF1800E4E5BDA
+ 3F649F09FC37F11F891B476D7B508D844AC9A59B39A4DB3654040C480CE77329
+ 52486129F7AE8CE335587C3FD72A517A2BDEDCDEEF9B5F83BEE789C3F924AB56
+ A985A38A8DA3EEB5769F3BFE58C95DECEE92BDBA336BF665FD93E3FDA66D2D75
+ 2B8D3F52D1347D1DCFD9EDE231DCA4F3E4B93126C1B53648A093C31CE36A908B
+ F4F784BE17E95F0274D9AFB4DD6358B4D4A37330861FDD195F23977DEB927BFC
+ BC127A64E7EA8FD9C3FE09A90783FC0562BF624B7DF10315A4F773C76F689D70
+ B108B68EB9E58E3D4F5ACBFDA77E02F882FF00E126B5A4F846C74DD5B54D3E22
+ 1245B1B69F79FEE89C32C91961F28120D84E3D715FCC19C71E4336C7FD5E152D
+ 45CAC93764937D5BBDFCCFB1C9789B27C257FAAD19A93D15495A2AFD1DB46ADD
+ 12B47F57F369FF0082FCE97A25E47E13F897F0B7C37E22F0EACCB6B7579A65F9
+ 3770631B4C90B2B12E406607CC52541AE17F683F813FB3D7ED8310F1B7C2BF1F
+ 5C693E5CCD24DA0EB89E5C93FCB921666DEF1E0827E70E7271951935F13FED35
+ FB23F8FBE1BEB1A5E9F73E1F92C5DC4EF776CE1D4F9CEF96DE77040A3801C01D
+ 17241EB57C39A25BF85FC257D6DA7EA372BE21D2EF214B6D36CAD0F211080E85
+ 82C720600C6CA7E5DCCA738620FEC783E05CA30D4E9E6190D774A6F47CAF9A0D
+ 5ECDCA32E64979AB248F8FCA68D379956C262694A145A72518DFDE924A6928C9
+ B8B6D689C6D2BB49BB36717F19BE14F88742F8A9E23BEF144D71771DD3891AE6
+ E9A38CCF22B6634C0C30250B0C95E1490BB8B003D77E117ED0579FB2B788340F
+ 0CEB77B6F6916B16A7ED371A7CCD2476E5D617809F29B6F92D1BA868C090A30C
+ 046656C7D3BFB31FEC227F685F82779E34F17C36B34F25D47A2C7616511B5598
+ 93F34F2A90144C06541450A437462401D1F827F614F84FA47C54D02DFC45A25C
+ 25BE93736F712BCBF346E80AAB45CB1DAA72338E0E17B002BA335F1032AA9096
+ 071B1753D926A4A095B9946DEEEBD1F656DBB1F4990F0CE2301571988CBAA24E
+ 56BC66B9E692A91AAD4A3AA6DAF76D7D399D9DF55F9CDFB4EFC3F56F1C6A5AF6
+ 9B636D77E75E4963218E579ED5E59211B36C8D81216E40E48FBABC81C64FC6CB
+ FBAFD9F3E136A7E048B58D2F5AD73C4323DB4F7BA64BBAC61D36338CC5808079
+ B246CB90A01556EA1D58FEC87ED8FE3FF87F37C51BAD321D174B8BC27A03D9F8
+ 774F82D618D6DE6B95855BE50C36B3905940556C24258E0B1AC5B2FF00820B7C
+ 17F8B1A66A3F10FC49AD49E14D2D6D2DE59A545F3E4B77F2C60389B729902BA2
+ AAAAF2C0617206EC32DF17B054B0F8679D519C21A38A4B9DC9AB72A76D7DDDDD
+ 9357B6F63E5338E1A8E07055334C3CD53AB898F2D9C5DE1ED2CE4A2A3CCDCE51
+ 6A3AA56E693BDCFC39D2BE285E782743D1E4F0FC2B0DCD8C8F334D204997CD60
+ BBB2BD08C1550081C9C000E7327C44F1E5E78C6E2F6DEE59B54D5B56B80753BA
+ B7548CDE323FCB1613236A0EE14EE623764C68D5F5A7C77FD80754F879F15ED7
+ C9F13EB1A7FC3717734035EBEB345B98FCA56750D6F98A35079C331D91804B15
+ E14796D87C60F84FFB2DE888B676B0FC5AF1D6D2048B1793A358B65B3BA6C069
+ F1BB0446BB1FFBE07DEFD9B09C4583C5D38E272EA6EB4E5AAE5DF577B4E4D251
+ 49EAD3775D9BB1F9A62B84F198594A966D5961E8C524DCADAB514BF7708B729C
+ 9A7BA4FADE48F35FF866ABEB3D09B5CD7596CF4EB88729E629569642DB542B70
+ 3EE8DC0A82098C803D38DF12EBDA6D8BCD6FB6DDE157CA25B0DC00CE54160DB5
+ 412031C658743CE45687C5BF8DDE2EF8D5E216D4BC4533CAF37EEE3B5B4DB15B
+ C4A71C2A608E9C0C9E071D062B83B5D31259FEF8DC1422ABAE40047539EDCF5E
+ C7A7635F4D81A58870F698C92E6ED1D9795FAFAD8F91CDAB611557432DA6D47B
+ CFE27E76E9E4AFA04BE26BA6955ADD574F55DD83196DCE48C7DE273C8C2E0614
+ 8ED50DC4CB661727336F23685DA533CF03F4C5741A2FC36BAD77C1DA96B7E743
+ 0DAE926359B214B319182011A8E5B0194F61C719EDCF3693344FE66008D7E524
+ 4814B639E3A1E9C8FA75AF4A13A726D45EDA3FF23C3952AF04A4D3D755E9DCA9
+ 76C67999A453F74952067F5EFDF9F6A85D434BB769DAD8E01E79E6BA4F0DF84E
+ EBE20EB6D616AB0EE862F30EC6F92340093CFA0C939EBC75EF5937BA53584EEB
+ 1AF99E5929BB195623D3EB8EB5A46A46FC8B738EB519A5CEF6EFE7D46AC6203B
+ 4BEE655208C671EBDBFCFB53AE2E5A3B611C58775218903708F39EFEE4FF0093
+ 50C3A7B5C6E92691577723E52CC4E7FF00AC4F351CBBA239E49C0F989FF3E9D3
+ DAAB953612A9251D15AE4721DCA4B10589CF1803FCFB0A912CE4BC4DB1ED91B3
+ B428EA7BF00F3F95464B4877328E081B801B47E43DAAD59AB29DB0B0F3245D84
+ 67E5393D3D3181DFD2A9BEA73C637D1EC7AAFC26F0DD8F8E3C4D0DBDE49F67B7
+ 843CAF1A6C2C591581FBC7EF1C139C77ED92D5D2FC7CF85379F09BC4F6304D66
+ D1C7AC5926A304B1C6EC8D0C990920254168C80595C001B8D836904DBFF82795
+ E786EC7F6B1F0C69FE318239F41D52E85ADF2963F3C2655791370071E62C6F1E
+ 78C0918E580C1EF3FE0A79FB465C7ED3DFB6E78CBC4362B0C3A1DB5D8D374C48
+ ADFF0074D140DE5E63E07CA76E53041116CE8578F8BC462713FDB2B0B08BF67E
+ CDC9B7B5EF649776F5BF64BCCFD3B0787A2F2678A7F1B9F2AB5AF749377ECADA
+ DF4D6CB77A7CF9246B796B34DFBE96668C120A2C721C100AECC903E42BFF007C
+ 7715992CEA5D6D7CE78D4A6D691CEE3273C601EF8E31D49518E981B7A56A535D
+ 79933EF56986146C2AA80871B4F3C0C16E8738C900F35CBB44A91B4122325C2A
+ C8ACA58AAF560796EBD38E49EDC92057BD463AB4CF1719594611952D1BFC6D6D
+ 3CAFBFC8E93C17E38FB35F7D9DA4686DA40239073261700939278C6093D318C8
+ 208CD7D27FB18FC6E9BE127C5BBFD5ADE0825BFBDD2350D34C6D9F3525BD8840
+ 5D0E080BE5BC83391C6EC63773F2AF88B47FECDD2EC2EADE4DB0C89CFF007E27
+ CB09048324E3856E84ED75CD7AFF00EC75E23D26CBE3D781CEB98FEC9875AB09
+ 6E1C618DBC22745756E79531B3E01CF180318DB5E2711E02956C0D576BA71775
+ DFFE1CF7384F36AD1C6D3C3D5B3D55AFD9F45D0FB0344F85FACEA9E2CF1C69B7
+ FE5D9E8BF0C6F2E22D724FB5242D7134724CB1DB46A597717901E1324E7217D3
+ EBEF0DFC48F87FFB047ECC2FAB6AD7505E7C4AF14D986D7358B83F689340B590
+ 284B1809CE277006E3D541C74C63F3D7E2EAF88FC77FB40FC56F1259CD656B67
+ E19D5EF3C537ECD3C6902CD2DE9310C961E63319B6A2A6EDC594E39C8F27F8E9
+ F147C45F102F63B3D7F5092E1637694467E66F37680C318E84AB727EE86239C6
+ 2BF1EC47084F379528D4ABCB4DDA534BE27A276DBADEEFA6DDB5FE92C7F1A61F
+ 0796BC3574ED06B9629DA33B27A4E57BFB3535AC7ED38A4F4BDFEA0F8F536B5F
+ 197C49A95B8B78E5B3D2E392F63B2D38ED8E258A408CD23B7CD2B92EB8007CC5
+ 8632735D2FEDCBE35F0BF843E19783748B55B5D424D06CE0F0BDBD9CAB24915A
+ C7696F19BEB9640CBBAE2EAFE72A0B617659E093B881E77FB23FC4DD1BC5FF00
+ 107E1EEAD36AB258FD8D9F42D72E248CB4CD6DF673148601B5B6CF2412322CAC
+ 0B2C8C24C0C9C7B7FC1DFD9DB56FDA57E322DC2DE2D9BE9E2E352D4B53B895A1
+ 8749532B4B313804EC5927D8A88373BB8030CCC6B9711528652E9C310B961493
+ D36D755F8DB7DDDF5DCFA2CBF071CFE9E27349575154E2A4A6F5859AD23A2B3B
+ 6AAC95EEEDBBBBF0BFD8C7C47A1E8FF1266D6A4D3ED6D97C2FABC4A88C81E52C
+ 8825918B328DCECA768C6482BC161D3D0A2FDB1FC45F117F683F14EB9A1EB571
+ 7091AC8D24770D2C76D676CD8122C3B772A858E32A791B8B01DC9ACAFDA7BF67
+ 34F8551F883C41E19D52EE4B59AE16F648D2D1628EE642F88FCB50DB8839C9D9
+ B946D0431C063C0FC32F87CEDE32D3A6B0D4749B03E32568AF2D6CAECE70F912
+ C47E4231C92769DABFBB0096C915529E5798C6A669F15E3CA93D6D64A524EFAE
+ BADAC7933C2E7385AF83C052A49CA376E492519A937CB64ECA295E319464AFB6
+ 8DB57FDEDF830DA37C62FD80743FB7471EA9A78B5135B79D1FCA5AD642D17CA7
+ 190BE577C7423A60D7E42FEDAFE18BE87E306BD75E26F0CD86836F677B1C93EA
+ F3B869618EE1031645550422C6E11E30AFCB00BB8FCA3F43AFFF006FDF017C0E
+ D497E10D9C6BA6E8BE1BD3EDF48D2EF8294B4BEBB58C6761FA8B863B8E59957B
+ 7DFF0039FDBA7E05E83E24F0C6A9F143C63AE45A6E871DB456FE1E8EFA531C5A
+ D17DB2C924A9952D185DE500F99B76403B14D7E0BC1D8CAD94E6CE789A728D3A
+ D774F7BDA4D35CA969777D77B755A1F1B9152C461AB62238A4A9D3C4CDCA1CDA
+ ABC9A6972F4B26A525A34A37D1277F95349F809E05D4350D02E9B4FF00EC7D1E
+ 3B58AE6D208EF13ED57113ED45BC9631965462E4AA64B3B7FCF304AA7D27FB3F
+ FED191FC0F9BED1A2DBE8FA9DE59C526952417B6B14F682500399664F9774A1B
+ 780E1B8545504AE59BE4AF09FC3F5F897A36B3AEDEF8BAC61B18D25B1D397FB3
+ 96C67D5B02390C712E5A4D90A4887610CAA5D9C948C1917E85FD8FBE1F697F0A
+ B47B78758B8D3757920DB791186576B7791F7190CC0C64CA856271C9DAECF956
+ 6038FBECEE5ECA9AACEB4A538356567A7CDEADF57EBF23EE632A788A32A35E8A
+ 9526AED269393D2C9462F5DD26F9B44B46CFA0BC45F1CFC4DF10BC7D3DCF862F
+ 7C35A0EABE269C3C16D6CCDA7867CAC72DC16C7EEB7C9840C5BCD95BEE215CB2
+ 7B97ECFDF09BC49F053C35AD7893C62B0EA1AEDFCE1AE46A5771A45696EAE4B4
+ E654590C971B59B6EE2146146E5CB1AE6F4AF8CDA0FC5CD46CB57F06F836E340
+ BED0EFDAD9F55B8D422910C090334B33A92A998D048A8EC48419C94DD8ACB83C
+ 45F123F692F1469F6BFD9DACE9DE04B8BB3710EA86D5AE964850A98A78F707CE
+ 7702864405861C7CA430FC9B3A551E2270A538B5BCE76BBBBD6CAE93BAF257BA
+ 6D69667E699946BD7A2F032A74F0D4D24EA29B8FB44A3F0C6F16DBBA57B6EDDD
+ 592D0DFB9F106A7E13F002DAD86937DA66AFAD5DC927993DD092E24B16943307
+ 990111C9B4EDC70557230182679DF8B10697F0DB4EF0EEADA3EBF0D8470B416C
+ 2DEE55E46BA7C4610965567DA91C9364138DC403F2902BD87E34EAF6DF0E2C3C
+ 3DA7683E19B8BBF105CB1B3D161B49FCA9121099B9BA9B7ED5FDD8919B326F0C
+ EF8382E6BE6FF8D1A72DEFC57BED4349B7BE8FC3DA38367710DF42FE641E549C
+ 088B1C2169402A368119C295524AD79D91F2D5ADCD2768EAEFFCDD2DABBA5DAF
+ D53D4CF85E4B1B5635251F67097349ECF9F5E5517CCE4D2D945BFB4A493BA31A
+ FBF6B4D4743B5D0F46D72F21935067B8C3BDD279CE619FCDB694C9924C1955C8
+ 19DB96DB824E395FDA3FF6C0B8F8F9A559F8DE68E182CFC2FE5E9575A5D983C4
+ 311919CE30DE54AC5D8EE047CA7A12AB9E23FE0A3DAF787743BDD52F344B76D4
+ 35C874F8E251E7F9025B69654BF5B868970CA576889B1D5A29881962D5F36CDE
+ 21D4BC47E15D626D3F4E9ACED7C55A5379105C29682F67D8CB182E8AADB99B6E
+ 03321C90412C78FD8F21CA555C1AAF49F2AA8D7327657DF4EFB3BAF349F447EA
+ 595E539642853CD5D0E4A9AC92B6D195F9AC977DB64D592563E92D63FE0A1B73
+ A17ECF7E25F867A95AE97E21B6F1741A76DD53CB564BD831E7042383E61478DF
+ 0C011871F7B35F1DFC62F0858F83E38F5DF0BCB796D6D3A2CF2DAC80CEBB8618
+ 0DAE499070C4860578207DE02BC5EEBC63AB49F0FF00479AEA74FECDD6CCC504
+ F1AC211E36D87748A33FF2D38527030DEA05618F89137855E358E79AE166C9B8
+ 84CCB365D3259D36F2A19B248FBD9539209F9BF55C070FD4A4E2A13BA8DE36E8
+ D26DB5D97BDCD6F5EC78F5F38C0E170D2A983A3CB2A8D4E524ECF99A8ABADF46
+ 92D13D6C5ED43E242F88FC437505840AAB7B22DEC76E24DCF6AFD1A346621DD3
+ 6B1187CB8001DCDB72D95ACEA71FF6125CBDE69B2FF6BB931DB5D26E6898676B
+ B4CEB85C6EFBB9392A338F940C8D7D74DF16F8B3FB534386E6CE66952E24B58A
+ 11B6062082D198C07FBEAA48550719C7F091BDAEE8777E34B10D26917FA4EB4C
+ A5A786F2CDE1B6BC58C713AB3054818E183B711F420A720FD6AC353A4E3D175E
+ EBD7FCD1F173C7E2B308CD54BCA51568DBB5DBBDD59DF57A3F2B2D0E07507D39
+ 6E02CD14D1EA6B260A22A08994050BCE463A038DB81D70315EC1FB3D586A5F13
+ 65D1FC3F0EBBAC7FA45FFD960B4BA790470398C316F31639515888D8E36AED08
+ 4E48195F31D374BF0FCBA4DC5CB35E59DDD980E146E68CB8230D93C807D01C0D
+ A79E143687C33D36EB5FF10C96F6373AA5D48A0DCCB242CD1EC50AA54B05C854
+ 072493C77E3935BE37F7B4251574E3D5AD9F97FC39F3F97D1C650C5C3D954F8D
+ DBDD96B6FEF69BFCADE47E8E7C11FF0082445E7C71D4FF00B5B41F105C2DE585
+ B44634BD84DE599C47F3CB1CCED6EB108C8857060464DEC3636DF9BE88FD933F
+ E0977E1AFD93BC716FE30D6BC5773AF6A1A4CE2E21BCB1F0EDDC96AF211F2B46
+ 65DC9F20561E6391C28C0F994D7CC3FF0004F3F889F1C3C4BABCD0F83FC4563A
+ 85F030C51DBD9C2B088571E4840FF27CFB1882CCCED8DCC083B9ABF553E0F788
+ FC6FE0FF000B0F1078FBC497D7DF67B6778A04B74B7B67970005CA85F33BED0A
+ 36617767A67F98F8DB3ECCF0D39E0B15894E1256B46EA4D76DAF6D75DCFACE22
+ FED2C0D3555D683551690D1D6F7959FD99DAF6D1DE3A37E8784FEDBFFB40FC4D
+ F15782EED7C1F796B73E1E784A4EDF6D86DDA2CF0AF732C2AFF655248C6F743D
+ 33B4648FCA8F8AFF00113E20FC11B99163F16F8C23D66EC1BD4B7495ED74E8D0
+ 83E4CD1A46D9916563C4C400C08EA72C3EE5FDA8FF006BDF85E9F1A6EBC4971A
+ FDBF847C59A3B244B6D69A74E5B544DB8952E14908B048320ABA9DCAE3A82C6B
+ CC7E33F86BC2F7DA04FF00F08EF8834192FF004559FC4FA16913E9F26A26DF4F
+ 75696E7CB46841D8ABFBEC63CBC4733121BE693D7E0BA14F014214EA616CA76B
+ A941EBFF006F34EE969AAF3B9ED50C3D2C1E590A2BF73285AEE31D632767EFF2
+ BB396C949E8FDEF7538D9FCC3ABFC4EF1778C7C51A5E9BAA6AFA4DC47E28B433
+ 6FD69EE65F286D7258BA390DF72400B7CDBB0A029183F4F7877F66DF07FC1DF0
+ 2783F50D4B50D36D67F1269A9358EAAF6EEED7AEA5BCFDD322901A3719C49923
+ 042E7045678D2EE1BE18697278D0783B4FD16E90DC5A5C5BC31E8B0DCCD28015
+ F18116F460771587790A00C9271E7F3FED27F0F53CED1EDFC51ABC3A1E8BAA34
+ 125AEA16925C68F1C730F2CB99D543061B76B6C8B908194E3083D9C77B5C7C15
+ 2CB938C217E6505A4B74B54B75A68D5BBF75FA560F15428B8E2B198AE4AAF652
+ B594145FBB17AF2B735797BBCB14DAF7743BAF06FC69D2F5BF0C6A7E15D1FC61
+ 6DAEF87B54B91FDA1676FBB74AB1013195380C4A28DCD85CED19ED5E6E7F6A4F
+ 10FC3EB9D52EB58F166A1E2FD1B53DD6B1ADBDBA5C369F06465B61612A155DBB
+ 3024466F94360161E57F1B9AE3C39AFD9E8B79A247E15D1A671796B7EBAF4DFD
+ 8F3DBB81B674B9B69A517116D03125BE59880001B803E53AB7C50D03FE17D59E
+ 9BA7F86F44D7EC75BB98A1696FE4BA8ED679E4556132049237E0C8E54BE1886C
+ B479241FA7C9F83684A32938B9464AED3507A2B7DA5A26FCB5D2CEE7E7B9D71F
+ 54AAE1552846575EF24FDE9356BDADEF6896AF5B24D6C8F668BF696B5D53E285
+ B78A35F6BCF33C33728A2D229375A952DBA2931C248015CB8C866291B82CDBC5
+ 7A547FF0554F11FC6B173A2E8EC2E23FED5373A7C373712C16A6EE791D448F1C
+ 6C0B2A2B85CBB29201F953A0F95749D76E92EBC61AA6ADA6E8B7775A1C0B35A5
+ 9CB6E8C88F2234C1A21B766162567030142E38C300791B4D764D420B56D2EE92
+ CF5A55FED08E25B4836CA6460AC55D860B295183EEC7381B8FBD5B83F2EC4BE6
+ 9D25785945BD631D39B65D35D5EDAF91E2D6E30AD4EAF356519DD4B78DA57BB8
+ 269DF492B2695EFA5AF6763F7F3E1A7EC4BE07F8DFFB23CFE1DF8B1E26D2EFA4
+ 758E0D46EA09E08ED6D0F9684C08D3291C123279C30C039071F859FF00053AFD
+ 843C3FFB1A7ED097DA0F8575DB0F1368375BAE74ED46C66431905BE68DD58931
+ B46700B798C84F4009D83A2D1BF6CBF1EE8FE08D2F4F566D5164BE10EA3717F1
+ EEB7B352554AA30E22651B896E40273C65AB13E347EDD7AA584B63E1CD67C1DA
+ 6F8D13C2F77751C675B5BAB790457110C26F867DCEFC93967900E3CB63C3578D
+ C01C239FE438FA95235FDAD2A8E4DD34D45794926D25AD925749A773E3B8AE79
+ 4E2633AF8BC54A726A328DE9E94DCAD2704D5E4EDEF5ED68A69E8ED73E7DF08F
+ 8A0781EC756D36F6FE1BAB2D621FB35C402CC5C7927801D4928A8C324AB89370
+ 20E47CCC2B9BF107886D61B61F65B39230C5807B9B96964E801DA02AA818CE01
+ 07008F4AFA1AD3F6C1F833AD787A28B54FD9C6CEDF64423377A7788262140079
+ 549A22C0647199091CF24120F9EFC49F1AFC25F15DD48DA2786F54D00BA8F2E0
+ B9951914838243260E7A938E4E01E4F15FB3E0F30C43AAD56C24E1DDDE9B4FFF
+ 00019BFC51F9A62B2DC34A829D0C7539764D548CB5D74E685B7DACCF274F105C
+ 245F655B8BA6B50BB990C9B5656009FBA3A9E4609C8CF7E84576D0AE2FA0F3B2
+ AB19F9D80CF0C7F0C03D793C607E7BDAEF876DECDC1844C903C6C54E432B9C1C
+ 61D72AD9DBCF236E71D72473B0CB2189409E6127040FE120024F3EBD063A73D6
+ BE860EEAF0D0F9AA8A9C1F2E22EFD1FA7FC02DE9B7D7BE19D3EEE2B4B831C378
+ 822B8553B7CD1F37CA5BAE304823A104839158B13BDC3F96DE57248DF2B6D03F
+ FD59ABB14ACFBB2B23F1B8A91BBEA7B7E7F4AB1A6E8A7C4B7B15BD9C07701BC8
+ 56C46AB924B313F75400724F000C9AD22ED772FBCE4AD4D4DA8D1F922C7837C3
+ 11788750916FEF16C74FB34DF75388F72C63181C01824F4E7B9E32702A4F1D5D
+ 68FA8986DB47B75B78600104F330F32618E3785C853C0EA4924927072045E37D
+ 521445B2B0DEF670C859E7C61AEE6390CFEA07180A4F03D4E4D6046EDE791B64
+ DD272549C920FB63AE39CFBE7DE8A71727ED1BF45D3D599E2251A57A1049F77D
+ FC9792FC77D88538C28042E70DEB8CFF0085588912DA2661347BC9C2EC66DCBE
+ BD47F5FCE8D36391EE963126DDDC65BD3F8860F1D3B1EBD3BD7412786F43B1D3
+ 95A6D5249E76207911C52273DF2ECB83C8E0FA03C66B59492767F81CB4E9B92B
+ F6EEEDFF000E68EA76EB0EB49AC693E72B5C21B88D97E4314830CE839E76E719
+ 246E56071C80566F12FF006E6911DC490CBB92310A8DA76B90AAA1813F77E520
+ 6D0480589C74AEABE16D85BF8C34F9345F2628DAFCC6D6AEEEB1C0B70495504B
+ 02A19F76C66F95537649C8CAF2FABE87FD8D7B7F62C023C6B24851D9D1E36DEA
+ 0838390C3D1CFA02091CF9B1A9073F672DE3F91F47CB5634956A6FDD96EBB4AF
+ FAFE4FC89A331EA1A24932AC81E0FDD04E49DAD927239E857078E3F0151DAABE
+ B96A86DD8CD798509002584FB5700213925BA80A460F6C9C0ACB6BD8E2685556
+ 3B65CB8298664C7AF5273CE3F993CE264B15D31E39A175FB3DF1DF1AAB7CCADF
+ 36F049E060A83D0F0CA723A55285969F21D7AEA76F68B4B59DBA3E8C4B5BB651
+ 24D70B246AB2E0071B95CE3073D4123A11D70FD87077FC3BA95AD9DED94D1C86
+ 36B7911D0F0AAE73C7CC464633C81F364FE70DC78A61D734ABA866850C970C0B
+ B460326FCF0C41C83819F99707E72092B851E8FF00B3FF00FC13EFE397ED671D
+ 8DD7C3BF84BF103C67A76ADA88D2FF00B634DD0AE24D392E58A82935D951043B
+ 378DED2B2228625CAAE08A8D2956F7527E9FD7999FD63EA6D4A324D77F3DF7F2
+ 5BF4DCEA7E26EB8DA469DA4F8A23916487C696665B9B7CA6C926867744CE0F2C
+ 9B777CDD77E3001CD6D7ECBFFB23F8CBFE0A0FF18F44F86DE05B28F50F106A52
+ EF99A57096B6D6DBC79D7170F83B521243B617241215198AAB7D55FF0010EEFE
+ D7BA8FECB1A7F876E7E1098F59F0CF89E5BAB2B6FF0084BB4766BDB3BEB4513B
+ 826F0C69F67974FB71B4B06637C5977056F2FF00593FE0DDCFF824B6B1FF0004
+ DFFD9BB50D6BE246916765F187C69214D4D52E62BB6D22C226220B35963668C9
+ 63995CC6C558B2024F9631E664B93AE76EBA69536F7D3995ED14BFEDDB5DAD96
+ 97BA47A39F7154AAD1E5A6EEE492B5EEA2F7937E4DDDA5D5BB6CDB3A0FD89BFE
+ 087DFB35FF00C1327E167F6F78A2CBC3BE2AD7AC962B9D5BC5DE33117D8EDA60
+ C9B5E0827636F68AB27FAB7F9A61BF6999F35F6F782FC55A7F8E3C27A76B1A4B
+ 4CFA66A5025C5AB496D25B3346C32A7CB9155D723040650715F9CBFF000553FD
+ 8E7F68AFF828EFEDABF0EFC0D16813681FB32784755B1D4B5BD43FB5EC95BC41
+ 286DF34BE4ACE672224CC31C6F1280CCF265B2A13EE4FDAC65F1968BFB3178BA
+ 1F869A0DD6B7E31934C6B1D1AC6CAF6DEC658E49311095259DD22430AB1946E6
+ 19F2F0324815EC4B1338D2AB8954F48DD28A4D4A5CAAFB5B66DDA3A3BEAEF7BA
+ 5F33528C6A7B1A13ADCD3934DB725C9152D357D1ADE5B72A5B5ACCFC5DFF0082
+ 81FED03E0BFDA5BF69CF1F6A9E0D78A4B3D3F5B9B47B844850C734B0110CB28F
+ E168E678FCD073C8656EAE73C0788BF6044F82FE14B5F17693AB68B278896DE4
+ 92EF4EB6B779D2D5A5549B0EE1B11CEB1AA90BE85320679F1AB8F871E30FD88B
+ E296B5E05F8D1E1ABCF0CF89116C2E9ED2DE6B736BA85BCBE76271321746DC50
+ 02226C6E470CCADB80FBA3E03FEC33FB472F867C45F6EF8732D8786FC41A85BD
+ FE83736F776FF699F7B18889A1698BC2AD1884EF915422825B0381FCB39C6479
+ E51C4569E5D0949295E6A317252E67AC6C93B6ADD95AFA5BA1FDC797F1764BFD
+ 8996E06789843D9DACE7CA9BE54B95A9B77565ADE376DD9DD27AFC37FB38FECC
+ 371FB447ED93E13B7D4F5B934CD3FC65731DDEB2BFDA8B2496B621C7DA231861
+ E449B5768661B955E30707703F4B7FC1463E34683FB74F8A97C3F67AA59F8674
+ 8F0191169BA6EA1018618AD4BAC5E614236867DA8A8082CBE5BE061431F59FDB
+ 83FE096575FB2A7C1ED6FC7FE0FD275AD2359B88C3788354BB9A19AC6DD0EE47
+ 9D56D8B4B0AA248E4B80495545C135F9CDF08B49B9F896B6F69A05C78B3E24EA
+ 5A1DF436FA759E956B2DE97B8F30BC4A58A19A53B8F99B628F6C619F1B01C3B8
+ E031399E2E9E32B46A529D04A3084A9B8CA2E5BBE57D24AD18B76BA575D51F1B
+ 4A794567FDA381719D3B4D734E6ADCD76E4D2BFC528A4DA8C5B496BA4AE7B3F8
+ EBE1EF89F5AF1CDE78B24D41B50BEF1044FE1F92DADEF63B585ED07EE164B3C8
+ 668E23B630C6350BBD2423218D7A3783FE197C44D0BE2B4367E20459174D36ED
+ 74B14D1A196EA4B75842A8CF9877A46AE060011C6A4A290375FF00863FF0488F
+ DACA5F0AEAD7D0FC3BB4D0350F127953D96A91EA763FDA7A52131B7EED6E2E16
+ 4B73B5E418023914228DA8CA0D793EB3E13F889F072FAE2CAFFE1EF8A2DF5859
+ ACFCBD167D365864B3923B76887C877CAE4B490CF9254CD24818F9A222474E6D
+ 90E61429AA389B455B957341C6FB6CDB4B45A6977A6BD2FD5C3F9FE02BCE4F05
+ 28B51D65CB252B6BBB49E8B47DBE25B58FD20F8707E0BE8FE05FF8477C59E20F
+ B3DE5E5C0B4B5845B5CDCA5FBBC692AB08E2C322B98C798B32857C2E3682A077
+ 9E0BFDA0F47FD9BBE01D8DD5CD8D9E9B6B7B7E6CAC816226D52500A99C963F33
+ 48EA48191BBE73C05247CB3FF04C7FD913C75F1975E97E224B1C9AA5F68B23C3
+ 1A931C56BA7DCC31A44AA1988F32EA3006010C81972EEA7E53F56787FF00627F
+ 8ACBF19AC35AD4EFA4B8D23478C5AE9D0CBA4D8CB6F636BB0A3C291FDACB47BC
+ 24664745691CAA28668F721FCA730E07CCB10E34B0F87AB3A6936E71854B4DEA
+ 9A52517156765CDD93F53E43892793D3C4CF0F8CC5733BA9D48CE695A4AFEE45
+ 4637BBBC6EDDFAF2A5BBE7FF0067DF124DFB51FC531E28D7ADDEDF4782EFC9B2
+ 517077DC3A6F91230C08FDCAB6328A0E595379E76D7BD681F0B7C397FE2DD2FC
+ 1B0DAD9CDFDA2F26A9A85ABC71B2FD963903C8EF1920ED791922070701F1D171
+ 5CEF8AB58F86FF0002ED1754B8D3F42B1D5ECD440F1DA462D76B83F32AA31DB1
+ 05258E09F97730CE4927D1BF625F0936A7E1DD53E225ECCD75A878E3C916CC71
+ B2DB4EB70CB6F1461780A4B4B2E40049979E831BF84FC1F0CEF8B697347FD9B0
+ EBDA495B46E36518B6F7F79A6D3DD5F4B1F11C4F9A3961E598D08CA8D1494694
+ 35B7374B3BBBF2ABC9CBAB495B5D3E75FF0082FD7C498FC1FF00B32F86BC25A2
+ E9FA64DE24F10EA5E5D834D1295D36D92231CAEA369232244501793CF0718AFC
+ FBF805E19B3F147C13F125E68F6F0DC6BDE171677B7DE0E9F2B65AD402D65578
+ 06EDA76B47BBEE9CAB3C657271BBF4ABF6B9FD8CBC5FFB427C52F1178C354D3E
+ E1ACEC6D9B4DD1ACE0B849648ED9158799E5AB65FCC7632955FDE0002805B15F
+ 963E29F18B7ECD9E34F14788E6D2DAF2D6D6DEF63B9BDB7B82F189E360043B17
+ E68995CC8047212FB53E63BB2D5FA871A63F1D8FCD6BA8D09D29732E47284A1C
+ EA2D47ED25CCA496EAED5F4DAC7EADE1AD6C052E1D8E0F0D8852A91B4AA6CE31
+ 726E4D5FA597BB269A574DA7D4F8C7F6A0B1B2D712CE0F0CC826D345BC9E45B0
+ 8D95EDDCCB23B24C1C8CCACBB4C8470587191903C0747F15C36DE21B39F52864
+ 92D14859A251F3C898F99C70016CEEFF006867BE727EAFB5FF0082607ED09ACF
+ ECCDA97C6C8BE13EB16FF0B6F3487D78DEC9A85A2C91D82E5FED02D9A417663D
+ A4B8710E0A01201B30D5E71FB2DFEC11F157FE0A0DE32F1145F077C0371E346D
+ 0123BBBF5FB5DB58DBDA9900508D713BC51890BEE609BC330572AA36367F63CA
+ F2BAD422F075212724AFB7BD677BDFE77D7C99F19C45C4185C47FB5E1EAC5414
+ 9C6D7BC559AD3A77DB7D6D638AF0F493C7ACBE8F04B71E5DDCB1CB6FA8E9D906
+ 64C8DB83FC513A6004382180CE315F787C2BFD87F4DD4FE1F43E2EF8B7E24D4A
+ E921B78E646BBD6CC390146D4CF24ED1F7422FCBD88E95F137C63D0B54FD907E
+ 296AFF000DFC7DE18D6FC3BE28F0CDCA4173A44F2452340EE88FFBB21B6B2BE5
+ 5D5A3668E40C0A939F9BF57BC51FF06E9787B43FF8262F883E2C78F7C55E36D2
+ 3E2868FE0BBAF15BE8D6E6DFFB2F4C68AD8DCAD94D13C66696458D3CA76F3D54
+ 3162170086F1F37E1DCC730A0EB61EA3A54E0AF29249C9AB5ED1774F54BD3EF4
+ 4E078EB09974A387A9EFCEA34A293692D56AD2D346D59EFAE87C51F16FC33F03
+ FC6D6771268BA16BD7F74C44820B3BA78A19106774A77B06DA318CB6065BE55E
+ 06347F623D1EC5FE29A695E07F86FA978CA191A2B8BBD3B41D26E35F9D34E8E7
+ 093BCEE913B347207557C302031553B65746F2FF00D9E9553424D5AD6E3C4D35
+ 9ADE476C9222431432AB0F90FD8E448A39D848D1A3225C303B88236905BF733F
+ E08416F7DE0CF82DAC4961E1DBAD6B45BC68A1935DB3820844F73134CCE9BDA5
+ 8C5CAA09402F1C0A118940D2803CAF0F0981A52ACF2BC54EACA9B4EED73CDAB2
+ EAA2A56E9AB5F9DCFAFCF388AAE07012CF150A6EA68968A37BBD7DE766DDAFA2
+ 6DDEDF3F957E097C36F8F1F193F699F1278EB51F0C5DF87743F0EEA9247A7E85
+ 7366B66BE1F8849BEDFF00D0805977F96E08468CB303C9615F4A7C44F865F127
+ E33C9710EA5E3259E6B7B769AC6DECAE117CD9325706289E364607F876B48318
+ 38239F6DF1F7ED59F0CFE2AFC4D5B1D3F4E4F10788A6096DF67B9842ADB2A10C
+ 5E6127C8850B0C8C6F1819E00354BF6DAFF827B780F5DF815E28F1A5D5DDC785
+ F54F0CE8D3EAAB716BB20B5B510466562EAA037DD4605838C673CE307F0CFF00
+ 577159E66F899E5B053A1858BB4F9547DC8DF97496AE5349B5B5ECDFAF854F8C
+ 270C5612866749611C928C1BA5CF2576B5D64A566DD9B495E3B26D3BFE56FED3
+ 3FF04B2FECFD0F5882C3C49A6DD6ADA6DEF9DAA448F22DCDA60BFCF2453AC721
+ 8448E0F98030C01FDE52D8FE08FF00827C69BE0BD0F459B5EF8DBE15D3FC49E1
+ B7179A4C3A2E8AB7FA934CAEAF1219638CB8024D8A198C806EE9F28AEF2D7F68
+ BB5FDA64343A5EB1A9EA1F117E1F594ABA4DCDEDA4A97DE26B1119DB13830344
+ DF29656695D43C4D861F2B35733FB2D41F0A35AF8ABAB6A1AB7F697DA2FA0906
+ A3E1895C4773A7C91C6F296B5BC42F1CCA72628E16955E528DB8A07515F570C7
+ 66B87C2495594BDCD6DCB172BBD2DAEC9AEAD25D1BB9FA6C7034256A755B94EC
+ F9BD9C53BA86BEEAB72B52B68ED1693945D9C5DF63E35F8823F0E7C25BAF01F8
+ AFE227C3CD5B4BFB4092479A5BCBF486E970F23C77115BCB89A55386F2596312
+ 9F98798095F91FC63F0B63F15E977B79E0B6F04EB7676B379329B2D491750B27
+ 900E1A0B98C5C48A491F342920070A18312B5E9DFB5DFEC63717BF13752D4BC3
+ DAC6BDE3CD134F78174A82186396755B9567F282DB86893CAC0575521D1CE18E
+ EFBBE01A37ECF3F1C753F135F37867E0FF00C50D62682DA5C59E9BE15D4AE8C6
+ CEBE5098C71C6E5D50312A5DB1BF0092722BEB384B2EA53A77C155BCE5AB8DAC
+ 9B7E4ACDBB2DED656EA8F95F113190708F3C1415D4B9D24A6D492E67651F7356
+ 959B76EAEF76739F13AF6EBE21E8F69A3EA5757979A3E9EF2992F27B8695AE2E
+ D0FCD2C7E6ED31AA6D8D563501596221816FBBCDF8F7E0DF8DBE1DAF81ED6E34
+ 16D7ADF52923B9F09DE5840D770F8922497CB8E3B664C93345248166B760AE8C
+ E03A8CA6DFB23E1A7FC1107F6BDF18E9BA16A5AF7C11F136ADE1DB8B612C3667
+ C6BA5689AAD8C522EECC46794BDB4C4365A2B881FE62C1D41AFD0BFF008233FF
+ 00C10F7C5DFB28FC7AD43C55F111B50B8F03697245AEF847C37E2336336A5A36
+ B6D1BC2F7320B29A7B56921B76310B88DD0CC5831863F292BF56CAF2AC547150
+ C3568B8C2EDBF75DBADED2B6927B5A4927B2D95BF08A9C44B0B4675A351546D5
+ 96AAFE4A493DAF67A79DED765CFF00825AFF00C1B71E05F84BE0CD2FC63F1F34
+ E5F1DF8DEE6E1B53B6F0F5E4CEFA5684B222AAC171106D979304322B89034004
+ AD184708B237E82FECADE31F845AC783F54D07E0C7FC21EBE17F086A3269D710
+ 7852CE28347B4BB602796289A0516EEE0CA0C8222C55D887C3E457807FC16D34
+ AFDA43E24FECD50FC3FF00D9D7C1977AE5EF8D1A7B5F12EB306B761A6C9A569E
+ 23C34111B99E26F36E0B6CF3103044470705D587AC7FC134BF63AB3FD82BF620
+ F00FC32B758DAFF43D3965D5A6403375A84D996E5CB02777EF19954924EC4419
+ E2BEEB0DCAB9E14E3CB08592D35937ADD77492B37AB6DAD92D7E2332AD3C4423
+ 8AC454E6A951B765B452D35ED7BFBABB5DB6DDCFC89FF83BB3E26F87FC53F1DF
+ E19F85BC3ED630F8FBC1FA4DCEA3A95CC5FF001F135BCECA60B572A46E58FCB9
+ 2528F9C2DCE5061DC8F58FF821F7FC1BE5E0FD4BE11683F18BF686F07E9BAE78
+ 93C4502EA1A4F846EF74BA5585BBB0922B8BBB76F96699D704432064447C3067
+ 388FF3E3FE0A9FFB2A7C7FF07FFC1452DFE387C7EF05DD781BC37F11BC6A069F
+ 772EAB69A9A456B1BA08EC9DAD269426CB342A0385DF870A1B040FE943F6B2F8
+ 7FE20F89DFB20FC45F0BF80EEA1D37C4DAF784F50D37419F708A382E65B59238
+ 3E6C6106E651BB1F28E7B579B80A3ECF0D531D28F3546DB4ADAC5DB9B97D7DE8
+ A4ED7BA6ED767AD99632715432DA351C69DAD295EF196B66D3EC9F37324D68E2
+ 9BB687CFFE1EFF0082CF7ECF7E0CFDBA745FD95F4E875ED0BC40B1A695A3CF1E
+ 822CFC3BE722ED8EC2DDF2ADF7576A3243F673B42AC84E01F847FE0EBCFF0082
+ 49FC35B1FD9866FDA1FC0DE13D23C2BE32D0758863F12FF64DB0B483C4305E4E
+ 50CF3C7180AD72B712A933603BAC8E1CBED8F6FC7FFB07F827F6A2F869FB57FC
+ 1CF0BFC75F823F14350F0CF82BC7FA2D9E97E31D6FC2FA821F0CE35086151FDA
+ 2D11866B566D88BB9CA8DF18470B803F653FE0E4D6DBFF000458F8D586F2CF93
+ A500D9C60FF6BD962A7DA62A796AC463629558CFE28BBC64AF069ABFBCAEA4D3
+ 4F6EF2F89F2C70F85A798D3A1859B9539A8A716B58C9B7169FD995B4945AEBD1
+ 6CBF971FD84BF636F15FEDBDFB61F84FE12F84526B2D53C51A8086E6E0AEF8F4
+ FB64064B8B99532032C51066C646701472C057F5ADF17BE307C16FF82177FC13
+ DB4FBCBDB1B9D1BE1DF8020B7D274FD3749B68E4BFD52E257C6D8D19A3592E25
+ 7324AECCCB93E63B11C9AF8C7FE0D4FF00F825DB7ECC3FB375E7C74F1858EDF1
+ EFC5AB7034BF357F79A7E865C491E0FADCB8598E46762C3EE2BF337FE0EA0FF8
+ 29F4FF00B69FED9CFF000CFC33752C9F0EFE0ECD2E9F11507C9D53553F2DDDD7
+ 6DCA857C88C9C82124753B65CD7B38CAB2A14E18487C72D64FB5B7FF00C053B6
+ BB4E4EE9A47914692AF5675DDFD9C2EA2BD76DB4F79AE9F65369DDEBF48FFC16
+ B7FE0B57F0E7FE0ADDFB235B7C33F857E09D42555BDB5F116A3E21F14359407C
+ 3D146D18CDBAC134FB666F39A393CC68D910B054903978FF001C742F00CD1DD4
+ D6FF006CD1E14883457125DDC80A84617F81B736083C441B3804063B48E1349B
+ BBAF0CEA29756722ADC461880143A83D3956C860719C1CE7F315EAFF000EB56F
+ 0D7C5A0DA4DF5A3E93E21BA458A168232F14EEA46C540580472A1B2AFB8617E5
+ 21B0A7C0C4C6AD173AB7BC64EEECB55A2577E564BF33ECF27784AEA187B7B3A8
+ AF6BB7696ADA49F4776717AC6836BA434D1ADFC77B0AA1FDF42A4A2F5C84DFB5
+ B049C60A820E4F15C95EDAADE4CBF2E70D85F982201DB2DD304E718C7F41E95E
+ 25F82573637FB4EA7A3E9E230E1A3BEBC6B7962C28243C4CA25DD82B82130DEA
+ 7A5725ADE87A4E8DB95B5E875268810BF63B690C65F20804C814E39271B41C64
+ 1E781D985C4C64BDD7CDF27FA6879D9B65B5694B96A45452EED2FCDDCE762764
+ 5544CAB4BF2B9032BB4F1CFBFD3D477AAFF6E9514ED1B94B676E3E438C1E9F95
+ 5BBFBF8C906DD5A48CB166331DCCDCF7239E9B7D0641EBD6AAC57370ECCC0AFC
+ C70C3E500E73D7B77C7B6457A313E7AA3B3B5FEE35B45D7BFB3248DD7E6824F9
+ 2442BBF27E9D7A6475CF2D8EF5EE5AD689FF000BEBC1579E3BD26307C43E1B85
+ 53C6760A034D736EC44516B985E70CC521B9EE9318E52C7ED0C53E7DB08CADC6
+ F51E71E5519940518EF93FD7FF00AD5DAFC19F8A9AF7C18F88DA4F89B4268FED
+ D6AC51ADE4816E2DEE21911A396DA68581592096132249191B5918A918C1AF37
+ 30C2CA71F6947E35B5F67DD3F27DFA3B3D6D67EA65B8EF66F92AEB076BF95B67
+ F2BEDD536BA999342B77A7487CC41796E4BA9E91C8411D3DC0C1C0EBCF39E2A1
+ D16F64BAB1FECDBCDAD1CC4C88A390AC14761D0951F8607BD7AB7ED0DF0B744B
+ ED03FE163FC395963F05EAF32AEA7A3492B4B79E0BBC66E6DA42D977B667DDE4
+ 4E7248011C991097F60FF82067C0AD13F693FF0082BEFC0DF0E789ACE1BED29B
+ 579F569E13FEAEE5EC2C6EAFA24718C32F9B6884AE704718EB4F2DAD4B1718B6
+ DC537677DE2FAA6BBAFB9E8D369A675671ED70777CB7928DD5B69ADD34FCFEFE
+ 8D269A3F5ABFE0831FF06D17857E1CFC3DD1FE2EFED13E1FB6F1378AB5EB44B9
+ D23C15AA4024D3741B770763DEC0D95B8B9646CF952031C5BC82AD2731FAC7FC
+ 1467FE0EAAF833FB0E7C47BAF87FF0F7C2D79F183C49E1EB85B3D55EC7514D2F
+ 43D30A8915E04BAF2E669668D910148E1F2B0E479A191907B37FC1C75FB60788
+ BF632FF8255F8D75BF08DD5C69FE24F13DCDBF866CEF60768E6B15B92C66951D
+ 4828E208E50AC082ACC08E40AFE4FF00C1BAFC77771A7DAE9FE1CD2F56D56E67
+ 8E0B70B1CF35C4F2310AAA22DE159D99B0176B7240C1CD746231552AD67430D1
+ B462D2B2DDC9A565F735776BB6F4B5ACFCBC0E0E97B3557193D5DDABDEC95F5B
+ 5B6D6F65A256D6F7B9FD28FF00C10BBFE0B2DFB45FFC1577E3D6B16FE21F0BFC
+ 29D17E1BF846C0DC6B77BA5697A825EFDA65DCB6B6B1BC97B246198869198A37
+ C9130C296561EFFF00F05CDFF82B843FF04A0FD9AB4CD5B458741D57E2478BB5
+ 05B3F0EE97AB24B25ABC51957BBB89562747289190A30EA4C9347D406AECBFE0
+ 92FF00B15D9FFC1367F605D07C3FE225F0FE93E246B57D7FC657B6B0C369691D
+ DBAEF94165555F2E08C2C7BDBA888B1FBC6BF9C0FF0082C27EDFBA7FFC150BF6
+ CFF1578F1B50BE87C2BE1F2DA27856D0B334706990B7170632061A772D2BE4A9
+ 5122AE5BCBC9CF34AEE87261A2FDE5F135AECF5D7CDFBABBA4DAD50B0F4E1889
+ 4F154D7B8BE14D5AFDB4F4BC9A77E91EC7F433FF00043AFDBB7E2DFF00C146BF
+ 654D4BE267C50D03C19E1EB7BBD665D3F408F40B5BAB7FB5DBC002CB3C8279E6
+ EB29645DADFF002C9B3D463E41FF0082E8FF00C1C83F113FE09CBFB695BFC25F
+ 84FE1BF879E22934FD1AD6E75A9FC416777752417D725DE38144175005516FE4
+ B92D924CC3A62BED0FF8211FC48F87DE3EFF0082597C21B5F87BA9697796DE1D
+ D0A0D3759B5B5995A5D375455DD771CC992D1BB4CCF200D82C92230CAB027E73
+ FF00828CFF00C1B9FF00B3BFC59F1E7C46FDA0FE237C58F8A1E17D5AE566D62F
+ B50BAD634B8B47D3D973E502B2596FF293F7712A8943955450FB8EE3D59C29D0
+ 9FB9F0534DB77DF9636FBA5ACBE4BB9CD93CE8D577ACAEE6D24ADB5E57FBE2BD
+ DDB5BDFA58FCF1FD8DFE37FC45FF0082EE7FC159FC1F67F10ACF4BB8D3F4EB83
+ ABEBF1E9C92C561676165E5332450C8D2F948F22C30121F2ED2A9766216BF677
+ FE0AFBFF000504D53F616F83BE1DB6F07C56B79F103C71A8B5A69169222C927D
+ 9A05125D4B1A370F22AB4688B86CBCC9856E95F287FC1A79FB1F37813F668F16
+ 7C6ED734AFB1F883E256A32E9BA54926D67FEC9B599CEE1FC4BE65CB4A194939
+ 16D11AFB4BF6A2FF0082787C19FF008291789BC31E31F115F5F6B49E1969B4D5
+ 9343D5D3EC9A84515C9171672B2872A04D1491C9E4B4726432337CA02F9D8ECA
+ EB52CBD60F03EE4E6D4A72BBBA7369C9DF7BA564D68EFCD677B1F4D4F3AC255C
+ E957CCBDFC3D1BC631515AA845A51B68BE256ECD2575AB676FFB20F8E75AFDA1
+ FF00624F04EBBE3FD2E35D63C55E1C8E5D5ED2EAD822DC799190C6488A80BE62
+ 618A6D006F2300715E7DFB06FF00C1377C01FB2EF8A35EF88F69E1BD1ECFC65E
+ 332270D0D8C70AE816AEAACD696C14B796ACFB99F6B7CC768FBA8A0797FF00C1
+ 64FF00E0A87E0BFD8A3F67CD77E1CF85758D2EE7E296ADA5358D8E85A74F1F9F
+ A05A3222B5CCA8A7F7216290794A7058B29552AAE46CFF00C112BFE0A3BE1DFD
+ B4FF00654D0742D53C59A0DFFC52F0CDB4969ACE991DCEDBB9A28A42A972B148
+ 16465F2CC6AEC1480F9C9F9949F3A34E9D5CFF00EB3464AF4E94A1AF572927FF
+ 0092A8D9D9FDB92FE6B4E230B8C8E4F3C55B9615AA737224F48C6ED4BB28F334
+ 969BA8BED7F20F84BFF05F1F107C69FF0082B158FC19D2FC0BA0D8FC2FD4277D
+ 374FD56F2F5FFB6B5A9369297F6CAA4C46D9B1B84782C625794C8A47935ADFF0
+ 72637FC215FB3C7C3AF1959EB379A2EA9A778A4E9A1A1799A39E29EC6E9BE78A
+ 3652ECB24318460432195B6B2EF24FBC7C0DFF008256FECE7FB06FC57D77E316
+ 89A0693E19D42D6CE7924D5352B88A3B4D060605AE24495C298C14E1A495D885
+ 07900B6EF96758FDB3BFE1EDFF00F0565F06FC37F8653E91AF7C0CF843E66B1E
+ 2DD5A5B2B7B98F58BA01C2AC1E7C6C4C5B923B7F323C164B99CEED8CA58C660E
+ AE332EA597E339655A724DED68A4D36FAEC949A696AE4A29591EA6558AC26173
+ 9FED5CB632587A116DB7BC9F2CB4ED795D46D7D6CE5ADEE7DADFB037C241FB27
+ FEC33E13D3F5BB8BBFB658E91FDADAC4D7912C570B2BA79B2091474741853924
+ E53924F3563F64EFDA1353F8DBE30F13477935E5C59DAC16F35B32E9A61B11BA
+ 49C318662A0C8A4AECC312C0C0C4852707D23E2569DA0FC45D3EEBC11A86B0B6
+ 7A96B562F7515BDB5E245A8A4514918373121C922395A2F98AB206640C086C17
+ 68DE1EF0F7C14F0CDE4D125AD84323B5DDEDCB2C713DDCC47CD2C8542A976C64
+ 9C01D4F1CD72E6585C651CDB0F8B8D55472FC3D39732E6B294ACE294B4B72C12
+ 4D3BEF7EA782F31A389C3E2278A8BA98AAD24D3B6DAA936B46FDEBB564D595B7
+ 4CF87BFE0A4FFB0EF88FF69DFDB03C3ABE18BDB14D2EFEDECA2F12C62E89BBB0
+ 8DA668C5CAC38C1431A9CF3C98B91B49AFB9756D574AF837E04B1B7861F26CAC
+ 628B4FB1B6890B121536A46AAA33C2AF6ECA6BC47F658D7BC37F16BF697F1C78
+ A9EEBC377BE2CB5B78EDE16D36F1E4922D3E46F963906E292ED30A0F3506DC92
+ 07535E73FB54FEDDBE1EF1A7C7B4F863E1DF145BDBC7A4DDDADBEB1AAD85E107
+ 4F9649963994B2FCAC23470AD86F9646C1C796CA7F3FFED9780E1FC567396DA3
+ 571B564A8B692B294DC63397946F29B6D5B549AEFF00738CC0E699CE230BC3D2
+ 4E50C2534E5A356528C5BEAF992D145A49B5B2B9F61F82F5DB8F11F866DEFAEA
+ DD6D659B79D81B70DA18856FF81280DDFAF53D6BF2DBE387ECC1F0E7F6C3FDB3
+ AEBC336B7967237C6213EAC93D83F96F2E96B204BF49071F7E35F3109527CC70
+ 727048FD4AD73C316BE23F065D68DE75C5BD9DF59B59F996F262448D9366518E
+ 70769E0F3EB5F15F833E1EFC0FFF00827B7FC1433C296BAB7C50B93E28F1B784
+ A7D0344D3BC47A85BB7F65451DCDB18218D912310ACF8648FCDF9A5781D55DDC
+ 915F659B70EE33158DCB2955AB7A341DE7376E6A938C6F156FEF4A3795BF99D9
+ 6975E0F096751C050C754C3397B69C1A8C5276E5DDB6D5EDCBA4B5B6916AFA8E
+ FF0083813F6BBB3FD8A7FE0983E2BB1D2DACED35DF88107FC211A0DB65516317
+ 31324CE0646163B659704701CC63B8A9BFE0829FB1FDA7EC17FF0004C0F0BC9A
+ D456BA76BDE2EB66F19F88E72A13C9F3E30F1239C023CAB5588303901C484706
+ BD6BF6D9FF008262FC2DFF008283F8EBE1DEB1F13ADF5AD62CFE1BDCDD5D59E8
+ B15E0874DD4DE71103F6A40A6470A6252046F1E72CAFBD495AF9B3FE0E7EFDB4
+ 24FD92BFE097BAFF0087745B88EDFC4BF16A43E12B354237C164F1B35F4DB704
+ EC16EA62247DD37287238AFB3A952787857C44B59D4718C7C92D93FF0014DF33
+ EC96EFA7CA5354EBD3C3E0A95D463CD29FAEDA7F860B6D9B7B5D1F913FB0C7C4
+ 8F0AFF00C1627FE0E628FC6DE38D4AC2CBC33A97882EB5DD234BBD710FF6B45A
+ 742A9A5D96D6243C8560B79244E4388A40076AFE9464F8D9F0EFE24FC58F137C
+ 216D7F41D63C5DA6E8B1DFEBBE1BF304B3C16173BA35332740AE382A79DAE848
+ 01D0B7F387FF0006F9FF00C1BD7F0B7FE0AA1F00BC61E3DF891E3EF17693368D
+ AE7F635A68BE15BBB3B7BAB555852469EE5A7827CAC9E61545089FEA9CEE6CED
+ 5FD93FF82797FC112FF678FF00822CEADE31F891E1DF107890DC5DE946DB51F1
+ 078D75AB410E8DA7AB896501E286DE28E36648D9DE50C4794B8651B81F4BD842
+ 8E1E9E16AE908C5B7D79B9A374DF4D7DDE6FEEADAE7973AF3AD5E78885F99C92
+ 4B6E5E5766975D3DE4B677B6F1491F8C5FF0538FF82716B9FB0EFF00C14D74AF
+ 861E0D5B8BEF0CF8D96DAE3C0F6AB733095EDA7B878C69E5B9679239F7A6E663
+ 959226382E40FE8525BFB1FF0082797EC042E2FA5FED15F86DE16066703E6D4E
+ F12219C0E3E69AE0F0A31CC8001D057E70AFFC1447E06FFC141FFE0E1EF8591D
+ 978834B9BC27F09F45BFB1D0359BA9523B1F126BF2B0544B767601914BE21703
+ F79344366E0D196FD5FF008CDF05F4BF8E5E1EB3D2F57B8BE86D2CAF52F825B9
+ 8F134888EA81C488EACAACE1C0C7DF443DB07E5BEA55A865756AE5F152AD3525
+ 06DDB44DC61EF3BD9FDA7DFDD6CFB8CC33C96231185C2666E5EC69F2CA6BBB69
+ 7368BADAE93FB2E52563E20FF827A7C14D2343F8A56BF6AF115D6A377AA4D3EB
+ 1ABBDDDA1B7B7D42E66DB2456D1390033AC9F696755621D00C8209AFBE2FEF34
+ 5F18BEADE1DB892CF506FB3795A8D8B112621995976C8BE8EBBB83D457C13FB3
+ 5FFC1243C1FAD78DFC6F0DD7C51F1678B3C23E1BD7C5AE8F650DE5BB18D96DE2
+ 69C5CC82229215919A102354DA60704EECAA7DB1E07F859E13FD9FB46BC9F4E8
+ EC743D2E38116567F2ADE0823418059805FCDC9C76C64E7E0380726CE327A1F5
+ 6AB469CA8D49CA752AB9ABB8F2D925149AD1A5AB972A8DD5AFA9F41E2566397E
+ 618F8E2B0F899D4ADCB1F77D9F228B6D492BE8DBB3B59415AC9293495FF2BFF6
+ 96FF00821E7C33F82BF17350F136ACB7DA8F822C6E7FB592D237375736D116F9
+ 55A238DCA982BBC960026E6030734BC2FF001A75DF899E07D7ED7E077C1DD193
+ 41F05EF4B7B43A558AC8B232922FE48515239DB6A318A3450199B2CCFC8AF51F
+ DBFF00F6F1F843F1E7E26DF68FFDA1E28D323F06DA91A7F8C747DCF6B713B92A
+ D0848C34B2C7BF0018D09728DB580CB0E2FF00662F861E3ED1ECF49D6750D5FC
+ 3FE17D1758636BA7DD5E698BA4F882FA28EDD37DD4FF00649585A848E1DE2369
+ 2598BCAE262C6404FE1DC5915F5FAD1A755D4A7CFCB4A32727169BBA5149FBFD
+ AF7BDACFADCFD8B27C5558E5547119E534F136BC5548C9476BDDA83BCE528277
+ BD9C5E8E2ACDCB8BFD80FF00E0971E3AFF00828DFC46D63C71F1E6F7C5165F0B
+ F4FBF6B7B6F0FCF7A239BC4132129711489192208D5D02968997F8D1307322FD
+ A9FB657FC14B3E0AFF00C1207C0DA5FC3DF0BF82750D7BC491DB99349F017817
+ 4A4DD6AB26F659AE4A0D96D1C92E72E43CAE5D9C47261C8FABFC6FE2287E10FC
+ 23D6B586DB243E1BD2AE2F9CCBC093C989A462DB47F115249033C935FCB47ED6
+ DFB5678DFE2B45AC59FC42F887E28D7ACFC4DA8C37F7B0C56D30B75824BA98C8
+ 2049A68CB607946389822B8F2F2CAB0C58FE989D459150A195E5F4E2A6D2E769
+ 35E575A3BEB7B27B24FABB9F94E16854E31C6E2735CC24E1429B7C905F0A6EF2
+ 5156B5925BB493D56C958FD1BFD9E7FE0E22FDA43F6CAFDB6F40F867E09F827E
+ 1DF0B69FE22BAFB14D1EB5A3EA7A85C786DA3561712DCDCA4D6F1C91A14673FB
+ 985973E5E1997737EB2FED35FB40691FB2BFC00F157C40D7A3B9B9B0F0BE9D25
+ EB5B5A465EE2FA455F920897BBC8FB5067805B2480091F9BFF00F06C17FC13CA
+ 6F82DF06759F8DBE28D26FB4BF1178F0B58E8765751BC3F62D32361BA65864CB
+ 234F2A12092731C7195C0720FA5FEDA5FF00053DF0E597FC141BC3DF0726FF00
+ 842B5CF06E970F93AF3BEAA64D4EDF5991D3C98E0B68D183BC2846E5DE24C4F2
+ 9DA04596E8E2ACFABE47904F17CBED2BD9B8C568DE97B6BFCA937EAF95EB63E6
+ 69E494331CEFEA581A77A54BE2E5D1CB95DA566DEEDDA0AFD75EA627FC11E3FE
+ 0AC9F1D7FE0A31FB42EB9A0F89FC3BF0D746F0AF83EC5EE75B974ED36FA1BD12
+ 4A40B3890C977222B37CECE194F111008278F58FF82E07FC14F75CFF008262FE
+ CE7A0EB9E0FB1F0CEA9E34F14EAE34ED36D35D8A796D1D421DE7643246ECDBDA
+ 10006030CC7B5765FF0004DEF873A5FC3EB9F88576FE14D07C1BAFF8A3575BB5
+ B5B049637BBB18A18D6391FCD446661349704ED5D8BE628EA6B0FF00E0A3BFF0
+ 45FF00873FF0540F887E19F10FC40F187C4ED2FF00E112B27B4D3F4DD0351B3B
+ 7B146790BBCEC935ACAC653F2A93BB1B5146DFBD9DB21CD6AE6F90E171B8492E
+ 6A918CA4D34EDAF34A375A5D7C0FB7C8E5CDE9E5986CFEAC5D3E5A11F863BBF8
+ 52576B4BDFDE6D68DAB2B5CFE77BFE0A9FFF00056FF8E1FF00053F83C1DA3FC4
+ 4B5F0C687A4F87637D4E1D0B45B192CED65B9CC919B97F3E59A56658CE01F33C
+ BDB9C282C777DB3FF049BFF83A6AFBE0278334DF847F1E3C27E23F145AF8574D
+ 30E97E27D25A26D59A3454F26CEEADA674491957CC027132B6C488323B1794FE
+ 7FFF00C143BF649B7F87DFF0501F1D785FE14EA137C44F09E872C567A5EAD134
+ 77934F0A5AA7988D2420248C8C6546650013192029C81F38F8B344D7BC3DF1AD
+ 2E356D0750D2EE2DEE945DDADDD9C96B2471E46F0E8D865F94630DC60F1C035D
+ 596E68DC24A138B738F33574DF374EBD365E5A6DA1E8E759252E58C952928A9A
+ 51D1ABC1FA6D7DE4B5B3DFDE573FA16F1EFF00C1D57F0F7E3C78C7C09F0FBE15
+ F807C631EA5E3AF1369DA2EA1A9F8B22B4B5B6D26D66BC82396448E09E7F3A43
+ 1B48A03346118ABFCF8D87F4CBF6BFFD963C3DFB69FC04D4BE1C78B3CC6F0DEB
+ 77BA7DC6A30A286FB5C36B7D05DB4073D165F23CB63D42B9239C57F203FB2FFC
+ 3AF10783FF006A5F01EB379A3DE3695E17F1969D77A8CFE50C5BC76F7B1F98C3
+ 907E4E41DA0E3383815FD9D789BC57A6782FC2DA86B9AB6A167A6E8FA55AC97B
+ 797B73288EDED608D4BBCAEE78545505893C00335EF61AB52A98555A524ED26D
+ BBAB24941ABF92777AEFADF43E1F1D83AF86C5AA5C8E3A2B68EEDDDDDAEFD169
+ B69DF5F85BFE0E08FF0082975BFF00C132FF0060BBBB3F0A5D43A7FC48F1F452
+ 787BC216D6C0249A7A88F13DEA2290556DE2202150712C908C6338FE50078135
+ CD4F4E5BA9B4FD76458C6F37096AE5501E58963C679E793EFDB1F75FFC165FFE
+ 0A0BAD7EDB9FB65DE7C43B5BEBFD3FC3335A7D93C0D2A3B45F63B08A471D08CC
+ 73C92A486420F0E4264A2827E0AD5F57BFD4B5D92EAEAF2F2F6E26752B24D397
+ 959771E18939E4F7FAF35E2613153C54E589FE6DAFBD937656E8F76EFADDB5D0
+ FA7C465B4B2FA50C356BB9593695AD76AE9DF5BE964ADA595D6AD99A35458645
+ 8E458E6E3E666F9829C74C607E5CF07F0A923BD91E392449211F4EA7B1191DF6
+ 920F51CE3BF25C69CFA5DE3C72F98975093E647246CAEB8C1C953F88A7DE58FD
+ 8A0FB55BC40C7700A962CAC7390C3839E38EFD771E4E2BD3F72E78F18D55A35B
+ 6E7B0FC13F17683F1A6C60F02FC42BA874DBE90793E1AF14DCB858EC26C90B67
+ 7CE7EF5A48F8C4BD606393FBA2FB7CC3E287C38D63E13F8E75BF0BF89B4EBDD2
+ F5CD1EEDEDAEAD263E5985D08243863C8DA78E41C3A1C91C5548618F55D2E36F
+ F9785203445BEFAED1C83D30463AF4C7D0D7B636A30FED49F0C6CBC3F732347F
+ 10BC1BA528D06F8FFACF1368D0AAC874C76FE2B8B5405ED8E096811E0C9F2ED9
+ 1BC9D7075FDAC7F852F89748BFE65FDD7F696DF6B4B4AFED623DA6370D184ECE
+ 715EECBAC95BE17DDAFB2DBBEBCAF78DBE7A92C6181F74ACACDB8AF07AF3C96E
+ A327391CF453D320D30AF9B6A1F6798918FDE2AAFF000F193951EFD4F4E73D71
+ 4ED4AD65D3E25467659641F7837DE8C81819CF4E4F033D47D0476F6D2CB75B41
+ 2D242CC764877062081839E0F38CFE3ED5EFF99F2BCAD3E5B0EB6B2B8D42D919
+ 9D961E634F35B6A83C160B938E32BDFB8FC37344D0B4B8EF3CCD475F8E05539D
+ B696CF71329040DABCAAE7B6436DDA0F3F773CED92488DBB633328392C9BB200
+ 38C67E847F8F4AB514A3CA08CB210CFB94EEC1C90769C9E79F97D01C7B711522
+ DE89DBEEFD6E6D87A908BBB8DDF9DFF468F5BF87DF13743F035FB2E8B71AFC6B
+ 730FD96EE7B9489A1BA8DB21A19ADB2CB2C6C17A19063008E457D37FF04ABF89
+ 3E1DFD8FFF00E0A1BF08FE35594D1AF85B40D565875AB18C48DF63B7BCB59ECE
+ E258C9FBEF1473BC8611B890802348785F8A744B0D3E4B88E3BB9ADE3EACCCA5
+ 9B23191F281F37391C91D07CC7209E9A4D53C3FE1D82D4699FDAED23324B35CD
+ C32C676A851B963524282F9182EDBB1DB823C88D3F618855E95DBBABA7AA924F
+ 67FD5D743EC2388A78CC14B0B8C4946CD2717CB28B7A7BBBFCD75EB7B23FB0FF
+ 00F828E7EC33E13FF82AC7EC49ABFC3ABDD716C2CFC451DBEABA0F88AC916F06
+ 9F729892DEEE350CA258D9495203AEF8E56019490C3F3AFF00E08D1FF06ABDCF
+ EC5FFB46DAFC54F8E9E24F07F8CB5AF0ADD7DA3C31A1F87D279B4F82E176986F
+ E79678E2669636DE52111955608FE6310147E747EC45FF000719FC50FF00827E
+ F81B44F09F857533E2AF08E9F14AADA57896092FE289E458FE680878E5856164
+ 6021495627F3598A8762D5D87ED27FF0747FED71FB40FC24BAD1F40D43E1FF00
+ 82ADAEADBCDD4356F0268B790EA769048AF0B4524B7934FE41F9D584D6E15D5B
+ CBDB32B065AF4E8E2E9D29BC4528B8C9F7EFB27DAF6D9EF6B3B292497CAE232A
+ ACE3F56752338AD6F17D1ABB56DED7DD6AAF7D6CDB7F787FC1D3DFF0589D3FE0
+ 87C27BAFD9C7C03ABDBDCF8DBC6100FF0084CA5B770EDA1E94C01FB23107E59A
+ E8100AF2560DC4A8F351ABF9DDF0EEB10E8BADAB347E5C255559411B9577024A
+ 9C11D882181E0E0F19ACBD73C4975E22F17DEEAFAA6A17BAB6A9A95CBDD5E5F5
+ F4E66BAB9772CCCF2339DD248E496624E589249CD5A7D56DF50BB79AE638A3B5
+ 92E0865898461475C0CE7BFB67AE71CD71BA2F99CE7AB96EFF0024BC96B6F36D
+ F53BB0F5A9A82A70D395E89F57D5B7E7A5D76B2BB48EDBE217C17F127C3EF03C
+ 5E32D3ED45FF0081F52996117D6D1B4B0DAB9C1F29C9C9887A07C64A9037EDC9
+ F74FF826ABC5FB46F8A359FD9D752B0B9D4340F8E32C1A7E932450866F0F6B91
+ B1FB16A880E02A46772CEAA54C96EF3283B82E7CBFF66BFDA8FC45FB276BEB75
+ A15F5AEA7A2EB513A6A1E1CD6AD16E34CD6A16DCB245345964941008F982E703
+ B62BF57FFE0D92F815F043E37FFC145BC4DF14BC25049E17D53C2DE1F7BBB5F0
+ 5DC5DC77B6F6B777121865BDB194E2530246E53CB914B426E1009640DB53CDC3
+ 61EAE2B16B038F85E17E68D48FF73DF4A4B78C972E925CD17D6CF47E963BD9E1
+ 70D3C560B476B4E126B472F76F17A7345DD371F8A2ACF548FD5FFDB1FE2EF877
+ FE091BFF0004ADD5EF74354B5B5F875E1883C3FE1B84E419EF0C6B6B699EA726
+ 42AEE79E03927A9AFE47F5BD5E7F115DB5D5E497D7D70ECD2CB7170499245958
+ CAC492770EAE4F39CB06193935FB39FF000752FEDCDE1BF8F9F137C2DF017C3D
+ E2BD367B1F044D2EABE256866125B45AB323C305B49229F965B742E5D73C7DA7
+ 070F1FCBF8A3AF4573E1CD6EF2D6786686EAD4496D388F69F2A48E4C15C649DA
+ 31B4740477F97036AB8AFAE636A556EEF65F7BBBF9C9BDB46944E8CAB02F0797
+ 41CB693D7ABE964FD12BEBAEAF53A8F0DDDDCE85ABC722CDB3CC40E8F1B8238F
+ 97AE380CA48C139276AE060E3D37C24743F13F8C2C66D73C40DE07B7D424DFA3
+ 78BA2B495A3D3AEA3C011DE7D941B84F2F691F68863964FB8EC85242EBE59E18
+ B1F3ECA59A76863B5B3787CF50373BC6CF8054676FCA42100007E76E76938F46
+ F827F15BFE155F86BC55A0F89BC2D1F8CFC1179095D5AC635916785E065F2F52
+ B19C2916F790AB004B031CB139495581565F0F1F46E9CA1AC969A593F95F4BF6
+ 4F47B3B2775F64AB4E786E5846CB57AABE9D6F74F4D1ED67A3B35D7A2FDA0FC5
+ 5F152EF538ECBC75E3CBEF899A7F4B1D4A7F112F8974FBC5E3FD4DF49248E372
+ FCDB19D645C85645C003F77BFE0D78FD93DBE0DFEC3B7DF10F52D1F4DD2B56F8
+ A1A8BDC5AADB452A30D36DD9A380B798EC72EFE7370172BE59C1C035F857FB3F
+ F87B4DF1F7C48D17C3DA2DED8DBE93E2575B7975BBBB3821B4D36C99CF9B7B32
+ B0D91B451972ECC4B2367963B73FD367EDB7F1EFC27FF04EFF00D85CE9BA3DEA
+ E8B71068F1F873C236764913DD2B08D204961898AAB081089589217E5009CB28
+ 3D99255A397E02BE36B454541595972B7D5FBAB693D22BBDDAB1F0B9B623158D
+ AF4B2CA0DA5369778B49AB59FF002A7EF34B4564EF6DFF0033BF6E9FF828A7C3
+ EF8CFF00F051BD5E2D79748FEC3F0A6AD0F86ACF55BA862BA8ED2CE0320BA995
+ A457585CDC12CADE5B02ABC83F29AB9FB53788BC75E03874B874BF8ECDE199BC
+ 4F66469D73633EFB3D5493263ECF791A0B9D3F1115E3CBC994ED41B0865F99BE
+ 057EC9DF0F7C2D773789B50BCF1EDDDC4825B701343B6736B2AA099BECD9B965
+ C98F713218C796464E4B051E91E2BD7BF66DD67C331EB1AD78F357BB8ED6691C
+ F87EC26315C5AB2855CDC3CF22BC8E430CB4408F9C01C28AFE75CDFD962B3458
+ CA1CD51DDB9FB9CD793D744F45ABEB74BA58FEB0A39253C0E5B4B0B8B872A8AE
+ 449414A2EDF0DE524F964D2E69349C64AFADDC59C6F89FF63A3F1BBC0D7DE2BB
+ 49AF342F885E1A9D4F8C6D6EAF65D5BED0892EC6D40CF25E34EC0385690AC2A9
+ 9C382AB9AFAABFE09A7FB3F5BAF897EC7A7F8921D534B59639AE8B4090BEAED9
+ 2EC176C60BC4A0FCA6472CBD463383E61FB2E7ED8FF0AAE75D87C44975A8685A
+ 9787C882DEED641399ED8AB225B5E44FB16E23F2C6D1206DD82108D8014FA47C
+ 2BE2DF831A7EBD6FE25F0CF85F54D0F52D5A497CEFEC4D425B19205639599626
+ 2F0C6A41CEC5720F3B576F27E5F8BB1F98D4C34F095F9A2BA5E3A2EB6EF64B6D
+ 5B5F7331CC256C255A185A739B9C7DDA892924F46D3BC92B68DA9A7CFADA4AE9
+ 49FBC78E3FE09FF7DFB5578AE5D3B5AD5A4D0FC0EB72D35CDA5B1592EF52DCDB
+ 99FCC2BF2649DAA5B255400000AB5DB6B9FB1D7ECA7FB137C3EFED1D7BE1C781
+ EDF4F8A71752EA1AA787CEBB762544C99D99A39A44C08C7CC02A03B40C12A2BC
+ 9FE017FC14D3C19F0C7F693D37C15E2E5D4B498FC604DAE9FAE6A97B3342251B
+ 3CB8D96576F251CE54B8214B95EC7757A77FC141BFE096B1FEDE5F143C23AFFF
+ 00C2C5D63C136BA35A4BA66AF6B61A4DADD4FAAD9C8C494867946EB5721E4566
+ DB223065CC676E4FECDE11E493A1C254F11975384F11524D49D457518A76D93B
+ DB952764D3F7AFAD923F03CFB1D99E1B1D4729CFF11530F848C79A2A9AB735D6
+ EF95BBC9BD2F2BB5A6891E83FB1A786BE00F8CFC3CDF12BE09F833C0BA5DB6B6
+ B2D81D7346F09268B717F1AC80BA1730452C91EF5073CA12B919C5781FED79FF
+ 000518FD837C69F12B52F07FC66BAF877E36F147806EAE2C1B4FF10780EE35C7
+ D3EE03AA4D0C0F259C8858BA286113104A0CFDDE3D7FF6A2F8FBE13FD817F670
+ B5F08F856E347D33C489A51D3BC27A3BCAA644211912E1E3CEE78D1816638F9D
+ 8632092C3F10FC7BF02FE06FC0DF05DFEA9E2A853C59E33D491AE750BA93593F
+ 68B8767CBB3089C6773B12448F9279209EBF75C4DC77432AC4432EA51F6952DA
+ A8C6F66F6B5DA515BB69B6F55E670F0BF87D88CEE9D4CCE6E50A4E4D45CE4949
+ A57BDDD9DECACAE95AF7EC7C21FB53FC2BF0EF8F7F69AF885AFF0080F468BC23
+ E01D6359BDBBD0745BEBA10CB6367249F242546E48F0873E586F907CB960B5E7
+ 565E10F2EFECEC646916E37AC278DBB19480B20C6704E48623BE18B12735E85E
+ 31D5FED5A8DE4DA4DA5AC7E1F9A6027B685F72956C3ED6F333B1B3BB6B3606E5
+ E32319E27C4BE13B8F06F8A66B3B5BC92E2D65649E093242CD0B8CC6CC33F2BE
+ 18161C80723B135D384C55674D4272B69A27BE8BAEFA9EC56C96187ABCF4E9DD
+ 5F577D1DDF4F237BC3DE1CD43C01ACE9B243965FB4054882908EFD186DE55836
+ 4823071D0E0633F71FC06F84BA9F80FE00F84FC3BE27B36FB0EB1A5CFF00E9D1
+ DF7D8648E39672C54CA432B81E6CAE4306202B6002C09F95BF67DD0B47F89971
+ 6D63AA7DAA185A2958CB6B179D29B9457932500058B9181D08CF626BF45B5CF0
+ 3D97883F668F0B595F358E8FF11BC077163646D2190B5AEAF6AF119209E290E3
+ 025510B46C0F3993054E457E63C759B5483A5877D65ABB6DA3517A74BBD7B5D5
+ D1FB1707E574A8CD62A17B4AD1495DB49D9C9DBB6895F5DDEC8FB57E04FC7AF0
+ A7ECC1FB3869567A3DACD24DA7DACD0E9D692AAC6632F860B2479DE18B44C598
+ 96276392C32056BFC59F1D6A97BF0A741D335EB7BDB7B8BC92D44D3DE221927B
+ B9A3926D9B3AAB65D17073B491B54A9AFCEEFD9EFE24FF00C2D7F88BA7E89E28
+ 9AF344B395A1369A9DCDB2C11E9FFBF48FCE3075656958679070EDC03D3F4B7E
+ 0C7C2083C51FB446ABE2BBDD7AEAEFC27E039459F8734FB82C22B3B96895657F
+ DE0264544DAB1BE41C9E80A803F9A389B25A795D6756BB6E6F9A6DEF76F4493D
+ BA9C1C4194E57955478E6DCA5EFD46DA95DBBA508C5EC9B7277BAD15E5ADA29C
+ 3F00FF00E09B3E1DD12C1B54F112DC5FEAD7523DE6E965F3E6677F9BCC6381F3
+ 1247007CBD031182383F8C5ACF84FC2DFB5369F71E30D723F1069567047A643E
+ 1C1A5DFD9FD932E56DE289628F6995A68FE40A70C031FE04CFA37EDADAADF691
+ 736B67E19FB74DE24BC8636B5782EA555D350F981A47C301B9872198924AF0A5
+ 82D64F827E0DF8FBC35677DE2FF11CDA8789FC6565646D7404BADD731E90CF18
+ 492653B7890AA80F31CC8C309B846190F0E5B9ABA6A38DAF36EABF855ED24F4B
+ 72E8D257DDE9A27B9F3983CC31D529ACDB1F8A4FDAA708C1C9424B9ACAF17693
+ 8C7BC972BD1DAEB7FBA7C3BAE68DF1C3E18F9D198EFB47D7AD24B79D14B80CAC
+ 0A489921587F10C900F7E2BE0BF86BFF000446D6BC2DFB456AB777BABFC3DB3F
+ 877198D348B8D1B467B7F12416EBB1BC9595F70B57CF9A1A6825CB960FB13EE0
+ DCF05E83E20F8277C7E23683F162EAF3FB6ED74FB61A04965E5D8CB04202BAB2
+ C84A3CD86520C62395D436D6C3E4796FC64FF82EBF8FBC05E3587C3F69A0F842
+ E3EDD74D1C37A96F3C73080E42388BCD941638258E595381F3751FD6981F10B8
+ 7B3AA74679B5172C4C209B51B38BEBA3E649A6D7C32B5AEE2F46EFF1B94F0B67
+ B849D6A7C37888CA8CACA5CC9C7965DAD382BCA3769492D6CE492695BEB7FF00
+ 82837ED95E17FF0082637EC8CB79A5E96BF6D8608B43F0A685610640709B23C2
+ 01858618D4B1CE14840B905857F3BBF166E2F3C517175E24D6B58B5D17C59A9D
+ E3DF35CC323DD6A53F992B4ACB2411C9F66F359DF0D3B755C6771DEEDF457ED2
+ 1FB51AFED63E3CD4358F1C437DAF5FEA25A6D0B4BD43503240E7326025B424A9
+ 9A2452AA8485DD26D6C1CA9CDF067C0BF0F7ED33F15E5D27C02F3DE789A4D525
+ B6D4AC754D3E2B95BC52AB19120906D11C688CFD09DFE437C857E5E3CFB8DA78
+ BAFF005DC54254E114DEAB9925BEAF55EF7DA76B5D28DFDDB9F75C2BC174726C
+ 34A9D4942A4DABCAF2715749BE9CB2B475DA517AB77573E8AFD8EBE2F58FED63
+ FB3BDE7847E2578DCEA260D3AEACA0D5FC637E2DE5D56365FF005A5448C9318D
+ 95C00B203B630DF28615F3E7ED5DF0B74EF0FF0086B4FD4345D0FF00B5EDF45D
+ 5C58B4B65115911523290194E199A2911248D97380263C8239C6FF0082876AFF
+ 000FFE09FED156BF0B34226DF4CF87FA6DB584E34DBD5B4B53AC7939660ECADB
+ 1566255B24BE3CC521CF15EB1F03FE3CF83B5AF86ADA2FC54B8D52DEF3C84BCB
+ BD3EDECDD26D51A09012239B3B4A6F558DC9C9C2B700119FCA29E031197CA19C
+ 60A33F655A5CCA9A56B277D528F7566D5924ECB6DBF4CC8FEAB5B0F3861E7CFE
+ D1537C918DF95B4AED2B7C576F4E6E976E2EE97C5BF1EBE02DC7C258356B7862
+ B4D634DD66F9A06D3AE1FCDBD5B7313481E2E3F75242C8AFBC1CF1F76489D91B
+ C1BC65E10D53C297FA7CD35F7DB348FB3ABC0F759B88ED607055300BFEEC4677
+ C6C9160A346EA0F209FB87E23FC309BE3A78435EB4D1A65D26FA3B89355D318C
+ BB36CE3E608CC4EEC32A95CF27EAC011E23A7E870DC7C1364D496DF55BA5BA68
+ 2CC5BABB4099D8465B6F28B2167C2FF175203301FAC70FF1449E1AF51A94AFCB
+ 25D6D25A3ED7E9F2D763C8E30F0DAAD3CC7EA9828C9AE4E7E6BDECD6AE364EFD
+ DBDD6BA6ED9E3FFB70F83B4CB4FDA3FC5DA6DA35D5BEA90EA523DCDBCEEB716D
+ 233EC6536C40263C6F6430C842FCA0AC841D8B83E33FDA73E3178DBE0EAF8275
+ 8F8A3F12753F04E9E96D6B6FE1CBBF115F5C6949140418635B5793C94F2FCB05
+ 5557E40A3681815DA7EDDDE0E7F0FF00C7DD5AFB5A8D63D4FC55676FAEACD072
+ 18DF40B721318395CCABC8E4609E4115E6A63FF84874D5B993CBFED0899E3BB9
+ 95D7FD2E2EAAE467692187CC0E430DA4FCF923F48CA31B7C052945DE2E31BFAD
+ 97DFAFDCCFC0388B237471D528D67FBC4DEDD7BFA3B6BE6BD0EC3C15ABDE6A7F
+ B24F8856DEEB7DEF83BC4165A818E68D25B7974DD451EDAE84B1C8AD13AC3730
+ 58150E30AD7921192C71E07AD5DCD78AD3C765682E3925AD64E118820FC99FBF
+ C2901480A718190057B47C1192CB4A7F156937824587C4BE1CBBB10AC9B91FCA
+ F2AED1547F78CD690E08395DD9618E9E4FADF86E4D1B5692DA369ADEE9021923
+ 68FEA41E304E7E620E3770B815DF95CA11AD521D5BE65E8D6BF8A7F79E3E6984
+ C4BA34DB6DAB592BDED6D96ABB6CAFB15AF34ABCD72C6DCACD35E42210909C95
+ 2888D8DA47451B9B8C12BB9880726B3345BADB7F358CD1F930DF47E50504010E
+ C52C8E7249041032460E378E735A526A97DA358DC58C2DB619A41728485558A4
+ 233F2F236F1B436DE0A9008E01A8EFEE17C52D2CD1C6D1DE726609C2CA7246F4
+ 18F94119054F19E471C27B69C96FF09E4D4E4934D36A6B74F67D2C632C124054
+ A32C7FBC21D0B052BDB8CF0793C907B64ED1D36343F11CDA66A5A2EA70DD5D5B
+ DDE96C6E6196DE4292ACD149E62BA3F1B59721B83901410738CBA3B13AD7868A
+ C9B629D49DC517609576AF040C0CE4E41C739E78EB427D3DAE66920455924402
+ 4C1016263C0DA381F2FCA31D00F5E325F3467752FE913528D4A4A3386CECD7A9
+ D6FC59893C5B059F8A6C6DAC6C1754BB2D7B6F6EC21586F32A64F2F8DB1C6D80
+ E83808240A721735E6FA8C0C9F28FF004A8E4E8D12B6D909F9BA1008FE2233D8
+ F4EB5D0F827C426EE76D36E7CAB7B3BC4224F39CB471C84131B918CE3713BB19
+ E1F1D7ABAF749375A0DEB5BAADC342C3779B2E122E41F946006DC36939C0E87B
+ 9155875EC17B296CB6F4E8AFE471E3B9712FEB10FB5BAFEF2DDA5E7B9CDEAD79
+ 6E97734763712496AAA76B302BB8807B37A9C77EFC0CF1547CC678D4C7E58231
+ 8552C30738CF3FFEAC76A5793E5DA03A85072A40CF07D7FCF23A56C7853C2175
+ E35BD863B76B7F986D2D3CE90AC600DA0973DBAFCA012429C03824766915791E
+ 5C632A92B47AF4FF0021FE12D32EB5ED4BC963B63D8CF3B84CAC08A3966C2921
+ 4020F1F873573C55AAC2F7EB63A6C8ED69663CA0CC163339C8CBB0E3696F9B83
+ C81C1E7249E309ED341B21A569B76B74EC556FAE2118495D48C2039F9947CC7A
+ 72D839C600E5DE560C6551F3337CC42F19E7DAB08C7DA3F69D3A2FD4EF956542
+ 0E8ADEFEF3FD17A75F3F23426B8921CB43E5EE382370E7AF419FC3914EB0D5E6
+ B1771248D26E5F955FE6F2BFA739F6F7EB4DB697C9844D71E6ED7E4395E3BFE7
+ 9C63FC9AB4F7F6F2C457C889B68DBE630F9B3D87A74FD07E143ECD5CD634E325
+ CEAA72F96BFA1A1A55DD86BB15AC77B2D9C855195A49810C8DD73B94798C7900
+ 027667938C5771E13FD96AF3E24EA3E4E83A8E9A64922DC12E6F55564C6780E0
+ 018F5C8C75E70467CBEF249238B71B7F2F70E4B31C7392319E4E323E99EBCD6B
+ 787B48D43515516723DBA339844F24C2D6239C2EDF31885E4738049E3818E6B9
+ B114EB38B7427CAFCD5D7E68EAC1CF0AA6A38AA5ED3D1F2BE9B5D3FC51EF03FE
+ 098DF1BE1D3247D2FC2DA26B8B6E8663F64F10583DC20C641589A6566C9C6155
+ 4B6474ED597A4FECC9F143C0DAA347E28F00789348B0D2EEE17BA7BDD3A5584A
+ 9210FEF176871F777796FBBEF60A9C0AE1AF752D6BC0D0472DD788AFDA39C968
+ 5ACFCE68E72490CA1C8453F370719191D7D3E93FF82727ED1BA5F877E3D69F6B
+ E3AF125FCBE09D7ADCE87AC1492392686CA5943B131380255F30B1640A58297C
+ 062581F91CCF119C617075311274EAF2A6D28C27193B6E95E7257B5EDA2D6C7D
+ 96594F24AF8C8C29FB6A3EB284D25D2F68A935B68AEDAEDB9C6788FE1C6B57FA
+ BEB778DA243059E8B1A8B7BC91A65B88F20110191D10C9F7B004C9BC28CB004E
+ 4735AB6836FF0013755BAD583C76B78D3486F209D8AF9B1B02C262C43F218F24
+ 127046782C6BFA12D6FF0065EFD9960FD9A6FB57D175A4F106870C313A4E97EB
+ 752431310FE4C302EC546619C065C8272738C57E437C6DFD9BFC49F137C55ABE
+ B3E19F0FEB5E19D1AEF5169ACC5E168DBEC98E1CFF00CB4607616C2839050918
+ C9AFCCF84FC4EA19AD7AB0E474BD9351E6968BA69AEADBDDAE87E994385E8669
+ 41ACBD54938F373A9C791CE4B54E1DB9534ACF57D77478269F60BE08F847A0C9
+ 75A1C8DAD6A17E8B7594122DCD923CEE58AF2DF3B49B430C0C6483CF3D26AFF0
+ ABC476FF0017AD56D74DD47C3FA5EBD6D6917997B15C2C2D8863490A0C6650A3
+ 729F2C31C6E4073851DB78EBE0278A3C0C66D1EE3529E4D72C552E22B43217B9
+ 44503CC45898B2C321F95828182AAC43061B1F57C53F07ED7E1D5D35C78C2695
+ 9B56BC4363776F24BF686906090E586C98C6E0C6D8990EF427691B40FA679D50
+ 97EF69D45273E6B5AEEF7B3564F4B24B4F467653E1DC4D1A5183A4D461CBABB2
+ 5A5D3F7977D7CF5EE677ECFDF0DBFE153F8EA6D2743F0A5C78D341B868D351B2
+ F11D87D94CE5086F37C8512790C1B6EC0E5C009F3A956915FD1B59FD90A44BED
+ 46D6CFC6F7BE1FDB3C579159EAEAE6FA28264553144613F656D9C8CE2232153B
+ 541C2575FA97ECDBE1D9F4D78ED2F1F4992EAD610DA95AD846DF6C7CF98EE0B2
+ 9F2A50C40655DAA76E70A4B13EE9F057C0FE0AF879A3DD59EB1AB5C78A343BED
+ 2BFB3365F5A2ACD66DE5922E62B80C42B8917EE70A41208C139FCEB3AE327097
+ B7C3CDB93DD72B6E56B6B7778DFCB4E97D923F40CA7C3DC3D0A5CD9A61E52838
+ AB28FAEB15E76D536FAD9356B989F0BF57FF008666F873AF7876D0F88BC49A1E
+ BCA0DF5A4CD0EA96D6BB32A2E6230A958A55725830938018820361B9EF851E0C
+ F08FC6081FC61AA6A9AD69BAD4332E93AED8D8DA496367AD5BCE1842CF124888
+ 8046A607319518485B6B192694789DA7C6BF11781BC7ECBA0AF8DEC740D4ADFC
+ 9FB649A7B411C937EF08686E943346A7746032724A82C0AB7CB8FF0008FF0068
+ 6F1449E24D5357F176B56FA840D682D750B6D6A599D7534F3508802248D2EE57
+ 50C244646462A7CCEA1AE8E4788853A988A73B4E5CADBEAEFA5AC93D7BDBAD99
+ 39F47071C453587728D28CDC54E3149371514DBBB4ADCAAD0B349AB59E8ADF43
+ 7C26FF00825569F77E35BAD2F4FF0019C97DA841AA2C5268A6C7CB58E2E70D71
+ 3823E4D85788DC060F9CF0A4FE94F853C2FE19FD89FE1BD9DF5C69BA459EB171
+ 68563FF4132CD0AA6D55DB1AE0A8EA5C96186C28CF41F27FEC57AFC5F1ABC55A
+ 0DCDC787758B3D6B49B58A1D2B56FED08ACEFCC6A10209E45531BC4029645920
+ F3571B0BE1411F587C54FDB1349FD9C1665F1D78F3417BA876C2EFFF0008FACD
+ 72D08EA4481D4160492ABE59E78E776F1F907186231999632397622B3A8D7D85
+ 6BBF2F756BD3CFB9F17C5187AF0C4432FC3C2F06B9E508DD4A69EAACD4656875
+ B4A2ACFF000FCFBFDBC7F6E2BA97C703C69A3E917FE0DF11D9DF244BAB369CB7
+ 9348C2208A633728D146CC0393E480C038C101727E49F8B1FF000532F8F17B6B
+ 656BA5FC68F8ADA259DAAC97172961E2CD42CE66792577669424C9C9695CED50
+ A4AEDEBB548FD20FDA23FE0A1FF077E36AE8E74EB8D2EDEF239898E7D434E92D
+ 6EEF235323B5C3C8228E288976C285768D9E506575F2C85FCABFDA9ED3C1975E
+ 2ABE9FC3D0D9C2B2080C460B562B3CA598BC9E67DAA644DC083F7428DA028055
+ 99FF0067F0DA53A118529E1E54A71564F7D3B5EC9DBAAD5AB9CDC458E86272D8
+ AFAAAA4A094796579C928EBF14AEDF92B2B2B6C8E1759D6F54F156B179E22BAF
+ 1A6A1AE78975BB96BEBEBFD4267B9D46F5CEDC33CD2967E7058976E32A09639A
+ E87C09E29B996ED6FF0049D3FC3D2EB56D6E6E5A0D52CC5CBEA0EBF348C809C3
+ 6D5C3888282E39C4854B9F35B9D026D42E24B896EA09A56667782227CD94E172
+ 40DB83D73C10318C8E49AE9FC1BA7E9B6B64D71F68BA8A6660FA6C236CD97DC7
+ E70F9C47C71B32598A2F1C73FA7E2A94542F2777E9F8696BA3C4C97369A92C3D
+ 35C91EDCD75A754A4F47E9AEA959AD084EA12FC49D41F4FF00B4689A65E5D4AB
+ 2BC51C2208EEE420EDC6010CA0EE20310064FCAAB9024B3F8697AB3341A82E66
+ 8D65719611FCDFC44B9002923DC8C8C639F96C6A3E089BC4BAEADD5CC0B677B7
+ 170903DD194451B4F8C8663D159F0DF3F085B2F9C8247BDFC21D034FF1B6A127
+ 873C531C63582F2464DD432C2CB72AC548C654EFDCA382CB96CE7AE0F066199C
+ 70D4AF0DBAA5BAF4F23DCCAF24C562712A5885AC9FBAE575CCBA68DBB3FC373C
+ 97C07A75BF81A1D4A6B15BA586FF004D9DA16CB2496F3B1568DB283248642783
+ CA800735F50F807C73AF6BFF00053C2D6B2DBDADD8D734DFB3A5B5E010B5BC91
+ 79A9198E62DB951BCC79046C76AF984023843D5FC3EFD843C403C1971E2AB9F0
+ FDEDD780EDF5786C75530C852491563F388888201DCA581CFCAB84E40C57A2FC
+ 12FD995BC69E028FC0FA5DBCD79E2282E22BBD15ADE3293DC090193CC00B118D
+ AFF3AF440E01006E23F3FCF33EA156317CBCCEFBEF7566BF3B5EDDBC99FA665F
+ 95D1C255755D58A8415A4934942D2D53EAAC9DDDF64F5D8A7FB0AFC29BEF88BE
+ 23D06E7C616D6F24DE1ABE68516E1EDE47BEB584992E984672CED1A30938F989
+ D9C8DD83F5B681E2ED7345BE83E14E99A846EB7170F6F6F786275B69802CBB12
+ 4072AA523258E490BB81CF1B7C4FC2DFB38EA9F0B3C50FAE5AD8DE5ACBA3D85E
+ DEA456AE3CB4BA3B52E158A82C8E56280A127A2C47AF15EF1F01FC3BA2F8B3E2
+ 15D3EB57D7971A85C29BBB3B6BCB60B1DBC6EB6FE639392AE5CB0D9C0DC637C0
+ DDB4D7E3DC538AA588AD3C449DE315F0DBE195DF4F27AFA9E5F1356A3514F132
+ 92AB4A11F7124A4D495F964ED7DAF777B2D1EBB1ED5F09BE1EDF6BFF001AB5AF
+ 12DEE8F602CECAE7FB3F4B5B7B959BFB45D0F9726A0E1DB38555F2D5092530DC
+ 31F9AB8DFDA2FF006A2D7BC4DAF6B5E03F0DE8D63E27B5788DADE5C426E21449
+ 7700E86486404AA1CAB005198F00A8C355CF0CF8875EB5B2F10EAF6F07DA61D0
+ 2D3FB3CE2716735EC4541DFF00681F7555242E4B0253729CE7E64DE1E30D27F6
+ 59F84B7DAF6B5A4C32DDDD18D6DD9EE5241AC4A6256115AE0BB79480ED24A8FB
+ AC70C7E66FCCB0EE50AADC61CF34945453D12F7757D7AAFBD743F208D250C72A
+ B569AAF52D085282935695959EFCD7574F4B26DB77B45F2F987FC3326B9E3AF0
+ 66A9E1BF05E956E97765E443797F7F7EB149765A4FF499816014ED0AA804602C
+ 6AA51061B2DF39FED1DF0CB4DF81892CDADFEE6F219162B816EB04B2B1B66695
+ 5DA20FF3A1730905BE5936919DA595FD7B57F8E7AE7C5FF8AAFAC6870789B4BB
+ ABA2BA769DA7C51C334619F191F2A0CC4A06FF0024066998A33945011FC57F69
+ 0F825E24F104BA8DAF8C4EB1A3BEACC550EA10B5ADDDC44B302CEA8EAA7C800B
+ 12C380AA795E187E8991DE0A0EAB719735E724EE9DFA5ADA35E5277D6C958FD4
+ F87E9E6145CA8E367049AE654DB7CF29B4AF793934E37DDA564EFDAE7CE1E2FF
+ 001D78374BF09E87AE59DEC8DE2CB1BF96F74B864B65961D2A37BA49A6B90889
+ B66B8390A7CC27928163465594FD51FF0004CD83C1FF00B31DE5E6BD0EB171E2
+ 6F8ADF102F45B0FED08BC93650C85669AE443B54C50E5F903EF3140768071F3F
+ E99F0DFC2FE17F1A69F6BA5C10EA1A86E69ACB4FB6D423B78DD248D94477385D
+ FE544C485500C924AA4ECC119E2FF67FF19EB3F07BE3A5AC9A0DBCDE34D42C75
+ 5F2E7D5A62AB9B4C7FA44698C2A8E485259F782C5402EAA3EEB35C22CCB2EAB8
+ 5A152495AED49A5CCAF78C5BE914D26D5FDE6DE8F535CC32585683A589A5ACDF
+ D9BA57ECEFEF34FE1D15ADA3693B1F4AF8D3FE08DB73F14BE3AE93AF41F62F10
+ E99AD6B4F35DCB7CAC1ADD5A66173700A9FDE79DBE4262607798D892006CFC69
+ FB60EA3E15BBFDA77C45A759DC6AD2687A7CF7767A43C251A2CAB968F2776EF9
+ E489724E0286909DD9DA7F73B4B92FFC53FB22788B51B79574ED6B50D1AE4BC9
+ 0821ED6768DCFCA060AB00E02E31D01070735F807FB457C299B5ED76C7C352DC
+ CDA6AE977F3C515CDD586F8B554699A624382C4B00F851C1DC5B93FC3E7F85F9
+ EE2F33C4CFFB4EB3B518F245796B795BAEC92B6E9B6CF98C9F39CC2B61F1AE95
+ 184B9651835CAB59295D49ED1BF48B6ACACECAED1DFF00EC8BFB475A690D6B0F
+ 88751874BD4E191590DDA48A046318055B696903AB72C472080BC1C7AAFC7FF1
+ 77C39D0748D27C0BE05D3E1D3F4AD16279351D5674DB35C4CD92EC10FCC91460
+ 3AA0203333B3903F76ABF3DFED75F07B54F851A147A1A471CDE246B8B68646DB
+ B19645557DE790102C6141662577A8191C8ADEFD8E3E0BEB9FB427C59D4175AD
+ 520B8935536DA3696C6DD42DF4F712B83E51DA1648E1B486F27925382A523396
+ 0E01FBAAD91E0ABDF38A351C61ABE5BE8ED6B4ACADA6AED73F5BCA78B2781C6D
+ 2FED98CA6E9C13F69197BADC9349D45F69C74BD9B8ABF3357499CCFEDAFF0006
+ 0FC53F1DDEC3F6F97FB72CBC35A66A1B41DB0DBCAB6B6E12CE1FBDBDA2B70B09
+ 099C3C7B586F8F8F957C19A601ABDBDBA9B8B98DD5639C22EE50182AE78238DC
+ 570070323278AFB2FC53F155BE35FC51D2EF21B786E2E34D9EF23B17B5579E49
+ 6292EA69E151127CA88BE63EE2D8DED2CAC4901027BEFEC9FF00F04CAF0AFC1C
+ F0278CBE2478CA68ECBC2BA74D24EF2BA8324D216DD6DA6419382E4941230270
+ 323D08FA0FF5BA9E4B82FAB62DB6DA8A8456EDECD7E4D79E87E659A706E1B32C
+ 5D3CCA72515CEE2E4936E4FDD508C20B7936DC5456DB33F3F6E3C47A0D8F85BC
+ 2FA6C7A2DD5BEBF6FADDDEABAC5D4CFBA6F2405482DA350A02C5E5A063C96672
+ C0800296C9FF008283FC248BE15FED3BE2CD1ED51962B6BA8D1BCB660D099608
+ A508CBC10479850E7073B80E876FD11F1C6D3C27E23F0BC71697E19963F186A5
+ 76DABEB77E2E8BC105A82FF66B148701632104677167DD9FE1CE2BCDBFE0A13E
+ 1ED53C5DF1FB52F1DCD69246DF10353BCD5AC18FCD1CF6CD21420A827E624153
+ B810063E53D6BE8723CE154C7D29FC2A519A69BDE578C95BCBE2B7F755CF178E
+ 7876584C0CA872A7AE8F4BD95A317A5FE2D5BF3D16C7C89A44D6F77753C7AB4D
+ 186B884957285943630AEC79F9491B0918C707B66AA0B8129924821DCD95D982
+ 1CA9DB81CF03BA838E0F35ABE36F09CDA3EA8CB99248F0CEA0807664838E7EF7
+ A707818E4A900E12D994555FB3945D98770D819C73F97A139CE739DA457EAD4E
+ 519479E3D4FE73AD42B53A9ECAA4755D777EB7F266DCF37911C0CAC2DE1B88D9
+ F637237328F948DA300F0064E00619239077FE16784F52F1C7C5BF0D786F435F
+ 3350D52FE3B4B38DC1524C9B9379C1242A677B1040508C430E2B1ACE78EE34EB
+ 5907CD25ACAC91B6FDB9F98B8CFCC1B92C4657B8EA78AF4DFD8F3E3937C0DFDA
+ 1F42F175BDAC73DE697319A03756AB2471B052A85D4637F4CED0C32DF2920135
+ E6E36A55A787A93A31BC92764F66EDA5FE67D06169529E26953AB2B45B8DFC96
+ 97FEBF335FFE0A95FB265BFEC85FB50DEF85F4B212D6DED2DE321C9CC7308223
+ 2072063728994B73805883F32B0AE27E1BE88BE29F0EDDDD4EB663CB8F1034A3
+ 72CF36D3B8024961CBA9DBF282109E71F2EF7ED7BE3A9BE2C7C457D46FB54BED
+ 7B56D49E7BEBC95EE04D70925C4B24AFB9B1B776E6E4A8C61B1CA85CF13F0AB5
+ CFB3F8CADE329116C7D9711E36409BC64AF0086C9C823D4920E335C3818E27FB
+ 22946BCB9AA462B99F76BFCCDB151A1FDB152718A50935A2D126D6B6F2BECB5E
+ C78E9919BF84AAE78FD7FCFE1572DB5192D9176C8D1AEDDA0827B29C8E31FDEF
+ FF005D43295924FDD8F2D785C3770475FC78E39A92D2D45CBB49216FDCE4903A
+ 1F4C76AFB195ADA9F9BD35372B4771F05CA5B2E6266690E43F185009E3F2273F
+ 5C54BA7CD1DC5EB497983BB2586CC724F61DCE4FD38EF50B42BE77F16EC1DCB8
+ E87F3EA7BF4AAF346AAE33B73D485E982323BFBF4EDF5CD4EE6AEF1B5FEE3AEF
+ 1F78DF4DF12E9DA5E9FA5696B676D631ED95CFCF2DCB93F7D9863B671C703D3A
+ 0C6DB1584AB0CD6F2624DBFBB2F8C0FBC33C0EB923AF1CF5AA36ECD11F955957
+ 8008C862339ED8F5EBEA2ADDADA186E1A4693CBFB3BFC9BDB9233DBB1C73C646
+ 79ACA34E308F2AD8E9F693AB3E76B5765B2B24BFE01D743E25D187C3992CA3B5
+ 65D6A3BCF385E655F7C5B47EEB691C72A581C9CE4F7C86E7EF75C55837471C26
+ 4039475DC5C81D5B239C1EDC0C81D4039C948E483526486393CD2DB76E391DF1
+ D33FD7F95741A5F816E35C8239269570CC542440B79436FDE7720AA0380464F2
+ 01231D6B2F654E9FBCDE9BEBFD6C74C7175AB2F6715AEDA69D7F3D7E66AE89E3
+ 6F106BBE15B7F0D79725ED8C773E7C1631A16904ADD70BD7E72412ABD4E5B1CF
+ 3EA7E0CFD83F5E7F0DAF8B3E236AB67F0D7C3AEA248A2BA8CC9AA5E26323C9B5
+ 0415DD8C6656527A8040351FC30F891E1CF80774B35A58C3A878A2D11BC89AE2
+ 3CC284A12368C96CFCCBC31DA548248C955E67C6FF00183C63F18FC5975AB6B1
+ AD6A0B1C3BAEDE48AE0CBF26E1940011B9D895555C0CF032A012BF3D889E3AB5
+ 570C1A54A9EEE6D5E4FF00C2B6D7BB4FD3A9F63848E5585C346598B9622AAD15
+ 38BB455B6F6925EF69FCB1B7A9F6E7ECB1FB7E786FF675B2B1F02E81E229358F
+ 0C6AD6692BDF6B524F20D2272CA1D250E8BB82E429F290282708242AC4FEA77C
+ 39F89BFB3AF86FE0FAD9683E2FF0D78CB5DF18BC3F6BBDD3A05611A80AEB1260
+ 111C4A383BDCB317CB139C2FF387A2DFEB579A84862B39ACA4489A2DB25A797F
+ 65563B8A8E85BBA9DC474CB15EFD97ECF96779AEDD6ABE3AF136A1A98F0F787A
+ 588BB213E65CDCB9E15416024D91B173B881F714801891F9471A784782CC14B1
+ 71C44A93BDE56B37524DAE5BEDADEDB35FA9F7790F1962F32AB432C9C1A87373
+ 7B8D4128C126DC9B526E3049BB68DBDDB76B7EBD7853F660BAF8A7FB532EAB75
+ F65BAF1178BF5A8234BE4613359C0A7F79E500004C441DF736E29B46D55DCC5F
+ BDF8EBE1BF0FFC24F8B77BE15B7D4343BED2B41BAFB4B69F7BE5BFD9E298A3C5
+ B94A9073D718186CF7E9F9B1F007F6F6F1D7833E24EA5FF08AF88FC41A7E9771
+ 7A1B409EE9924BE4D3C4855514E155646882E5D46D07B00B830FC47F85BAE7C3
+ DF8F375E31F10EA5E20F157856E14EA570B753BC134B244C864B695CE57CCD84
+ AA4809C027E543941F075380330FAEC69E618A518C69DA1149DE4D595BA24D2D
+ 12BEF73F63CA7891E615D55CBA8CA787578CA0924A32937FBC6FDED2CACACBED
+ 6AD689FDEBF1AFE3D7807C05FB2678A34BD2F4F98EB3AC6A42FB4CB5B20D7F3B
+ CA23569EE5031FB99E0AE5541C8E3815F03F89BE35EAFF0010FC2FA86B775E28
+ 6D2E5B79FF00B3E2B2B284BADC236EDD1B83B70FB4A1D8C76B11260AF5AF32F0
+ A7ED130FC28D662B8B5B1D52E23FB43BDBA35C32FD8E36DAC221B5558310C870
+ 1D483820FCB81F76F803F65BF81FFB696952E883E22C7E0DF881AD2C38B7D4E3
+ 1F65B99705A3713F576524E03307F931B4819AF729E4B86E158FB5C6C2538CE5
+ CCEA72F338A56524E2949A56DDEBEA8F2F03C594331C2622950C4BA5BDE1EFCE
+ F394572CB9E3676BC15D59A4A4DBF3F9C3F668FDADF4FF000EF8F6E34DB9F09D
+ 9EA1A668D6735CAA5CB1B80F1A642B391B1BCA638FBB8003E769C9AFD2CFD99F
+ 4FF84BFB55FC38B1D6B5AF84BE19F0F5DB307636F1CB0DC4633FF2C27D9B5948
+ 20E14A31CE1B3D07C4BF14BFE0839F1BBE06788AEADCF84EF7C6DE1D6970BAC7
+ 86DE3965921DA01CC67F7E15BBAA21E83079607EAEF85FE319BE0AFC394B1BAF
+ 155C787CC110827D266B898BB6C0176CA4A81B801825F9CE4D7C8F8858ACA31D
+ 4A9E2720ADCD395B584E4EDA7549B69B7D1A4CC3853FB473AC04E9622BB94A9D
+ 946D26EC9B7A7B89E915AA76B5DBBD8FBA346F8E7F0EFF00666F866B6BE19D22
+ DF44D2ED102451B18230EC063A19831271DB3DCD7E4EFF00C1496EE5FDA0BE28
+ FF00C251AA7C426B7D66FC98E2B15B06D96C001E5C71EE21430DC189033CE7A6
+ 49E8FF006B7FDA3747F10785DB47F0ECDA4EB1E26BF56894A5CA86B44032CC19
+ C9CC981C05C163C292D8AF86BC43AEEADAF68579A7EA91C3716FF66526EF7457
+ 139B80AC0EE65FBEEB93CED27000C8E54F3F86BC0F5B0F51E672AAE33774F992
+ 72B3EB695F77E577DC886072BC8A53E7A72C454A9F136DECB5E5728B7257DDBB
+ A5A2BA6B40D37E1FF8DBC45F142CFC87B7D43EC92A21FF004684A8C11B5D51D4
+ 104AA9048C0C203BFE5607A6BB692E9EEF45D5ACD7419EF637895EE5A296CE70
+ 18AAAFEF406864C9C6EDD95E46EFBC2BC765F184DA4C0B6379A95D1B84B5F2D9
+ E14123C2037CC8A300E3AE421424105F93B6BD2BE1C6B505DEA565A6C375E241
+ A9322C31CF64AAF17900E6446591082C177294E7218A96006E3FBAE6185AD18A
+ 9CAD68AD2C9ADBAF6DFC9F91E464B9D536E5462E5693D6329297C5A72AEB17E6
+ A567D4F31F17FC30BDD2B552BE48B7B8CAE62824CE4AFF00116620E3A0DE0FF1
+ 703915D7782A4D525531EA37D74D60193CC8DA60158E7A94E46439700942C4B3
+ 0EC0D7AF6B1A2C1E22D67CCB9B6BCB6B7F33CAFB3EA28D36A363F2952E028D98
+ 20A676B28076AFF08ADAF0E7C08B6F15E91F6BBAB368F6C8B17DA844E96D7632
+ 14C9F30385DC6342CA7009C63E526B8AA710FB4A2A1523AF75AFDDFF000FE7B1
+ EFE5FC1718D49D7A55128DF45276BAB37AA57765ABBF2EEB5B33BEFF00827C7E
+ CDDE1AFDB3FE36E93F0EEE2E21D12EB5DB7924B6BC86E8B2CF2DBC6EE11E1272
+ 54ED6DCBC7DD620638AD0F8ABFB3558FC30F8AD79E11F1459CC9AB59DCCA024D
+ 1FCE823260032A798C2A609E8DE48C28C12D95F09AEF51F801E2FD07C45A4DC1
+ 4D4B42BD4920994A89A09E16001C670012AA0E32194F7C9AF4FF008A3E3F1FB5
+ 5FC4AF1078E356D73FB375CD5035CCD115DD0DA3C6B8112A705518ED01D4EE04
+ E7920AD7C5E659953841F2F35DB7AEAECBF35AFE1A1FA7E4FC379CD2C5C71189
+ 50785F669FBBEF2E74DED68D9A9293D3A495D5DB77F4CF81FF00B5478C3E1D7E
+ CBF27C2DD12D74D8E1B4D54EBA2FA6BD2F24511B650A881B398CBAB365B3C360
+ 104657B7F813F1AB5CF05EB965AD6930A68BAD69B6F2C2D21B58EEE0CC83CB53
+ 6D1E731C8E6531803AB4883072597C6BE117ECA5F10BC5834592C3C11AF6B1A1
+ 6B0899D46C6D9A6B52BE7C7230691030C168F0C07CC14BFCBC60FDC1E00FD9B7
+ E1F7C04F86F1EA1E2F975A6F1269B62746D7AD34A99248654943C497324418C9
+ 0394DB2120E15906154F07E1B36C5494E388F69CB522BDC77E5BDAFA27B5DBE6
+ E55BB7A2BBB1F3BC6988E1CCA613C250A71AB52B49DE14ED36E4FDD7CEAED24D
+ FBBAC6C9DB4D59D77C0EF17C77FA835C6B966BAF4D7D3CB05E2AB086DF5298C2
+ 586011875F2FEF271B9ADD64C8192DDA7C40FD9C60D77415D5B47923B5BCDEB2
+ CF6AB22BF9F1AC12AA4417B8C3A0392010BD7150F843F69FF85FAC6A3751D969
+ 9AADADA5ED9C77ED70A8FE5CFBD7CA32142303059B2BF30665C80C4123DBEDB4
+ 1B59631A9E9456E235516FB042330E0FCC18120851B46467076FA9AF84964789
+ AE9D3C2CE15631E6768FBB357D799C6518CE518D97BA9CB96D7D16AFF9933ACD
+ B1981C6FB7546741CBA4B67E56D97DCAD65D95BE5CBD8FFE129F87F61A0D9E95
+ FD976FA6AB41A85BC51B369B0C4B2F96E0C8460BB72B87DDBB69F948271485CD
+ EFC4D9AEAD75E86C97C1FE00BF946A1AA5B5E0821B7B6488B2997CCF93CB0A0A
+ B244AFB99B1B46DDCDE93F1EFC396DA76A1A9DC5C5C5ADAE9B7B681A48510BBB
+ B8756FF540F2432E430190DC92300D788F8334CF107C4A1E30D1F4BD76DED341
+ BDD1D25D4CEA73245F60B40CAF332CBF3A870ADF3B32311F740180E7E5F2AC0C
+ AA62BD834E5ABD13B36DEFAABDBBBDF45BAE9F5D95D48627092C5C5A824EFCCF
+ 9BDDE76949A96EE56934AFA5ED7BBB5FCD3F69EFDB5FC3D79A5DAD9FC3E55F0B
+ 7D8EF309AA456BB1A62A55805F2B0F10E37154432384404A839AF24FDA33F6AD
+ F89FF1974BB29354FB55CAC61A28A69B70B99D1F225F9557112381B4C6A46E21
+ 41E833D2FC4DF8BDF0B7E1BF872EAC7C0FA6CDE25BC8D8C0BE27D550DB22B64B
+ 1CC181E683D406F28F1F316181585F18FF006F1B1F89DF03B4DB3D53C2DE08D0
+ 7C4D630C025D5F49B36FB7CAA8AAA4BBC7B62DAF9C6C39C760719AFD4B867032
+ A784953A51708A77B4EEDCDA7D96D6DD5F6BDB43F70CA387A961E142783CB64E
+ 2A4D7B4A8E3ED209A4F9ECD3924FAA93BA5B4123E19D6BE0A78C2F7C45A8EB13
+ DD5BD8ADF47718581B688615236EE6DE1817254281B4B6D660429CB09690FECA
+ C7C3D717906AD37883594090D836A4F2796F1B7CA27089B5E56001DC47DD6FBA
+ A304697C56FDAEED7C3BA943A5C715A5D5BCCE832FBE4F2A528EBBD0FDE1B509
+ 56DB963961C1626B87F11FC75F0E368FF61D3F47367A7C4A82E94A07124F2295
+ 590872CD2C6985E0920EC5042A6633FAD6128E6388A7186229FEEDEE969756B2
+ BB4EFF002B6B6B5D6E7978C865781AF2AD4B10BDAC1DEF2F7F5BDF44D5B5D75B
+ F2AD74763F4E3FE09E1FB5C78C343F845E39B2F186AD1EA5AC6AB7CD00C8063B
+ 699D157CD0481F2794C9B540C31D84E371C759E33F847E0BF0CDAE99E2ED5B41
+ 82E34BF09CD06FB99D15FCB11324CC727399E462096CFC8A7031C1AF847F62AB
+ A6B5D4750D51B539AF34DB79A3B8BEDE76C53CA250E19B209FEE0DAA7071D00E
+ 47E9E7ED746CBC2DFB047933379971E230B770A03B5C232F98F231C12B9FBCC4
+ 73B9F68C718FC038B706B2FCED430CEDED649351F752D12692E964DFDFE67978
+ AA0B0B88C24B0F06A58C9A8C927BA8A51BB71D2EA3AB76DDB7ADCFC49FDB87E2
+ 8EA5F1D7E28F8A3C5D0B5F41A145AAC9A65BE405986DC84DCA7EF06DABC7193C
+ 138E2BA2FD8B3C7CFF000A3C0DE38F105F5F6CF10DBE97FD8FA36C983C9666EC
+ 466E6E40DC42F970AAC487209F388C92871ECDF057F61BBDD52DB5B9B52F0FF8
+ 975489B5317367E17D32DE49750BDB37665134EE22658232DE56D51F33A13B36
+ 9656399E3DD026F86FA4DE41A97C1FF0FE8BA7DA5B2A4C58CE24512476CB1FCC
+ 19B74937D8E75880FBEF7D3C8BB9151C7EFD1CD305F53595E1E29C63CA959C56
+ 8ADA6AF5BDACEDDFB99D1CAF14B193C6E22A5F9559C5CB4BAD1595EFC89A5676
+ B5AFE68F963E0D7C6ED4BE07DCDFEA36F63149F6EB8558603C49186395404738
+ 0808C0EC3DABEAAF8C7FB5578926F825F0CBC6DE3AD175BD5FE1BDE5C491E8F6
+ 106D8B481342AAF2A4A88DBDA46674CB3942CBBB048E2BCCBE377ED68BFB2CFC
+ 40D2F52F0CF803E1FE99E22D1E6D52FEE96F2D66D42CD135885B162E80AFCF6D
+ 1031210C0285907CC01DDF2278F3C69E26BCF07E8965A96A9AC7F62D95AA5E5A
+ D85E5DB7D96DE360A80C1093F2E4A925C67728518E067E8A1C3B4738AD0C6D5A
+ 4A177BB7EF3566ACADF0BF85A77D6ED1F2997F8819964F49E114FDA285F91CA0
+ 9B827A37193B4A37BB574DBB68ADA9F4878DFE2B5AF8FB5BD6EEBC37E1DB2F0B
+ E9BACDF456D069F0C865FB17DA5DA158CB3B6FDC234B96049F9719C804574DFF
+ 00052AD0EF75DF0F785F54B5536FE0EF00D847E04B69410AD797D0096EF51651
+ 9C9C4F72621819211460600AEB3E197EC87AC7C3FF0006FC338EEA3B1835E96D
+ E7F1BEA36B2348974852D627CC8368FDD430A430FCD8DB757374A0BF932D713F
+ 12FE32E83F19BF64DF1836ADE5AEB1E1FD76687C21A689C23DDC9AA5FDC5D5EE
+ A3264FCCB1C3616D6A08200D908079E38B0BECD63E9CB05EF469BB37BBF79B85
+ F57FDD7ADDDA2DBB1E9F11661FDA3858E2ABEAE4924AEDD928D93B24DB7AA4EF
+ 67AB6DF53E58D4F4FB5D7B4192DD76DBC36313468661F36D5570C809E70386F7
+ 20E4B6467CAED216D575FB5B38646863BA9C42C1B236F0402C07391823240C67
+ 3C6727D3FC191B2DE44D0C6658A590EE8D8173B369DEA78192438182B9DB8C67
+ 9AAFF06BF671D57C6FE33BCB78619BFB3F469F75C5DAAB08DD4E562507393BC2
+ FCAA32C464F2179FD4B0F8BA386A75255A564B5D7CFF005B9F9566596E271F5B
+ 0F0A11E694B469744B55B59256BDFD3B9C9F86FC133EA11D948B0C863497CE2A
+ 40606353D00CF27EF9E38ED8F9856C8F87373A4DA8B8B7758A698EF75FBA517A
+ 71C8EA158E719201E95F6B7C35FD86AF355D36D6CED6C6E1AE5D54312BB9A352
+ C0853DB7BF43C803A0251057927ED1FE0EB5B5F1BDBF8734D93ED1F689C412C9
+ 09CC728DA524DAD8C94003007D158E0E768F9DC2F1852C6625D2C3BD16FF002E
+ E7AD9CF03D4C9E118627F892F79AFE54D689F54EDBA7B753E62F0E7872FB5F9A
+ 6924692DE08D55657766DC76B0F97010E4804019E9807BF09656B0D9788A2DB1
+ F10BA3F984EE0C7703D33819C038392303B9E3F4DACFF647FD99BF66FF00D97E
+ F35AB8F145878FBC7CB64F39B2D3DAE2EBEC9215191CAAC298F9406701828CE4
+ 702BF32D5AE6EB5BB9BE08164F33CD45765684805540248F9B70C0CE003C0F71
+ EC647C494B37F6D2C3C64A10D2F25CB77E4B7B79B3E3B30C8A5974297B792752
+ 4DBB2BB6926BAB493BF4B68F5B3679AED8E0DBF795F1B5B232508207AFF9FD45
+ E863F2ED8724348D8CBFCBCE33EB5512CF0AC4C9B55790B9E1B8F7C75FA734EB
+ A9E6705FCCCAF4053001CFAE3A679EBCD7DC495F43F39A5354D737DC25C5C2C6
+ D8DADBB6ED19FA71FCC5553F71B77F1678C743EDF90FD6B63C3BE02D53C592EE
+ B58330EFD8D732FCB12B633B7711F3360121172C402403CD7AC7C1AF80FE17D6
+ E2D6AE3C41AE0F334AB4692DB659CD2DA5CDC0C7EE1DE32AEB9C360F19C2E3EF
+ 6473E271B470D0729BBDADA2D5EBA2D11D185CBB138C9A50495FAB765DFA9E53
+ E13F0A6A1E28BDB78E1863C4F32DBC73DC3A416F1C848C2B4B2158D3B1259800
+ 3A90335D949E0CF0EE85A86B76BAE6B66F2EAD60F2B4E6D1D126B2BEB80E172F
+ 3CAC9B21550C77A23972154615B7887E2C78E350F11DEE9FA4B6A935D687A0AB
+ A69F6D23B35A42A4FCC63800D91172BB9B681BB3924935C86A3732DE5C33ADCC
+ 8DE58C9DC7E6CE7B027A8C91D7A2D42E7AB6727CBE9BEFDFFE01D11A94F0EA50
+ 4B9BCDFF0097977B9A4BAC38BE91122B786DDC989638C9CA92B85C372F918FE2
+ E98208EC6ED9EA135D4D71247346D6BF302F220FDE903851EFB5549E7008CF5A
+ C7D1F4BBAD4AFE1B1B5D92C971110A84292A586DE09E3FBBF367A56C78B7C370
+ F85ADE1B78CC5E632AFDA06FC481C290768E48C32B024F39CE7A85175392FC9D
+ 59387555C5D67B2F96AFA1976BA84DA56A324ACDBDADA5F28F493CB21C1E0303
+ 91918C1C824F3D79EB8F89EFBC21A7E972D9CB25ADD59C82EDF649FBC9EE118E
+ C72A78DB1EE64567DD9264207CC7137C35F839278AF51D4A08DB4F9A4D26D26B
+ 8787ED2192FB63B28E37671BB68C0EA369079CD63CBAD2BD9DD5BCD67034D6F0
+ B8590B092380162030EAA704A0CAE0E1400BDCE12A94EA4DD38EB6B5D7AEC745
+ 2A552953E793B735EDEAAD7B7E474977F14B5FF88D717D36A375712DE6A91AC2
+ C8AF869A225B11EC55C005CE70305B20FA57A87C7CF145BFC35F84FE16F05E8B
+ 24728B0816E6790C21DA5B89199A495815DAA4A8403F8B009070323C6FE134D2
+ 59DFADE4927971C721455F3191598156C01C601116D2474041EA062F6B3E36BC
+ D5BC5AF0C97924566B1CAB6EDBDA3118F2F61527FDADA80292571C0E1B27C7C4
+ E5B09E269A824A14EF2B746ED65F72BFDFE48FA6CB73C961B2EAF793752BA50E
+ 6EAA37E697FE04EDFD366F7877C0DAB3DF2EB97D7B6D0D9F86ED20B89DEF0AF9
+ D7ACFBB16E159B2EEC0B291DFBE43023F573F60D5F873FF0524F867AA7C28D62
+ C6DFC3BE3A11CB0687AF3B61753B58D8B246ECA089245DBB8A15657009C86DF5
+ F9250589F1FC1A5DEB49223C31C50BE5B00ED320F989C8DB9F2D30463193FC7C
+ 7A1FECD7FB41EB9FB30FC69B5BAD0619964B0642F1F0AA5D047C072432ED42C1
+ 65193CA1C90580F94E36E1DAD9B60A4B0F3E5C453F7A0D6966BA3EE9F5BAB6A7
+ B5C2B9F4B2DC447D949D38546939AF79DF64EDD97557D55FB9E91FB4D7EC45E3
+ 3FD82FF685BAF0BF8DB43BEB8812F23BBD0EFE4477B0D666898323862CB92CA0
+ AB027A95E70B9ACDF841A878917C4D7D7FAD7DBB4AD4CCA6F7CD688AE9E0363E
+ 529821236DFB805F914F38E483FB89FB2DFEDA7F067FE0AADFB3243E14F88969
+ E1FF001348D1AC1A8D86A90F98F6B71CA248CCBC452F52B3215C9C952A7207E7
+ 0FEDA7FB047893F629F176B5A5D96A1A15FF00847227D18DCE2FA69416765490
+ AE1D593393236011CF0D827F2CC97C469E3EA4B25CEE97B1C64524EE9A534B46
+ E17EAF769269EE9D934BEAB27CBEA2C43E58B5C979AE5778C96AF9A2F46D2F5B
+ C7677776769F023FE0B99AFF00ECF76EBA2EA10B6ADA224AB0C93DA5D9B85B67
+ 6E372C6BB5594AE3E50C8011C9C115DC6ADFB517C18FDB0FC22BAC6A967F6186
+ E4F92F2696A6C6E27B8F99D629896E31B4B62327382339E9F966DE01D63C5FE2
+ 4914DD43E5DC094CE7ECE1E4898131B1F2F18E58ED0490D91B40C835BB79A1F8
+ 83F677F177D8175AB5BA59D04123C127CB77002C639962942BF964E4AE5438F9
+ 320104AFA58EF0B725F68AB6024E96237BC5B49DB7D3A3F4B7A1EC653C5D8886
+ 22A62EAD15CB2F764D2E595DE9AB8E8EEB7BA7DEF747AAFC60F0C5AE9579A86B
+ 3E0AD7B5CD4ACEE1E4B3996E482F0A30236C785C461410BDCE1BA8DC7383F077
+ E1FF008ABC37A2FDB3C4FE11B9D6A5935145926FB3DBC377216DF96791810D84
+ 767264192CC3E61F2E3CF7C47E31797C5B75AE595E436368F0B24B1AB3A8672C
+ 372B14DA7E649093C1563190C496C5745E0DF8B1AD49E265361AE4B6DA15B442
+ 616A0AD925BCCA0976556940F31D431C79870B27CAA36AA0FADFECFC4C307ECA
+ EA4AC9B724EF65F66F1B6BFA04F3CC2D5CC562214DD27F0A8C1A716ECAF3E59D
+ EE9D9F4DF6B1B3F1CB57D17C53A15ADE68BA6DD32E9D6AD04B1369E963716AF8
+ 650D2F92FB1E2DD95DC114363059B8AF2CF0CF8735F93529174D8EEF6C842BC4
+ AE02B15276955C8DDC01938DA08C0C6DC0FA3FC0BE2FD2AD4DE4D078821D4B4B
+ 85195D5FC3ECB21BA9542948E40BB9D761058B078F07856E419FC37F0DB4D5D5
+ 646D4B5CD2749926B48EF6DA7822FB55ADEB0600A5C4A82301B19C300DCB7B92
+ BC787CE3EA54654270765B5F99BEF6B72ABFC93F33DAAD9251CD2BC3154E7693
+ D25C9CB6ED74F9F44EDB37DF55B1C9FC24F1DDC7861ECE2B7B7FF8995D48AF2B
+ A298E5908C2865958676827704E073E816BF48FF00E09B1FB41FC3CF1A7C33F1
+ 17C25F8BFA35A5A786FC413FDAF4BD6E51BA5D36F429525C900A1F9400CA36B0
+ 215F8719F8E344F8156BAA785B4DD6ADA15B18754B860E2657130E5445B896FB
+ ACC79D8C57E61B87245517F15E97A6E6D750F10369FA9AB4B6E6D3ECF2DC6F03
+ 92BF2464638FBBB8FDE07B835E0E2311CF53DBE1E3ADDDF46FC9DE3D96DAAF46
+ 7D761B8730998611E0B178F8D34B95C5DA51B3D1C64A6D249F5695EED59A67AC
+ 691FB2B7883C79F12F5B87C3365A4CD1CF77335B4075AF28CF0061820CA1635F
+ 97E6F9D97B804935D67847F63AF89FE25B2B3B7D0BC17AA6B4C8A60B892281A6
+ 0636660773C7947C1390436475077015E6BF0EFE37EA9E1E755B7D56E61BCD29
+ D248112D1A39D00E8C8DE9F3720120EF04EE079FA1BF64AD7FC71F1EBE243683
+ A0EB96C62D7048ED04B0BB5BC6C58EE63B1B84C6F7209383F281839AFCF336C5
+ E6545BAB5B97D9C75FB49DBAD9EAB6DBCCFD631188C565F83AB8CC057A12A708
+ A6E4D4DECBDE72E5B277567B27CD7D753E84B2D2FC4BFF0004C1F849A3CF7126
+ B0FE26F16249336896FE6BC76281479AED3A6DD8FF00326D8C2905D0F278C719
+ F0C3E195D7C46F88B77AB0B3D4E382FA196EAF266BB0EC4C8E64D8A7E6F9DD99
+ 833637B16DC7A03591E35F19DC7897E30EA1A3EA537F6E43E1DB97B0B7D5AE20
+ 91EDE630F991B0666792571B8E71E6B004678C95AF6AFD9C745D3F4BD1B4DB3B
+ ED62EDEE350BD578A58504789385236A9FBAC1B9E7D072781F119C664E3071A5
+ CD18C9DECE57D1EB7B6914F457D15FAEC7E4B8C956CBF015330AFEF62EBABCE6
+ A2D7345DDC528EEB9236D24DCBBB67D21FB3E7C09D02DF4786EADF4FB38F4386
+ 0516EB2D9EDB99A36450A92AB8CEF56CFCE490D96038193ED167E1CB5F096E58
+ 764766F6CC248F868E318C2AE0F18CE383C75F7359BE15996EEC6EB4D695CCCD
+ 007F3160D90C6416F9B3C1E4E7E563C75E324D795FC6EF1C7C40F06D9EA16F1E
+ 8C754B1B55575F93CC77567D85786C1FDDB06FBA324ED196009F7306B0796606
+ 86630C23AB2B737B55AB5513973426EED724A1CB6D7DE5CDD53E5FE54A8F199C
+ 63654E756CDBDA4ED74FADDDAEEFBFF91C1FED7BF14469DA36A4D0DCE9B6F717
+ 5FE816C6EAD8C7758015E4014E0B2329DC09F9725738CAD7847C32B0F0CC5F00
+ FE207C44D63C45ADF84B47D419346B9BB5B0696EB528C61DA2863DAA23CE547C
+ 8C177F0C01DC0FA5C5FB2BFC49FDA0FC66D71AD5D6A1E1BB7D1A5F3B4FBC8A08
+ 9D4DB326D589537A90E701F285B230ACC9815E11FF00050AFDA37C37E29D0A1F
+ 0C681E179D2CF4C889B7F1145ACF9735DB0056412C1E58DA776F0CA7694724A9
+ 0C0D79193E5335FBDC5457BEDBB4B9D5F569F2B4B5E56BED495A5A3BEA8FDF78
+ 3F034ABFB0C832E9F3CDCA32AD3A7285A114D34AF35CB272B2692E67169BE46D
+ 1F3A78C751F0269DA6DDA69BA2F893C453DBC8F3D9CDA8DB470433DB920A9915
+ 2462B283B87CA1830DBCF5C771FB60F81FE07CDF0E744D7BC11E22D574FB6B9C
+ CD75E1DD4F4B9D6789940FF484942AABA6EC280FCE390D81814FF66BFD95A3FD
+ ACBC6BABE8FA6EA165A1EBD6BA60BED3EDB5464417F73B862041D2366C3B8206
+ DE8A46335F367C65F18EB9E0ED7352D27549352D35AC2692CE7B6BA631CD14D1
+ B1531B00197192578E84F1D463F48CA72EA8A8DF95B537A49C9DD38BD7975D37
+ 57D3AFDDFBD66588C0CF171A0B1355CF0F6954A77D24A6B4E6524E0E374DA945
+ 2B3BABF45CB6ADF0FF004392C2EAF23B76172B3C374C6D888649A02AE7265650
+ 8B12148D4E37BB963C9E0D7955F5CE8BE11D1352BE46B9D5F528E6575D2ADEDD
+ 0ADBA38915F96049C1C829B7AAA31CE4D3F55F88DAC787F5ECE90DAD43CF9CCF
+ 1CDE5491A91B76657E70A32A7A0C81903EEE3BCF835E33B4F1978CB4D867B848
+ 7CFBB165234BA87966691C1624228F31084CE5C46A010C0382735F734F0D88C2
+ 43DA556E71DDA4FB74D9EFE567E67E678ACC32CC6D495357A73BB517CBCD76FA
+ A5CCB55BBE6E657ECECD63F83B4FF1C7C4AB6F0DE9D025C5A1BEBE7B1B6D26CE
+ 078E4B895822A831AF2CEA776E1C80543672303F68FC07E05D5A5F83FE1DB2F1
+ 45A49E38F125C69D6B2D9E9DA7CCDFE87027962149650A6381300B96DC5C9CED
+ 0C42BC7E2DFB0445F077F67C8DB5A9ACF4ED375A5499B4DD423B34B89A152245
+ E0C9931AA14752217110664DD86625BE88F0B7EDB7A4FC43D46CF46F87F69750
+ 7876C67FED2D635F65793CF822F99E46619672DB79C92CDB76A93D6BF0DE38CE
+ D6615D46850E58516DA6D5936DDF75E9DEEFA9F259CD6CDEAB7469D09CA34ED2
+ 9549B6BE156B296968B56F761EF37A26B77F25FEDA127C68F3FF00B3BFE128BA
+ F08786AD4958F42D0649151D8E49F35D49766C16CCB2B331CF24B2AE7E6FFDA5
+ BF6BEF177EC8FE1DD0F4FD47C59378935EBDB49640F7A86EDF4E338469E681BE
+ F43337C88248CAB008B8DB8E3ED6FF00828D6ADAA6A735D45A2F957F24F6E9A9
+ 797BE4104729064DCF1B79842007058858D401B982A907F13FE336B5A97C52F8
+ 9DAB5FDDDF47ABDD4AA228A6B7965FB2D9C6100F2D6378D5F3C05F980F995B00
+ E7757DA78718179C53854C572FB386B24924DB7B5DEFDDB77D4F67159E53C0F0
+ FD2AF4E941622B5ED151BC52B2BC9A77D775AFBD2BDDB6AF7ED3C7FF00B6B784
+ 7E2A78B7C3775AF7C39FECBF07786D4B47E1DD36E73FDAD73B96595E59DB1219
+ 67291472CAA559218F626368079BF821AB68BF1AFF0068D6F88FF13AC9AF3C3F
+ A6CEDAFEA5A5C09B6CF5030465ADB488E33B8AC3F2448573C5B21F986E523CBA
+ CBE13DF6AD3496B0C2E89195FDF0569429F35231B00E599B25768F9893B7935F
+ 4FFEC55F03EC753D7EC13562D0F82F44B84BEBE4754DBA84C1948B6DDBBF792B
+ B6C561820648E1000DFB66612C1E59819CE8B6ACADA36DA5DA37BFBCFEF6ECF6
+ 48FCE7072C6E698B8D3C4C54A2F756B733EEF6DAEF54D3D5ABEA7D4BF157E2EE
+ ADE13FD94FE297C5EF884F25D7C4EF8BFA7C7A6697684BB7F63E93289563B289
+ 7664288C02405F99DD9CF2EC4FE6F58DCDBBE229AD5669159A695132151110C7
+ 0C2318C9257E63F3657CB3907207D29FF0524FDA2DBC79AB2C2ACCB1C72082CE
+ CE06388DF3B376010555108404E1778936F295F207813C4EBA3DE4735C7D9638
+ 58995CECC6FE7851D89DC718ED90781C8F1F82F2BAB4B013C5548DA751DED7D2
+ 2924A315E514923AB882B60E9E654F02E5684524EDF2BF92BEEFE6FA9EBFF047
+ F654D7FE306B962BA85EC967A3BED954C69B669B2A19BCB880505700AF98C76A
+ 80493C05AFD00FD9E7F64CB5D4AF2D747F0E69F147021046C01A20E7019B763F
+ 78ED800CB800851B411B02FCB7F027F6AAF0CE91A7C30EA37696AD2157903396
+ 331C0DACC0E01C607DF6E0FCC1464D7BB6BDFF00055C83E1B7859F47F86FA65C
+ 5CEB37C8567D4D970630786110C8D8067973824023E5C9DFF11C54F3FCCB11F5
+ 7841C62B6E915E6DF53F64C2E1F2AC8F2F8D4C9796B62249595F99A7DDFA76FC
+ CF66FDB93E2FF83FF627F84773E11D1E7B6B8F13DF5B3C3A95C8FDE1B542A434
+ 639E588255B0780C63CE5A46AFCA16F1FF00FC241F12EE754B899191E4249F31
+ FF007403739030173804B31E39CE3823A4F132F8ABF68EF897636425B8D7B5AD
+ 52E0430DBC3297C484FCA1A5E1739200C1EE00ECB591F1D7F66BF1E7ECC5ADFF
+ 006578BBC3F79A4348A2E23BA982C30DCA64709212704742B8CAE4F182377D7F
+ 0AE4B83CB292C24AAA75A6AEEED26FBB4B7D0FC7B88E38C97356C43752A395E7
+ 257767DB4DADFF000FD0E77E3AFC5A9FC7F7325AE9B71343A7DC91E787B82D25
+ F3AFDC0CC4927E6CE031E8791D6BCB352B077D1E458CF9D34BC018E7BB6F3CE4
+ 1EC300773FDEC7551E90B6092DF5CC863DC798C04DC39EA39386231DF39E463B
+ 65EB17EC9A12BDC35C349792AB5B48577B46A768DEC7AB6410BC1E70DD735FA5
+ 65F185282A54B65F8BFD4FCBB36AD275253AFDBBAD3A2F4F2FCEF73CEFC25E0E
+ BBF135E44CC91DB5BC8FFEBA7188E427048500166C0ECAA4AE727039AEEBE1DF
+ C32D1F53B59B546579B4AB17F29A4922C3C970C370B48A3391BFA9691CB2C49F
+ 33E18C68F1E9D7F79F1375B9636D4B4FD26C6D61796EAE563FDDDB42014C8007
+ 3F2B80012773301BBEE9173C6BE36B68923B6D36D66D3749B2B6F22CE153F308
+ 09CB65CF1E6C92A92EF8F9B790ABB542AFAD5AB55A8FD94746F7B6CBE7D5F6ED
+ ADFA27F3F430F87A31F6AFDE49BB36B56FC95DD977BEAF4B756BA6F893A969FA
+ 45C7D9AD7549EEB52B7B668279AD18430A7DE1E4DBF1E608401B19DCAB48DB98
+ 80BC1E162F146ABE02BABEB5B59AEAD6F82F9370172AA7F7843C6518E70159F8
+ 38255B91DEB2FC2E4EBFE2AB32DE5C9179F1825270862469422FBE7E653B9BD7
+ 8E40226F1E6A16BA978B756BB6FDCABDF4A6DA38F8CE5D8AC441E40C70491C2B
+ 64EE26A68E1D41FB197BCAD77EB7D0D2BE33DB47DBAF75A765E96D7E7F9FCCE7
+ 65B9512799F3799312F26E18E4F391E8429C13D79CF3C1A86CF4B6962F98CD34
+ 8EBBE2058A8007033D72307DBA607A549ACD9BDADD63F76BB632C91A292C0FCC
+ 41047271D324F202E7DA9CDAB2D9AC31C6DE6164CB7967E5EA48C74208CB039F
+ 523A631EA2D55E278725C92E5AABE13B6F02349A58926B56956650D23A463E63
+ 8EB82148241182075CF7EDCBDD6A8DAE7892265591BCE9BE6442589739E83EA7
+ 8E4F4A2DB5786F6D2582590B27CD26F9416798EC27079EEC00DC3070CC720707
+ 57C5BE06BBF86BAE24DB639ED6E6206DA561C48648D8232ED27E65CB32904804
+ 21279C562A318CDF36EF6F91BD4AD3A949287C31B5FE64336ADFD8BA9B5BE9F3
+ 3433C69959D0491991DD554AAE083C166E4F0C13F8B2338D7B713DB24CBF3472
+ 4815995F69DC3248C003A83C7620FE205FF1059C325D2C3671EE68A20BB965CB
+ 6E32B21181D79C7380483CF506B67C03E15BFF00885E3ED07C3F631C5757DABE
+ A76D636F6F31014CB2CCA8B1972C362EE66CFCC31924904022A528D38F3BEDAF
+ C888D39D57ECD3F4EDA8ED2A593C3DE1F823926F29598A3C8635F98C91C65824
+ 8410AEB950D821B1D78E05DF13DD4379656F7DF65996EA6738745255DB27680B
+ B42E09072501048E99C1189ABD9AE9DE2159A692386DA495A702464DACBE664A
+ 9DA0FA0C1033C03B795AEFBE1DF836D7C49F09B5CB8F2634BAD2EE2158519479
+ 88086DA5F9050E7710493808C3E62A6B8F115214A2AB3EAD6DE6EC76E1E352AC
+ DE1D744F46FF00975FD0D3F0BF832D62F04DE5DC3AB2E87259C8C554CC609F52
+ 830807911CBD30416DA4700B648195AE026D6A49759B79B76D86DE44FB400C72
+ FCE373290B90467E5E8CCBDC1E6C69D7FA85D45A95BCD71349710DB2AEFBB40C
+ B2451BA00858E5D5A35565F94382884021137575DF0ED27B6D79B4BD474D16B7
+ 113392CC03C81986E5404B64A3AFCE3072C4A11F2EE6AE6E57479E737CDD6DA6
+ 8BF3675C6A4710A9D3A6B96DBBD7577ED7B2F97DE5CF869F1A3C4BF073E232EB
+ 1E1FD6268EEA28CCB7451A5F2A454CF9B04802812290870AC5C7CA074E9FA45E
+ 0DFF008298C707C2C68750D1747D4ECB52B0FB43C4D126E4C9C3C50484131E00
+ 2DC9C1046D623217E0FF0089FE02D06D7C2363A959FD8F4ED51A26D2EFDC6A26
+ 7F32E14B396DDB3E55F224894B38C1686560F80523A1F0EFC4D77A2E8D1C7717
+ 0CAAB70F05AA3F97E46EC236E3BB2A137349BB9181C1C61ABF3EE24E1DCBB3DA
+ 50C455A7EF45DAFB36979AECF6D763F46E1DCF31B93549E15CB9A12F7ADBA4FA
+ 3B3FEB43D27E3BE8BA3E9D341E30F07E9FAA787E6BC999B092379CA0302CCAEC
+ 095F9815DE30006FBB9AF2EF847E3DD5342D5668756D06DFC69A5DC49232BDD5
+ 9B79D6DE60CB18E7F94C8159BCC31B9319DA7382EE6B23C13F12357B2F145D2C
+ 6D366EAE1EC6DAD63DB3063B00112060492ABB4128772E578C9507D3FC35FB48
+ BFC36F115C786753D0D6E21B8F9AE8EAD69F67BF8949051319C71F37DE255999
+ 4ED04015E87D4F1584C33C2F27B6D3ACBDEB2F3DEF1E9AEA7562338C1E678D8E
+ 654AD8549A568C6F072EEE3AAF7B7775A6E7A5C5E1EF0AF8E7E1136ABA4FF617
+ 882DFEC8249426A6B67A95BBBB1DDFE8F75BA360AE00DA98273C38E057CEDE26
+ 93FB0355B51A47DA2D5658CAAC01156467DA73861BB720DAA704EC5D8700E091
+ EC7E20F12F845BC6D06A174B37866DE5F2E279A288491C6A14E784466646F957
+ 186010AF076E064FC47F829E1B616DAC595F5D2AEA50B09362092C8483733AA9
+ 53B94603677796E149F9148561E36538A8E16A5ABB972CF55757D7B377B3B792
+ 5F2DCFA2CE32D8661414F0B2846AC2C9A5251BAD2CE3A5E37EAA6EDE6F539FF8
+ 61F1BFC4BE1DB886C34B92E7475B893C8BAFB0A450BCA847CCBB55016F9D80C4
+ 81F20900608DBEE3E0FF00895FF08E456FA7FD925906A5CDD4D3A9BA5BC62799
+ 02C9F7158E08519E793863BABCEBC0DE1CB4FECC36B1DE46B0B3160D32B8F362
+ 3F261768E785DAA07272704B1DC7B587E1BDC5A4F6D34D756725C5E232243047
+ E725B30E30400092719E06072181E6BCECDA584AF36941477D93BB7DF457D37F
+ 2B1ECF0DE5F9AD382FDF277B2BB9C524BB6B2B24F6D6D7F43F427FE09C5FB6F7
+ C33BCF87B75F08BE2878456F3C13792B5CDA6B4E7CD6D3EE0FDE72CA4B42C588
+ DAF137049E02F4F2CF8B3FB39F87B5AFDA47C47FD91E2F817C22B78CB637361A
+ 781792C784C169517744CC46C660AA3255B6B6405F10F02DB5C789A67D07C39A
+ 7DE6A17971379C972D6B38729C11B102A444924125CC990CD8DB904F41AC6AF7
+ BFB3BDE341AAEADE1EB7D485C7993C475AB5BCB9B7773966F2607902FBE41FB9
+ CE719AF84C7623112FF67A12B4BA26AF2B77D6EEDF9743EF787B84E860B1B571
+ D53130A6AAC5A92538B837A6B18DDDE4B66D69D773ECED2FF638F86779E00D2E
+ F24F166A1AF5A98BCE8F52B9916259240A00478DE32C879DB932871B9772202B
+ 5E81F0FF00E3CF85FF00647BCB15F873E0DF03D9C77EA2D750D52F6E24BAD527
+ 391CC214E5958942228C6011838C86AF80F40FDAE2FEC6C248F4ED6354BBB7D4
+ 0BA4B756CDB2D6620921595B21FAB02C0100960483B8D7D7DFF04BAF8717BF17
+ 3E28EA5776BA45C496DA3E1E5B8BCB631DBDAB380031208264C60F9431CE32CA
+ A39FCE31196E6D9739E22A5494B7E58DAEDDFE564F5DEDA6E92D4D73ECAE9432
+ AC463334C63C4D0A6AFCBCCD464B4494ADCAAF76B96F75D5456CF374AD6FFE16
+ C788B5EBDB9BE86EEE5A62C23B9B46B7368AEF9F3A53D632097240C282AC49C0
+ 19F45F0CFC40D3FC13A558CF62B7DAB5E6956F0FDA249ED56386F5F231B00E41
+ DDB0EDC28DAA78277570BF193C15A57C34F8A5A978761BAB29352D42EE55963B
+ 7F95A5C3B1FDD296CA2F7F9BA92C466BA5F06697691780757B6D7AE0FF0066C7
+ 6B886E9866EE59032A938E377C9BD57200264C938E0FCBE2ECD46A2BDB4B2EBD
+ 9FAFEBD6E2CC6385AF85A55A3774A4A3CB1492BC5A51D2C95FAD92B77DD69F65
+ 7C3BF1FB7C58F0D58C9A5D9C71CAB187D4B6C86D611E5B8DCEC777CC4B295C12
+ 06D38CFF0009DAF12FC7F93C33ABB59DD5C342B7222610236E9914AC9F31CF0B
+ FBC1B06DE4B601C01B87C2BF0D3E3B5C7C347D32FF004B9123D0A1B3BB9628EF
+ 90C0230CEA5526463DD011B89EDD41185F70F0A7ED71E1DD4F4D8ECEF23B7179
+ E32B75B95BE9618EF1ECC281E74453EF157CB01960DB199860B0AAA10C45297E
+ E6ACE8FBB252945FC5EECAC9C6293D126B56F496AD5B5FC4F3AF0EEBE1F10E74
+ E97B4A4EF64BE28EAEF7BDDDD257B257D34B987FB497C6ED6BC69A0C9A6EB0C3
+ ED92DBA2933DC18DECE78A6658D8AAE143CB0C9316E00758E3C2B1209F1BF027
+ ECABE23F8E3F162D747F2ED34FFED59A09E7D74DCB5E2424ACAC1C18F1B9DA59
+ 70439193213D08CFB569FF00B4E783FC1969E2AF115D5B8D64496775676B7913
+ 96B9D31D6158B63B364AEC1300B230DE56451CE2BE66F8BBF1A64F044765AE59
+ 7F695F69F242A23D4B4D105ADE5ACA7246123011C093921806C2800AB3D7D2E5
+ 11AF29D2AF5A5CF2A92BD48BE6BBF85FC575AC95D6BEAD3DDFE8DC2F87C7D0C3
+ 55C26028AA1A3B4DABAE6695D4637FB0D2567BFF002B7BF03F14344F167C1DF1
+ 96B36E745BA8B50D1EF1AD27B8B1BE89240F1BAAE1760F9146580200180DC361
+ 90FC71F19FE315FF00C42F8897367A96AFA94B7935C1092EB12CEB7077364077
+ 62E038C9C49C29C67E50063D6BC7FF00B4E6A579E22924D3FC69A85CCBAB9FB5
+ DE4ACB17EF588FDE0F34808C7786CB7AB0193835E71A378EFF00E162F8EBEC7E
+ 26974DD62D2C2559A492DAC62B8BE9109F336DBAB167646739217202A9C80179
+ FD6723C0D4A09CEAC34B5D6F75F27F9268FD0336C55654A3ECE5173925194925
+ CAED6BEEEEB6E8ED65DCF27F895F0CF5E1E229A6B9B76D2AD266522E5269258D
+ A2C36D0B32174653B5BE6DC727A9CE42F396FA15F58EAFF60D3279AF2DEE1A2B
+ 002CFCDC5DBC9CAAB2ED3B9B39DAA78C8CF186C7DFFE13F057C1DF0E7C058752
+ F881AAC56F0EA0C20B2F0A6996D75670CDE5920CB72CC64766192C55E5003636
+ C7D54F037DE13F07DB789EF3C51E01F87B0CF35E219EDAE225975995D95937C0
+ 646904513C809F9436583AAF07E46F5707C5719395174E568DD2764A2DAF36EF
+ F35747C5E2724A55EBBF636524FDE6D495BAB515AA6B6B3B6B66617C25FD93F5
+ FF00F84D26D5B5BD37517F0EE892DA58DEDF5E4B1B695A7894C6121F31DBE7DA
+ 255291C7E6658C6369DF93FA59FB3C691F0AFE1078017508EFB54D37C37A599D
+ 65835355126B73997743E5A6763A46BF2871C120B06C106BE2CF8BDAAFC5BFDB
+ 2BE15783BC313785F50F0BE8D06B97773749A996B67BA9EE648CA98C3319E67C
+ B1662164618930719CFD03E08FD843C55F0FEEED74BF1A6B1A6DBB59D9AB4D3C
+ 7A95AB2E9D1A8006565911B392A30159B0CB80B9AFC9F8D3111C6D08D2C5D750
+ 9B6FDD83BBE58BB74D2EF7D1689ADD9DF525471184961331C52A14D36D28B4E5
+ 357D74B5DB49AB68F95BB453691C3FED27E2693F689D6B5AB3D2EDAFA2B0D5E1
+ 65BDB0B4B995A592CC3A30CED5605580E7CC5008C11CA823E47F007EC3B7BE30
+ 7BA974BD035EBAD374FB968E59EF993EC773294DE0A468A8634629D5C100327C
+ C0B71FA41E17F85DF0C3E15EB96D16A5F12B4ABCF0FDD3249A844F657464D425
+ 31B958E6DD98E28F76D6456491DF1CAEDEB7B43D3FE0CF8FBC39AF683A3FC586
+ D366BE8D9F50967516B1E856D029436ED2B3491D9A488F92D37992B637655A3C
+ 8791F1256CBF0EF0F83849434D7924D69A36EC95DDBE5F3763CDCFF1B973F66B
+ 0F87A8E9C124A4E9D4DB6B3BC6E9A5AF5E9777BA5F10EBBFB045E24F09BDD7B4
+ 7D3DFF00B37FB62FE68352823FB562365FB3C0186D7DE7C9432EE090AB361764
+ 64AF23E2BF80DE2DF8277B750436F25AC1A5E9136A7711D94CD25BE896A56695
+ 11D9577990C2AAE5B820DC26EDBBF78F7EFDBD7F674F14FC2DD2756D6EDEFF00
+ 4487C3BE289111753FB7886C20B04ECAA92C973390AE08694C680A41B4AB0111
+ F8C7C53F1E7C5FA4F863C610D8DC6A11787F59B4B617724F6AB682ED20904A80
+ 22C6ADE4F9AE81727612D14AC0C81B1FA0E4D53178EA4AA53AD0A91BDACD79A4
+ FE6B5D2D7DBA5CCA860F0F3A2B1941DD3EA93D2D7E6BDAFF000A5AF4BB49B4D6
+ 9E13F16AE2F2F45BEAFAB59C3F65F2A5B6B58394DCC19E30CC1482583672B9C6
+ 36C7F2AF03CCEEF48682D8477CB796F149265D6550BE7E4ED48D5405E5B21989
+ 030AA30466BEC47FDA93C0FF001C3F690F877A97C52D1E3D0FE1EF876CADF4AB
+ 8B4D1ADA499EDE25FDEC8739569A79A4F31DA523286545C15455AE43F673D6BE
+ 10FC54FDBD23BEF1D4DA7F81FC29AE6B7F6A82D64944769A659CD2EEF272B900
+ 24270B96CB372C324E7F4BC1E755F0F424EB61E4B920E6F97DEEAED18B5BCACA
+ EEDB5D7757FCB338C9F0F52B737B55ABD5BB68BCDAFB4FA4536AD757BEDF30E8
+ D75F66D52C65B88E4479B66DDD1336FDFB8B15217B2B28CF0A4139E993ECDE2F
+ 4F107C38F065AEA5A9F87EE2DF47D5A66834E95CFF00A3DDBA825B1C2EEC7CDC
+ 3120961D0F483E38FC46F07E93FB5E78AF50D023B1B8F095BF892E6EB4EB6494
+ 79496A971208A0520A955F21210D8C807A9E315EBFFB4CFF00C14BFE1EFC77FF
+ 00827CF857E1A47A3EA11EBDE13D6DB56B7D42E628950ACB13C72C7907E6037C
+ 8A368CF28C39520F56655B195AAE11D2C2B942A5B9DFF2269B5DB6764FD4F0B2
+ FC642861F1105897177D93E5BA8DEF7FE6BD92E54FAEBD8F27F873F1FE0F030B
+ F9EE16FADAF2D479B6CF6304691A2E724A9036860645203370C54F05707D27F6
+ DCFF0082B378A3F6BBF87BA6787F52F23548F478A38A1BD9A01F6F9591700CBB
+ 731B37BA8E49E992C6BE31B7D42EF599D5249A3554696DA34473B63C64A051C8
+ 03184C1CF1EF56BC39F65B5F0ECD7570CAF788ACB12E4969198B0321E4E30030
+ E0F3F2B60D7A55F8472E962618DAB4F9AA41E8FB5F4FB8F3F07C518C943D946D
+ 15696AD2BABDAF6F54F5EF635EEAF24D519A2FDF4925C4AAA8C991196C8390C0
+ 1C7042E79601783820D63788353FF84A75FBAD3AD66927B5B6636A3CB973BD4B
+ 606C5000E8BB79C862C38F9B02F69E0F81FC1D2788AE8C8BAB6B4CD6BA25AA67
+ CC688168E5BA04F2141062560396326398AAF7C11F09B6A9E2B56BC792DFED03
+ CB8D8B8026DAA4855C64821950024E39240CAD7BDCD0A34E557A47F3EB6EF6DB
+ EF3E7271AB5EB4692BDE6D37E8F6BFAEFAF91CA78535B5D03C13AD342D134EB0
+ 2AC4C0F2C4B00E4719C050073C1F6E31CAA6A6D2398564758833E0CAD9603AF5
+ 1D09F97A1EA3A53B4EBD46F0F5F46DE6046DA8A047F7896DE7E6E7B20E3D4FB6
+ 6B3AD99A399515635E0FCC0F38EE7F2F4AF6A9D3B4A4FAB7FA23E62B6239A34D
+ 744BF56FFE01D669B791DBCB69F63CCD711C859990FCCC546EF94050005EB93E
+ 9E95475BBA7B6BBBC8649367D8D9962500B2B92486C8E140C863EC4E30472336
+ D55A0D5A38A495639044769671E5A12A5860E781CFE7EFC5375275683E41243B
+ D8C91A05E0824007AF4E0E0F3D319EF4469A4EE15714E6BB5B65D8D8B3D457C4
+ 1A7BDBC31BDC5C42C6647E927272401E9D0E07239C724119373671C6A1D2EBED
+ 4BE4A82C01E1CAFDCE7FBBCF3DF0303B5374FB8934D9A29A20D0C980C9B8AB0C
+ E1B9ED81E80F6E73C0AD4D6BC1CD65E1C8F56017ECF35CB4193F73940CBB4F1E
+ 8E71DB0A39CD3D212B37BEC1293AB4B9ADAC56BE9D3FCB5BBD8CDD266B5B236D
+ 732067689DB722BEDC018DBCFD771C0EA01E41E6AE6BBAF497FA758DAC8D70F3
+ 69FBA11B9B72C2A082028CF07707273FDEF6E16EE392FBC3334919996DF4F486
+ 3F9811F313971D7A0724F393C8E9C0115B59AEAB64E4B430DC01962D8C4C72C4
+ 9DDD3A600000CF1EF97A3F79F4328F347DC8BDD7DE4619610ED23E729C1CE636
+ CB7DD18C7CB82738EE3F2EDBE13F8ED7FB6AEAEB50B8BC9A1B3D3AE65548546E
+ 9AE446FE4EE638215AE244662082149C60E2B83BB89619163713451AB82720FC
+ 8A42E782727823EA31CF7AF4FF00D91FC2179E3AF177883C33A7797E66BFA3C9
+ 6B2170A310A4D05C3B1672AAA02DB96CE467183D6B9730953861A552A6C96BE9
+ D7F03BF27957962E14A8BF7A4F4F37D17DE72FAD2FDA5DAEED7ECB0DBBB24011
+ 98298C85E7392719C8393D08C75073DDFC36D5AEBC3B652C7716F05B432917B7
+ 0EE916C0EC0A9CBF3C1539079DAAC493CF395A8F832E7C1DADBE9772C238AF23
+ DD14B96562BE62969001B0ED383D483857E0FCB542CEEBF7D38696488AB07544
+ 1BD8BA10CBBF273B8A90036D2491CF0335CB53931147963AC5FE5A1DF0E7C357
+ 739692BEABCFAFDFFA9B3A7F8674DD53C7D710DC6A51F87DA4DE901DE5A37895
+ 416889CEE8D5D1CE4BA8186C7203670BC6576F6FAC436B7F224D6FA72AAA4B34
+ A4BDCC4143E01EA08EEA36E3685E181072742BAF2F548EEA39A4916166749517
+ 6B5B36498E40BD368DA3E41C103A0C035B09A15F5BDEB5DDCE8E754D3A378A3F
+ 30EF5DACD968958A95DAD2008CA7E52E1140E58D68A9B84F9A52BAB5ADA6FE5E
+ BE6CE6956F694F9631B3BEFAEDE7E9DD2F5343E14FC4DB1F0C6A33D8F88ACDAF
+ BC3FA9A471DDC92309E6B54F90A4F082400E85480B9C323BC78E411EEFADFC31
+ B09357B86D0A69E6D0E15692CE6F106C81AE50B65264779360501893CB10C19B
+ 0DB8A1F3487E0BDAF8BBC1ED7F0C823B2DEF23CF30F2D509619883330DCDB95F
+ 04860318192A08ED7E047C67BBF82DA15D787BC4DA7D9EB9E0FD42E3F74639CC
+ 9244E982BE5CA15F6F1D4119C615B0B8C7CBE71CD52F88C15F9E3F143BEDAAFE
+ F24BE6BE47DC70CF2D392C2E3ECA12D633ECFF0095BFE57DF5B3F539AF8DDF0F
+ 752F053A0BCBAB3D36EA7850A235D22BCAD8381BD5C02BB5B70901DBD083F2B6
+ 69783256B4D617CE9ADF32451C5022EA3324D2A8677C0F2D59830DBB83280996
+ 27690431EB3E376A10E81269B67A2EA3A95FE890CECBA7D85C41E5C964C5379F
+ 270F20D8E581C202B80808E4B9F34BFBA8B5705B49B5BA6B756CEC0A4CD30C12
+ A32B824B7CE761F9873C9DC73D196CA788C2454FAF5B5BF0DD7E2BCC9CE69C70
+ B8F937AB8B5A377E9DF5BFDC9F749DD1ED1E04F1AF8CFC597D359B5AADC69B98
+ 9E612DAC6CB70EAAB80D30FDE066D878CFCC0E48CF27BDD3759B7B3D5236F186
+ 9BA1EA704702B5B3693A8BF956B985D76B8401C2E5DD8812A30CB313960A3E64
+ F0A6BD2E9A1AC91A160EA8B74EB339441852A1771E064A7EED93793C12318AF5
+ 2F855730DBD8477F3986E2F2611CAF0CF0FF00AE3B187DC032E031CED2CBB80C
+ 81B4FCBE0E6D952826D592D928A69FADEE7D2E459E2938AD652EAE4D34BCAD6F
+ D773E98F0C7C54F1B785BE054BE17B8D2ECEF7C326E5AF6C6E2EE2463A089E36
+ 5F32399A42F107F91DC0CAEEE70AEE49FA73F67FFD8C7C67FB5D7ECB7A26A9E0
+ FD3FC2BE20D43C20F2451985FEC3ABA2B9DD210C3F773658B6149CA8C2F0715F
+ 9EFA7F8EEEEDAF64D8BE4CD7DFBA8E3B0B2821419DE73F326DC65769DC9B480C
+ 4FCA001F467EC87FF052BF89FF00B347C5984F8626D1EDF43999206D36554DB2
+ 202DB437909146AD823042B0CE484380A7E1713954E8BF6D4E11E652E7BA6E3A
+ D9A7DF577DF6EEBA9EFE658AAF8EC3BA5819DBA72C92716DEFAD959FDEF5D192
+ FED3BF03EDBC2DABDD5AEA375A97C35B37B6F2B5AB0D42194B0BB48C121D5761
+ 4DEEA0E186DDAE76AE3682FF00D90BE026A5E22F12DBE9BE1FF85CBE28B3D516
+ 059B529B4F9AF2ECF98C0A04267FB2C2F85671E6A29DA431E99AFA0BF6F0FF00
+ 828AF84FF6C1F0CF85756D53C2367FDB1A6B1459A787CF2C083950AD98D97278
+ F33760824C6AC361E63F675F8DDAD3DEC371A6C3358E9DA7DA334171BD218AC1
+ 0C7164472BC4C5D9A352BBA24B750AEBB58602AFCA66B99636197C9414974F7D
+ AE9B3BA7CCDFAB7E5B1F59C25859E270DEF518471117A5AFCBA6D757F87BB56B
+ B7ADF63DB66FF8254C36FAA47E2AD3F50B3D76D7CB16E34A830DF67B84E5E266
+ 859A360920E56391B2CD80B9C93E99E33F88FE29D37C0767E19F07DCDAFC33F0
+ E69A2DA3096D06E8AE4A49B99E4947CC0C8DBF29956C05041C572DE14FDBBEDE
+ E74D91F53B1D42F268EDC47F68D3A60A9344A001102772A463FD5C6819A22CF2
+ 4B202DB14791FC4DFDA7EE7C75A8C9F639B4FB7B599E381EEA6BE8E595255CBB
+ 22333011B939EB9012304B1666DDF8FD1A79E626BA58BD79367A68BE5A3D3BAB
+ BED73EA72BC8F39C5E2230CDE9C1C612BC65251E5BE977CBAC64D746E375D91D
+ 5FC49F8BDACEB1E36B4BAD3F4D586D6D37D9CD7A6DCC0CCCA3124EECA5880CC0
+ 727E65518C8258087E2A7C4CBBF136BBA4CDA3F932430963716AF234C526F2D1
+ 5A50E703600548236821F9DC706BD9BF63EF837ACFC65F074874FBC5D23C39A0
+ EF912F459AC8751BBC07C012AFCF18185DCC307920E080BE53FF000805E4DE2A
+ D37FE29F9A6B3BC9512EEEE2FF004682D5A43F22AB107A06562091B77004038C
+ C51A946153D9F2A5ECD35BFE77B6BE97B6DBA3D9C2E3B2C78B9E1128A961D59E
+ BAD9A6D735ED14ECAF64DB4DDB4675965A368BF113C10BA1DDAC96D0C88208E7
+ 8A41BECE75956600903263F2C3B2E0F04286CAB1AF2F2D67E34D7352874BD375
+ 482F347BF7D5ECAE23BB4DC599D89088546D521A4F9327A119246E3D2B58DF5E
+ FC3CD5F52D2619D743595DAF8C96F2AC96CC2368D1A108C5F3B8AFCC760000EE
+ 307C53E0A7C57D46F7C45696BA868EB1DD59DB79973399648DDD91999F07F8A2
+ F9C11920B020F504D7B19560E4E8D59D295D277B5F66F7BAF4D2DE83C2D3846A
+ D4709B6DBDB56936AEEFF868EEBAEB72FF008DED7C5507C50F155BDBADB58AC9
+ 676F7D18993ECF6F756AACA26472555965523CCF9B86500853804F9E785B51D0
+ F5FD62E2DBC2173A9EAD69A883FDA564A856028FE644EEA19F2DB82F0410BC82
+ 396C57D21F167C79FF000967805D7429F50D6B4BD3FCFB4B9D02783179A71901
+ FF005331655F2DA6019508C00DBD30C761F8B74DF13F843C0A352D552CF505D6
+ 34F958CFA7C2FE4A5D4457CB2090C51F0AB26E1CAB2BB7243135F6DC3F6C5619
+ AF6769C6CACBBAD3DE5A35B269FE3635A78AAB0A1FBE6A2AEEE9DEE93D3AAD5D
+ 93BAD747A36B57D67893F63DB0F03F81757B59BC69E137D26463E5596ABA9C33
+ 6A5A14AC154B2CCCB13BDABA11B8A2B6E0176E70A6BE67BAF08F847C07ADDC47
+ 737925F5E69B861145379CACE08655556551B0AB0EBB8E5721597007DC9F0FFF
+ 006C8D67C3DF0EADEDECFC21E1FBEB2FF5E53511FDA13DA2247BF2AEA02B150C
+ 7861BB7672C09217CF7E2AFC32D17F683D7ECE4D1B4BB7F075C688A355BDD474
+ FB7B6B9B5259B077C5C8DEECE1940565206EDC7048FA0CA73CC6D1AD2A59826A
+ 0FED271E9DD2BBF2D2ED9E5D5C17EE1FB3A6A5AFB8DDF5BF457B59DF6BBB743E
+ 65F08FC59D73C59E3BBBBDBC9AFB5CBB0ED71C4B32868951D423146DA23505B0
+ BC1E8A08CB06FBD7F647F8EBE0FD63C45F6EBE6D26EAE1A258A486484DC5C3C4
+ F2891A205B6214CE1FCC65988550A1410A063BFF00C1352FA4F85CD75E07D52F
+ BC49E2ABB559B57D49EE3EC161A74522905582603B0054858FCC0BF30DC71589
+ F01FF603D4B5AF126BD6B710DAC77DA65B349713DDCD15D4571748A484B331C8
+ C4B8F9577BAAB2B9E14E6BCFCFF36C9333C34E2AA7228AB69A3E9D1D9DBB3DFA
+ 9C796F2D4A7530B8BA8941DDCDB6D34EF6E89B57F35B356EE7E9B780EEBE1AEB
+ 7F6BB4BCD73EC5E198E574B0D160B9FECFD3ED97CC7DC3CB42ABF365981CE4A6
+ E3803205EBAB6F841E26D663D2F45D3746D4A2B88247BBD4C22B430C488C7799
+ 5BEFAA85E4860142E720E4D7C33F0D3F66BB4F01F88E5F0E78EB54913C45A6A2
+ 5D5D47A74235192190BEE6818AB6E384278CB6DDC48F97A7D09E19F19787FC15
+ E01BF9921BCF0FCBF69686C05AC64EA1AD81B95249C0C288B2C80C651BCC2B18
+ C96193F86E6595D3A2DC3095672BECF65AECEF7D7FADCF93CE383E961E4A581C
+ 555A8E56B72DD43DEDA49AB73DF7BA5E72D15CF9DFF6D5F87967AA69D7935958
+ B476FB770BBD3CA5D05F9BEEABDBEE4CFCC48C3C6D965DC814127E11F11783F5
+ E5D5E383445D4A44B0664B296EE13F67B26C313E5C521D9F3E49264438273D41
+ 2DF567C7DF8EFF00DA7A85C4DA86A12DA7DA08B66B896316F2BEC623E5015515
+ 548DA421FBD9C63680DE0BF137F6A3F067C3EB59BFB26FAF350BE650B1B5DAC4
+ A508E1C911CAFC291C36E01B83C015FB4708ACD28E1D53A70E76FC9DBE7FD7C8
+ FDA1E5B80C1E5B08E7F88E49455F4766D2B757F72D9BFBCF5EFD997FE0A03E2C
+ F87BAEFF00C223AC5C6BDAD2EB528FED4D5750922BEBBD3624C289ECE268D9A1
+ 655591DD5640A3696017696AE37F6FCFD9F7E1EDD5EEB3ADF87F5EF885F133CE
+ 66BB6B8B874B1D1E36DAA4C92B20966BB9C96DC17CE84EEE3014367E1DF1BFED
+ 5775E25F1035C2DBDB8B18A6E1622C8CB1647C8465B0A48524E32768E4818AFA
+ 23F615FF0082BEF88BF6619AE343B4F0D68D7FA4EA52F948FA85A4DA98B39793
+ FB98D9D638C03B495CB63927049AFBEADC239960A5FDA78187EF2DEF4135152D
+ 7BEE9AE96E9F8FE2199719E4756B54C3D18FBB276FE58CED651E76A2DB4AD7F8
+ ACFAADADE2BE3DF843E2AF8A7E106F115868B79A5F80EC65317F6F5D5B9B7D1E
+ 35660A123BA70A923E5546C427D79DDC7CFF00E33D46CED64923B5F39DAE18A4
+ D78325AE48C6155997818C9E3AB2E5812171F607ED67F1AFC4BFB5EF8B64D6BC
+ 6175FF0009C6A5A8CD1C1A6DAA4F88A3DC020486DA105075185183901CE470D4
+ AEBFE091FAEFC21F04D9F8E3F682D72CFE13F85750C35A5AF9D1EA3AC6ADCEED
+ 91DA8983C78CE72C091B892B8E2BEE728CF30F83A3159849424FE1846F26FC97
+ DA9B5D7DD4BC8FCB38930B89C7E27F7367296B2936A315D5D9BB24ADB5AEDAD7
+ 4D8F91347B5FED2F0BAB9864B5B79A6CC93C19DCEA1433E4925782A98C6DDA4F
+ 3B8F23175CF105BCBA9B8D256E20B3570E8AECBE67000E7B0C1638F4249CB1CD
+ 7A07C65F1BF87EE2F26D2BC1DA65E69BE10D3650217BB30B5C4FB73B5E6648D4
+ 3B498391938E4124601F3FBABBB511BC623584424891924C3392C700E3938F7C
+ 679EF835F798594A4BDA4A2D5F64FA7AF9F9743F3DC7A85397B2A5252E5D1C92
+ DDADECF7B79F52B68E8F17972B3158572A8081F336093862080383938E323B57
+ AAFC3AF8471F8D2E2E755D724BBD33C29A5C705D6AF7110F2E79DE566F2AD2DC
+ 1C837370CAEB1A648016495B2B1B1AE93F637FD897C49FB521BEF12C8D1F863C
+ 0FE1D3E6EA1AE5C45BED2D7716D9144A48F3AE1F6B0445C9F94B36D40F22765F
+ 162C2FBE25DF3F86FC0367F65F05F84C4A5EF6F270D0C66408B717F7737DC69A
+ 4006E27EFA811A7EEA250DE26619DD1789784A335CD1F8DF4827B2BEDCCFA2D5
+ ADDAD93FA2C9F289AC23C6D48B69BB4236BB93EAEDDBBEAB4F5B9E07E35F114D
+ F117C64D7D70B058C3004485233E5DBE930AA858E28F71276A85DA092771049C
+ B658FA5783747B7F87161797D745239ADD2293CB8E2C2A049E22CAAE3218047C
+ E4024EE20F40064DDE95A17876392D7435B9D5ADE0665B8D5E450A6F6462C842
+ 020945C0C1E416C11B803BEA0F8B9AEC36BE12B98A4825B737C5AD7ECE4AA2AC
+ 9BD32707E55C9439EA40C3705B92B4FDBA861E09A83D3E5E9BAF9EBDF534A315
+ 867531555A735769EEAFEAB47EA9BF2D0F0FD325F26C2E5638E42CC43AB28CE4
+ 282483D3238CF23F87B739AB0CE366D18E4603AFCBB339C83C7A67EBEF4CB49D
+ 5216C293B815639EB9E4718F51429611300AA3712DCAEE3803D7F13F97D31F5D
+ 6D59F9C395D25D8B1A70C457CA1269B6C24ABA310B17EF132CC31CA95F971C72
+ C3E94D3A7C96F6B1DDEE0B14D23A05CFCC76046208FA30209E0E0FA51A7881AE
+ 312472CA8EACAA14FCC095386C7A06C363D063DE8BC492D70ADE62ADBBEDCA8E
+ 15B27273C7F74E39FE1F6E025DAD71C901685A7E13ECFF00395195390CAA7E87
+ E61D3D2BA9D3EF6C74EF01EA5657D0379B2959AD0A01B94B47D58E0AE0831F00
+ 8237E4E4AAD72D6DE62A49B184797508BB47CD920EEEFDD17A7AFA66896DDBFB
+ 3E1996E0CCCD2B4462C30F2C288C83E9B58B607FB9DB8A8A94D4F47DCD68D670
+ 6DC7B7E65CB3D5CC5A45DD982C63BA50AC0B60021A3738032392A70781E87A83
+ 6F49D291E2924B7591A192564321254C600DC0E17EEE17273C820376C8AC4B59
+ 0C71F97F758F45C0C13F53D3FF00D633CD5EF0F789AEB46BEF2EDDB6A48C55F2
+ 9BBCC182BF5CED24718E323A1344A2ECF94AA1562A71F69B17F5AB876B558A41
+ F3424956D992172793CF1803800638F53CF4BFB383B6A5E3CB984CDE5C971A7B
+ 428CC9906579123881C1CAA977504AE303D3AD574D5EDFC4B66FF68016EE4DD3
+ 445DF0ACE4484EE04E589E00272CDB4F7C61DF077555F0FF00C44B792E621722
+ 68DE078005569216460E0360E5990614F62DF4CF162AF2C3548DB5B33D6C1454
+ 71D4AA5EEAEB63D22FFE1F4DE397B832C335F6AF718DB19DAD79708FCE4AAB6E
+ 755520617213A9076E6B93B88164B49A6B9B73249F289D32F1F9CE84657838E0
+ 80C013C7000C00B5EB1FB5031BEBBB9D72131C8B3C71DCDBC9641922BA6943B7
+ DA2240408C3B3AB88F9F2C9923249535E73F10FC5D0EB1A2DAEB9F6A97529AF9
+ 0C7791B4A639ADEE78FDFA1CFCDB95973BD4B7EF587F0263C1CBAB54AB4E337B
+ 3E9D9AE87D4E634E9519CE2BE28F5767CC9F5D7FC9DD1C559EBB633456DE736A
+ 1F66B4FDFF00951CCD22C08482CA158008A5F6E5B3D48FBD926B47C417FA4E9F
+ A025DF8796FAC56F56586EED6E1E3954E106428519E98E59411C06C8C938371A
+ 56FD4E493CC45B72767DA596428AD8DF824AEE0558AAFCD9E4E7A0E2C688D2B4
+ D1DCB5BDF34D1C0822B8B5CB3A9552BD49185DAA39076AA83804673F413A51BA
+ 95DE9D2FA7CCF928E2AACA2E124B5EA959FCAC43A6DAEEBE45B6B8861B9B5019
+ 4484C6B0B03CE09041DA4679273B4007B0EBBE1CDE43AD5C4AD1F9D6AD02949A
+ ED93FD0D4B12BBE4E9DBE5391CF4C82325BA46AF6FA2450DEDB5F36B51CE5277
+ 867610CD6332300048E319036E54EE0A410182E401D56A3AE780FC6BA0C917F6
+ E5DCDAA2A6C58FECF25ADBCC0B6788F3B4B6D58D724AE485E8AB5C38BACF6E57
+ 67D52BDBD55B6F5FC7A7A397D149DF9D732E8DDAFE8EFBFA7E07A2E9FF000FED
+ EF348B7D07529A38ED6F6349F49BD91D2D842CDB9916199A448A605893E4BB44
+ 1B27610C581F387F817AA785A751BA1BF10C804D3DA6524B746E07991301E5B3
+ 6000ACB86DAC017E09D1F0149A8780B4C6D3ADEF3CCD1DD04B3E9F7F1EF5B990
+ F3F2021E30D955C903E6CA12092007DDEA1269BA8DE25A3DE5ACEF2AA2BCB2EC
+ 8519B3DD4B15E70A71819E70BB8E7E7A8FD628CE7184D34F5F5E97F2F34AF7DE
+ F73EEEB54C2E26953FAED36A51564EFEF256D15F69A5D2E934BDD4D4524A1F09
+ F84268E690CD656CB1C500FB3AB33A940242C7E6C31E42E70700EEC64822BAC3
+ 730DA3DD42D2496BE5E1639E29159636237026321472FB180DE064761963DF7C
+ 23FD947E2A7C5BF863AA78DFC2DA7693AF68BA05C07D552CE785AEEC5194F96F
+ 245904C6EC242AC9B8175642148DA6F787356D4ACB52B08757F0AE93797970DB
+ 20B6BDB25FB423EE20664011E342BB000CC320124E071E063339A73A9254E519
+ CA1A49292BC5D93D53F2D75B68EFB1EBE5793E1D53F7E538766E178BBDB77177
+ 5A356495CE17C37E1CD50E820269F7534CD1B1B4B0B289A49D95176A3150000A
+ 7CBDA3030718E46ECFBA7C21F853A5F852FAEB50F1595686487CD8F42805F595
+ E5DB10481E62DBCA9B7736374AE1538F988E6B99F899A378C3E0E7C4B974FD6F
+ C2DA8F807579A225A1C4C149C7072CECAEA7AE57209FF809AC3D5FC41ABE9976
+ B36B7AE7896E34F9A6116E3AB186D5D71CFCFE536E3D324372B8181D47898B8E
+ 231F4B9A949463257F75EAF6D13575F34EEFB9F4385CEF23C04951AEE7292D3E
+ 1B24F4D75B3D535BC6DDBA33D53C0BE0CB3F885AB35DDC3AD8C771705A0D034C
+ 91B54BB917E61E512AAC7CB50D8DCE5FE5CE3839AF49F8DFE33D53E087826C57
+ 5C8E1F015ADC0DD6B06A7198EF2EE35E43476B8DECBC63CC20E339C1E48F20B7
+ FF00829B7C43F85BE1B87C3DF0CE4D47C2F2DDC0223AC1B99352D5AEC18C8658
+ 64B8665B68C8E73146AF90395C90BCAFC2D83C0F3F88AF3C4DF1A7C49E28F176
+ A9ADCBF685D36D26FED1D72FE538563737974CF1DB2E4A641F3643C3322805CF
+ CD54E1FC5559FD6B315FBB8FC308FBF37F2B72C7D64E7D6F6B1F4F85F10960F9
+ F0D94528F2D95EAB6EF7B5BAF4BBD3952FD4769FFB405F789EEF50B65D4AEB4D
+ 82DDF7CF74439BABB38455003E55D8EE1942EA46D6DCE46557D43F667F00EBDF
+ 1F7E22697631C5FDA773710C36F13990B25A6366C9253B4873F31C65C60B33EE
+ C8E3DA3E13FEC1DA47ED55E04B3B7F0F5E786FC1971AA402FB47D11EE3CCB9BD
+ 8006C4688504F3A8214F9D36E8432864202EDAF66F87DFF04F5F197ECE1A5DBE
+ 93772336A02E2DF53D4AEEDC96652EC7CBB65958012CC58630A4A0CF19C391F3
+ 39E7186534A8CF0F866A9D6D55A4B55A5AF7D13D77B36AFA5CF672ECC2B471D1
+ A38FC5C6E9292BB76BEE95AF7D1DB5D1DFFBC7D0DAB7C674FD997E0ECFF0C3C1
+ 363F6ABED06E64FB54B6ACAAB345FC4AAC76EE930CC081FDDCE4018AF3DFDA53
+ F687907C0CD3556D6E3C3D7C6197EC7651ED99E494AA444339F96362262E547F
+ 09191B98D51D0FE1D6B33EA525D5E5E6A11C2ACF71737171186FB32F3B98B30C
+ 040564C90307CB6E06D19F32FDACFC493D9DC69FE0A916F619347BD69A612A91
+ 713298620E141272AAD1C927CB81F3FCDF7411F8F607054F138BA7097EF1C5DD
+ C9DFE7E5ABF9EA7B1C3BC379756CD29434A93E6752A4EEEEEEBDE6EFA59C9E8A
+ CDABEEB7303E115E7C416F80D7D6F73A7EAC6F164496CAFED96292E62837049C
+ BC2A416882365BEFB305071B88057E097862EF5DF1279FAD4D6093471DB23CB2
+ 05558C47187DE38002ED1B88EFE61C64B62BD2FE057886F3E29FC57B3F0F69EE
+ DA6D8DD69A2CEEA48AECC4D18236F32A91C6F75E3A1DCC0800903A7F875FB334
+ DA0FC4FBFF0003DC5D4C8CBA8DAA4B78E8ACAF089D55B0FC330DCAABD06739E0
+ 815EC623368D28D58C9460E5EFE8B549DAFF0097E27B58EC761F0552B2C5350A
+ 8A2A696ADA8B766DEFAAD1DBCFCD9E31F17FC1561E1BD7ACACAF35BBD10788AC
+ BEC7E5593F971EA2258D5099A62378CAB46542E1898F03692AA7CD3F694FD917
+ C2FF0009F49D0AFA6F1368F7BA758DB471450C795D4910070C1A72236958740A
+ 50020A00C72587D23FB7F68327813E1EC967A358C5ABEBDE0BBE7D4ED5A54492
+ 054D90AEC2A15481B213800B1DED18E5B047CEBF08BF691F15FED5DE04BCF05F
+ 8AB4DD0F50D261B7678F51B9B611C5A332A33199711ED6D84E4AB124EDDA0907
+ 03E8F87F1B8E9E129E614276A5176A8AE937D9A56DECFC9EF6EC7872AD531F87
+ A55DC6F7BEAD696B7BAF6F4959B8E8CCFF00D98AE74CD43C4D7DA2C7259DC5AC
+ 33FDAAD5DEE8279F031DE548C630460B47B0F2CC49240C7D29E2EFD92BC3BF11
+ 7E164DA5C3A9A697673B1824D53ED91CD721C04293799B86444C70554B651DE4
+ 50AC8D0D78CFC53FD9CF50F81AFA3DC58C3A7EB1A96A216FA49B4BB37B75B47C
+ 64A1C3347860C54AE5B1BD88E08DDF52FEC9FF00167C3BE29F134361E2A5B5B9
+ BA8630973652B155923088A8F116620850198A162D8046338CF0F1266B579566
+ 596C9B8A7B2D5E9A5ECEDEBAAF91D39D51C4D2CB218BC349D484136F913D527A
+ 7BAFB6AB556D9EBA33E26FDACBE157C64F82FE1E8FE1EC3A87F6B69367BEEB56
+ 7B4663737AA50B297DC4928A191D0AEF62A73B54A6164FD913E22D8F857C033E
+ 83E28875678EE2EC5DA3473793344FB0AE77B1C12431DC5BEF75E0F35FA7BF15
+ BE08B7C33D366F10783D74FBAD36E55A33A7EAC19ECA3DD827E561BA2660823C
+ B705711B606D53F296B5FB25786BE22EB7713DBEADA4787B5BD424F2A5D22549
+ AD5EC27911B614976324B16E192BE58755391BB680FCF81E36A18EC13C36229A
+ 8ABDDCA3A49CBAB925B7AEDB2EC8E4E0FCFB24C54678CC6F3BD12E68DEF192B5
+ EF049F25B75AC93DB9AF6BF35AE7C7DF0AD8B4874CD0E49AEDF32B4F34EC92CA
+ 41190A42B2B1C93DFB0CE092A3C8BE3C7C7EB89F50B69649BFB4608ED24D4A5B
+ 282E6192E05B4603C8016F9542A862CAE0300AC369C51E38F831A87C35F1ADD6
+ 9975E28B17FB0C88D70D613F9E21DA188019C2799B5BAABA8209C85DBCD799FC
+ 59B7D23C357F6F7A357B6D61AD26324DAA69D6EF26A1020E0EE46610CE1704AA
+ 92A245DC0920E6BE9323CA7012AD19D3BCAEB4DDEFB792F2FC0FB5CDEB617038
+ 5588CB65CD78DD4E526DDACBE14F5565FF000C78AFC79FDA0BC3DAEEB5FB8D3F
+ C4175A5DD4A925EDBEB3A8B097288E9218F62B44AEFB18F9D246CC1D540010ED
+ AF99F531A64F7C64FB1DC3DAB393046D77B9ADB2494573B403B71B7206D23270
+ A78AF67F19F80EC7C4FA0B78AF436D452D23B958AEAE1EDD120DEC37C681810A
+ 80AE0EC258018C00B9CF05AE780A4B5D36DE3D3EC6FEE8B472094410C8CD6C47
+ 049DA58E0B292A01249DC0105881FD1991C30D86A51A54AE9ECD37DBD7FAFC8F
+ E52E26A98CC657955AED38EF75AA77D3A6E707A94FB2DA1B782DA388DB0DC22F
+ B3993CB56233BF25BA6E396C02A0E323A08F48B9B1D306ED4ACEE6EA5C8F2D24
+ 3E54306E4248D9C6DE33F28E304F5DAB9BF736DA8477566C1A5D36485CBC0863
+ 11BA9194C95675624654EE030304F41CF39E31D5AE35249FFB62E3334082DA36
+ 6404165FE02546412A482491B9464F401BEBA8C39D72F4EBAEBFD7CCF81AD594
+ 1BA9D7A2695B4FEADB1E89F0FBF6CAD77E076AEDAA780E1D37C3B7575198DAE6
+ 18D2699C05018833AB9424673B58741CE00AE07C51F15B5BF8C5AE3EA1E26D72
+ FF0054BC989324979725B3F2E010CD9C05191824632060722B9CD3EC64D56468
+ 6DAD66BA6C9124B041E73140464AA85EBB40C6EE075E320D743E1FF833A96ADA
+ 6ABCF710E9EAD2EF78EDD4DCDC386C05CA2B0451B8B7123C600638CE4035F51C
+ 0D0A8EBF2A537A735BDE6BD77F91CF4F34CC6BC55295E54D6BCB7B46FE9A2473
+ 7E22B2864856484DBAF1B1899062224671DBAFCD8EDF875FB6BF604FF822E6A1
+ F1BA3B1F187C64D52E3E19FC3BBC549F4EB1B8468F58F1229FB9E4C3B5A48616
+ 07E59E58C870E0C71C809C61FECEFE20F875FB26DB5BF88E7D36C3C43E2DB79B
+ 16B7B7312EA29A6B212FBE1DC05BC2E0E4ABED7742321D4E48D6F8D9FF000547
+ F88BF15A1B9D2F458FFE11BFB5BF9173A9F9F24DA95E92D8E6762244DEDB4111
+ 9C6776EE304FC86799A6798D4F079247D9C7695695AE975E55AFC9D9BDF45B9F
+ 4D83C8B29A12FAD66F575D1AA505777F36F45F735E67D7DFF0506BEF827F03BE
+ 13E8FE19BAF1559E97A0681014D2BE1DF8651EEB55BD25064DEC8CE16CD640A3
+ CC96456BB9090A150280BF04F8AFE3078B3F6BF92C7C33A26896BE11F01DA5C0
+ 8ECFC2FA34496FA746C3EF3CA47CF3CA76B7EF2625BE73F747CAF4FE167ECB7A
+ CFC60F17AC8D0DDCD7D35C06695A765070C2491F240E7099200F5EA71B7E865F
+ 05787BF65EF863777B1F931DDF94D6561011B4090A85690152C4EDCE73820FCA
+ 31C0DBF2385A783C929470D4EA3C4629BBA6ED65296F24975BFDA95E5A3D6C7D
+ 861B0398E6A9E2313FB9C2C55BA26E2BECDECB4D355D5BBBB9F2FF00C5CF0ADB
+ FC2FD574FB3630B7D9E5F30CB3165DDE4CA83CBDD93BD9D986E56255481839C1
+ 1E33E3BF1B49AD6B6B7D70B1B5AC9B5EDC0C2AC71972FB766727059B3CF71FC5
+ 9AD8F8B3F13E7F1A6BBA95DC527970DECA446C57CB69631B88C038E033336063
+ 96CF18047322C23D36C20FB44E56F0059551D558449824678C8CE4155E0E5BA0
+ 1B4B7EBB95E0E54A946588D676D7E7AB3F27CE7328D7AD386134A77D36E9A2BF
+ 97F5B1C5A318A55381B948E08CF4F63FD6A477CC5B548D8C72DB7D4671C7E3FA
+ 9F7A8D959555BD0E7E869F0B91010A5B76F05403DC67FC7F0CD7D09F15E4242E
+ 22941C6E5EE08AE8B4D82D351B8B80BBA1B8921F31BCC62C8EDBCB118504F4D9
+ 8183CAFA1AE7E05599555B8E796C74FF003EFEF5B1A16AD71A7DE46AB0B6D915
+ A37CA1F9C77DD8E4E1BAE08E001DB1513D8D69EF67B15F4C8D1A4FB3C8BB51A4
+ 4904E5798F01BD723193CE78E3AF7A76A29269DACDD5A9B75C96783CB2B828C4
+ E06064F2303BFF00F5E69EDD2C7C4DE5C73A476B3153E617FBAA718DE013B5B9
+ 04807E53919E3224D6F516F145EDD5E4C8B23311733F947A12AA1CF7C6588E49
+ E30783D04DDDEFD2C525656EB7FC0AB269D358432212DF6691B6FEEDBFD6609C
+ 363F03F9E3AD57D42DCF9ACFBBF76E7EF360E3F13CF43907BFE071B5668B72D1
+ BB4F096F2C8549A3DA06015C9201C37520B700F7EB54F5DF0EDD5C6A370F05AC
+ AD0AB16F97E62177151DCE41C601F538F6A233D6CCA9D36A37457902AAC7344D
+ 3AAE4A86C1DD9C67EF63A9CE78E9F8E6BA48FC47345AE5BEB0D6A55A39E391D1
+ 50ED9B60DCDBBB2EE196E413C7A62B2F4496155FB3DC2EDF94920862785FBA7D
+ 41382300E09F4CE66304D62CDE63491C339DD230180E003D146091D7AE4647AE
+ 40CE567A33A28CA50F7E2F5BDFE68F7AD13C696BA6F83FFB035579A6B555FB46
+ 977B1C243D899906F8D14E4885D9B790ADF248432F2F26FF0025D5348FEC9179
+ 6AB79677DBA5C871703733E40CECC8DD8E4EF5DDF77392320F593D836BFF0000
+ EC75652D25D786673A36AB91BA48518996DA627701B4AF9D1E4F68C1E9807CBE
+ 5D45B524BBBA67896E262BC4A577039009DAE0EE5EA30A7239CF18CF8B95E1D2
+ 73945D9DDA6BCD3DFCAEB5F3BDFA9F59C418B8A74D4A09A9454A2D68ED2576BB
+ 3E57786AAE9C6D7D0D7D5A1BAD2EFBCF5926B3BA4910472A44FBE565DDFBD2E4
+ F0C38CF38396E7E5AAF65E2DBBD3B585B85D4AE96480E44B1A6D903A962A158B
+ 0CEDDCC7B039031D319F3EB17533797717576CB1B9F97CCDAD0FF081BBDC1E07
+ AFE351ADDDC47928C2699B0BBC95B8DE400A0F52320310BC71C632C063D98D3D
+ 2D23E5275D737342FF00D7E1F81D9DAA2F8FB509A69AFAE04D6E31BC469B272A
+ A79774540A4AB39CB64367A9E4D59D37E10DC1693ED3E759AC6AD2878ADC9806
+ 42827CC2DE5AE3A763C310080A0717A24F6F6D334970FA842638C00B6EAAB231
+ DB9C6FE7E565071C724FA026BA5D47C70BA6476F3E97A9788638ED808A217AC8
+ 4AA9CEE556460446704654A8F988E36AD7254A7562F928BD3D363D2C3E230F28
+ 7B4AEB54FBEAFEFEBF33BA5F877E2CF09E930DC47A8D9DC6971BA8097DE5C647
+ 42D8494F001DC87A29C81D0835E89A2FC4FB6D76D5ACAF34CB7B3B9BC87CD9BC
+ 978350B795DD47CDB27694A36EE4B4601079180F8AF03F075C5F0D45DA5BEF27
+ CC4DCF9904DBA22AD8F98316561B872A01FDE631C807B4F87BA2F8A35EB392E2
+ DF54B4B2767F3B2668E4DC19B059A4E64552A140DECBC8249DCC09F0730C029C
+ 3F7D2575B3D57DF6BDFEEFB8FA5CAF36E495A92959EEB497DD769AFBD7CCF70F
+ 813FB4178A3F665F114DAE787B5292CE4D42CE4D3AE9ADAD5D62D46D5C7304CB
+ 8612A638C36718DFBB8C8CDBAF1FDEFC61F1FC3AF6A97503C8D6A9FBF4944227
+ 263CEE318E80E3200F946D001C86C72F65F1FB54D1AFE4B3BCBEF0B492BC42CA
+ 716B1CB6AB3C2AB8642EAC8B8181B300931824641CAC7A56A76DAD6AAECDE29D
+ 2F498E19F75C4136A2095456C978B74806589C10096E87839CFCEC329A74EBCB
+ 135692536ADCE95DB5DB449FE07BD8ECD275B0CA8612ABB5EFCBA2F796CDB6DA
+ FF00C9BEF4CFBF7C71E02F8F9FB4F7C39B5D5923B4F1C58D9D8C16C6EA2B7125
+ C6D846C8CCA5464480051B8850793C8C6383D2FC7BAD780FE02EA1F0B3C49E19
+ D3D45F6ACFACF9B7A8DF6886631C70AA03211B910AA95DAEA49046086C575FFB
+ 007FC143345F815E29B38D75A86EACC6C78AED2E8E94CC719C7CD9849C11F299
+ 06723E6E0E3F473C75FB4CFC1BFDACBE1B2D978921D066BCBE8CC6B078874D48
+ 6E2663D364B11576C96E0C4CFEBCE6BF2FCD2BC300E385AB856A9292945C22ED
+ 75B3B47556EB749061F1D8EF6DED39F9AA28F2F47656B5945AB35D9C7E4CFC63
+ 862F863F0DBE187886C75CF0ADE4DE34BFBDB59B48BE8646096FE5ABE70A8564
+ 6679194B0901C2A024026BA8F843FB28E97E39D17C17AA5EF8F0697737577711
+ 5E2A58A493450261562B48095F3EE59D5860FC9109A36775DBB2B63F6BBF80BE
+ 11F871F1496F74F924BDD35672F6FA342C1ED1E41828ADE680EE839CC6768382
+ 090090DC8F833E215EE8175A7D8E8E745D1759546379A8C10C4F1E8D08531ED6
+ 69A36677C82C2441B54A2A44858E6BDCA93AB5F0DEDB015657936DB97BC97BB6
+ B2524ECBAB496AF4DF43ED327C4529D25431B4E29A5CAB9538CAF7D24FCEDB6C
+ D3BB7A36CFD1AFD99B4DF0EFC08F85D1F86F474D5F44D6FC61AD40FA9F89966F
+ ED0D6B50B4881262824F282019119420AAEF76DA094661EF1E16FDA52E166B5B
+ 6B2D46CE0D0EE754BC8EDA2056E4E8BA6DA6D22696562E6E352B96311452CC53
+ CC57604F2DF993FB3EF8F35AF18584D75A3DE5D45A2AA4D8956F7CED4BC47894
+ 2B34D3BCAED1C654A8FDCE000083CEE56DBD4FF68E5B5BB9AD57515FB2DADA3E
+ 9BBED2278167F300325B5B0643B59BCE9B7CD3640501549F96BF15CE7836AE33
+ 1338D56A73EBBB69EAB5D5BBED657764ADA5DA7F79FEAEE5F8EA4B11525C8A6D
+ BF795D3E974DDF6F7527B5935F69A7F667ED0FFB4DC371E0DB8D2E392DDB50D5
+ 34685A1B6B45F2E0B6BB9AED894C28CBA2410F964725C35D11D467E18F889F17
+ BFB3756BCF12789F539A0FF8486F265B5516F15F6EB48C5B379AB970332B330C
+ 138DAACA0E3728E2BE36FED25068DA6B4B25C37DA258F01DD447BDC46B118D46
+ 49F29640B1467042A3BB6E2735F3FEBBE34FF84BB5A82DE3F3174F82589DACE4
+ 7925C91E52E76A8059958007182DC8E14E07DB707F87F0C3D1BCE3EEBDDDB5F4
+ 5DB6FF003B1D188E20C16474BEAD95EB2DDB7BEBCBD16C95B45BDF5D6C7EACFF
+ 00C135FE28DA6BDF1B66BAD52DDA48B5F91849F6C9442EE59D5E158F84DB202A
+ E770CAEE428C114E6BE8EF8BBF15ACFC2BF1B6DF58B73677434BF3228581DA2E
+ E0431A3C8C5B91279ACC181195319E0005ABF3FF00FE09DF1A7C599B5E6B246B
+ 3D2E155BC8A611C4970AB1711B33205F9CA22F1D49666C12FCFBA69BF18352BA
+ D76EAFAE5ADEEB7130A4323C7865F37CE0029C05DD221527A1048C0F973F9AF1
+ 364B1799D5A315AC52BAEB66BBFF0056B799EF63329A39D637FB5A8BBA74D45C
+ 1BD1A7749A7FDE4BCAC97A5BD5BE30F8B757F8C7E1DF148B18238DBC45A55F4F
+ 77A6CB21915ED44EEE1C64603AC2E5971824918232437C87F00EF21F84FF0014
+ 354F0FEAF1218D4C9657CA18052A37231CE42F4C9CE4F07382715F437C32F195
+ C78BFE33D8DC5ADE37D93ED06D4CE10C8209D95D9262368DCAAC1438E73B8E31
+ 5F367C7A8BFB7BE22F88BC53636ABA7DC79B33DE416F9FB38732FCC55598F04A
+ BA90FC617800702B87B0FECDD4CBE6AD1924FD1B764BF03EAB8529D3C153C465
+ 5522BD9CE9C65EEFC49DEC95F7764BCDE8AFD0F5BD3BE226A367E29B0B35D624
+ BCF0CDC5C79296B2BE6D948393B979DA777CC5876FEF2F5F74B8F873E1BF8C5A
+ 85D5D5BE89A8F876EE4B62D205B22D059CEA02C6A8CA4ED507059B0548DC418F
+ A1F81EFF00E28DAE8B61A8471DDCDFDA91C32DD456D32F97FE8F0DB2CCAE467E
+ 570A26CE491F2119F5F6CF83BFB79F88FC21A81B7B7D735DB576B68E5B5B1FB5
+ CC8D7476C4044801D8776F6653B72C148E48E77CCB87715C8AAD14D3B74D2FF2
+ D9F9B6679FE5BF5A8C6A64D552AB14D6FC976DAF8B469B7E6BA5FB9F4D7867C5
+ 2F6767616F71E21BED5A2BA371F61D2E0826325D49196578846D8CB7CA640A32
+ 5812319DB5E57F1DBC471EA79BCD2B508C6AD1441CCF6D70AED3B6039123B486
+ 5C654E7CC8D0AB646C404E789F17FED1B71E3E8B549964D536DF5C25F4D05DEE
+ 9235650CC254724F97229560368191C67A8AF19F8C5F181AC25926914CCB7CD3
+ 4A8ED37992C5B9A43E501CB943C7CAD8660C49DD824E190F0ECDE2AEF77D34D7
+ CB4D3FABFA71E0785EB6026F1D89F76D7BAB2B5DEB669249F6BD9DED76F5E58F
+ D51F08BF689F0EFC66B2D365F89919D5F4FD2DC4BA2EA7A9F87FEDE6DE44C8FD
+ E18B6BCABF283B721982900763C97ED1DFB19F8ABE2C7C619A3D27C2FE15D521
+ BF824BA6D420F11DC6E9216C9578EDB5093F72A38644858ED65C60A92ADF1BF8
+ 73E2AC7E0CD36F352B17D72F2C6330DC4D7FA54DE5DC6932ABA0DAF095292206
+ 2A8A7E50AC48C82327F487F67AF18D9FED83F032E7C31AE78ABC1DE30B97B54D
+ 6745D3AFE382DEE2DA26C2B047C33A90DF7A65672AEC432C40003D4CEB29AF90
+ 5458FC236A9BBA6B5B476D5455968DDDA6D27B9F9DE71888E1AA7B7C3B8C63B3
+ 8BF82377F146292DDFC5AA8EEEF7DFE0EF8F3FB272E8FE2DB384E93A359DD339
+ B4922BD8DA29EFF7155597CF96DCE58BB0DFE5A95223C827712DE05E2FFD9E35
+ 8F0DE98D7FAA58EA16BA75F4DF668F74EB179B2AED76D90ED572C5761DC50EE0
+ 08208CE3EC2F8CB7DF06FF0067376D3F58D37E247857C4D34E5237F11B2EBBA3
+ 3E186E16FB5D5651F3601329653B7804115E6775E0A5F8CBA74BA86ADA7DBD96
+ 8A2310D96B516937F710CF70EDB6349A68259D9770F9B64926430C26D40EA7F4
+ 4C9338C5D2A31A9372F67A6AE2EF2FF0D9B4F5F3969F238B1D87C36322F9E9FE
+ F35EB151F2BDB64F56B45F7DAFF1BF8CFC0B0E89E2E6B5BAD06F2DEF2CCEDBA8
+ EFE758DED9C6DCC5F781C9C21C38EAA5882720F0BAE786A2D2ADA36B7D2FC3F6
+ 69B014712A5CB290E64701833377EA0920F1D5811F427C4EF873E09F05F895F4
+ 9B8D4FC451496312C37B75736CEA6DE404928B6F3AC722EE00E374A0E013B7EE
+ 93E583C1FA3DEDE899AE2EAEA1B52B16D8CA798554B2AF2C300E548DC430231D
+ CE4FEB596668A7053F7AD6EA9EBF7FFC3F73F2ACDB2A70A8E9A51BDFA38D97DC
+ B5FC8E12F343778E35B7BC92FE389C95590318A2C803A48C3682123CF7FBB8E4
+ 8024D3A6B8D7A41670D9DC5EFEFC2992EDD9D5C9CEC2A00F9F24EE19215C7182
+ 4823D5BC3DE06F0DE9FA9BDD49246241205E5F718DC93B57FE5992DC1C14CFCD
+ 8C7CC307D07C19AA7853C1F6F25C5AF87DAE2E266FDE35DCC6E094EDF27CBD70
+ 71BD5C92AC7B914F17C40A9C7DCA6E4FA74D7CC9C0F0CBAB24EA568C175EBA79
+ 597F91E59E12FD983C41E3BBF592FA187508ED4013044482287017A938033C90
+ CCE9BB209184017D3B47F829A0FC39B7FDE359DE5E5E9453E4B94814846DC848
+ 0A65E8546D0A87032CDD6AD78B7E365D5F584302470C166C4C70A1030B19FBAD
+ 1A463CB0BDC0551BB6A0C7A79878EFE33DD785A3965499DEEC83E5BCCE21DAE4
+ 022301896560CBB71C386DFC0DA45785CF9B662D464F95765A7E2B4FC8FA0E5C
+ 932A4E718B9BEB296BF72DFF0035E87D0BAFFC71D0BF673F0735AC30DBA7882F
+ E358E47FF9F5842165B75C02D8C637061C29DB8EAC3E2EFDA0FF00687D47E347
+ 897CD5BA9FEC96C4346B34E3E65F3172CD919673222F0B9C0008EB93CE78FF00
+ C71A86BD2792ABE7365A56F3B180098C83B0E48C6D23249C6EC1E8CD5C7CF3C6
+ 229AE2FAE9A69258FCADA58B4BE5AFCBC027685271F772321B69E01AFAEE1CE1
+ 1C3E025F5AA9EF557D5EBF72E9A1F11C55C6F8ACCE2B0B4FDCA31D92D36F3EAE
+ E17FAAAE8F37FA135C497D1A91F6B2A32C4E36F9231B908054649E0138553C1A
+ 568B7137CAB1FDB24254295467F998A0652400431381D72324672D917B4FD05B
+ 54FF004A98C3A7D8E096BA91836C42006380048D9638C0C9C1E99C929AA6AD6B
+ 6D6F259E9BF6BB78E31233493E7CCB93D3B12A31B5BEEF3F310598600FB452E8
+ 8FCF9EAEEF4EDFD6DEA7125B8DACC5B9E3D3FCF4A985C7FA3C7198D446189CE0
+ F248507F2C0207AD57FBB8FF0038A9E6665ED27DD032C7D87E98FD2BB4F1E231
+ 1C43387FBAAA470BC9E95A90DD4DFD8B222DBC1E4C877193CB5DE4E38E7A8C61
+ B0063BD65DBA077185E8A49E7AF5E7F0F4F6AD5D1EE123BF92031ACD1487059E
+ 4D9B57040C9C10074E71FA6454C8D29E8509E596E0F993348ED9196249241C9E
+ 7FCF357AEF508ECAFAE231B9637CE4212B8E082391923D8F4CE39A82E6E55E79
+ 248F73063908D9611E4F0BDF38518EDD7DAABDDA2B5C261B77C833B474C7FF00
+ 5B142D42ED1D6F86B4EB1F10A47E54DF659A3854CAAEC047B8C810E012383B90
+ 9C9EEDD7202C9E37D32F34AB98E79A59A3468CBC632C55B053382401BB731C8C
+ 6063BF5AE42C2F8E9F7AB2C6B0C8554F12A074E98CE0F07BF51DEBB5FF0084B1
+ 6F6D6DDAE9FCE8E60AAC96EEA5E2C064560BD4632495F94160A7E6CE6B9AA465
+ 19A92D51DF46B42749C1E8FC8E6DFC4F344CB1F9970618CE5237943119EBDB03
+ EF1EDDD8735E8DE2BB75B5D2AD75611C37315F5A02E443B959C36E900CE7E5CC
+ 8791D0838E4051E677DA5059223E6298648FE56550C188CF030719E06403D4F7
+ E33DF7C2DF112CBE1B6D16E6466B7FB52322671F249C10A76E770DE4F1D4907A
+ 2739E2A36519C3A3D579335CBE7794A9CFAECFCD1D57C0CF10E9FA5DEDCE99AF
+ 2AD8F833C696434ABB9F2245B324868AEB3BB39825447FBB9D9B97A631E5FF00
+ 10BC37A9781FC6BA8787F58B18E0D534799AD278012CAB2838C8C1E73C60A9C1
+ 50A7918AED7C3B7ADA1C9ABF85758FDFC12279B69751A85169216C875F980D92
+ 291BB07241047CC2AF6AB6E3E39783563963F27C6DE12896D5C6F63FDB7A6C69
+ B530319925B75E095E4DB8524318989F3A94BD8622559AF7256BFF00EDB2FBBD
+ D97A47A26CF7EA47EB98086113FDE53BB8AEAD6F3A7DB7F7E1B5EF34AEDA4BCA
+ 89F20ABC66191780419381C8E465B381C0F9B8EDD4669D35CF98CA55A49258F0
+ AAFBF1989571B49F60140C63A91C8C526A30CB6DB59E18D63722376527692463
+ E639C8276938C8E54F1D6950FD8FF7723437131CA6C2BE61CF6233C73FF7D7D3
+ 273EDEE7C9EAAFD0277377708F3155456C2891B70DD92304E39FBB93FC3CB74E
+ 82E1F26DA253249234864591D148DA9872BE9C370C3EEB6339CE78AAD691C53F
+ 97B6359373302DE661622CA7B92323018F518C0E48C028B33348AF1C3246A8A1
+ C884F97E4B20C6EE87247049C77EDD4CCB5D0B8DB7674FE06F11C2DADB79D7CD
+ 636ECE85992C52667601951100508DC9077151D18F3C831F89B521791BC56F26
+ E85544643A790B0167CB6DDAE54AE5739C9EBB860815810BB5CC3B21563F6566
+ 21549665EC7200CF60370C7604739096ADE548D1EEF30C8C770503CC67EC554F
+ 3C0C00393F7B919C1CBD8AE6E7FC3FA46D1C43E4F67F8EBFE6751690594E5CB5
+ BCB7312ED503CD5B745C0C3295DADF2E79524679C7DE56AEEFC3BE239B4CD293
+ FB1F48D09A368591EF1617F2E1662537A34C17E75C600FE1383C9CE7CCD250B0
+ 5A3429235C49B0A4A106D04B0F997E5CB67685ED8DB81D485E86CEEE5D5F7DA5
+ 8348DA85C0F34C85CFEFD87F128206D6520924E3B8CF04D706328A9AB4B55E7B
+ 7CCF7B29BF33B3B5BB6EEFDBCFFA5A9A7616FA94B7A6EEF352BCBAC3068E3594
+ FEE142E06EE54636E0004E093CE7927DB3E147C61D7BE1A69AB27877544D223B
+ ADB6B38B77692DE03BF05C43B97CF936A1273B42EEC2B2677D78DF85343BCD42
+ EA150B249753CA9E5A08F72A4670D9201C96276804A85500124F45FA4BE0CFEC
+ 57E30F895E0AB8F156A0BE11F04F836CD0C92F8835BD7638914C797CC31B0696
+ 624AE40B785813846C0193F299FE27094A9A78D9452D16B6D7CADD5F64936F6B
+ 3B9F6395C2ACA94A9E1A2D456EF7D7BB7D1DDAEAAD7D1E867FC43F899AA788A3
+ 71783EC5326677827895AF258CE4A492A461624DE48C2904B06180FF0033B62F
+ C3BB69BC61A8AE97BA49EC637DB227DAB124CDB83B6D5CEE77C00086238DA4B6
+ D5446E4A2D41A1BE8F4B80225BDE288D5211BAE35052380C016F959090C8768D
+ 841DA72457D43F07BE015A7C04F8730F883C63343A65FDEDB89A1B15947FA247
+ B46049C01955DBF2A15030A73F2E57E6B38C550CB70E95BDF96908ADDBF25BE9
+ F81F63C299057CCF1BCB0D29C35A927A452F3D96BDB4BF4BABB3D57452BE0AF8
+ 777524D3DAC6B14662BA96373944E556188701A42808E02F25B1B41AF9B3C71F
+ 1657C4D7875086EE4B5F0FD8EF1667C96DB6F087264906D208270A8A0004B4A0
+ 1E146EEFB56D6757FDA62EAE21D2DA1D37C23A3DA4B79717054AC28AAA19FCF9
+ 7E545CAAB6EC90082464202D5F21FC66F8C1178A2F2D6C7475371A2DB118B83B
+ 59EEA70AA9BF6842C004C228196C12708586CF0784787E55ABCDD6F8F797F753
+ D93E9CCFA2E88FAFF1038AA9617091A583FE1A568BDBDA3564DAD6FC8AEAEFAB
+ B1D83F88DFC79E35596EA7B3B758EDE48D0C930F2F4C11281F658E2F94CAC84B
+ 6E3CE4BB600E08CED2B5C377AF5D5EAC6F66EB14B2430436F298FCB7DCA919F3
+ 72C7702ED92C4825C06279197F07FE1A58691BB55D6260C2CDD02C7344EDF6D9
+ 0B975B74880DD2B7CB202412146EC9070A7A8D0FE16F88752D6E6D364B58CFDA
+ 19EE6E846822B75454673BA4462AC91A6300ED5DCE7EF719FBFC44B0D4652846
+ 565149765A6F6EFA3D7FA67E4F869E36B53854941B949B7DF7D9BB6DAAD3E7B2
+ B25F5EFECB5F129BC03F0271A6DC2ACD75226E8C3B393170A541C825495C83D4
+ 05524F415E8D7170D77E21B6D66FE687EC979A65C6ABE5798E563586220AB283
+ FC72619580EB18C6E3853C6FECF9FB316AF79FB38C9E292B79756DAAEB2D6563
+ 12593EF92CEDD4C9777014E0B612311A8C8FBC3032E377D9DF0CFF0060CBAD57
+ 58F09DBDD786FC9B7D5346311B9BCDCB716424B59668A062012ECABE421CE36E
+ F7E482057F3B711E6996E13135B10E6AEE534F6BE8AED6BDB6F54D1FD2396F12
+ E1B079052A35DA8CA2AF7BEAD25AAB75B68D7DC57FD8E7C28B15EC7791CAB6FA
+ 4E996305D9B59E4DEFF64B9B44492450D82B8B8C6CCEEC364F1DBE6CFDB2FE36
+ 6A1E30D366D45ADAC6D756D3AD66D3752896D56DCDD4D096B7986D0312799E49
+ 910372AF2C99CEF515F6AF8FE0B5B7F8636FF0E7C237A758F156BDE1ED72CEDA
+ F180126A02DA6F323446180320E54F1B8AC7D49CD7C4FF00B52FC6A83E30DD59
+ F8B8DBE971F88EFE0B6975486E638E18CCB25BDBDA4AF2B920AB26C47123020F
+ 9CC304C4D8F91E1597D6F34963674EE9BB2BE8EC9B49B4FA49F36AF668F1F2EC
+ 74B11889E2A5EE3E56A2FED452BF2BB69EECE5CCEEF64969A3B7CB3E3CF1DCFA
+ 57C3EB1F10693A85DDC2EB96E9A2DCDD3868E4B60080F095EBB4AA9C16382A00
+ F945737F0C7E376BDAF2E8BA2C71DFDF6A9A4DC85B34B6CACCF2C4E66B7DF110
+ 45CAA8136D8F87E5C2B8DDB6AAFC48D6F50B6924D02CA25B15551147E56435EA
+ A46F16F624B98D8C415180CE5924E79CD787EB4174AF1047B141F225CF9113ED
+ DAC1E20CFBD43676B6791B705140055401FD3D95E4B87AF41D39A576DB8BDF46
+ 9DAF6B6C9DBA5FA9F97E71C518CC2E23DAC24ED6E59AE8F54DDB47D527B5D3B5
+ 91F707ECBFFB5AE9B378A62B0D6A7B7D6AC56EDADE69239D899601CB32B73905
+ 42BAB63EE900A8DC08EF3E36693A2C12DC5898FF00B434B908B8B661232EE52D
+ 80724901D4E148E396E0D7E735BEAB3E836DA66B16F70F34CF70D1DD2C7FBB64
+ 2DB8ED11B30FBE15BEE9C2B44DD0E01F6FF03FED4327883C2D0DBDE17D41ACD0
+ 13E7AEE12EE0A368C821548DB81EA4636E063E7F3AE0354F10B1981BA5D52D2C
+ FBA3F42E07F1894232C2E7179DD5B74D35D2F7BFF5A1D74BF0FADFECAD75A06A
+ 9269BAB35D1B7759A758D5ED8A10C5CB6448031C00001F77209DA07DF9FF0004
+ DFF88163A0F8D25D275AF06CBA95C5BE98EF7D7B6F0F93231CED0B7303859278
+ B602C97488B221210EF0A1A4FCE282C750F1EDD5BC5A0DA0D42FE309730D92FE
+ FBED50A82AF86DDC90DBA22B804F209E403F7BFF00C1313F684F12681A46AFAC
+ 5CE98B77A2F83D522D335096F3ED579E1C5273716723B0DFE596CE5242015750
+ 76111BC7F2BC7186AB2C9EA467693B5ACDD9DDE8B55AFF004F7B58EAC6FD531B
+ 0A92C05392E65A2E6B27E8EDA6BF3F26EC9EC7ED3BF1AFC77F013E205DEABF0B
+ 6D74BF1FE81AB330B4B2D6741593548A3DB9C59DFC71E2E49048FF0058655C9C
+ AB119AF93BC73AFF008A3C67E305BBD5B475F847AF5D49189A0F10DE5D69105E
+ 2324A89BEE2E2E76C0A7CC60BE624686455C36E519F51FDBABE3C6A1F0D7E2EE
+ A5E2AF857AE7883C0379AD1696E7C3D72F2A58EBC859DBCCB39FE6825CB337EE
+ C37CA5B0ACE5B0BF2EEB3F1035CF8C8B0DDF8A3C0F1E82B7B14D7306B4BE1A59
+ 6D9CEE5591A53708C4C6AC42995080A18038CFCDD9C1F94CA383A755C12BC526
+ F69EDB38FC32F549B7BDEE7CDE676A4B965CD195959351945B5FCD35AA71775B
+ B5FAFA67C563A5C9E1B834BB5F05F892EAF74F8E4B15B6BEF115AEA56B6D2A44
+ CA6E7EC91C3B982AE4EF05A11B007CE0A1F9CF54B8F0DF8D6D2369F4D8A1D4B7
+ 319EF2DC42905CC47E6DB1C2988D10306CB92410E70546057BFF00833C15A17C
+ 30F057F64F88FE1AEA5E2AD7358B08EFAD355F0F6A7656716AB05BAA22BDA858
+ 9F7B22FCCE21632C8CA5D83F2D5F38FC58F8EBA46AFE21791BC1FA747A346AD6
+ D6FA7C8F04B22CEA8511DA75896566DCDBDF76D390C303827ECB8768CDD4951A
+ 309593F8B996BE8B9DCACF5D1DB6D75B1F2BC4138C6946B579C13FE5E57D7BB5
+ 14B4DBBF6D0DB8F5ED1F45B59DA1D06CE459306376B96972A0FC990651C7C830
+ 3A65B23B16AE3C792C91409047A7C45A201082615772B956270CBB4F3C86CFDE
+ DB9038F133E26B38E69997C390DF2B334622B8F3202C7702C9FBB65DCD923BE4
+ 2E4F3C814753F1D2C564DF63D0F47B58ADC488E52291BC82172815DD9983AE0F
+ F1104103AE49FB2A790F33D6F7F37FFDB3FC8F89C4711420AD1B24BB2FF28AFC
+ CF48F12F8DAEF5451A74D7DA6DADB4B13BF916F331692404E4B08D4B71B540C6
+ DE4640E78F3AB9F1D5A5A5A18C5C49A95C4C5A4F36462165390C39C9607E58FE
+ F3E4E0648E318BAE78AE6D5DBCF10D85BDB4CE6621E046C8F95095661C9C1030
+ 41E993D01391A8F9A96AB0CCFCC6C5A48E356C37023195C2AE41CF3C13BBBE45
+ 7BF84CB614D24F4F247C9E3B369D4936B5F377F22E6B5E277BF7B86DAB636F24
+ C03C76C822330EAC47AF41EB8247726A999A4BD8998DB5BC522E36E611F2B292
+ 557691800E549CE49249E85AA8DB5C25E1F265DA376D085A4DDE5800718FEEE0
+ 1E339191C9EF62D205999967BA8E154F924424B321272C5075CE37719009EF8C
+ 01E9F2C62AC8F19CE73777ADFF00326BB7BE8C35C4DF6A9A6B91F2EECB795B54
+ A9F971D00E800C018EBD049A7E8325EA35F5E4DE4E9CCF244E589679CAA670AB
+ FC446467180370C900E4432CF6FA6BAE2DE1BA92320092652428551C08CE57EF
+ EE3F370D95E07CD50DFDD4D71234D2C8D3DE483E599E4E1403C851C739C9F4C7
+ 18A7AF4138F7FBAFFD5CE6B9014F6278E79AB662FB62EE8776638F730C82460E
+ 091DF18E7DB9EC3354970586ECEDCF38ED4F597CB6E8AC3183C5759E4A7DCB97
+ 71BE9D78ACA8CABB76824633F88E33D3A1FC8D5FD3EE3CED55E45DB1C291B4D1
+ 2B3B7AEE0A0E0F2189C67BFE548D6E9A97875440B235C5AAF98FB40E7040CE01
+ F76E79E147A9228E9F7BF60B98E46623C971220233B581079EFD3D3AF1E9596E
+ 8E85A495F676669EBB0AADD492323B5BDEB2CAB2038F972C32063A704600E8A3
+ D89CDBED35AD6E644CAAB2318C856DD9C1C647739FA62B7EF6DA0BB3796B0192
+ 4F2434D6C5CE5844065791DD47079382060632451224B4896397CC93764A961F
+ 781DB8CAF507E5C67AFA138E1465A17529B664792A9758915C2AE37F18FAFEB5
+ BFA088EFB42B8B7669A45B42260327E556251B03F8412C9CF7C60F6AC7D5AC56
+ 231F96932A6D51F3763CE703AE0F38CFB8E719A6E957736997CB347B86DDC8A5
+ 79C92A471F5CFF00FAE8926E3A114E6A12D5686C5FCEABF68B18D96E2159C949
+ 555B320C11CE4EEDB8C751D8F239CBAC5AE344D476B7CB0CCA030663CA71961B
+ 7B614F23F849FAD3EFEE237B785E1F264698B054D9C460703EF1EEACA433633D
+ 3DE993F9AB65B5A48E6591847BC481442C7FDAE3D01F6DBCF1C9CB56765E0B5D
+ 743A2BDD67CEB18C3491C8CABE54334711321032C002338604A363183C106B2F
+ 49D79B43F12DBCD0DD5D5ADF595C0315C7DA7E5B728484231CAEDC9EE7393907
+ A9A373ADDE5848D1BCC6168C90427CF2C7BD483C9C6E539CF53D47B9A8EE5E2F
+ B04B0C2DE5AC8EB2B3756DCA18104E78EE463767D79E52A6946CFA87D61B9A9A
+ DD7F4BFAE8765AE490F89DA5974D5B5B2692369E686083746A7665CC5C0C02BB
+ 898C602E463E4FBBC8AD85BDD18EDFCC7C36D0C25CEE8C9660AC3693F2851C9D
+ A0E580C1CEE34AD3536B299419645651B55B1966C7CAA327A018EDDD7DB235AE
+ BC416BA9799FDA07CD60AE56681829763FC4C0827923B6DE0E29429CA9AE55B7
+ E3FF0004DABD7A75FF00792B2975EDF86DF77DC226971437B1C73C90B46EED89
+ 00618C618B7C80862A39E8C30DC8F978A77D61F65B6B811CB26F52525DC9867E
+ C3E507E5E09183EE0FBF45E15852E2E05D5E48D359BCB860C158B0C85DCC393B
+ 47191C8EB919041E9B4EF8671DFC7E459EA5A6D8DC5E464C733CA3C94FBAC416
+ C3370A642A4018EE3915855C64293B4FFE01D186CA6A6257EE575DAFAF96ED2D
+ 7A6A8F3ED3269ECE056686153E5E55648882183F014E372107FBBB7807E6C601
+ 97ECD6FA7D905B58E5BA999C092258D96365DA491D49DC7079EE09E71907D03C
+ 7BFB2C78EBE1DE84BA8C5E1FB8D5B44689FF00E26164A97B69B0631F346481C9
+ CFCD82392093D38DD33C2B71B65B966565B76545CC2776EDCADC020E1485621C
+ 0392C0756A9A18FC3E223ED28545257E8EFAF676D8BC4E4F8DC1D4FABE2A8CA1
+ 34BED46DA7757DD79EC3ACA00772496CAD7321019DC24B1C79651C22F1D55816
+ 623AE0FCC722F69C2D757BE86D5A46D36D9B10930CEB2396701B396DB80C5303
+ 77CD8703E6EB5D068561A49D5D63BF5BA8DFCB1349E549B96E0327CBF2EDC8DF
+ BF03009DA148C96047B77C3EB2F833A2E8D6EDAEF84F52D79B7875920D7A5B20
+ 09662A222A9963B8038C8C119E8A4D7939866EB0CAFECA736FF952FD5A47D1E5
+ 790CB151BFB684147F9DC95FCB48B7EAFF00130FE0F7C17F07F88B5F82F3C43E
+ 32B8F0FE9F6D1A0171616A26B957C861B1098F6B1FBA1810492194639AF4EF8D
+ 3E24F873E38D161F0DFC39B0F1D6AF32BA9B9F13F8BB548AE40EF8B786155D9E
+ 6618067323700AE304AE4FC44FDA23E1BEADA2349A0F8174ED2E38FE7B9BAFB7
+ 5D6A57D2EDD8EC774AE23070793E59200FEF5793EBDFB497F6909B4BD274A863
+ 32300B6D1C4E2E24DD81F2B824B3E42ED386E429E304B7C6C70B8FC7D6589A90
+ 9C795E91938A4BCDF2DEFDD272B7747DC54C565580A2A8C2A4354EFC9CEDCAFD
+ 35764ADA5D2E6EDAABAF5CFD9BD34EF879E2EB5FEC9D0F51F1B6BB0439B34B2B
+ 632B4CCABF7991725541618427193B8F0571F597ECB9FB0EEA1FB587C4FD5756
+ F8C9F11345F0FDAF87E36BDBAD36CEEA3B85B5891771FB5DDA9F22D550124C68
+ 5E504F210306AF91FE13786F58B889ADBC75E2ABDF0EE8313347268369332DD5
+ C0180564B742027CAE373DD152BE60640F8C1CAFDB13F6FED4BE29FC3787E18F
+ 81E4FF008417E14E932A43710DB3796DAE3800879C8C4930390D86381966DA32
+ 73F3B9B64798E658B7432F9A8CE4AD2AD6E6E48FF75B56E67D2304B5D79958F4
+ 6BF1151C1651C926E11FB34D59394B4D66BDEE6492DE6EFAAD2EF5F41FF8293F
+ FC1443C33E30B07F83FF0001F6D8FC34D19D60BDD720B4368FE2764277086200
+ B25B6E0082C7CC959773E7E545F06FD92FF67EBCFDA9FE2BE8BE0FD056DEDAE3
+ 596FB34F732BB9B5D2AD4E44D71310A33B42B306E497C63F84B78ED99B5BFF00
+ 2E1FB3CB35E148942C2159980DB93B492B92063918FBBB412C4D7B9E97F1E2E3
+ F67AF81DAA783FC1ECD06B1E2ED83C4BAD5990EF15B88F1F608DB8F959F79761
+ C3676E305ABEEA190C728CB639764CBF792FB52776DBF8AA4DFDA6B7B697768A
+ B23F3AC266D571F8A9E2F349B9538ABB5D74F86115B2BB7E8B77B1F487C76F88
+ 7F0F6CBE2E5BF807E19DF2DE781FE1CE9EF1A6B3776A21B7BF9F216E2F76618C
+ 8096089BC9CAA1381C81F5A7ECC7FB49F85FF65DF853E14D264D07FE124F8C1F
+ 165D62D1A1B9B40CDA5698672915CC8BF31DCF333C9B79CF96E720035F8F3F09
+ 6E0EA1A9C2B716F7125AACC97B7CF6EE15A78D30CB0ED8F2B1A3B2C64B1FF6B2
+ 3E526BEAEFD877E32DF7C45FDB064F1B6A9169E2FED6530593C8DC5B5C240C96
+ 16A832DB506446304618AFCB9071F9EF16701D2960FD8549CA74E9C5CA577673
+ 92D55DAE9295E524BB25F699FA070E71254C7B8D1A9A4AA4E292D972AB377492
+ 56568AD12BEBBA493FD52D13F6E3B0FED4F04FC23F0DDAC9FF0009078B75AB9D
+ 22499BE66B4D320B978E69955881199A48C8073F308718195221F097ED59AEFC
+ 74F8CBE30F0FE9E31A87C2FF0006EEB7B2806C375A8F9B0CD2C0BCE3CD68A110
+ 80CB92D85CA900D7C53A17C5CD16C3F6BDB3F8C7677474FF000D6BBF6794A60F
+ 97A734ECB14D0C3B5B231746EE5087911AE7043286BD73F1AF5AB3F1678A3E2A
+ 4112D8EA9F1312FAC1DAD2E16282D1EDD3ECB7579E6A94091FDACC4CCD80328E
+ 47C9B49FCA6B7016162DCA14F59456B2E95252BCA2FF00C30BAF44DF53ED1C68
+ BA929538C549CA4EFF0013BD9DDEEF994AD6766B6D16ADAF4AF0C7C714BBFD9A
+ FE03F8AECAF2E23F883E155D6E6BC0C8DFF135B580493CD21E4ED2BC1CE72D1B
+ B804EC15E17F14BC7B69AAE8DF67BEBCD4F4D5D5EDE5B794793248F2C96E1444
+ 6E090A7E78DE3DCE149578A42BE66E1B6F6A7AC5AE99AAE97AD5BDEB1D260834
+ FB6FB2345242B7AB7B62D05EC89E49D918769B52DA597E54501194C881BC57E2
+ 47C547F10E87A0F89ADFCE9F50B3B802582EE2596DDD8C0A4BA44F90EA4C677A
+ B00A48192379C7D66539245E239A9C5DAEDDF6E56E539A8EDB2BAEEAFA1EA2C6
+ 2C060E55252F79A4D27AF3464ED37BBF85FC2BA6A7997C51B6681AE218DA649E
+ E2096286E6D72B24722B1678CA01950EA4107AFEF46072C6BC860B89BC71796B
+ 1C71C7A848D38B76E42F9AF21DAAB80A76862C9D148E49E8A56BD1BE2325C6B3
+ A76AF0C9E45BBBA8B9B794EE8D81FBE41C82430F9F006082AA08FE11E3F35D08
+ B40371263CC1705C4913856420B0930C31E5B6E7240C8C02A724723F76C968AF
+ 63AEF75FD7A7EB73F05E22C57EFF00DDF85A7BF93FCFD55ED64D8ABAE4161AA5
+ D4A90CD70F0B1478432986552307EF0C6E0554ED1FDDCE7082A293535322DFC6
+ CAB6AD2128046AEA558B85F97EE28C0C361738C95EA4D5EF19E851E9BA3E9F79
+ 6FB1AF2EAD1679CCADB967CC8795392AB96538DDC90A3D78C4BDD20E852ADA3C
+ D35BD9DF46B7104A479531071B645E01C905D42701BE6E463E5FA0A6A12575E9
+ F76E7C9CAA548B717B7979EDFD7F99ED5F027E256A9E06D5D7C45A3EA021D634
+ 5923BB89FED0521324782ACEC9903010373F2B1C038DC02FEB67EC6BFB55F867
+ C13E18B2D4BC41609A6D8F8D6C1C788A4BB73147AC304610057CB18EED42797B
+ DDB6C913C2ACDBD416FC79FD99D6E20F8850DC796D79A7DC5C18F57B5259C5F4
+ 4ACFBC862158F2549C1E57AF009AFD71FF008281F846D3C2BFB1EF867E257821
+ 5AE34AD156D3CD719683C99576793740027840D192C0A91C370C0AFE0FE28D3C
+ 254C761F2CAF1FE33E5E65A59E9CB16FBDECD7DFBEDFB27026329CF2FAAF1927
+ C9A2B79EAEE9E9AF657F8ACD2BA4CF90BF68CF89DE31FD8D3E250BEF04F88B5C
+ D63E127882554B5912E1A26B20AC4ADACE1702DE5547C81D19186385C47E0FE3
+ 9F8B363F19F506BC68AF354D52EFEEDCEBFAD4C58C9B1B805422865524AEF765
+ EC490466C687E30F0BF8905F410AF8AB4137D21B4BED2F48617D6B7FB6207CCF
+ 226C150D8918323C8149F956318079CD474FB7B7179FF086F86F5C92DB6B79F2
+ EA52CAD0DC6EDE419802B10036C8E3900797233332295AFB4CAB2F8E1E11A55E
+ 3FBC8A4B9ADCB7F3959DAFDDA6EFBE9D3D5C657C4D5A33AB82C4295096F06F99
+ FCBDDBFCA495B6EC759FB37695E14D4BC657563E3E9B41F86F6314ED7CF1FD8B
+ 51922BE8DB67EE1915D98C7185728EA564FDE1FDE1F976EC7ED38BF0B74B325E
+ 5A7C44D3BE296B12451C16C4477B670C698C63E61E613F736E2E115486E0F18F
+ 349FE22EBE7C2ABE1DD4FC3FA3496F62925CC2E6EE18AE6CC44FE5CD850C6232
+ 164E54A79CC0A139539A8FC47E09B7F1FDB8BFD52D61F0EDFDC43E5DB1B48034
+ 37EC37092630195042CAC1B8846D241013043576CB2E97D7162EB569456DCB17
+ 171FFD25CF5EB697E07CA4B1D7C23C2E1E8467E728B8BBF7DF96EB657F75DFB9
+ E63E3D874FB97B5974DB8D43CEBF8DDEF20896454B26DEE4C6BBDC96050AE189
+ 18C9EA177364A7F60D809049AC6AA242AC367F6445B40CE3064F3C1DE32416C6
+ 73C9E7AE8F8A3E0A789B43B26D42386C5A1F37E5FB3DF249245BB1CB4687CC18
+ E3E62A0655BEF6011CA45E75BAC51CC923DC4657744E8CB2AE01036E4FA201D3
+ B0391DBEE70FCB3A7FBB9DD7959FF99F99E3252A757F7B49C5F9DD796966B7DC
+ 8D64B5BB0CB64D334814ED63FBBF2804CE4AA9EBD41C0006D07272714246B7F3
+ 5BCA13B73F2275CEDCE79C7272A1BAE0671CF65B8558EE599668D5986E2FB305
+ 79E0A9E4E7BE7AE30724669D2410C9612AA911C902E54A264391918EBC7041C9
+ 07EE93919AEE8AB1E3D46E7A590CFB42C7930C8ABE5A8FDDA9CBE4296EE7A060
+ 338F623B665B6BC5BA8DDA58E5914280CA884E7A9209DE0E325B3D338EDD43AC
+ ACACD6791AE1AEB6901914AE7720C6E1BDBA103852460923A027162DC4293AF9
+ 666911983B157566906E008185201E9C9EBD48E4004A5D029C7ABB1359585B94
+ FDDCD25BB0604E582B3720E06482543018C13CFBFDDD0B3F08437A8973E64375
+ E630CC5192AA3238DC19477233DBE618C8390DD2EE23B8B4B7F25ADD64111291
+ 4D1796CE41E181C61828271B9B2483C74357F55D216CCC3B91A1B8909688BB15
+ 5C076DA43E474DC4FCA0119C91835C9526D3B5EC7A7082E5BA574ADFD33CA98A
+ B7418A15C08D94FD4526303EB4F83E5982950777CBCE7BF1DBD3AD7AE7C91A1E
+ 1FBF6B5B92BE6796B70A119C9242AE73F3639C7CBCE39C7EB0EA2ABE7C8AD0B4
+ 32672013C0EC4727F5EF8A8D5D57CC0EDF757E4006003903D476CFAFEB51C33F
+ 96EDB5770208C7518F7FC3BD4F2EB734E6D2CCBFA76B125B5E5BC89C4911CAEE
+ 19560739423AB2904839EB923D6B46ECC8F732AC32CCD6F2479589A62DE58009
+ 2371032558E70072031E87279FB550EB22EDCB3636E4E315A1A56A5342AB1AB2
+ 45233AB24AC46508C81C9E98C9E7B673D811328F546B4EA5F491A5F23C7E4B47
+ 70D1A755D8DFBB3C90303919F9BD7E5ED95ACBD52C441F318F647185E0481BAF
+ 3EB9EB9E3A8EF83D77B43F16FD9E6956683CBFDDE008A353B5492C541C6460ED
+ 61B8FCA41CD45A81B3D4E28E28196075562781E512411C1C1C16CAF603392028
+ C6338C9A7AA35942328DD3D4C7B1D53EC4CA8BB9B2173F28071D71CE41EB8048
+ E3238E8076B7BA4AE9BA549A9DAAF9FA65C2345BB1E61B7DCFF2C4C40C29DB93
+ 9202925719192785D5ADFF00B3AED82797B376536C81C7D460F3F5E95D37847C
+ 4EDA743710ED92E2C6E06E9AD518621765203A6480AC18A91D7908A4120666BC
+ 5DB9A3FF000FFF0004AC2CD29384FEFEDFE68A32688D7D00B885B75BC6AC2E03
+ 31C41F3118503B72BD38DC467038AA827FECC90ED78DA27529B80DC086001C67
+ 8E718248CFEB8EEB50B49B4746D4F4963A6DC302D711EDE245233E661B24A1CB
+ 82390763742E5464789F56D27C591C9776F671E91A94C36DCDAC60C90CAE5F39
+ 8B2C590F53804E7391819033856727B69F97A9BD4C3C52BA6AFF0083F47FA3F9
+ 19F63A0DADF869EC9F7A8C12B3955C9019CEE553D18740324E0A8C9E2BB7BEFD
+ 923C577FF0C17C5DA35AC7AB6936F1892EDE295775BE4E73D70768182D9ED5C1
+ 69E5ECADE4B8B2B858A4846DC2CDB1DC938CAF7182467EE8EDF366BEF0FF0082
+ 2B7ED3761A6FC66BEF87DE32F2DF47F18432B4725C403CA5B8C29914163F2A6D
+ 02429C28F2D86DC9007CFF0015E698ECBB2F9E61828AA9ECFDE717BB8ADEDE69
+ 6ABD0FA0E17CB72FC7E36381C7370F689A8CA36D25D37EEF4B75D2DB9F008B4B
+ BD3352649232B26D2555C70C38231BBDB0463A8C7AD751A27C429524469AEA40
+ DB56224CE47CBB703661739E14E091827383C63EDFFF0082A47EC81A27C28F89
+ EDA4D9DAB5ADABC7FDA1A2EA51E65D901258DB9E78F2D894EE000838E6BE2AF1
+ 97C3FB8F00DF335CC2B1C7190229F1FEB9D4315650465558E7A93964214B0190
+ 643C4583CEF074F1749594D5D27DBFADD6E9A1E75C3D8BC9F112A5CD74ADEF2B
+ DBBEBFE6F4773AAF84FF00B4978C3E175DFDA345D7EFB4B63215530CAC61B8DA
+ 573BD473D80E723040E3E627D12FFF006F7D53C79A5FFC4FBC33E07D7F509149
+ 59EF3458C4CCA719FDE42D1B8246C2493CE40C74AF03874C64D595ADE4492DEE
+ 1FCB12404068B80C72BD81C03BBE5CF201DB5F457EC8FF00B0C2FED51A9DF693
+ 677696FAF5A46B34684062C8C8763A1DCDB80C019040CB202CC4FCFCB9F61725
+ C2D379863A0A3CBAB925AAE9AB5676EE7B1C3B9CF11E224B2EC056934EFEEB69
+ C7BE8A5749D8F33F187C528BC5ABF6E8F43D174392332857B79A6600FF001E0E
+ F3B48ED80141930013D6A4772F2E8CA979737CCD3481046A3CE13AE4E3AB6795
+ 1B71D42B06C9C9AEA7E367EC7BE31F81B7B7FA7EA96CC6EACE792392DAD9F61F
+ 2CE1F8639664756420B7425739E05703A75B5DDA45247243F2AB06F25C7CC59B
+ 0A801233C285F9472E3693904576E06A60EB61E353053528F469DF4F577678B9
+ B4B31A38A953C741C67D6EB97F2496C6AEB367A369170B0B5ADD3C8248CED94B
+ 0F9D50A903693FC3C60918201E0726CFFC25FAF5A4A90E91A85BE850DCB98654
+ D36DFECAD9C85DB24C3F7D20DE02950F81C01C1F96E699A94FA8DFF97716EB29
+ 910471B79DB63331DAD9C1C2FCAADC82012DBB8C6EC7B4F827FE09DDE21F89BF
+ 01A4F88DE1F9166D0A390C772B292D3242AEC8F8DD803636FCF43F26467BF066
+ 59C60F0508CB1F2514DA49CB54DBD9793D342B2BCBF34C6D49432F837CAAED47
+ 4765A3D747D6DA3BEA7CFF00AB6A0B622D6C74FBBBAD93216926950C3111B083
+ 98B682C7E6239E4F97B88C1C8E3AF6DD9EED5FCB859AE2152AAD3E509DA1CB64
+ E49CF60C0E3763208AEBFC6DF04754F046A33C77166B1FD9E758FCE598B2C641
+ 1B6405464295C6000366D39F539DE16F032CF750960D27FA2F98891C91AC8926
+ D2DF3F7032A3E43CF192B8C83EDE1ABD154FDAD39732EEADFA1C788C2E26557D
+ 8558B8BBECEEADF7EBBEFE655F086AF16893CAD2472DE3346E20569368C90BF7
+ 4A725982824EE180463AE29DAC6FD4B4BB5FB548C26BA99A1B61179787DCE4E7
+ 07F872140232320E4838AFBBFF006B1FD85BE1B7C31F83DF0F758F0FC325A6AD
+ E2DD216EE7BB8253B6C51761123A918C624518601882318C62BE2ED45ED7C273
+ 6A1A8471A88E096552CA3CD6DEA195155A404827192405F9495CE0FCDE2649C4
+ 985CDA9BC4E162D6AD5A4ACEE9B5DF6BAFEAE7D3673C3788CA5468D79C6517AD
+ E37DB77BA4EFF2F4649AD7C3EF1778474C86DEFB47D5A16D6248C5B2CD132FDB
+ D642426D6DD82ACC4E48C29F2D4EDE49AFB23C3FFB38C7E20D53FB07C13AA35A
+ 683F0F34AB2F126A1AB6A16FF675F11DD34890CB3C6D32B2FD9CCBBCA97DC81B
+ 702A5466A4FDA93F691F0CF8EBC35E0BD42DF4E8757F0FF80FC2DA3DA6AF6E8C
+ D1996E612C5A0DCA372B38254919654F388E5431F2FF00D97FE3AEBEFE2CF176
+ B1AB46BAAE95E22B5B7B5F11BDF2341147662EADA1694A215628259238D52362
+ 02AE318031F298AC7E679965DF5A54D529C5BD1EB7774B67D542ED5FAB5BF4FB
+ 4CB72FCB729CC9619D4F68A496AF5E54936F58F494ACAEBB6A7B878093C3FE27
+ 4F037817596B35B390F88753934A77F3AEDAE0C570D6D3C92AE11F68410C4230
+ 176C2CDB5438CC2BFB4D68FE07F88F15A9BCB8864DBAB45A85E4F1B4FA869CB7
+ 5772BA89205F93CC8E5DB3308C61DA4930480B5F2F693F17FF00E136F8ABAA6A
+ 9AA5E6AD6FA5DAAFD9ADE58A456B858A308918CAE1412AA99E005043E000D4BE
+ 14F89D71AFFC4EBAF164712CDAA5C5E33C681159A41E6C6624642A372ED4404B
+ 60E14679F98F354E1594E539621B7171BB5D149B9376E9B4BE565BDCEBC2716D
+ 2A30A54B091578CDD9BEB15CAADDF75F3BBB5B567B1AF8BB564F14F886DE5934
+ FB48F4FB4FB15E24B728F06A89671C90986356E0332C4E5186CC360A93B941F2
+ 2D43C477C7E11D858AB7996B657F2DE2048CC72B191D54B07019D7CEE430041C
+ 007639DB9EC3C27A15AEBDA5A5ADA32B5AEB0D23A33C655AD642CECAAC72300B
+ 9047073F286EA76E2E87087F03B5BDAA15B3BA4F2915E3DC5916657F98601570
+ CA172DF36E65CE3214F561634E8CDA8A57528F4B6C9ABF7BEFF77639F1DEDF11
+ 4D37276E59F5BEED3B2E96BB5F7BBF5381BCF11CF3CDA4DDC9FBB6B30D6FE667
+ CCB5465591A30464E482FB406C11E59CF079F31F13E8B0E95AC6A76B346CD0AF
+ FA559B206677898854E4F2A3CB9039C0CEF04103181D206992DAFA331ADAADF6
+ D9226DCB2389C481882D21EB88C92465B25B920E2B0FC5B249ABFD86FA39EDED
+ DBC9FB2CE0A95468D9894248E1B7E641B4642794401C0C7E8382A4A9CAD1D9FF
+ 00C3FF009A3F2DCCEB7B68733D5A77FD1FE093E9F3399D435F851563FDF34119
+ 05B0572A72090B8E54FC84F39F71CE6BD47C0FA7B7C43D1350D3D84F35E59DBF
+ DB6059E5DBB11548F9304BE046CAC0372B83F302307C9AFCAC564AD1A86F2C46
+ 642E773072A49DC48046486200CE415079515D27863C47FD93ACAC8AF2431CD6
+ 935B32CA4AFCF825B7285E14E0A118C6549E3008EEC65172A7FBBD1AD8F23058
+ 94AA7EF754F46BC9FF0097E07AD7C27F19C9FD872EAD24AB1DE69312093ECFBC
+ 798AFF00BA9490B850C540270491B5D8E4E6BE98FD9E3FE0A19AF7C2EF877AD7
+ 82B5B861D77E1E78C235D3AFF47BE642A1848BB950B363761432C5C6777046E2
+ 57C67E227C1C7F861A0E87E31D0D12EFC2DAB5AA3BB5BC3E63404C49E7479CFC
+ BBDBE6CF1CEE2467047908F88967A96837DA6EA3BBC9601209228B6A4A0997CA
+ 675CAF4CEE5CE3D0E7F87E0B1594E033CA6E52873C2EBD62D3E9D54A2F5BAD75
+ D343F418E3F17934E34AABE595AEAE938CB669EB74D3D2DBEDDD1DCFED45F025
+ 3E0278CDF5FF00095E5B788FE1EEA416F744BD965DD716859F22DE4DA37AC919
+ 1E5E0F040381924D7934BF1056555B2BCBCD42F21F380589EE772C630802804E
+ D1B42A0E0EDC2AAE405156BC35F19757F0D5B4DA5DDDD45AAE83A86D478924CA
+ B221F98107043056639E1BA727A9C3D5EC2CCEBD7AB6B6B71756B1A0750AE91A
+ A44508DF80083CBE41C67AE42935F5980C1D6A74951C63E769692DAE96D75D25
+ DED64DEBA6C7CC63734A6EAFB6C0270527AC1EA937BDBBC7B2E8AC8EABC15A7D
+ BE91E22B3F10456EDAF69BA3B2DD3DBC3B964400FDD7F9848B82CA3CC195041C
+ 31AFADB55FF82987C33D57C111DBCDFB3FF86F50D52406D85E5CEA68D3798770
+ 29E6942C339E9B811939EC4FC2BE14F89D75E08D6166B4B1B59A085F725B5CC6
+ B3042DC64302194E3BC6C87393C0E2BA0F0EFC418F5A170B1DAB35BDE3B2FD8A
+ E6E58C72BE1C86628CACCC3E63B8F3B8FDEC6ECF9B9D70BE1B309C2A62E32972
+ 7C2E339C3D6FCB28DCF7B25E2E784A52A784A8A9CA4EF24E0A5AAD9ABC5E9E57
+ DF5B1D17C53F8CDA5FC41F1E36BB368EDA2C97570277B6BA73756D21DDFC408D
+ CCA5783F281D78CB301C3EA37B78F2C1796ED1B4636CDBE06CAB3740DB3B73C0
+ C28C11CE4D6D78A7C0234CF2658A4B8B89AE9824F653428AB1ED752046CAEFBC
+ 360F0C17033EF5CA5F693ADF84E0577D36FEC56E00DB2B5BBA2C80E0153C0DC0
+ 7238E0926BDCC150A10A718D17A2565777D3B5DEA7CDE6B8CC6CEACE58B576DD
+ DB496FDF4D3F2F312FBE20EA8B6296A3FB3D646387DBA5DBA4A5C739DCB1EEC8
+ DDD49EABDAB157C457D713BACF793491C80B13BB3B88CB0EB8FE2FA5751A4F8E
+ ED126B76BFD47549F6643031A5C0DDCE1886DB91D39DE0E777406B3EF668755B
+ 4B893FD1644B7428BFE88B6EEAA7765B6C64F218F42187CC3A000D7753B276E5
+ B7F5E878B5A729ABFB4BF95FFE0B3156F996E5D9B68DC368DA0104673D4704E7
+ 1D7DEB47462B2CE817F894171BF03B9EFDF1CF3C0233DC0A9AE2C1608D6E218D
+ 4797261D85BAF9511C6DDBBBBB1E0E0803827BE6A58AEBECC136C56FF67DC55F
+ 808DD477CE4741C12781DB07153926B4161E328CAF2DBD0DFB79C5DB6CB930AC
+ 8D26CC7DDCFCA14819206769523EEE09CE46467ACD074BBAB558EDEC354B88E1
+ 0CCE6376F944838FF56C4A1380D8DD8EADE82B96D16DE3D4E4666990C92272E5
+ 433E79201EB8C8000383D3207503A0B0D6E5D36591AE23924567382A76C65506
+ 430766040CB0E4C9CEE3824800F878AE6B5A1BFF005DCFB0C2D68A6A75758F9E
+ BF7F7F97C8F10BB4F2D63646CAB2F38FE13CF1D3DAA0438FAE7A548EF2148E3E
+ 76F2517EBD4E3D4E07E43DAA1AFA83F371EE588EA0E707AE69C83CE3F36F3853
+ D07A0E29B0A79AFB76B33370B838E6A5B69DADDFCC8FE565F4E703D48A008CC5
+ B18AED66EC083DFF00AD260AA7F4CD5892F166999BFD5AC849D83EEA7A01D78E
+ 07BF1517947CCD8A07CDEBDBB75A07E84B6576522F29B6F96D927FBC3F1F7E9F
+ E7356E58D1773472349B72D93FC60F7E47273D78E31F5359E57C85653B9255E0
+ 8F5FAFD288A4316D72AA036406F4E9FCAA6C529BD99B16F379D1341708B25BDB
+ FCE818AA3AE4ED217F1E7038247BD4D338B7D4A29F4B9A568542AA098852A460
+ B23018E3713CF420F38E6A9C732EB2CAB36E8E451B632A3A9206D3F860740490
+ 70070301D1A4B10BE631E5B8C1E0F19C82011819193C7DEF6359F2ABEA6C9BE9
+ B7E26F697AF2BBC90C96F6FBA491B6E11B0405C10DB304920800F18CB67EF1A6
+ F889FF00B49D1A386DC5C9DA11D5984928C1C0018E19432FDE1C600CE09E726F
+ 5E2BD5779B99A66CA0450B807BE3E99C28F5519A9ECF52974BB98658E45F3106
+ 18EF64500FCA3246083E98C1007A006B3F6693BA379556FDD645A76ACD14EAD2
+ C8BBFAE597E6C003F8873F3004104E3927049C8DBF09EB6DA578874BD46CCA59
+ 5F5BDD0B88CC793860CC53383D4738E46E0074C60E15D5DFD99B7B2C334CDD43
+ 027764E7A678E87818231EF563CCFDCB4CC6E12DF0A0EE2768C9DDB403EBD703
+ 1C313D072E70528DA4B47A0E9D594249A7AAD7D3CCFAC7C71FF0506BEF8B9E01
+ F0FDAF8A26596FBC3372F1976955E6BC8594ABAB3E4FC848663DF20F0C095AF1
+ 8F883ADC3AAE8566B25C19AD6D552082E0CDB82C39678C380480C03B8DC39CA0
+ EBB79F33B89E0F21E3B89248FE55789576ECC618853804919271EA1BD6AFEB3A
+ DDC8DB6774F1B5B469E6342A30A9B9C37CE7AEE03038C7F08E8483E1E0387F09
+ 82696123CAAEDD96DAB6F4F9B67D0E65C518CC7C5BC6CB99D92BF5D92D7E497C
+ F5EA56D22E67922DA9E4C52C6B94D89B5570A4957E32473DF2B93C83915EE5FB
+ 1DFED4DA97ECA7F1EFC3FE2EDCBE4DB0649A3CAAF98B26D665CB60732471C841
+ 2B8C11D5ABC5B40B659DA4B8DC648E672AA4B82FB8EDF504FDD0D81CE37609C3
+ 64F57E1FF0D7DB6F646922B7F35942470BA8497E6006E28080CA32D820E49C64
+ E0E0F5E6985A18BC3CF0D888F34249A6BBA6ACCF272AC756C257862A8BB4E2D3
+ 4FA68EFAF7ECFC8FBBBFE0A01FB557847F684F187873C41A1B335C4DA7C915E2
+ C2EB971193E56E4E77673D081FC3D3071F26FC46D7742F103ACF1456F6F24880
+ C61652BB70DC3A7D1CB8C76DBD7079C187C077C6717305C5D2A4AC666124457C
+ B2A8C0ECDA0AEEE5BE619C861B78E4D597C27AD4F246E2EA3090C6C57CD1B030
+ 42549000DC3E50724819C7076E2BE4F21E1EC1E5587861A84DF2C34577AEF7B7
+ CBF23EA33EE269E6D39559535172B5D25D925A3DFA5FE6477BAB2E9DB66B3924
+ F36CE40AF0BB463CC650A02FCAA0111E14060339518E8A4FD7DFB20FEDF71FC0
+ AFD92FC59F0F756B7BA99758B7B916E5959B6B387508C5723258FF000E327763
+ 24F1F22DAFC3CBAB66699564921B7258F9283E6C80376C07E620E0EE3B81000C
+ 1CD5882CAF2D2E3C8B9D3D2E21B7F24B13032EF51F3019C6DE48C923A6324119
+ CF467D9360B35C32C2E257345494BB3BC5DD7F5F2170EE6D5B2AC4BC550B7334
+ E367AADD3BFDE97DC99DFF008EFC750EB5A4AC36DAA5AC366F3175F3271B594C
+ 6AAB8938561BA290804B0CEE277725BCEB56F0D5C7F6649037930C76F13432CD
+ 1CE92CCDB5C9C3176233B9B18DD83B860121456B58C90DDDCCCB7DA4DACF711F
+ EF9CCD132AEF039214360B0DCB9504671D4E3351DAEB56E34E58E3D1E148DE33
+ FEB6766C0E9F322FDCC700E091C1C96E37756152C3C7929C5BF9AFE9FCCE1C75
+ 4AD8AABEDA6FF3EFF86ACD5F88FF00B4478ABC5BA3DAE9BA85D5CB59E8968F63
+ A7445D9FCD87733313B1C0451B5143F3C15271B811E5562975A71856E5961557
+ F2C5A11B96221B3E56C6604639CB649C120E49C574BE2395F509151AC561B56F
+ DDC6665D8AA48F954F6C8439272770DB85E73591E055867F1BE95F68B496E34C
+ D2E6F364431B94BA55C991081861BF023DBC67761B2492DE96070F470F45C68C
+ 1456F656F37F7B6678EC662B175E2F15373968AEDBF2FC12D3A6DDF53A3F0769
+ 13EA29AA58DCDC7D874DB79D751BA59EE326599D1C2A38C1F3162B73727006E0
+ 59D7219B05F3EA0D7FE1DD43C406792DED6F2F534F8218A6006C059DF0ADCB6C
+ 554E327E6981206E5239CF1BF886EA4B0B8866BA3E65D5CB9B979D51A766721A
+ 6F914E3E6724EEE8DB060A8C65F7CB696BE18D26CE3BA59E48CBCF3AAA6C68E5
+ 7215882D8C6E89130DC8CE4903032FD8B72E79756BFE0FDFE66D4B13CB4E505D
+ 13D6F6776F45F25D3BEACE9BC33A942F65AC46D1A2EDD26598DBC91B2F952945
+ 4462171851BF3860728149E0B1AB1F06EF8699E3686CED2092E6E2091E35576F
+ 2D6D22F2A42ECC197203103241C90B80C302B90F0B6BD1E9FA0EA9098D663A94
+ 6B03CA650CC14BAB3BE0E070811467009E9E86DF81B5B9743F105CC8BB6DECC2
+ 091658555B32B26141CEE18DA25381C939E4FCAA62B61DBA7563DD69F721D1C6
+ 5AA519F67AF96BFF000C7BB7C28D4FED56BA5085658963DE5B7B664887965B0C
+ C0E4637119DA4823191D6BA6D06C24BBB5D4A158646996DDE542936C2EC32C4E
+ E273F308C8057278E49C035E7BE0DF1234DA98B396491563B15C2C837873E5C6
+ 36FCA063E61B30075DB864EFEA5F0AAFADF49F1034334F348D7173046CC9213E
+ 72B388B70C95C101C2F19F979E0F15F9EE6D095294A696BA3B7CCFD5720A90AE
+ A14E4F4D55FB5D58F98F5C59C78922B786191A19A7F3961553098DB7EC601541
+ DBC92CC39FBABB8B7410DCE8EBA9F84A68843096DFE647B1B70B823E6445DCEC
+ 0966F309E5B248E3A11BDF1F34EFEC1D77CE68F76A10DC0478E34F295A58A4DA
+ 016C636AE0205186F98E58E79AFE1DB2B986F2E174F510B5A482FE1177306917
+ 60DEDF2B2E0FCC5D4E1B38DD90770C7DD51C47361E15A3EBF77FC39F9B6230CE
+ 18BA9879EF7B7DFAEDF2D753C56E7525F30ED8571BB18553E5285006E1CE4F1E
+ A7A7AE78B9A2C62DAD9921930D80FE679807CC4155C7E2C783DB7679200B1E37
+ D223F0B78AEF2DEDE3BC8EDD645782395C82B0BA87543DCB007D8F1D0F6AB64D
+ 169F3DB4EBE629244A3E71B970738DBC60679E4F2307D6BE8F9938A923E3A34D
+ AA8E32DD69FA1FA2DFF045DF8EDA1F8A7E2BAFC2DF88AB6371A26A96B77A6012
+ 32B47115B79146EE4A7CC4900AF7E3D33F2FFEDDBFB385E7ECD9F1DF5AF0EA86
+ 361677B3C5637CC7F7372892BC60EEE0070A8838200C927A123C7749F135C784
+ B55B0BED366934EBCB79D76CF048F1E195B39E0020853D8F6CE3E6047DA9A9F8
+ F2DFF6F3FD9A753FED4B8B63E3AD02E86A505C301E63C87C98DD482067EFAC87
+ 1B81DAE01C0C57E6F8ACBEA6499D3CDE8BFF0067AFCB1A91E9195DDA6BC9DECC
+ FD130B89867D957F665593FAC5157A7DA51576E3DEF6FD0F84E3D431A4342595
+ 2DD589013872D803907FD9F4C753D7A89EDBC4D3D82C77103186F123F2BCCF35
+ 9BCD4F9971D491C123AE0800E01EB5BC4BA15C786757BBB3B88A486E6DDDD1C3
+ 0DAC501C0C8F5E33C8E7F2AAB751A5B2A8552F1B120B9FE31C1E3A74EBD4F6F7
+ CFE92B924AEB54CFCD79AA425696EB4FEBD0B37D7F3DF5D2C770D1C726E277ED
+ DA72093B4607CBCE78C000919C0518F79FD85FF6789BE3EF8BE6B18ACED1AE23
+ 8C796F797C2DE28583EF07E557906319C1055B0477057E793009D25936F0A324
+ E7EE73D88E0F51FD00AECBE197C5ED4BE1E6A6ABA1DFB69BBD151A65DDE606E4
+ 960548FA6307AE306BCFCE30F88AD839D2C1C9466D68DDECBEEB33D4E1FC5617
+ 0F8FA75F1F173A69EA95AEFEF4CFD12F1A7FC122B58D03C3B79A86A9E35F0DC5
+ 6B2458DCF0DD3CB0A28CAA1638E07427AB0C0EBC8F88FE39E8F7DF0DBC5977A3
+ D8EB4B30B3908786DB7FCECDD9C9619E4823B804E72413599E28FDA2FC63E294
+ 92DEE7C6BE21F236873B2F9E3DE58B1230081B49E3033D49E7A0E0AEEE6EEFF7
+ 5C0BEBEBE8DB25A47244D292724E327EF12C324B721891D40F9AE19C8F37C2B7
+ 2CD3131ABD92828A5FA9F59C4FC49946269AA795E1654DDF593936DAED62399A
+ 7490CD2C705C6E9017F31CB2B7193F748E9C938E471D33C9A7F8823D3519FF00
+ B3F4B91B61CF9B0B4A1B9C7037ED38F71C75154F51956E1E3F2E58E456764116
+ 5B10AE411D7B75EE7A127AE4C4044CDF37C8DB8E3CAE8ABC1F73D377539E067B
+ E7EDF974B33F3DF68EFEE96C78BEEAE9956386CEDDDBE41F67B38A120160DF79
+ 577139F7CE38E47151FF006C49756B8B9F38F392FBB3DF8503B1E0F27A761C55
+ 791E15BA689A476877310EAA3730EC76E703E83E99EF532470B4989633B43618
+ 26D6C8F404703231CFA9CE7B1765D89F693EACDCF0D6B2DA7A065762EEE19410
+ 0AC23072541C707E5E78E8BCF02BBAD135EFB5791F68B759A468C3B4D17CBF26
+ 0B8500727EF6480303000F7F33B07D9770C31B45B644E4C885C3103231C75E9C
+ 60741CF7AECF43F115BCB2CF0CB0FD9649884F359BCC0D9EA4EE054615320B64
+ 100723935E76328A96B63D8C0E2E705CB7D36F5F23FFD9}
+ Stretch = True
+ end
+ object lblVersion: TLabel
+ Left = 10
+ Top = 371
+ Width = 145
+ Height = 13
+ Anchors = [akLeft, akBottom]
+ AutoSize = False
+ Color = clNone
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clSkyBlue
+ Font.Height = -15
+ Font.Name = 'Times New Roman'
+ Font.Style = []
+ ParentColor = False
+ ParentFont = False
+ Transparent = True
+ StyleElements = [seClient, seBorder]
+ end
+ object lblInfo: TLabel
+ Left = 170
+ Top = 370
+ Width = 450
+ Height = 15
+ Alignment = taRightJustify
+ Anchors = [akLeft, akRight, akBottom]
+ AutoSize = False
+ Color = clNone
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clSkyBlue
+ Font.Height = -13
+ Font.Name = 'Times New Roman'
+ Font.Style = []
+ ParentColor = False
+ ParentFont = False
+ Transparent = True
+ end
+end
diff --git a/Forms/SplashForm.pas b/Forms/SplashForm.pas
new file mode 100644
index 0000000..0848c37
--- /dev/null
+++ b/Forms/SplashForm.pas
@@ -0,0 +1,60 @@
+unit SplashForm;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, ExtCtrls, Global, Vcl.Imaging.jpeg;
+
+type
+ TSplashWindow = class(TForm)
+
+ BackgroundImage: TImage;
+ lblVersion: TLabel;
+ lblInfo: TLabel;
+ procedure FormCreate(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure FormHide(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ procedure SetInfo(info:string);
+ end;
+const DURATION: integer = 900;
+var
+ SplashWindow: TSplashWindow;
+
+implementation
+
+{$R *.dfm}
+
+procedure TSplashWindow.FormCreate(Sender: TObject);
+begin
+ lblVersion.Caption := APP_VERSION + APP_BUILD;
+ // AV: for compatibility with different UI color styles:
+ with lblVersion do Canvas.Font := Font;
+ Left := (Screen.Width - Width) div 2;
+ Top := (Screen.Height - Height) div 2;
+end;
+
+procedure TSplashWindow.FormHide(Sender: TObject);
+begin
+ repeat
+ Application.ProcessMessages;
+ until CloseQuery;
+ AnimateWindow(Handle, DURATION, {AW_BLEND} AW_CENTER or AW_HIDE)
+end;
+
+procedure TSplashWindow.FormShow(Sender: TObject);
+begin
+ AnimateWindow(Handle, DURATION, {AW_BLEND} AW_CENTER);
+end;
+
+procedure TSplashWindow.SetInfo(info: string);
+begin
+ // AV: for compatibility with different UI color styles:
+ lblInfo.Repaint;
+ lblInfo.Canvas.TextOut(0, 0, info);
+end;
+
+end.
diff --git a/Forms/Template.dfm b/Forms/Template.dfm
new file mode 100644
index 0000000..2ddf49d
--- /dev/null
+++ b/Forms/Template.dfm
@@ -0,0 +1,110 @@
+object TemplateForm: TTemplateForm
+ Left = 399
+ Top = 213
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsSingle
+ Caption = 'New Flame'
+ ClientHeight = 391
+ ClientWidth = 564
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ FormStyle = fsStayOnTop
+ Icon.Data = {
+ 0000010001001010000001001800680300001600000028000000100000002000
+ 0000010018000000000000030000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000B7A293634935634935634935
+ 6349356349356349356349356349356349356349350000000000000000000000
+ 00000000B7A293FFFFFFB7A293B7A293B7A293B7A293B7A293B7A293B7A293B7
+ A293634935000000000000000000000000000000B7A293FFFFFFFFFFFFFCFAF9
+ F7F1EEF1E7E1ECDDD5E6D3C9E1CABDB7A2936349350000000000000000000000
+ 00000000B7A293FFFFFFFFFFFFF5F5F5F1EEECECE4E0E6DBD4E1D1C9E4CFC4B7
+ A293634935000000000000000000000000000000B7A293FFFFFFC1C1C1ACACAC
+ ABAAA9A7A4A2A39D99A09692B4A69FB7A2936349350000000000000000000000
+ 00000000BAA596FFFFFFB6B6B6ECECECFFFFFFFBF8F7EEE7E49C9591E8D8D0B7
+ A293634935000000000000000000000000000000BEA99AFFFFFFB6B6B6ECECEC
+ FFFFFFF8F7F6ACAAA7E7DEDAEEE1DAB7A2936349350000000000000000000000
+ 00000000C3AE9EFFFFFFB6B6B6ECECECFCFCFCB9B9B9CCCBCAF7F1EEF1E7E1B7
+ A293634935000000000000000000000000000000C8B2A3FFFFFFB5B5B5EDEDED
+ C1C1C1CBCBCBFEFEFEFAF7F5F5EDE9B7A2936349350000000000000000000000
+ 00000000CCB6A7FFFFFFB0B0B0C7C7C7C7C7C7FFFFFFFFFFFFFDFCFBB7A293B7
+ A293644A36000000000000000000000000000000D1BBABFFFFFFB6B6B6C1C1C1
+ FFFFFFFFFFFFFFFFFFB7A293644A36644A36644A360000000000000000000000
+ 00000000D5BFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9A495D4C5BA64
+ 4A36E1D5CD000000000000000000000000000000D8C2B2FFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFC0AB9C644A36E2D6CD0000000000000000000000000000
+ 00000000D8C2B2D8C2B2D8C2B2D8C2B2D8C2B2D4BEAECFB9A9C9B3A4E2D6CD00
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000000000FFFF
+ 0000C0070000C0070000C0070000C0070000C0070000C0070000C0070000C007
+ 0000C0070000C0070000C0070000C0070000C00F0000C01F0000FFFF0000}
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ DesignSize = (
+ 564
+ 391)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object lblFile: TLabel
+ Left = 16
+ Top = 364
+ Width = 346
+ Height = 13
+ Anchors = [akLeft, akRight, akBottom]
+ AutoSize = False
+ ExplicitWidth = 329
+ end
+ object btnCancel: TButton
+ Left = 464
+ Top = 359
+ Width = 89
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Cancel = True
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 1
+ end
+ object btnOK: TButton
+ Left = 368
+ Top = 359
+ Width = 89
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = 'OK'
+ Default = True
+ Enabled = False
+ TabOrder = 2
+ OnClick = btnOKClick
+ end
+ object TemplateList: TListView
+ Left = 8
+ Top = 8
+ Width = 546
+ Height = 344
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ BevelInner = bvNone
+ BevelOuter = bvNone
+ BevelKind = bkTile
+ BorderStyle = bsNone
+ Color = clBtnFace
+ Columns = <>
+ ColumnClick = False
+ LargeImages = UsedThumbnails
+ TabOrder = 0
+ OnChange = TemplateListChange
+ end
+ object UsedThumbnails: TImageList
+ Height = 128
+ Masked = False
+ Width = 128
+ Left = 40
+ Top = 304
+ end
+end
diff --git a/Forms/Template.pas b/Forms/Template.pas
new file mode 100644
index 0000000..338a318
--- /dev/null
+++ b/Forms/Template.pas
@@ -0,0 +1,347 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit Template;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Translation,
+ Dialogs, StdCtrls, ComCtrls, ImgList, ControlPoint, cmap, RenderingInterface, Main,
+ Global, Adjust, System.ImageList;
+
+type
+ TTemplateForm = class(TForm)
+ TemplateList: TListView;
+ btnCancel: TButton;
+ btnOK: TButton;
+ UsedThumbnails: TImageList;
+ lblFile: TLabel;
+ procedure FormShow(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure TemplateListChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+ procedure btnOKClick(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ private
+ { Private declarations }
+ Files: TStringList; // AV: replaced "useless" hidded TListBox
+ public
+ { Public declarations }
+ end;
+
+var
+ TemplateForm: TTemplateForm;
+const
+ blankFlameXML1 = '';
+ blankFlameXML2 = ' ';
+ blankFlameXML3 = '';
+
+ procedure ListTemplateByFileName(filename:string);
+
+implementation
+
+{$R *.dfm}
+
+function LoadUserTemplates2(mask: string): integer;
+var
+ FindResult: integer;
+ SearchRec : TSearchRec;
+ Path : string;
+begin
+ Path := AppPath + 'Templates\'; // AV
+ result := 0;
+
+ FindResult := FindFirst(Path + Mask, faAnyFile - faDirectory, SearchRec);
+ while FindResult = 0 do
+ begin
+ ListTemplateByFileName(Path + SearchRec.Name);
+ result := result + 1;
+
+ FindResult := FindNext(SearchRec);
+ end;
+ { free memory }
+ FindClose(SearchRec);
+end;
+
+function LoadUserTemplates: integer;
+begin
+ LoadUserTemplates2('*.flame');
+ LoadUserTemplates2('*.template');
+ Result := 0; // make RTL happy
+end;
+
+function BlankXML: string;
+var
+ i: integer;
+ s: string;
+const
+ break = ' ';
+begin
+ s := blankFlameXML1 + break + blankFlameXML2 + break + blankFlameXML3 + break;
+ for i := 1 to 256 do begin
+ s := s + '000000';
+ if (i mod 32 = 0) then s := s + break;
+ end;
+ s := s + ' ';
+ Result := s;
+end;
+
+procedure DropBlank();
+var
+ flameXML: string;
+ cp: TControlPoint;
+ bm: TBitmap;
+ Render: TRenderer;
+ ListItem: TListItem;
+begin
+ cp := TControlPoint.Create;
+ Render := TRenderer.Create;
+ bm := TBitmap.Create;
+
+ cp.Clear;
+ flameXML := BlankXML;
+ MainForm.ParseXML(cp, PCHAR(flameXML), true);
+ cp.AdjustScale(TemplateForm.UsedThumbnails.Width, TemplateForm.UsedThumbnails.Height);
+
+ // start preview
+ cp.Width := TemplateForm.UsedThumbnails.Width;
+ cp.Height := TemplateForm.UsedThumbnails.Height;
+ cp.spatial_oversample := 1;
+ cp.spatial_filter_radius := 0.1;
+ cp.sample_density := 0.5; //3;
+ try
+ Render.SetCP(cp);
+ Render.Render;
+ finally
+ BM.Assign(Render.GetImage);
+ cp.Free;
+ Render.free;
+ end;
+// Thumbnails
+ TemplateForm.UsedThumbnails.Add(bm, nil);
+ bm.Free; // AV: fixed multiple memory leaks!
+ ListItem := TemplateForm.TemplateList.Items.Add;
+ ListItem.Caption := 'Blank Flame';
+ ListItem.ImageIndex := 0;
+ TemplateForm.Files.Add('n/a');
+ //end preview
+ //
+ Application.ProcessMessages;
+end;
+
+procedure DropListItem(FileName: string; FlameName: string);
+var
+ flameXML: string;
+ cp: TControlPoint;
+ bm: TBitmap;
+ Render: TRenderer;
+ ListItem: TListItem;
+begin
+ cp := TControlPoint.Create;
+ Render := TRenderer.Create;
+ bm := TBitmap.Create;
+
+ cp.Clear;
+ flameXML := LoadXMLFlameText(filename, FlameName);
+ MainForm.ParseXML(cp, PCHAR(flameXML), true);
+ cp.AdjustScale(TemplateForm.UsedThumbnails.Width, TemplateForm.UsedThumbnails.Height);
+
+ // start preview
+ cp.Width := TemplateForm.UsedThumbnails.Width;
+ cp.Height := TemplateForm.UsedThumbnails.Height;
+ cp.spatial_oversample := 1;
+ cp.spatial_filter_radius := 0.1;
+ cp.sample_density := 3;
+ try
+ Render.SetCP(cp);
+ Render.Render;
+ finally
+ BM.Assign(Render.GetImage);
+ cp.Free;
+ Render.free;
+ end;
+// Thumbnails
+ TemplateForm.UsedThumbnails.Add(bm, nil);
+ bm.Free; // AV: fixed multiple memory leaks!
+ ListItem := TemplateForm.TemplateList.Items.Add;
+ ListItem.Caption := FlameName;
+ ListItem.ImageIndex := TemplateForm.TemplateList.Items.Count - 1;
+ TemplateForm.Files.Add(FileName);
+ //end preview
+ //
+ Application.ProcessMessages;
+end;
+
+procedure ListTemplateByFileName(filename:string);
+{ List .flame file }
+var
+ sel: integer;
+ i, p: integer;
+ Title: string;
+ FStrings: TStringList;
+begin
+ sel := 0;
+ if not FileExists(FileName) then exit;
+ FStrings := TStringList.Create;
+ FStrings.LoadFromFile(FileName);
+ try
+ if (Pos(' 0) then
+ begin
+ for i := 0 to FStrings.Count - 1 do
+ begin
+ p := Pos(' 0) then
+ begin
+ MainForm.ListXMLScanner.LoadFromBuffer(PAnsiChar(Utf8String(FSTrings[i])));
+ MainForm.ListXMLScanner.Execute;
+
+ if Length(pname) = 0 then
+ Title := '*untitled ' + ptime
+ else
+ Title := Trim(pname);
+ if Title <> '' then
+ begin { Otherwise bad format }
+ DropListItem(FileName, Title);
+ end;
+ end;
+ end;
+ end;
+ finally
+ FStrings.Free;
+ end;
+end;
+
+procedure ListTemplate;
+begin
+ TemplateForm.TemplateList.Items.BeginUpdate;
+ TemplateForm.TemplateList.Items.Clear;
+ TemplateForm.UsedThumbnails.Clear;
+ // AV: fixed - someone forgot to refresh the file list
+ TemplateForm.Files.Clear;
+ // hmmm...
+ (*for i := 0 to TemplateForm.UsedThumbnails.Count - 1 do
+ begin
+ TemplateForm.UsedThumbnails.GetBitmap(i, bm);
+ bm.Free;
+ end; *)
+
+ DropBlank;
+
+ ListTemplateByFileName(AppPath + templateFileName);
+ LoadUserTemplates;
+
+ TemplateForm.TemplateList.Items.EndUpdate;
+ TemplateForm.TemplateList.Selected := TemplateForm.TemplateList.Items[0];
+end;
+
+procedure TTemplateForm.FormCreate(Sender: TObject);
+begin
+ self.Caption := TextByKey('template-title');
+ btnOK.Caption := TextByKey('common-ok');
+ btnCancel.Caption := TextByKey('common-cancel');
+ Files := TStringList.Create; // AV
+end;
+
+procedure TTemplateForm.FormDestroy(Sender: TObject);
+begin
+ Files.Free; // AV
+end;
+
+procedure TTemplateForm.TemplateListChange(Sender: TObject;
+ Item: TListItem; Change: TItemChange);
+var
+ fn : string;
+begin
+ if (TemplateList.Selected = nil) then
+ btnOK.Enabled := false
+ else begin
+ if (TemplateList.Selected.Index >= 0) then begin
+ btnOK.Enabled := true;
+ if (TemplateList.Selected.Index > 0) then begin
+ fn := ChangeFileExt(ExtractFileName(Files[TemplateList.Selected.Index]), '');
+ if (LowerCase(fn) <> 'apophysisav') then
+ lblFile.Caption := TextByKey('template-filename') + fn
+ else lblFile.Caption := '';
+ end else begin
+ lblFile.Caption := '';
+ end;
+ end else
+ btnOK.Enabled := false;
+ end;
+end;
+
+procedure TTemplateForm.btnOKClick(Sender: TObject);
+var
+ flameXML: string;
+ fn: string;
+ ci: integer;
+ blank: boolean;
+begin
+ fn := Files[TemplateList.Selected.Index];
+ blank := (TemplateList.Selected.Index = 0);
+ if blank then
+ flameXML := BlankXML
+ else
+ flameXML := LoadXMLFlameText(fn, TemplateList.Selected.Caption);
+ MainForm.UpdateUndo;
+ MainForm.StopThread;
+ MainForm.InvokeLoadXML(flameXML);
+ Transforms := MainCp.TrianglesFromCP(MainTriangles);
+ MainForm.Statusbar.Panels[3].Text := MainCp.name;
+ {if ResizeOnLoad then}
+ MainForm.ResizeImage;
+ MainForm.RedrawTimer.Enabled := True;
+ Application.ProcessMessages;
+ MainForm.UpdateWindows;
+
+ // AV: fixed a bug with black flames on the black background
+ if RandomizeTemplates or blank then // AV
+ if (randGradient = 3) then // AV: only if user prefer new palettes
+ AdjustForm.mnuRandomize.Click
+ else begin // AV: use preset palette
+ ci := Random(NRCMAPS);
+ GetCMap(ci, 1, MainCp.cmap);
+ MainCp.cmapIndex := ci;
+ end;
+
+ if blank then // AV: fixed resetting values to 1
+ begin
+ MainCp.brightness := defBrightness;
+ MainCp.gamma := defGamma;
+ MainCp.gammaThreshRelative := defGammaThreshold;
+ MainCp.contrast := defContrast;
+ MainCp.Vibrancy := defVibrancy;
+ Maincp.sample_density := defSampleDensity;
+ end;
+
+ ModalResult := mrOK; // AV
+end;
+
+procedure TTemplateForm.FormShow(Sender: TObject);
+begin
+ ListTemplate;
+end;
+
+end.
diff --git a/Forms/Tracer.dfm b/Forms/Tracer.dfm
new file mode 100644
index 0000000..80e13ef
--- /dev/null
+++ b/Forms/Tracer.dfm
@@ -0,0 +1,132 @@
+object TraceForm: TTraceForm
+ Left = 36
+ Top = 159
+ Caption = 'Trace'
+ ClientHeight = 489
+ ClientWidth = 395
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001010000000000800680500001600000028000000100000002000
+ 0000010008000000000000010000000000000000000000010000000100000000
+ 0000000080000080000000808000800000008000800080800000C0C0C000C0DC
+ C000F0CAA60004040400080808000C0C0C0011111100161616001C1C1C002222
+ 220029292900555555004D4D4D004242420039393900807CFF005050FF009300
+ D600FFECCC00C6D6EF00D6E7E70090A9AD000000330000006600000099000000
+ CC00003300000033330000336600003399000033CC000033FF00006600000066
+ 330000666600006699000066CC000066FF000099000000993300009966000099
+ 99000099CC000099FF0000CC000000CC330000CC660000CC990000CCCC0000CC
+ FF0000FF660000FF990000FFCC00330000003300330033006600330099003300
+ CC003300FF00333300003333330033336600333399003333CC003333FF003366
+ 00003366330033666600336699003366CC003366FF0033990000339933003399
+ 6600339999003399CC003399FF0033CC000033CC330033CC660033CC990033CC
+ CC0033CCFF0033FF330033FF660033FF990033FFCC0033FFFF00660000006600
+ 330066006600660099006600CC006600FF006633000066333300663366006633
+ 99006633CC006633FF00666600006666330066666600666699006666CC006699
+ 00006699330066996600669999006699CC006699FF0066CC000066CC330066CC
+ 990066CCCC0066CCFF0066FF000066FF330066FF990066FFCC00CC00FF00FF00
+ CC009999000099339900990099009900CC009900000099333300990066009933
+ CC009900FF00996600009966330099336600996699009966CC009933FF009999
+ 330099996600999999009999CC009999FF0099CC000099CC330066CC660099CC
+ 990099CCCC0099CCFF0099FF000099FF330099CC660099FF990099FFCC0099FF
+ FF00CC00000099003300CC006600CC009900CC00CC0099330000CC333300CC33
+ 6600CC339900CC33CC00CC33FF00CC660000CC66330099666600CC669900CC66
+ CC009966FF00CC990000CC993300CC996600CC999900CC99CC00CC99FF00CCCC
+ 0000CCCC3300CCCC6600CCCC9900CCCCCC00CCCCFF00CCFF0000CCFF330099FF
+ 6600CCFF9900CCFFCC00CCFFFF00CC003300FF006600FF009900CC330000FF33
+ 3300FF336600FF339900FF33CC00FF33FF00FF660000FF663300CC666600FF66
+ 9900FF66CC00CC66FF00FF990000FF993300FF996600FF999900FF99CC00FF99
+ FF00FFCC0000FFCC3300FFCC6600FFCC9900FFCCCC00FFCCFF00FFFF3300CCFF
+ 6600FFFF9900FFFFCC006666FF0066FF660066FFFF00FF666600FF66FF00FFFF
+ 66002100A5005F5F5F00777777008686860096969600CBCBCB00B2B2B200D7D7
+ D700DDDDDD00E3E3E300EAEAEA00F1F1F100F8F8F800F0FBFF00A4A0A0008080
+ 80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000
+ 000000000000000000000000000000000000000000000000000000000000AC12
+ 1212121212121212121212F70000AC000000000000000000000000120000AC00
+ 0000000000000000000000120000AC00FA00FAFA00FA0000000000120000AC00
+ 0000000000000000000000120000AC00FAFA00FAFAFA00FA000000120000AC00
+ 0000000000000000000000120000AC00FA00FAFA00FAFA00000000120000AC00
+ 0000000000000000000000120000AC000000000000000000000000120000ACAC
+ ACACACACACACACACACACACAC0000ACFF090909090909090909FFADFF0000ACAC
+ ACACACACACACACACACACACACAC0000000000000000000000000000000000FFFF
+ 0000000100000001000000010000000100000001000000010000000100000001
+ 0000000100000001000000010000000100000001000000010000FFFF0000}
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ DesignSize = (
+ 395
+ 489)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object PageControl1: TPageControl
+ Left = 0
+ Top = 0
+ Width = 395
+ Height = 489
+ ActivePage = TabMain
+ Align = alClient
+ Images = MainForm.Buttons
+ TabOrder = 0
+ object TabMain: TTabSheet
+ Caption = 'Main'
+ ImageIndex = 16
+ object MainTrace: TMemo
+ Left = 0
+ Top = 0
+ Width = 387
+ Height = 460
+ Align = alClient
+ Color = clBlack
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clLime
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = []
+ ParentFont = False
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 0
+ end
+ end
+ object TabFullscreen: TTabSheet
+ Caption = 'Fullscreen'
+ ImageIndex = 52
+ object FullscreenTrace: TMemo
+ Left = 0
+ Top = 0
+ Width = 387
+ Height = 460
+ Align = alClient
+ Color = clBlack
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clLime
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = []
+ ParentFont = False
+ ReadOnly = True
+ ScrollBars = ssVertical
+ TabOrder = 0
+ end
+ end
+ end
+ object cbTraceLevel: TComboBox
+ Left = 280
+ Top = 0
+ Width = 121
+ Height = 21
+ Style = csDropDownList
+ Anchors = [akTop, akRight]
+ TabOrder = 1
+ OnSelect = cbTraceLevelSelect
+ Items.Strings = (
+ 'No trace'
+ 'Minimal trace'
+ 'Full trace')
+ end
+end
diff --git a/Forms/Tracer.pas b/Forms/Tracer.pas
new file mode 100644
index 0000000..5353fef
--- /dev/null
+++ b/Forms/Tracer.pas
@@ -0,0 +1,156 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit Tracer;
+
+{$define TRACEFORM_HIDDEN}
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, ComCtrls, Translation;
+
+type
+ TTraceForm = class(TForm)
+ PageControl1: TPageControl;
+ TabMain: TTabSheet;
+ TabFullscreen: TTabSheet;
+ FullscreenTrace: TMemo;
+ cbTraceLevel: TComboBox;
+ MainTrace: TMemo;
+ procedure cbTraceLevelSelect(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormCreate(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ TraceForm: TTraceForm;
+
+var
+ TraceLevel: integer;
+
+const
+ MsgComplete = '< Received WM_THREAD_COMPLETE from RenderThread #';
+ MsgTerminated = '< Received WM_THREAD_TERMINATE from RenderThread #';
+ MsgNotAssigned = 'Ignoring message: RenderThread does not exist';
+ MsgAnotherRunning = 'Ignoring message: another RenderThread is running';
+
+implementation
+
+{$R *.dfm}
+
+uses
+ Registry,
+ Global, Main;
+
+procedure TTraceForm.cbTraceLevelSelect(Sender: TObject);
+begin
+ TraceLevel := cbTraceLevel.ItemIndex;
+end;
+
+procedure TTraceForm.FormCreate(Sender: TObject);
+var
+ Registry: TRegistry;
+begin
+ { Read position from registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Trace', False) then
+ begin
+ if Registry.ValueExists('Top') then
+ self.Top := Registry.ReadInteger('Top');
+ if Registry.ValueExists('Left') then
+ self.Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Width') then
+ self.Width := Registry.ReadInteger('Width');
+ if Registry.ValueExists('Height') then
+ self.Height := Registry.ReadInteger('Height');
+
+{$ifndef TRACEFORM_HIDDEN}
+
+ if Registry.ValueExists('TraceLevel') then
+ TraceLevel := Registry.ReadInteger('TraceLevel')
+ else
+ TraceLevel := 0;
+ MainForm.tbShowTrace.Visible := true;
+ MainForm.tbShowTrace.Enabled := true;
+ MainForm.tbTraceSeparator.Visible := true;
+ MainForm.tbTraceSeparator.Enabled := true;
+
+{$else}
+
+ TraceLevel := 0;
+ //MainForm.tbShowTrace.Visible := false;
+ //MainForm.tbShowTrace.Enabled := false;
+ //MainForm.tbTraceSeparator.Visible := false;
+ //MainForm.tbTraceSeparator.Enabled := false;
+
+{$endif}
+
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+
+ // AV: translation added
+ self.Caption := TextByKey('common-trace-title');
+ TabMain.Caption := TextByKey('common-trace-main');
+ TabFullScreen.Caption := TextByKey('common-trace-fullscreen');
+ cbTraceLevel.Items[0] := TextByKey('common-trace-notrace');
+ cbTraceLevel.Items[1] := TextByKey('common-trace-minimal');
+ cbTraceLevel.Items[2] := TextByKey('common-trace-fulltrace');
+ cbTraceLevel.ItemIndex := TraceLevel;
+end;
+
+procedure TTraceForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Trace', True) then
+ begin
+ if self.WindowState <> wsMaximized then begin
+ Registry.WriteInteger('Top', self.Top);
+ Registry.WriteInteger('Left', self.Left);
+ Registry.WriteInteger('Width', self.Width);
+ Registry.WriteInteger('Height', self.Height);
+
+ Registry.WriteInteger('TraceLevel', TraceLevel);
+ end;
+ end;
+ finally
+ Registry.Free;
+ end;
+end;
+
+end.
diff --git a/Forms/VarOrderForm.dfm b/Forms/VarOrderForm.dfm
new file mode 100644
index 0000000..f95ca96
--- /dev/null
+++ b/Forms/VarOrderForm.dfm
@@ -0,0 +1,381 @@
+object VarOrder: TVarOrder
+ Left = 0
+ Top = 0
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsSingle
+ Caption = 'Variation Order'
+ ClientHeight = 371
+ ClientWidth = 335
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ Icon.Data = {
+ 0000010001001616000000000000100800001600000028000000160000002C00
+ 000001002000000000009007000000000000000000000000000000000000FFFF
+ FF00FFFFFF00FFFFFF00FF66000BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF66003FFF66
+ 00DFFF6B09FFFF6600E0FF66003AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FF690601FF6906E4FFB17EFFFFC299FFFFB5
+ 84FFFF6906D2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FF731606FF7316F7FF934CFFFF751AFFFFCDACFFFF7316F5FFFF
+ FF004F4F4FB44F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F
+ 4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FB4FFFFFF00FFFFFF00FFFF
+ FF00FF7D2657FF7D26FFFFC69FFFFFAA71FFFF7D26C1FFFFFF00636363FFFCFC
+ FCFFFCFCFCFFFCFCFCFFFCFCFCFFF9F9F9FFF3F3F3FFEDEDEDFFE6E6E6FFE0E0
+ E0FFE0E0E0FFE0E0E0FF636363FFFFFFFF00FFFFFF00FFFFFF00FF8636E8FFA5
+ 68FFFF893BFFFFCBA9FFFF8636DCFFFFFF00777777B4777777FF777777FF7777
+ 77FF777777FF777777FF777777FF777777FF777777FF777777FF777777FF7777
+ 77FF777777B4FFFFFF00FFFFFF00FFFFFF00FF9046C4FFB17DFFFFCCA9FFFFB4
+ 81FFFF9046B1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FF995522FF9955B4FF9955E2FF9955B0FF995519FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FF66000BFF660040FF660040FF66003DFF660006FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF660003FF6600C1FF66
+ 00FFFF6600FFFF6600FFFF6600B4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FF6B0904FF6C0AF4FFD2B3FFFFB585FFFFA3
+ 65FFFF6B09BBFFFFFF004F4F4FB44F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F
+ 4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FB4FFFF
+ FF00FFFFFF00FFFFFF00FF771D8BFF924AFFFFB98AFFFF7B25FFFF771D74FFFF
+ FF00636363FFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFF9F9F9FFF3F3F3FFEDED
+ EDFFE6E6E6FFE0E0E0FFE0E0E0FFE0E0E0FF636363FFFFFFFF00FFFFFF00FFFF
+ FF00FF8330EAFF8D41FFFF9D5BFFFFB482FFFF8330B5FFFFFF00777777B47777
+ 77FF777777FF777777FF777777FF777777FF777777FF777777FF777777FF7777
+ 77FF777777FF777777FF777777B4FFFFFF00FFFFFF00FFFFFF00FF8F44C0FFBD
+ 91FFFFC49CFFFFB07BFFFF8F4487FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF9A5717FF9A5796FF9A57B9FF9A
+ 577EFF9A5707FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FF660008FF660040FF660040FF66003CFFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FF6600B9FF6600FFFF6600FFFF6600FFFF66008EFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF6600CAFFA5
+ 69FFFFCFAFFFFF9853FFFF66009EFFFFFF004F4F4FB44F4F4FFF4F4F4FFF4F4F
+ 4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F
+ 4FFF4F4F4FB4FFFFFF00FFFFFF00FFFFFF00FF701151FF7011FDFFC29AFFFF70
+ 11E6FF701104FFFFFF00636363FFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFF9F9
+ F9FFF3F3F3FFEDEDEDFFE6E6E6FFE0E0E0FFE0E0E0FFE0E0E0FF636363FFFFFF
+ FF00FFFFFF00FFFFFF00FF7C24EBFF8433FFFFC59EFFFF7C24DEFFFFFF00FFFF
+ FF00777777B4777777FF777777FF777777FF777777FF777777FF777777FF7777
+ 77FF777777FF777777FF777777FF777777FF777777B4FFFFFF00FFFFFF00FFFF
+ FF00FF8737BEFFAE78FFFFC7A2FFFF8737D6FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF934A0DFF93
+ 4A87FF934ABDFF934A30FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7FFFF0083FFFF0082000E00C200
+ 0E0082000F0083FFFE00C7FFFE00FFFFFF0083FFFF0082000E0086000E008200
+ 0E0083FFFE00CFFFFE00FFFFFF0083FFFF0082000E00C6000E0086000F0087FF
+ FE00CFFFFE00}
+ OldCreateOrder = False
+ Position = poOwnerFormCenter
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ DesignSize = (
+ 335
+ 371)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object btnTop: TSpeedButton
+ Left = 221
+ Top = 25
+ Width = 96
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = 'To Top'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFBF6331
+ CA7544CB7238C56125DFA88DFFFFFFFFFFFFFFFFFFFFFFFFEAB99BD96215E161
+ 0AE46A14E16E1FFFFFFFFFFFFFBE653CE6C1A6FFFCD6F5C283CB6220D89A7CFF
+ FFFFFFFFFFE2A98AD66921F77711FF8A22F3852BDE7025FFFFFFFFFFFFF2E1D9
+ C06847DEAF91FFE9BDF9B064D0611AD79673DB9F7FD67032FA8325FF8B21EB7E
+ 26D97434F7DECEFFFFFFFFFFFFFFFFFFF6EBE6BE6842D99D7BFFDBA8FD9C42D4
+ 5A0BD35B0CFC8222FF871DE5761DD47134F8E6DBFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFDF9F8C36F4BD2936DFECE96FF8722FF6F00FF8419DF6E1BD17741FBF3
+ EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F6C7795CCD855DFD
+ C285FF8E2AD66413CF7E52FBF4F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFEFECC876CCB7A4DD0773BCF835EFDFBF9FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFFFFFFFFFFFFFEFCFBDB
+ AA93DBA68CFDFAF8FFFFFFFFFFFFFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFCE9E86
+ B56849B76745C27E60F3E6E0FFFFFFFFFFFFFFFFFFFFFFFFF7ECE6D38E67CC74
+ 41CF7641DFA27CFFFFFFFFFFFFA44516DDBA92E7C392D38B53B15831EEDBD3FF
+ FFFFFFFFFFF3E2DBC16C3FDA5F0AEE7310EB7D25C55209FFFFFFFFFFFFD4A591
+ BA7352F7F4CFFFE8ABE18D4BAF5027ECD8CEF1E1D9B8633AE4792DFF8618FB90
+ 2DCF6117DEA584FFFFFFFFFFFFFFFFFFD3A497AD5A35EEDBB0FFD48BE67F2EAF
+ 4D1BB1562BE67F36FF861AF48625C05210DBA58AFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFD8AFA3AB5835E8D0A6FFC575EC6E0FEA6605FF8314EE7F22BA5114DCAF
+ 99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0BEB4A95537E2C497FF
+ B760FF7E0FE9791EB4501BDFB8A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFE8D0C9AA5639DEB688E59850AE4C22E5C9BCFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDCD6AF
+ 5F3BAE603AEAD4CBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnTopClick
+ end
+ object btnMoveUp: TSpeedButton
+ Left = 221
+ Top = 60
+ Width = 96
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = 'Move Up'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE5D36
+ A23C0FA93F0BB24D17EBCEBEFFFFFFFFFFFFFFFFFFFFFFFFF8E1D2E46D1EE966
+ 0EF16B0EF9822BFFFFFFFFFFFFA64A1EE4A66EE79146D06620B95F33FBF4F1FF
+ FFFFFFFFFFFDF7F3DC793FEA7720F89A40FA9D44F5720FFFFFFFFFFFFFA95233
+ E0B18AFFDA96FEA754BF5212CD8F73FFFFFFFFFFFFDFA282D96B21FD9433FFA9
+ 4CF79B43ED7420FFFFFFFFFFFFDFC0B5A14423F1CEA8FFC882F09546B14510EC
+ D4C7F3E0D6C76128F58C36FF7F14FA8524E06109F7C7A8FFFFFFFFFFFFFFFFFF
+ C0816FB87155FDE2BAFFBE72D97831B55B31BF6B43DF8346FF7A14FF7406E05F
+ 07E59461FFFFFFFFFFFFFFFFFFFFFFFFF8F0EDA74F32D5A992FFE5B5FDB362BC
+ 5417BC5013FD8323FF6D00E86302CE6625FAEBE1FFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFE1C4B89F4020ECD7C5FFDBA5F6A456F48B36FF8117F46902BF4A01EBC1
+ A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC38773B2684FFBF3DFFF
+ C987FFAC5BFD963BC65108D08A64FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFDFAF9A64D32CEA394FFF3D6FFC47BD87D38AF5228FBF5F2FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D2C9A04226EC
+ DCD4F2D0A9A24016E5C8BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFC68D7DB2674AB97559C0826FFFFEFEFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8F6AE
+ 5D3CAB5634FBF7F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnMoveUpClick
+ end
+ object btnMoveDown: TSpeedButton
+ Left = 221
+ Top = 95
+ Width = 96
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = 'Move Down'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEF9F6EB7F38F07D30FEF6F0FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAA177E9
+ 7522F0822CF39F6AFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFF3D5C3DA6219F8B46FFC9036EB6008F9D1B5FFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F6D2672EEB9C5FFF
+ BA73FF760BF56903EC7623FEF5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFD9916DD77538FDD29EFF9B44FF8420FE770EEE6300F0995DFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7C4B1C15117F5CBA3FFC484F9
+ 9138F8872CFF8521FB7209E85F00F7C4A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ F7EEE9BC592DE3AD88FFE3B9FEB267D66317D75F11FE963CFF821BF56C07E873
+ 22FCE9DBFFFFFFFFFFFFFFFFFFFFFFFFC6816AC87B56FEF0D9FFD99EE28B46CE
+ 6C36D57741E6853DFF973BFF7B14ED6604EE965AFFFFFFFFFFFFFFFFFFDDBAAF
+ AA4923F4E6D9FFF7D1F1BF85BF521AF3DBCDF7E6DBCF6225F4A05CFF8E2FFB78
+ 12E65F01F5C5A3FFFFFFFFFFFFA95131E3C6BDFFFFFFFDF2C7C16430D59479FF
+ FFFFFFFFFFE3A688D46E35FDA75DFF8C28F77612E76D17FFFFFFFFFFFFA74F28
+ E1C4B2E3C7AACC8E61B85C36FBF5F2FFFFFFFFFFFFFDF7F4D37742E07529F382
+ 28F47618E46103FFFFFFFFFFFFB0613D9D3B179D3A14A7461CECD3C6FFFFFFFF
+ FFFFFFFFFFFFFFFFF6E3D7CF6220D1570CD65B0BE1772FFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnMoveDownClick
+ end
+ object btnBottom: TSpeedButton
+ Left = 221
+ Top = 130
+ Width = 96
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = 'To Bottom'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFF5D9CBE07936E57C36F7D5C0FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEECBBDD66E37F2
+ C48DF79E4EE3671BF5CAB0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFE5B9A7CB6A38F2CF9CFFAE58FF770BF7801EE46A16F2BD9BFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBA999C46936F3D8A8FFBD6FF1
+ 710FF16906FF7F13F98522E66B14F1B58FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ D29D8CBD683CF5E1B3FFCE87EA7F2DCB6121D06C31EE8337FF831AFB8825E76B
+ 12EFAA7DFFFEFEFFFFFFFFFFFFCC9985C17E5BFDFCD2FFE4A8E38B47C05E2AF5
+ E3D8F9ECE5D1723CEB7B2CFF8116FF8F2CEC741AF0A979FFFFFFFFFFFFA74717
+ D8B18AE1B787D0824BBD653BF3E2DAFFFFFFFFFFFFF8E9E1D67F49E46308F171
+ 0DF17E23E36208FFFFFFFFFFFFDDAF97BD795FBD785ECB9177F6EBE5FFFFFFFF
+ FFFFFFFFFFFFFFFFFBF2EDE3A47DDF8E5BE4905AF0B790FFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FFB580FFB27AFFFAF6FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FE9D60FF
+ 9D54FF953EFE9854FFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFEF6F1F58F51FCA564FFBD80FF8724FF7C15FF9447FFF3E9FFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF4EFED8342F7AC76FFC990FF
+ 821EFF6C00FF7F17FF811CFF8B37FFEEE2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ F8E5DBE3773AF3B183FFD5A2FD983FF66D09FA7310FF8324FF811AFF831FFF86
+ 2DFFE3D0FFFFFFFFFFFFFFFFFFF4DBCEDB7746F1C09CFFE6BAFCAE62ED7018F6
+ AD7DFAB789FB8431FF8426FF841EFF8927FF852BFFDDC4FFFFFFFFFFFFD06B33
+ F0C7A8FFF4CEF8BF7EE26D1EF1AF87FFFFFFFFFFFFFBBF96FA7D22FF7710FF83
+ 1EFF8C2AFF7E1DFFFFFFFFFFFFCD7039D3743DD67231D86C26EFBA9BFFFFFFFF
+ FFFFFFFFFFFFFFFFFCCBA9FB7819FE7007FF7812FF8529FFFFFF}
+ Margin = 3
+ ParentBiDiMode = False
+ Spacing = 10
+ OnClick = btnBottomClick
+ end
+ object btnSort: TSpeedButton
+ Left = 221
+ Top = 165
+ Width = 96
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = 'Sort by name'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFBFBFF
+ C7C7FFA7A7FFA4A4FFA4A4FFA6A6FFD5D5FFFDFDFFFFFFFFC8C8C82828289898
+ 98FFFFFFFFFFFFFFFFFFFFFFFFF6F6FF6A6AFF1010FF1D1DFF3434FF3C3CFFA3
+ A3FFFCFCFFF9F9F98484841717175C5C5CE4E4E4FFFFFFFFFFFFFFFFFFFCFCFF
+ A2A2FF1D1DFF2A2AFFA2A2FFD1D1FFE9E9FFFFFFFFD8D8D83E3E3E1010102626
+ 26B0B0B0FCFCFCFFFFFFFFFFFFFFFFFFEBEBFF7373FF1616FF6F6FFFEFEFFFFF
+ FFFFFFFFFF9090902625261A19191F1F1F636363F3F3F3FFFFFFFFFFFFFFFFFF
+ FFFFFFD9D9FF4D4DFF1B1BFF9A9AFFF9F9FFFFFFFFCECDCD8988883737377070
+ 70BABABAFAFAFAFFFFFFFFFFFFFEFEFFDFDFFFBFBFFF7777FF1010FF3232FFCE
+ CEFFFFFFFFFFFFFFD3D3D34E4E4EABABABFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF
+ 9C9CFF3B3BFF2D2DFF2525FF2C2CFFBABAFFFFFFFFFFFFFFD4D4D4575757AFAF
+ AFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFE4E4FFC6C6FFC2C2FFC2C2FFC6C6FFEE
+ EEFFFFFFFFFFFFFFD7D6D6626262B4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFEFCFB
+ F6E1D1F8E4D5FFFDFBFFFFFDF9E8DAF4DDCBFDFAF7FFFFFFD9D9D96D6D6DB9B9
+ B9FFFFFFFFFFFFFFFFFFFFFFFFFCF8F4DC9B67D68A4CF2DAC6F5E3D4D99259D7
+ 8C4FFAEFE7FFFFFFDDDDDC797979BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFA
+ E4B188CA6717D07932D27D38C96210DD9D6AFCF6F2FFFFFFE0E0DF858584C4C5
+ C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D6C0CD7024CE7228CF752DC96412EB
+ C4A5FFFEFEFFFFFFE3E3E2919190CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ F9EDE3D88F54CF752CD07730D27F3BF5E2D3FFFFFFFFFFFFE6E6E69D9D9DD0D0
+ D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFAE5B48CC8600CC65B05DD9D6AFC
+ F8F4FFFFFFFFFFFFE9E9E9A9A9A9D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFF0D4BDCF752DCC6B1DEAC3A3FFFFFFFFFFFFFFFFFFECECECB8B8B8DCDC
+ DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF5EFEFD2BAEDCCB1FAF0E8FF
+ FFFFFFFFFFFFFFFFF9F9F9E7E7E7F3F3F3FFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentShowHint = False
+ ParentBiDiMode = False
+ ShowHint = True
+ Spacing = 5
+ OnClick = btnSortClick
+ end
+ object btnDefOrder: TSpeedButton
+ Left = 221
+ Top = 200
+ Width = 96
+ Height = 25
+ BiDiMode = bdLeftToRight
+ Caption = 'Default order'
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000C40E0000C40E00000000000000000000FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0864C
+ B0681FA65400FFFFFFA65400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFC0874BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ B1691FFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000
+ 00000000000000000000FFFFFFFFFFFFFFFFFFA65400FFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0864B
+ B0681EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFC1864CB1691FA65400FFFFFFA65400FFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ B1691FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1681EFFFFFFFFFFFFFFFFFFFFFFFF00
+ 0000000000000000000000000000000000000000000000000000FFFFFFC1874B
+ B0681EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1691FFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ Margin = 3
+ ParentShowHint = False
+ ParentBiDiMode = False
+ ShowHint = True
+ Spacing = 5
+ OnClick = btnDefOrderClick
+ end
+ object pnlVarList: TPanel
+ Left = 8
+ Top = 8
+ Width = 200
+ Height = 320
+ ShowCaption = False
+ TabOrder = 0
+ object VarListView: TListView
+ Left = 1
+ Top = 1
+ Width = 198
+ Height = 318
+ Align = alClient
+ Columns = <
+ item
+ Width = 175
+ end>
+ ColumnClick = False
+ DragMode = dmAutomatic
+ FullDrag = True
+ HideSelection = False
+ ReadOnly = True
+ SmallImages = EditForm.IconsAV
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnChange = VarListViewChange
+ OnCustomDrawItem = VarListViewCustomDrawItem
+ OnDragDrop = VarListViewDragDrop
+ OnDragOver = VarListViewDragOver
+ end
+ end
+ object btnOK: TButton
+ Left = 142
+ Top = 338
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = '&OK'
+ ModalResult = 1
+ TabOrder = 1
+ end
+ object btnCancel: TButton
+ Left = 231
+ Top = 338
+ Width = 75
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = '&Cancel'
+ ModalResult = 2
+ TabOrder = 2
+ end
+end
diff --git a/Forms/VarOrderForm.pas b/Forms/VarOrderForm.pas
new file mode 100644
index 0000000..eba08eb
--- /dev/null
+++ b/Forms/VarOrderForm.pas
@@ -0,0 +1,340 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit VarOrderForm;
+
+interface
+
+uses
+ Winapi.Windows, Winapi.Messages, System.SysUtils, StrUtils, System.Variants,
+ System.Classes, Vcl.Graphics,
+ Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Editor, Translation, Vcl.StdCtrls,
+ Vcl.ComCtrls, Vcl.ExtCtrls, Vcl.Buttons;
+
+type
+ TVarOrder = class(TForm)
+ pnlVarList: TPanel;
+ VarListView: TListView;
+ btnOK: TButton;
+ btnCancel: TButton;
+ btnTop: TSpeedButton;
+ btnMoveUp: TSpeedButton;
+ btnMoveDown: TSpeedButton;
+ btnBottom: TSpeedButton;
+ btnSort: TSpeedButton;
+ btnDefOrder: TSpeedButton;
+ procedure FormCreate(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure btnMoveUpClick(Sender: TObject);
+ procedure VarListViewChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+ procedure btnMoveDownClick(Sender: TObject);
+ procedure btnTopClick(Sender: TObject);
+ procedure btnBottomClick(Sender: TObject);
+ procedure btnSortClick(Sender: TObject);
+ procedure btnDefOrderClick(Sender: TObject);
+ procedure VarListViewDragDrop(Sender, Source: TObject; X, Y: Integer);
+ procedure VarListViewDragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+ procedure VarListViewCustomDrawItem(Sender: TCustomListView;
+ Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
+ procedure FormDestroy(Sender: TObject);
+ private
+ { Private declarations }
+ totVars: integer;
+ usedVars: TStringList;
+ procedure ExchangeVars(const i, j: integer);
+ procedure SetVarIcon(const s: string; ListItem: TListItem);
+ procedure ShowSelected(const i: integer);
+ public
+ { Public declarations }
+ Changed: boolean;
+ end;
+
+var
+ VarOrder: TVarOrder;
+
+implementation
+
+uses
+ XFormMan, Global; // to get default variation order
+
+{$R *.dfm}
+
+procedure TVarOrder.btnBottomClick(Sender: TObject);
+var i: integer;
+begin
+ if not assigned(VarListView.Selected) then
+ begin
+ Application.MessageBox(PChar(TextByKey('varorder-noselected')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+
+ i := VarListView.Selected.Index;
+ ExchangeVars(i, totVars);
+ ShowSelected(totVars);
+end;
+
+procedure TVarOrder.btnDefOrderClick(Sender: TObject);
+var
+ i, j: integer;
+ s, cap: string;
+begin
+ VarListView.Items.BeginUpdate;
+
+ if assigned(VarListView.Selected) then
+ cap := VarListView.Selected.Caption
+ else
+ cap := 'linear';
+ j := 0;
+
+ for i := 0 to totVars do
+ begin
+ s := Varnames(i);
+ VarListView.Items[i].Caption := s;
+ SetVarIcon(s, VarListView.Items[i]);
+ if s = cap then j := i;
+ end;
+ VarListView.Selected := VarListView.Items[j];
+ ShowSelected(j);
+
+ VarListView.Items.EndUpdate;
+ Changed := True;
+end;
+
+procedure TVarOrder.btnMoveDownClick(Sender: TObject);
+var i: integer;
+begin
+ if not assigned(VarListView.Selected) then
+ begin
+ Application.MessageBox(PChar(TextByKey('varorder-noselected')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+
+ i := VarListView.Selected.Index;
+ ExchangeVars(i, i + 1);
+ ShowSelected(i + 1);
+end;
+
+procedure TVarOrder.btnMoveUpClick(Sender: TObject);
+var i: integer;
+begin
+ if not assigned(VarListView.Selected) then
+ begin
+ Application.MessageBox(PChar(TextByKey('varorder-noselected')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+
+ i := VarListView.Selected.Index;
+ ExchangeVars(i, i - 1);
+ ShowSelected(i - 1);
+end;
+
+procedure TVarOrder.btnSortClick(Sender: TObject);
+begin
+ VarListView.Items.BeginUpdate;
+ VarListView.SortType := stText;
+ VarListView.SortType := stNone;
+ if not assigned(VarListView.Selected) then
+ VarListView.Selected := VarListView.Items[0];
+ ShowSelected(VarListView.Selected.Index);
+ VarListView.Items.EndUpdate;
+ Changed := True;
+end;
+
+procedure TVarOrder.btnTopClick(Sender: TObject);
+var i: integer;
+begin
+ if not assigned(VarListView.Selected) then
+ begin
+ Application.MessageBox(PChar(TextByKey('varorder-noselected')),
+ PChar('Apophysis AV'), MB_ICONWARNING);
+ exit;
+ end;
+
+ i := VarListView.Selected.Index;
+ ExchangeVars(i, 0);
+ ShowSelected(0);
+end;
+
+procedure TVarOrder.ExchangeVars(const i, j: integer);
+var
+ tmpVarItem: TListItem;
+ n: integer;
+begin
+ VarListView.Items.BeginUpdate;
+ tmpVarItem := TListItem.Create(VarListView.Items);
+ try
+ if (i < j) then
+ for n := i to (j - 1) do
+ begin
+ tmpVarItem.Assign(VarListView.Items.Item[n]);
+ VarListView.Items.Item[n] := VarListView.Items.Item[n + 1];
+ VarListView.Items.Item[n + 1] := tmpVarItem;
+ end
+ else // if (i > j) then
+ for n := i downto (j + 1) do
+ begin
+ tmpVarItem.Assign(VarListView.Items.Item[n]);
+ VarListView.Items.Item[n] := VarListView.Items.Item[n - 1];
+ VarListView.Items.Item[n - 1] := tmpVarItem;
+ end;
+ VarListView.Selected := VarListView.Items[j];
+ Changed := True;
+ finally
+ tmpVarItem.Free;
+ VarListView.Items.EndUpdate;
+ end;
+end;
+
+procedure TVarOrder.FormCreate(Sender: TObject);
+begin
+ btnOK.Caption := TextByKey('common-ok');
+ btnCancel.Caption := TextByKey('common-cancel');
+ btnMoveUp.Caption := TextByKey('favscripts-moveup');
+ btnMoveDown.Caption := TextByKey('favscripts-movedown');
+ btnTop.Caption := TextByKey('varorder-totop');
+ btnBottom.Caption := TextByKey('varorder-tobottom');
+ btnSort.Caption := TextByKey('varorder-byname');
+ btnSort.Hint := TextByKey('varorder-bynamehint');
+ btnDefOrder.Caption := TextByKey('varorder-byindex');
+ btnDefOrder.Hint := TextByKey('varorder-byindexhint');
+ self.Caption := TextByKey('varorder-title');
+ usedVars := TStringList.Create;
+end;
+
+procedure TVarOrder.FormDestroy(Sender: TObject);
+begin
+ usedVars.Free;
+end;
+
+procedure TVarOrder.FormShow(Sender: TObject);
+var
+ ListItem: TListItem;
+ i, SelTX: integer;
+ s: string;
+begin
+ Changed := False;
+ SelTX := EditForm.cbTransforms.ItemIndex;
+ if SelTX < EditForm.cp.NumXForms then
+ begin
+ s := TextByKey('editor-common-transform') + ' ' + IntToStr(SelTX + 1);
+ //if (EditForm.txtName.Text <> '') then
+ // s := s + ' - ' + EditForm.txtName.Text;
+ end else
+ s := TextByKey('editor-common-transform') + ' ' +
+ TextByKey('editor-common-finalxformlistitem');
+ VarListView.Column[0].Caption := s;
+ totVars := NrVar - 1;
+ VarListView.Items.BeginUpdate;
+ VarListView.Items.Clear;
+ usedVars.Clear;
+ for i := 0 to totVars do
+ begin
+ ListItem := VarListView.Items.Add;
+ s := EditForm.cp.xform[SelTX].ifs[i];
+ ListItem.Caption := s;
+ SetVarIcon(s, ListItem);
+ ListItem.Indent := 1;
+ if EditForm.cp.xform[SelTX].GetVariation(i) <> 0 then
+ usedVars.Add(Varnames(i));
+ end;
+ VarListView.Items.EndUpdate;
+ VarListView.Selected := VarListView.Items[0];
+end;
+
+procedure TVarOrder.SetVarIcon(const s: string; ListItem: TListItem);
+begin
+ if (LeftStr(s, 4) = 'pre_') or (s = 'flatten') then
+ ListItem.ImageIndex := 7 // red
+ else if LeftStr(s, 5) = 'post_' then
+ ListItem.ImageIndex := 4 // blue
+ else if (s = 'trianglecrop') or (s = 'projective')
+ or (s = 'affine3D') or (s = 'spherecrop') then
+ ListItem.ImageIndex := 6 // violet
+ else
+ ListItem.ImageIndex := 5 // blue;
+end;
+
+procedure TVarOrder.ShowSelected(const i: integer);
+begin
+ try
+ VarListView.Items[i].MakeVisible(false);
+ finally
+ VarListView.SetFocus;
+ end;
+end;
+
+procedure TVarOrder.VarListViewChange(Sender: TObject; Item: TListItem;
+ Change: TItemChange);
+begin
+ if (Item.Index = totVars) or (Item.Index < 0) then
+ begin
+ btnMoveDown.Enabled := False;
+ btnBottom.Enabled := False;
+ end else begin
+ btnMoveDown.Enabled := True;
+ btnBottom.Enabled := True;
+ end;
+ if (Item.Index <= 0) then
+ begin
+ btnMoveUp.Enabled := False;
+ btnTop.Enabled := False;
+ end else begin
+ btnMoveUp.Enabled := True;
+ btnTop.Enabled := True;
+ end;
+end;
+
+procedure TVarOrder.VarListViewCustomDrawItem(Sender: TCustomListView;
+ Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
+var
+ vRect: TRect;
+begin
+ DefaultDraw := True;
+ if (usedVars.Count = 0) then exit;
+ vRect := Item.DisplayRect(drLabel);
+ if usedVars.IndexOf(Item.Caption) >= 0 then
+ with VarListView.Canvas do
+ begin
+ if (CurrentStyle = 'Windows') then
+ Brush.Color := $0002B076
+ else
+ Brush.Color := BrightColor;
+ FillRect(vRect);
+ if (CurrentStyle = 'Auric') then // make the text more visible
+ Font.Color := WinColor
+ else
+ Font.Color := TextColor;
+ TextOut(vRect.Left + 2, vRect.Top + 2, Item.Caption);
+ end;
+end;
+
+procedure TVarOrder.VarListViewDragDrop(Sender, Source: TObject; X, Y: Integer);
+var
+ i, j: integer;
+begin
+ if not assigned(VarListView.Selected) then exit;
+
+ if Source = VarListView then
+ begin
+ try
+ i := VarListView.Selected.Index;
+ j := VarListView.GetItemAt(X,Y).Index;
+ if (j >= 0) and (i >= 0) and (i <> j) then
+ ExchangeVars(i, j);
+ except
+ Beep;
+ end;
+ end;
+end;
+
+procedure TVarOrder.VarListViewDragOver(Sender, Source: TObject; X, Y: Integer;
+ State: TDragState; var Accept: Boolean);
+begin
+ Accept := (Source = VarListView);
+end;
+
+end.
diff --git a/Forms/formPostProcess.dfm b/Forms/formPostProcess.dfm
new file mode 100644
index 0000000..6dcef9a
--- /dev/null
+++ b/Forms/formPostProcess.dfm
@@ -0,0 +1,279 @@
+object frmPostProcess: TfrmPostProcess
+ Left = 421
+ Top = 359
+ Caption = 'Post Render'
+ ClientHeight = 537
+ ClientWidth = 693
+ Color = clBtnFace
+ Constraints.MinHeight = 200
+ Constraints.MinWidth = 700
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ DesignSize = (
+ 693
+ 537)
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 693
+ Height = 81
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ DesignSize = (
+ 693
+ 81)
+ object pnlFilter: TPanel
+ Left = 8
+ Top = 32
+ Width = 110
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Filter Radius'
+ TabOrder = 11
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlVibrancy: TPanel
+ Left = 337
+ Top = 32
+ Width = 95
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Vibrancy'
+ TabOrder = 10
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlBrightness: TPanel
+ Left = 180
+ Top = 32
+ Width = 95
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Brightness'
+ TabOrder = 8
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlContrast: TPanel
+ Left = 337
+ Top = 8
+ Width = 95
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Contrast'
+ TabOrder = 9
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlGamma: TPanel
+ Left = 180
+ Top = 8
+ Width = 95
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Gamma'
+ TabOrder = 7
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object ProgressBar1: TProgressBar
+ Left = 8
+ Top = 61
+ Width = 682
+ Height = 20
+ Anchors = [akLeft, akRight, akBottom]
+ TabOrder = 15
+ end
+ object txtFilterRadius: TEdit
+ Left = 117
+ Top = 32
+ Width = 57
+ Height = 21
+ TabOrder = 2
+ OnKeyPress = EditKeyPress
+ end
+ object txtGamma: TEdit
+ Left = 274
+ Top = 8
+ Width = 57
+ Height = 21
+ TabOrder = 3
+ OnKeyPress = EditKeyPress
+ end
+ object txtVibrancy: TEdit
+ Left = 431
+ Top = 32
+ Width = 57
+ Height = 21
+ TabOrder = 6
+ OnKeyPress = EditKeyPress
+ end
+ object txtContrast: TEdit
+ Left = 431
+ Top = 8
+ Width = 57
+ Height = 21
+ TabOrder = 5
+ OnKeyPress = EditKeyPress
+ end
+ object txtBrightness: TEdit
+ Left = 274
+ Top = 32
+ Width = 57
+ Height = 21
+ TabOrder = 4
+ OnKeyPress = EditKeyPress
+ end
+ object pnlBackground: TPanel
+ Left = 495
+ Top = 8
+ Width = 100
+ Height = 21
+ Cursor = crArrow
+ BevelOuter = bvLowered
+ Caption = 'Background'
+ TabOrder = 12
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object pnlBackColor: TPanel
+ Left = 600
+ Top = 8
+ Width = 57
+ Height = 21
+ Cursor = crHandPoint
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ BorderStyle = bsSingle
+ TabOrder = 0
+ OnClick = pnlBackColorClick
+ object shBack: TShape
+ Left = 2
+ Top = 2
+ Width = 49
+ Height = 13
+ Align = alClient
+ Brush.Color = clBlack
+ Pen.Color = clWindow
+ Pen.Style = psClear
+ Pen.Width = 0
+ OnMouseUp = shBackMouseUp
+ ExplicitLeft = 0
+ end
+ end
+ object btnApply: TButton
+ Left = 535
+ Top = 32
+ Width = 97
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&Apply'
+ Default = True
+ TabOrder = 13
+ OnClick = btnApplyClick
+ end
+ object pnlRelGamma: TPanel
+ Left = 8
+ Top = 8
+ Width = 110
+ Height = 21
+ Cursor = crHandPoint
+ BevelOuter = bvLowered
+ Caption = 'Gamma Threshold'
+ TabOrder = 14
+ OnDblClick = DragPanelDblClick
+ OnMouseDown = DragPanelMouseDown
+ OnMouseMove = DragPanelMouseMove
+ OnMouseUp = DragPanelMouseUp
+ end
+ object txtRelGamma: TEdit
+ Left = 117
+ Top = 8
+ Width = 57
+ Height = 21
+ TabOrder = 1
+ OnKeyPress = EditKeyPress
+ end
+ end
+ object ScrollBox1: TScrollBox
+ Left = 8
+ Top = 88
+ Width = 689
+ Height = 417
+ Align = alCustom
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ BevelInner = bvNone
+ BevelKind = bkSoft
+ BorderStyle = bsNone
+ Color = clAppWorkSpace
+ ParentColor = False
+ TabOrder = 1
+ object Image: TImage
+ Left = 0
+ Top = 0
+ Width = 687
+ Height = 415
+ Align = alClient
+ AutoSize = True
+ Center = True
+ Proportional = True
+ Stretch = True
+ end
+ end
+ object btnSave: TButton
+ Left = 588
+ Top = 510
+ Width = 97
+ Height = 25
+ Anchors = [akRight, akBottom]
+ Caption = '&Save'
+ TabOrder = 2
+ OnClick = btnSaveClick
+ end
+ object chkFitToWindow: TCheckBox
+ Left = 8
+ Top = 512
+ Width = 490
+ Height = 17
+ Anchors = [akLeft, akRight, akBottom]
+ Caption = 'Fit to window'
+ Checked = True
+ State = cbChecked
+ TabOrder = 3
+ Visible = False
+ OnClick = chkFitToWindowClick
+ end
+ object ColorDialog: TColorDialog
+ Left = 612
+ Top = 76
+ end
+end
diff --git a/Forms/formPostProcess.pas b/Forms/formPostProcess.pas
new file mode 100644
index 0000000..6f7d6ed
--- /dev/null
+++ b/Forms/formPostProcess.pas
@@ -0,0 +1,568 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit formPostProcess;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, ExtCtrls, RenderingInterface, controlpoint, StdCtrls, ComCtrls,
+ Translation;
+
+type
+ TfrmPostProcess = class(TForm)
+ Panel1: TPanel;
+ ScrollBox1: TScrollBox;
+ Image: TImage;
+ pnlBackColor: TPanel;
+ ColorDialog: TColorDialog;
+ ProgressBar1: TProgressBar;
+ txtFilterRadius: TEdit;
+ txtGamma: TEdit;
+ txtVibrancy: TEdit;
+ txtContrast: TEdit;
+ txtBrightness: TEdit;
+ pnlGamma: TPanel;
+ pnlBrightness: TPanel;
+ pnlContrast: TPanel;
+ pnlVibrancy: TPanel;
+ pnlFilter: TPanel;
+ shBack: TShape;
+ pnlBackground: TPanel;
+ btnSave: TButton;
+ chkFitToWindow: TCheckBox;
+ btnApply: TButton;
+ pnlRelGamma: TPanel;
+ txtRelGamma: TEdit;
+ procedure chkFitToWindowClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure btnSaveClick(Sender: TObject);
+ procedure btnApplyClick(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure pnlBackColorClick(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormShow(Sender: TObject);
+
+ procedure DragPanelMouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure DragPanelMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure DragPanelMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure DragPanelDblClick(Sender: TObject);
+ procedure shBackMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure EditKeyPress(Sender: TObject; var Key: Char);
+ private
+ { Private declarations }
+ FRenderer: TBaseRenderer;
+ FCP: TControlPoint;
+ FImagename: string;
+
+ pnlDragMode, pnlDragged, pnlMM: boolean;
+ pnlDragPos, pnlDragOld: integer;
+ pnlDragValue: double;
+ mousepos: TPoint;
+
+ BkgColor: TColor;
+ Filter,
+ Gamma, Brightness, RelGamma,
+ Contrast, Vibrancy: double;
+
+ ImCount: shortint; // AV: the number of saved images
+ NewName: string; // AV
+
+ procedure UpdateFlame;
+ procedure SetDefaultValues;
+
+ procedure OnProgress(prog: double);
+
+ public
+ cp : TControlPoint;
+
+ procedure SetRenderer(Renderer: TBaseRenderer);
+ procedure SetControlPoint(CP: TControlPoint);
+ procedure SetImageName(imagename: string);
+ end;
+
+var
+ frmPostProcess: TfrmPostProcess;
+
+implementation
+
+uses
+ Registry, Global, Main;
+
+{$R *.dfm}
+
+{ TfrmPostProcess }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.SetRenderer(Renderer: TBaseRenderer);
+begin
+ if assigned(FRenderer) then
+ FRenderer.Free;
+
+ FRenderer := Renderer;
+ Frenderer.OnProgress := OnProgress;
+ Image.Picture.Graphic := FRenderer.GetImage;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.FormShow(Sender: TObject);
+var
+ Registry: TRegistry;
+begin
+ { Read posution from registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('Software\' + APP_NAME + '\Forms\PostProcess', False) then begin
+ if Registry.ValueExists('Left') then
+ Left := Registry.ReadInteger('Left');
+ if Registry.ValueExists('Top') then
+ Top := Registry.ReadInteger('Top');
+ //if Registry.ValueExists('Width') then
+ //Width := Registry.ReadInteger('Width');
+ //if Registry.ValueExists('Height') then
+ // Height := Registry.ReadInteger('Height');
+ end;
+ Registry.CloseKey;
+ finally
+ Registry.Free;
+ end;
+
+ ImCount := -1; // AV: reset the counter
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ Registry: TRegistry;
+begin
+ { Write position to registry }
+ Registry := TRegistry.Create;
+ try
+ Registry.RootKey := HKEY_CURRENT_USER;
+ if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\PostProcess', True) then
+ begin
+ Registry.WriteInteger('Top', Top);
+ Registry.WriteInteger('Left', Left);
+ // Registry.WriteInteger('Width', Width);
+ // Registry.WriteInteger('Height', Height);
+ end;
+ finally
+ Registry.Free;
+ end;
+
+ FRenderer.Free; // weirdness!!! :-/
+ FRenderer := nil;
+ Image.Picture.Graphic := nil;
+ FCP.Free;
+ FCP := nil;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.SetDefaultValues;
+begin
+ BkgColor := RGB(Fcp.background[0], Fcp.background[1], Fcp.background[2]);
+ pnlBackColor.Color := BkgColor;
+ shBack.Brush.Color := BkgColor;
+ Filter := FCP.spatial_filter_radius;
+ txtFilterRadius.Text := FloatTostr(Filter);
+ Gamma := FCP.gamma;
+ txtGamma.Text := FloatTostr(Gamma);
+ RelGamma := FCP.gammaThreshRelative; // AV
+ txtRelGamma.Text := FloatTostr(RelGamma); // AV
+ Vibrancy := FCP.vibrancy;
+ txtVibrancy.Text := FloatTostr(Vibrancy);
+ Contrast := FCP.contrast;
+ txtContrast.Text := FloatTostr(Contrast);
+ Brightness := FCP.brightness;
+ txtBrightness.Text := FloatTostr(brightness);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.SetControlPoint(CP: TControlPoint);
+begin
+ if assigned(FCP) then
+ FCP.Free;
+
+ FCP := cp.Clone;
+ SetDefaultValues;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.pnlBackColorClick(Sender: TObject);
+var
+ col: Longint;
+begin
+ ColorDialog.Color := shBack.Brush.Color;
+ if ColorDialog.Execute then begin
+ pnlBackColor.Color := ColorDialog.Color;
+ shBack.Brush.Color := ColorDialog.Color;
+ col := ColorToRGB(ColorDialog.Color);
+ Fcp.background[0] := col and 255;
+ Fcp.background[1] := (col shr 8) and 255;
+ Fcp.background[2] := (col shr 16) and 255;
+ UpdateFlame;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.UpdateFlame;
+begin
+ Screen.Cursor := crHourGlass;
+ FRenderer.UpdateImage(FCP);
+ Image.Picture.Graphic := FRenderer.GetImage;
+ Screen.Cursor := crDefault;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.FormDestroy(Sender: TObject);
+begin
+ if assigned(FRenderer) then
+ FRenderer.Free;
+
+ if assigned(FCP) then
+ FCP.Free;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.OnProgress(prog: double);
+begin
+ ProgressBar1.Position := round(100 * prog);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.btnApplyClick(Sender: TObject);
+var
+ temp, tempg: double;
+begin
+ TryStrToFloat(txtFilterRadius.Text, FCP.spatial_filter_radius);
+ if FCP.spatial_filter_radius > 2 then begin
+ FCP.spatial_filter_radius := 2;
+ txtFilterRadius.Text := '2';
+ end else if FCP.spatial_filter_radius < 0 then begin
+ FCP.spatial_filter_radius := 0.01;
+ txtFilterRadius.Text := FloatTostr(0.01);
+ end;
+
+ TryStrToFloat(txtGamma.Text, FCP.gamma);
+ if FCP.gamma > 10 then begin
+ FCP.gamma := 10;
+ txtGamma.Text := '10';
+ end else if FCP.gamma < 0.01 then begin
+ FCP.gamma := 0.01;
+ txtGamma.Text := FloatTostr(0.01);
+ end;
+
+ // AV
+ if TryStrToFloat(txtRelGamma.Text, tempg) then FCP.gammathreshrelative := tempg;
+ if FCP.gammathreshrelative < 0 then begin
+ FCP.gammathreshrelative := 0;
+ txtRelGamma.Text := '0';
+ end;
+
+ TryStrToFloat(txtVibrancy.Text, FCP.vibrancy);
+ if FCP.vibrancy > 30 then begin // AV: maximum was 10,
+ FCP.vibrancy := 30; // but Apo allows to use higher values
+ txtVibrancy.Text := '30'; // AV
+ end else if FCP.vibrancy < 0.01 then begin
+ FCP.vibrancy := 0.01;
+ txtVibrancy.Text := FloatTostr(0.01);
+ end;
+
+ TryStrToFloat(txtContrast.Text, FCP.contrast);
+ if FCP.contrast > 10 then begin
+ FCP.contrast := 10;
+ txtContrast.Text := '10';
+ end else if FCP.contrast < 0.01 then begin
+ FCP.contrast := 0.01;
+ txtContrast.Text := FloatTostr(0.01);
+ end;
+
+ if TryStrToFloat(txtBrightness.Text, temp) then FCP.brightness := temp;
+ //TryStrToFloat(txtBrightness.Text, FCP.brightness);
+ if FCP.brightness > 100 then begin
+ FCP.brightness := 100;
+ txtBrightness.Text := '100';
+ end else if FCP.brightness < 0.01 then begin
+ FCP.brightness := 0.01;
+ txtBrightness.Text := FloatTostr(0.01);
+ end;
+
+ UpdateFlame;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.btnSaveClick(Sender: TObject);
+begin
+ inc(ImCount);
+ if ImCount = 0 then
+ FRenderer.SaveImage(FImagename)
+ else begin // AV: enumerating different versions of the image
+ NewName := FImagename;
+ Insert(' (' + IntToStr(ImCount) + ')', NewName, length(NewName) - 3);
+ FRenderer.SaveImage(NewName);
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TfrmPostProcess.SetImageName(imagename: string);
+begin
+ FImagename := imagename;
+end;
+
+// -----------------------------------------------------------------------------
+
+procedure TfrmPostProcess.DragPanelMouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ if Button <> mbLeft then exit;
+
+ if (Sender = pnlFilter) then
+ pnlDragValue := fcp.spatial_filter_radius * 10
+ else if (Sender = pnlGamma) then
+ pnlDragValue := fcp.gamma
+ else if (Sender = pnlRelGamma) then // AV
+ pnlDragValue := fcp.gammaThreshRelative * 10
+ else if (Sender = pnlBrightness) then
+ pnlDragValue := fcp.brightness
+ else if (Sender = pnlContrast) then
+ pnlDragValue := fcp.contrast
+ else if (Sender = pnlVibrancy) then
+ pnlDragValue := fcp.vibrancy
+ else exit;//assert(false);
+
+ pnlDragMode := true;
+ pnlDragPos := 0;
+ pnlDragOld := x;
+ pnlMM := false;
+ SetCaptureControl(TControl(Sender));
+ Screen.Cursor := crHSplit;
+ GetCursorPos(mousepos); // hmmm
+ pnlDragged := false;
+end;
+
+procedure TfrmPostProcess.DragPanelMouseMove(Sender: TObject; Shift: TShiftState;
+ X, Y: Integer);
+var
+ v: double;
+ pEdit: ^TEdit;
+ enableDrag : boolean;
+begin
+ if pnlMM then // hack: to skip MouseMove event
+ begin
+ pnlMM:=false;
+ end
+ else
+ if pnlDragMode and (x <> pnlDragOld) then
+ begin
+ Inc(pnlDragPos, x - pnlDragOld);
+
+ if GetKeyState(VK_MENU) < 0 then v := 100000
+ else if GetKeyState(VK_CONTROL) < 0 then v := 10000
+ else if GetKeyState(VK_SHIFT) < 0 then v := 100
+ else v := 1000;
+
+ v := Round6(pnlDragValue + pnlDragPos / v);
+
+ SetCursorPos(MousePos.x, MousePos.y); // hmmm
+ pnlMM:=true;
+
+ enableDrag := true;
+ if (Sender = pnlFilter) then
+ begin
+ v := v / 10;
+ if v > 2 then v := 2
+ else if v < 0.01 then v := 0.01;
+ fcp.spatial_filter_radius := v;
+ pEdit := @txtFilterRadius;
+ end
+ else if (Sender = pnlGamma) then
+ begin
+ if v > 10 then v := 10
+ else if v < 0.01 then v := 0.01;
+ fcp.gamma := v;
+ pEdit := @txtGamma;
+ end
+ else if (Sender = pnlRelGamma) then
+ begin
+ v := v * 0.1;
+ if v < 0 then v := 0;
+ fcp.gammaThreshRelative := v;
+ pEdit := @txtRelGamma;
+ end
+ else if (Sender = pnlBrightness) then
+ begin
+ if v > 100 then v := 100
+ else if v < 0.01 then v := 0.01;
+ fcp.brightness := v;
+ pEdit := @txtBrightness;
+ end
+ else if (Sender = pnlContrast) then
+ begin
+ if v > 10 then v := 10
+ else if v < 0.01 then v := 0.01;
+ fcp.contrast := v;
+ pEdit := @txtContrast;
+ end
+ else if (Sender = pnlVibrancy) then
+ begin
+ if v > 30 then v := 30 // AV: was 10, but higher values are allowed
+ else if v < 0.01 then v := 0.01;
+ fcp.vibrancy := v;
+ pEdit := @txtVibrancy;
+ end else exit;
+
+ if enableDrag then begin
+ pEdit^.Text := FloatToStr(v);
+ //pEdit.Refresh;
+ pnlDragged := True;
+ // TODO: image preview (?)
+ //DrawPreview;
+ end;
+ end;
+end;
+
+procedure TfrmPostProcess.DragPanelMouseUp(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+begin
+ if Button <> mbLeft then exit;
+
+ if pnlDragMode then
+ begin
+ SetCaptureControl(nil);
+ pnlDragMode := false;
+ Screen.Cursor := crDefault;
+
+ if pnlDragged then
+ begin
+ //UpdateFlame;
+ pnlDragged := False;
+ end;
+ end;
+end;
+
+procedure TfrmPostProcess.EditKeyPress(Sender: TObject; var Key: Char);
+begin // AV
+ if (Key = ',') then Key := '.'; //FormatSettings.DecimalSeparator;
+ if not CharinSet(Key,['0'..'9', #8, #13, '.'])
+ then Key:= #0;
+end;
+
+procedure TfrmPostProcess.DragPanelDblClick(Sender: TObject);
+var
+ pValue: ^double;
+ pDefaultValue: ^double;
+ pEdit: ^TEdit;
+begin
+ if (Sender = pnlFilter) then
+ begin
+ pValue := @fcp.spatial_filter_radius;
+ pDefaultValue := @Filter;
+ pEdit := @txtFilterRadius;
+ end
+ else if (Sender = pnlGamma) then
+ begin
+ pValue := @fcp.gamma;
+ pDefaultValue := @Gamma;
+ pEdit := @txtGamma;
+ end
+ else if (Sender = pnlRelGamma) then
+ begin
+ // AV: because it's a property, not a field
+ if fcp.gammaThreshRelative = RelGamma then exit;
+ fcp.gammaThreshRelative := RelGamma;
+ txtRelGamma.Text := FloatToStr(fcp.gammaThreshRelative);
+ exit;
+ end
+ else if (Sender = pnlBrightness) then
+ begin
+ if fcp.brightness = Brightness then exit;
+ fcp.brightness := Brightness;
+ txtBrightness.Text := FloatToStr(fcp.brightness);
+ exit;
+ end
+ else if (Sender = pnlContrast) then
+ begin
+ pValue := @fcp.contrast;
+ pDefaultValue := @Contrast;
+ pEdit := @txtContrast
+ end
+ else if (Sender = pnlVibrancy) then
+ begin
+ pValue := @fcp.vibrancy;
+ pDefaultValue := @Vibrancy;
+ pEdit := @txtVibrancy;
+ end
+ else exit; //assert(false);
+
+ if pValue^ = pDefaultValue^ then exit;
+ pValue^ := pDefaultValue^;
+ pEdit^.Text := FloatToStr(pValue^);
+ //UpdateFlame;
+end;
+
+procedure TfrmPostProcess.shBackMouseUp(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ pnlBackColorClick(sender);
+end;
+
+procedure TfrmPostProcess.FormCreate(Sender: TObject);
+begin
+ btnApply.Caption := TextByKey('common-apply');
+ pnlFilter.Caption := TextByKey('common-filterradius');
+ pnlGamma.Caption := TextByKey('common-gamma');
+ pnlRelGamma.Caption := TextByKey('common-gammathreshold');
+ pnlBrightness.Caption := TextByKey('common-brightness');
+ pnlContrast.Caption := TextByKey('common-contrast');
+ pnlVibrancy.Caption := TextByKey('common-vibrancy');
+ pnlBackground.Caption := TextByKey('common-background');
+ pnlFilter.Hint := TextByKey('common-dragpanelhint');
+ pnlGamma.Hint := TextByKey('common-dragpanelhint');
+ pnlBrightness.Hint := TextByKey('common-dragpanelhint');
+ pnlVibrancy.Hint := TextByKey('common-dragpanelhint');
+ pnlContrast.Hint := TextByKey('common-dragpanelhint');
+ pnlRelGamma.Hint := TextByKey('common-dragpanelhint');
+ self.Caption := TextByKey('postprocess-title');
+ btnSave.Caption := TextByKey('postprocess-save');
+ chkFitToWindow.Caption := TextByKey('postprocess-fittowindow');
+end;
+
+procedure TfrmPostProcess.chkFitToWindowClick(Sender: TObject);
+begin
+ {if (chkFitToWindow.Checked) then begin
+ Image.Stretch := true;
+ Image.Align := alClient;
+ end else begin
+ Image.Stretch := false;
+ Image.Align := alNone;
+ end; }
+end;
+
+end.
diff --git a/HARLOWSI.TTF b/HARLOWSI.TTF
new file mode 100644
index 0000000..3c59ef9
Binary files /dev/null and b/HARLOWSI.TTF differ
diff --git a/Licence.txt b/Licence.txt
new file mode 100644
index 0000000..e72bfdd
--- /dev/null
+++ b/Licence.txt
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+ .
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
\ No newline at end of file
diff --git a/Rendering/BucketFillerThread.pas b/Rendering/BucketFillerThread.pas
new file mode 100644
index 0000000..308a177
--- /dev/null
+++ b/Rendering/BucketFillerThread.pas
@@ -0,0 +1,109 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit BucketFillerThread;
+
+interface
+
+uses
+ Classes, Windows, ControlPoint, RenderingInterface, XForm;
+
+type
+ TBucketFillerThread = class(TThread)
+
+ private
+ fcp: TControlPoint;
+ points: TPointsArray;
+
+ public
+ nrbatches: integer;
+ batchcounter: Pinteger;
+
+ ColorMap: TColorMapArray;
+ CriticalSection: TRTLCriticalSection;
+
+ AddPointsProc: procedure (const points: TPointsArray) of object;
+
+ constructor Create(cp: TControlPoint);
+ destructor Destroy; override;
+
+ procedure Execute; override;
+
+ end;
+
+implementation
+
+//uses SysUtils, FormRender;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TBucketFillerThread.Create(cp: TControlPoint);
+begin
+ inherited Create(True);
+ //Self.FreeOnTerminate := True;
+
+ Fcp := cp.Clone;
+
+ SetLength(Points, SUB_BATCH_SIZE);
+
+ fcp.Prepare;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+destructor TBucketFillerThread.Destroy;
+begin
+ FCP.Free;
+
+ inherited;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBucketFillerThread.Execute;
+var
+ bc: integer;
+begin
+ inherited;
+ //RenderForm.Output.Lines.Add(' . . . > Filler thread #' + IntToStr(ThreadID) + ' Started');
+
+ bc := 0;
+ while (not Terminated) and (bc < Nrbatches) do begin
+ fcp.iterateXYC(SUB_BATCH_SIZE, points);
+
+ try
+ EnterCriticalSection(CriticalSection);
+
+ AddPointsProc(Points);
+
+ Inc(batchcounter^);
+ bc := batchcounter^
+ finally
+ LeaveCriticalSection(CriticalSection);
+ end;
+ end;
+ //RenderForm.Output.Lines.Add(' . . . > Filler thread #' + IntToStr(ThreadID) + ' Finished');
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+{ -- RENDER THREAD MUST *NOT* KNOW ANYTHING ABOUT BUCKETS!!! -- }
+
+end.
diff --git a/Rendering/ImageMaker.pas b/Rendering/ImageMaker.pas
new file mode 100644
index 0000000..edd0285
--- /dev/null
+++ b/Rendering/ImageMaker.pas
@@ -0,0 +1,860 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit ImageMaker;
+
+interface
+
+uses
+ Windows, Graphics, ControlPoint, RenderingCommon, PngImage, Bezier;
+
+type TPalette = record
+ logpal : TLogPalette;
+ colors: array[0..255] of TPaletteEntry;
+ end;
+
+type
+ TImageMaker = class
+ private
+ FOversample: Integer;
+ FFilterSize: Integer;
+ FFilter: array of array of double;
+ FParameters : String;
+
+ FBitmap: TBitmap;
+ FAlphaBitmap: TBitmap;
+ AlphaPalette: TPalette;
+ FTransparentImage: TBitmap;
+
+ comp_max_radius, comp_min_radius : double;
+ num_de_filters_d, num_de_filters : double;
+ de_max_ind, de_count_limit : double;
+ de_cutoff_val : double;
+ de_row_size, de_half_size, de_kernel_index : double;
+ de_filter_coefs, de_filter_widths : array of double;
+
+ FCP: TControlPoint;
+
+ FBucketHeight: integer;
+ FBucketWidth: integer;
+ FBuckets: TBucketArray;
+ FOnProgress: TOnProgress;
+ FGetBucket: function(x, y: integer): TBucket of object;
+ FCommentStr: string; // AV: for xml-params embedding
+ function GetBucket(x, y: integer): TBucket;
+ function SafeGetBucket(x, y: integer): TBucket;
+
+ procedure CreateFilter;
+ procedure InitDE;
+ procedure NormalizeFilter;
+
+ public
+ constructor Create;
+ destructor Destroy; override;
+
+ function GetImage: TBitmap;
+ procedure GetImageAndDelete(target:tBitmap);
+ function GetTransparentImage: TPNGObject;
+
+ procedure SetCP(CP: TControlPoint);
+ procedure Init;
+ procedure SetBucketData(const Buckets: pointer; BucketWidth, BucketHeight: integer; bits: integer);
+
+ function GetFilterSize: Integer;
+
+ procedure CreateImage(YOffset: integer = 0);
+ procedure SaveImage(FileName: String);
+
+ procedure GetBucketStats(var Stats: TBucketStats);
+ function EmbedText(CommentStr: String): boolean; //AV
+
+ property OnProgress: TOnProgress
+// read FOnProgress
+ write FOnProgress;
+ end;
+
+implementation
+
+uses
+ Math, SysUtils, JPEG, Global, Types;
+
+{ TImageMaker }
+
+type
+ TRGB = packed Record
+ blue: byte;
+ green: byte;
+ red: byte;
+ end;
+
+ PByteArray = ^TByteArray;
+ TByteArray = array[0..0] of byte;
+// PLongintArray = ^TLongintArray;
+// TLongintArray = array[0..0] of Longint;
+ PRGBArray = ^TRGBArray;
+ TRGBArray = array[0..0] of TRGB;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TImageMaker.Create;
+var
+ i: integer;
+begin
+ AlphaPalette.logpal.palVersion := $300;
+ AlphaPalette.logpal.palNumEntries := 256;
+ for i := 0 to 255 do
+ with AlphaPalette.logpal.palPalEntry[i] do begin
+ peRed := i;
+ peGreen := i;
+ peBlue := i;
+ end;
+ FCommentStr := ''; // AV
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+destructor TImageMaker.Destroy;
+begin
+ if assigned(FBitmap) then
+ FBitmap.Free;
+
+ if assigned(FAlphaBitmap) then
+ FAlphaBitmap.Free;
+
+ if assigned(FTransparentImage) then
+ FTransparentImage.Free;
+
+ inherited;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TImageMaker.CreateFilter;
+var
+ i, j: integer;
+ fw: integer;
+ adjust: double;
+ ii, jj: double;
+begin
+
+ FOversample := fcp.spatial_oversample;
+ fw := Trunc(2.0 * FILTER_CUTOFF * FOversample * fcp.spatial_filter_radius);
+ FFilterSize := fw + 1;
+
+ // make sure it has same parity as oversample
+ if odd(FFilterSize + FOversample) then
+ inc(FFilterSize);
+
+ if (fw > 0.0) then
+ adjust := (1.0 * FILTER_CUTOFF * FFilterSize) / fw
+ else
+ adjust := 1.0;
+
+ setLength(FFilter, FFilterSize, FFilterSize);
+ if fcp.enable_de and false then InitDE;
+
+ for i := 0 to FFilterSize - 1 do begin
+ for j := 0 to FFilterSize - 1 do begin
+ ii := ((2.0 * i + 1.0)/ FFilterSize - 1.0) * adjust;
+ jj := ((2.0 * j + 1.0)/ FFilterSize - 1.0) * adjust;
+
+ FFilter[i, j] := exp(-2.0 * (ii * ii + jj * jj));
+ end;
+ end;
+
+ Normalizefilter;
+end;
+
+procedure TImageMaker.InitDE;
+var
+ e, em, ec : double;
+ filtloop : integer;
+
+ de_filt_sum, de_filt_d, de_filt_h : double;
+ adjloop, sfx : double;
+ dej,dek, filter_coef_idx : integer;
+ sl : integer;
+begin
+ de_filt_sum := 0;
+
+ if (fcp.estimator < 0.0) then
+ e := 0
+ else
+ e := fcp.estimator;
+
+ if (fcp.estimator_min < 0.0) then
+ em := 0
+ else
+ em := fcp.estimator_min;
+
+ if (fcp.estimator_curve < 0.0) then
+ ec := 0
+ else
+ ec := fcp.estimator_curve;
+
+ if (e <= 0) then exit;
+
+ comp_max_radius := e*Foversample + 1;
+ comp_min_radius := em*Foversample + 1;
+
+ num_de_filters_d := power(comp_max_radius/comp_min_radius, (1.0/ec));
+ num_de_filters := ceil(num_de_filters_d);
+
+ if (num_de_filters>100) then begin
+ de_max_ind := ceil(100 + power(num_de_filters - 100, ec)) + 1;
+ de_count_limit := power(de_max_ind - 100, 1.0/ec) + 100;
+ end else begin
+ de_max_ind := num_de_filters;
+ de_count_limit := de_max_ind;
+ end;
+
+ de_row_size := 2*ceil(comp_max_radius)-1;
+ de_half_size := (de_row_size-1)/2;
+ de_kernel_index := (de_half_size+1)*(2+de_half_size)/2;
+
+ sl := Trunc(de_max_ind * de_kernel_index);
+ //assert(sl >= 0);
+ if (sl < 0) then sl := 0;
+ setLength(de_filter_coefs, sl);
+
+ sl := Trunc(de_max_ind);
+ //assert(sl >= 0);
+ if (sl < 0) then sl := 0;
+ setLength(de_filter_widths, sl);
+
+ de_cutoff_val := 0;
+ for filtloop := 0 to trunc(de_max_ind)-1 do begin
+ if (filtloop < 100) then
+ de_filt_h := (comp_max_radius / power(filtloop+1, ec))
+ else begin
+ adjloop := power(filtloop - 100, (1/ec))+100;
+ de_filt_h := (comp_max_radius / power(adjloop+1, ec))
+ end;
+
+ if (de_filt_h <= comp_min_radius) then begin
+ de_filt_h := comp_min_radius;
+ de_cutoff_val := filtloop;
+ end;
+
+ de_filter_widths[filtloop] := de_filt_h;
+
+ for dej := -trunc(de_half_size) to trunc(de_half_size) do
+ for dek := -trunc(de_half_size) to trunc(de_half_size) do begin
+ de_filt_d := sqrt(dej * dej + dek * dek) / de_filt_h;
+ if (de_filt_d <= 1.0) then begin
+ sfx := 1.8 * de_filt_d;
+ de_filt_sum := de_filt_sum + (exp(-2.0*sfx*sfx)*0.7978845608);
+ end; // -X- ^^^ sqrt(2/PI)
+ end;
+
+ filter_coef_idx := filtloop * trunc(de_kernel_index);
+
+ for dej := 0 to trunc(de_half_size) do
+ for dek := 0 to dej-1 do begin
+ de_filt_d := sqrt(dej * dej + dek * dek) / de_filt_h;
+ if (de_filt_d>1.0) then begin
+ // -X- TODO fix...
+ if (filter_coef_idx >= 0) and (filter_coef_idx < Trunc(de_max_ind * de_kernel_index)) then
+ de_filter_coefs[filter_coef_idx] := 0
+ end else begin
+ sfx := 1.8 * de_filt_d;
+ if (filter_coef_idx >= 0) and (filter_coef_idx < Trunc(de_max_ind * de_kernel_index)) then
+ de_filter_coefs[filter_coef_idx] := (exp(-2.0*sfx*sfx)*0.7978845608) / de_filt_sum;
+ end;
+ Inc(filter_coef_idx);
+ end;
+
+ if (de_cutoff_val > 0) then break;
+ end;
+
+ if (de_cutoff_val=0) then
+ de_cutoff_val := num_de_filters-1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TImageMaker.NormalizeFilter;
+var
+ i, j: integer;
+ t: double;
+begin
+ t := 0;
+ for i := 0 to FFilterSize - 1 do
+ for j := 0 to FFilterSize - 1 do
+ t := t + FFilter[i, j];
+
+ for i := 0 to FFilterSize - 1 do
+ for j := 0 to FFilterSize - 1 do
+ FFilter[i, j] := FFilter[i, j] / t;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TImageMaker.GetFilterSize: Integer;
+begin
+ Result := FFiltersize;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TImageMaker.GetImage: TBitmap;
+begin
+// if ShowTransparency then
+// Result := GetTransparentImage
+// else
+ Result := FBitmap;
+end;
+
+procedure TImageMaker.GetImageAndDelete(target:tBitmap);
+begin
+ assert(false);
+ //target.Assign(FBitmap);
+ //FBitmap.Free;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TImageMaker.Init;
+begin
+ if not Assigned(FBitmap) then
+ FBitmap := TBitmap.Create;
+
+ FBitmap.PixelFormat := pf24bit;
+
+ FBitmap.Width := Fcp.Width;
+ FBitmap.Height := Fcp.Height;
+
+ if not Assigned(FAlphaBitmap) then
+ FAlphaBitmap := TBitmap.Create;
+
+ FAlphaBitmap.PixelFormat := pf8bit;
+ FAlphaBitmap.Width := Fcp.Width;
+ FAlphaBitmap.Height := Fcp.Height;
+
+ CreateFilter;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TImageMaker.SetBucketData(const Buckets: pointer; BucketWidth, BucketHeight: integer; bits: integer);
+begin
+ FBuckets := TBucketArray(Buckets);
+
+ FBucketWidth := BucketWidth;
+ FBucketHeight := BucketHeight;
+
+ FGetBucket := GetBucket;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TImageMaker.SetCP(CP: TControlPoint);
+begin
+ Fcp := CP;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TImageMaker.CreateImage(YOffset: integer);
+var
+ gamma: double;
+ i, j: integer;
+ alpha: double;
+ ri, gi, bi: Integer;
+ ai, ia: integer;
+ bgtot, zero_BG: TRGB;
+ ls: double;
+ ii, jj: integer;
+ fp: array[0..3] of double;
+ Row: PRGBArray;
+ AlphaRow: PbyteArray;
+ vib, notvib: Integer;
+ bgi: array[0..2] of Integer;
+// bucketpos: Integer;
+ filterValue: double;
+// filterpos: Integer;
+ lsa: array[0..1024] of double;
+ csa: array[0..3] of array[0..256] of double;
+ sample_density: extended;
+ gutter_width: integer;
+ k1, k2: double;
+ area: double;
+ frac, funcval: double;
+ f_select : double;
+ f_select_int, f_coef_idx : integer;
+ arr_filt_width : integer;
+ c : array of double;
+ ss : integer;
+ scf:boolean;
+ scfact : double;
+ acc : integer;
+ avg, fac: double;
+ curvesSet: boolean;
+
+ GetBucket: function(x, y: integer): TBucket of object;
+ bucket: TBucket;
+ bx, by: integer;
+ label zero_alpha;
+begin
+ SetLength(c, 4);
+
+ if fcp.gamma = 0 then
+ gamma := fcp.gamma
+ else
+ gamma := 1 / fcp.gamma;
+ vib := round(fcp.vibrancy * 256.0);
+ notvib := 256 - vib;
+
+ if fcp.gamma_threshold <> 0 then
+ funcval := power(fcp.gamma_threshold, gamma - 1) { / fcp.gamma_threshold; }
+ else funcval := 0;
+
+ bgi[0] := round(fcp.background[0]);
+ bgi[1] := round(fcp.background[1]);
+ bgi[2] := round(fcp.background[2]);
+ bgtot.red := bgi[0];
+ bgtot.green := bgi[1];
+ bgtot.blue := bgi[2];
+ zero_BG.red := 0;
+ zero_BG.green := 0;
+ zero_BG.blue := 0;
+
+ curvesSet := true;
+ for i := 0 to 3 do
+ curvesSet := curvesSet and (
+ ((fcp.curvePoints[i][0].x = 0) and (fcp.curvePoints[i][0].y = 0)) and
+ ((fcp.curvePoints[i][1].x = 0) and (fcp.curvePoints[i][1].y = 0)) and
+ ((fcp.curvePoints[i][2].x = 1) and (fcp.curvePoints[i][2].y = 1)) and
+ ((fcp.curvePoints[i][3].x = 1) and (fcp.curvePoints[i][3].y = 1))
+ );
+ curvesSet := not curvesSet;
+
+ gutter_width := FBucketwidth - FOversample * fcp.Width;
+// gutter_width := 2 * ((25 - Foversample) div 2);
+ if(FFilterSize <= gutter_width div 2) then // filter too big when 'post-processing' ?
+ GetBucket := FGetBucket
+ else
+ GetBucket := SafeGetBucket;
+
+ FBitmap.PixelFormat := pf24bit;
+
+ sample_density := fcp.actual_density * sqr( power(2, fcp.zoom) );
+ if sample_density = 0 then sample_density := 0.001;
+ k1 := (fcp.Contrast * BRIGHT_ADJUST * fcp.brightness * 268 * PREFILTER_WHITE) / 256.0;
+ area := FBitmap.Width * FBitmap.Height / (fcp.ppux * fcp.ppuy);
+ k2 := (FOversample * FOversample) / (fcp.Contrast * area * fcp.White_level * sample_density);
+
+ csa[0][0] := 0; csa[1][0] := 0; csa[2][0] := 0; csa[3][0] := 0;
+ for i := 0 to 1024 do begin
+ if i = 0 then lsa[0] := 0
+ else lsa[i] := (k1 * log10(1 + fcp.White_level * i * k2)) / (fcp.White_level * i);
+
+ if i <= 256 then begin
+ csa[0][i] := BezierFunc(i / 256.0, fcp.curvePoints[0], fcp.curveWeights[0]) * 256;
+ csa[1][i] := BezierFunc(i / 256.0, fcp.curvePoints[1], fcp.curveWeights[1]) * 256;
+ csa[2][i] := BezierFunc(i / 256.0, fcp.curvePoints[2], fcp.curveWeights[2]) * 256;
+ csa[3][i] := BezierFunc(i / 256.0, fcp.curvePoints[3], fcp.curveWeights[3]) * 256;
+ end;
+ end;
+
+ ls := 0;
+ ai := 0;
+
+ ss := Trunc(floor(FOversample / 2));
+ scf := (trunc(FOversample) mod 2 = 0);
+ scfact := power(FOversample/(FOversample+1), 2);
+
+ //bucketpos := 0;
+ by := 0;
+ for i := 0 to fcp.Height - 1 do begin
+ bx := 0;
+
+ if (i and $3f = 0) and assigned(FOnProgress) then FOnProgress(i / fcp.Height);
+
+ AlphaRow := PByteArray(FAlphaBitmap.scanline[YOffset + i]);
+ Row := PRGBArray(FBitmap.scanline[YOffset + i]);
+ for j := 0 to fcp.Width - 1 do begin
+ if FFilterSize > 1 then begin
+ fp[0] := 0;
+ fp[1] := 0;
+ fp[2] := 0;
+ fp[3] := 0;
+
+ for ii := 0 to FFilterSize - 1 do begin
+ for jj := 0 to FFilterSize - 1 do begin
+ filterValue := FFilter[ii, jj];
+
+ bucket := GetBucket(bx + jj, by + ii);
+ if bucket.count < 1024 then
+ ls := lsa[Round(bucket.Count)]
+ else
+ ls := (k1 * log10(1 + fcp.White_level * bucket.count * k2)) / (fcp.White_level * bucket.count);
+
+ fp[0] := fp[0] + filterValue * ls * bucket.Red;
+ fp[1] := fp[1] + filterValue * ls * bucket.Green;
+ fp[2] := fp[2] + filterValue * ls * bucket.Blue;
+ fp[3] := fp[3] + filterValue * ls * bucket.Count;
+ end;
+ end;
+
+ fp[0] := fp[0] / PREFILTER_WHITE;
+ fp[1] := fp[1] / PREFILTER_WHITE;
+ fp[2] := fp[2] / PREFILTER_WHITE;
+ fp[3] := fcp.white_level * fp[3] / PREFILTER_WHITE;
+ end else begin
+ bucket := GetBucket(bx, by);
+ if bucket.count < 1024 then
+ ls := lsa[Round(bucket.count)] / PREFILTER_WHITE
+ else
+ ls := (k1 * log10(1 + fcp.White_level * bucket.count * k2)) / (fcp.White_level * bucket.count) / PREFILTER_WHITE;
+
+ fp[0] := ls * bucket.Red;
+ fp[1] := ls * bucket.Green;
+ fp[2] := ls * bucket.Blue;
+ fp[3] := ls * bucket.Count * fcp.white_level;
+ end;
+
+ if (num_de_filters > 0) and (fp[3] > 0) then begin
+ f_select := 0;
+ for ii := -ss to trunc(ss) + 1 do
+ for jj := -ss to trunc(ss) + 1 do begin
+ bucket := SafeGetBucket(bx + jj, by + ii);
+ f_select := f_select + (bucket.Count / 255.0);
+ end;
+ if (scf) then f_select := f_select * scfact;
+
+ if (f_select > de_count_limit) then
+ f_select_int := trunc(de_cutoff_val)
+ else if (f_select <= 100) then
+ f_select_int := trunc(ceil(f_select)) - 1
+ else
+ f_select_int := 100 + trunc(floor(power(f_select - 100, fcp.estimator_curve)));
+
+ if (f_select_int >= de_cutoff_val) then
+ f_select_int := trunc(de_cutoff_val);
+
+ f_coef_idx := trunc(f_select_int*de_kernel_index);
+ if (f_select_int >= 0) and (f_select_int < length(de_filter_widths)) then
+ arr_filt_width := trunc(floor(de_filter_widths[length(de_filter_widths) - 1 - f_select_int]))
+ else
+ arr_filt_width := 1;
+
+ fp[0] := 0;
+ fp[1] := 0;
+ fp[2] := 0;
+ fp[3] := 0;
+ acc := 1;
+
+ for jj := 0 to arr_filt_width do
+ for ii := 0 to arr_filt_width do begin
+ bucket := SafeGetBucket(bx+ii, by+jj);
+
+ if (f_coef_idx < 0) or (f_coef_idx >= length(de_filter_coefs)) then continue;
+ if (de_filter_coefs[f_coef_idx]= 0) then begin
+ Inc(f_coef_idx);
+ continue;
+ end;
+
+ if bucket.count < 1024 then
+ ls := lsa[Round(bucket.Count)]
+ else if bucket.count = 0 then
+ ls := 0
+ else
+ ls := (k1 * log10(1 + fcp.White_level * bucket.count * k2)) / (fcp.White_level * bucket.count);
+
+ fp[0] := fp[0] + bucket.Red * ls * de_filter_coefs[f_coef_idx];
+ fp[1] := fp[1] + bucket.Green * ls * de_filter_coefs[f_coef_idx];
+ fp[2] := fp[2] + bucket.Blue * ls * de_filter_coefs[f_coef_idx];
+ fp[3] := fp[3] + bucket.Count * ls * de_filter_coefs[f_coef_idx];
+
+ Inc(acc);
+ Inc(f_coef_idx);
+ end;
+
+ fp[0] := fp[0] * acc / PREFILTER_WHITE;
+ fp[1] := fp[1] * acc / PREFILTER_WHITE;
+ fp[2] := fp[2] * acc / PREFILTER_WHITE;
+ fp[3] := fcp.white_level * acc * fp[3] / PREFILTER_WHITE;
+ end;
+
+ Inc(bx, FOversample);
+
+ if fcp.Transparency then begin // -------------------------- Transparency
+ // gamma linearization
+ if (fp[3] > 0.0) then begin
+ if fp[3] <= fcp.gamma_threshold then begin
+ frac := fp[3] / fcp.gamma_threshold;
+ alpha := (1 - frac) * fp[3] * funcval + frac * power(fp[3], gamma);
+ end
+ else
+ alpha := power(fp[3], gamma);
+
+ ls := vib * alpha / fp[3];
+ ai := round(alpha * 256);
+ if (ai <= 0) then goto zero_alpha // ignore all if alpha = 0
+ else if (ai > 255) then ai := 255;
+ //ia := 255 - ai;
+ end
+ else begin
+zero_alpha:
+ Row[j] := zero_BG;
+ AlphaRow[j] := 0;
+ continue;
+ end;
+
+ if (notvib > 0) then begin
+ ri := Round(ls * fp[0] + notvib * power(fp[0], gamma));
+ gi := Round(ls * fp[1] + notvib * power(fp[1], gamma));
+ bi := Round(ls * fp[2] + notvib * power(fp[2], gamma));
+ end
+ else begin
+ ri := Round(ls * fp[0]);
+ gi := Round(ls * fp[1]);
+ bi := Round(ls * fp[2]);
+ end;
+
+ // ignoring BG color in transparent renders..
+ if (ri >= 0) and (ri <= 256) and (curvesSet) then ri := Round(csa[1][Round(csa[0][ri])]);
+ if (gi >= 0) and (gi <= 256) and (curvesSet) then gi := Round(csa[2][Round(csa[0][gi])]);
+ if (bi >= 0) and (bi <= 256) and (curvesSet) then bi := Round(csa[3][Round(csa[0][bi])]);
+
+ ri := (ri * 255) div ai; // ai > 0 !
+ if (ri < 0) then ri := 0
+ else if (ri > 255) then ri := 255;
+
+ gi := (gi * 255) div ai;
+ if (gi < 0) then gi := 0
+ else if (gi > 255) then gi := 255;
+
+ bi := (bi * 255) div ai;
+ if (bi < 0) then bi := 0
+ else if (bi > 255) then bi := 255;
+
+ Row[j].red := ri;
+ Row[j].green := gi;
+ Row[j].blue := bi;
+ AlphaRow[j] := ai;
+ end
+ else begin // ------------------------------------------- No transparency
+ if (fp[3] > 0.0) then begin
+ // gamma linearization
+ if fp[3] <= fcp.gamma_threshold then begin
+ frac := fp[3] / fcp.gamma_threshold;
+ alpha := (1 - frac) * fp[3] * funcval + frac * power(fp[3], gamma);
+ end
+ else
+ alpha := power(fp[3], gamma);
+
+ ls := vib * alpha / fp[3];
+ ai := round(alpha * 256);
+ if (ai < 0) then ai := 0
+ else if (ai > 255) then ai := 255;
+ ia := 255 - ai;
+ end
+ else begin
+ // no intensity so simply set the BG;
+ Row[j] := bgtot;
+ continue;
+ end;
+
+ if (notvib > 0) then begin
+ ri := Round(ls * fp[0] + notvib * power(fp[0], gamma));
+ gi := Round(ls * fp[1] + notvib * power(fp[1], gamma));
+ bi := Round(ls * fp[2] + notvib * power(fp[2], gamma));
+ end
+ else begin
+ ri := Round(ls * fp[0]);
+ gi := Round(ls * fp[1]);
+ bi := Round(ls * fp[2]);
+ end;
+
+ if (ri >= 0) and (ri <= 256) and (curvesSet) then ri := Round(csa[1][Round(csa[0][ri])]);
+ if (gi >= 0) and (gi <= 256) and (curvesSet) then gi := Round(csa[2][Round(csa[0][gi])]);
+ if (bi >= 0) and (bi <= 256) and (curvesSet) then bi := Round(csa[3][Round(csa[0][bi])]);
+
+ ri := ri + (ia * bgi[0]) shr 8;
+ if (ri < 0) then ri := 0
+ else if (ri > 255) then ri := 255;
+
+ gi := gi + (ia * bgi[1]) shr 8;
+ if (gi < 0) then gi := 0
+ else if (gi > 255) then gi := 255;
+
+ bi := bi + (ia * bgi[2]) shr 8;
+ if (bi < 0) then bi := 0
+ else if (bi > 255) then bi := 255;
+
+ Row[j].red := ri;
+ Row[j].green := gi;
+ Row[j].blue := bi;
+ AlphaRow[j] := ai;//?
+ end
+ end;
+
+ //Inc(bucketpos, gutter_width);
+ //Inc(bucketpos, (FOversample - 1) * FBucketWidth);
+ Inc(by, FOversample);
+ end;
+
+ FBitmap.PixelFormat := pf24bit;
+
+ if assigned(FOnProgress) then FOnProgress(1);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TImageMaker.SaveImage(FileName: String);
+var
+ i,row: integer;
+ PngObject: TPngObject;
+ rowbm, rowpng: PByteArray;
+ JPEGImage: TJPEGImage;
+ PNGerror: boolean;
+ label BMPhack;
+begin
+ if UpperCase(ExtractFileExt(FileName)) = '.PNG' then begin
+ pngError := false;
+
+ PngObject := TPngObject.Create;
+ try
+ PngObject.Assign(FBitmap);
+ if fcp.Transparency then // PNGTransparency <> 0
+ begin
+ PngObject.CreateAlpha;
+ for i:= 0 to FAlphaBitmap.Height - 1 do begin
+ rowbm := PByteArray(FAlphaBitmap.scanline[i]);
+ rowpng := PByteArray(PngObject.AlphaScanline[i]);
+ for row := 0 to FAlphaBitmap.Width -1 do begin
+ rowpng[row] := rowbm[row];
+ end;
+ end;
+ end;
+ //else Exception.CreateFmt('Unexpected value of PNGTransparency [%d]', [PNGTransparency])
+ if FCommentStr <> '' then
+ PngObject.AddtEXt('ApoFlame', AnsiString(FCommentStr)); // AV
+
+ PngObject.SaveToFile(FileName);
+ except
+ pngError := true;
+ end;
+ PngObject.Free;
+
+ if pngError then begin
+ FileName := ChangeFileExt(FileName, '.bmp');
+ goto BMPHack;
+ end;
+
+ end else if UpperCase(ExtractFileExt(FileName)) = '.JPG' then begin
+ JPEGImage := TJPEGImage.Create;
+ JPEGImage.Assign(FBitmap);
+ JPEGImage.CompressionQuality := JPEGQuality;
+ JPEGImage.SaveToFile(FileName);
+ JPEGImage.Free;
+
+// with TLinearBitmap.Create do
+// try
+// Assign(Renderer.GetImage);
+// JPEGLoader.Default.Quality := JPEGQuality;
+// SaveToFile(RenderForm.FileName);
+// finally
+// Free;
+// end;
+ end else begin // bitmap
+BMPHack:
+ FBitmap.SaveToFile(FileName);
+ if fcp.Transparency then begin
+ FAlphaBitmap.Palette := CreatePalette(AlphaPalette.logpal);
+ FileName := ChangeFileExt(FileName, '_alpha.bmp');
+ FAlphaBitmap.SaveToFile(FileName);
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TImageMaker.EmbedText(CommentStr: String): boolean; //AV
+begin
+ FCommentStr := CommentStr;
+ Result := false;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TImageMaker.GetTransparentImage: TPngObject;
+var
+ x, y: integer;
+ i, row: integer;
+ rowbm, rowpng: PByteArray;
+begin
+ Result := TPngObject.Create;
+ Result.Assign(FBitmap);
+
+ if ((fcp <> nil) and fcp.Transparency) then begin
+ Result.CreateAlpha;
+ for i:= 0 to FAlphaBitmap.Height - 1 do begin
+ rowbm := PByteArray(FAlphaBitmap.scanline[i]);
+ rowpng := PByteArray(Result.AlphaScanline[i]);
+ for row := 0 to FAlphaBitmap.Width - 1 do begin
+ rowpng[row] := rowbm[row];
+ end;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+function TImageMaker.GetBucket(x, y: integer): TBucket;
+begin
+ with FBuckets[y][x] do begin
+ Result.Red := Red;
+ Result.Green := Green;
+ Result.Blue := Blue;
+ Result.Count := Count;
+ end;
+end;
+
+function TImageMaker.SafeGetBucket(x, y: integer): TBucket;
+begin
+ if x < 0 then x := 0
+ else if x >= FBucketWidth then x := FBucketWidth-1;
+ if y < 0 then y := 0
+ else if y >= FBucketHeight then y := FBucketHeight-1;
+ Result := FGetBucket(x, y);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TImageMaker.GetBucketStats(var Stats: TBucketStats);
+var
+ bucketpos: integer;
+ x, y: integer;
+ b: TBucket;
+begin
+ with Stats do begin
+ MaxR := 0;
+ MaxG := 0;
+ MaxB := 0;
+ MaxA := 0;
+ TotalA := 0;
+
+ for y := 0 to FBucketHeight - 1 do
+ for x := 0 to FBucketWidth - 1 do begin
+ b := FGetBucket(x, y);
+ MaxR := max(MaxR, b.Red);
+ MaxG := max(MaxG, b.Green);
+ MaxB := max(MaxB, b.Blue);
+ MaxA := max(MaxA, b.Count);
+ TotalA := TotalA + b.Count
+ end;
+ end;
+end;
+
+end.
diff --git a/Rendering/RenderThread.pas b/Rendering/RenderThread.pas
new file mode 100644
index 0000000..8d5871c
--- /dev/null
+++ b/Rendering/RenderThread.pas
@@ -0,0 +1,386 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit RenderThread;
+
+interface
+
+uses
+ Classes, Windows, Messages, Graphics,
+ ControlPoint, RenderingInterface,
+ Global, RenderingCommon, PngImage,
+ RenderingImplementation;
+
+ //Disabled:
+
+ //Render64, Render64MT,
+ //Render48, Render48MT,
+ //Render32f, Render32fMT;
+
+const
+ WM_THREAD_COMPLETE = WM_APP + 5437;
+ WM_THREAD_TERMINATE = WM_APP + 5438;
+
+type
+ TRenderThread = class(TThread)
+ private
+ FRenderer: TBaseRenderer;
+
+ FOnProgress: TOnProgress;
+ FCP: TControlPoint;
+ FMaxMem: int64;
+ FNrThreads: Integer;
+ FBitsPerSample: integer;
+ FMinDensity: double;
+ FOutput: TStrings;
+ FExportBuffer: boolean;
+ FCommentStr: String; // AV
+
+ procedure CreateRenderer;
+ function GetNrSlices: integer;
+ function GetSlice: integer;
+ procedure SetBitsPerSample(const bits: Integer);
+
+ function GetExportBuffer: boolean;
+ procedure SetExportBuffer(value: boolean);
+
+ procedure Trace(const str: string);
+
+ public
+ TargetHandle: HWND;
+ WaitForMore, More: boolean;
+
+ constructor Create;
+ destructor Destroy; override;
+
+ procedure SetCP(CP: TControlPoint);
+ function GetImage: TBitmap;
+ function GetTransparentImage: TPngObject;
+ procedure SaveImage(const FileName: String);
+
+ procedure Execute; override;
+ function GetRenderer: TBaseRenderer;
+
+ procedure Terminate;
+ procedure Suspend;
+ procedure Resume;
+ procedure BreakRender;
+ procedure HibernateRender(filePath: string);
+ procedure ResumeFromHibernation(filePath: string);
+ function EmbedText(CommentStr: String): boolean; //AV
+ function DoSnapshot: boolean; // AV: to make mid-render snapshots
+
+// procedure GetBucketStats(var Stats: TBucketStats);
+ procedure ShowBigStats;
+ procedure ShowSmallStats;
+
+ property OnProgress: TOnProgress
+// read FOnProgress
+ write FOnProgress;
+
+ property Slice: integer
+ read GetSlice;
+ property NrSlices: integer
+ read GetNrSlices;
+ property MaxMem: int64
+ read FMaxMem
+ write FMaxMem;
+// property compatibility: Integer read Fcompatibility write Fcompatibility;
+ property NrThreads: Integer
+ read FNrThreads
+ write FNrThreads;
+ property BitsPerSample: Integer
+ read FBitsPerSample
+ write SetBitsPerSample;
+ property Output: TStrings
+ write FOutput;
+ property MinDensity: double
+ write FMinDensity;
+ property ExportBuffer: boolean
+ read GetExportBuffer
+ write SetExportBuffer;
+ end;
+
+implementation
+
+uses
+ Math, SysUtils,Tracer;
+{ TRenderThread }
+
+///////////////////////////////////////////////////////////////////////////////
+destructor TRenderThread.Destroy;
+begin
+ if assigned(FRenderer) then
+ FRenderer.Free;
+ FRenderer := nil;
+
+ if assigned(FCP) then FCP.Free;
+
+ inherited;
+end;
+
+function TRenderThread.DoSnapshot: boolean; // AV
+begin
+ Result := false;
+ if assigned(FRenderer) then
+ Result := FRenderer.DoSnapshot;
+end;
+
+function TRenderThread.GetExportBuffer: boolean;
+begin
+ if assigned(FRenderer) then
+ Result := FRenderer.ExportBuffer
+ else Result := FExportBuffer;
+end;
+
+procedure TRenderThread.SetExportBuffer(value: boolean);
+begin
+ if assigned(FRenderer) then
+ FRenderer.ExportBuffer := value;
+ FExportBuffer := value;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TRenderThread.GetImage: TBitmap;
+begin
+ Result := nil;
+ if assigned(FRenderer) then
+ Result := FRenderer.GetImage;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TRenderThread.GetTransparentImage: TPngObject;
+begin
+ Result := nil;
+ if assigned(FRenderer) then
+ Result := FRenderer.GetTransparentImage;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderThread.SetCP(CP: TControlPoint);
+begin
+
+ FCP := CP.Clone;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TRenderThread.Create;
+begin
+ MaxMem := 0;
+ // BitsPerSample := InternalBitsPerSample; // AV: now unused
+ FreeOnTerminate := false;
+ WaitForMore := false;
+
+ inherited Create(True); // Create Suspended;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderThread.CreateRenderer;
+begin
+ if assigned(FRenderer) then begin
+ Trace('Destroying previous renderer (?)');
+ FRenderer.Free;
+ end;
+ Trace('Creating renderer');
+
+ if NrThreads <= 1 then begin
+ if MaxMem = 0 then begin
+ FRenderer := TRenderWorkerST.Create;
+ end else begin
+ FRenderer := TRenderWorkerST_MM.Create;
+ FRenderer.MaxMem := MaxMem;
+ end;
+ end
+ else begin
+ if MaxMem = 0 then begin
+ FRenderer := TRenderWorkerMT.Create;
+ end else begin
+ FRenderer := TRenderWorkerMT_MM.Create;
+ FRenderer.MaxMem := MaxMem;
+ end;
+ FRenderer.NumThreads := NrThreads;
+ end;
+
+ FRenderer.ExportBuffer := FExportbuffer;
+ FRenderer.SetCP(FCP);
+ FRenderer.MinDensity := FMinDensity;
+ FRenderer.OnProgress := FOnProgress;
+ FRenderer.Output := FOutput;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderThread.Execute;
+label RenderMore;
+begin
+ CreateRenderer;
+
+RenderMore:
+ assert(assigned(FRenderer));
+
+ Trace('Rendering');
+ FRenderer.Render;
+
+ if Terminated or FRenderer.Failed then begin
+ Trace('Sending WM_THREAD_TERMINATE');
+ PostMessage(TargetHandle, WM_THREAD_TERMINATE, 0, ThreadID);
+ Trace('Terminated');
+ exit;
+ end
+ else begin
+ Trace('Sending WM_THREAD_COMPLETE');
+ PostMessage(TargetHandle, WM_THREAD_COMPLETE, 0, ThreadID);
+ end;
+
+ if WaitForMore and (FRenderer <> nil) then begin
+ FRenderer.RenderMore := true;
+
+ Trace('Waiting for more');
+ inherited Suspend;
+
+ if WaitForMore then goto RenderMore;
+ end;
+
+ Trace('Finished');
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderThread.Terminate;
+begin
+ try
+ if assigned(FRenderer) then
+ FRenderer.Stop;
+ except on EAccessViolation do
+ // nothing
+ end;
+
+ WaitForMore := false;
+
+ inherited Terminate;
+end;
+
+procedure TRenderThread.Suspend;
+begin
+ if assigned(FRenderer) then FRenderer.Pause;
+
+ inherited;
+end;
+
+procedure TRenderThread.Resume;
+begin
+ if assigned(FRenderer) then FRenderer.UnPause;
+
+ inherited;
+end;
+
+procedure TRenderThread.BreakRender;
+begin
+ if assigned(FRenderer) then
+ FRenderer.BreakRender;
+end;
+
+procedure TRenderThread.HibernateRender(filePath: string);
+begin
+ if assigned(FRenderer) then
+ FRenderer.Hibernate(filePath);
+end;
+
+procedure TRenderThread.ResumeFromHibernation(filePath: string);
+begin
+ if assigned(FRenderer) then
+ FRenderer.Stop;
+ FRenderer.Resume(filePath);
+ FRenderer.UnPause;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TRenderThread.GetNrSlices: integer;
+begin
+ if assigned(FRenderer) then
+ Result := FRenderer.NrSlices
+ else
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TRenderThread.GetSlice: integer;
+begin
+ if assigned(FRenderer) then
+ Result := FRenderer.Slice
+ else
+ Result := 1;
+end;
+
+//////////////////////////////////////////////////////////////////////////////
+function TRenderThread.GetRenderer: TBaseRenderer;
+begin
+ Result := FRenderer;
+ FRenderer := nil;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderThread.SetBitsPerSample(const bits: Integer);
+begin
+ if FRenderer = nil then FBitsPerSample := bits
+ else assert(false);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderThread.SaveImage(const FileName: String);
+begin
+ if assigned(FRenderer) then
+ begin
+ if FCommentStr <> '' then
+ FRenderer.EmbedText(FCommentStr);
+ FRenderer.SaveImage(FileName);
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TRenderThread.EmbedText(CommentStr: String): boolean; // AV: for parameters embedding
+begin
+ Result := False;
+ FCommentStr := CommentStr;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderThread.Trace(const str: string);
+begin
+ if assigned(FOutput) and (TraceLevel >= 2) then
+ FOutput.Add('. . > RenderThread #' + IntToStr(ThreadID) + ': ' + str);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderThread.ShowBigStats;
+begin
+ if assigned(FRenderer) then
+ FRenderer.ShowBigStats;
+end;
+
+procedure TRenderThread.ShowSmallStats;
+begin
+ if assigned(FRenderer) then
+ FRenderer.ShowSmallStats;
+end;
+///////////////////////////////////////////////////////////////////////////////
+
+end.
diff --git a/Rendering/RenderingCommon.pas b/Rendering/RenderingCommon.pas
new file mode 100644
index 0000000..5522c03
--- /dev/null
+++ b/Rendering/RenderingCommon.pas
@@ -0,0 +1,71 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ ``Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit RenderingCommon;
+
+interface
+type
+ TOnFinish = procedure of object;
+ TOnProgress = procedure(prog: double) of object;
+
+ {$ifdef Apo7X64}
+ TBucket = Record
+ Red,
+ Green,
+ Blue,
+ Count: Double;
+ end;
+ {$else}
+ TBucket = Record
+ Red,
+ Green,
+ Blue,
+ Count: Single;
+ end;
+ {$endif}
+ PBucket = ^TBucket;
+ TBucketArray = array of array of TBucket;
+ // TZBuffer = array of array of double;
+
+ TBucketStats = record
+ MaxR, MaxG, MaxB, MaxA,
+ TotalA: double;
+ end;
+
+procedure TrimWorkingSet;
+
+implementation
+uses Windows;
+
+procedure TrimWorkingSet;
+var
+ hProcess: THandle;
+begin
+ hProcess := OpenProcess(PROCESS_SET_QUOTA, false, GetCurrentProcessId);
+
+ try SetProcessWorkingSetSize(hProcess, $FFFFFFFF, $FFFFFFFF);
+ finally CloseHandle(hProcess);
+ end;
+end;
+
+end.
diff --git a/Rendering/RenderingImplementation.pas b/Rendering/RenderingImplementation.pas
new file mode 100644
index 0000000..65d7659
--- /dev/null
+++ b/Rendering/RenderingImplementation.pas
@@ -0,0 +1,792 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit RenderingImplementation;
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+interface
+
+uses
+{$ifndef _ASM_}
+{$else}
+AsmRandom,
+{$endif}
+ Windows, Classes, Forms, Graphics, Global,
+ RenderingInterface, Xform, Math, Translation,
+ Binary, RenderingCommon, ControlPoint, Sysutils,
+ BucketFillerThread;
+
+type
+ TBatchProc = procedure of object;
+ TRenderWorkerST = class(TBaseRenderer)
+
+ protected
+ PropTable: array[0..PROP_TABLE_SIZE] of TXform;
+ finalXform: TXform;
+ UseFinalXform: boolean;
+
+ procedure Prepare; override;
+ procedure SetPixels; override;
+
+ protected
+ procedure IterateBatch;
+ procedure IterateBatchAngle;
+ procedure IterateBatchFX;
+ procedure IterateBatchAngleFX;
+end;
+
+type
+ TRenderWorkerMT = class(TBaseRenderer)
+
+ protected
+ batchcounter: Integer;
+ WorkingThreads: array of TBucketFillerThread;
+ CriticalSection: TRTLCriticalSection;
+
+ function NewThread: TBucketFillerThread;
+ procedure Prepare; override;
+ procedure SetPixels; override;
+
+ protected
+ procedure AddPointsToBuckets(const points: TPointsArray);
+ procedure AddPointsToBucketsAngle(const points: TPointsArray);
+
+ public
+ procedure Stop; override;
+ procedure BreakRender; override;
+
+ procedure Pause; override;
+ procedure UnPause; override;
+ procedure SetThreadPriority(p: TThreadPriority); override; // AV
+end;
+
+type
+ TRenderWorkerST_MM = class(TRenderWorkerST)
+ protected
+ procedure CalcBufferSize; override;
+ public
+ procedure Render; override;
+
+end;
+
+type
+ TRenderWorkerMT_MM = class(TRenderWorkerMT)
+ protected
+ procedure CalcBufferSize; override;
+ public
+ procedure Render; override;
+end;
+
+// ----------------------------------------------------------------------------
+
+implementation
+
+////////////////////////////////////////////////////////////////////////////////
+// PREPARE
+////////////////////////////////////////////////////////////////////////////////
+procedure TRenderWorkerST.Prepare;
+var
+ i, n: Integer;
+ propsum: double;
+ LoopValue: double;
+ j: integer;
+ TotValue: double;
+begin
+ totValue := 0;
+ n := fcp.NumXforms;
+ assert(n > 0);
+
+ finalXform := fcp.xform[n];
+ finalXform.Prepare;
+ useFinalXform := fcp.FinalXformEnabled and fcp.HasFinalXform;
+
+ fcp.Prepare;
+end;
+
+procedure TRenderWorkerMT.Prepare;
+begin
+ fcp.Prepare;
+end;
+
+////////////////////////////////////////////////////////////////////////////////
+// SETPIXELS
+////////////////////////////////////////////////////////////////////////////////
+procedure TRenderWorkerST.SetPixels;
+var
+ i: integer;
+ nsamples: int64;
+ IterateBatchProc: procedure of object;
+begin
+ if FNumSlices > 1 then
+ TimeTrace(Format(TextByKey('common-trace-rendering-multipleslices'), [FSlice + 1, FNumSlices]))
+ else
+ TimeTrace(TextByKey('common-trace-rendering-oneslice'));
+
+ Randomize;
+
+ if FCP.FAngle = 0 then begin
+ if UseFinalXform then
+ IterateBatchProc := IterateBatchFX
+ else
+ IterateBatchProc := IterateBatch;
+ end
+ else begin
+ if UseFinalXform then
+ IterateBatchProc := IterateBatchAngleFX
+ else
+ IterateBatchProc := IterateBatchAngle;
+ end;
+
+ NSamples := Round(sample_density * NrSlices * bucketSize / (oversample * oversample));
+ FNumBatches := Round(nsamples / (fcp.nbatches * SUB_BATCH_SIZE));
+ if FNumBatches = 0 then FNumBatches := 1;
+
+ FMinBatches := Round(FNumBatches * FMinDensity / fcp.sample_density);
+ if FMinBatches = 0 then FMinBatches := 1;
+
+ for i := 0 to FNumBatches-1 do
+ begin
+ if FStop <> 0 then begin
+ { AV: moved below to update running quality estimate for mid-render snapshots
+ fcp.actual_density := fcp.actual_density + fcp.sample_density * i / FNumBatches;
+ }
+ FNumBatches := i;
+ exit;
+ end;
+
+ if ((i and $1F) = 0) then Progress(i / FNumBatches);
+
+ IterateBatchProc;
+ // AV: update running quality estimate (for mid-render snapshots)
+ fcp.actual_density := fcp.actual_density + fcp.sample_density / FNumBatches; // AV
+
+ Inc(FBatch);
+ end;
+
+ fcp.actual_density := {fcp.actual_density +} fcp.sample_density; // AV
+
+ Progress(1);
+end;
+
+procedure TRenderWorkerMT.SetPixels;
+var
+ i: integer;
+ nSamples: Int64;
+ bc : integer;
+begin
+ if FNumSlices > 1 then
+ TimeTrace(Format(TextByKey('common-trace-rendering-multipleslices'), [FSlice + 1, FNumSlices]))
+ else
+ TimeTrace(TextByKey('common-trace-rendering-oneslice'));
+
+ nSamples := Round(sample_density * NrSlices * BucketSize / (oversample * oversample));
+ FNumBatches := Round(nSamples / (fcp.nbatches * SUB_BATCH_SIZE));
+ if FNumBatches = 0 then FNumBatches := 1;
+ FMinBatches := Round(FNumBatches * FMinDensity / fcp.sample_density);
+ if FMinBatches = 0 then FMinBatches := 1; // AV
+
+ batchcounter := 1;
+ Randomize;
+
+ InitializeCriticalSection(CriticalSection);
+
+ SetLength(WorkingThreads, NumThreads);
+ for i := 0 to NumThreads - 1 do
+ WorkingThreads[i] := NewThread;
+
+ for i := 0 to NumThreads - 1 do
+ WorkingThreads[i].Resume;
+
+ bc := 1;
+ while (FStop = 0) and (bc <= FNumBatches) do begin
+ sleep(250);
+ try
+ EnterCriticalSection(CriticalSection);
+
+ Progress(batchcounter / FNumBatches);
+ if (bc < batchcounter) then
+ begin
+ // AV: update running quality estimate for mid-render snapshots
+ fcp.actual_density := fcp.actual_density +
+ fcp.sample_density * (BatchCounter - bc) / FNumBatches; // actual quality of incomplete render
+ bc := batchcounter;
+ end;
+ finally
+ LeaveCriticalSection(CriticalSection);
+ end;
+ end;
+
+ for i := 0 to High(WorkingThreads) do begin
+ WorkingThreads[i].Terminate;
+ WorkingThreads[i].WaitFor;
+ WorkingThreads[i].Free;
+ end;
+ SetLength(WorkingThreads, 0);
+
+ // AV: running quality estimate is updated above; tidy up remaining counts
+ fcp.actual_density := fcp.actual_density +
+ fcp.sample_density * (BatchCounter - bc + 1) / FNumBatches; // AV: actual quality of incomplete render
+ // fcp.sample_density * BatchCounter / FNumBatches; // actual quality of incomplete render
+ FNumBatches := BatchCounter;
+
+ DeleteCriticalSection(CriticalSection);
+ Progress(1);
+end;
+
+////////////////////////////////////////////////////////////////////////////////
+// MM OVERRIDES
+////////////////////////////////////////////////////////////////////////////////
+procedure TRenderWorkerST_MM.CalcBufferSize;
+begin
+ CalcBufferSizeMM;
+end;
+
+procedure TRenderWorkerST_MM.Render;
+begin
+ RenderMM;
+end;
+
+procedure TRenderWorkerMT_MM.CalcBufferSize;
+begin
+ CalcBufferSizeMM;
+end;
+
+procedure TRenderWorkerMT_MM.Render;
+begin
+ RenderMM;
+end;
+
+////////////////////////////////////////////////////////////////////////////////
+// BATCH ITERATION
+////////////////////////////////////////////////////////////////////////////////
+procedure TRenderWorkerST.IterateBatch;
+var
+ i: integer;
+ px, py: double;
+ Bucket: PBucket;
+ // ZBufPos: PDouble;
+ MapColor: PColorMapColor;
+
+ ix, iy: integer;
+ BmpColor: TColor;
+
+ p, q: TCPPoint;
+ xf: TXForm;
+begin
+{$ifndef _ASM_}
+ p.x := 2 * random - 1;
+ p.y := 2 * random - 1;
+ // AV: fixed - Apo renderer crashes if z-value is not initialized
+ p.z := 0; // AV
+ p.c := random;
+{$else}
+asm
+ fld1
+ call AsmRandExt
+ fadd st, st
+ fsub st, st(1)
+ fstp qword ptr [p.x]
+ call AsmRandExt
+ fadd st, st
+ fsubrp st(1), st
+ fstp qword ptr [p.y]
+ call AsmRandExt
+ fstp qword ptr [p.c]
+ fldz // AV
+ fstp qword ptr [p.z] // AV
+end;
+{$endif}
+
+ try
+ xf := fcp.xform[0];
+ for i := 0 to FUSE do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+ end;
+
+ for i := 0 to SUB_BATCH_SIZE-1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+
+ // if random >= xf.transOpacity then continue;
+ if (xf.transOpacity = 0) then continue // AV
+ else if ((xf.transOpacity < 1) and (random > xf.transOpacity)) then continue;
+
+ q := p;
+ fcp.ProjectionFunc(@q); // 3d hack
+
+ px := q.x - camX0;
+ if (px < 0) or (px > camW) then continue;
+ py := q.y - camY0;
+ if (py < 0) or (py > camH) then continue;
+
+ Bucket := @buckets[Round(bhs * py)][Round(bws * px)];
+ MapColor := @ColorMap[Round(p.c * 255)];
+
+ {$ifdef ENABLEZBUF}
+ ZBufPos := @zbuffer[Round(bhs * py)][Round(bws * px)];
+ if (q.z < ZBufPos^) then
+ begin
+ ZBufPos^ := q.z;
+ Bucket.Red := Bucket.Red + MapColor.Red;
+ Bucket.Green := Bucket.Green + MapColor.Green;
+ Bucket.Blue := Bucket.Blue + MapColor.Blue;
+ Bucket.Count := Bucket.Count + 1;
+ end;
+ {$else}
+ with Bucket^ do begin
+ Red := Red + MapColor.Red;
+ Green := Green + MapColor.Green;
+ Blue := Blue + MapColor.Blue;
+ Count := Count + 1;
+ end;
+ {$endif}
+ end;
+
+ except
+ on EMathError do begin
+ exit;
+ end;
+ end;
+end;
+
+procedure TRenderWorkerST.IterateBatchAngle;
+var
+ i: integer;
+ px, py: double;
+ Bucket: PBucket;
+ MapColor: PColorMapColor;
+// ZBufPos: PDouble;
+ ix, iy: integer;
+ BmpColor: TColor;
+
+ p, q: TCPPoint;
+ xf: TXForm;
+begin
+{$ifndef _ASM_}
+ p.x := 2 * random - 1;
+ p.y := 2 * random - 1;
+ p.z := 0; // AV: fixed - Apo renderer crashes if z-value is not initialized
+ p.c := random;
+{$else}
+asm
+ fld1
+ call AsmRandExt
+ fadd st, st
+ fsub st, st(1)
+ fstp qword ptr [p.x]
+ call AsmRandExt
+ fadd st, st
+ fsubrp st(1), st
+ fstp qword ptr [p.y]
+ call AsmRandExt
+ fstp qword ptr [p.c]
+ fldz // AV
+ fstp qword ptr [p.z] // AV
+end;
+{$endif}
+
+ try
+ xf := fcp.xform[0];
+ for i := 0 to FUSE do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+ end;
+
+ for i := 0 to SUB_BATCH_SIZE-1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+
+ // if random >= xf.transOpacity then continue;
+ if (xf.transOpacity = 0) then continue // AV
+ else if ((xf.transOpacity < 1) and (random > xf.transOpacity)) then continue;
+
+ q := p;
+ fcp.ProjectionFunc(@q);
+
+ px := q.x * cosa + q.y * sina + rcX;
+ if (px < 0) or (px > camW) then continue;
+ py := q.y * cosa - q.x * sina + rcY;
+ if (py < 0) or (py > camH) then continue;
+
+ Bucket := @buckets[Round(bhs * py)][Round(bws * px)];
+ MapColor := @ColorMap[Round(p.c * 255)];
+
+ {$ifdef ENABLEZBUF}
+ ZBufPos := @zbuffer[Round(bhs * py)][Round(bws * px)];
+ if (q.z < ZBufPos^) then
+ begin
+ ZBufPos^ := q.z;
+ Bucket.Red := Bucket.Red + MapColor.Red;
+ Bucket.Green := Bucket.Green + MapColor.Green;
+ Bucket.Blue := Bucket.Blue + MapColor.Blue;
+ Bucket.Count := Bucket.Count + 1;
+ end;
+ {$else}
+ with Bucket^ do begin
+ Red := Red + MapColor.Red;
+ Green := Green + MapColor.Green;
+ Blue := Blue + MapColor.Blue;
+ Count := Count + 1;
+ end;
+ {$endif}
+ end;
+
+ except
+ on EMathError do begin
+ exit;
+ end;
+ end;
+end;
+
+procedure TRenderWorkerST.IterateBatchFX;
+var
+ i: integer;
+ px, py: double;
+ Bucket: PBucket;
+ MapColor: PColorMapColor;
+// ZbufPos: PDouble;
+ ix, iy: integer;
+ BmpColor: TColor;
+
+ p, q: TCPPoint;
+ xf: TXForm;
+begin
+{$ifndef _ASM_}
+ p.x := 2 * random - 1;
+ p.y := 2 * random - 1;
+ p.z := 0; // AV: fixed - Apo renderer crashes if z-value is not initialized
+ p.c := random;
+{$else}
+asm
+ fld1
+ call AsmRandExt
+ fadd st, st
+ fsub st, st(1)
+ fstp qword ptr [p.x]
+ call AsmRandExt
+ fadd st, st
+ fsubrp st(1), st
+ fstp qword ptr [p.y]
+ call AsmRandExt
+ fstp qword ptr [p.c]
+ fldz // AV
+ fstp qword ptr [p.z] // AV
+end;
+{$endif}
+
+ try
+ xf := fcp.xform[0];
+ for i := 0 to FUSE do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+ end;
+
+ for i := 0 to SUB_BATCH_SIZE-1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+
+ if (xf.transOpacity = 0) then continue // AV
+ else if ((xf.transOpacity < 1) and (random > xf.transOpacity)) then continue;
+
+ finalXform.NextPointTo(p, q);
+ fcp.ProjectionFunc(@q);
+
+ px := q.x - camX0;
+ if (px < 0) or (px > camW) then continue;
+ py := q.y - camY0;
+ if (py < 0) or (py > camH) then continue;
+
+ Bucket := @buckets[Round(bhs * py)][Round(bws * px)];
+ MapColor := @ColorMap[Round(q.c * 255)];
+
+ {$ifdef ENABLEZBUF}
+ ZBufPos := @zbuffer[Round(bhs * py)][Round(bws * px)];
+ if (q.z < ZBufPos^) then
+ begin
+ ZBufPos^ := q.z;
+ Bucket.Red := Bucket.Red + MapColor.Red;
+ Bucket.Green := Bucket.Green + MapColor.Green;
+ Bucket.Blue := Bucket.Blue + MapColor.Blue;
+ Bucket.Count := Bucket.Count + 1;
+ end;
+ {$else}
+ with Bucket^ do begin
+ Red := Red + MapColor.Red;
+ Green := Green + MapColor.Green;
+ Blue := Blue + MapColor.Blue;
+ Count := Count + 1;
+ end;
+ {$endif}
+ end;
+
+ except
+ on EMathError do begin
+ exit;
+ end;
+ end;
+end;
+
+procedure TRenderWorkerST.IterateBatchAngleFX;
+var
+ i: integer;
+ px, py: double;
+ Bucket: PBucket;
+ MapColor: PColorMapColor;
+// ZBufPos: PDouble;
+ ix, iy: integer;
+ BmpColor: TColor;
+
+ p, q: TCPPoint;
+ xf: TXForm;
+begin
+{$ifndef _ASM_}
+ p.x := 2 * random - 1;
+ p.y := 2 * random - 1;
+ p.z := 0; // AV: fixed - Apo renderer crashes if z-value is not initialized
+ p.c := random;
+{$else}
+asm
+ fld1
+ call AsmRandExt
+ fadd st, st
+ fsub st, st(1)
+ fstp qword ptr [p.x]
+ call AsmRandExt
+ fadd st, st
+ fsubrp st(1), st
+ fstp qword ptr [p.y]
+ call AsmRandExt
+ fstp qword ptr [p.c]
+ fldz // AV
+ fstp qword ptr [p.z] // AV
+end;
+{$endif}
+
+ try
+ xf := fcp.xform[0];
+ for i := 0 to FUSE do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+ end;
+
+ for i := 0 to SUB_BATCH_SIZE-1 do begin
+ xf := xf.PropTable[Random(PROP_TABLE_SIZE)];
+ xf.NextPoint(p);
+
+ if (xf.transOpacity = 0) then continue // AV
+ else if ((xf.transOpacity < 1) and (random > xf.transOpacity)) then continue;
+
+ finalXform.NextPointTo(p, q);
+ fcp.ProjectionFunc(@q);
+
+ px := q.x * cosa + q.y * sina + rcX;
+ if (px < 0) or (px > camW) then continue;
+ py := q.y * cosa - q.x * sina + rcY;
+ if (py < 0) or (py > camH) then continue;
+
+ Bucket := @buckets[Round(bhs * py)][Round(bws * px)];
+ MapColor := @ColorMap[Round(q.c * 255)];
+
+ {$ifdef ENABLEZBUF}
+ ZBufPos := @zbuffer[Round(bhs * py)][Round(bws * px)];
+ if (q.z < ZBufPos^) then
+ begin
+ ZBufPos^ := q.z;
+ Bucket.Red := Bucket.Red + MapColor.Red;
+ Bucket.Green := Bucket.Green + MapColor.Green;
+ Bucket.Blue := Bucket.Blue + MapColor.Blue;
+ Bucket.Count := Bucket.Count + 1;
+ end;
+ {$else}
+ with Bucket^ do begin
+ Red := Red + MapColor.Red;
+ Green := Green + MapColor.Green;
+ Blue := Blue + MapColor.Blue;
+ Count := Count + 1;
+ end;
+ {$endif}
+ end;
+
+ except
+ on EMathError do begin
+ exit;
+ end;
+ end;
+end;
+
+procedure TRenderWorkerMT.AddPointsToBuckets(const points: TPointsArray);
+var
+ i: integer;
+ px, py: double;
+ Bucket: PBucket;
+ // ZBufPos: PDouble;
+ MapColor: PColorMapColor;
+begin
+ for i := SUB_BATCH_SIZE - 1 downto 0 do begin
+
+ px := points[i].x - camX0;
+ if (px < 0) or (px > camW) then continue;
+ py := points[i].y - camY0;
+ if (py < 0) or (py > camH) then continue;
+
+ Bucket := @buckets[Round(bhs * py)][Round(bws * px)];
+ MapColor := @ColorMap[Round(points[i].c * 255)];
+
+ {$ifdef ENABLEZBUF}
+ ZBufPos := @zbuffer[Round(bhs * py)][Round(bws * px)];
+ if (points[i].z < ZBufPos^) then
+ begin
+ ZBufPos^ := points[i].z;
+ Bucket.Red := Bucket.Red + MapColor.Red;
+ Bucket.Green := Bucket.Green + MapColor.Green;
+ Bucket.Blue := Bucket.Blue + MapColor.Blue;
+ Bucket.Count := Bucket.Count + 1;
+ end;
+ {$else}
+ with Bucket^ do begin
+ Red := Red + MapColor.Red;
+ Green := Green + MapColor.Green;
+ Blue := Blue + MapColor.Blue;
+ Count := Count + 1;
+ end;
+ {$endif}
+ end;
+end;
+
+procedure TRenderWorkerMT.AddPointsToBucketsAngle(const points: TPointsArray);
+var
+ i: integer;
+ px, py: double;
+ Bucket: PBucket;
+ MapColor: PColorMapColor;
+ //ZBufPos: PDouble;
+begin
+ for i := SUB_BATCH_SIZE - 1 downto 0 do begin
+
+ px := points[i].x * cosa + points[i].y * sina + rcX;
+ if (px < 0) or (px > camW) then continue;
+ py := points[i].y * cosa - points[i].x * sina + rcY;
+ if (py < 0) or (py > camH) then continue;
+
+ Bucket := @buckets[Round(bhs * py)][Round(bws * px)];
+ MapColor := @ColorMap[Round(points[i].c * 255)];
+
+ {$ifdef ENABLEZBUF}
+ ZBufPos := @zbuffer[Round(bhs * py)][Round(bws * px)];
+ if (points[i].z < ZBufPos^) then
+ begin
+ ZBufPos^ := points[i].z;
+ Bucket.Red := Bucket.Red + MapColor.Red;
+ Bucket.Green := Bucket.Green + MapColor.Green;
+ Bucket.Blue := Bucket.Blue + MapColor.Blue;
+ Bucket.Count := Bucket.Count + 1;
+ end;
+ {$else}
+ with Bucket^ do begin
+ Red := Red + MapColor.Red;
+ Green := Green + MapColor.Green;
+ Blue := Blue + MapColor.Blue;
+ Count := Count + 1;
+ end;
+ {$endif}
+ end;
+end;
+
+////////////////////////////////////////////////////////////////////////////////
+// THREADING
+////////////////////////////////////////////////////////////////////////////////
+procedure TRenderWorkerMT.Stop;
+var
+ i: integer;
+begin
+ for i := 0 to High(WorkingThreads) do
+ WorkingThreads[i].Terminate;
+
+ inherited;
+end;
+
+procedure TRenderWorkerMT.BreakRender;
+var
+ i: integer;
+begin
+ inherited;
+
+ for i := 0 to High(WorkingThreads) do
+ WorkingThreads[i].Terminate;
+end;
+
+procedure TRenderWorkerMT.Pause;
+var
+ i: integer;
+begin
+ inherited;
+
+ for i := 0 to High(WorkingThreads) do
+ WorkingThreads[i].Suspend;
+end;
+
+procedure TRenderWorkerMT.UnPause;
+var
+ i: integer;
+begin
+ inherited;
+
+ for i := 0 to High(WorkingThreads) do
+ WorkingThreads[i].Resume;
+end;
+
+procedure TRenderWorkerMT.SetThreadPriority(p: TThreadPriority); // AV
+var
+ i: integer;
+begin
+ inherited;
+
+ for i := 0 to High(WorkingThreads) do
+ WorkingThreads[i].Priority := p;
+end;
+
+function TRenderWorkerMT.NewThread: TBucketFillerThread;
+begin
+ Result := TBucketFillerThread.Create(fcp);
+ assert(Result <> nil);
+
+ if FThreadPriority <> tpNormal then // AV
+ Result.Priority := {tpLower;} FThreadPriority;
+
+ if FCP.FAngle = 0 then
+ Result.AddPointsProc := self.AddPointsToBuckets
+ else
+ Result.AddPointsProc := self.AddPointsToBucketsAngle;
+
+ Result.CriticalSection := CriticalSection;
+ Result.Nrbatches := FNumBatches;
+ Result.batchcounter := @batchcounter;
+end;
+
+end.
+
diff --git a/Rendering/RenderingInterface.pas b/Rendering/RenderingInterface.pas
new file mode 100644
index 0000000..1d06a5b
--- /dev/null
+++ b/Rendering/RenderingInterface.pas
@@ -0,0 +1,1136 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+unit RenderingInterface;
+
+interface
+
+uses
+ Windows, Graphics, Classes, RenderingCommon,
+ Controlpoint, ImageMaker, PngImage, Translation;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// { TBaseRenderer }
+//
+///////////////////////////////////////////////////////////////////////////////
+
+const
+ opRendering: integer = 0;
+ opSampling: integer = 1;
+ opHibernating: integer = 2;
+
+type
+ TOnOutput = procedure(s: string) of object;
+ TOnOperation = procedure(op: integer) of object;
+ TCopyBufferCallback = procedure(tgr: Pointer; x, y: integer) of object;
+
+type
+ TColorMapColor = Record
+ Red,
+ Green,
+ Blue:
+
+ {$ifdef Apo7X64}
+ double
+ {$else}
+ single
+ {$endif};
+ end;
+ PColorMapColor = ^TColorMapColor;
+ TColorMapArray = array[0..255] of TColorMapColor;
+
+{ TPoint3D = Record
+ X,
+ Y,
+ Z,
+ W: Double;
+ end;
+ TPoint3DArray = array of TPoint3D; }
+
+const
+ MAX_FILTER_WIDTH = 25;
+
+//const
+ //SizeOfBucket: array[0..3] of byte = (32, 32, 32, 32);
+
+function TimeToString(t: TDateTime): string;
+
+type
+ TBaseRenderer = class
+ private
+ FOnProgress: TOnProgress;
+ FOnOperation: TOnOperation;
+ FCopyBuffer: TCopyBufferCallback;
+ strOutput: TStrings;
+
+ protected
+ Buckets: TBucketArray;
+ // ZBuffer: TZBuffer;
+
+ procedure AllocateBuckets;
+ procedure ClearBuckets;
+ procedure SetBucketsPtr(ptr: pointer);
+ function GetBucketsPtr: pointer;
+
+ protected
+ camX0, camX1, camY0, camY1, // camera bounds
+ camW, camH, // camera sizes
+ bws, bhs, cosa, sina, rcX, rcY: double;
+ ppux, ppuy: extended;
+
+ BucketWidth, BucketHeight: int64;
+ BucketSize: int64;
+
+ sample_density: extended;
+ oversample: integer;
+ gutter_width: Integer;
+ max_gutter_width: Integer;
+
+ FCP: TControlPoint;
+ FStop: integer;//boolean;
+ FHibernated: boolean;
+
+ FImageMaker: TImageMaker;
+
+ ColorMap: TColorMapArray;
+
+ FMaxMem: integer;
+ FSlice, FNumSlices: integer;
+ image_Width, image_Height: Int64;
+ image_Center_X, image_Center_Y: double;
+
+ FCompatibility: integer;
+ FNumThreads: integer;
+ FNumBatches: integer; //int64;
+ FBatch: integer;
+ FThreadPriority: TThreadPriority;
+
+ FMinDensity: double;
+ FMinBatches: integer;
+ FRenderOver: boolean;
+
+ FBufferPath: string;
+ FDoExportBuffer: boolean;
+
+ StartTime, RenderTime, PauseTime: TDateTime;
+
+ procedure Progress(value: double);
+ procedure Operation(op: integer);
+
+ procedure SetMinDensity(const q: double);
+
+ procedure CreateColorMap; virtual;
+ procedure CreateCamera;
+ procedure CreateCameraMM;
+ procedure Prepare; virtual; abstract;
+ procedure SetPixels; virtual; abstract;
+
+ procedure CalcBufferSize; virtual;
+ procedure CalcBufferSizeMM;
+
+ procedure InitBuffers;
+ procedure RenderMM;
+
+ procedure Trace(const str: string);
+ procedure TimeTrace(const str: string);
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+
+ procedure Hibernate(filePath: string);
+ procedure Resume(filePath: string);
+
+ procedure SetCP(CP: TControlPoint);
+ procedure Render; virtual;
+ procedure ProcessBuffer(density: double);
+
+ function GetImage: TBitmap; virtual;
+ procedure GetImageAndDelete(target:tBitmap); virtual;
+ function GetTransparentImage: TPngObject;
+ procedure UpdateImage(CP: TControlPoint);
+ procedure SaveImage(const FileName: String);
+
+ procedure Stop; virtual;
+ procedure BreakRender; virtual;
+ procedure Pause; virtual;
+ procedure UnPause; virtual;
+ procedure SetThreadPriority(p: TThreadPriority); virtual;
+
+ function Failed: boolean;
+ function Hibernated: boolean;
+
+ function EmbedText(CommentStr: String): boolean; //AV
+ function DoSnapshot: boolean; //AV
+
+ procedure ShowBigStats;
+ procedure ShowSmallStats;
+
+ property CopyBufferCallback: TCopyBufferCallback
+ write FCopyBuffer;
+ property OnProgress: TOnProgress
+// read FOnProgress
+ write FOnProgress;
+ property OnOperation: TOnOperation
+ write FOnOperation;
+ property MaxMem : integer
+ read FMaxMem
+ write FMaxMem;
+ property NrSlices: integer
+ read FNumSlices;
+ property Slice: integer
+ read FSlice;
+ property NumThreads: integer
+ read FNumThreads
+ write FNumThreads;
+ property Output: TStrings
+ write strOutput;
+ property MinDensity: double
+ write SetMinDensity;
+ property RenderMore: boolean
+ write FRenderOver;
+ property Batch: integer
+ read FBatch;
+ property NrBatches: integer
+ read FNumBatches;
+ property BufferPath: string
+ read FBufferPath
+ write FBufferPath;
+ property ExportBuffer: boolean
+ read FDoExportBuffer
+ write FDoExportBuffer;
+ end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+ { TRenderer }
+
+///////////////////////////////////////////////////////////////////////////////
+
+type
+ TRenderer = class
+ private
+ FRenderer: TBaseRenderer;
+
+ FOnProgress: TOnProgress;
+ FOnOperation: TOnOperation;
+ FCopyBuffer: TCopyBufferCallback;
+ FCP: TControlPoint;
+ FMaxMem: int64;
+ FBufferPath: string;
+ { FNrThreads: integer;
+
+ function GetSlice: integer;
+ function GetNrSlices: integer;
+ function GetBatch: integer;
+ function GetNrBatches: integer;
+ function GetNrThreads: integer;
+
+ procedure SetNrThreads(v: integer); }
+
+ public
+ destructor Destroy; override;
+
+ procedure SetCP(CP: TControlPoint);
+ procedure Render;
+ procedure ProcessBuffer(density: double);
+
+ function GetImage: TBitmap;
+ procedure GetImageAndDelete(target: TBitmap);
+ function GetTransparentImage: TPngObject;
+ procedure Stop;
+
+ procedure IntermediateSample(imgmkr: TImageMaker);
+
+ function EmbedText(CommentStr: String): boolean; //AV
+
+ property CopyBufferCallback: TCopyBufferCallback
+ read FCopyBuffer
+ write FCopyBuffer;
+ property OnProgress: TOnProgress
+ read FOnProgress
+ write FOnProgress;
+ property OnOperation: TOnOperation
+ read FOnOperation
+ write FOnOperation;
+
+ { property Slice: integer
+ read GetSlice;
+ property NrSlices: integer
+ read GetNrSlices;
+
+ property Batch: integer
+ read GetBatch;
+ property NrBatches: integer
+ read GetNrBatches;
+ property NrThreads: integer
+ read FNrThreads
+ write FNrThreads;
+ property BufferPath: string
+ read FBufferPath
+ write FBufferPath; }
+
+ procedure Hibernate(fileName: string);
+ end;
+
+implementation
+
+uses
+ Math, SysUtils, Forms,
+ RenderingImplementation,
+ Binary, Global;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// { TBaseRenderer }
+//
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.Hibernate(filePath: string);
+begin
+ // todo
+end;
+procedure TBaseRenderer.Resume(filePath: string);
+begin
+ // todo
+end;
+
+procedure TBaseRenderer.CalcBufferSizeMM;
+begin
+ oversample := fcp.spatial_oversample;
+ gutter_width := (FImageMaker.GetFilterSize - oversample) div 2;
+ BucketHeight := oversample * image_height + 2 * gutter_width;
+ Bucketwidth := oversample * image_width + 2 * gutter_width;
+ BucketSize := BucketWidth * BucketHeight;
+end;
+
+procedure TBaseRenderer.RenderMM;
+const
+ Dividers: array[0..15] of integer = (1, 2, 3, 4, 5, 6, 7, 8, 10, 16, 20, 32, 64, 128, 256, 512);
+var
+ ApproxMemory, MaxMemory: int64;
+ i: integer;
+ zoom_scale, center_base, center_y: double;
+ t: TDateTime;
+begin
+ FStop := 0; //False;
+
+ image_Center_X := fcp.center[0];
+ image_Center_Y := fcp.center[1];
+
+ image_Height := fcp.Height;
+ image_Width := fcp.Width;
+ oversample := fcp.spatial_oversample;
+
+ // entered memory - imagesize
+ MaxMemory := FMaxMem * 1024 * 1024 - 4 * image_Height * int64(image_Width);
+
+ if (SingleBuffer) then
+ ApproxMemory := 16 * sqr(oversample) * image_Height * int64(image_Width)
+ else
+ ApproxMemory := 32 * sqr(oversample) * image_Height * int64(image_Width);
+
+ assert(MaxMemory > 0);
+ if MaxMemory <= 0 then exit;
+
+ FNumSlices := 1 + ApproxMemory div MaxMemory;
+
+ if FNumSlices > Dividers[High(Dividers)] then begin
+ for i := High(Dividers) downto 0 do begin
+ if image_height <> (image_height div dividers[i]) * dividers[i] then begin
+ FNumSlices := dividers[i];
+ break;
+ end;
+ end;
+ end else begin
+ for i := 0 to High(Dividers) do begin
+ if image_height <> (image_height div dividers[i]) * dividers[i] then
+ continue;
+ if FNumSlices <= dividers[i] then begin
+ FNumSlices := dividers[i];
+ break;
+ end;
+ end;
+ end;
+
+ FImageMaker.SetCP(FCP);
+ FImageMaker.Init;
+
+ fcp.height := fcp.height div FNumSlices;
+ center_y := fcp.center[1];
+ zoom_scale := power(2.0, fcp.zoom);
+ center_base := center_y - ((FNumSlices - 1) * fcp.height) / (2 * fcp.pixels_per_unit * zoom_scale);
+
+ image_height := fcp.Height;
+ image_Width := fcp.Width;
+
+ InitBuffers;
+ CreateColorMap;
+ Prepare;
+
+ RenderTime := 0;
+ for i := 0 to FNumSlices - 1 do begin
+ if FStop <> 0 then Exit;
+
+ FSlice := i;
+ fcp.center[1] := center_base + fcp.height * slice / (fcp.pixels_per_unit * zoom_scale);
+ CreateCameraMM;
+ ClearBuckets;
+ fcp.actual_density := 0;
+
+ t := Now;
+ SetPixels;
+ RenderTime := RenderTime + (Now - t);
+
+ if FStop = 0 then begin
+ TimeTrace(TextByKey('common-trace-creating-simple'));
+ FImageMaker.OnProgress := FOnProgress;
+ FImageMaker.CreateImage(Slice * fcp.height);
+ end;
+ end;
+
+ fcp.height := fcp.height * FNumSlices;
+end;
+
+procedure TBaseRenderer.AllocateBuckets;
+var
+ i, j: integer;
+begin
+ SetLength(buckets, BucketHeight, BucketWidth);
+
+ {$ifdef ENABLEZBUF}
+ SetLength(zbuffer, BucketHeight, BucketWidth);
+
+ for i := 0 to BucketHeight - 1 do
+ for j := 0 to BucketWidth - 1 do
+ begin
+ zbuffer[i, j] := 10e10;
+ end;
+ {$endif}
+end;
+
+procedure TBaseRenderer.ClearBuckets;
+var
+ i, j: integer;
+begin
+ for j := 0 to BucketHeight - 1 do
+ for i := 0 to BucketWidth - 1 do
+ with buckets[j][i] do begin
+ Red := 0;
+ Green := 0;
+ Blue := 0;
+ Count := 0;
+ end;
+end;
+
+procedure TBaseRenderer.SetBucketsPtr(ptr: pointer);
+begin
+ Buckets := TBucketArray(ptr);
+end;
+
+function TBaseRenderer.GetBucketsPtr: pointer;
+begin
+ Result := Buckets;
+end;
+
+constructor TBaseRenderer.Create;
+begin
+ inherited Create;
+
+ FNumSlices := 1;
+ FSlice := 0;
+ FStop := 0; // False;
+ FThreadPriority := tpNormal;
+
+ FImageMaker := TImageMaker.Create;
+end;
+
+////////////////////////////////////////////////////////////////
+function TBaseRenderer.EmbedText(CommentStr: String): boolean; // AV
+begin
+ Result := FImageMaker.EmbedText(CommentStr);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+destructor TBaseRenderer.Destroy;
+begin
+ FImageMaker.Free;
+
+ SetLength(buckets, 1, 1);
+
+ {$ifdef ENABLEZBUF}
+ SetLength(zbuffer, 1, 1);
+ {$endif}
+
+ if assigned(FCP) then
+ FCP.Free;
+
+ // TrimWorkingSet;
+
+ inherited;
+end;
+
+function TBaseRenderer.DoSnapshot: boolean; // AV
+begin
+ Result := false;
+
+ FImageMaker.CreateImage;
+ Result := true;
+end;
+
+procedure TBaseRenderer.Operation(op: integer);
+begin
+ if assigned(FOnOperation) then
+ FOnOperation(op);
+end;
+{
+function TRenderer.GetSlice: integer;
+begin
+ Result := FRenderer.Slice;
+end;
+
+function TRenderer.GetNrSlices: integer;
+begin
+ Result := FRenderer.NrSlices;
+end;
+
+function TRenderer.GetBatch: integer;
+begin
+ Result := FRenderer.Batch;
+end;
+
+function TRenderer.GetNrBatches: integer;
+begin
+ Result := FRenderer.NrBatches;
+end;
+
+function TRenderer.GetNrThreads: integer;
+begin
+ Result := FRenderer.NumThreads;
+end;
+
+procedure TRenderer.SetNrThreads(v: integer);
+begin
+ FRenderer.NumThreads := v;
+end;
+}
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.SetCP(CP: TControlPoint);
+begin
+ if assigned(FCP) then
+ FCP.Free;
+
+ FCP := Cp.Clone;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.Trace(const str: string);
+begin
+ if assigned(strOutput) then
+ strOutput.Add(str);
+end;
+
+procedure TBaseRenderer.TimeTrace(const str: string);
+begin
+ if assigned(strOutput) then
+ strOutput.Add(TimeToStr(Now) + ' : ' + str);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.Pause;
+begin
+ PauseTime := Now;
+
+ TimeTrace(TextByKey('common-trace-pausing'));
+end;
+
+procedure TBaseRenderer.UnPause;
+var
+ tNow: TDateTime;
+begin
+ tNow := Now;
+ RenderTime := RenderTime + (tNow - PauseTime);
+
+ TimeTrace(TextByKey('common-trace-resuming'));
+end;
+
+procedure TBaseRenderer.SetThreadPriority(p: TThreadPriority);
+begin
+ FThreadPriority := p;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.Stop;
+begin
+ TimeTrace(TextByKey('common-trace-terminating'));
+
+ FStop := 1; //True;
+end;
+
+procedure TBaseRenderer.BreakRender;
+begin
+ TimeTrace(TextByKey('common-trace-stopping'));
+
+ FStop := -1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.Progress(value: double);
+begin
+ if assigned(FOnprogress) then
+ FOnprogress(Value);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.SetMinDensity(const q: double);
+begin
+ if q < fcp.sample_density then FMinDensity := q
+ else FMinDensity := fcp.sample_density;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TBaseRenderer.Failed: boolean;
+begin
+ Result := (FStop > 0);
+end;
+
+function TBaseRenderer.Hibernated: boolean;
+begin
+ Result := FHibernated;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TBaseRenderer.GetImage: TBitmap;
+begin
+ if FStop > 0 then begin
+ assert(false);
+ FImageMaker.OnProgress := FOnProgress;
+ FImageMaker.CreateImage;
+ end;
+ Result := FImageMaker.GetImage;
+end;
+
+procedure TBaseRenderer.GetImageAndDelete(target:tBitmap);
+begin
+ if FStop > 0 then begin
+ assert(false);
+ FImageMaker.OnProgress := FOnProgress;
+ FImageMaker.CreateImage;
+ end;
+ FImageMaker.GetImageAndDelete(target);
+end;
+
+procedure TRenderer.GetImageAndDelete(target:tBitmap);
+begin
+ FRenderer.GetImageAndDelete(target);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TBaseRenderer.GetTransparentImage: TPngObject;
+begin
+ if FStop > 0 then begin
+ // shouldn't happen. and if it does...WTF?
+ Result := nil;
+ end
+ else
+ Result := FImageMaker.GetTransparentImage;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.UpdateImage(CP: TControlPoint);
+begin
+ FCP.background := cp.background;
+ FCP.spatial_filter_radius := cp.spatial_filter_radius;
+ FCP.gamma := cp.Gamma;
+ FCP.vibrancy := cp.vibrancy;
+ FCP.contrast := cp.contrast;
+ FCP.brightness := cp.brightness;
+ FCP.gammaThreshRelative := cp.gammaThreshRelative; // AV: for post-processing
+
+ FImageMaker.SetCP(FCP);
+ FImageMaker.Init;
+
+ FImageMaker.OnProgress := FOnProgress;
+ FImageMaker.CreateImage;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.SaveImage(const FileName: String);
+begin
+ if FStop > 0 then begin
+ TimeTrace(Format(TextByKey('common-trace-creating-detailed'), [fcp.actual_density]));
+ FImageMaker.OnProgress := FOnProgress;
+ FImageMaker.CreateImage;
+ end;
+ TimeTrace(TextByKey('common-trace-saving'));
+ FImageMaker.SaveImage(FileName);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.CreateColorMap;
+var
+ i: integer;
+begin
+ for i := 0 to 255 do
+ with ColorMap[i] do begin
+ Red := (fcp.CMap[i][0] * fcp.white_level) div 256;
+ Green := (fcp.CMap[i][1] * fcp.white_level) div 256;
+ Blue := (fcp.CMap[i][2] * fcp.white_level) div 256;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.CreateCamera;
+var
+ scale: double;
+ t0, t1: double;
+ t2, t3: double;
+ corner_x, corner_y, Xsize, Ysize: double;
+ shift: Integer;
+begin
+ scale := power(2, fcp.zoom);
+ sample_density := fcp.sample_density * scale * scale;
+ ppux := fcp.pixels_per_unit * scale;
+ ppuy := fcp.pixels_per_unit * scale;
+ shift := 0;
+
+ corner_x := fcp.center[0] - fcp.Width / ppux / 2.0;
+ corner_y := fcp.center[1] - fcp.Height / ppuy / 2.0;
+ t0 := gutter_width / (oversample * ppux);
+ t1 := gutter_width / (oversample * ppuy);
+ t2 := (2 * max_gutter_width - gutter_width) / (oversample * ppux);
+ t3 := (2 * max_gutter_width - gutter_width) / (oversample * ppuy);
+
+ camX0 := corner_x - t0;
+ camY0 := corner_y - t1 + shift;
+ camX1 := corner_x + fcp.Width / ppux + t2;
+ camY1 := corner_y + fcp.Height / ppuy + t3; //+ shift;
+
+ camW := camX1 - camX0;
+ if abs(camW) > 0.01 then
+ Xsize := 1.0 / camW
+ else
+ Xsize := 1;
+ camH := camY1 - camY0;
+ if abs(camH) > 0.01 then
+ Ysize := 1.0 / camH
+ else
+ Ysize := 1;
+ bws := (BucketWidth - 0.5) * Xsize;
+ bhs := (BucketHeight - 0.5) * Ysize;
+
+ if FCP.FAngle <> 0 then
+ begin
+ cosa := cos(FCP.FAngle);
+ sina := sin(FCP.FAngle);
+ rcX := FCP.Center[0]*(1 - cosa) - FCP.Center[1]*sina - camX0;
+ rcY := FCP.Center[1]*(1 - cosa) + FCP.Center[0]*sina - camY0;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.CreateCameraMM;
+var
+ scale: double;
+ t0, t1: double;
+ corner_x, corner_y, Xsize, Ysize: double;
+ shift: Integer;
+begin
+ scale := power(2, fcp.zoom);
+ sample_density := fcp.sample_density * scale * scale;
+ ppux := fcp.pixels_per_unit * scale;
+ ppuy := fcp.pixels_per_unit * scale;
+ // todo field stuff
+ shift := 0;
+ t0 := gutter_width / (oversample * ppux);
+ t1 := gutter_width / (oversample * ppuy);
+ corner_x := fcp.center[0] - image_width / ppux / 2.0;
+ corner_y := fcp.center[1] - image_height / ppuy / 2.0;
+
+ camX0 := corner_x - t0;
+ camY0 := corner_y - t1 + shift;
+ camX1 := corner_x + image_width / ppux + t0;
+ camY1 := corner_y + image_height / ppuy + t1; //+ shift;
+
+ camW := camX1 - camX0;
+ if abs(camW) > 0.01 then
+ Xsize := 1.0 / camW
+ else
+ Xsize := 1;
+ camH := camY1 - camY0;
+ if abs(camH) > 0.01 then
+ Ysize := 1.0 / camH
+ else
+ Ysize := 1;
+ bws := (BucketWidth - 0.5) * Xsize;
+ bhs := (BucketHeight - 0.5) * Ysize;
+
+ if FCP.FAngle <> 0 then
+ begin
+ cosa := cos(FCP.FAngle);
+ sina := sin(FCP.FAngle);
+ rcX := image_Center_X*(1 - cosa) - image_Center_Y*sina - camX0;
+ rcY := image_Center_Y*(1 - cosa) + image_Center_X*sina - camY0;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.CalcBufferSize;
+begin
+ oversample := fcp.spatial_oversample;
+ max_gutter_width := (MAX_FILTER_WIDTH - oversample) div 2;
+ gutter_width := (FImageMaker.GetFilterSize - oversample) div 2;
+ BucketWidth := oversample * fcp.Width + 2 * max_gutter_width;
+ BucketHeight := oversample * fcp.Height + 2 * max_gutter_width;
+ BucketSize := BucketWidth * BucketHeight;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TBaseRenderer.InitBuffers;
+var
+ error_string : string;
+begin
+ error_string := TextByKey('common-trace-notenoughmemory');
+
+ CalcBufferSize;
+
+ try
+ // FStop := 0;
+ // TrimWorkingSet;
+ if SingleBuffer then
+ TimeTrace(Format(TextByKey('common-trace-allocating'), [BucketSize * 16 / 1048576]))
+ else
+ TimeTrace(Format(TextByKey('common-trace-allocating'), [BucketSize * 32 / 1048576]));
+
+ AllocateBuckets;
+
+ except
+ on EOutOfMemory do begin
+ if Assigned(strOutput) then
+ strOutput.Add(error_string);
+ FStop := 1;
+ // TrimWorkingSet;
+ exit;
+ end;
+ end;
+
+ // share the buffer with imagemaker
+ FImageMaker.SetBucketData(GetBucketsPtr, BucketWidth, BucketHeight, 64);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderer.IntermediateSample(imgmkr: TImageMaker);
+begin
+ FCP.actual_density := FCP.sample_density * FRenderer.FBatch / FRenderer.FNumBatches;
+ imgmkr.SetCP(FCP);
+ imgmkr.Init;
+ imgmkr.SetBucketData(FRenderer.GetBucketsPtr, FRenderer.BucketWidth, FRenderer.BucketHeight, 64);
+ imgmkr.CreateImage;
+end;
+
+procedure TBaseRenderer.Render;
+begin
+ if fcp.NumXForms <= 0 then
+ begin
+ exit;
+ end;
+ FStop := 0; //False;
+
+ FImageMaker.SetCP(FCP);
+ FImageMaker.Init;
+
+ InitBuffers;
+ if FStop <> 0 then exit; // memory allocation error?
+
+ CreateColorMap;
+ Prepare;
+
+ CreateCamera;
+ if not FRenderOver then ClearBuckets;
+
+ Operation(opRendering);
+
+ StartTime := Now;
+ RenderTime := Now;
+ SetPixels;
+ RenderTime := Now - RenderTime;
+
+ if FStop <= 0 then begin
+ if fcp.sample_density = fcp.actual_density then
+ TimeTrace(TextByKey('common-trace-creating-simple'))
+ else
+ TimeTrace(Format(TextByKey('common-trace-creating-detailed'), [fcp.actual_density]));
+
+ if (FBufferPath <> '') then begin
+ Operation(opHibernating);
+ Hibernate(FBufferPath);
+ end;
+
+ Operation(opSampling);
+ FImageMaker.OnProgress := FOnProgress;
+ FImageMaker.CreateImage;
+ end;
+end;
+
+procedure TBaseRenderer.ProcessBuffer(density: double);
+var
+ nsamples: int64;
+ x, y: integer;
+ bucket : TBucket;
+ ptr: TBucketArray;
+begin
+ if fcp.NumXForms <= 0 then exit;
+ FStop := 0; //False;
+
+ FImageMaker.SetCP(FCP);
+ FImageMaker.Init;
+
+ InitBuffers;
+ if FStop <> 0 then exit; // memory allocation error?
+
+ CreateColorMap;
+ Prepare;
+
+ CreateCamera;
+ if not FRenderOver then ClearBuckets;
+
+ Operation(opSampling);
+
+ StartTime := Now;
+ RenderTime := Now;
+ ////////////////
+ Randomize;
+
+ NSamples := Round(sample_density * NrSlices * bucketSize / (oversample * oversample));
+ FNumBatches := Round(nsamples / (fcp.nbatches * SUB_BATCH_SIZE));
+ if FNumBatches = 0 then FNumBatches := 1;
+ FMinBatches := Round(FNumBatches * FMinDensity / fcp.sample_density);
+ if FMinBatches = 0 then FMinBatches := 1;
+
+ ptr := TBucketArray(GetBucketsPtr);
+ if (assigned(FCopyBuffer)) then begin
+ for y := 0 to BucketHeight - 1 do
+ for x := 0 to BucketWidth - 1 do
+ begin
+ FCopyBuffer(@bucket, x, y);
+ ptr[y, x].red := bucket.red;
+ ptr[y, x].green := bucket.green;
+ ptr[y, x].blue := bucket.blue;
+ ptr[y, x].count := bucket.count;
+ end;
+
+ end;
+ FBatch := FNumBatches;
+
+ fcp.actual_density := density;
+
+ Progress(0);
+ ////////////////
+ RenderTime := Now - RenderTime;
+
+ if FStop <= 0 then begin
+ if fcp.sample_density = fcp.actual_density then
+ TimeTrace(TextByKey('common-trace-creating-simple'))
+ else
+ TimeTrace(Format(TextByKey('common-trace-creating-detailed'), [fcp.actual_density]));
+
+ //Operation(opSampling);
+ FImageMaker.OnProgress := FOnProgress;
+ FImageMaker.CreateImage;
+ end;
+
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// { TRenderer }
+//
+///////////////////////////////////////////////////////////////////////////////
+
+destructor TRenderer.Destroy;
+begin
+ if assigned(FRenderer) then
+ FRenderer.Free;
+
+ inherited;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TRenderer.GetImage: TBitmap;
+begin
+ Result := nil;
+ if assigned(FRenderer) then
+ Result := FRenderer.GetImage;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderer.SetCP(CP: TControlPoint);
+begin
+ FCP := CP;
+end;
+///////////////////////////////////////////////////////////////////////////
+function TRenderer.EmbedText(CommentStr: String): boolean; // AV
+begin
+ Result := False;
+ if assigned(FRenderer) then
+ Result := FRenderer.EmbedText(CommentStr);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderer.ProcessBuffer(density: double);
+begin
+ if assigned(FRenderer) then
+ FRenderer.Free;
+
+ assert(Fmaxmem=0);
+ // if FNrThreads <= 1 then // AV
+ FRenderer := TRenderWorkerST.Create;
+ { else begin // AV
+ FRenderer := TRenderWorkerMT.Create;
+ FRenderer.NumThreads := FNrThreads;
+ end;
+ }
+ FRenderer.SetCP(FCP);
+ FRenderer.OnProgress := FOnProgress;
+ FRenderer.OnOperation := FOnOperation;
+ FRenderer.CopyBufferCallback := FCopyBuffer;
+ FRenderer.BufferPath := '';
+ FRenderer.ProcessBuffer(density);
+end;
+
+procedure TRenderer.Render;
+begin
+ if assigned(FRenderer) then
+ FRenderer.Free;
+
+ assert(Fmaxmem=0);
+// if FNrThreads <= 1 then // AV
+ FRenderer := TRenderWorkerST.Create;
+ { // AV: we don't need MT for mini-previews, Apo hangs...
+ else begin
+ FRenderer := TRenderWorkerMT.Create;
+ FRenderer.NumThreads := FNrThreads;
+ end;
+ }
+ FRenderer.SetCP(FCP);
+ FRenderer.OnProgress := FOnProgress;
+ FRenderer.OnOperation := FOnOperation;
+ FRenderer.BufferPath := FBufferPath;
+ FRenderer.Render;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TRenderer.Stop;
+begin
+ if assigned(FRenderer) then
+ FRenderer.Stop;
+end;
+
+procedure TRenderer.Hibernate(fileName: string);
+begin
+ FRenderer.Hibernate(fileName);
+end;
+
+function TRenderer.GetTransparentImage: TPngObject;
+begin
+ Result := FRenderer.GetTransparentImage;
+end;
+
+function TimeToString(t: TDateTime): string;
+var
+ n: integer;
+begin
+ n := Trunc(t);
+ Result := '';
+ if n > 0 then begin
+ Result := Result + Format(' %d ' + TextByKey('common-days'), [n]);
+ //if n <> 1 then Result := Result + 's';
+ end;
+ t := t * 24;
+ n := Trunc(t) mod 24;
+ if n > 0 then begin
+ Result := Result + Format(' %d ' + TextByKey('common-hours'), [n]);
+ //if n <> 1 then Result := Result + 's';
+ end;
+ t := t * 60;
+ n := Trunc(t) mod 60;
+ if n > 0 then begin
+ Result := Result + Format(' %d ' + TextByKey('common-minutes'), [n]);
+ //if n <> 1 then Result := Result + 's';
+ end;
+ t := t * 60;
+ t := t - (Trunc(t) div 60) * 60;
+ Result := Result + Format(' %.2f ' + TextByKey('common-seconds'), [t]);
+end;
+procedure TBaseRenderer.ShowBigStats;
+var
+ Stats: TBucketStats;
+ TotalSamples: int64;
+
+ Rbits, Gbits, Bbits, Abits: double;
+begin
+ if not assigned(strOutput) then exit;
+
+ strOutput.Add('');
+ if NrSlices = 1 then
+ strOutput.Add(TextByKey('common-statistics-title-oneslice'))
+ else
+ strOutput.Add(TextByKey('common-statistics-title-multipleslices')); // not really useful :-\
+
+ TotalSamples := int64(FNumBatches) * SUB_BATCH_SIZE; // * fcp.nbatches ?
+ if TotalSamples <= 0 then begin
+ //strOutput.Add(' Nothing to talk about!'); // normally shouldn't happen
+ exit;
+ end;
+ strOutput.Add(Format(' ' + TextByKey('common-statistics-maxpossiblebits'), [8 + log2(TotalSamples)]));
+ FImageMaker.GetBucketStats(Stats);
+ with Stats do begin
+ if MaxR > 0 then Rbits := log2(MaxR) else Rbits := 0;
+ if MaxG > 0 then Gbits := log2(MaxG) else Gbits := 0;
+ if MaxB > 0 then Bbits := log2(MaxB) else Bbits := 0;
+ if MaxA > 0 then Abits := log2(MaxA) else Abits := 0;
+ strOutput.Add(Format(' ' + TextByKey('common-statistics-maxred'), [Rbits]));
+ strOutput.Add(Format(' ' + TextByKey('common-statistics-maxgreen'), [Gbits]));
+ strOutput.Add(Format(' ' + TextByKey('common-statistics-maxblue'), [Bbits]));
+ strOutput.Add(Format(' ' + TextByKey('common-statistics-maxcounter'), [Abits]));
+ strOutput.Add(Format(' ' + TextByKey('common-statistics-pointhitratio'), [100.0*(TotalA/TotalSamples)]));
+ if RenderTime > 0 then // hmm
+ strOutput.Add(Format(' ' + TextByKey('common-statistics-averagespeed'), [TotalSamples / (RenderTime * 24 * 60 * 60)]));
+ strOutput.Add(' ' + TextByKey('common-statistics-purerenderingtime') + TimeToString(RenderTime));
+ end;
+end;
+
+procedure TBaseRenderer.ShowSmallStats;
+var
+ TotalSamples: int64;
+begin
+ if not assigned(strOutput) then exit;
+
+ TotalSamples := int64(FNumBatches) * SUB_BATCH_SIZE; // * fcp.nbatches ?
+ if RenderTime > 0 then // hmm
+ strOutput.Add(Format(' ' + TextByKey('common-statistics-averagespeed'), [TotalSamples / (RenderTime * 24 * 60 * 60)]));
+ strOutput.Add(' ' + TextByKey('common-statistics-purerenderingtime') + TimeToString(RenderTime));
+end;
+
+
+end.
+
diff --git a/System/AsmRandom.pas b/System/AsmRandom.pas
new file mode 100644
index 0000000..5f72a7e
--- /dev/null
+++ b/System/AsmRandom.pas
@@ -0,0 +1,95 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ This module is (c) Jed Kelsey and originally created for Apophysis JK 2.10.
+}
+
+unit AsmRandom;
+
+interface
+
+procedure AsmRandInt;
+procedure AsmRandExt;
+procedure AsmRandomize;
+
+var
+ RandSeed: Longint = 0; { Base for random number generator }
+
+implementation
+
+const
+ advapi32 = 'advapi32.dll';
+ kernel = 'kernel32.dll';
+
+function QueryPerformanceCounter(var lpPerformanceCount: Int64): LongBool; stdcall;
+ external kernel name 'QueryPerformanceCounter';
+
+function GetTickCount: Cardinal;
+ external kernel name 'GetTickCount';
+
+
+procedure AsmRandomize;
+{$IFDEF LINUX}
+begin
+ RandSeed := _time(nil);
+end;
+{$ENDIF}
+{$IFDEF MSWINDOWS}
+var
+ Counter: Int64;
+begin
+ if QueryPerformanceCounter(Counter) then
+ RandSeed := Counter
+ else
+ RandSeed := GetTickCount;
+end;
+{$ENDIF}
+
+procedure AsmRandInt;
+asm
+{ ->EAX Range }
+{ <-EAX Result }
+ IMUL EDX,RandSeed,08088405H
+ INC EDX
+ MOV RandSeed,EDX
+ MUL EDX
+ MOV EAX,EDX
+end;
+
+procedure AsmRandExt;
+const two2neg32: double = ((1.0/$10000) / $10000); // 2^-32
+asm
+{ FUNCTION _RandExt: Extended; }
+
+ IMUL EDX,RandSeed,08088405H
+ INC EDX
+ MOV RandSeed,EDX
+
+ FLD two2neg32
+ PUSH 0
+ PUSH EDX
+ FILD qword ptr [ESP]
+ ADD ESP,8
+ FMULP ST(1), ST(0)
+end;
+
+end.
diff --git a/System/CurvesControl.dfm b/System/CurvesControl.dfm
new file mode 100644
index 0000000..39378a2
--- /dev/null
+++ b/System/CurvesControl.dfm
@@ -0,0 +1,23 @@
+object CurvesControl: TCurvesControl
+ Left = 0
+ Top = 0
+ Width = 542
+ Height = 440
+ DoubleBuffered = True
+ Color = clBlack
+ ParentBackground = False
+ ParentColor = False
+ ParentDoubleBuffered = False
+ TabOrder = 0
+ object Host: TPanel
+ Left = 0
+ Top = 0
+ Width = 542
+ Height = 440
+ Align = alClient
+ BevelOuter = bvNone
+ Color = clBlack
+ ParentBackground = False
+ TabOrder = 0
+ end
+end
diff --git a/System/CurvesControl.pas b/System/CurvesControl.pas
new file mode 100644
index 0000000..9947a44
--- /dev/null
+++ b/System/CurvesControl.pas
@@ -0,0 +1,384 @@
+unit CurvesControl;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Math, ControlPoint,
+ Graphics, Controls, Forms, Bezier, CustomDrawControl, Vcl.ExtCtrls;
+
+const
+ point_size: double = 8;
+ accurancy: double = 3;
+ channel_count: integer = 4;
+ padding = 3;
+
+const
+ MAX_CHANNEL = 3;
+
+type
+ TCurvesChannel = (ccAll = 0, ccRed = 1, ccGreen = 2, ccBlue = 3);
+ TCurvesControl = class(TFrame)
+ Host: TPanel;
+ private
+ FRect: BezierRect;
+
+ FPoints: array [0..3] of BezierPoints;
+ FWeights: array [0..3] of BezierWeights;
+
+ FDragging: boolean;
+ FDragIndex: integer;
+
+ FActiveChannel : TCurvesChannel;
+ FChannelIndex : integer;
+
+ FFrame : TCustomDrawControl;
+ FCP: TControlPoint;
+
+ p: array [0..MAX_CHANNEL] of BezierPoints;
+ w: array [0..MAX_CHANNEL] of BezierWeights;
+ wsum: array [0..MAX_CHANNEL] of double;
+
+ procedure SetChannel(value: TCurvesChannel);
+ procedure SetWeightLeft(value: double);
+ procedure SetWeightRight(value: double);
+
+ function GetChannel: TCurvesChannel;
+ function GetWeightLeft: double;
+ function GetWeightRight: double;
+
+ procedure FrameMouseLeave(Sender: TObject);
+ procedure FrameMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
+ procedure FrameMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+ procedure FrameMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+ procedure FrameResize(Sender: TObject);
+ procedure FramePaint(Sender: TObject);
+ procedure FrameCreate;
+
+ procedure PaintCurve(Bitmap: TBitmap; c: integer; p: BezierPoints; w: BezierWeights; widgets: boolean);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+
+ property WeightLeft : double read GetWeightLeft write SetWeightLeft;
+ property WeightRight : double read GetWeightRight write SetWeightRight;
+ property ActiveChannel : TCurvesChannel read GetChannel write SetChannel;
+
+ procedure SetCp(cp: TControlPoint);
+ procedure UpdateFlame;
+ end;
+
+implementation
+
+{$R *.DFM}
+
+uses Main, Editor, Mutate, Adjust;
+
+constructor TCurvesControl.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+
+ FFrame := TCustomDrawControl.Create(self);
+ FFrame.TabStop := True;
+ FFrame.TabOrder := 0;
+ FFrame.Parent := Host;
+ FFrame.Align := alClient;
+ FFrame.Visible := True;
+
+ FFrame.OnPaint := FramePaint;
+ FFrame.OnMouseDown := FrameMouseDown;
+ FFrame.OnMouseMove := FrameMouseMove;
+ FFrame.OnMouseUp := FrameMouseUp;
+ FFrame.OnMouseLeave := FrameMouseLeave;
+
+ FCP := TControlPoint.Create;
+
+ FrameCreate;
+end;
+destructor TCurvesControl.Destroy;
+begin
+ FCP.Destroy;
+ inherited Destroy;
+end;
+
+procedure TCurvesControl.SetCp(cp: TControlPoint);
+var i, j: integer;
+begin
+ FCP.Copy(cp, true);
+ for i := 0 to 3 do
+ for j := 0 to 3 do begin
+ FWeights[i,j] := FCP.curveWeights[i,j];
+ FPoints[i,j].x := FCP.curvePoints[i,j].x;
+ FPoints[i,j].y := FCP.curvePoints[i,j].y;
+ end;
+ Invalidate;
+ FFrame.Invalidate;
+end;
+procedure TCurvesControl.UpdateFlame;
+begin
+ MainForm.StopThread;
+ MainForm.UpdateUndo;
+ MainCp.Copy(FCP, true);
+
+ if EditForm.Visible then EditForm.UpdateDisplay;
+ if MutateForm.Visible then MutateForm.UpdateDisplay;
+ if AdjustForm.Visible then AdjustForm.UpdateDisplay(true);
+
+ MainForm.RedrawTimer.enabled := true;
+end;
+
+procedure TCurvesControl.FrameMouseLeave(Sender: TObject);
+begin
+ FrameMouseUp(nil, mbLeft, [], 0, 0);
+end;
+procedure TCurvesControl.FrameMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+var
+ ps_half: double;
+ i, n: integer;
+ p: BezierPoints;
+begin
+ BezierCopy(FPoints[FChannelIndex], p);
+ BezierSetRect(p, true, FRect);
+
+ FDragIndex := -1;
+ FDragging := false;
+
+ n := Length(p);
+ for i := 1 to n - 2 do if
+ (X >= p[i].x - point_size) and (X <= p[i].x + point_size) and
+ (Y >= p[i].y - point_size) and (Y <= p[i].y + point_size) then
+ begin
+ FDragging := true;
+ FDragIndex := i;
+ Break;
+ end;
+end;
+procedure TCurvesControl.FrameMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
+var
+ m: BezierPoints;
+ tmp: BezierPoint;
+ i: Integer;
+ j: Integer;
+begin
+
+ if (y < 0) then Exit;
+ if (x < 0) then Exit;
+
+ m[0].x := x; m[0].y := y;
+ BezierUnsetRect(m, true, FRect);
+
+ if FDragging then
+ begin
+ FPoints[FChannelIndex][FDragIndex] := m[0];
+ if (FPoints[FChannelIndex][FDragIndex].x <= 0)
+ then FPoints[FChannelIndex][FDragIndex].x := 0;
+ if (FPoints[FChannelIndex][FDragIndex].y <= 0)
+ then FPoints[FChannelIndex][FDragIndex].y := 0;
+ if (FPoints[FChannelIndex][FDragIndex].x >= 1)
+ then FPoints[FChannelIndex][FDragIndex].x := 1;
+ if (FPoints[FChannelIndex][FDragIndex].y >= 1)
+ then FPoints[FChannelIndex][FDragIndex].y := 1;
+
+ if (FPoints[FChannelIndex][1].x > FPoints[FChannelIndex][2].x) then
+ begin
+ tmp := FPoints[FChannelIndex][1];
+ FPoints[FChannelIndex][1] := FPoints[FChannelIndex][2];
+ FPoints[FChannelIndex][2] := tmp;
+ if (FDragIndex = 1) then FDragIndex := 2
+ else FDragIndex := 1;
+ end;
+
+ for i := 0 to 3 do
+ for j := 0 to 3 do begin
+ FCP.curveWeights[i,j] := FWeights[i,j];
+ FCP.curvePoints[i,j].x := FPoints[i,j].x;
+ FCP.curvePoints[i,j].y := FPoints[i,j].y;
+ end;
+
+
+ FFrame.Refresh;
+ end;
+end;
+procedure TCurvesControl.FrameMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ FDragIndex := -1;
+ FDragging := false;
+
+ if (sender <> nil) then UpdateFlame;
+end;
+
+procedure TCurvesControl.FrameCreate;
+var i: integer;
+begin
+ for i := 0 to channel_count - 1 do
+ begin
+ FPoints[i][0].x := 0.00; FPoints[i][0].y := 0.00; FWeights[i][0] := 1;
+ FPoints[i][1].x := 0.00; FPoints[i][1].y := 0.00; FWeights[i][1] := 1;
+ FPoints[i][2].x := 1.00; FPoints[i][2].y := 1.00; FWeights[i][2] := 1;
+ FPoints[i][3].x := 1.00; FPoints[i][3].y := 1.00; FWeights[i][3] := 1;
+ end;
+
+ FDragIndex := -1;
+ FDragging := false;
+end;
+procedure TCurvesControl.FrameResize(Sender: TObject);
+begin
+ FRect.x0 := 0; FRect.y0 := 0;
+ FRect.x1 := self.Width - 1;
+ FRect.y1 := self.Height - 1;
+end;
+procedure TCurvesControl.FramePaint(Sender: TObject);
+var
+ clientRect: TRect;
+ i, j, x, y, sx, sy: integer;
+ bitmap: TBitMap;
+begin
+ if (FFrame.Width <= 0) or (FFrame.Height <= 0) then Exit;
+ FrameResize(Sender);
+
+ Bitmap := TBitmap.Create;
+ Bitmap.Width := FFrame.Width;
+ Bitmap.Height := FFrame.Height;
+
+ sx := Bitmap.Width;
+ sy := Bitmap.Height;
+
+ try
+ with Bitmap.Canvas do
+ begin
+ Brush.Color := $000000;
+ FillRect(Rect(0, 0, sx, sy));
+
+ Pen.Color := $555555;
+ Pen.Style := psSolid;
+ Pen.Width := 1;
+
+ for x := 1 to 7 do begin
+ MoveTo(Round(0.125 * x * FRect.x1), Round(FRect.y0));
+ LineTo(Round(0.125 * x * FRect.x1), Round(FRect.y1));
+ end;
+ for y := 1 to 3 do begin
+ MoveTo(Round(FRect.x0), Round(0.25 * y * FRect.y1));
+ LineTo(Round(FRect.x1), Round(0.25 * y * FRect.y1));
+ end;
+
+ for i := 0 to channel_count - 1 do begin
+ for j := 0 to 3 do
+ wsum[i] := wsum[i] + FWeights[i][j];
+ for j := 0 to 3 do
+ w[i][j] := FWeights[i][j] / wsum[i];
+
+ BezierCopy(FPoints[i], p[i]);
+ BezierSetRect(p[i], true, FRect);
+
+ if i <> FChannelIndex then PaintCurve(Bitmap, i, p[i], w[i], false);
+ end;
+ PaintCurve(Bitmap, FChannelIndex, p[FChannelIndex], w[FChannelIndex], true);
+
+ FFrame.Canvas.Draw(0, 0, Bitmap);
+ end;
+ finally
+ Bitmap.Free;
+ end;
+end;
+
+procedure TCurvesControl.PaintCurve(Bitmap: TBitmap; c: integer; p: BezierPoints; w: BezierWeights; widgets: boolean);
+var
+ pos0, pos1: BezierPoint;
+ t, step: Double;
+ r, g, b: array [0 .. MAX_CHANNEL] of integer;
+ rgbv: integer;
+begin
+ with Bitmap.Canvas do
+ begin
+ if c <> FChannelIndex then begin
+ r[0] := $aa; r[1] := $aa; r[2] := $40; r[3] := $40;
+ g[0] := $aa; g[1] := $40; g[2] := $aa; g[3] := $40;
+ b[0] := $aa; b[1] := $40; b[2] := $40; b[3] := $aa;
+ end else begin
+ r[0] := $ff; r[1] := $ff; r[2] := $80; r[3] := $80;
+ g[0] := $ff; g[1] := $80; g[2] := $ff; g[3] := $80;
+ b[0] := $ff; b[1] := $80; b[2] := $80; b[3] := $ff;
+ end;
+
+ rgbv := RGB(r[c], g[c], b[c]);
+
+ t := 0;
+ step := 0.001;
+
+ BezierSolve(0, p, w, pos1);
+ pos0.x := 0; pos0.y := pos1.y;
+
+ if widgets then begin
+ Pen.Color := $808080; Pen.Width := 1;
+ MoveTo(Round(p[1].x), Round(p[1].y));
+ LineTo(Round(p[2].x), Round(p[2].y));
+ MoveTo(Round(FRect.x0), Round(FRect.y1));
+ LineTo(Round(p[1].x), Round(p[1].y));
+ MoveTo(Round(FRect.x1), Round(FRect.y0));
+ LineTo(Round(p[2].x), Round(p[2].y));
+ end;
+
+ while t < 1 do begin
+ BezierSolve(t, p, w, pos1);
+ Pen.Color := rgbv;
+ Pen.Width := 1;
+ MoveTo(Round(pos0.x), Round(pos0.y));
+ LineTo(Round(pos1.x), Round(pos1.y));
+ t := t + step;
+ pos0 := pos1;
+ end;
+
+ MoveTo(Round(pos0.x), Round(pos0.y));
+ LineTo(Round(FRect.x1), Round(pos0.y));
+
+ if widgets then begin
+ Brush.Color := rgbv;
+ Ellipse(
+ Round(p[1].x - point_size / 2.0),
+ Round(p[1].y - point_size / 2.0),
+ Round(p[1].x + point_size / 2.0),
+ Round(p[1].y + point_size / 2.0)
+ );
+ Ellipse(
+ Round(p[2].x - point_size / 2.0),
+ Round(p[2].y - point_size / 2.0),
+ Round(p[2].x + point_size / 2.0),
+ Round(p[2].y + point_size / 2.0)
+ );
+ end;
+ end;
+end;
+
+procedure TCurvesControl.SetChannel(value: TCurvesChannel);
+begin
+ FActiveChannel := value;
+ FChannelIndex := Integer(value);
+ FFrame.Refresh;
+end;
+procedure TCurvesControl.SetWeightLeft(value: double);
+begin
+ FWeights[FChannelIndex][1] := value;
+ FCP.curveWeights[FChannelIndex][1] := value;
+ FFrame.Refresh;
+end;
+procedure TCurvesControl.SetWeightRight(value: double);
+begin
+ FWeights[FChannelIndex][2] := value;
+ FCP.curveWeights[FChannelIndex][2] := value;
+ FFrame.Refresh;
+end;
+
+function TCurvesControl.GetChannel: TCurvesChannel;
+begin
+ Result := FActiveChannel;
+end;
+function TCurvesControl.GetWeightLeft: double;
+begin
+ Result := FWeights[FChannelIndex][1];
+end;
+function TCurvesControl.GetWeightRight: double;
+begin
+ Result := FWeights[FChannelIndex][2];
+end;
+
+end.
diff --git a/System/CustomDrawControl.pas b/System/CustomDrawControl.pas
new file mode 100644
index 0000000..d2b687f
--- /dev/null
+++ b/System/CustomDrawControl.pas
@@ -0,0 +1,99 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit CustomDrawControl;
+
+interface
+
+uses
+ Classes, Controls, Messages, Windows, Graphics;
+
+type
+ TCustomDrawControl = class(TCustomControl)
+ private
+ FOnPaint: TNotifyEvent;
+ FOnLeave: TNotifyEvent;
+
+ procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
+ procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
+ procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
+ procedure WMGetDlgCode(var Message: TMessage); message WM_GETDLGCODE;
+ procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
+ protected
+
+ public
+ procedure Paint; override;
+
+ property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
+ property Canvas;
+
+ property OnDblClick;
+ property OnKeyDown;
+// property OnKeyPress;
+ property OnKeyUp;
+ property OnMouseDown;
+ property OnMouseMove;
+ property OnMouseUp;
+ property OnMouseWheel;
+// property OnMouseWheelDown;
+// property OnMouseWheelUp;
+ property OnEnter;
+ property OnExit;
+ property OnMouseLeave: TNotifyEvent read FOnLeave write FOnLeave;
+ end;
+
+implementation
+
+procedure TCustomDrawControl.WMEraseBkgnd(var Message: TWMEraseBkgnd);
+begin
+ Message.Result := 1;
+end;
+
+procedure TCustomDrawControl.WMSetFocus(var Message: TWMSetFocus);
+begin
+ Invalidate;
+end;
+
+procedure TCustomDrawControl.WMKillFocus(var Message: TWMKillFocus);
+begin
+ if assigned(OnExit) then OnExit(self);
+ Invalidate;
+end;
+
+procedure TCustomDrawControl.WMGetDlgCode(var Message: TMessage);
+begin
+ inherited;
+ Message.Result := Message.Result or DLGC_WANTARROWS;
+end;
+
+procedure TCustomDrawControl.CMMouseLeave(var Message: TMessage);
+begin
+ if Assigned(FOnLeave) then FOnLeave(Self);
+end;
+
+procedure TCustomDrawControl.Paint;
+begin
+ if Assigned(FOnPaint) then FOnPaint(Self);
+end;
+
+end.
diff --git a/System/LibXmlComps.dcr b/System/LibXmlComps.dcr
new file mode 100644
index 0000000..ed9cb54
Binary files /dev/null and b/System/LibXmlComps.dcr differ
diff --git a/System/LibXmlComps.pas b/System/LibXmlComps.pas
new file mode 100644
index 0000000..8026bd9
--- /dev/null
+++ b/System/LibXmlComps.pas
@@ -0,0 +1,122 @@
+(**
+===============================================================================================
+Name : LibXmlComps
+===============================================================================================
+Project : All Projects processing XML documents
+===============================================================================================
+Subject : XML parser for Delphi's VCL toolbar
+===============================================================================================
+Dipl.-Ing. (FH) Stefan Heymann, Softwaresysteme, Tübingen, Germany
+===============================================================================================
+Date Author Changes
+-----------------------------------------------------------------------------------------------
+2000-03-31 HeySt 1.0.0 Start
+2000-07-27 HeySt 1.0.1 Added "TAttr" declaration
+ Moved GetNormalize/SetNormalize to PROTECTED section
+2001-02-03 HeySt Changed prototype for the TExternalEvent callback function type
+ so that C++Builder users should get it compiled better.
+
+2001-02-28 HeySt 1.0.2 Introduced the "StopParser" property. When you set this property to
+ TRUE in one of the Parser Events, parsing is stopped and the Execute
+ method returns.
+ Introduced Version numbers
+2001-07-10 HeySt 1.0.3 Fixed a bug in TScannerXmlParser.DtdElementFound so that the
+ OnAttList event is correctly fired
+2001-07-11 HeySt 1.1.0 Derived from the new TCustomXmlScanner class from LibXmlParser
+2005-07-07 HeySt 1.1.1 Published new TranslateCharacter event property
+*)
+
+UNIT LibXmlComps;
+
+INTERFACE
+
+USES
+ Classes,
+ LibXmlParser;
+
+TYPE
+ TXmlScanner = CLASS (TCustomXmlScanner)
+ PUBLIC
+ PROPERTY XmlParser;
+ PROPERTY StopParser;
+ PUBLISHED
+ PROPERTY Filename;
+ PROPERTY Normalize;
+ PROPERTY OnXmlProlog;
+ PROPERTY OnComment;
+ PROPERTY OnPI;
+ PROPERTY OnDtdRead;
+ PROPERTY OnStartTag;
+ PROPERTY OnEmptyTag;
+ PROPERTY OnEndTag;
+ PROPERTY OnContent;
+ PROPERTY OnCData;
+ PROPERTY OnElement;
+ PROPERTY OnAttList;
+ PROPERTY OnEntity;
+ PROPERTY OnNotation;
+ PROPERTY OnDtdError;
+ PROPERTY OnLoadExternal;
+ PROPERTY OnTranslateEncoding;
+ PROPERTY OnTranslateCharacter;
+ END;
+
+ // The "Easy" XML Scanner leaves out events and properties which you are unlikely to use
+ // for "normal" XML files.
+ // CDATA sections trigger "OnContent" events
+ TEasyXmlScanner = CLASS (TCustomXmlScanner)
+ PROTECTED
+ PROCEDURE WhenCData (Content : string); OVERRIDE;
+ PUBLIC
+ PROPERTY XmlParser;
+ PROPERTY StopParser;
+ PUBLISHED
+ PROPERTY Filename;
+ PROPERTY Normalize;
+ PROPERTY OnComment;
+ PROPERTY OnPI;
+ PROPERTY OnStartTag;
+ PROPERTY OnEmptyTag;
+ PROPERTY OnEndTag;
+ PROPERTY OnContent;
+ PROPERTY OnLoadExternal;
+ PROPERTY OnTranslateEncoding;
+ END;
+
+PROCEDURE Register;
+
+(*
+===============================================================================================
+IMPLEMENTATION
+===============================================================================================
+*)
+
+IMPLEMENTATION
+
+
+PROCEDURE Register;
+BEGIN
+ RegisterComponents ('XML', [TXmlScanner, TEasyXmlScanner]);
+END;
+
+
+(*
+===============================================================================================
+TEasyXmlScanner
+===============================================================================================
+*)
+
+PROCEDURE TEasyXmlScanner.WhenCData (Content : string);
+BEGIN
+ INHERITED WhenContent (Content);
+END;
+
+
+(*
+===============================================================================================
+INITIALIZATION
+===============================================================================================
+*)
+
+END.
+
diff --git a/System/LibXmlParser.pas b/System/LibXmlParser.pas
new file mode 100644
index 0000000..b68ee6c
--- /dev/null
+++ b/System/LibXmlParser.pas
@@ -0,0 +1,2719 @@
+(**
+===============================================================================================
+Name : LibXmlParser
+
+Project : All Projects
+
+Subject : Progressive XML 1.0 Parser for all types of XML 1.0 Files
+===============================================================================================
+Author : Stefan Heymann
+ Eschenweg 3
+ 72076 Tübingen
+ Germany
+
+E-Mail: stefan@destructor.de
+URL: www.destructor.de
+===============================================================================================
+Source, Legals ("Licence")
+--------------------------
+The official site to get this parser is http://www.destructor.de/
+
+Usage and Distribution of this Source Code is ruled by the
+"Destructor.de Source code Licence" (DSL) which comes with this file or
+can be downloaded at http://www.destructor.de/
+
+IN SHORT: Usage and distribution of this source code is free.
+ You use it completely on your own risk.
+
+Donateware
+----------
+This code is donateware. When you think that it is worth it you can give a donation.
+When you use the code on this site to earn money, you might think about giving a part of
+it to the author. Whether you donate, and how much, is absolutely up to you.
+You can find more information about donations on
+ http://www.destructor.de/donateware.htm
+===============================================================================================
+!!! All parts of this code which are not finished or not conforming exactly to
+ the XmlSpec are marked with three exclamation marks
+
+-!- Parts where the parser may be able to detect errors in the document's syntax are
+ marked with the dash-exlamation mark-dash sequence.
+===============================================================================================
+Terminology:
+------------
+- Start: Start of a buffer part
+- Final: End (last character) of a buffer part
+- DTD: Document Type Definition
+- DTDc: Document Type Declaration
+- XMLSpec: The current W3C XML 1.0 Recommendation (version 1.0 TE as of 2004-02-04), Chapter No.
+- Cur*: Fields concerning the "Current" part passed back by the "Scan" method
+===============================================================================================
+Scanning the XML document
+-------------------------
+- Create TXmlParser Instance MyXml := TXmlParser.Create;
+- Load XML Document MyXml.LoadFromFile (Filename);
+- Start Scanning MyXml.StartScan;
+- Scan Loop WHILE MyXml.Scan DO
+- Test for Part Type CASE MyXml.CurPartType OF
+- Handle Parts ... : ;;;
+- Handle Parts ... : ;;;
+- Handle Parts ... : ;;;
+ END;
+- Destroy MyXml.Free;
+===============================================================================================
+Loading the XML document
+------------------------
+You can load the XML document from a file with the "LoadFromFile" method.
+It is beyond the scope of this parser to perform HTTP or FTP accesses. If you want your
+application to handle such requests (URLs), you can load the XML via HTTP or FTP or whatever
+protocol and hand over the data buffer using the "LoadFromBuffer" or "SetBuffer" method.
+"LoadFromBuffer" loads the internal buffer of TXmlParser with the given null-terminated
+string, thereby creating a copy of that buffer.
+"SetBuffer" just takes the pointer to another buffer, which means that the given
+buffer pointer must be valid while the document is accessed via TXmlParser.
+===============================================================================================
+Encodings:
+----------
+This XML parser kind of "understands" the following encodings:
+- UTF-8
+- ISO-8859-1
+- Windows-1252 ("ANSI")
+
+Any flavor of multi-byte characters (and this includes UCS-2 and UTF-16) is not supported.
+Sorry.
+
+Every string which has to be passed to the application passes the virtual method
+"TranslateEncoding" which translates the string from the current encoding (stored in
+"CurEncoding") into the encoding the application wishes to receive.
+The "TranslateEncoding" method that is built into TXmlParser assumes that the application
+wants to receive Windows ANSI (Windows-1252, about the same as ISO-8859-1) and is able
+to convert UTF-8 and ISO-8859-1 encodings.
+For other source and target encodings, you will have to override "TranslateEncoding".
+===============================================================================================
+Buffer Handling
+---------------
+- The document must be loaded completely into a piece of RAM
+- All character positions are referenced by PChar pointers
+- The TXmlParser instance can either "own" the buffer itself (then, FBufferSize is > 0)
+ or reference the buffer of another instance or object (then, FBuffersize is 0 and
+ FBuffer is not NIL)
+- The Property DocBuffer passes back a pointer to the first byte of the document. If there
+ is no document stored (FBuffer is NIL), the DocBuffer returns a pointer to a NULL character.
+===============================================================================================
+Whitespace Handling
+-------------------
+The TXmlParser property "Normalize" determines how Whitespace is returned in Text Content:
+While Normalize is true, all leading and trailing whitespace characters are trimmed of, all
+Whitespace is converted to Space #x20 characters and contiguous Whitespace characters are
+compressed to one.
+If the "Scan" method reports a ptContent part, the application can get the original text
+with all whitespace characters by extracting the characters from "CurStart" to "CurFinal".
+If the application detects an xml:space attribute, it can set "Normalize" accordingly or
+use CurStart/CurFinal.
+Please note that TXmlParser does _not_ normalize Line Breaks to single LineFeed characters
+as the XMLSpec requires (XMLSpec 2.11).
+The xml:space attribute is not handled by TXmlParser. This is on behalf of the application.
+===============================================================================================
+Non-XML-Conforming
+------------------
+TXmlParser does not conform 100 % exactly to the XMLSpec:
+- UTF-16 is not supported (XMLSpec 2.2)
+ (Workaround: Convert UTF-16 to UTF-8 and hand the buffer over to TXmlParser)
+- As the parser only works with single byte strings, all Unicode characters > 255
+ can currently not be handled correctly.
+ (Workaround: Use UTF-8 and handle UTF-8 characters by your own code)
+- Line breaks are not normalized to single Linefeed #x0A characters (XMLSpec 2.11)
+ (Workaround: The Application can access the text contents on its own [CurStart, CurFinal],
+ thereby applying every normalization it wishes to)
+- The attribute value normalization does not work exactly as defined in the
+ Second Edition of the XML 1.0 specification.
+- See also the code parts marked with three consecutive exclamation marks. These are
+ parts which are not finished in the current code release.
+
+This list may be incomplete, so it may grow if I get to know any other points.
+As work on the parser proceeds, this list may also shrink.
+===============================================================================================
+Things Todo
+-----------
+- Introduce a new event/callback which is called when there is an unresolvable
+ entity or character reference or another error in the XML
+- Correctly Support Unicode
+- Use Streams instead of reading the whole XML into memory
+- Support the new UnicodeString type of Delphi 2009 and onwards
+===============================================================================================
+Change History, Version numbers
+-------------------------------
+The Date is given in ISO Year-Month-Day (YYYY-MM-DD) order.
+Versions are counted from 1.0.0 beginning with the version from 2000-03-16.
+Unreleased versions don't get a version number.
+
+Date Author Version Changes
+-----------------------------------------------------------------------------------------------
+2000-03-16 HeySt 1.0.0 Start
+2000-03-28 HeySt 1.0.1 Initial Publishing of TXmlParser on the destructor.de Web Site
+2000-03-30 HeySt 1.0.2 TXmlParser.AnalyzeCData: Call "TranslateEncoding" for CurContent
+2000-03-31 HeySt 1.0.3 Deleted the StrPosE function (was not needed anyway)
+2000-04-04 HeySt 1.0.4 TDtdElementRec modified: Start/Final for all Elements;
+ Should be backwards compatible.
+ AnalyzeDtdc: Set CurPartType to ptDtdc
+2000-04-23 HeySt 1.0.5 New class TObjectList. Eliminated reference to the Delphi 5
+ "Contnrs" unit so LibXmlParser is Delphi 4 compatible.
+2000-07-03 HeySt 1.0.6 TNvpNode: Added Constructor
+2000-07-11 HeySt 1.0.7 Removed "Windows" from USES clause
+ Added three-exclamation-mark comments for Utf8ToAnsi/AnsiToUtf8
+ Added three-exclamation-mark comments for CHR function calls
+2000-07-23 HeySt 1.0.8 TXmlParser.Clear: CurAttr.Clear; EntityStack.Clear;
+ (This was not a bug; just defensive programming)
+2000-07-29 HeySt 1.0.9 TNvpList: Added methods: Node(Index), Value(Index), Name(Index);
+2000-10-07 HeySt Introduced Conditional Defines
+ Uses Contnrs unit and its TObjectList class again for
+ Delphi 5 and newer versions
+2001-01-30 HeySt Introduced Version Numbering
+ Made LoadFromFile and LoadFromBuffer BOOLEAN functions
+ Introduced FileMode parameter for LoadFromFile
+ BugFix: TAttrList.Analyze: Must add CWhitespace to ExtractName call
+ Comments worked over
+2001-02-28 HeySt 1.0.10 Completely worked over and tested the UTF-8 functions
+ Fixed a bug in TXmlParser.Scan which caused it to start over when it
+ was called after the end of scanning, resulting in an endless loop
+ TEntityStack is now a TObjectList instead of TList
+2001-07-03 HeySt 1.0.11 Updated Compiler Version IFDEFs for Kylix
+2001-07-11 HeySt 1.0.12 New TCustomXmlScanner component (taken over from LibXmlComps.pas)
+2001-07-14 HeySt 1.0.13 Bugfix TCustomXmlScanner.FOnTranslateEncoding
+2001-10-22 HeySt Don't clear CurName anymore when the parser finds a CDATA section.
+2001-12-03 HeySt 1.0.14 TObjectList.Clear: Make call to INHERITED method (fixes a memory leak)
+2001-12-05 HeySt 1.0.15 TObjectList.Clear: removed call to INHERITED method
+ TObjectList.Destroy: Inserted SetCapacity call.
+ Reduces need for frequent re-allocation of pointer buffer
+ Dedicated to my father, Theodor Heymann
+2002-06-26 HeySt 1.0.16 TXmlParser.Scan: Fixed a bug with PIs whose name is beginning
+ with 'xml'. Thanks to Uwe Kamm for submitting this bug.
+ The CurEncoding property is now always in uppercase letters (the XML
+ spec wants it to be treated case independently so when it's uppercase
+ comparisons are faster)
+2002-03-04 HeySt 1.0.17 Included an IFDEF for Delphi 7 (VER150) and Kylix
+ There is a new symbol HAS_CONTNRS_UNIT which is used now to
+ distinguish between IDEs which come with the Contnrs unit and
+ those that don't.
+2005-07-05 HeySt 1.0.18 Changed old comments referring to "PackSpaces" to "Normalize".
+ (not publicly released) Reworked IFDEF section at the top to better reflect
+ Kylix, C++Builder, Delphi 8, and Delphi 2005/2006/2007.
+ Reworked attribute value normalization to completely conform
+ to XMLSpec 3.3.3. Deleted the ReplaceGeneralEntities method, which
+ is not needed anymore.
+ TXmlParser: Added a new virtual method TranslateCharacter to
+ translate Unicode character references.
+ TXmlScanner: Added a new event OnTranslateCharacter to
+ translate Unicode character references.
+ Handle (i.e. skip) UTF-8 BOMs.
+ Switch $R and $B off.
+ Set UTF-8 as default encoding in .Clear
+2009-12-31 HeySt 1.0.19 Finished work at the attribute value normalization.
+ Delphi 2009/2010 compatibility
+ (no UnicodeString compatibility though, sorry)
+2010-10-12 HeySt 1.0.20 Checked Delphi XE compatibility
+ Included a $DEFINE for FreePascal compatibility
+ CurContent is not reset to an empty string with every start tag.
+ I will keep this behaviour so old code doesn't get broken.
+ In case you need this you can set CurContent yourself at every
+ start tag.
+*)
+
+
+// --- Delphi/Kylix/C++Builder Version Numbers
+// As this is no code, this does not blow up your object or executable code at all
+// Versions that will not work with this code (Delphi 1-3, .NET) will see invalid code and stop the compiler here
+// The defines D4_OR_NEWER and D5_OR_NEWER are only kept for backward compatibility.
+// They are not used in this code anymore.
+
+ (*$DEFINE HAS_CONTNRS_UNIT *) // The Contnrs Unit was introduced in Delphi 5
+ (*$DEFINE D4_OR_NEWER *) // It's Delphi 4 or newer for backwards compatibility
+ (*$DEFINE D5_OR_NEWER *) // It's Delphi 5 or newer for backwards compatibility
+ // Delphi 1, C++Builder 1:
+ (*$IFDEF VER80 *)This Code will not compile in Delphi 1 (*$ENDIF*)
+ (*$IFDEF VER83 *)This Code will not compile in C++Builder 1 (*$ENDIF*)
+ // Delphi 2, C++Builder 2:
+ (*$IFDEF VER90 *)This Code will not compile in Delphi 2 (*$ENDIF*)
+ (*$IFDEF VER93 *)This Code will not compile in C++Builder 2 (*$ENDIF*)
+ // Delphi 3, C++Builder 3:
+ (*$IFDEF VER100 *)This Code will not compile in Delphi 3 (*$ENDIF*)
+ (*$IFDEF VER110 *)This Code will not compile in C++Builder 3 (*$ENDIF*)
+ // Delphi 4, C++Builder 4:
+ (*$IFDEF VER120 *)(*$UNDEFINE D5_OR_NEWER *) (*$UNDEFINE HAS_CONTNRS_UNIT *) (*$ENDIF *)
+ (*$IFDEF VER125 *)(*$UNDEFINE D5_OR_NEWER *) (*$UNDEFINE HAS_CONTNRS_UNIT *) (*$ENDIF *)
+ // Managed Code
+ (*$IFDEF MANAGEDCODE *)This code will not compile as Managed Code (*$ENDIF *)
+ (*$IFDEF CLR *) This code will not compile as Managed Code (*$ENDIF *)
+ (*$IFDEF FPC *) (*$MODE delphi *) (*$ENDIF *) // It's FreePascal
+
+
+(*$R- Switch Range Checking Off *)
+(*$B- Switch Complete Boolean Evaluation Off *)
+
+UNIT LibXmlParser;
+
+INTERFACE
+
+USES
+ SysUtils, Classes,
+ (*$IFDEF HAS_CONTNRS_UNIT *)
+ Contnrs,
+ (*$ENDIF*)
+ Math;
+
+CONST
+ CVersion = '1.0.20'; // This variable will be updated for every release
+ // (I hope, I won't forget to do it everytime ...)
+ CUnknownChar = '?'; // Replacement for unknown/untransformable character references
+
+TYPE
+ TCharType = PAnsiChar;
+ TStringType = Utf8String;
+
+ TPartType = // --- Document Part Types
+ (ptNone, // Nothing
+ ptXmlProlog, // XML Prolog XmlSpec 2.8 / 4.3.1
+ ptComment, // Comment XmlSpec 2.5
+ ptPI, // Processing Instruction XmlSpec 2.6
+ ptDtdc, // Document Type Declaration XmlSpec 2.8
+ ptStartTag, // Start Tag XmlSpec 3.1
+ ptEmptyTag, // Empty-Element Tag XmlSpec 3.1
+ ptEndTag, // End Tag XmlSpec 3.1
+ ptContent, // Text Content between Tags
+ ptCData); // CDATA Section XmlSpec 2.7
+
+ TDtdElemType = // --- DTD Elements
+ (deElement, // !ELEMENT declaration
+ deAttList, // !ATTLIST declaration
+ deEntity, // !ENTITY declaration
+ deNotation, // !NOTATION declaration
+ dePI, // PI in DTD
+ deComment, // Comment in DTD
+ deError); // Error found in the DTD
+
+TYPE
+ TAttrList = CLASS;
+ TEntityStack = CLASS;
+ TNvpList = CLASS;
+ TElemDef = CLASS;
+ TElemList = CLASS;
+ TEntityDef = CLASS;
+ TNotationDef = CLASS;
+
+ TDtdElementRec = RECORD // --- This Record is returned by the DTD parser callback function
+ Start, Final : TCharType; // Start/End of the Element's Declaration
+ CASE ElementType : TDtdElemType OF // Type of the Element
+ deElement, //
+ deAttList : (ElemDef : TElemDef); //
+ deEntity : (EntityDef : TEntityDef); //
+ deNotation : (NotationDef : TNotationDef); //
+ dePI : (Target : TCharType; //
+ Content : TCharType;
+ AttrList : TAttrList);
+ deError : (Pos : TCharType); // Error
+ // deComment : ((No additional fields here)); //
+ END;
+
+ TXmlParser = CLASS // --- Internal Properties and Methods
+ PROTECTED
+ FBuffer : TCharType; // NIL if there is no buffer available
+ FBufferSize : INTEGER; // 0 if the buffer is not owned by the Document instance
+ FSource : STRING; // Name of Source of document. Filename for Documents loaded with LoadFromFile
+
+ FXmlVersion : TStringType; // XML version from Document header. Default is '1.0'
+ FEncoding : TStringType; // Encoding from Document header. Default is 'UTF-8'
+ FStandalone : BOOLEAN; // Standalone declaration from Document header. Default is 'yes'
+ FRootName : TStringType; // Name of the Root Element (= DTD name)
+ FDtdcFinal : TCharType; // Pointer to the '>' character terminating the DTD declaration
+
+ FNormalize : BOOLEAN; // If true: Pack Whitespace and don't return empty contents
+ EntityStack : TEntityStack; // Entity Stack for Parameter and General Entities
+ FCurEncoding : TStringType; // Current Encoding during parsing (always uppercase)
+
+ PROCEDURE AnalyzeProlog; // Analyze XML Prolog or Text Declaration
+ PROCEDURE AnalyzeComment (Start : TCharType; VAR Final : TCharType); // Analyze Comments
+ PROCEDURE AnalyzePI (Start : TCharType; VAR Final : TCharType); // Analyze Processing Instructions (PI)
+ PROCEDURE AnalyzeDtdc; // Analyze Document Type Declaration
+ PROCEDURE AnalyzeDtdElements (Start : TCharType; VAR Final : TCharType); // Analyze DTD declarations
+ PROCEDURE AnalyzeTag; // Analyze Start/End/Empty-Element Tags
+ PROCEDURE AnalyzeCData; // Analyze CDATA Sections
+ PROCEDURE AnalyzeText (VAR IsDone : BOOLEAN); // Analyze Text Content between Tags
+ PROCEDURE AnalyzeElementDecl (Start : TCharType; VAR Final : TCharType);
+ PROCEDURE AnalyzeAttListDecl (Start : TCharType; VAR Final : TCharType);
+ PROCEDURE AnalyzeEntityDecl (Start : TCharType; VAR Final : TCharType);
+ PROCEDURE AnalyzeNotationDecl (Start : TCharType; VAR Final : TCharType);
+
+ PROCEDURE PushPE (VAR Start : TCharType);
+ PROCEDURE ReplaceCharacterEntities (VAR Str : TStringType);
+ PROCEDURE ReplaceParameterEntities (VAR Str : TStringType);
+
+ FUNCTION GetDocBuffer : TCharType; // Returns FBuffer or a pointer to a NUL char if Buffer is empty
+
+ PUBLIC // --- Document Properties
+ PROPERTY XmlVersion : TStringType READ FXmlVersion; // XML version from the Document Prolog
+ PROPERTY Encoding : TStringType READ FEncoding; // Document Encoding from Prolog
+ PROPERTY Standalone : BOOLEAN READ FStandalone; // Standalone Declaration from Prolog
+ PROPERTY RootName : TStringType READ FRootName; // Name of the Root Element
+ PROPERTY Normalize : BOOLEAN READ FNormalize WRITE FNormalize; // True if Content is to be normalized
+ PROPERTY Source : STRING READ FSource; // Name of Document Source (Filename)
+ PROPERTY DocBuffer : TCharType READ GetDocBuffer; // Returns document buffer
+ PUBLIC // --- DTD Objects
+ Elements : TElemList; // Elements: List of TElemDef (contains Attribute Definitions)
+ Entities : TNvpList; // General Entities: List of TEntityDef
+ ParEntities : TNvpList; // Parameter Entities: List of TEntityDef
+ Notations : TNvpList; // Notations: List of TNotationDef
+ PUBLIC
+ CONSTRUCTOR Create;
+ DESTRUCTOR Destroy; OVERRIDE;
+
+ // --- Document Handling
+ FUNCTION LoadFromFile (Filename : STRING;
+ FileMode : INTEGER = fmOpenRead OR fmShareDenyNone) : BOOLEAN;
+ // Loads Document from given file
+ FUNCTION LoadFromBuffer (Buffer : TCharType) : BOOLEAN; // Loads Document from another buffer
+ PROCEDURE SetBuffer (Buffer : TCharType); // References another buffer
+ PROCEDURE Clear; // Clear Document
+
+ PUBLIC
+ // --- Scanning through the document
+ CurPartType : TPartType; // Current Type
+ CurName : TStringType; // Current Name
+ CurContent : TStringType; // Current Normalized Content
+ CurStart : TCharType; // Current First character
+ CurFinal : TCharType; // Current Last character
+ CurAttr : TAttrList; // Current Attribute List
+ PROPERTY CurEncoding : TStringType READ FCurEncoding; // Current Encoding (always uppercase)
+ PROCEDURE StartScan;
+ FUNCTION Scan : BOOLEAN;
+
+ // --- Events / Callbacks
+ FUNCTION LoadExternalEntity (SystemId, PublicId,
+ Notation : TStringType) : TXmlParser; VIRTUAL;
+ FUNCTION TranslateEncoding (CONST Source : TStringType) : TStringType; VIRTUAL;
+ FUNCTION TranslateCharacter (CONST UnicodeValue : INTEGER;
+ CONST UnknownChar : TStringType = CUnknownChar) : TStringType; VIRTUAL;
+ PROCEDURE DtdElementFound (DtdElementRec : TDtdElementRec); VIRTUAL;
+ END;
+
+ TValueType = // --- Attribute Value Type
+ (vtNormal, // Normal specified Attribute
+ vtImplied, // #IMPLIED attribute value
+ vtFixed, // #FIXED attribute value
+ vtDefault); // Attribute value from default value in !ATTLIST declaration
+
+ TAttrDefault = // --- Attribute Default Type
+ (adDefault, // Normal default value
+ adRequired, // #REQUIRED attribute
+ adImplied, // #IMPLIED attribute
+ adFixed); // #FIXED attribute
+
+ TAttrType = // --- Type of attribute
+ (atUnknown, // Unknown type
+ atCData, // Character data only
+ atID, // ID
+ atIdRef, // ID Reference
+ atIdRefs, // Several ID References, separated by Whitespace
+ atEntity, // Name of an unparsed Entity
+ atEntities, // Several unparsed Entity names, separated by Whitespace
+ atNmToken, // Name Token
+ atNmTokens, // Several Name Tokens, separated by Whitespace
+ atNotation, // A selection of Notation names (Unparsed Entity)
+ atEnumeration); // Enumeration
+
+ TElemType = // --- Element content type
+ (etEmpty, // Element is always empty
+ etAny, // Element can have any mixture of PCDATA and any elements
+ etChildren, // Element must contain only elements
+ etMixed); // Mixed PCDATA and elements
+
+ (*$IFDEF HAS_CONTNRS_UNIT *)
+ TObjectList = Contnrs.TObjectList; // Re-Export this identifier
+ (*$ELSE *)
+ TObjectList = CLASS (TList)
+ DESTRUCTOR Destroy; OVERRIDE;
+ PROCEDURE Delete (Index : INTEGER);
+ PROCEDURE Clear; OVERRIDE;
+ END;
+ (*$ENDIF *)
+
+ TNvpNode = CLASS // Name-Value Pair Node
+ Name : TStringType;
+ Value : TStringType;
+ CONSTRUCTOR Create (TheName : TStringType = ''; TheValue : TStringType = '');
+ END;
+
+ TNvpList = CLASS (TObjectList) // Name-Value Pair List
+ PROCEDURE Add (Node : TNvpNode);
+ FUNCTION Node (Name : TStringType) : TNvpNode; OVERLOAD;
+ FUNCTION Node (Index : INTEGER) : TNvpNode; OVERLOAD;
+ FUNCTION Value (Name : TStringType) : TStringType; OVERLOAD;
+ FUNCTION Value (Index : INTEGER) : TStringType; OVERLOAD;
+ FUNCTION Name (Index : INTEGER) : TStringType;
+ END;
+
+ TAttr = CLASS (TNvpNode) // Attribute of a Start-Tag or Empty-Element-Tag
+ ValueType : TValueType;
+ AttrType : TAttrType;
+ END;
+
+ TAttrList = CLASS (TNvpList) // List of Attributes
+ PROCEDURE Analyze (Start : TCharType; VAR Final : TCharType);
+ END;
+
+ TEntityStack = CLASS (TObjectList) // Stack where current position is stored before parsing entities
+ PROTECTED
+ Owner : TXmlParser;
+ PUBLIC
+ CONSTRUCTOR Create (TheOwner : TXmlParser);
+ PROCEDURE Push (LastPos : TCharType); OVERLOAD;
+ PROCEDURE Push (Instance : TObject; LastPos : TCharType); OVERLOAD;
+ FUNCTION Pop : TCharType; // Returns next char or NIL if EOF is reached. Frees Instance.
+ END;
+
+ TAttrDef = CLASS (TNvpNode) // Represents a ';
+
+ CUtf8BOM = #$EF#$BB#$BF; // The Byte Order Mark (U+FEFF) coded in UTF-8
+
+ // --- Name Constants for the above enumeration types
+ CPartType_Name : ARRAY [TPartType] OF TStringType =
+ ('', 'XML Prolog', 'Comment', 'PI',
+ 'DTD Declaration', 'Start Tag', 'Empty Tag', 'End Tag',
+ 'Text', 'CDATA');
+ CValueType_Name : ARRAY [TValueType] OF TStringType = ('Normal', 'Implied', 'Fixed', 'Default');
+ CAttrDefault_Name : ARRAY [TAttrDefault] OF TStringType = ('Default', 'Required', 'Implied', 'Fixed');
+ CElemType_Name : ARRAY [TElemType] OF TStringType = ('Empty', 'Any', 'Childs only', 'Mixed');
+ CAttrType_Name : ARRAY [TAttrType] OF TStringType = ('Unknown', 'CDATA',
+ 'ID', 'IDREF', 'IDREFS',
+ 'ENTITY', 'ENTITIES',
+ 'NMTOKEN', 'NMTOKENS',
+ 'Notation', 'Enumeration');
+
+FUNCTION ConvertWs (Source: TStringType; PackWs: BOOLEAN) : TStringType; // Convert WS to spaces #x20
+PROCEDURE SetStringSF (VAR S : TStringType; BufferStart, BufferFinal : TCharType); // SetString by Start/Final of buffer
+FUNCTION StrSFPas (Start, Finish : TCharType) : TStringType; // Convert buffer part to Pascal string
+FUNCTION TrimWs (Source : TStringType) : TStringType; // Trim Whitespace
+
+(*
+===============================================================================================
+TCustomXmlScanner: event based component wrapper for TXmlParser
+===============================================================================================
+*)
+
+TYPE
+ TXmlPrologEvent = PROCEDURE (Sender : TObject; XmlVersion, Encoding: String; Standalone : BOOLEAN) OF OBJECT;
+ TCommentEvent = PROCEDURE (Sender : TObject; Comment : String) OF OBJECT;
+ TPIEvent = PROCEDURE (Sender : TObject; Target, Content: String; Attributes : TAttrList) OF OBJECT;
+ TDtdEvent = PROCEDURE (Sender : TObject; RootElementName : String) OF OBJECT;
+ TStartTagEvent = PROCEDURE (Sender : TObject; TagName : String; Attributes : TAttrList) OF OBJECT;
+ TEndTagEvent = PROCEDURE (Sender : TObject; TagName : String) OF OBJECT;
+ TContentEvent = PROCEDURE (Sender : TObject; Content : String) OF OBJECT;
+ TElementEvent = PROCEDURE (Sender : TObject; ElemDef : TElemDef) OF OBJECT;
+ TEntityEvent = PROCEDURE (Sender : TObject; EntityDef : TEntityDef) OF OBJECT;
+ TNotationEvent = PROCEDURE (Sender : TObject; NotationDef : TNotationDef) OF OBJECT;
+ TErrorEvent = PROCEDURE (Sender : TObject; ErrorPos : TCharType) OF OBJECT;
+ TExternalEvent = PROCEDURE (Sender : TObject; SystemId, PublicId, NotationId : String;
+ VAR Result : TXmlParser) OF OBJECT;
+ TEncodingEvent = FUNCTION (Sender : TObject; CurrentEncoding, Source : String) : String OF OBJECT;
+ TEncodeCharEvent = FUNCTION (Sender : TObject; UnicodeValue : INTEGER) : String OF OBJECT;
+
+ TCustomXmlScanner = CLASS (TComponent)
+ PROTECTED
+ FXmlParser : TXmlParser;
+ FOnXmlProlog : TXmlPrologEvent;
+ FOnComment : TCommentEvent;
+ FOnPI : TPIEvent;
+ FOnDtdRead : TDtdEvent;
+ FOnStartTag : TStartTagEvent;
+ FOnEmptyTag : TStartTagEvent;
+ FOnEndTag : TEndTagEvent;
+ FOnContent : TContentEvent;
+ FOnCData : TContentEvent;
+ FOnElement : TElementEvent;
+ FOnAttList : TElementEvent;
+ FOnEntity : TEntityEvent;
+ FOnNotation : TNotationEvent;
+ FOnDtdError : TErrorEvent;
+ FOnLoadExternal : TExternalEvent;
+ FOnTranslateEncoding : TEncodingEvent;
+ FOnTranslateCharacter : TEncodeCharEvent;
+ FStopParser : BOOLEAN;
+ FUNCTION GetNormalize : BOOLEAN;
+ PROCEDURE SetNormalize (Value : BOOLEAN);
+
+ PROCEDURE WhenXmlProlog(XmlVersion, Encoding: String; Standalone : BOOLEAN); VIRTUAL;
+ PROCEDURE WhenComment (Comment : String); VIRTUAL;
+ PROCEDURE WhenPI (Target, Content: String; Attributes : TAttrList); VIRTUAL;
+ PROCEDURE WhenDtdRead (RootElementName : String); VIRTUAL;
+ PROCEDURE WhenStartTag (TagName : String; Attributes : TAttrList); VIRTUAL;
+ PROCEDURE WhenEmptyTag (TagName : String; Attributes : TAttrList); VIRTUAL;
+ PROCEDURE WhenEndTag (TagName : String); VIRTUAL;
+ PROCEDURE WhenContent (Content : String); VIRTUAL;
+ PROCEDURE WhenCData (Content : String); VIRTUAL;
+ PROCEDURE WhenElement (ElemDef : TElemDef); VIRTUAL;
+ PROCEDURE WhenAttList (ElemDef : TElemDef); VIRTUAL;
+ PROCEDURE WhenEntity (EntityDef : TEntityDef); VIRTUAL;
+ PROCEDURE WhenNotation (NotationDef : TNotationDef); VIRTUAL;
+ PROCEDURE WhenDtdError (ErrorPos : TCharType); VIRTUAL;
+
+ PUBLIC
+ CONSTRUCTOR Create (AOwner: TComponent); OVERRIDE;
+ DESTRUCTOR Destroy; OVERRIDE;
+
+ PROCEDURE LoadFromFile (Filename : TFilename); // Load XML Document from file
+ PROCEDURE LoadFromBuffer (Buffer : TCharType); // Load XML Document from buffer
+ PROCEDURE SetBuffer (Buffer : TCharType); // Refer to Buffer
+ FUNCTION GetFilename : TFilename;
+
+ PROCEDURE Execute; // Perform scanning
+
+ PROTECTED
+ PROPERTY XmlParser : TXmlParser READ FXmlParser;
+ PROPERTY StopParser : BOOLEAN READ FStopParser WRITE FStopParser;
+ PROPERTY Filename : TFilename READ GetFilename WRITE LoadFromFile;
+ PROPERTY Normalize : BOOLEAN READ GetNormalize WRITE SetNormalize;
+ PROPERTY OnXmlProlog : TXmlPrologEvent READ FOnXmlProlog WRITE FOnXmlProlog;
+ PROPERTY OnComment : TCommentEvent READ FOnComment WRITE FOnComment;
+ PROPERTY OnPI : TPIEvent READ FOnPI WRITE FOnPI;
+ PROPERTY OnDtdRead : TDtdEvent READ FOnDtdRead WRITE FOnDtdRead;
+ PROPERTY OnStartTag : TStartTagEvent READ FOnStartTag WRITE FOnStartTag;
+ PROPERTY OnEmptyTag : TStartTagEvent READ FOnEmptyTag WRITE FOnEmptyTag;
+ PROPERTY OnEndTag : TEndTagEvent READ FOnEndTag WRITE FOnEndTag;
+ PROPERTY OnContent : TContentEvent READ FOnContent WRITE FOnContent;
+ PROPERTY OnCData : TContentEvent READ FOnCData WRITE FOnCData;
+ PROPERTY OnElement : TElementEvent READ FOnElement WRITE FOnElement;
+ PROPERTY OnAttList : TElementEvent READ FOnAttList WRITE FOnAttList;
+ PROPERTY OnEntity : TEntityEvent READ FOnEntity WRITE FOnEntity;
+ PROPERTY OnNotation : TNotationEvent READ FOnNotation WRITE FOnNotation;
+ PROPERTY OnDtdError : TErrorEvent READ FOnDtdError WRITE FOnDtdError;
+ PROPERTY OnLoadExternal : TExternalEvent READ FOnLoadExternal WRITE FOnLoadExternal;
+ PROPERTY OnTranslateEncoding : TEncodingEvent READ FOnTranslateEncoding WRITE FOnTranslateEncoding;
+ PROPERTY OnTranslateCharacter : TEncodeCharEvent READ FOnTranslateCharacter WRITE FOnTranslateCharacter;
+ END;
+
+(*
+===============================================================================================
+IMPLEMENTATION
+===============================================================================================
+*)
+
+IMPLEMENTATION
+
+(*
+===============================================================================================
+"Special" Helper Functions
+
+Don't ask me why. But including these functions makes the parser *DRAMATICALLY* faster
+on my K6-233 and Pentium-M machine. You can test it yourself just by commenting them out.
+They do exactly the same as the Assembler routines defined in SysUtils.
+(This is where you can see how great the Delphi compiler really is. The compiled code is
+faster than hand-coded assembler! :-)
+===============================================================================================
+--> Just move this line below the StrScan function --> *)
+
+FUNCTION StrPos (CONST Str, SearchStr : TCharType) : TCharType;
+ // Same functionality as SysUtils.StrPos
+VAR
+ First : ANSICHAR;
+ Len : INTEGER;
+BEGIN
+ First := SearchStr^;
+ Len := StrLen (SearchStr);
+ Result := Str;
+ REPEAT
+ IF Result^ = First THEN
+ IF StrLComp (Result, SearchStr, Len) = 0 THEN BREAK;
+ IF Result^ = #0 THEN BEGIN
+ Result := NIL;
+ BREAK;
+ END;
+ INC (Result);
+ UNTIL FALSE;
+END;
+
+
+FUNCTION StrScan (CONST Start : TCharType; CONST Ch : ANSICHAR) : TCharType;
+ // Same functionality as SysUtils.StrScan
+BEGIN
+ Result := Start;
+ WHILE Result^ <> Ch DO BEGIN
+ IF Result^ = #0 THEN BEGIN
+ Result := NIL;
+ EXIT;
+ END;
+ INC (Result);
+ END;
+END;
+
+
+(*
+===============================================================================================
+Helper Functions
+===============================================================================================
+*)
+
+FUNCTION DelChars (Source : TStringType; CharsToDelete : TCharset) : TStringType;
+ // Delete all "CharsToDelete" from the string
+VAR
+ I : INTEGER;
+BEGIN
+ Result := Source;
+ FOR I := Length (Result) DOWNTO 1 DO
+ IF Result [I] IN CharsToDelete THEN
+ Delete (Result, I, 1);
+END;
+
+FUNCTION TrimWs (Source : TStringType) : TStringType;
+ // Trimms off Whitespace characters from both ends of the string
+VAR
+ I : INTEGER;
+BEGIN
+ // --- Trim Left
+ I := 1;
+ WHILE (I <= Length (Source)) AND (Source [I] IN CWhitespace) DO
+ INC (I);
+ Result := Copy (Source, I, MaxInt);
+
+ // --- Trim Right
+ I := Length (Result);
+ WHILE (I > 1) AND (Result [I] IN CWhitespace) DO
+ DEC (I);
+ Delete (Result, I+1, Length (Result)-I);
+END;
+
+
+FUNCTION TrimAndPackSpace (Source : TStringType) : TStringType;
+ // Trim and pack contiguous space (#x20) characters
+ // Needed for attribute value normalization of non-CDATA attributes (XMLSpec 3.3.3)
+VAR
+ I, T : INTEGER;
+BEGIN
+ // --- Trim Left
+ T := 1;
+ FOR I := 1 to Length (Source) DO
+ IF Source [I] = #32
+ THEN INC (T)
+ ELSE BREAK;
+ IF T > 1
+ THEN Result := Copy (Source, T, MaxInt)
+ ELSE Result := Source;
+
+ // --- Trim Right
+ I := Length (Result);
+ WHILE (I > 1) AND (Result [I] = #32) DO
+ DEC (I);
+ Delete (Result, I+1, Length (Result)-I);
+
+ // --- Pack
+ FOR I := Length (Result) DOWNTO 2 DO
+ IF (Result [I] = #32) AND (Result [I-1] = #32) THEN
+ Delete (Result, I, 1);
+END;
+
+
+FUNCTION ConvertWs (Source: TStringType; PackWs: BOOLEAN) : TStringType;
+ // Converts all Whitespace characters to the Space #x20 character
+ // If "PackWs" is true, contiguous Whitespace characters are packed to one
+VAR
+ I : INTEGER;
+BEGIN
+ Result := Source;
+ FOR I := Length (Result) DOWNTO 1 DO
+ IF (Result [I] IN CWhitespace) THEN
+ IF PackWs AND (I > 1) AND (Result [I-1] IN CWhitespace)
+ THEN Delete (Result, I, 1)
+ ELSE Result [I] := #32;
+END;
+
+
+
+
+PROCEDURE SetStringSF (VAR S : TStringType; BufferStart, BufferFinal : TCharType);
+BEGIN
+ SetString (S, BufferStart, BufferFinal-BufferStart+1);
+END;
+
+
+FUNCTION StrLPas (Start : TCharType; Len : INTEGER) : TStringType;
+BEGIN
+ SetString (Result, Start, Len);
+END;
+
+
+FUNCTION StrSFPas (Start, Finish : TCharType) : TStringType;
+BEGIN
+ SetString (Result, Start, Finish-Start+1);
+END;
+
+
+FUNCTION StrScanE (CONST Source : TCharType; CONST CharToScanFor : ANSICHAR) : TCharType;
+ // If "CharToScanFor" is not found, StrScanE returns the last char of the
+ // buffer instead of NIL
+BEGIN
+ Result := StrScan (Source, CharToScanFor);
+ IF Result = NIL THEN
+ Result := StrEnd (Source)-1;
+END;
+
+
+PROCEDURE ExtractName (Start : TCharType; Terminators : TCharset; VAR Final : TCharType);
+ (* Extracts the complete Name beginning at "Start".
+ It is assumed that the name is contained in Markup, so the '>' character is
+ always a Termination.
+ Start: IN Pointer to first char of name. Is always considered to be valid
+ Terminators: IN Characters which terminate the name
+ Final: OUT Pointer to last char of name *)
+BEGIN
+ Final := Start;
+ Include (Terminators, #0);
+ Include (Terminators, '>');
+ WHILE NOT ((Final + 1)^ IN Terminators) DO
+ INC (Final);
+END;
+
+
+PROCEDURE ExtractQuote (Start : TCharType; VAR Content : TStringType; VAR Final : TCharType);
+ (* Extract a string which is contained in single or double Quotes.
+ Start: IN Pointer to opening quote
+ Content: OUT The quoted string
+ Final: OUT Pointer to closing quote *)
+BEGIN
+ Final := StrScan (Start+1, Start^);
+ IF Final = NIL THEN BEGIN
+ Final := StrEnd (Start+1)-1;
+ SetString (Content, Start+1, Final-Start);
+ END
+ ELSE
+ SetString (Content, Start+1, Final-1-Start);
+END;
+
+
+(*
+===============================================================================================
+TEntityStackNode
+This Node is pushed to the "Entity Stack" whenever the parser parses entity replacement text.
+The "Instance" field holds the Instance pointer of an External Entity buffer. When it is
+popped, the Instance is freed.
+The "Encoding" field holds the name of the Encoding. External Parsed Entities may have
+another encoding as the document entity (XmlSpec 4.3.3). So when there is an " 0 THEN BEGIN
+ ESN := TEntityStackNode (Items [Count-1]);
+ Result := ESN.LastPos;
+ IF ESN.Instance <> NIL THEN
+ ESN.Instance.Free;
+ IF ESN.Encoding <> '' THEN
+ Owner.FCurEncoding := ESN.Encoding; // Restore current Encoding
+ Delete (Count-1);
+ END
+ ELSE
+ Result := NIL;
+END;
+
+
+(*
+===============================================================================================
+TExternalID
+-----------
+XmlSpec 4.2.2: ExternalID ::= 'SYSTEM' S SystemLiteral |
+ 'PUBLIC' S PubidLiteral S SystemLiteral
+XmlSpec 4.7: PublicID ::= 'PUBLIC' S PubidLiteral
+SystemLiteral and PubidLiteral are quoted
+===============================================================================================
+*)
+
+TYPE
+ TExternalID = CLASS
+ PublicId : TStringType;
+ SystemId : TStringType;
+ Final : TCharType;
+ CONSTRUCTOR Create (Start : TCharType);
+ END;
+
+CONSTRUCTOR TExternalID.Create (Start : TCharType);
+BEGIN
+ INHERITED Create;
+ Final := Start;
+ IF StrLComp (Start, 'SYSTEM', 6) = 0 THEN BEGIN
+ WHILE NOT (Final^ IN (CQuoteChar + [#0, '>', '['])) DO INC (Final);
+ IF NOT (Final^ IN CQuoteChar) THEN EXIT;
+ ExtractQuote (Final, SystemID, Final);
+ END
+ ELSE IF StrLComp (Start, 'PUBLIC', 6) = 0 THEN BEGIN
+ WHILE NOT (Final^ IN (CQuoteChar + [#0, '>', '['])) DO INC (Final);
+ IF NOT (Final^ IN CQuoteChar) THEN EXIT;
+ ExtractQuote (Final, PublicID, Final);
+ INC (Final);
+ WHILE NOT (Final^ IN (CQuoteChar + [#0, '>', '['])) DO INC (Final);
+ IF NOT (Final^ IN CQuoteChar) THEN EXIT;
+ ExtractQuote (Final, SystemID, Final);
+ END;
+END;
+
+
+(*
+===============================================================================================
+TXmlParser
+===============================================================================================
+*)
+
+CONSTRUCTOR TXmlParser.Create;
+BEGIN
+ INHERITED Create;
+ FBuffer := NIL;
+ FBufferSize := 0;
+ Elements := TElemList.Create;
+ Entities := TNvpList.Create;
+ ParEntities := TNvpList.Create;
+ Notations := TNvpList.Create;
+ CurAttr := TAttrList.Create;
+ EntityStack := TEntityStack.Create (Self);
+ Clear;
+END;
+
+
+DESTRUCTOR TXmlParser.Destroy;
+BEGIN
+ Clear;
+ Elements.Free;
+ Entities.Free;
+ ParEntities.Free;
+ Notations.Free;
+ CurAttr.Free;
+ EntityStack.Free;
+ INHERITED Destroy;
+END;
+
+
+PROCEDURE TXmlParser.Clear;
+ // Free Buffer and clear all object attributes
+BEGIN
+ IF (FBufferSize > 0) AND (FBuffer <> NIL) THEN
+ FreeMem (FBuffer);
+ FBuffer := NIL;
+ FBufferSize := 0;
+ FSource := '';
+ FXmlVersion := '';
+ FEncoding := 'UTF-8';
+ FCurEncoding := 'UTF-8';
+ FStandalone := FALSE;
+ FRootName := '';
+ FDtdcFinal := NIL;
+ FNormalize := TRUE;
+ Elements.Clear;
+ Entities.Clear;
+ ParEntities.Clear;
+ Notations.Clear;
+ CurAttr.Clear;
+ EntityStack.Clear;
+END;
+
+
+FUNCTION TXmlParser.LoadFromFile (Filename : string; FileMode : INTEGER = fmOpenRead OR fmShareDenyNone) : BOOLEAN;
+ // Loads Document from given file
+ // Returns TRUE if successful
+VAR
+ f : FILE;
+ ReadIn : INTEGER;
+ OldFileMode : INTEGER;
+BEGIN
+ Result := FALSE;
+ Clear;
+
+ // --- Open File
+ OldFileMode := SYSTEM.FileMode;
+ TRY
+ SYSTEM.FileMode := FileMode;
+ TRY
+ AssignFile (f, Filename);
+ Reset (f, 1);
+ EXCEPT
+ EXIT;
+ END;
+
+ TRY
+ // --- Allocate Memory
+ TRY
+ FBufferSize := Filesize (f) + 1;
+ GetMem (FBuffer, FBufferSize);
+ EXCEPT
+ Clear;
+ EXIT;
+ END;
+
+ // --- Read File
+ TRY
+ BlockRead (f, FBuffer^, FBufferSize, ReadIn);
+ (FBuffer+ReadIn)^ := #0; // NULL termination
+ EXCEPT
+ Clear;
+ EXIT;
+ END;
+ FINALLY
+ CloseFile (f);
+ END;
+
+ FSource := Filename;
+ Result := TRUE;
+
+ FINALLY
+ SYSTEM.FileMode := OldFileMode;
+ END;
+END;
+
+
+FUNCTION TXmlParser.LoadFromBuffer (Buffer : TCharType) : BOOLEAN;
+ // Loads Document from another buffer
+ // Returns TRUE if successful
+ // The "Source" property becomes '' if successful
+BEGIN
+ Result := FALSE;
+ Clear;
+ FBufferSize := StrLen (Buffer) + 1;
+ TRY
+ GetMem (FBuffer, FBufferSize);
+ EXCEPT
+ Clear;
+ EXIT;
+ END;
+ StrCopy (FBuffer, Buffer);
+ FSource := '';
+ Result := TRUE;
+END;
+
+
+PROCEDURE TXmlParser.SetBuffer (Buffer : TCharType); // References another buffer
+BEGIN
+ Clear;
+ FBuffer := Buffer;
+ FBufferSize := 0;
+ FSource := '';
+END;
+
+
+//-----------------------------------------------------------------------------------------------
+// Scanning through the document
+//-----------------------------------------------------------------------------------------------
+
+PROCEDURE TXmlParser.StartScan;
+BEGIN
+ CurPartType := ptNone;
+ CurName := '';
+ CurContent := '';
+ CurStart := NIL;
+ CurFinal := NIL;
+ CurAttr.Clear;
+ EntityStack.Clear;
+END;
+
+
+FUNCTION TXmlParser.Scan : BOOLEAN;
+ // Scans the next Part
+ // Returns TRUE if a part could be found, FALSE if there is no part any more
+ //
+ // "IsDone" can be set to FALSE by AnalyzeText in order to go to the next part
+ // if there is no Content due to normalization
+VAR
+ IsDone : BOOLEAN;
+BEGIN
+ REPEAT
+ IsDone := TRUE;
+
+ // --- Start of next Part
+ IF CurStart = NIL THEN BEGIN
+ CurStart := DocBuffer;
+ IF StrLComp (CurStart, CUtf8BOM, 3) = 0 THEN BEGIN
+ INC (CurStart, 3); // Skip UTF-8 BOM
+ FEncoding := 'UTF-8';
+ END;
+ END
+ ELSE
+ CurStart := CurFinal+1;
+ CurFinal := CurStart;
+
+ // --- End of Document or Pop off a new part from the Entity stack?
+ IF CurStart^ = #0 THEN
+ CurStart := EntityStack.Pop;
+
+ // --- No Document or End Of Document: Terminate Scan
+ IF (CurStart = NIL) OR (CurStart^ = #0) THEN BEGIN
+ CurStart := StrEnd (DocBuffer);
+ CurFinal := CurStart-1;
+ EntityStack.Clear;
+ Result := FALSE;
+ EXIT;
+ END;
+
+ IF (StrLComp (CurStart, '');
+ IF CurFinal <> NIL
+ THEN INC (CurFinal)
+ ELSE CurFinal := StrEnd (CurStart)-1;
+ FCurEncoding := CurAttr.Value ('encoding');
+ IF FCurEncoding = '' THEN
+ FCurEncoding := 'UTF-8'; // Default XML Encoding is UTF-8
+ AnsiStrupper (TCharType (FCurEncoding));
+ CurPartType := ptXmlProlog;
+ CurName := '';
+ CurContent := '';
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeComment (Start : TCharType; VAR Final : TCharType);
+ // Analyze Comments
+BEGIN
+ Final := StrPos (Start+4, '-->');
+ IF Final = NIL
+ THEN Final := StrEnd (Start)-1
+ ELSE INC (Final, 2);
+ CurPartType := ptComment;
+END;
+
+
+PROCEDURE TXmlParser.AnalyzePI (Start : TCharType; VAR Final : TCharType);
+ // Analyze Processing Instructions (PI)
+VAR
+ F : TCharType;
+BEGIN
+ CurPartType := ptPI;
+ Final := StrPos (Start+2, '?>');
+ IF Final = NIL
+ THEN Final := StrEnd (Start)-1
+ ELSE INC (Final);
+ ExtractName (Start+2, CWhitespace + ['?', '>'], F);
+ SetStringSF (CurName, Start+2, F);
+ SetStringSF (CurContent, F+1, Final-2);
+ CurAttr.Analyze (F+1, F);
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeDtdc;
+ (* Analyze Document Type Declaration
+ doctypedecl ::= ''
+ markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment
+ PEReference ::= '%' Name ';'
+
+ elementdecl ::= ''
+ AttlistDecl ::= ''
+ EntityDecl ::= '' |
+ ''
+ NotationDecl ::= ''
+ PI ::= '' PITarget (S (Char* - (Char* '?>' Char* )))? '?>'
+ Comment ::= '' *)
+TYPE
+ TPhase = (phName, phDtd, phInternal, phFinishing);
+VAR
+ Phase : TPhase;
+ F : TCharType;
+ ExternalID : TExternalID;
+ ExternalDTD : TXmlParser;
+ DER : TDtdElementRec;
+BEGIN
+ DER.Start := CurStart;
+ EntityStack.Clear; // Clear stack for Parameter Entities
+ CurPartType := ptDtdc;
+
+ // --- Don't read DTDc twice
+ IF FDtdcFinal <> NIL THEN BEGIN
+ CurFinal := FDtdcFinal;
+ EXIT;
+ END;
+
+ // --- Scan DTDc
+ CurFinal := CurStart + 9; // First char after '' : BREAK;
+ ELSE IF NOT (CurFinal^ IN CWhitespace) THEN BEGIN
+ CASE Phase OF
+ phName : IF (CurFinal^ IN CNameStart) THEN BEGIN
+ ExtractName (CurFinal, CWhitespace + ['[', '>'], F);
+ SetStringSF (FRootName, CurFinal, F);
+ CurFinal := F;
+ Phase := phDtd;
+ END;
+ phDtd : IF (StrLComp (CurFinal, 'SYSTEM', 6) = 0) OR
+ (StrLComp (CurFinal, 'PUBLIC', 6) = 0) THEN BEGIN
+ ExternalID := TExternalID.Create (CurFinal);
+ ExternalDTD := NIL;
+ TRY
+ ExternalDTD := LoadExternalEntity (ExternalId.SystemId, ExternalID.PublicId, '');
+ F := StrPos (ExternalDtd.DocBuffer, ' NIL THEN
+ AnalyzeDtdElements (F, F);
+ CurFinal := ExternalID.Final;
+ FINALLY
+ ExternalDTD.Free;
+ ExternalID.Free;
+ END;
+ END;
+ ELSE BEGIN
+ DER.ElementType := deError;
+ DER.Pos := CurFinal;
+ DER.Final := CurFinal;
+ DtdElementFound (DER);
+ END;
+ END;
+
+ END;
+ END;
+ INC (CurFinal);
+ UNTIL FALSE;
+
+ CurPartType := ptDtdc;
+ CurName := '';
+ CurContent := '';
+
+ // -!- It is an error in the document if "EntityStack" is not empty now
+ IF EntityStack.Count > 0 THEN BEGIN
+ DER.ElementType := deError;
+ DER.Final := CurFinal;
+ DER.Pos := CurFinal;
+ DtdElementFound (DER);
+ END;
+
+ EntityStack.Clear; // Clear stack for General Entities
+ FDtdcFinal := CurFinal;
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeDtdElements (Start : TCharType; VAR Final : TCharType);
+ // Analyze the "Elements" of a DTD contained in the external or
+ // internal DTD subset.
+VAR
+ DER : TDtdElementRec;
+BEGIN
+ Final := Start;
+ REPEAT
+ CASE Final^ OF
+ '%' : BEGIN
+ PushPE (Final);
+ CONTINUE;
+ END;
+ #0 : IF EntityStack.Count = 0 THEN
+ BREAK
+ ELSE BEGIN
+ CurFinal := EntityStack.Pop;
+ CONTINUE;
+ END;
+ ']',
+ '>' : BREAK;
+ '<' : IF StrLComp (Final, ' NIL then begin
+ EntLen := PSemi - TCharType (Str) - i;
+ EntName := Copy (Str, i + 1, EntLen);
+ IF EntName = 'lt' THEN Repl := '<'
+ ELSE IF EntName = 'gt' THEN Repl := '>'
+ ELSE IF EntName = 'amp' THEN Repl := '&'
+ ELSE IF EntName = 'apos' THEN Repl := ''''
+ ELSE IF EntName = 'quot' THEN Repl := '"'
+ ELSE IF Copy (EntName, 1, 1) = '#' THEN BEGIN // Character Reference
+ IF EntName [2] = 'x'
+ THEN Repl := TranslateCharacter(StrToIntDef ('$' + Copy (string (EntName), 3, MaxInt), ord (CUnknownChar)))
+ ELSE Repl := TranslateCharacter(StrToIntDef ( Copy (string (EntName), 2, MaxInt), ord (CUnknownChar)));
+ END
+ ELSE BEGIN // Resolve General Entity Reference
+ EntityDef := TEntityDef (Entities.Node (EntName));
+ IF EntityDef = NIL THEN // Unknown Entity
+ Repl := EntName
+ ELSE BEGIN // Known Entity
+ IF EntityDef.Value <> '' then // Internal Entity
+ Repl := NormalizeAttrValStr (EntityDef.Value, FALSE)
+ ELSE BEGIN // External Entity
+ ExternalEntity := NIL;
+ TRY
+ ExternalEntity := LoadExternalEntity (EntityDef.SystemId, EntityDef.PublicId, EntityDef.NotationName);
+ ExternalEntity.Normalize := Self.Normalize;
+ Repl := ''; // External Entity can have a different encoding than parent entity
+ ExternalEntity.StartScan;
+ WHILE ExternalEntity.Scan DO
+ if (ExternalEntity.CurPartType = ptContent) or (ExternalEntity.CurPartType = ptCData) then
+ Repl := Repl + ExternalEntity.CurContent; // CurContent is already encoded
+ Repl := NormalizeAttrValStr (Repl, TRUE); // Recursively resolve Entity References
+ FINALLY
+ ExternalEntity.Free;
+ END;
+ END;
+ END
+ END;
+ end
+ else
+ EntLen := 0;
+ if IsEncoded
+ then Result := Result + Copy (Str, i - EncLen, EncLen) + Repl
+ else Result := Result + TranslateEncoding (Copy (Str, i - EncLen, EncLen)) + Repl;
+ EncLen := 0;
+ i := i + EntLen + 1;
+ end;
+ else inc (EncLen);
+ end;
+ inc (i);
+ end;
+ if IsEncoded
+ then Result := Result + Copy (Str, Len - EncLen + 1, EncLen)
+ else Result := Result + TranslateEncoding (Copy (Str, Len - EncLen + 1, EncLen));
+ end;
+
+ begin
+ if (Attr.AttrType in [atCData, atUnknown])
+ then Attr.Value := NormalizeAttrValStr (Attr.Value, FALSE)
+ else Attr.Value := TrimAndPackSpace (NormalizeAttrValStr (Attr.Value, FALSE));
+ end;
+
+VAR
+ S, F : TCharType;
+ Attr : TAttr;
+ ElemDef : TElemDef;
+ AttrDef : TAttrDef;
+ I : INTEGER;
+BEGIN
+ CurPartType := ptStartTag;
+ S := CurStart+1;
+ IF S^ = '/' THEN BEGIN
+ CurPartType := ptEndTag;
+ INC (S);
+ END;
+ ExtractName (S, CWhitespace + ['/'], F);
+ SetStringSF (CurName, S, F);
+ CurAttr.Analyze (F+1, CurFinal);
+ IF CurFinal^ = '/' THEN
+ CurPartType := ptEmptyTag;
+ CurFinal := StrScanE (CurFinal, '>');
+
+ // --- Set Default Attribute values for nonexistent attributes
+ IF (CurPartType = ptStartTag) OR (CurPartType = ptEmptyTag) THEN BEGIN
+ ElemDef := Elements.Node (CurName);
+ IF ElemDef <> NIL THEN BEGIN
+ FOR I := 0 TO ElemDef.Count-1 DO BEGIN
+ AttrDef := TAttrDef (ElemDef [I]);
+ Attr := TAttr (CurAttr.Node (AttrDef.Name));
+ IF (Attr = NIL) AND (AttrDef.Value <> '') THEN BEGIN
+ Attr := TAttr.Create (AttrDef.Name, AttrDef.Value);
+ Attr.ValueType := vtDefault;
+ CurAttr.Add (Attr);
+ END;
+ IF Attr <> NIL THEN BEGIN
+ CASE AttrDef.DefaultType OF
+ adDefault : ;
+ adRequired : ; // -!- It is an error in the document if "Attr.Value" is an empty string
+ adImplied : Attr.ValueType := vtImplied;
+ adFixed : BEGIN
+ Attr.ValueType := vtFixed;
+ Attr.Value := AttrDef.Value;
+ END;
+ END;
+ Attr.AttrType := AttrDef.AttrType;
+ END;
+ END;
+ END;
+
+ // --- Normalize Attribute Values
+ FOR I := 0 TO CurAttr.Count-1 DO
+ NormalizeAttrValue (TAttr (CurAttr [I]));
+ END;
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeCData;
+ // Analyze CDATA Sections
+BEGIN
+ CurPartType := ptCData;
+ CurFinal := StrPos (CurStart, CDEnd);
+ IF CurFinal = NIL THEN BEGIN
+ CurFinal := StrEnd (CurStart)-1;
+ CurContent := TranslateEncoding (TStringType(StrPas (CurStart+Length (CDStart))));
+ END
+ ELSE BEGIN
+ SetStringSF (CurContent, CurStart+Length (CDStart), CurFinal-1);
+ INC (CurFinal, Length (CDEnd)-1);
+ CurContent := TranslateEncoding (CurContent);
+ END;
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeText (VAR IsDone : BOOLEAN);
+ (* Analyzes Text Content between Tags. CurFinal will point to the last content character.
+ Content ends at a '<' character or at the end of the document.
+ Entity References and Character References are resolved.
+ If Normalize is TRUE, contiguous Whitespace Characters will be compressed to
+ one Space #x20 character, Whitespace at the beginning and end of content will
+ be trimmed off and content which is or becomes empty is not returned to
+ the application (in this case, "IsDone" is set to FALSE which causes the
+ Scan method to proceed directly to the next part. *)
+
+ PROCEDURE ProcessEntity;
+ (* Is called if there is an ampsersand '&' character found in the document.
+ IN "CurFinal" points to the ampersand
+ OUT "CurFinal" points to the first character after the semi-colon ';' *)
+ VAR
+ P : TCharType;
+ Name : TStringType;
+ EntityDef : TEntityDef;
+ ExternalEntity : TXmlParser;
+ BEGIN
+ P := StrScan (CurFinal, ';');
+ IF P <> NIL THEN BEGIN
+ SetStringSF (Name, CurFinal+1, P-1);
+
+ // Is it a Character Reference?
+ IF (CurFinal+1)^ = '#' THEN BEGIN
+ IF (CurFinal+2)^ = 'x'
+ THEN CurContent := CurContent + TranslateCharacter (StrToIntDef ('$' + Copy (string (Name), 3, MaxInt), 32))
+ ELSE CurContent := CurContent + TranslateCharacter (StrToIntDef ( Copy (string (Name), 2, MaxInt), 32));
+ CurFinal := P+1;
+ EXIT;
+ END
+
+ // Is it a Predefined Entity?
+ ELSE IF Name = 'lt' THEN BEGIN CurContent := CurContent + '<'; CurFinal := P+1; EXIT; END
+ ELSE IF Name = 'gt' THEN BEGIN CurContent := CurContent + '>'; CurFinal := P+1; EXIT; END
+ ELSE IF Name = 'amp' THEN BEGIN CurContent := CurContent + '&'; CurFinal := P+1; EXIT; END
+ ELSE IF Name = 'apos' THEN BEGIN CurContent := CurContent + ''''; CurFinal := P+1; EXIT; END
+ ELSE IF Name = 'quot' THEN BEGIN CurContent := CurContent + '"'; CurFinal := P+1; EXIT; END;
+
+ // Replace with Entity from DTD
+ EntityDef := TEntityDef (Entities.Node (Name));
+ IF EntityDef <> NIL THEN BEGIN
+ IF EntityDef.Value <> '' THEN BEGIN
+ EntityStack.Push (P+1);
+ CurFinal := TCharType (EntityDef.Value);
+ END
+ ELSE BEGIN
+ ExternalEntity := LoadExternalEntity (EntityDef.SystemId, EntityDef.PublicId, EntityDef.NotationName);
+ EntityStack.Push (ExternalEntity, P+1);
+ CurFinal := ExternalEntity.DocBuffer;
+ END;
+ END
+ ELSE BEGIN
+ CurContent := CurContent + Name;
+ CurFinal := P+1;
+ END;
+ END
+ ELSE BEGIN
+ INC (CurFinal);
+ END;
+ END;
+
+VAR
+ C : INTEGER;
+BEGIN
+ CurFinal := CurStart;
+ CurPartType := ptContent;
+ CurContent := '';
+ C := 0;
+ REPEAT
+ CASE CurFinal^ OF
+ '&' : BEGIN
+ CurContent := CurContent + TranslateEncoding (StrLPas (CurFinal-C, C));
+ C := 0;
+ ProcessEntity;
+ CONTINUE;
+ END;
+ #0 : BEGIN
+ IF EntityStack.Count = 0 THEN
+ BREAK
+ ELSE BEGIN
+ CurContent := CurContent + TranslateEncoding (StrLPas (CurFinal-C, C));
+ C := 0;
+ CurFinal := EntityStack.Pop;
+ CONTINUE;
+ END;
+ END;
+ '<' : BREAK;
+ ELSE INC (C);
+ END;
+ INC (CurFinal);
+ UNTIL FALSE;
+ CurContent := CurContent + TranslateEncoding (StrLPas (CurFinal-C, C));
+ DEC (CurFinal);
+
+ IF FNormalize THEN BEGIN
+ CurContent := ConvertWs (TrimWs (CurContent), TRUE);
+ IsDone := CurContent <> ''; // IsDone will only get FALSE if Normalize is TRUE
+ END;
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeElementDecl (Start : TCharType; VAR Final : TCharType);
+ (* Parse ' character
+ XmlSpec 3.2:
+ elementdecl ::= ''
+ contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
+ Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' |
+ '(' S? '#PCDATA' S? ')'
+ children ::= (choice | seq) ('?' | '*' | '+')?
+ choice ::= '(' S? cp ( S? '|' S? cp )* S? ')'
+ cp ::= (Name | choice | seq) ('?' | '*' | '+')?
+ seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'
+
+ More simply:
+ contentspec ::= EMPTY
+ ANY
+ '(#PCDATA)'
+ '(#PCDATA | A | B)*'
+ '(A, B, C)'
+ '(A | B | C)'
+ '(A?, B*, C+),
+ '(A, (B | C | D)* )' *)
+VAR
+ Element : TElemDef;
+ Elem2 : TElemDef;
+ F : TCharType;
+ DER : TDtdElementRec;
+BEGIN
+ Element := TElemDef.Create;
+ Final := Start + 9;
+ DER.Start := Start;
+ REPEAT
+ IF Final^ = '>' THEN BREAK;
+ IF (Final^ IN CNameStart) AND (Element.Name = '') THEN BEGIN
+ ExtractName (Final, CWhitespace, F);
+ SetStringSF (Element.Name, Final, F);
+ Final := F;
+ F := StrScan (Final+1, '>');
+ IF F = NIL THEN BEGIN
+ Element.Definition := TStringType (Final);
+ Final := StrEnd (Final);
+ BREAK;
+ END
+ ELSE BEGIN
+ SetStringSF (Element.Definition, Final+1, F-1);
+ Final := F;
+ BREAK;
+ END;
+ END;
+ INC (Final);
+ UNTIL FALSE;
+ Element.Definition := DelChars (Element.Definition, CWhitespace);
+ ReplaceParameterEntities (Element.Definition);
+ IF Element.Definition = 'EMPTY' THEN Element.ElemType := etEmpty
+ ELSE IF Element.Definition = 'ANY' THEN Element.ElemType := etAny
+ ELSE IF Copy (Element.Definition, 1, 8) = '(#PCDATA' THEN Element.ElemType := etMixed
+ ELSE IF Copy (Element.Definition, 1, 1) = '(' THEN Element.ElemType := etChildren
+ ELSE Element.ElemType := etAny;
+
+ Elem2 := Elements.Node (Element.Name);
+ IF Elem2 <> NIL THEN
+ Elements.Delete (Elements.IndexOf (Elem2));
+ Elements.Add (Element);
+ Final := StrScanE (Final, '>');
+ DER.ElementType := deElement;
+ DER.ElemDef := Element;
+ DER.Final := Final;
+ DtdElementFound (DER);
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeAttListDecl (Start : TCharType; VAR Final : TCharType);
+ (* Parse ' character
+ XmlSpec 3.3:
+ AttlistDecl ::= ''
+ AttDef ::= S Name S AttType S DefaultDecl
+ AttType ::= StringType | TokenizedType | EnumeratedType
+ StringType ::= 'CDATA'
+ TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'
+ EnumeratedType ::= NotationType | Enumeration
+ NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
+ Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
+ DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
+ AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'"
+ Examples:
+ *)
+TYPE
+ TPhase = (phElementName, phName, phType, phNotationContent, phDefault);
+VAR
+ Phase : TPhase;
+ F : TCharType;
+ ElementName : TStringType;
+ ElemDef : TElemDef;
+ AttrDef : TAttrDef;
+ AttrDef2 : TAttrDef;
+ Strg : TStringType;
+ DER : TDtdElementRec;
+BEGIN
+ Final := Start + 9; // The character after ' : BREAK;
+ ELSE CASE Phase OF
+ phElementName : BEGIN
+ ExtractName (Final, CWhitespace + CQuoteChar + ['#'], F);
+ SetStringSF (ElementName, Final, F);
+ Final := F;
+ ElemDef := Elements.Node (ElementName);
+ IF ElemDef = NIL THEN BEGIN
+ ElemDef := TElemDef.Create;
+ ElemDef.Name := ElementName;
+ ElemDef.Definition := 'ANY';
+ ElemDef.ElemType := etAny;
+ Elements.Add (ElemDef);
+ END;
+ Phase := phName;
+ END;
+ phName : BEGIN
+ AttrDef := TAttrDef.Create;
+ ExtractName (Final, CWhitespace + CQuoteChar + ['#'], F);
+ SetStringSF (AttrDef.Name, Final, F);
+ Final := F;
+ AttrDef2 := TAttrDef (ElemDef.Node (AttrDef.Name));
+ IF AttrDef2 <> NIL THEN
+ ElemDef.Delete (ElemDef.IndexOf (AttrDef2));
+ ElemDef.Add (AttrDef);
+ Phase := phType;
+ END;
+ phType : BEGIN
+ IF Final^ = '(' THEN BEGIN
+ F := StrScan (Final+1, ')');
+ IF F <> NIL
+ THEN SetStringSF (AttrDef.TypeDef, Final+1, F-1)
+ ELSE AttrDef.TypeDef := TStringType (Final+1);
+ AttrDef.TypeDef := DelChars (AttrDef.TypeDef, CWhitespace);
+ AttrDef.AttrType := atEnumeration;
+ ReplaceParameterEntities (AttrDef.TypeDef);
+ ReplaceCharacterEntities (AttrDef.TypeDef);
+ Phase := phDefault;
+ END
+ ELSE IF StrLComp (Final, 'NOTATION', 8) = 0 THEN BEGIN
+ INC (Final, 8);
+ AttrDef.AttrType := atNotation;
+ Phase := phNotationContent;
+ END
+ ELSE BEGIN
+ ExtractName (Final, CWhitespace+CQuoteChar+['#'], F);
+ SetStringSF (AttrDef.TypeDef, Final, F);
+ IF AttrDef.TypeDef = 'CDATA' THEN AttrDef.AttrType := atCData
+ ELSE IF AttrDef.TypeDef = 'ID' THEN AttrDef.AttrType := atId
+ ELSE IF AttrDef.TypeDef = 'IDREF' THEN AttrDef.AttrType := atIdRef
+ ELSE IF AttrDef.TypeDef = 'IDREFS' THEN AttrDef.AttrType := atIdRefs
+ ELSE IF AttrDef.TypeDef = 'ENTITY' THEN AttrDef.AttrType := atEntity
+ ELSE IF AttrDef.TypeDef = 'ENTITIES' THEN AttrDef.AttrType := atEntities
+ ELSE IF AttrDef.TypeDef = 'NMTOKEN' THEN AttrDef.AttrType := atNmToken
+ ELSE IF AttrDef.TypeDef = 'NMTOKENS' THEN AttrDef.AttrType := atNmTokens;
+ Phase := phDefault;
+ END
+ END;
+ phNotationContent : BEGIN
+ F := StrScan (Final, ')');
+ IF F <> NIL THEN
+ SetStringSF (AttrDef.Notations, Final+1, F-1)
+ ELSE BEGIN
+ AttrDef.Notations := TStringType (Final+1);
+ Final := StrEnd (Final);
+ END;
+ ReplaceParameterEntities (AttrDef.Notations);
+ AttrDef.Notations := DelChars (AttrDef.Notations, CWhitespace);
+ Phase := phDefault;
+ END;
+ phDefault : BEGIN
+ IF Final^ = '#' THEN BEGIN
+ ExtractName (Final, CWhiteSpace + CQuoteChar, F);
+ SetStringSF (Strg, Final, F);
+ Final := F;
+ ReplaceParameterEntities (Strg);
+ IF Strg = '#REQUIRED' THEN BEGIN AttrDef.DefaultType := adRequired; Phase := phName; END
+ ELSE IF Strg = '#IMPLIED' THEN BEGIN AttrDef.DefaultType := adImplied; Phase := phName; END
+ ELSE IF Strg = '#FIXED' THEN AttrDef.DefaultType := adFixed;
+ END
+ ELSE IF (Final^ IN CQuoteChar) THEN BEGIN
+ ExtractQuote (Final, AttrDef.Value, Final);
+ ReplaceParameterEntities (AttrDef.Value);
+ ReplaceCharacterEntities (AttrDef.Value);
+ Phase := phName;
+ END;
+ IF Phase = phName THEN BEGIN
+ AttrDef := NIL;
+ END;
+ END;
+
+ END;
+ END;
+ INC (Final);
+ UNTIL FALSE;
+
+ Final := StrScan (Final, '>');
+
+ DER.ElementType := deAttList;
+ DER.ElemDef := ElemDef;
+ DER.Final := Final;
+ DtdElementFound (DER);
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeEntityDecl (Start : TCharType; VAR Final : TCharType);
+ (* Parse ' character
+ XmlSpec 4.2:
+ EntityDecl ::= '' |
+ ''
+ EntityDef ::= EntityValue | (ExternalID NDataDecl?)
+ PEDef ::= EntityValue | ExternalID
+ NDataDecl ::= S 'NDATA' S Name
+ EntityValue ::= '"' ([^%&"] | PEReference | EntityRef | CharRef)* '"' |
+ "'" ([^%&'] | PEReference | EntityRef | CharRef)* "'"
+ PEReference ::= '%' Name ';'
+
+ Examples
+
+
+
+ ">
+
+
+ Dies ist ein Test-Absatz
">
+ *)
+TYPE
+ TPhase = (phName, phContent, phNData, phNotationName, phFinalGT);
+VAR
+ Phase : TPhase;
+ IsParamEntity : BOOLEAN;
+ F : TCharType;
+ ExternalID : TExternalID;
+ EntityDef : TEntityDef;
+ EntityDef2 : TEntityDef;
+ DER : TDtdElementRec;
+BEGIN
+ Final := Start + 8; // First char after ' : BREAK;
+ ELSE CASE Phase OF
+ phName : IF Final^ IN CNameStart THEN BEGIN
+ ExtractName (Final, CWhitespace + CQuoteChar, F);
+ SetStringSF (EntityDef.Name, Final, F);
+ Final := F;
+ Phase := phContent;
+ END;
+ phContent : IF Final^ IN CQuoteChar THEN BEGIN
+ ExtractQuote (Final, EntityDef.Value, Final);
+ Phase := phFinalGT;
+ END
+ ELSE IF (StrLComp (Final, 'SYSTEM', 6) = 0) OR
+ (StrLComp (Final, 'PUBLIC', 6) = 0) THEN BEGIN
+ ExternalID := TExternalID.Create (Final);
+ EntityDef.SystemId := ExternalID.SystemId;
+ EntityDef.PublicId := ExternalID.PublicId;
+ Final := ExternalID.Final;
+ Phase := phNData;
+ ExternalID.Free;
+ END;
+ phNData : IF StrLComp (Final, 'NDATA', 5) = 0 THEN BEGIN
+ INC (Final, 4);
+ Phase := phNotationName;
+ END;
+ phNotationName : IF Final^ IN CNameStart THEN BEGIN
+ ExtractName (Final, CWhitespace + ['>'], F);
+ SetStringSF (EntityDef.NotationName, Final, F);
+ Final := F;
+ Phase := phFinalGT;
+ END;
+ phFinalGT : ; // -!- There is an error in the document if this branch is called
+ END;
+ END;
+ INC (Final);
+ UNTIL FALSE;
+ IF IsParamEntity THEN BEGIN
+ EntityDef2 := TEntityDef (ParEntities.Node (EntityDef.Name));
+ IF EntityDef2 <> NIL THEN
+ ParEntities.Delete (ParEntities.IndexOf (EntityDef2));
+ ParEntities.Add (EntityDef);
+ ReplaceCharacterEntities (EntityDef.Value);
+ END
+ ELSE BEGIN
+ EntityDef2 := TEntityDef (Entities.Node (EntityDef.Name));
+ IF EntityDef2 <> NIL THEN
+ Entities.Delete (Entities.IndexOf (EntityDef2));
+ Entities.Add (EntityDef);
+ ReplaceParameterEntities (EntityDef.Value); // Create replacement texts (see XmlSpec 4.5)
+ ReplaceCharacterEntities (EntityDef.Value);
+ END;
+ Final := StrScanE (Final, '>');
+
+ DER.ElementType := deEntity;
+ DER.EntityDef := EntityDef;
+ DER.Final := Final;
+ DtdElementFound (DER);
+END;
+
+
+PROCEDURE TXmlParser.AnalyzeNotationDecl (Start : TCharType; VAR Final : TCharType);
+ // Parse ' character
+ // XmlSpec 4.7: NotationDecl ::= ''
+TYPE
+ TPhase = (phName, phExtId, phEnd);
+VAR
+ ExternalID : TExternalID;
+ Phase : TPhase;
+ F : TCharType;
+ NotationDef : TNotationDef;
+ DER : TDtdElementRec;
+BEGIN
+ Final := Start + 10; // Character after ',
+ #0 : BREAK;
+ ELSE CASE Phase OF
+ phName : BEGIN
+ ExtractName (Final, CWhitespace + ['>'], F);
+ SetStringSF (NotationDef.Name, Final, F);
+ Final := F;
+ Phase := phExtId;
+ END;
+ phExtId : BEGIN
+ ExternalID := TExternalID.Create (Final);
+ NotationDef.Value := ExternalID.SystemId;
+ NotationDef.PublicId := ExternalID.PublicId;
+ Final := ExternalId.Final;
+ ExternalId.Free;
+ Phase := phEnd;
+ END;
+ phEnd : ; // -!- There is an error in the document if this branch is called
+ END;
+ END;
+ INC (Final);
+ UNTIL FALSE;
+ Notations.Add (NotationDef);
+ Final := StrScanE (Final, '>');
+
+ DER.ElementType := deNotation;
+ DER.NotationDef := NotationDef;
+ DER.Final := Final;
+ DtdElementFound (DER);
+END;
+
+
+PROCEDURE TXmlParser.PushPE (VAR Start : TCharType);
+ (* If there is a parameter entity reference found in the data stream,
+ the current position will be pushed to the entity stack.
+ Start: IN Pointer to the '%' character starting the PE reference
+ OUT Pointer to first character of PE replacement text *)
+VAR
+ P : TCharType;
+ EntityDef : TEntityDef;
+BEGIN
+ P := StrScan (Start, ';');
+ IF P <> NIL THEN BEGIN
+ EntityDef := TEntityDef (ParEntities.Node (StrSFPas (Start+1, P-1)));
+ IF EntityDef <> NIL THEN BEGIN
+ EntityStack.Push (P+1);
+ Start := TCharType (EntityDef.Value);
+ END
+ ELSE
+ Start := P+1;
+ END;
+END;
+
+
+PROCEDURE TXmlParser.ReplaceCharacterEntities (VAR Str : TStringType);
+ // Replaces all Character References in the String
+VAR
+ Start : INTEGER;
+ PAmp : TCharType;
+ PSemi : TCharType;
+ PosAmp : INTEGER;
+ Len : INTEGER; // Length of complete Character Reference
+ Repl : TStringType; // Replacement Text
+BEGIN
+ IF Str = '' THEN EXIT;
+ Start := 1;
+ REPEAT
+ PAmp := StrPos (TCharType (Str) + Start-1, '');
+ IF PAmp = NIL THEN BREAK;
+ PSemi := StrScan (PAmp + 3, ';');
+ IF PSemi = NIL THEN BREAK;
+ PosAmp := PAmp - TCharType (Str) + 1;
+ Len := PSemi - PAmp + 1;
+ IF (PAmp + 2)^ = 'x'
+ THEN Repl := TranslateCharacter (StrToIntDef ('$' + Copy (string (Str), PosAmp + 3, Len - 4), 32))
+ ELSE Repl := TranslateCharacter (StrToIntDef ( Copy (string (Str), PosAmp + 2, Len - 3), 32));
+ Delete (Str, PosAmp, Len);
+ Insert (Repl, Str, PosAmp);
+ Start := PosAmp + Length (Repl);
+ UNTIL FALSE;
+END;
+
+
+PROCEDURE TXmlParser.ReplaceParameterEntities (VAR Str : TStringType);
+ // Recursively replaces all Parameter Entity References in the String
+ PROCEDURE ReplaceEntities (VAR Str : TStringType);
+ VAR
+ Start : INTEGER;
+ PAmp : TCharType;
+ PSemi : TCharType;
+ PosAmp : INTEGER;
+ Len : INTEGER;
+ Entity : TEntityDef;
+ Repl : TStringType; // Replacement
+ BEGIN
+ IF Str = '' THEN EXIT;
+ Start := 1;
+ REPEAT
+ PAmp := StrPos (TCharType (Str)+Start-1, '%');
+ IF PAmp = NIL THEN BREAK;
+ PSemi := StrScan (PAmp+2, ';');
+ IF PSemi = NIL THEN BREAK;
+ PosAmp := PAmp - TCharType (Str) + 1;
+ Len := PSemi-PAmp+1;
+ Entity := TEntityDef (ParEntities.Node (Copy (Str, PosAmp+1, Len-2)));
+ IF Entity <> NIL THEN BEGIN
+ Repl := Entity.Value;
+ ReplaceEntities (Repl); // Recursion
+ END
+ ELSE
+ Repl := Copy (Str, PosAmp, Len);
+ Delete (Str, PosAmp, Len);
+ Insert (Repl, Str, PosAmp);
+ Start := PosAmp + Length (Repl);
+ UNTIL FALSE;
+ END;
+BEGIN
+ ReplaceEntities (Str);
+END;
+
+
+FUNCTION TXmlParser.LoadExternalEntity (SystemId, PublicId, Notation : TStringType) : TXmlParser;
+ // This will be called whenever there is a Parsed External Entity or
+ // the DTD External Subset has to be loaded.
+ // It must create a TXmlParser instance and load the desired Entity.
+ // This instance of LoadExternalEntity assumes that "SystemId" is a valid
+ // file name (relative to the Document source) and loads this file using
+ // the LoadFromFile method.
+VAR
+ Filename : string;
+BEGIN
+ // --- Convert System ID to complete filename
+ Filename := StringReplace (string (SystemId), '/', '\', [rfReplaceAll]);
+ IF Copy (FSource, 1, 1) <> '<' THEN
+ IF (Copy (Filename, 1, 2) = '\\') OR (Copy (Filename, 2, 1) = ':') THEN
+ // Already has an absolute Path
+ ELSE BEGIN
+ Filename := ExtractFilePath (FSource) + Filename;
+ END;
+
+ // --- Load the File
+ Result := TXmlParser.Create;
+ Result.LoadFromFile (Filename);
+END;
+
+
+FUNCTION TXmlParser.TranslateEncoding (CONST Source : TStringType) : TStringType;
+ // The member variable "CurEncoding" always holds the name of the current
+ // encoding, e.g. 'UTF-8' or 'ISO-8859-1' (always uppercase).
+ // This virtual method "TranslateEncoding" is responsible for translating
+ // the content passed in the "Source" parameter to the target encoding which
+ // is expected by the application.
+ // This instance of "TranlateEncoding" assumes that the Application expects
+ // Windows ANSI (windows-1252) strings. It is able to transform UTF-8 or ISO-8859-1
+ // encodings.
+ // Override this function when you want your application to understand other
+ // source encodings or create other target encodings.
+BEGIN
+ Result := Source;//Utf8ToAnsi (Source)
+END;
+
+FUNCTION TXmlParser.TranslateCharacter (CONST UnicodeValue : INTEGER;
+ CONST UnknownChar : TStringType = CUnknownChar) : TStringType;
+ // Corresponding to TranslateEncoding, the task of TranslateCharacter is
+ // to translate a given Character value to the representation in the target charset.
+ // This instance of TranslateCharacter assumes that the application expects
+ // Windows ANSI (windows-1252) strings. All unknown characters will be transformed
+ // to UnknownChar
+var
+ I : integer;
+begin
+ if (UnicodeValue <= 255) then begin
+ Result := TCharType(UnicodeValue);
+ exit;
+ end;
+ Result := CUnknownChar;
+END;
+
+
+procedure TXmlParser.DtdElementFound (DtdElementRec : TDtdElementRec);
+ // This method is called for every element which is found in the DTD
+ // declaration. The variant record TDtdElementRec is passed which
+ // holds informations about the element.
+ // You can override this function to handle DTD declarations.
+ // Note that when you parse the same document instance a second time,
+ // the DTD will not get parsed again.
+BEGIN
+END;
+
+
+FUNCTION TXmlParser.GetDocBuffer: TCharType;
+ // Returns FBuffer or a pointer to a NUL char if Buffer is empty
+BEGIN
+ IF FBuffer = NIL
+ THEN Result := #0
+ ELSE Result := FBuffer;
+END;
+
+
+(*$IFNDEF HAS_CONTNRS_UNIT
+===============================================================================================
+TObjectList
+===============================================================================================
+*)
+
+DESTRUCTOR TObjectList.Destroy;
+BEGIN
+ Clear;
+ SetCapacity(0);
+ INHERITED Destroy;
+END;
+
+
+PROCEDURE TObjectList.Delete (Index : INTEGER);
+BEGIN
+ IF (Index < 0) OR (Index >= Count) THEN EXIT;
+ TObject (Items [Index]).Free;
+ INHERITED Delete (Index);
+END;
+
+
+PROCEDURE TObjectList.Clear;
+BEGIN
+ WHILE Count > 0 DO
+ Delete (Count-1);
+END;
+
+(*$ENDIF *)
+
+(*
+===============================================================================================
+TNvpNode
+--------
+Node base class for the TNvpList
+===============================================================================================
+*)
+
+CONSTRUCTOR TNvpNode.Create (TheName, TheValue : TStringType);
+BEGIN
+ INHERITED Create;
+ Name := TheName;
+ Value := TheValue;
+END;
+
+
+(*
+===============================================================================================
+TNvpList
+--------
+A generic List of Name-Value Pairs, based on the TObjectList introduced in Delphi 5
+===============================================================================================
+*)
+
+PROCEDURE TNvpList.Add (Node : TNvpNode);
+VAR
+ I : INTEGER;
+BEGIN
+ FOR I := Count-1 DOWNTO 0 DO
+ IF Node.Name > TNvpNode (Items [I]).Name THEN BEGIN
+ Insert (I+1, Node);
+ EXIT;
+ END;
+ Insert (0, Node);
+END;
+
+
+
+FUNCTION TNvpList.Node (Name : TStringType) : TNvpNode;
+ // Binary search for Node
+VAR
+ L, H : INTEGER; // Low, High Limit
+ T, C : INTEGER; // Test Index, Comparison result
+ Last : INTEGER; // Last Test Index
+BEGIN
+ IF Count=0 THEN BEGIN
+ Result := NIL;
+ EXIT;
+ END;
+
+ L := 0;
+ H := Count;
+ Last := -1;
+ REPEAT
+ T := (L+H) DIV 2;
+ IF T=Last THEN BREAK;
+ Result := TNvpNode (Items [T]);
+ C := CompareStr (string (Result.Name), string (Name));
+ IF C = 0 THEN EXIT
+ ELSE IF C < 0 THEN L := T
+ ELSE H := T;
+ Last := T;
+ UNTIL FALSE;
+ Result := NIL;
+END;
+
+
+FUNCTION TNvpList.Node (Index : INTEGER) : TNvpNode;
+BEGIN
+ IF (Index < 0) OR (Index >= Count)
+ THEN Result := NIL
+ ELSE Result := TNvpNode (Items [Index]);
+END;
+
+
+FUNCTION TNvpList.Value (Name : TStringType) : TStringType;
+VAR
+ Nvp : TNvpNode;
+BEGIN
+ Nvp := TNvpNode (Node (Name));
+ IF Nvp <> NIL
+ THEN Result := Nvp.Value
+ ELSE Result := '';
+END;
+
+
+FUNCTION TNvpList.Value (Index : INTEGER) : TStringType;
+BEGIN
+ IF (Index < 0) OR (Index >= Count)
+ THEN Result := ''
+ ELSE Result := TNvpNode (Items [Index]).Value;
+END;
+
+
+FUNCTION TNvpList.Name (Index : INTEGER) : TStringType;
+BEGIN
+ IF (Index < 0) OR (Index >= Count)
+ THEN Result := ''
+ ELSE Result := TNvpNode (Items [Index]).Name;
+END;
+
+
+(*
+===============================================================================================
+TAttrList
+List of Attributes. The "Analyze" method extracts the Attributes from the given Buffer.
+Is used for extraction of Attributes in Start-Tags, Empty-Element Tags and the "pseudo"
+attributes in XML Prologs, Text Declarations and PIs.
+===============================================================================================
+*)
+
+PROCEDURE TAttrList.Analyze (Start : TCharType; VAR Final : TCharType);
+ // Analyze the Buffer for Attribute=Name pairs.
+ // Terminates when there is a character which is not IN CNameStart
+ // (e.g. '?>' or '>' or '/>')
+TYPE
+ TPhase = (phName, phEq, phValue);
+VAR
+ Phase : TPhase;
+ F : TCharType;
+ Name : TStringType;
+ Value : TStringType;
+ Attr : TAttr;
+BEGIN
+ Clear;
+ Phase := phName;
+ Final := Start;
+ REPEAT
+ IF (Final^ = #0) OR (Final^ = '>') THEN BREAK;
+ IF NOT (Final^ IN CWhitespace) THEN
+ CASE Phase OF
+ phName : BEGIN
+ IF NOT (Final^ IN CNameStart) THEN BREAK;
+ ExtractName (Final, CWhitespace + ['=', '/'], F);
+ SetStringSF (Name, Final, F);
+ Final := F;
+ Phase := phEq;
+ END;
+ phEq : BEGIN
+ IF Final^ = '=' THEN
+ Phase := phValue
+ END;
+ phValue : BEGIN
+ IF Final^ IN CQuoteChar THEN BEGIN
+ ExtractQuote (Final, Value, F);
+ Attr := TAttr.Create;
+ Attr.Name := Name;
+ Attr.Value := Value;
+ Attr.ValueType := vtNormal;
+ Add (Attr);
+ Final := F;
+ Phase := phName;
+ END;
+ END;
+ END;
+ INC (Final);
+ UNTIL FALSE;
+END;
+
+
+(*
+===============================================================================================
+TElemList
+List of TElemDef nodes.
+===============================================================================================
+*)
+
+FUNCTION TElemList.Node (Name : TStringType) : TElemDef;
+ // Binary search for the Node with the given Name
+VAR
+ L, H : INTEGER; // Low, High Limit
+ T, C : INTEGER; // Test Index, Comparison result
+ Last : INTEGER; // Last Test Index
+BEGIN
+ IF Count=0 THEN BEGIN
+ Result := NIL;
+ EXIT;
+ END;
+
+ L := 0;
+ H := Count;
+ Last := -1;
+ REPEAT
+ T := (L+H) DIV 2;
+ IF T=Last THEN BREAK;
+ Result := TElemDef (Items [T]);
+ C := CompareStr (string (Result.Name), string (Name));
+ IF C = 0 THEN EXIT
+ ELSE IF C < 0 THEN L := T
+ ELSE H := T;
+ Last := T;
+ UNTIL FALSE;
+ Result := NIL;
+END;
+
+
+PROCEDURE TElemList.Add (Node : TElemDef);
+VAR
+ I : INTEGER;
+BEGIN
+ FOR I := Count-1 DOWNTO 0 DO
+ IF Node.Name > TElemDef (Items [I]).Name THEN BEGIN
+ Insert (I+1, Node);
+ EXIT;
+ END;
+ Insert (0, Node);
+END;
+
+
+(*
+===============================================================================================
+TScannerXmlParser
+A TXmlParser descendant for the TCustomXmlScanner component
+===============================================================================================
+*)
+
+TYPE
+ TScannerXmlParser = CLASS (TXmlParser)
+ Scanner : TCustomXmlScanner;
+ CONSTRUCTOR Create (TheScanner : TCustomXmlScanner);
+ FUNCTION LoadExternalEntity (SystemId, PublicId,
+ Notation : TStringType) : TXmlParser; OVERRIDE;
+ FUNCTION TranslateEncoding (CONST Source : TStringType) : TStringType; OVERRIDE;
+ FUNCTION TranslateCharacter (CONST UnicodeValue : INTEGER;
+ CONST UnknownChar : TStringType = CUnknownChar) : TStringType; OVERRIDE;
+ PROCEDURE DtdElementFound (DtdElementRec : TDtdElementRec); OVERRIDE;
+ END;
+
+CONSTRUCTOR TScannerXmlParser.Create (TheScanner : TCustomXmlScanner);
+BEGIN
+ INHERITED Create;
+ Scanner := TheScanner;
+END;
+
+
+FUNCTION TScannerXmlParser.LoadExternalEntity (SystemId, PublicId, Notation : TStringType) : TXmlParser;
+BEGIN
+ IF Assigned (Scanner.FOnLoadExternal)
+ THEN Scanner.FOnLoadExternal (Scanner, string (SystemId), string (PublicId), string (Notation), Result)
+ ELSE Result := INHERITED LoadExternalEntity (SystemId, PublicId, Notation);
+END;
+
+
+FUNCTION TScannerXmlParser.TranslateEncoding (CONST Source : TStringType) : TStringType;
+BEGIN
+ IF Assigned (Scanner.FOnTranslateEncoding)
+ THEN Result := TStringType (Scanner.FOnTranslateEncoding (Scanner, string (CurEncoding), string (Source)))
+ ELSE Result := TStringType (INHERITED TranslateEncoding (Source));
+END;
+
+
+FUNCTION TScannerXmlParser.TranslateCharacter (CONST UnicodeValue : INTEGER;
+ CONST UnknownChar : TStringType = CUnknownChar) : TStringType;
+BEGIN
+ IF Assigned (Scanner.FOnTranslateCharacter)
+ THEN Result := TStringType (Scanner.FOnTranslateCharacter (Scanner, UnicodeValue))
+ ELSE Result := TStringType (INHERITED TranslateCharacter (UnicodeValue, UnknownChar));
+END;
+
+
+PROCEDURE TScannerXmlParser.DtdElementFound (DtdElementRec : TDtdElementRec);
+BEGIN
+ WITH DtdElementRec DO
+ CASE ElementType OF
+ deElement : Scanner.WhenElement (ElemDef);
+ deAttList : Scanner.WhenAttList (ElemDef);
+ deEntity : Scanner.WhenEntity (EntityDef);
+ deNotation : Scanner.WhenNotation (NotationDef);
+ dePI : Scanner.WhenPI (string (Target), string (Content), AttrList);
+ deComment : Scanner.WhenComment (string (StrSFPas (Start, Final)));
+ deError : Scanner.WhenDtdError (Pos);
+ END;
+END;
+
+
+(*
+===============================================================================================
+TCustomXmlScanner
+===============================================================================================
+*)
+
+CONSTRUCTOR TCustomXmlScanner.Create (AOwner: TComponent);
+BEGIN
+ INHERITED;
+ FXmlParser := TScannerXmlParser.Create (Self);
+END;
+
+
+DESTRUCTOR TCustomXmlScanner.Destroy;
+BEGIN
+ FXmlParser.Free;
+ INHERITED;
+END;
+
+
+PROCEDURE TCustomXmlScanner.LoadFromFile (Filename : TFilename);
+ // Load XML Document from file
+BEGIN
+ FXmlParser.LoadFromFile (Filename);
+END;
+
+
+PROCEDURE TCustomXmlScanner.LoadFromBuffer (Buffer : TCharType);
+ // Load XML Document from buffer
+BEGIN
+ FXmlParser.LoadFromBuffer (Buffer);
+END;
+
+
+PROCEDURE TCustomXmlScanner.SetBuffer (Buffer : TCharType);
+ // Refer to Buffer
+BEGIN
+ FXmlParser.SetBuffer (Buffer);
+END;
+
+
+FUNCTION TCustomXmlScanner.GetFilename : TFilename;
+BEGIN
+ Result := FXmlParser.Source;
+END;
+
+
+FUNCTION TCustomXmlScanner.GetNormalize : BOOLEAN;
+BEGIN
+ Result := FXmlParser.Normalize;
+END;
+
+
+PROCEDURE TCustomXmlScanner.SetNormalize (Value : BOOLEAN);
+BEGIN
+ FXmlParser.Normalize := Value;
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenXmlProlog(XmlVersion, Encoding: String; Standalone : BOOLEAN);
+ // Is called when the parser has parsed the xml ?> declaration of the prolog
+BEGIN
+ IF Assigned (FOnXmlProlog) THEN FOnXmlProlog (Self, XmlVersion, Encoding, Standalone);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenComment (Comment : String);
+ // Is called when the parser has parsed a
+BEGIN
+ IF Assigned (FOnComment) THEN FOnComment (Self, Comment);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenPI (Target, Content: String; Attributes : TAttrList);
+ // Is called when the parser has parsed a
+BEGIN
+ IF Assigned (FOnPI) THEN FOnPI (Self, Target, Content, Attributes);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenDtdRead (RootElementName : String);
+ // Is called when the parser has completely parsed the DTD
+BEGIN
+ IF Assigned (FOnDtdRead) THEN FOnDtdRead (Self, RootElementName);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenStartTag (TagName : String; Attributes : TAttrList);
+ // Is called when the parser has parsed a start tag like
+BEGIN
+ IF Assigned (FOnStartTag) THEN FOnStartTag (Self, TagName, Attributes);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenEmptyTag (TagName : String; Attributes : TAttrList);
+ // Is called when the parser has parsed an Empty Element Tag like
+BEGIN
+ IF Assigned (FOnEmptyTag) THEN FOnEmptyTag (Self, TagName, Attributes);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenEndTag (TagName : String);
+ // Is called when the parser has parsed an End Tag like
+BEGIN
+ IF Assigned (FOnEndTag) THEN FOnEndTag (Self, TagName);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenContent (Content : String);
+ // Is called when the parser has parsed an element's text content
+BEGIN
+ IF Assigned (FOnContent) THEN FOnContent (Self, Content);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenCData (Content : String);
+ // Is called when the parser has parsed a CDATA section
+BEGIN
+ IF Assigned (FOnCData) THEN FOnCData (Self, Content);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenElement (ElemDef : TElemDef);
+ // Is called when the parser has parsed an definition
+ // inside the DTD
+BEGIN
+ IF Assigned (FOnElement) THEN FOnElement (Self, ElemDef);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenAttList (ElemDef : TElemDef);
+ // Is called when the parser has parsed an definition
+ // inside the DTD
+BEGIN
+ IF Assigned (FOnAttList) THEN FOnAttList (Self, ElemDef);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenEntity (EntityDef : TEntityDef);
+ // Is called when the parser has parsed an definition
+ // inside the DTD
+BEGIN
+ IF Assigned (FOnEntity) THEN FOnEntity (Self, EntityDef);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenNotation (NotationDef : TNotationDef);
+ // Is called when the parser has parsed a definition
+ // inside the DTD
+BEGIN
+ IF Assigned (FOnNotation) THEN FOnNotation (Self, NotationDef);
+END;
+
+
+PROCEDURE TCustomXmlScanner.WhenDtdError (ErrorPos : TCharType);
+ // Is called when the parser has found an Error in the DTD
+BEGIN
+ IF Assigned (FOnDtdError) THEN FOnDtdError (Self, ErrorPos);
+END;
+
+
+PROCEDURE TCustomXmlScanner.Execute;
+ // Perform scanning
+ // Scanning is done synchronously, i.e. you can expect events to be triggered
+ // in the order of the XML data stream. Execute will finish when the whole XML
+ // document has been scanned or when the StopParser property has been set to TRUE.
+BEGIN
+ FStopParser := FALSE;
+ FXmlParser.StartScan;
+ WHILE FXmlParser.Scan AND (NOT FStopParser) DO
+ CASE FXmlParser.CurPartType OF
+ ptNone : ;
+ ptXmlProlog : WhenXmlProlog (string (FXmlParser.XmlVersion), string (FXmlParser.Encoding), FXmlParser.Standalone);
+ ptComment : WhenComment (string (StrSFPas (FXmlParser.CurStart, FXmlParser.CurFinal)));
+ ptPI : WhenPI (string (FXmlParser.CurName), string (FXmlParser.CurContent), FXmlParser.CurAttr);
+ ptDtdc : WhenDtdRead (string (FXmlParser.RootName));
+ ptStartTag : WhenStartTag (string (FXmlParser.CurName), FXmlParser.CurAttr);
+ ptEmptyTag : WhenEmptyTag (string (FXmlParser.CurName), FXmlParser.CurAttr);
+ ptEndTag : WhenEndTag (string (FXmlParser.CurName));
+ ptContent : WhenContent (string (FXmlParser.CurContent));
+ ptCData : WhenCData (string (FXmlParser.CurContent));
+ END;
+END;
+
+
+END.
diff --git a/System/RegexHelper.pas b/System/RegexHelper.pas
new file mode 100644
index 0000000..c3279cd
--- /dev/null
+++ b/System/RegexHelper.pas
@@ -0,0 +1,90 @@
+unit RegexHelper;
+
+interface
+ uses Global, SysUtils, StrUtils, RegularExpressionsCore;
+
+ type T2Int = record
+ i1, i2: integer;
+ end;
+ type T2Float = record
+ f1, f2: extended;
+ end;
+ type TRgb = record
+ r, g, b: integer;
+ end;
+
+function GetStringPart(text, expression: string; group: integer; def: string): string;
+function GetBoolPart(text, expression: string; group: integer; def: boolean): boolean;
+function GetIntPart(text, expression: string; group: integer; def: integer): integer;
+function GetFloatPart(text, expression: string; group: integer; def: extended): extended;
+function Get2IntPart(text, expression: string; group: integer; def: integer): T2Int;
+function Get2FloatPart(text, expression: string; group: integer; def: extended): T2Float;
+function GetRGBPart(text, expression: string; group: integer; def: integer): TRGB;
+
+implementation
+
+(* ***************************** Extract functions ******************************* *)
+function GetStringPart(text, expression: string; group: integer; def: string): string;
+var Regex: TPerlRegEx;
+begin
+ Regex := TPerlRegEx.Create;
+ Regex.RegEx := expression;
+ Regex.Options := [preSingleLine, preCaseless];
+ Regex.Subject := text;
+
+ if Regex.Match and (Regex.GroupCount >= group) then
+ Result := String(Regex.Groups[group])
+ else Result := def;
+
+ Regex.Free;
+end;
+function GetBoolPart(text, expression: string; group: integer; def: boolean): boolean;
+begin
+ Result := GetFloatPart(text, expression, group, StrToFloat(IfThen(def, '1', '0'))) <> 0;
+end;
+function GetIntPart(text, expression: string; group: integer; def: integer): integer;
+var str: string;
+begin
+ str := GetStringPart(text, expression, group, '');
+ Result := StrToIntDef(str, def);
+end;
+function GetFloatPart(text, expression: string; group: integer; def: extended): extended;
+var str: string;
+begin
+ str := GetStringPart(text, expression, group, '');
+ Result := StrToFloatDef(str, def);
+end;
+function Get2IntPart(text, expression: string; group: integer; def: integer): T2Int;
+const expr : string = '(\d+)\s+(\d+)';
+var str, s1, s2: string;
+begin
+ str := GetStringPart(text, expression, group, IntToStr(def) + ' ' + IntToStr(def));
+ s1 := GetStringPart(str, expr, 1, IntToStr(def));
+ s2 := GetStringPart(str, expr, 2, IntToStr(def));
+ Result.i1 := StrToIntDef(s1, def);
+ Result.i2 := StrToIntDef(s2, def);
+end;
+function Get2FloatPart(text, expression: string; group: integer; def: extended): T2Float;
+const expr : string = '([\d.eE+-]+)\s+([\d.eE+-]+)';
+var str, s1, s2: string;
+begin
+ str := GetStringPart(text, expression, group, FloatToStr(def) + ' ' + FloatToStr(def));
+ s1 := GetStringPart(str, expr, 1, FloatToStr(def));
+ s2 := GetStringPart(str, expr, 2, FloatToStr(def));
+ Result.f1 := StrToFloatDef(s1, def);
+ Result.f2 := StrToFloatDef(s2, def);
+end;
+function GetRGBPart(text, expression: string; group: integer; def: integer): TRGB;
+const expr : string = '(\d+)\s+(\d+)\s+(\d+)';
+var str, s1, s2, s3: string;
+begin
+ str := GetStringPart(text, expression, group, IntToStr(def) + ' ' + IntToStr(def) + ' ' + IntToStr(def));
+ s1 := GetStringPart(str, expr, 1, IntToStr(def));
+ s2 := GetStringPart(str, expr, 2, IntToStr(def));
+ s3 := GetStringPart(str, expr, 3, IntToStr(def));
+ Result.r := StrToIntDef(s1, def);
+ Result.g := StrToIntDef(s2, def);
+ Result.b := StrToIntDef(s3, def);
+end;
+
+end.
diff --git a/System/sdStringTable.pas b/System/sdStringTable.pas
new file mode 100644
index 0000000..1b31cca
--- /dev/null
+++ b/System/sdStringTable.pas
@@ -0,0 +1,633 @@
+{ unit sdStringTable
+
+ Author: Nils Haeck M.Sc. (n.haeck@simdesign.nl)
+ Original Date: 28 May 2007
+ Version: 1.1
+ Copyright (c) 2007 - 2010 Simdesign BV
+
+ It is NOT allowed under ANY circumstances to publish or copy this code
+ without accepting the license conditions in accompanying LICENSE.txt
+ first!
+
+ This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
+ ANY KIND, either express or implied.
+
+ Please visit http://www.simdesign.nl/xml.html for more information.
+}
+unit sdStringTable;
+
+interface
+
+{$i NativeXml.inc}
+
+uses
+ Classes, SysUtils, Contnrs;
+
+type
+
+ // A record describing a string by its first position and length (Count)
+ TsdStringRec = record
+ First: Pbyte;
+ Count: integer;
+ end;
+
+ // A string reference item used in string reference lists (do not use directly)
+ TsdRefString = class
+ private
+ FID: integer;
+ FFrequency: integer;
+ FFirst: Pbyte;
+ FCharCount: integer;
+ protected
+ procedure SetString(const SR: TsdStringRec);
+ function CompareToSR(const SR: TsdStringRec): integer;
+ function StringRec: TsdStringRec;
+ public
+ destructor Destroy; override;
+ function AsString: UTF8String;
+ property CharCount: integer read FCharCount;
+ property Frequency: integer read FFrequency;
+ end;
+
+ // A list of string reference items (do not use directly)
+ TsdRefStringList = class(TObjectList)
+ private
+ function GetItems(Index: integer): TsdRefString;
+ protected
+ // Assumes list is sorted by StringID
+ function IndexOfID(AID: integer; var Index: integer): boolean;
+ // Assumes list is sorted by string rec
+ function IndexOfSR(const AStringRec: TsdStringRec; var Index: integer): boolean;
+ public
+ property Items[Index: integer]: TsdRefString read GetItems; default;
+ end;
+
+ // A string table, holding a collection of unique strings, sorted in 2 ways
+ // for fast access. Strings can be added with AddString or AddStringRec,
+ // and should be updated with SetString. When a string is added or updated,
+ // an ID is returned which the application can use to retrieve the string,
+ // using GetString.
+ TsdStringTable = class(TPersistent)
+ private
+ FByID: TsdRefStringList;
+ FBySR: TsdRefStringList;
+ protected
+ procedure DecFrequency(AItem: TsdRefString; ByIdIndex: integer);
+ function NextUniqueID: integer;
+ public
+ constructor Create;
+ destructor Destroy; override;
+ procedure Clear;
+ // Add a new string rec, return fresh ID or ID of existing item, and increase
+ // the existing item's ref count
+ function AddStringRec(const SR: TsdStringRec): integer;
+ // Add a new string S to the table, the function returns its ID.
+ function AddString(const S: UTF8String): integer;
+ // Get the refstring by ID
+ function ById(index: integer): TsdRefString;
+ // Delete refstring by ID
+ procedure Delete(ByIdIndex: integer);
+ // determine if the stringrec exists
+ function ExistStringRec(const SR: TsdStringRec): boolean;
+ // Get the string of refstring with ID
+ function GetString(ID: integer): UTF8String;
+ // Set the string value of refstring with ID.
+ procedure SetString(var ID: integer; const S: UTF8String);
+ // Number of refstrings
+ function StringCount: integer;
+ procedure SaveToFile(const AFileName: string);
+ procedure SaveToStream(S: TStream);
+ end;
+
+{utility functions}
+
+// convert a string into a string rec
+function sdStringToSR(const S: Utf8String): TsdStringRec;
+
+// convert a string rec into a string
+function sdSRToString(const SR: TsdStringRec): Utf8String;
+
+// compare two string recs. This is NOT an alphabetic compare. SRs are first
+// compared by length, then by first byte, then last byte then second, then
+// N-1, until all bytes are compared.
+function sdCompareSR(const SR1, SR2: TsdStringRec): integer;
+
+// compare 2 bytes
+function sdCompareByte(Byte1, Byte2: byte): integer;
+
+// compare 2 integers
+function sdCompareInteger(Int1, Int2: integer): integer;
+
+function sdUtf16ToUtf8Mem(Src: Pword; Dst: Pbyte; Count: integer): integer;
+function sdUtf8ToUtf16Mem(var Src: Pbyte; Dst: Pword; Count: integer): integer;
+procedure sdStreamWrite(S: TStream; const AString: AnsiString);
+procedure sdStreamWriteStringRec(S: TStream; const AStringRec: TsdStringRec);
+procedure sdStreamWriteRefString(S: TStream; ARefString: TsdRefString);
+
+implementation
+
+{ TsdRefString }
+
+function TsdRefString.AsString: UTF8String;
+begin
+ Result := sdSRToString(StringRec);
+end;
+
+function TsdRefString.CompareToSR(const SR: TsdStringRec): integer;
+begin
+ if SR.Count = 0 then
+ begin
+ // shortcut
+ Result := 1;
+ exit;
+ end;
+ Result := sdCompareSR(StringRec, SR);
+end;
+
+destructor TsdRefString.Destroy;
+begin
+ FreeMem(FFirst);
+ inherited;
+end;
+
+procedure TsdRefString.SetString(const SR: TsdStringRec);
+begin
+ FCharCount := SR.Count;
+ ReallocMem(FFirst, FCharCount);
+ Move(SR.First^, FFirst^, FCharCount);
+end;
+
+function TsdRefString.StringRec: TsdStringRec;
+begin
+ Result.First := FFirst;
+ Result.Count := FCharCount;
+end;
+
+{ TsdRefStringList }
+
+function TsdRefStringList.GetItems(Index: integer): TsdRefString;
+begin
+ Result := Get(Index);
+end;
+
+function TsdRefStringList.IndexOfID(AID: integer; var Index: integer): boolean;
+var
+ Min, Max: integer;
+begin
+ Result := False;
+
+ // Find position - binary method
+ Index := 0;
+ Min := 0;
+ Max := Count;
+ while Min < Max do
+ begin
+ Index := (Min + Max) div 2;
+ case sdCompareInteger(Items[Index].FID, AID) of
+ -1: Min := Index + 1;
+ 0: begin
+ Result := True;
+ exit;
+ end;
+ 1: Max := Index;
+ end;
+ end;
+
+ Index := Min;
+end;
+
+function TsdRefStringList.IndexOfSR(const AStringRec: TsdStringRec; var Index: integer): boolean;
+var
+ Min, Max: integer;
+ SR: TsdStringRec;
+begin
+ Result := False;
+
+ // Find position - binary method
+ Index := 0;
+ Min := 0;
+ Max := Count;
+ while Min < Max do
+ begin
+ Index := (Min + Max) div 2;
+ SR := TsdRefString(Get(Index)).StringRec;
+ case sdCompareSR(SR, AStringRec) of
+ -1: Min := Index + 1;
+ 0: begin
+ Result := True;
+ exit;
+ end;
+ 1: Max := Index;
+ end;
+ end;
+
+ Index := Min;
+end;
+
+{ TsdStringTable }
+
+function TsdStringTable.AddString(const S: UTF8String): integer;
+var
+ SR: TsdStringRec;
+begin
+ SR := sdStringToSR(S);
+ Result := AddStringRec(SR);
+end;
+
+function TsdStringTable.AddStringRec(const SR: TsdStringRec): integer;
+var
+ BySRIndex: integer;
+ Item: TsdRefString;
+ NewSR: TsdStringRec;
+ Res: boolean;
+begin
+ // zero-length string
+ if SR.Count = 0 then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ // Try to find the new string
+ if FBySR.IndexOfSR(SR, BySRIndex) then
+ begin
+ Item := FBySR.Items[BySRIndex];
+ inc(Item.FFrequency);
+ Result := Item.FID;
+ exit;
+ end;
+
+ // Not found.. must make new item
+ Item := TsdRefString.Create;
+ Item.SetString(SR);
+ NewSR := Item.StringRec;
+ Item.FID := NextUniqueID;
+ FById.Add(Item);
+ Item.FFrequency := 1;
+
+ // debug:
+ //SetLength(Item.FValue, Item.FCount);
+ //Move(Item.FirstPtr(FBase)^, Item.FValue[1], Item.FCount);
+
+ // Insert in BySR lists
+ Res := FBySR.IndexOfSR(NewSR, BySRIndex);
+ assert(Res = False);
+ FBySR.Insert(BySRIndex, Item);
+ Result := Item.FID;
+end;
+
+function TsdStringTable.ById(index: integer): TsdRefString;
+begin
+ Result := FById[Index];
+end;
+
+procedure TsdStringTable.Clear;
+begin
+ FByID.Clear;
+ FBySR.Clear;
+end;
+
+constructor TsdStringTable.Create;
+begin
+ inherited Create;
+ FByID := TsdRefStringList.Create(False);
+ FBySR := TsdRefStringList.Create(True);
+end;
+
+procedure TsdStringTable.DecFrequency(AItem: TsdRefString; ByIdIndex: integer);
+var
+ BySRIndex: integer;
+ Res: boolean;
+begin
+ dec(AItem.FFrequency);
+ assert(AItem.FFrequency >= 0);
+
+ if AItem.FFrequency = 0 then
+ begin
+ // We must remove it
+ FById.Delete(ByIdIndex);
+ Res := FBySR.IndexOfSR(AItem.StringRec, BySRIndex);
+ assert(Res = True);
+ FBySR.Delete(BySRIndex);
+ end;
+end;
+
+procedure TsdStringTable.Delete(ByIdIndex: integer);
+var
+ Item: TsdRefString;
+ BySRIndex: integer;
+ Res: boolean;
+begin
+ Item := FById[ByIdIndex];
+ if Item = nil then
+ exit;
+ FById.Delete(ByIdIndex);
+ Res := FBySR.IndexOfSR(Item.StringRec, BySRIndex);
+ assert(Res = True);
+ FBySR.Delete(BySRIndex);
+end;
+
+destructor TsdStringTable.Destroy;
+begin
+ FreeAndNil(FByID);
+ FreeAndNil(FBySR);
+ inherited;
+end;
+
+function TsdStringTable.ExistStringRec(const SR: TsdStringRec): boolean;
+var
+ BySRIndex: integer;
+begin
+ // zero-length string
+ if SR.Count = 0 then
+ begin
+ Result := False;
+ exit;
+ end;
+
+ // Try to find the new string
+ Result := FBySR.IndexOfSR(SR, BySRIndex);
+
+end;
+
+function TsdStringTable.GetString(ID: integer): UTF8String;
+var
+ Index, Count: integer;
+ Item: TsdRefString;
+begin
+ if ID = 0 then
+ begin
+ Result := '';
+ exit;
+ end;
+
+ // Find the ID
+ if FByID.IndexOfID(ID, Index) then
+ begin
+ Item := FById[Index];
+ Count := Item.FCharCount;
+ SetLength(Result, Count);
+ Move(Item.FFirst^, Result[1], Count);
+ exit;
+ end;
+
+ Result := '';
+end;
+
+function TsdStringTable.NextUniqueID: integer;
+begin
+ if FById.Count = 0 then
+ Result := 1
+ else
+ Result := FByID[FByID.Count - 1].FID + 1;
+end;
+
+procedure TsdStringTable.SaveToFile(const AFileName: string);
+var
+ F: TFileStream;
+begin
+ F := TFileStream.Create(AFileName, fmCreate);
+ try
+ SaveToStream(F);
+ finally
+ F.Free;
+ end;
+end;
+
+procedure TsdStringTable.SaveToStream(S: TStream);
+var
+ i: integer;
+ R: UTF8String;
+begin
+ for i := 0 to FBySR.Count - 1 do
+ begin
+ R := FBySR[i].AsString + #13#10;
+ S.Write(R[1], length(R));
+ end;
+end;
+
+procedure TsdStringTable.SetString(var ID: integer; const S: UTF8String);
+var
+ ByIdIndex: integer;
+ Item: TsdRefString;
+ SR: TsdStringRec;
+begin
+ // Make temp string record
+ SR := sdStringtoSR(S);
+
+ // Do we have a ref string with this ID?
+ if (ID > 0) and FByID.IndexOfID(ID, ByIdIndex) then
+ begin
+ // Is the string still the same?
+ Item := FById[ByIdIndex];
+ if Item.CompareToSR(SR) = 0 then
+ exit;
+ // The string changed..
+ DecFrequency(Item, ByIdIndex);
+ end;
+
+ ID := AddStringRec(SR);
+end;
+
+{utility functions}
+
+function TsdStringTable.StringCount: integer;
+begin
+ Result := FBySR.Count;
+end;
+
+function sdStringToSR(const S: UTF8String): TsdStringRec;
+begin
+ Result.Count := length(S);
+ if Result.Count = 0 then
+ Result.First := nil
+ else
+ Result.First := @S[1];
+end;
+
+function sdSRToString(const SR: TsdStringRec): UTF8String;
+begin
+ SetLength(Result, SR.Count);
+ if SR.Count > 0 then
+ Move(SR.First^, Result[1], SR.Count);
+end;
+
+function sdCompareByte(Byte1, Byte2: byte): integer;
+begin
+ if Byte1 < Byte2 then
+ Result := -1
+ else
+ if Byte1 > Byte2 then
+ Result := 1
+ else
+ Result := 0;
+end;
+
+function sdCompareInteger(Int1, Int2: integer): integer;
+begin
+ if Int1 < Int2 then
+ Result := -1
+ else
+ if Int1 > Int2 then
+ Result := 1
+ else
+ Result := 0;
+end;
+
+function sdCompareSR(const SR1, SR2: TsdStringRec): integer;
+var
+ Count: integer;
+ First1, First2, Last1, Last2: Pbyte;
+begin
+ // Compare string length first
+ Result := sdCompareInteger(SR1.Count, SR2.Count);
+ if Result <> 0 then
+ exit;
+
+ // Compare first
+ Result := sdCompareByte(SR1.First^, SR2.First^);
+ if Result <> 0 then
+ exit;
+ Count := SR1.Count;
+
+ // Setup First & Last pointers
+ First1 := SR1.First;
+ First2 := SR2.First;
+ Last1 := First1; inc(Last1, Count);
+ Last2 := First2; inc(Last2, Count);
+
+ // Compare each time last ptrs then first ptrs, until they meet in the middle
+ repeat
+ dec(Last1);
+ dec(Last2);
+ if First1 = Last1 then
+ exit;
+ Result := sdCompareByte(Last1^, Last2^);
+ if Result <> 0 then
+ exit;
+ inc(First1); inc(First2);
+ if First1 = Last1 then
+ exit;
+ Result := sdCompareByte(First1^, First2^);
+ if Result <> 0 then
+ exit;
+ until False;
+end;
+
+function sdUtf16ToUtf8Mem(Src: Pword; Dst: Pbyte; Count: integer): integer;
+// Convert an Unicode (UTF16 LE) memory block to UTF8. This routine will process
+// Count wide characters (2 bytes size) to Count UTF8 characters (1-3 bytes).
+// Therefore, the block at Dst must be at least 1.5 the size of the source block.
+// The function returns the number of *bytes* written.
+var
+ W: word;
+ DStart: Pbyte;
+begin
+ DStart := Dst;
+ while Count > 0 do
+ begin
+ W := Src^;
+ inc(Src);
+ if W <= $7F then
+ begin
+ Dst^ := byte(W);
+ inc(Dst);
+ end else
+ begin
+ if W > $7FF then
+ begin
+ Dst^ := byte($E0 or (W shr 12));
+ inc(Dst);
+ Dst^ := byte($80 or ((W shr 6) and $3F));
+ inc(Dst);
+ Dst^ := byte($80 or (W and $3F));
+ inc(Dst);
+ end else
+ begin // $7F < W <= $7FF
+ Dst^ := byte($C0 or (W shr 6));
+ inc(Dst);
+ Dst^ := byte($80 or (W and $3F));
+ inc(Dst);
+ end;
+ end;
+ dec(Count);
+ end;
+ Result := integer(Dst) - integer(DStart);
+end;
+
+function sdUtf8ToUtf16Mem(var Src: Pbyte; Dst: Pword; Count: integer): integer;
+// Convert an UTF8 memory block to Unicode (UTF16 LE). This routine will process
+// Count *bytes* of UTF8 (each character 1-3 bytes) into UTF16 (each char 2 bytes).
+// Therefore, the block at Dst must be at least 2 times the size of Count, since
+// many UTF8 characters consist of just one byte, and are mapped to 2 bytes. The
+// function returns the number of *wide chars* written. Note that the Src block must
+// have an exact number of UTF8 characters in it, if Count doesn't match then
+// the last character will be converted anyway (going past the block boundary!)
+var
+ W: word;
+ C: byte;
+ DStart: Pword;
+ SClose: Pbyte;
+begin
+ DStart := Dst;
+ SClose := Src;
+ inc(SClose, Count);
+ while integer(Src) < integer(SClose) do
+ begin
+ // 1st byte
+ W := Src^;
+ inc(Src);
+ if W and $80 <> 0 then
+ begin
+ W := W and $3F;
+ if W and $20 <> 0 then
+ begin
+ // 2nd byte
+ C := Src^;
+ inc(Src);
+ if C and $C0 <> $80 then
+ // malformed trail byte or out of range char
+ Continue;
+ W := (W shl 6) or (C and $3F);
+ end;
+ // 2nd or 3rd byte
+ C := Src^;
+ inc(Src);
+ if C and $C0 <> $80 then
+ // malformed trail byte
+ Continue;
+ Dst^ := (W shl 6) or (C and $3F);
+ inc(Dst);
+ end else
+ begin
+ Dst^ := W;
+ inc(Dst);
+ end;
+ end;
+ Result := (integer(Dst) - integer(DStart)) div 2;
+end;
+
+procedure sdStreamWrite(S: TStream; const AString: AnsiString);
+var
+ L: integer;
+begin
+ L := Length(AString);
+ if L > 0 then
+ begin
+ S.Write(AString[1], L);
+ end;
+end;
+
+procedure sdStreamWriteStringRec(S: TStream; const AStringRec: TsdStringRec);
+begin
+ S.Write(PAnsiChar(AStringRec.First)^, AStringRec.Count);
+end;
+
+procedure sdStreamWriteRefString(S: TStream; ARefString: TsdRefString);
+begin
+ if ARefString = nil then
+ exit;
+ S.Write(PAnsiChar(ARefString.FFirst)^, ARefString.FCharCount);
+end;
+
+end.
diff --git a/Variations/varAffine3D.pas b/Variations/varAffine3D.pas
new file mode 100644
index 0000000..763a2c8
--- /dev/null
+++ b/Variations/varAffine3D.pas
@@ -0,0 +1,325 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varAffine3D;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationAffine3D = class(TBaseVariation)
+ private
+ affine3D_a00, affine3D_a01, affine3D_a02,
+ affine3D_a10, affine3D_a11, affine3D_a12,
+ affine3D_a20, affine3D_a21, affine3D_a22,
+ affine3D_bx, affine3D_by, affine3D_bz: double;
+ x0, y0, z0: double;
+ affine3D_mode: byte;
+ procedure CalcPre;
+ procedure CalcPost;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationAffine3D.GetCalcFunction(var f: TCalcFunction);
+begin
+ case affine3D_mode of
+ 0: f := CalcPre;
+ 1: f := CalcFunction;
+ else f := CalcPost;
+ end;
+end;
+
+procedure TVariationAffine3D.CalcPre;
+var x, y, z, dn: double;
+begin
+ x := affine3D_a00 * FTx^ - affine3D_a01 * FTy^ + affine3D_a02 * FTz^ + affine3D_bx;
+ y := -(affine3D_a10 * FTx^ - affine3D_a11 * FTy^ + affine3D_a12 * FTz^ + affine3D_by);
+ z := affine3D_a20 * FTx^ - affine3D_a21 * FTy^ + affine3D_a22 * FTz^ + affine3D_bz;
+
+ FTx^ := VVAR * x;
+ FTy^ := VVAR * y;
+ FTz^ := VVAR * z;
+
+ dn := hypot(x - x0, y - y0, z - z0);
+ if (dn <> 0) then color^ := abs(cos(hypot(x - x0, y - y0) / dn))
+ else color^ := 0;
+end;
+
+procedure TVariationAffine3D.CalcFunction;
+var x, y, z, dn: double;
+begin
+
+ x := affine3D_a00 * FTx^ - affine3D_a01 * FTy^ + affine3D_a02 * FTz^ + affine3D_bx;
+ y := -(affine3D_a10 * FTx^ - affine3D_a11 * FTy^ + affine3D_a12 * FTz^ + affine3D_by);
+ z := affine3D_a20 * FTx^ - affine3D_a21 * FTy^ + affine3D_a22 * FTz^ + affine3D_bz;
+
+ FPx^ := FPx^ + VVAR * x;
+ FPy^ := FPy^ + VVAR * y;
+ FPz^ := FPz^ + VVAR * z;
+
+ dn := hypot(x - x0, y - y0, z - z0);
+ if (dn <> 0) then color^ := abs(cos(hypot(x - x0, y - y0) / dn))
+ else color^ := 0;
+end;
+
+procedure TVariationAffine3D.CalcPost;
+var x, y, z, dn: double;
+begin
+
+ x := affine3D_a00 * FPx^ - affine3D_a01 * FPy^ + affine3D_a02 * FPz^ + affine3D_bx;
+ y := -(affine3D_a10 * FPx^ - affine3D_a11 * FPy^ + affine3D_a12 * FPz^ + affine3D_by);
+ z := affine3D_a20 * FPx^ - affine3D_a21 * FPy^ + affine3D_a22 * FPz^ + affine3D_bz;
+
+ FPx^ := VVAR * x;
+ FPy^ := VVAR * y;
+ FPz^ := VVAR * z;
+
+ dn := hypot(x - x0, y - y0, z - z0);
+ if (dn <> 0) then color^ := abs(cos(hypot(x - x0, y - y0) / dn))
+ else color^ := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationAffine3D.Create;
+begin
+ affine3D_a00 := 1; affine3D_a01 := 0; affine3D_a02 := 0;
+ affine3D_a10 := 0; affine3D_a11 := 1; affine3D_a12 := 0;
+ affine3D_a20 := 0; affine3D_a21 := 0; affine3D_a22 := 1;
+ affine3D_bx := 0; affine3D_by := 0; affine3D_bz := 0;
+ x0 := 0; y0 := 0; z0 := 0;
+ affine3D_mode := 1; // order of applying
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationAffine3D.GetInstance: TBaseVariation;
+begin
+ Result := TVariationAffine3D.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationAffine3D.GetName: string;
+begin
+ Result := 'affine3D';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationAffine3D.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'affine3D_a00';
+ 1: Result := 'affine3D_a01';
+ 2: Result := 'affine3D_a02';
+ 3: Result := 'affine3D_a10';
+ 4: Result := 'affine3D_a11';
+ 5: Result := 'affine3D_a12';
+ 6: Result := 'affine3D_a20';
+ 7: Result := 'affine3D_a21';
+ 8: Result := 'affine3D_a22';
+ 9: Result := 'affine3D_bx';
+ 10: Result := 'affine3D_by';
+ 11: Result := 'affine3D_bz';
+ 12: Result := 'affine3D_dc_x0';
+ 13: Result := 'affine3D_dc_y0';
+ 14: Result := 'affine3D_dc_z0';
+ 15: Result := 'affine3D_mode';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationAffine3D.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'affine3D_a00' then begin
+ affine3D_a00 := Value;
+ Result := True;
+ end else if Name = 'affine3D_a01' then begin
+ affine3D_a01 := Value;
+ Result := True;
+ end else if Name = 'affine3D_a02' then begin
+ affine3D_a02 := Value;
+ Result := True;
+ end else if Name = 'affine3D_a10' then begin
+ affine3D_a10 := Value;
+ Result := True;
+ end else if Name = 'affine3D_a11' then begin
+ affine3D_a11 := Value;
+ Result := True;
+ end else if Name = 'affine3D_a12' then begin
+ affine3D_a12 := Value;
+ Result := True;
+ end else if Name = 'affine3D_a20' then begin
+ affine3D_a20 := Value;
+ Result := True;
+ end else if Name = 'affine3D_a21' then begin
+ affine3D_a21 := Value;
+ Result := True;
+ end else if Name = 'affine3D_a22' then begin
+ affine3D_a22 := Value;
+ Result := True;
+ end else if Name = 'affine3D_bx' then begin
+ affine3D_bx := Value;
+ Result := True;
+ end else if Name = 'affine3D_by' then begin
+ affine3D_by := Value;
+ Result := True;
+ end else if Name = 'affine3D_bz' then begin
+ affine3D_bz := Value;
+ Result := True;
+ end else if Name = 'affine3D_dc_x0' then begin
+ x0 := Value;
+ Result := True;
+ end else if Name = 'affine3D_dc_y0' then begin
+ y0 := Value;
+ Result := True;
+ end else if Name = 'affine3D_dc_z0' then begin
+ z0 := Value;
+ Result := True;
+ end else if Name = 'affine3D_mode' then begin
+ if (Value < 0) then Value := 0;
+ if (Value > 2) then Value := 2;
+ affine3D_mode := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationAffine3D.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'affine3D_a00' then begin
+ affine3D_a00 := 1;
+ Result := True;
+ end else if Name = 'affine3D_a01' then begin
+ affine3D_a01 := 0;
+ Result := True;
+ end else if Name = 'affine3D_a02' then begin
+ affine3D_a02 := 0;
+ Result := True;
+ end else if Name = 'affine3D_a10' then begin
+ affine3D_a10 := 0;
+ Result := True;
+ end else if Name = 'affine3D_a11' then begin
+ affine3D_a11 := 1;
+ Result := True;
+ end else if Name = 'affine3D_a12' then begin
+ affine3D_a12 := 0;
+ Result := True;
+ end else if Name = 'affine3D_a20' then begin
+ affine3D_a20 := 0;
+ Result := True;
+ end else if Name = 'affine3D_a21' then begin
+ affine3D_a21:= 0;
+ Result := True;
+ end else if Name = 'affine3D_a22' then begin
+ affine3D_a22 := 1;
+ Result := True;
+ end else if Name = 'affine3D_bx' then begin
+ affine3D_bx := 0;
+ Result := True;
+ end else if Name = 'affine3D_by' then begin
+ affine3D_by := 0;
+ Result := True;
+ end else if Name = 'affine3D_bz' then begin
+ affine3D_bz := 0;
+ Result := True;
+ end else if Name = 'affine3D_dc_x0' then begin
+ x0 := 0;
+ Result := True;
+ end else if Name = 'affine3D_dc_y0' then begin
+ y0 := 0;
+ Result := True;
+ end else if Name = 'affine3D_dc_z0' then begin
+ z0 := 0;
+ Result := True;
+ end else if Name = 'affine3D_mode' then begin
+ affine3D_mode := 1;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationAffine3D.GetNrVariables: integer;
+begin
+ Result := 16
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationAffine3D.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'affine3D_a00' then begin
+ Value := affine3D_a00;
+ Result := True;
+ end else if Name = 'affine3D_a01' then begin
+ Value := affine3D_a01;
+ Result := True;
+ end else if Name = 'affine3D_a02' then begin
+ Value := affine3D_a02;
+ Result := True;
+ end else if Name = 'affine3D_a10' then begin
+ Value := affine3D_a10;
+ Result := True;
+ end else if Name = 'affine3D_a11' then begin
+ Value := affine3D_a11;
+ Result := True;
+ end else if Name = 'affine3D_a12' then begin
+ Value := affine3D_a12;
+ Result := True;
+ end else if Name = 'affine3D_a20' then begin
+ Value := affine3D_a20;
+ Result := True;
+ end else if Name = 'affine3D_a21' then begin
+ Value := affine3D_a21;
+ Result := True;
+ end else if Name = 'affine3D_a22' then begin
+ Value := affine3D_a22;
+ Result := True;
+ end else if Name = 'affine3D_bx' then begin
+ Value := affine3D_bx;
+ Result := True;
+ end else if Name = 'affine3D_by' then begin
+ Value := affine3D_by;
+ Result := True;
+ end else if Name = 'affine3D_bz' then begin
+ Value := affine3D_bz;
+ Result := True;
+ end else if Name = 'affine3D_dc_x0' then begin
+ Value:= x0;
+ Result := True;
+ end else if Name = 'affine3D_dc_y0' then begin
+ Value := y0;
+ Result := True;
+ end else if Name = 'affine3D_dc_z0' then begin
+ Value := z0;
+ Result := True;
+ end else if Name = 'affine3D_mode' then begin
+ Value := affine3D_mode;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationAffine3D), true, true);
+end.
\ No newline at end of file
diff --git a/Variations/varArch.pas b/Variations/varArch.pas
new file mode 100644
index 0000000..8a75efb
--- /dev/null
+++ b/Variations/varArch.pas
@@ -0,0 +1,119 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varArch;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+const
+ sweight = 'Z_arch_weight';
+
+type
+ TVariationArch = class(TBaseVariation)
+ private
+ vpi, weight: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+procedure TVariationArch.Prepare;
+begin
+ vpi := pi * weight; // arch behavior
+end;
+
+procedure TVariationArch.CalcFunction;
+var
+ sinr, cosr: double;
+begin
+ SinCos(random * vpi, sinr, cosr);
+ if cosr = 0 then exit;
+
+ FPx^ := FPx^ + vvar * sinr;
+ FPy^ := FPy^ + sqr(sinr) / cosr * vvar;
+end;
+
+constructor TVariationArch.Create;
+begin
+ inherited Create;
+ weight := 1;
+end;
+
+class function TVariationArch.GetInstance: TBaseVariation;
+begin
+ Result := TVariationArch.Create;
+end;
+
+class function TVariationArch.GetName: string;
+begin
+ Result := 'Z_arch';
+end;
+
+{ ////////////////////////////////////////////////////////////////////// }
+
+function TVariationArch.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := sweight;
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationArch.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+function TVariationArch.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sweight then begin
+ Value := weight;
+ Result := True;
+ end;
+end;
+
+function TVariationArch.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sweight then begin
+ weight := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationArch.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = sweight then begin
+ weight := 1;
+ Result := True;
+ end;
+end;
+
+{ ///////////////////////////////////////////////////////////////////////////// }
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationArch), false, false);
+
+end.
diff --git a/Variations/varAuger.pas b/Variations/varAuger.pas
new file mode 100644
index 0000000..90dc9c4
--- /dev/null
+++ b/Variations/varAuger.pas
@@ -0,0 +1,176 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varAuger;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationAuger = class(TBaseVariation)
+ private
+ auger_freq, auger_weight, auger_scale, auger_sym: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationAuger.Prepare;
+begin
+end;
+
+procedure TVariationAuger.CalcFunction;
+var x, y, s, t, dx, dy: double;
+begin
+ x := FTx^;
+ y := FTy^;
+
+ s := sin(auger_freq * x);
+ t := sin(auger_freq * y);
+
+ dx := x + auger_weight * (0.5 * auger_scale * t + abs(x) * t);
+ dy := y + auger_weight * (0.5 * auger_scale * s + abs(y) * s);
+
+ FPx^ := FPx^ + VVAR * (x + auger_sym * (dx - x));
+ FPy^ := FPy^ + VVAR * dy;
+ FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationAuger.Create;
+begin
+ auger_freq := 5; auger_weight := 0.5;
+ auger_scale := 0.1; auger_sym := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationAuger.GetInstance: TBaseVariation;
+begin
+ Result := TVariationAuger.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationAuger.GetName: string;
+begin
+ Result := 'auger';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationAuger.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'auger_freq';
+ 1: Result := 'auger_weight';
+ 2: Result := 'auger_scale';
+ 3: Result := 'auger_sym';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationAuger.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'auger_freq' then begin
+ auger_freq := Value;
+ Result := True;
+ end else if Name = 'auger_weight' then begin
+ auger_weight := Value;
+ Result := True;
+ end else if Name = 'auger_scale' then begin
+ auger_scale := Value;
+ Result := True;
+ end else if Name = 'auger_sym' then begin
+ auger_sym := Value;
+ Result := True;
+ end
+end;
+function TVariationAuger.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'auger_freq' then begin
+ auger_freq := 5;
+ Result := True;
+ end else if Name = 'auger_weight' then begin
+ auger_weight := 0.5;
+ Result := True;
+ end else if Name = 'auger_scale' then begin
+ auger_scale := 0.1;
+ Result := True;
+ end else if Name = 'auger_sym' then begin
+ auger_sym := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationAuger.GetNrVariables: integer;
+begin
+ Result := 4
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationAuger.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'auger_freq' then begin
+ Value := auger_freq;
+ Result := True;
+ end else if Name = 'auger_weight' then begin
+ Value := auger_weight;
+ Result := True;
+ end else if Name = 'auger_scale' then begin
+ Value := auger_scale;
+ Result := True;
+ end else if Name = 'auger_sym' then begin
+ Value := auger_sym;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationAuger), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varBent2.pas b/Variations/varBent2.pas
new file mode 100644
index 0000000..b88ef7c
--- /dev/null
+++ b/Variations/varBent2.pas
@@ -0,0 +1,152 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varBent2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationBent2 = class(TBaseVariation)
+ private
+ b2x, b2y, b2z, vvarx, vvary, vvarz: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationBent2 }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationBent2.Prepare;
+begin
+ vvarx := vvar * b2x;
+ vvary := vvar * b2y;
+ vvarz := vvar * b2z;
+end;
+
+procedure TVariationBent2.CalcFunction;
+begin
+ if(FTx^ < 0.0) then
+ FPx^ := FPx^ + vvarx * FTx^
+ else
+ FPx^ := FPx^ + vvar * FTx^;
+ if (FTy^ < 0) then
+ FPy^ := FPy^ + vvary * FTy^
+ else
+ FPy^ := FPy^ + vvar * FTy^;
+ // AV: added 3D-support
+ if (FTz^ < 0) then
+ FPz^ := FPz^ + vvarz * FTz^
+ else
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBent2.GetName: string;
+begin
+ Result := 'bent2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBent2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'bent2_x';
+ 1: Result := 'bent2_y';
+ 2: Result := 'bent2_z';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBent2.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBent2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'bent2_x' then begin
+ b2x := Value;
+ Result := True;
+ end else if Name = 'bent2_y' then begin
+ b2y := Value;
+ Result := True;
+ end else if Name = 'bent2_z' then begin
+ b2z := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationBent2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'bent2_x' then begin
+ b2x := 1;
+ Result := True;
+ end else if Name = 'bent2_y' then begin
+ b2y := 1;
+ Result := True;
+ end else if Name = 'bent2_z' then begin
+ b2z := 1;
+ Result := True;
+ end;
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBent2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'bent2_x' then begin
+ Value := b2x;
+ Result := True;
+ end else if Name = 'bent2_y' then begin
+ Value := b2y;
+ Result := True;
+ end else if Name = 'bent2_z' then begin
+ Value := b2z;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationBent2.Create;
+begin
+ b2x := 2;
+ b2y := 0.5;
+ b2z := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBent2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBent2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBent2), true, false);
+end.
diff --git a/Variations/varBipolar.pas b/Variations/varBipolar.pas
new file mode 100644
index 0000000..9e73bc5
--- /dev/null
+++ b/Variations/varBipolar.pas
@@ -0,0 +1,163 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varBipolar;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationBipolar = class(TBaseVariation)
+ private
+ bipolar_shift, v_4, v, s: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationBipolar.Prepare;
+begin
+ v_4 := VVAR * 0.15915494309189533576888376337251; // AV: 1/(2*PI)
+ v := VVAR * 0.636619772367581343075535053490061; // AV: 2/PI
+ s := -1.57079632679489661923 * (bipolar_shift); // AV: -PI/2
+end;
+
+procedure TVariationBipolar.CalcFunction;
+var x2y2, y, t, x2, f, g : double;
+begin
+ x2y2 := sqr(FTx^) + sqr(FTy^);
+ y := 0.5 * ArcTan2(2.0 * FTy^, x2y2 - 1.0) + (s);
+
+ if (y > 1.57079632679489661923) then
+ y := -1.57079632679489661923 + fmod(y + 1.57079632679489661923, PI)
+ else if (y < -1.57079632679489661923) then
+ y := 1.57079632679489661923 - fmod(1.57079632679489661923 - y, PI);
+
+ t := x2y2 + 1.0;
+ x2 := 2.0 * FTx^;
+
+ f := t + x2;
+ g := t - x2;
+
+ if (g = 0) or (f/g <= 0) then
+ Exit;
+
+ FPx^ := FPx^ + (v_4) * Ln((t+x2) / (t-x2));
+ FPy^ := FPy^ + (v) * y;
+
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationBipolar.Create;
+begin
+ bipolar_shift := 0;
+ v_4 := 0;
+ v := 0;
+ s := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBipolar.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBipolar.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBipolar.GetName: string;
+begin
+ Result := 'bipolar';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBipolar.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'bipolar_shift';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBipolar.SetVariable(const Name: string; var value: double): boolean;
+var temp: double;
+begin
+ Result := False;
+ if Name = 'bipolar_shift' then begin
+ temp := frac(0.5 * (value + 1.0));
+ value := 2.0 * temp - 1.0;
+ bipolar_shift := Value;
+ Result := True;
+ end
+end;
+
+function TVariationBipolar.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'bipolar_shift' then begin
+ bipolar_shift := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBipolar.GetNrVariables: integer;
+begin
+ Result := 1
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBipolar.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'bipolar_shift' then begin
+ Value := bipolar_shift;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBipolar), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varBlade.pas b/Variations/varBlade.pas
new file mode 100644
index 0000000..b20e7fa
--- /dev/null
+++ b/Variations/varBlade.pas
@@ -0,0 +1,61 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varBlade;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationBlade = class(TBaseVariation)
+ private
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+
+procedure TVariationBlade.CalcFunction;
+var
+ r, sinr, cosr: double;
+begin
+ r := sqrt(sqr(FTx^) + sqr(FTy^)) * vvar;
+ SinCos(r * random, sinr, cosr);
+ r := vvar * FTx^;
+ FPx^ := FPx^ + r * (cosr + sinr);
+ FPy^ := FPy^ + r * (cosr - sinr);
+ // AV: added real 3D support
+ FPz^ := FPz^ + vvar * FTy^ * (sinr - cosr);
+end;
+
+constructor TVariationBlade.Create;
+begin
+ inherited Create;
+end;
+
+class function TVariationBlade.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBlade.Create;
+end;
+
+class function TVariationBlade.GetName: string;
+begin
+ Result := 'blade';
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBlade), true, false);
+
+end.
diff --git a/Variations/varBlob.pas b/Variations/varBlob.pas
new file mode 100644
index 0000000..def8edf
--- /dev/null
+++ b/Variations/varBlob.pas
@@ -0,0 +1,131 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varBlob;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationBlob = class(TBaseVariation)
+ private
+ FLow, FHigh, FWaves: double;
+ VLow, VHeight: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationBlob }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationBlob.Prepare;
+begin
+ VHeight := vvar * (FHigh - FLow) / 2;
+ VLow := vvar * FLow + VHeight;
+end;
+
+procedure TVariationBlob.CalcFunction;
+var
+ r : double;
+begin
+ r := VLow + VHeight * sin(FWaves * arctan2(FTx^, FTy^));
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ + r * FTy^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBlob.GetName: string;
+begin
+ Result := 'blob';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlob.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'blob_low';
+ 1: Result := 'blob_high';
+ 2: Result := 'blob_waves';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlob.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlob.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'blob_low' then begin
+ FLow := Value;
+ Result := True;
+ end else if Name = 'blob_high' then begin
+ FHigh := Value;
+ Result := True;
+ end else if Name = 'blob_waves' then begin
+ // Value := Round(Value);
+ FWaves := Value;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlob.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'blob_low' then begin
+ Value := FLow;
+ Result := True;
+ end else if Name = 'blob_high' then begin
+ Value := FHigh;
+ Result := True;
+ end else if Name = 'blob_waves' then begin
+ Value := FWaves;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationBlob.Create;
+begin
+ inherited Create;
+
+ FWaves := Round(2 + 5 * Random);
+ FLow := 0.2 + 0.5 * random;
+ FHigh := 0.8 + 0.4 * random;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBlob.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBlob.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBlob), false, false);
+end.
diff --git a/Variations/varBlurCircle.pas b/Variations/varBlurCircle.pas
new file mode 100644
index 0000000..9b4b6d3
--- /dev/null
+++ b/Variations/varBlurCircle.pas
@@ -0,0 +1,154 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varBlurCircle;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationBlurCircle = class(TBaseVariation)
+ private
+ PI_4, hole: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationBlurCircle.Prepare;
+begin
+ //VVAR4_PI := VVAR * 4.0 / PI; // AV: it's useless
+ PI_4 := PI / 4.0;
+end;
+
+procedure TVariationBlurCircle.CalcFunction;
+var
+ x, y, absx, absy, side, perimeter, r, sina, cosa: double;
+begin
+ x := 2.0 * random - 1.0;
+ y := 2.0 * random - 1.0;
+
+ absx := abs(x); //if absx < 0 then absx := absx * -1.0;
+ absy := abs(y); //if absy < 0 then absy := absy * -1.0;
+
+ if (absx >= absy) then
+ begin
+ if (x >= absy) then
+ perimeter := absx + y
+ else perimeter := 5.0 * absx - y;
+ side := absx;
+ end else
+ begin
+ if (y >= absx) then
+ perimeter := 3.0 * absy - x
+ else perimeter := 7.0 * absy + x;
+ side := absy;
+ end;
+
+ r := VVAR * (side + hole);
+ SinCos(PI_4 * perimeter / side - PI_4, sina, cosa);
+
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationBlurCircle.Create;
+begin
+ hole := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBlurCircle.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBlurCircle.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBlurCircle.GetName: string;
+begin
+ Result := 'blur_circle';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurCircle.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'blur_circle_hole';
+ else
+ Result := '';
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurCircle.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'blur_circle_hole' then begin
+ hole := Value;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurCircle.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurCircle.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'blur_circle_hole' then begin
+ Value := hole;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBlurCircle), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varBlurPixelize.pas b/Variations/varBlurPixelize.pas
new file mode 100644
index 0000000..c1b29b5
--- /dev/null
+++ b/Variations/varBlurPixelize.pas
@@ -0,0 +1,153 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varBlurPixelize;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationBlurPixelize = class(TBaseVariation)
+ private
+ blur_pixelize_size, blur_pixelize_scale: double;
+ inv_size, v: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationBlurPixelize.Prepare;
+begin
+ inv_size := 1.0 / blur_pixelize_size;
+ v := vvar * blur_pixelize_size;
+end;
+
+procedure TVariationBlurPixelize.CalcFunction;
+var x, y: double;
+begin
+ x := floor(FTx^*(inv_size));
+ y := floor(FTy^*(inv_size));
+
+ FPx^ := FPx^ + (v) * (x + (blur_pixelize_scale) * (random - 0.5) + 0.5);
+ FPy^ := FPy^ + (v) * (y + (blur_pixelize_scale) * (random - 0.5) + 0.5);
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationBlurPixelize.Create;
+begin
+ blur_pixelize_size := 0.1;
+ blur_pixelize_scale := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBlurPixelize.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBlurPixelize.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBlurPixelize.GetName: string;
+begin
+ Result := 'blur_pixelize';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurPixelize.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'blur_pixelize_size';
+ 1: Result := 'blur_pixelize_scale';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurPixelize.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'blur_pixelize_size' then begin
+ if (value < 1e-6) then value := 1e-6;
+ blur_pixelize_size := Value;
+ Result := True;
+ end else if Name = 'blur_pixelize_scale' then begin
+ blur_pixelize_scale := Value;
+ Result := True;
+ end
+end;
+function TVariationBlurPixelize.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'blur_pixelize_size' then begin
+ blur_pixelize_size := 0.1;
+ Result := True;
+ end else if Name = 'blur_pixelize_scale' then begin
+ blur_pixelize_size := 1;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurPixelize.GetNrVariables: integer;
+begin
+ Result := 2
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurPixelize.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'blur_pixelize_size' then begin
+ Value := blur_pixelize_size;
+ Result := True;
+ end else if Name = 'blur_pixelize_scale' then begin
+ Value := blur_pixelize_scale;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBlurPixelize), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varBlurZoom.pas b/Variations/varBlurZoom.pas
new file mode 100644
index 0000000..165abd7
--- /dev/null
+++ b/Variations/varBlurZoom.pas
@@ -0,0 +1,144 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varBlurZoom;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationBlurZoom = class(TBaseVariation)
+ private
+ blur_zoom_length, blur_zoom_x, blur_zoom_y: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationBlurZoom.Prepare;
+begin
+end;
+
+procedure TVariationBlurZoom.CalcFunction;
+var z: double;
+begin
+
+ z := 1.0 + blur_zoom_length * random;
+ FPx^ := FPx^ + vvar * ((FTx^ - blur_zoom_x) * z + blur_zoom_x);
+ FPy^ := FPy^ + vvar * ((FTy^ - blur_zoom_y) * z - blur_zoom_y);
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationBlurZoom.Create;
+begin
+ blur_zoom_length := 0;
+ blur_zoom_x := 0;
+ blur_zoom_y := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBlurZoom.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBlurZoom.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBlurZoom.GetName: string;
+begin
+ Result := 'blur_zoom';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurZoom.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'blur_zoom_length';
+ 1: Result := 'blur_zoom_x';
+ 2: Result := 'blur_zoom_y';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurZoom.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'blur_zoom_length' then begin
+ blur_zoom_length := Value;
+ Result := True;
+ end else if Name = 'blur_zoom_x' then begin
+ blur_zoom_y := Value;
+ Result := True;
+ end else if Name = 'blur_zoom_y' then begin
+ blur_zoom_y := Value;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurZoom.GetNrVariables: integer;
+begin
+ Result := 3
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBlurZoom.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'blur_zoom_length' then begin
+ Value := blur_zoom_length;
+ Result := True;
+ end else if Name = 'blur_zoom_x' then begin
+ Value := blur_zoom_x;
+ Result := True;
+ end else if Name = 'blur_zoom_y' then begin
+ Value := blur_zoom_y;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBlurZoom), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varBoarders2.pas b/Variations/varBoarders2.pas
new file mode 100644
index 0000000..83721f1
--- /dev/null
+++ b/Variations/varBoarders2.pas
@@ -0,0 +1,188 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varBoarders2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ sb2c = 'boarders2_c';
+ sleft = 'boarders2_left';
+ sright = 'boarders2_right';
+ eps: double = 1e-30;
+type
+ TVariationBoarders2 = class(TBaseVariation)
+ private
+ b2c, left, right, cc, cl, cr: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationBoarders2 }
+
+//////////////////////////////////////////
+procedure TVariationBoarders2.Prepare;
+begin
+ cc := abs(b2c);
+ cl := cc * abs(left);
+ cr := cc + (cc * abs(right));
+end;
+
+//////////////////////////////////////////
+procedure TVariationBoarders2.CalcFunction;
+var
+ roundX, roundY, offsetX, offsetY: double;
+begin
+ roundX := round(FTx^);
+ roundY := round(FTy^);
+ offsetX := FTx^ - roundX;
+ offsetY := FTy^ - roundY;
+
+ if (random >= cr) then
+ begin
+ FPx^ := FPx^ + VVAR * (offsetX * cc + roundX);
+ FPy^ := FPy^ + VVAR * (offsetY * cc + roundY);
+ end
+ else begin
+ if (abs(offsetX) >= abs(offsetY)) then
+ begin
+ if(offsetX >= 0.0) then
+ begin
+ FPx^ := FPx^ + VVAR * (offsetX * cc + roundX + cl);
+ FPy^ := FPy^ + VVAR * (offsetY * cc + roundY + cl * offsetY / offsetX);
+ end
+ else begin
+ FPx^ := FPx^ + VVAR * (offsetX * cc + roundX - cl);
+ FPy^ := FPy^ + VVAR * (offsetY * cc + roundY - cl * offsetY / offsetX);
+ end;
+ end
+ else begin
+ if(offsetY >= 0.0) then
+ begin
+ FPy^ := FPy^ + VVAR * (offsetY * cc + roundY + cl);
+ FPx^ := FPx^ + VVAR * (offsetX * cc + roundX + offsetX / offsetY * cl);
+ end
+ else begin
+ FPy^ := FPy^ + VVAR * (offsetY * cc + roundY - cl);
+ FPx^ := FPx^ + VVAR * (offsetX * cc + roundX - offsetX / offsetY * cl);
+ end;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+constructor TVariationBoarders2.Create;
+begin
+ b2c := 0.5;
+ left := 0.5;
+ right := 0.5;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBoarders2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBoarders2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBoarders2.GetName: string;
+begin
+ Result := 'boarders2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBoarders2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := sb2c;
+ 1: Result := sleft;
+ 2: Result := sright;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBoarders2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ if abs(value) = 0 then value := eps;
+ b2c := value;
+ Result := True;
+ end else if Name = sleft then begin
+ if abs(value) = 0 then value := eps;
+ left := Value;
+ Result := True;
+ end else if Name = sright then begin
+ if abs(value) = 0 then value := eps;
+ right := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationBoarders2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ b2c := 0.5;
+ Result := True;
+ end else if Name = sleft then begin
+ left := 0.5;
+ Result := True;
+ end else if Name = sright then begin
+ right := 0.5;
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationBoarders2.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBoarders2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ Value := b2c;
+ Result := True;
+ end else if Name = sleft then begin
+ Value := left;
+ Result := True;
+ end else if Name = sright then begin
+ Value := right;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBoarders2), false, false);
+end.
\ No newline at end of file
diff --git a/Variations/varButterfly.pas b/Variations/varButterfly.pas
new file mode 100644
index 0000000..fba331b
--- /dev/null
+++ b/Variations/varButterfly.pas
@@ -0,0 +1,160 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varButterfly;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationButterfly = class(TBaseVariation)
+ const
+ str_sx: string = 'butterfly_scale_negX';
+ str_sy: string = 'butterfly_scale_negY';
+ str_sz: string = 'butterfly_3D_shift';
+ private
+ sx, sy, sz, vpi: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationButterfly }
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationButterfly.Prepare;
+begin
+ vpi := vvar * 4.0 / sqrt(3.0 * pi);
+end;
+
+procedure TVariationButterfly.CalcFunction;
+var r, y2: double;
+begin
+ y2 := FTy^ * 2.0;
+ r := vpi * sqrt(abs(FTy^ * FTx^)/(sqr(FTx^) + sqr(y2) + 1E-20));
+
+ if (FTy^ < 0) then begin
+ FPx^ := FPx^ + FTx^ * r;
+ FPy^ := FPy^ + r * y2;
+ end else begin
+ FPx^ := FPx^ + sx * FTx^ * r;
+ FPy^ := FPy^ + sy * r * y2;
+ end;
+
+ if (sz <> 0) then
+ FPz^ := FPz^ + sz * r * abs(FTx^); //* Hypot(FTx^, FTy^);
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationButterfly.Create;
+begin
+ sx := 1;
+ sy := 1;
+ sz := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationButterfly.GetInstance: TBaseVariation;
+begin
+ Result := TVariationButterfly.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationButterfly.GetName: string;
+begin
+ Result := 'butterfly';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationButterfly.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := str_sx;
+ 1: Result := str_sy;
+ 2: Result := str_sz;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationButterfly.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = str_sx then begin
+ if (value < 0) then value := abs(value);
+ sx := Value;
+ Result := True;
+ end else if Name = str_sy then begin
+ if (value < 0) then value := abs(value);
+ sy := Value;
+ Result := True;
+ end else if Name = str_sz then begin
+ if (value < -0.1) then value := -0.1;
+ sz := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationButterfly.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = str_sx then begin
+ sx := 1;
+ Result := True;
+ end else if Name = str_sy then begin
+ sy := 1;
+ Result := True;
+ end else if Name = str_sz then begin
+ sz := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationButterfly.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationButterfly.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = str_sx then begin
+ Value := sx;
+ Result := True;
+ end else if Name = str_sy then begin
+ Value := sy;
+ Result := True;
+ end else if Name = str_sz then begin
+ Value := sz;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationButterfly), true, false);
+end.
diff --git a/Variations/varBwraps.pas b/Variations/varBwraps.pas
new file mode 100644
index 0000000..49ca0c2
--- /dev/null
+++ b/Variations/varBwraps.pas
@@ -0,0 +1,238 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varBwraps;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationBwraps = class(TBaseVariation)
+ private
+ bwraps_cellsize, bwraps_space, bwraps_gain,
+ bwraps_inner_twist, bwraps_outer_twist,
+ g2, r2, rfactor: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationBwraps.Prepare;
+var
+ max_bubble, radius: double;
+begin
+ radius := 0.5 * (bwraps_cellsize / (1.0 + sqr(bwraps_space)));
+ g2 := sqr(bwraps_gain) / (radius + 1e-6) + 1e-6;
+ max_bubble := g2 * radius;
+
+ if (max_bubble > 2.0) then max_bubble := 1.0
+ else max_bubble := max_bubble * (1.0 / (sqr(max_bubble)/4.0 + 1.0));
+
+ r2 := sqr(radius);
+ rfactor := radius / max_bubble;
+end;
+
+procedure TVariationBwraps.CalcFunction;
+var
+ Vx, Vy,
+ Cx, Cy,
+ Lx, Ly,
+ r, theta, s, c : double;
+begin
+ Vx := FTx^;
+ Vy := FTy^;
+
+ if (bwraps_cellsize = 0.0) then
+ begin
+ FPx^ := FPx^ + VVAR * FTx^;
+ FPy^ := FPy^ + VVAR * FTy^;
+ FPz^ := FPz^ + VVAR * FTz^;
+ end else
+ begin
+ Cx := (floor(Vx / bwraps_cellsize) + 0.5) * bwraps_cellsize;
+ Cy := (floor(Vy / bwraps_cellsize) + 0.5) * bwraps_cellsize;
+
+ Lx := Vx - Cx;
+ Ly := Vy - Cy;
+
+ if ((sqr(Lx) + sqr(Ly)) > r2) then
+ begin
+ FPx^ := FPx^ + VVAR * FTx^;
+ FPy^ := FPy^ + VVAR * FTy^;
+ FPz^ := FPz^ + VVAR * FTz^;
+ end else
+ begin
+ Lx := Lx * g2;
+ Ly := Ly * g2;
+
+ r := rfactor / ((sqr(Lx) + sqr(Ly)) / 4.0 + 1);
+
+ Lx := Lx * r;
+ Ly := Ly * r;
+
+ r := (sqr(Lx) + sqr(Ly)) / r2;
+ theta := bwraps_inner_twist * (1.0 - r) + bwraps_outer_twist * r;
+ SinCos(theta, s, c);
+
+ Vx := Cx + c * Lx + s * Ly;
+ Vy := Cy - s * Lx + c * Ly;
+
+ FPx^ := FPx^ + VVAR * Vx;
+ FPy^ := FPy^ + VVAR * Vy;
+ FPz^ := FPz^ + VVAR * FTz^;
+ end;
+ end;
+
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationBwraps.Create;
+begin
+ bwraps_cellsize := 1;
+ bwraps_space := 0;
+ bwraps_gain := 1;
+ bwraps_inner_twist := 0;
+ bwraps_outer_twist := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBwraps.GetInstance: TBaseVariation;
+begin
+ Result := TVariationBwraps.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationBwraps.GetName: string;
+begin
+ Result := 'bwraps';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBwraps.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'bwraps_cellsize';
+ 1: Result := 'bwraps_space';
+ 2: Result := 'bwraps_gain';
+ 3: Result := 'bwraps_inner_twist';
+ 4: Result := 'bwraps_outer_twist';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBwraps.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'bwraps_cellsize' then begin
+ bwraps_cellsize := Value;
+ Result := True;
+ end else if Name = 'bwraps_space' then begin
+ bwraps_space := Value;
+ Result := True;
+ end else if Name = 'bwraps_gain' then begin
+ bwraps_gain := Value;
+ Result := True;
+ end else if Name = 'bwraps_inner_twist' then begin
+ bwraps_inner_twist := Value;
+ Result := True;
+ end else if Name = 'bwraps_outer_twist' then begin
+ bwraps_outer_twist := Value;
+ Result := True;
+ end
+end;
+function TVariationBwraps.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'bwraps_cellsize' then begin
+ bwraps_cellsize := 1;
+ Result := True;
+ end else if Name = 'bwraps_space' then begin
+ bwraps_space := 0;
+ Result := True;
+ end else if Name = 'bwraps_gain' then begin
+ bwraps_gain := 1;
+ Result := True;
+ end else if Name = 'bwraps_inner_twist' then begin
+ bwraps_inner_twist := 0;
+ Result := True;
+ end else if Name = 'bwraps_outer_twist' then begin
+ bwraps_outer_twist := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBwraps.GetNrVariables: integer;
+begin
+ Result := 5
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationBwraps.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'bwraps_cellsize' then begin
+ if Value = 0 then Value := 1e-6;
+ Value := bwraps_cellsize;
+ Result := True;
+ end else if Name = 'bwraps_space' then begin
+ Value := bwraps_space;
+ Result := True;
+ end else if Name = 'bwraps_gain' then begin
+ Value := bwraps_gain;
+ Result := True;
+ end else if Name = 'bwraps_inner_twist' then begin
+ Value := bwraps_inner_twist;
+ Result := True;
+ end else if Name = 'bwraps_outer_twist' then begin
+ Value := bwraps_outer_twist;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationBwraps), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varCircleCrop.pas b/Variations/varCircleCrop.pas
new file mode 100644
index 0000000..15cdd7e
--- /dev/null
+++ b/Variations/varCircleCrop.pas
@@ -0,0 +1,233 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varCircleCrop;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationCircleCrop = class(TBaseVariation)
+
+ const
+ sx : string = 'circlecrop_x';
+ sy : string = 'circlecrop_y';
+ sradius : string = 'circlecrop_radius';
+ szero : string = 'circlecrop_zero';
+ sarea : string = 'circlecrop_scatter_area';
+ srewrite: string = 'circlecrop_rewrite_xy'; // AV
+
+ private
+ x0, y0, radius, scatter_area, ca: double;
+ zero, rewrite: byte;
+ resetpoint: boolean;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+
+implementation
+uses
+ Math;
+
+{ TVariationCircleCrop }
+
+//////////////////////////////////////////
+
+procedure TVariationCircleCrop.Prepare;
+begin
+ ca := max(-1.0, min(scatter_area, 1.0));
+ resetpoint := (rewrite = 1);
+end;
+
+procedure TVariationCircleCrop.CalcFunction;
+var
+ x, y, rad, ang, rdc, sn, cn: double;
+begin
+ x := FTx^ - x0;
+ y := FTy^ - y0;
+ rad := Hypot(x, y);
+
+ if resetpoint then
+ begin
+ FTx^ := x;
+ FTy^ := y;
+ end;
+
+ if (rad > radius) then
+ begin
+ if (zero = 1) then
+ begin
+ if resetpoint then
+ begin
+ FPx^ := 0;
+ FPy^ := 0;
+ end else
+ begin
+ FPx^ := FPx^;
+ FPy^ := FPy^;
+ end;
+ end else
+ begin
+ ang := arctan2(y, x);
+ SinCos(ang, sn, cn);
+ rdc := radius + (random * 0.5 * ca);
+
+ FPx^ := FPx^ + vvar * rdc * cn + x0;
+ FPy^ := FPy^ + vvar * rdc * sn + y0;
+ end;
+ end else
+ begin
+ FPx^ := FPx^ + vvar * x + x0;
+ FPy^ := FPy^ + vvar * y + y0;
+ end;
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+constructor TVariationCircleCrop.Create;
+begin
+ x0 := 0;
+ y0 := 0;
+ radius := 1;
+ scatter_area := 0;
+ zero := 0;
+ rewrite := 1;
+end;
+
+class function TVariationCircleCrop.GetInstance: TBaseVariation;
+begin
+ Result := TVariationCircleCrop.Create;
+end;
+
+class function TVariationCircleCrop.GetName: string;
+begin
+ Result := 'circlecrop';
+end;
+
+function TVariationCircleCrop.GetNrVariables: integer;
+begin
+ Result := 6;
+end;
+
+function TVariationCircleCrop.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = sx then begin
+ Value := x0;
+ Result := True;
+ end
+ else if Name = sy then begin
+ Value := y0;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ Value := radius;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ Value := scatter_area;
+ Result := True;
+ end
+ else if Name = szero then begin
+ Value := zero;
+ Result := True;
+ end else if Name = srewrite then begin
+ Value := rewrite;
+ Result := True;
+ end;
+end;
+
+function TVariationCircleCrop.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := sradius;
+ 1: Result := sx;
+ 2: Result := sy;
+ 3: Result := sarea;
+ 4: Result := szero;
+ 5: Result := srewrite;
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationCircleCrop.ResetVariable(const Name: string): boolean;
+begin
+Result := False;
+ if Name = sx then begin
+ x0 := 0;
+ Result := True;
+ end
+ else if Name = sy then begin
+ y0 := 0;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ radius := 1;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ scatter_area := 0;
+ Result := True;
+ end
+ else if Name = szero then begin
+ zero := 0;
+ Result := True;
+ end else if Name = srewrite then begin
+ rewrite := 1;
+ Result := True;
+ end;
+end;
+
+function TVariationCircleCrop.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+Result := False;
+ if Name = sx then begin
+ x0 := Value;
+ Result := True;
+ end
+ else if Name = sy then begin
+ y0 := Value;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ radius := Value;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ scatter_area := Value;
+ Result := True;
+ end
+ else if Name = szero then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ zero := Round(Value);
+ Result := True;
+ end else if Name = srewrite then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ rewrite := Round(Value);
+ Result := True;
+ end;
+end;
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationCircleCrop), true, false);
+
+end.
diff --git a/Variations/varCirclize.pas b/Variations/varCirclize.pas
new file mode 100644
index 0000000..e5aec76
--- /dev/null
+++ b/Variations/varCirclize.pas
@@ -0,0 +1,151 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varCirclize;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationCirclize = class(TBaseVariation)
+ private
+ PI_4, hole: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCirclize.Prepare;
+begin
+ PI_4 := PI * 0.25;
+end;
+
+procedure TVariationCirclize.CalcFunction;
+var
+ absx, absy, side, perimeter, r, sina, cosa: double;
+begin
+
+ absx := abs(FTx^);
+ absy := abs(FTy^);
+
+ if (absx >= absy) then
+ begin
+ if (FTx^ >= absy) then
+ perimeter := absx + FTy^
+ else perimeter := 5.0 * absx - FTy^;
+ side := absx;
+ end else
+ begin
+ if (FTy^ >= absx) then
+ perimeter := 3.0 * absy - FTx^
+ else perimeter := 7.0 * absy + FTx^;
+ side := absy;
+ end;
+
+ r := VVAR * (side + hole);
+ SinCos(PI_4 * perimeter / side - PI_4, sina, cosa);
+
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+ //FPz^ := FPz^ + vvar * FTz^;
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationCirclize.Create;
+begin
+ hole := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCirclize.GetInstance: TBaseVariation;
+begin
+ Result := TVariationCirclize.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCirclize.GetName: string;
+begin
+ Result := 'circlize2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCirclize.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'circlize2_hole';
+ else
+ Result := '';
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCirclize.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'circlize2_hole' then begin
+ hole := Value;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCirclize.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCirclize.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'circlize2_hole' then begin
+ Value := hole;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationCirclize), false, false);
+end.
\ No newline at end of file
diff --git a/Variations/varCosine.pas b/Variations/varCosine.pas
new file mode 100644
index 0000000..53c4b6e
--- /dev/null
+++ b/Variations/varCosine.pas
@@ -0,0 +1,137 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varCosine;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationCosine = class(TBaseVariation)
+ private
+ old: byte;
+ procedure CalcPlugin;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+////////////////////////
+procedure TVariationCosine.GetCalcFunction(var f: TCalcFunction);
+begin
+ if old = 1 then f := CalcFunction // Apo 2.09 version
+ else f := CalcPlugin; // cosine.dll
+end;
+
+procedure TVariationCosine.CalcFunction;
+var
+ sinx, cosx, sinhy, coshy: double;
+begin
+ SinCos(FTx^ * PI, sinx, cosx);
+ if FTy^ = 0 then
+ // sinh(0) = 0, cosh(0) = 1
+ FPx^ := FPx^ + vvar * cosx
+ else begin
+ SinhCosh(FTy^, sinhy, coshy);
+ FPx^ := FPx^ + vvar * cosx * coshy;
+ FPy^ := FPy^ - vvar * sinx * sinhy;
+ end;
+end;
+
+procedure TVariationCosine.CalcPlugin;
+var
+ sinx, cosx, sinhy, coshy: double;
+begin
+ SinCos(FTx^ * PI, sinx, cosx);
+ if FTy^ = 0 then
+ // sinh(0) = 0, cosh(0) = 1
+ FPx^ := FPx^ + vvar * cosx
+ else begin
+ SinhCosh(FTy^, sinhy, coshy);
+ FPx^ := FPx^ + vvar * cosx * coshy;
+ FPy^ := FPy^ + vvar * sinx * sinhy;
+ end;
+end;
+
+constructor TVariationCosine.Create;
+begin
+ old := 1;
+end;
+
+class function TVariationCosine.GetInstance: TBaseVariation;
+begin
+ Result := TVariationCosine.Create;
+end;
+
+class function TVariationCosine.GetName: string;
+begin
+ Result := 'cosine';
+end;
+
+function TVariationCosine.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+function TVariationCosine.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'cosine_old' then begin
+ value := old;
+ Result := True;
+ end;
+end;
+
+function TVariationCosine.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := 'cosine_old';
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationCosine.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'cosine_old' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ old := Round(value);
+ Result := True;
+ end;
+end;
+
+function TVariationCosine.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'cosine_old' then begin
+ old := 1;
+ Result := True;
+ end;
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationCosine), false, false);
+
+end.
diff --git a/Variations/varCothSpiral.pas b/Variations/varCothSpiral.pas
new file mode 100644
index 0000000..53154b7
--- /dev/null
+++ b/Variations/varCothSpiral.pas
@@ -0,0 +1,117 @@
+{
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+ "Chaotica" Copyright (C) 2019 Glare Technologies Limited
+}
+
+unit varCothSpiral;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationCothSpiral = class(TBaseVariation)
+ private
+ ta: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+
+procedure TVariationCothSpiral.CalcFunction;
+var
+ t, aux, sn, cn, snh, cnh: double;
+begin
+ t := (random - 0.5) * 6.28318530717959;
+
+ SinCos(ta * t, sn, cn);
+ SinhCosh(t, snh, cnh);
+
+ aux := (cn - cnh);
+ if aux = 0 then aux := 1e-20;
+ aux := vvar / aux;
+
+ FPx^ := FPx^ - snh * aux;
+ FPy^ := FPy^ + sn * aux;
+end;
+
+constructor TVariationCothSpiral.Create;
+begin
+ inherited Create;
+ ta := 4;
+end;
+
+class function TVariationCothSpiral.GetInstance: TBaseVariation;
+begin
+ Result := TVariationCothSpiral.Create;
+end;
+
+class function TVariationCothSpiral.GetName: string;
+begin
+ Result := 'coth_spiral';
+end;
+
+function TVariationCothSpiral.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+function TVariationCothSpiral.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'coth_spiral_a';
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationCothSpiral.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'coth_spiral_a' then begin
+ Value := ta;
+ Result := True;
+ end;
+end;
+
+function TVariationCothSpiral.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'coth_spiral_a' then begin
+ ta := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationCothSpiral.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'coth_spiral_a' then begin
+ ta := 4;
+ Result := True;
+ end;
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationCothSpiral), false, false);
+
+end.
diff --git a/Variations/varCpow3.pas b/Variations/varCpow3.pas
new file mode 100644
index 0000000..d37a655
--- /dev/null
+++ b/Variations/varCpow3.pas
@@ -0,0 +1,192 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varCpow3;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ sr = 'cpow3_r';
+ sd = 'cpow3_d';
+ sdivisor = 'cpow3_divisor';
+ sspread = 'cpow3_spread';
+
+type
+ TVariationCpow3 = class(TBaseVariation)
+ private
+ r, d1, spread: double;
+ divisor: integer;
+
+ ang, a2, d2, half_d, c2, half_c, coeff: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationCpow3 }
+
+//////////////////////////////////////////
+procedure TVariationCpow3.Prepare;
+var ca, sa: double;
+begin
+ ang := PI2 / divisor;
+ if (d1 < 0) then
+ a2 := arctan2(-ln(-d1) * r, PI2)
+ else
+ a2 := arctan2(ln(d1) * r, PI2);
+ SinCos(a2, sa, ca);
+ c2 := ca * r * ca / divisor;
+ d2 := ca * r * sa / divisor;
+ half_c := c2 * 0.5;
+ half_d := d2 * 0.5;
+ if (d2 = 0) then
+ coeff := 0
+ else
+ coeff := -0.095 * spread / d2;
+end;
+
+//////////////////////////////////////////
+procedure TVariationCpow3.CalcFunction;
+var t, sn, cn, r2, lnr2: double;
+begin
+ t := arctan2(FTy^, FTx^);
+ if (t < 0) then t := t + PI2;
+ if (cos(t * 0.5) < (2 * random - 1)) then
+ t := t - PI2;
+ if (random < 0.5) then
+ t := t + PI2 * round(ln(random) * coeff)
+ else
+ t := t - PI2 * round(ln(random) * coeff);
+ lnr2 := ln(FTx^ * FTx^ + FTy^ * FTy^);
+ r2 := vvar * exp(half_c * lnr2 - d2 * t);
+ SinCos(c2 * t + half_d * lnr2 + ang * random(32767), sn, cn);
+
+ FPx^ := FPx^ + r2 * cn;
+ FPy^ := FPy^ + r2 * sn;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+constructor TVariationCpow3.Create;
+begin
+ r := 1;
+ d1 := 1;
+ divisor := 1;
+ spread := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCpow3.GetInstance: TBaseVariation;
+begin
+ Result := TVariationCpow3.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCpow3.GetName: string;
+begin
+ Result := 'cpow3';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCpow3.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := sr;
+ 1: Result := sd;
+ 2: Result := sdivisor;
+ 3: Result := sspread;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCpow3.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sr then begin
+ r := Value;
+ Result := True;
+ end else if Name = sd then begin
+ if (Value = 0) then Value := 1;
+ d1 := value;
+ Result := True;
+ end else if Name = sdivisor then begin
+ if (Value = 0) then Value := 1;
+ divisor := Round(Value);
+ Result := True;
+ end else if Name = sspread then begin
+ spread := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationCpow3.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = sr then begin
+ r := 1;
+ Result := True;
+ end else if Name = sd then begin
+ d1 := 1;
+ Result := True;
+ end else if Name = sspread then begin
+ spread := 1;
+ Result := True;
+ end else if Name = sdivisor then begin
+ divisor := 1;
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationCpow3.GetNrVariables: integer;
+begin
+ Result := 4;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCpow3.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sr then begin
+ Value := r;
+ Result := true;
+ end
+ else if Name = sd then begin
+ Value := d1;
+ Result := true;
+ end else if Name = sspread then begin
+ Value := spread;
+ Result := true;
+ end else if Name = sdivisor then begin
+ Value := divisor;
+ Result := true;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationCpow3), false, false);
+end.
diff --git a/Variations/varCrop.pas b/Variations/varCrop.pas
new file mode 100644
index 0000000..510a26d
--- /dev/null
+++ b/Variations/varCrop.pas
@@ -0,0 +1,314 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varCrop;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationCrop = class(TBaseVariation)
+ const
+ n_x0 : string = 'crop_left';
+ n_y0 : string = 'crop_top';
+ n_x1 : string = 'crop_right';
+ n_y1 : string = 'crop_bottom';
+ n_s : string = 'crop_scatter_area';
+ n_z : string = 'crop_zero';
+ n : string = 'crop';
+ n_z1 : string = 'crop_high'; // AV
+ n_z0 : string = 'crop_low'; //AV
+ n_3D : string = 'crop_use3D'; // AV
+ private
+ x0, y0, x1, y1, z0, z1, s, w, h, l: double;
+ _x0, _y0, _x1, _y1, _z0, _z1: double;
+ z, c3D: byte;
+
+ procedure Calc2D;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCrop.Prepare;
+begin
+ if (x0 < x1) then begin
+ _x0 := x0;
+ _x1 := x1;
+ end else begin
+ _x0 := x1;
+ _x1 := x0;
+ end;
+
+ if (y0 < y1) then begin
+ _y0 := y0;
+ _y1 := y1;
+ end else begin
+ _y0 := y1;
+ _y1 := y0;
+ end;
+
+ if (z0 < z1) then begin
+ _z0 := z0;
+ _z1 := z1;
+ end else begin
+ _z0 := z1;
+ _z1 := z0;
+ end;
+
+ w := (_x1 - _x0) * 0.5 * s;
+ h := (_y1 - _y0) * 0.5 * s;
+ l := (_z1 - _z0) * 0.5 * s;
+end;
+
+///////////////////////////////////////////////////////
+procedure TVariationCrop.GetCalcFunction(var f: TCalcFunction);
+begin
+ if (c3D = 0) then f := Calc2D
+ else f := CalcFunction;
+end;
+/////////////////////////////////////////////////
+
+procedure TVariationCrop.CalcFunction;
+var x, y, tz: double;
+begin
+ x := FTx^;
+ y := FTy^;
+ tz := FTz^;
+
+ if ((x < _x0) or (x > _x1) or (y < _y0) or (y > _y1) or (tz < _z0) or (tz > _z1))
+ and (z <> 0) then begin
+ x := 0; y := 0; tz := 0;
+ end else
+ begin
+ if x < _x0 then x := _x0 + random * w
+ else if x > _x1 then x := _x1 - random * w;
+ if y < _y0 then y := _y0 + random * h
+ else if y > _y1 then y := _y1 - random * h;
+ if tz < _z0 then tz := _z0 + random * l
+ else if tz > _z1 then tz := _z1 - random * l;
+ end;
+
+ FPx^ := FPx^ + VVAR * x;
+ FPy^ := FPy^ + VVAR * y;
+ FPz^ := FPz^ + VVAR * tz; // AV
+end;
+
+procedure TVariationCrop.Calc2D;
+var x, y: double;
+begin
+ x := FTx^;
+ y := FTy^;
+
+ if ((x < _x0) or (x > _x1) or (y < _y0) or (y > _y1)) and (z <> 0) then begin
+ x := 0; y := 0;
+ end else
+ begin
+ if x < _x0 then x := _x0 + random * w
+ else if x > _x1 then x := _x1 - random * w;
+ if y < _y0 then y := _y0 + random * h
+ else if y > _y1 then y := _y1 - random * h;
+ end;
+
+ FPx^ := FPx^ + VVAR * x;
+ FPy^ := FPy^ + VVAR * y;
+ FPz^ := FPz^ + vvar * FTz^; // AV: for backward compatibility only
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationCrop.Create;
+begin
+ x0 := -1; x1 := 1;
+ y0 := -1; y1 := 1;
+ z0 := -1; z1 := 1;
+ c3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCrop.GetInstance: TBaseVariation;
+begin
+ Result := TVariationCrop.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCrop.GetName: string;
+begin
+ Result := n;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCrop.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := n_x0;
+ 1: Result := n_y0;
+ 2: Result := n_x1;
+ 3: Result := n_y1;
+ 4: Result := n_z0;
+ 5: Result := n_z1;
+ 6: Result := n_s;
+ 7: Result := n_z;
+ 8: Result := n_3D;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCrop.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ x0 := Value;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := Value;
+ Result := True;
+ end else if Name = n_x1 then begin
+ x1 := Value;
+ Result := True;
+ end else if Name = n_y1 then begin
+ y1 := Value;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := Value;
+ Result := True;
+ end else if Name = n_z1 then begin
+ z1 := Value;
+ Result := True;
+ end else if Name = n_s then begin
+ if (Value < -1) then Value := -1;
+ if (Value > 1) then Value := 1;
+ s := Value;
+ Result := True;
+ end else if Name = n_z then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ z := Round(Value);
+ Result := True;
+ end else if Name = n_3D then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ c3D := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationCrop.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ x0 := -1;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := -1;
+ Result := True;
+ end else if Name = n_x1 then begin
+ x1 := 1;
+ Result := True;
+ end else if Name = n_y1 then begin
+ y1 := 1;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := -1;
+ Result := True;
+ end else if Name = n_z1 then begin
+ z1 := 1;
+ Result := True;
+ end else if Name = n_s then begin
+ s := 0;
+ Result := True;
+ end else if Name = n_z then begin
+ z := 0;
+ Result := True;
+ end else if Name = n_3D then begin
+ c3D := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCrop.GetNrVariables: integer;
+begin
+ Result := 9
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCrop.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ Value := x0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ Value := y0;
+ Result := True;
+ end else if Name = n_x1 then begin
+ Value := x1;
+ Result := True;
+ end else if Name = n_y1 then begin
+ Value := y1;
+ Result := True;
+ end else if Name = n_z0 then begin
+ Value := z0;
+ Result := True;
+ end else if Name = n_z1 then begin
+ Value := z1;
+ Result := True;
+ end else if Name = n_s then begin
+ Value := s;
+ Result := True;
+ end else if Name = n_z then begin
+ Value := z;
+ Result := True;
+ end else if Name = n_3D then begin
+ Value := c3D;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationCrop), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varCurl.pas b/Variations/varCurl.pas
new file mode 100644
index 0000000..08321da
--- /dev/null
+++ b/Variations/varCurl.pas
@@ -0,0 +1,418 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varCurl;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ variation_name = 'curl';
+ num_vars = 2;
+ var_c1_name='curl_c1';
+ var_c2_name='curl_c2';
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+// z
+// The formula is: f(z) = ------------------- , where z = complex (x + i*y)
+// c2*(z^2) + c1*z + 1
+
+type
+ TVariationCurl = class(TBaseVariation)
+ private
+ c2, c1: double;
+
+ c2x2: double;
+
+ procedure CalcZeroC2;
+ procedure CalcZeroC1;
+ procedure CalcZeroC2C1;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ math;
+
+// TVariationCurl
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationCurl.Create;
+begin
+ // seriously?
+ (*c1 := random;
+ c2 := random;
+
+ case random(3) of
+ 0: c1 := 0;
+ 1: c2 := 0;
+ {else: do nothing}
+ end;*)
+ c1 := 0;
+ c2 := 0;
+end;
+
+procedure TVariationCurl.Prepare;
+begin
+ c2x2 := 2 * c2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCurl.GetCalcFunction(var f: TCalcFunction);
+begin
+ if IsZero(c1) then begin
+ if IsZero(c2) then
+ f := CalcZeroC2C1
+ else
+ f := CalcZeroC1
+ end
+ else begin
+ if IsZero(c2) then
+ f := CalcZeroC2
+ else
+ f := CalcFunction
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCurl.CalcFunction;
+{$ifndef _ASM_}
+var
+ r: double;
+ re, im: double;
+begin
+ re := 1 + c1*FTx^ + c2*(sqr(FTx^) - sqr(FTy^));
+ im := c1*FTy^ + c2x2*FTx^*FTy^;
+
+ r := vvar / (sqr(re) + sqr(im));
+
+ FPx^ := FPx^ + (FTx^*re + FTy^*im) * r;
+ FPy^ := FPy^ + (FTy^*re - FTx^*im) * r;
+ FPz^ := FPz^ + vvar * FTz^;
+ {$else}
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fmul st, st(1)
+ fmul qword ptr [eax + c2x2]
+ fld st(2)
+ fmul qword ptr [eax + c1]
+ faddp
+ fld st(2)
+ fmul st, st
+ fld st(2)
+ fmul st, st
+ fsubrp
+ fmul qword ptr [eax + c2]
+ fld1
+ faddp
+ fld st(2)
+ fmul qword ptr [eax + c1]
+ faddp
+
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+
+ fld st(3)
+ fmul st, st(2)
+ fld st(5)
+ fmul st, st(4)
+ faddp
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fxch st(4)
+ fmulp
+ fxch st(2)
+ fmulp
+ fsubp
+ fmulp
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+{$endif}
+end;
+
+procedure TVariationCurl.CalcZeroC2; // AV: Mobius case
+{$ifndef _ASM_}
+var
+ r: double;
+ re, im: double;
+begin
+ re := 1 + c1*FTx^;
+ im := c1*FTy^;
+
+ r := vvar / (sqr(re) + sqr(im));
+
+ FPx^ := FPx^ + (FTx^*re + FTy^*im) * r;
+ FPy^ := FPy^ + (FTy^*re - FTx^*im) * r;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fld qword ptr [eax + c1]
+ fmul st(1), st
+ fmul st, st(2)
+ fld1
+ faddp
+
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+
+ fld st(3)
+ fmul st, st(2)
+ fld st(5)
+ fmul st, st(4)
+ faddp
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fxch st(4)
+ fmulp
+ fxch st(2)
+ fmulp
+ fsubp
+ fmulp
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+{$endif}
+end;
+
+procedure TVariationCurl.CalcZeroC1;
+{$ifndef _ASM_}
+var
+ r: double;
+ re, im: double;
+begin
+ re := 1 + c2*(sqr(FTx^) - sqr(FTy^));
+ im := c2x2*FTx^*FTy^;
+
+ r := vvar / (sqr(re) + sqr(im));
+
+ FPx^ := FPx^ + (FTx^*re + FTy^*im) * r;
+ FPy^ := FPy^ + (FTy^*re - FTx^*im) * r;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fmul st, st(1)
+ fmul qword ptr [eax + c2x2]
+ fld st(2)
+ fmul st, st
+ fld st(2)
+ fmul st, st
+ fsubrp
+ fmul qword ptr [eax + c2]
+ fld1
+ faddp
+
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+
+ fld st(3)
+ fmul st, st(2)
+ fld st(5)
+ fmul st, st(4)
+ faddp
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fxch st(4)
+ fmulp
+ fxch st(2)
+ fmulp
+ fsubp
+ fmulp
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+ //fwait
+{$endif}
+end;
+
+procedure TVariationCurl.CalcZeroC2C1; // AV: linear case
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ FPx^ := FPx^ + vvar * FTx^;
+ FPy^ := FPy^ + vvar * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 8] // FTy
+ fmul st, st(1)
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ //fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCurl.GetInstance: TBaseVariation;
+begin
+ Result := TVariationCurl.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCurl.GetName: string;
+begin
+ Result := variation_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCurl.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := var_c1_name;
+ 1: Result := var_c2_name;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCurl.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_c1_name then begin
+ c1 := value;
+ Result := True;
+ end
+ else if Name = var_c2_name then begin
+ c2 := value;
+ Result := True;
+ end;
+end;
+
+function TVariationCurl.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = var_c1_name then begin
+ c1 := 0;
+ Result := True;
+ end
+ else if Name = var_c2_name then begin
+ c2 := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCurl.GetNrVariables: integer;
+begin
+ Result := num_vars;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCurl.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_c1_name then begin
+ value := c1;
+ Result := True;
+ end
+ else if Name = var_c2_name then begin
+ value := c2;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationCurl), true, false);
+end.
diff --git a/Variations/varCurl3D.pas b/Variations/varCurl3D.pas
new file mode 100644
index 0000000..1d58aaf
--- /dev/null
+++ b/Variations/varCurl3D.pas
@@ -0,0 +1,294 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varCurl3D;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ variation_name = 'curl3D';
+ num_vars = 3;
+ var_cx_name = 'curl3D_cx';
+ var_cy_name = 'curl3D_cy';
+ var_cz_name = 'curl3D_cz';
+
+type
+ TVariationCurl3D = class(TBaseVariation)
+ private
+ cx, cy, cz: double;
+
+ cx2, cy2, cz2, c2,
+ c2x, c2y, c2z: double;
+
+ procedure CalcCx;
+ procedure CalcCy;
+ procedure CalcCz;
+ procedure CalcLinear;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+// TVariationCurl3D
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationCurl3D.Create;
+//var rnd: double;
+begin
+ //rnd := 2*random - 1;
+
+ // which maniac made this??
+ {case random(3) of
+ 0: cx := rnd;
+ 1: cy := rnd;
+ 2: cz := rnd;
+ end;}
+ cy := 0; cy := 0; cz := 0;
+end;
+
+procedure TVariationCurl3D.Prepare;
+begin
+ c2x := 2 * cx;
+ c2y := 2 * cy;
+ c2z := 2 * cz;
+
+ cx2 := sqr(cx);
+ cy2 := sqr(cy);
+ cz2 := sqr(cz);
+
+ c2 := cx2 + cy2 + cz2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCurl3D.GetCalcFunction(var f: TCalcFunction);
+begin
+{
+ if IsZero(cx) and IsZero(cy) and IsZero(cz) then f := CalcLinear
+ else
+ if IsZero(cx) and IsZero(cy) then f := CalcCz
+ else
+ if IsZero(cy) and IsZero(cz) then f := CalcCx
+ else
+ if IsZero(cz) and IsZero(cx) then f := CalcCy
+ else
+ f := CalcFunction;
+}
+ if IsZero(cx) then begin
+ if IsZero(cy) then begin
+ if IsZero(cz) then
+ f := CalcLinear
+ else
+ f := CalcCz;
+ end
+ else begin
+ if IsZero(cz) then
+ f := CalcCy
+ else
+ f := CalcFunction;
+ end
+ end
+ else begin
+ if IsZero(cy) and IsZero(cz) then
+ f := CalcCx
+ else
+ f := CalcFunction;
+ end;
+
+ f := CalcFunction; // AV: always?
+
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCurl3D.CalcFunction;
+var
+ r, r2: double;
+begin
+ r2 := sqr(FTx^) + sqr(FTy^) + sqr(Ftz^);
+ r := vvar / (r2*c2 + c2x*FTx^ - c2y*FTy^ + c2z*FTz^ + 1);
+
+ FPx^ := FPx^ + r * (FTx^ + cx*r2);
+ FPy^ := FPy^ + r * (FTy^ - cy*r2);
+ FPz^ := FPz^ + r * (FTz^ + cz*r2);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCurl3D.CalcCx;
+var
+ x, r, r2: double;
+begin
+ r2 := sqr(FTx^) + sqr(FTy^) + sqr(Ftz^);
+
+ r := vvar / (cx2*r2 + c2x*FTx^ + 1);
+
+ FPx^ := FPx^ + r * (FTx^ + cx*r2);
+ FPy^ := FPy^ + r * FTy^;
+ FPz^ := FPz^ + r * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCurl3D.CalcCy;
+var
+ r, r2: double;
+begin
+ r2 := sqr(FTx^) + sqr(FTy^) + sqr(Ftz^);
+
+ r := vvar / (cy2*r2 - c2y*FTy^ + 1);
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ + r * (FTy^ - cy*r2);
+ FPz^ := FPz^ + r * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCurl3D.CalcCz;
+var
+ r, r2: double;
+begin
+ r2 := sqr(FTx^) + sqr(FTy^) + sqr(Ftz^);
+
+ r := vvar / (cz2*r2 + c2z*FTz^ + 1);
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ + r * FTy^;
+ FPz^ := FPz^ + r * (FTz^ + cz*r2);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationCurl3D.CalcLinear;
+var
+ r: double;
+begin
+ FPx^ := FPx^ + vvar * FTx^;
+ FPy^ := FPy^ + vvar * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCurl3D.GetInstance: TBaseVariation;
+begin
+ Result := TVariationCurl3D.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationCurl3D.GetName: string;
+begin
+ Result := variation_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCurl3D.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := var_cx_name;
+ 1: Result := var_cy_name;
+ 2: Result := var_cz_name;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCurl3D.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_cx_name then begin
+ cx := value;
+ Result := True;
+ end
+ else if Name = var_cy_name then begin
+ cy := value;
+ Result := True;
+ end
+ else if Name = var_cz_name then begin
+ cz := value;
+ Result := True;
+ end;
+end;
+
+function TVariationCurl3D.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = var_cx_name then begin
+ cx := 0;
+ Result := True;
+ end
+ else if Name = var_cy_name then begin
+ cy := 0;
+ Result := True;
+ end
+ else if Name = var_cz_name then begin
+ cz := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCurl3D.GetNrVariables: integer;
+begin
+ Result := num_vars;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationCurl3D.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_cx_name then begin
+ value := cx;
+ Result := True;
+ end
+ else if Name = var_cy_name then begin
+ value := cy;
+ Result := True;
+ end
+ else if Name = var_cz_name then begin
+ value := cz;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationCurl3D), true, false);
+end.
diff --git a/Variations/varDCBubble.pas b/Variations/varDCBubble.pas
new file mode 100644
index 0000000..f5835a3
--- /dev/null
+++ b/Variations/varDCBubble.pas
@@ -0,0 +1,256 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varDCBubble;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+{$ifndef Apo7X64}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationDCBubble = class(TBaseVariation)
+ private
+ centerx, centery, scale, bdcs, cden: double;
+ style: byte;
+
+ procedure CalcBubble;
+ procedure CalcNewStyle;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationDCBubble }
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationDCBubble.Prepare;
+begin
+ if (scale = 0) then
+ bdcs := 10E-6
+ else
+ bdcs := 1 / scale;
+ cden := bdcs /(2 * pi);
+end;
+
+procedure TVariationDCBubble.GetCalcFunction(var f: TCalcFunction);
+begin
+ if style = 0 then
+ f := CalcFunction
+ else
+ f := CalcNewStyle;
+end;
+
+procedure TVariationDCBubble.CalcBubble;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := (sqr(FTx^) + sqr(FTy^))/4 + 1;
+ FPz^ := FPz^ + VVAR * (2 / r - 1); // AV: fixed inversion
+
+ r := VVAR / r;
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ + r * FTy^;
+{$else}
+ asm // AV: added asm-code for speed
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 8]
+ fld qword ptr [edx]
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fld1
+ fadd st, st
+ fadd st, st
+ fdivp st(1), st
+
+ fld qword ptr [eax + vvar]
+ fld1
+ fadd st(2), st
+ fdivr st(2), st
+
+ fld st(2)
+ fadd st, st
+ fsubrp st(1), st
+ fmul st, st(1)
+ fadd qword ptr [edx + 40]
+ fstp qword ptr [edx + 40]
+
+ fmulp
+
+ fmul st(2), st
+ fmulp
+ fadd qword ptr [edx + 16]
+ fstp qword ptr [edx + 16]
+ fadd qword ptr [edx + 24]
+ fstp qword ptr [edx + 24]
+ fwait
+{$endif}
+end;
+
+procedure TVariationDCBubble.CalcFunction;
+begin
+ CalcBubble;
+ color^ := fmod(abs(bdcs * (sqr(FPx^ + centerx) + sqr(FPy^ + centery))), 1.0);
+end;
+
+procedure TVariationDCBubble.CalcNewStyle;
+begin
+ CalcBubble;
+ color^ := fmod(abs(cden * arctan2(FPy^ + centery, FPx^ - centerx)), 1.0);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationDCBubble.Create;
+begin
+ centerx := 0;
+ centery := 0;
+ scale := 1.0;
+ style := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationDCBubble.GetInstance: TBaseVariation;
+begin
+ Result := TVariationDCBubble.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationDCBubble.GetName: string;
+begin
+ Result := 'dc_bubble';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationDCBubble.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'dc_bubble_centerx';
+ 1: Result := 'dc_bubble_centery';
+ 2: Result := 'dc_bubble_scale';
+ 3: Result := 'dc_bubble_style';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationDCBubble.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'dc_bubble_centerx' then begin
+ centerx := Value;
+ Result := True;
+ end else if Name = 'dc_bubble_centery' then begin
+ centery := Value;
+ Result := True;
+ end
+ else if Name = 'dc_bubble_scale' then begin
+ scale := Value;
+ Result := True;
+ end
+ else if Name = 'dc_bubble_style' then begin
+ if (Value < 0) then Value := 0;
+ if (Value > 1) then Value := 1;
+ style := Round(Value);
+ Result := True;
+ end
+end;
+
+function TVariationDCBubble.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'dc_bubble_centerx' then begin
+ centerx:= 0;
+ Result := True;
+ end else if Name = 'dc_bubble_centery' then begin
+ centery := 0;
+ Result := True;
+ end else if Name = 'dc_bubble_scale' then begin
+ scale := 1;
+ Result := True;
+ end else if Name = 'dc_bubble_style' then begin
+ style := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationDCBubble.GetNrVariables: integer;
+begin
+ Result := 4;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationDCBubble.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'dc_bubble_centerx' then begin
+ Value := centerx;
+ Result := True;
+ end else if Name = 'dc_bubble_centery' then begin
+ Value := centery;
+ Result := True;
+ end
+ else if Name = 'dc_bubble_scale' then begin
+ Value := scale;
+ Result := True;
+ end
+ else if Name = 'dc_bubble_style' then begin
+ Value := style;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationDCBubble), true, true);
+end.
diff --git a/Variations/varDisc2.pas b/Variations/varDisc2.pas
new file mode 100644
index 0000000..18d47c9
--- /dev/null
+++ b/Variations/varDisc2.pas
@@ -0,0 +1,164 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varDisc2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationDisc2 = class(TBaseVariation)
+ private
+ rot, add, c, k, sinadd, cosadd: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationDisc2 }
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationDisc2.Create;
+begin
+ rot := random + 0.5;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationDisc2.Prepare;
+var t: double;
+begin
+ c := vvar / PI;
+ k := rot * PI;
+ SinCos(add, sinadd, cosadd);
+ cosadd := cosadd - 1;
+ if (add > PI2) then begin
+ t := 1 + add - PI2;
+ cosadd := cosadd * t;
+ sinadd := sinadd * t;
+ end
+ else if (add < -PI2) then begin
+ t := 1 + add + PI2;
+ cosadd := cosadd * t;
+ sinadd := sinadd * t;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationDisc2.CalcFunction;
+{$ifndef _ASM_}
+var
+ r, sinr, cosr: extended;
+begin
+ SinCos(k * (FTx^ + FTy^), sinr, cosr);
+ r := c * arctan2(FTx^, FTy^);
+ FPx^ := FPx^ + (sinr + cosadd) * r;
+ FPy^ := FPy^ + (cosr + sinadd) * r;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx]
+ fld qword ptr [edx + 8]
+ fpatan
+ fmul qword ptr [eax + c]
+ fld qword ptr [edx]
+ fadd qword ptr [edx + 8]
+ fmul qword ptr [eax + k]
+ fsincos
+ fadd qword ptr [eax + sinadd]
+ fmul st, st(2)
+ fadd qword ptr [edx + 24]
+ fstp qword ptr [edx + 24]
+ fadd qword ptr [eax + cosadd]
+ fmulp
+ fadd qword ptr [edx + 16]
+ fstp qword ptr [edx + 16]
+{$endif}
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationDisc2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationDisc2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationDisc2.GetName: string;
+begin
+ Result := 'disc2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationDisc2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'disc2_rot';
+ 1: Result := 'disc2_twist';
+ else
+ Result := '';
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationDisc2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'disc2_rot' then
+ begin
+ rot := Value;
+ Result := True end
+ else if Name = 'disc2_twist' then
+ begin
+ add := Value;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationDisc2.GetNrVariables: integer;
+begin
+ Result := 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationDisc2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'disc2_rot' then
+ begin
+ Value := rot;
+ Result := True end
+ else if Name = 'disc2_twist' then
+ begin
+ Value := add;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationDisc2), false, false);
+end.
diff --git a/Variations/varElliptic.pas b/Variations/varElliptic.pas
new file mode 100644
index 0000000..1517759
--- /dev/null
+++ b/Variations/varElliptic.pas
@@ -0,0 +1,132 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varElliptic;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationElliptic = class(TBaseVariation)
+ private
+ v: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+
+ procedure CalcFunction; override;
+ procedure Prepare; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationElliptic.Prepare;
+begin
+ v := VVAR / (PI_2);
+end;
+
+procedure TVariationElliptic.CalcFunction;
+function sqrt_safe(x: double): double;
+ begin
+ if x < 0.0 then Result := 0.0
+ else Result := sqrt(x);
+ end;
+var
+ a, b, tmp, x2, xmax: double;
+begin
+ tmp := sqr(FTy^) + sqr(FTx^) + 1.0;
+ x2 := 2.0 * FTx^;
+ xmax := 0.5 * (sqrt(tmp + x2) + sqrt(tmp - x2));
+
+ a := FTx^ / xmax;
+ b := sqrt_safe(1.0 - sqr(a));
+
+ FPz^ := FPz^ + vvar * FTz^;
+ FPx^ := FPx^ + v * ArcTan2(a, b);
+
+ if (FTy^ > 0) then FPy^ := FPy^ + v * Ln(xmax + sqrt_safe(xmax - 1.0))
+ else FPy^ := FPy^ - v * Ln(xmax + sqrt_safe(xmax - 1.0))
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationElliptic.Create;
+begin
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationElliptic.GetInstance: TBaseVariation;
+begin
+ Result := TVariationElliptic.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationElliptic.GetName: string;
+begin
+ Result := 'elliptic';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationElliptic.GetVariableNameAt(const Index: integer): string;
+begin
+ Result := '';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationElliptic.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationElliptic.GetNrVariables: integer;
+begin
+ Result := 0
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationElliptic.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationElliptic), true, false);
+end.
diff --git a/Variations/varEpispiral.pas b/Variations/varEpispiral.pas
new file mode 100644
index 0000000..f72ebfe
--- /dev/null
+++ b/Variations/varEpispiral.pas
@@ -0,0 +1,202 @@
+ {
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+ }
+
+unit varEpispiral;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ EPS: double = 1E-6;
+type
+ TVariationEpispiral = class(TBaseVariation)
+ private
+ n, thickness, holes : double;
+ compatible : byte;
+ procedure Calc7X;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override; // AV: for speed
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationEpispiral.Create;
+begin
+ n := 6.0;
+ thickness := 0.0;
+ holes := 1.0;
+ compatible := 1;
+end;
+
+procedure TVariationEpispiral.GetCalcFunction(var f: TCalcFunction);
+begin
+ if compatible = 1 then
+ f := CalcFunction
+ else
+ f := Calc7X;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationEpispiral.CalcFunction;
+var
+ t, theta, da: double;
+begin
+ theta := arctan2(FTy^, FTx^);
+ da := cos(n * theta);
+ if (abs(da) < EPS) then da := EPS;
+ da := 1/da;
+
+ // classic version
+ if (abs(thickness) > EPS) then
+ t := (random * thickness * da) - holes
+ else
+ t := da - holes;
+ FPx^ := FPx^ + vvar * t * cos(theta);
+ FPy^ := FPy^ + vvar * t * sin(theta);
+end;
+
+procedure TVariationEpispiral.Calc7X;
+var
+ t, theta, da: double;
+begin
+ theta := arctan2(FTy^, FTx^);
+ da := cos(n * theta);
+ if (abs(da) < EPS) then da := EPS;
+ da := 1/da;
+
+ // 7X.15D version
+ t := (random * thickness * da) - holes;
+ if (t = 0) then
+ begin
+ FPx^ := FPx^;
+ FPy^ := FPy^;
+ end
+ else
+ begin
+ FPx^ := FPx^ + vvar * t * cos(theta);
+ FPy^ := FPy^ + vvar * t * sin(theta);
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationEpispiral.GetInstance: TBaseVariation;
+begin
+ Result := TVariationEpispiral.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationEpispiral.GetName: string;
+begin
+ Result := 'Epispiral';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationEpispiral.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'Epispiral_n';
+ 1: Result := 'Epispiral_thickness';
+ 2: Result := 'Epispiral_holes';
+ 3: Result := 'Epispiral_old';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationEpispiral.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'Epispiral_n' then begin
+ n := Value;
+ Result := True;
+ end else if Name = 'Epispiral_thickness' then begin
+ thickness := Value;
+ Result := True;
+ end
+ else if Name = 'Epispiral_holes' then begin
+ holes := Value;
+ Result := True;
+ end
+ else if Name = 'Epispiral_old' then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ compatible := Round(Value);
+ Result := True;
+ end
+end;
+
+function TVariationEpispiral.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'Epispiral_n' then begin
+ n := 6.0;
+ Result := True;
+ end else if Name = 'Epispiral_thickness' then begin
+ thickness := 0.0;
+ Result := True;
+ end
+ else if Name = 'Epispiral_holes' then begin
+ holes := 0.0;
+ Result := True;
+ end
+ else if Name = 'Epispiral_old' then begin
+ compatible := 1;
+ Result := True;
+ end
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationEpispiral.GetNrVariables: integer;
+begin
+ Result := 4;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationEpispiral.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'Epispiral_n' then begin
+ Value := n;
+ Result := True;
+ end else if Name = 'Epispiral_thickness' then begin
+ Value := thickness;
+ Result := True;
+ end
+ else if Name = 'Epispiral_holes' then begin
+ Value := holes;
+ Result := True;
+ end
+ else if Name = 'Epispiral_old' then begin
+ Value := compatible;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationEpispiral), false, false);
+end.
+
diff --git a/Variations/varEscher.pas b/Variations/varEscher.pas
new file mode 100644
index 0000000..f62a5de
--- /dev/null
+++ b/Variations/varEscher.pas
@@ -0,0 +1,147 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varEscher;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationEscher = class(TBaseVariation)
+ private
+ escher_beta, bc, bd: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationEscher.Prepare;
+begin
+ sincos(escher_beta, bd, bc);
+ bc := 0.5 * (1.0 + bc);
+ bd := 0.5 * bd;
+end;
+
+procedure TVariationEscher.CalcFunction;
+var sn, cs, ang, lnr, m : double;
+begin
+ ang := arctan2(FTy^, FTx^); // Angular polar dimension
+ lnr := 0.5 * ln(FTx^*FTx^ + FTy^*FTy^); // Natural logarithm of the radial polar dimension.
+
+ m := VVAR * exp(bc * lnr - bd * ang);
+
+ sincos(bc * ang + bd * lnr, sn, cs);
+
+ FPx^ := FPx^ + m * cs;
+ FPy^ := FPy^ + m * sn;
+
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationEscher.Create;
+begin
+ escher_beta := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationEscher.GetInstance: TBaseVariation;
+begin
+ Result := TVariationEscher.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationEscher.GetName: string;
+begin
+ Result := 'escher';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationEscher.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'escher_beta';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationEscher.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'escher_beta' then begin
+ value := frac((value + PI) / PI2) * PI2 - PI; // AV: added 2*pi precalc
+ escher_beta := Value;
+ Result := True;
+ end
+end;
+function TVariationEscher.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'escher_beta' then begin
+ escher_beta := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationEscher.GetNrVariables: integer;
+begin
+ Result := 1
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationEscher.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'escher_beta' then begin
+ Value := escher_beta;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationEscher), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varEx.pas b/Variations/varEx.pas
new file mode 100644
index 0000000..608762b
--- /dev/null
+++ b/Variations/varEx.pas
@@ -0,0 +1,141 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varEx;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationEx = class(TBaseVariation)
+ private
+ old: byte;
+ procedure CalcPlugin;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+////////////////////////
+procedure TVariationEx.GetCalcFunction(var f: TCalcFunction);
+begin
+ if old = 1 then f := CalcFunction
+ else f := CalcPlugin;
+end;
+
+procedure TVariationEx.CalcFunction;
+var
+ r: double;
+ n0, n1, m0, m1: double;
+ FAngle: double;
+begin
+ FAngle := arctan2(FTx^, FTy^);
+ r := sqrt(sqr(FTx^) + sqr(FTy^));
+ n0 := sin(FAngle + r);
+ n1 := cos(FAngle - r);
+ m0 := sqr(n0) * n0;
+ m1 := sqr(n1) * n1;
+ r := r * vvar;
+ FPx^ := FPx^ + r * (m0 + m1);
+ FPy^ := FPy^ + r * (m0 - m1);
+end;
+
+procedure TVariationEx.CalcPlugin;
+var
+ r: double;
+ n0, n1, m0, m1: double;
+ FAngle: double;
+begin
+ FAngle := arctan2(FTy^, FTx^);
+ r := sqrt(sqr(FTx^) + sqr(FTy^));
+ n0 := sin(FAngle + r);
+ n1 := cos(FAngle - r);
+ m0 := sqr(n0) * n0;
+ m1 := sqr(n1) * n1;
+ r := r * vvar;
+ FPx^ := FPx^ + r * (m0 + m1);
+ FPy^ := FPy^ + r * (m0 - m1);
+end;
+
+constructor TVariationEx.Create;
+begin
+ old := 1;
+end;
+
+class function TVariationEx.GetInstance: TBaseVariation;
+begin
+ Result := TVariationEx.Create;
+end;
+
+class function TVariationEx.GetName: string;
+begin
+ Result := 'ex';
+end;
+
+function TVariationEx.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+function TVariationEx.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'ex_old' then begin
+ value := old;
+ Result := True;
+ end;
+end;
+
+function TVariationEx.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := 'ex_old';
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationEx.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'ex_old' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ old := Round(value);
+ Result := True;
+ end;
+end;
+
+function TVariationEx.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'ex_old' then begin
+ old := 1;
+ Result := True;
+ end;
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationEx), false, false);
+
+end.
diff --git a/Variations/varExponential.pas b/Variations/varExponential.pas
new file mode 100644
index 0000000..1565456
--- /dev/null
+++ b/Variations/varExponential.pas
@@ -0,0 +1,98 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varExponential;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+ {$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationExponential = class(TBaseVariation)
+ private
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ procedure CalcFunction; override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+
+procedure TVariationExponential.CalcFunction;
+{$ifndef _ASM_}
+var
+ vex: double;
+ siny, cosy: double;
+begin
+ SinCos(PI * FTy^, siny, cosy);
+ vex := vvar * exp(FTx^ - 1);
+ FPx^ := FPx^ + cosy * vex;
+ FPy^ := FPy^ + siny * vex;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx]
+ fld1
+ fsubp st(1), st
+ // here goes exp(x) code from System.pas
+ FLDL2E
+ FMUL
+ FLD ST(0)
+ FRNDINT
+ FSUB ST(1), ST
+ FXCH ST(1)
+ F2XM1
+ FLD1
+ FADD
+ FSCALE
+ FSTP ST(1)
+ // -----
+ fmul qword ptr [eax + vvar]
+ fld qword ptr [edx + 8]
+ fldpi
+ fmulp
+ fsincos
+ fmul st, st(2)
+ fadd qword ptr [edx + 16]
+ fstp qword ptr [edx + 16]
+ fmulp
+ fadd qword ptr [edx + 24]
+ fstp qword ptr [edx + 24]
+ fwait
+{$endif}
+end;
+
+constructor TVariationExponential.Create;
+begin
+ inherited Create;
+end;
+
+class function TVariationExponential.GetInstance: TBaseVariation;
+begin
+ Result := TVariationExponential.Create;
+end;
+
+class function TVariationExponential.GetName: string;
+begin
+ Result := 'exponential';
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationExponential), false, false);
+
+end.
diff --git a/Variations/varFalloff2.pas b/Variations/varFalloff2.pas
new file mode 100644
index 0000000..df1d0d1
--- /dev/null
+++ b/Variations/varFalloff2.pas
@@ -0,0 +1,348 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varFalloff2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationFalloff2 = class(TBaseVariation)
+ const
+ n_scatter : string = 'falloff2_scatter';
+ n_mindist : string = 'falloff2_mindist';
+ n_mul_x : string = 'falloff2_mul_x';
+ n_mul_y : string = 'falloff2_mul_y';
+ n_mul_z : string = 'falloff2_mul_z';
+ n_mul_c : string = 'falloff2_mul_c';
+ n_x0 : string = 'falloff2_x0';
+ n_y0 : string = 'falloff2_y0';
+ n_z0 : string = 'falloff2_z0';
+ n_invert : string = 'falloff2_invert';
+ n_blurtype : string = 'falloff2_type';
+
+ private
+ rmax: double;
+ x0, y0, z0: double;
+ scatter, mindist: double;
+ invert, blurtype: integer;
+ mul_x, mul_y, mul_z, mul_c: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure CalcFunctionRadial;
+ procedure CalcFunctionGaussian;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationFalloff2.Prepare;
+begin
+ rmax := 0.04 * scatter;
+end;
+
+procedure TVariationFalloff2.GetCalcFunction(var f: TCalcFunction);
+begin
+ if blurtype = 1 then f := CalcFunctionRadial
+ else if blurtype = 2 then f := CalcFunctionGaussian
+ else f := CalcFunction;
+end;
+procedure TVariationFalloff2.CalcFunction;
+var
+ in_x, in_y, in_z, d: double;
+begin
+ in_x := FTx^;
+ in_y := FTy^;
+ in_z := FTz^;
+
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ FPx^ := FPx^ + VVAR * (in_x + mul_x * random * d);
+ FPy^ := FPy^ + VVAR * (in_y + mul_y * random * d);
+ FPz^ := FPz^ + VVAR * (in_z + mul_z * random * d);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+procedure TVariationFalloff2.CalcFunctionRadial;
+var
+ in_x, in_y, in_z, d, r_in: double;
+ sigma, phi, r, sins, coss, sinp, cosp: double;
+begin
+ in_x := FTx^;
+ in_y := FTy^;
+ in_z := FTz^;
+
+ r_in := sqrt(sqr(in_x) + sqr(in_y) + sqr(in_z)) + 1e-6;
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ sigma := ArcSin(in_z / r_in) + mul_z * random * d;
+ phi := ArcTan2(in_y, in_x) + mul_y * random * d;
+ r := r_in + mul_x * random * d;
+
+ SinCos(sigma, sins, coss);
+ SinCos(phi, sinp, cosp);
+
+ FPx^ := FPx^ + VVAR * (r * coss * cosp);
+ FPy^ := FPy^ + VVAR * (r * coss * sinp);
+ FPz^ := FPz^ + VVAR * (sins);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+procedure TVariationFalloff2.CalcFunctionGaussian;
+var
+ in_x, in_y, in_z, d: double;
+ sigma, phi, r, sins, coss, sinp, cosp: double;
+begin
+ in_x := FTx^;
+ in_y := FTy^;
+ in_z := FTz^;
+
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ sigma := d * random * 2 * PI;
+ phi := d * random * PI;
+ r := d * random;
+
+ SinCos(sigma, sins, coss);
+ SinCos(phi, sinp, cosp);
+
+ FPx^ := FPx^ + VVAR * (in_x + mul_x * r * coss * cosp);
+ FPy^ := FPy^ + VVAR * (in_y + mul_y * r * coss * sinp);
+ FPz^ := FPz^ + VVAR * (in_z + mul_z * r * sins);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationFalloff2.Create;
+begin
+ scatter := 1;
+ mindist := 0.5;
+ mul_x := 1;
+ mul_y := 1;
+ mul_z := 0;
+ mul_c := 0;
+ x0 := 0;
+ y0 := 0;
+ z0 := 0;
+ invert := 0;
+ blurtype := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationFalloff2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationFalloff2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationFalloff2.GetName: string;
+begin
+ Result := 'falloff2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFalloff2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := n_scatter;
+ 1: Result := n_mindist;
+ 2: Result := n_mul_x;
+ 3: Result := n_mul_y;
+ 4: Result := n_mul_z;
+ 5: Result := n_mul_c;
+ 6: Result := n_x0;
+ 7: Result := n_y0;
+ 8: Result := n_z0;
+ 9: Result := n_invert;
+ 10: Result := n_blurtype;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFalloff2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ if Value < 1e-6 then Value := 1e-6;
+ scatter := Value;
+ Result := True;
+ end else if Name = n_mindist then begin
+ if Value < 0 then Value := 0;
+ mindist := Value;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_x := Value;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_y := Value;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_z := Value;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_c := Value;
+ Result := True;
+ end else if Name = n_x0 then begin
+ x0 := Value;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := Value;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := Value;
+ Result := True;
+ end else if Name = n_invert then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ invert := Round(Value);
+ Result := True;
+ end else if Name = n_blurtype then begin
+ if (Value > 2) then Value := 2;
+ if (Value < 0) then Value := 0;
+ blurtype := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationFalloff2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ scatter := 1;
+ Result := True;
+ end else if Name = n_mindist then begin
+ mindist := 0.5;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ mul_x := 1;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ mul_y := 1;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ mul_z := 0;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ mul_c := 0;
+ Result := True;
+ end else if Name = n_x0 then begin
+ x0 := 0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := 0;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := 0;
+ Result := True;
+ end else if Name = n_invert then begin
+ invert := 0;
+ Result := True;
+ end else if Name = n_blurtype then begin
+ blurtype := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFalloff2.GetNrVariables: integer;
+begin
+ Result := 11
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFalloff2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ Value := scatter;
+ Result := True;
+ end else if Name = n_mindist then begin
+ Value := mindist;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ Value := mul_x;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ Value := mul_y;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ Value := mul_z;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ Value := mul_c;
+ Result := True;
+ end else if Name = n_x0 then begin
+ Value := x0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ Value := y0;
+ Result := True;
+ end else if Name = n_z0 then begin
+ Value := z0;
+ Result := True;
+ end else if Name = n_invert then begin
+ Value := invert;
+ Result := True;
+ end else if Name = n_blurtype then begin
+ Value := blurtype;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationFalloff2), true, true);
+end.
\ No newline at end of file
diff --git a/Variations/varFan2.pas b/Variations/varFan2.pas
new file mode 100644
index 0000000..aaab564
--- /dev/null
+++ b/Variations/varFan2.pas
@@ -0,0 +1,206 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varFan2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationFan2 = class(TBaseVariation)
+ private
+ FX, FY: double;
+ dy, dx, dx2: double;
+ old: byte;
+ procedure CalcNew;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationFan2 }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationFan2.Prepare;
+const
+ EPS = 1E-10;
+begin
+ dy := FY;
+ dx := pi * (sqr(FX) + EPS);
+ dx2 := dx/2;
+end;
+
+procedure TVariationFan2.GetCalcFunction(var f: TCalcFunction);
+begin
+ if old = 1 then f := CalcFunction
+ else f := CalcNew;
+end;
+
+procedure TVariationFan2.CalcFunction;
+var
+ r, a : double;
+ sinr, cosr: double;
+ Angle: double;
+begin
+ Angle := arctan2(FTx^, FTy^);
+ if System.Frac((Angle + dy)/dx) > 0.5 then
+ a := Angle - dx2
+ else
+ a := Angle + dx2;
+ SinCos(a, sinr, cosr);
+ r := vvar * sqrt(sqr(FTx^) + sqr(FTy^));
+ FPx^ := FPx^ + r * sinr;
+ FPy^ := FPy^ + r * cosr;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationFan2.CalcNew;
+var
+ r, a : double;
+ sinr, cosr: double;
+ Angle: double;
+begin
+ Angle := arctan2(FTx^, FTy^);
+ if System.Frac((Angle + dy)/dx) > 0.5 then
+ a := Angle - dx2
+ else
+ a := Angle + dx2;
+ SinCos(a, sinr, cosr);
+ r := vvar * sqrt(sqr(FTx^) + sqr(FTy^));
+ FPx^ := FPx^ + r * cosr;
+ FPy^ := FPy^ + r * sinr;
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+constructor TVariationFan2.Create;
+begin
+ FX := 2 * Random - 1;
+ FY := 2 * Random - 1;
+ old := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+class function TVariationFan2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationFan2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationFan2.GetName: string;
+begin
+ Result := 'fan2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFan2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'fan2_x';
+ 1: Result := 'fan2_y';
+ 2: Result := 'fan2_old';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFan2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'fan2_x' then begin
+ FX := Value;
+ Result := True;
+ end else if Name = 'fan2_y' then begin
+ FY := Value;
+ Result := True;
+ end else if Name = 'fan2_old' then begin
+ if (Value < 0) then Value := 0;
+ if (Value > 1) then Value := 1;
+ old := Round(Value);
+ Result := True;
+ end
+end;
+
+function TVariationFan2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'fan2_x' then begin
+ FX := 0;
+ Result := True;
+ end else if Name = 'fan2_y' then begin
+ FY := 0;
+ Result := True;
+ end else if Name = 'fan2_old' then begin
+ old := 1;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFan2.GetNrVariables: integer;
+begin
+ Result := 3
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFan2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'fan2_x' then begin
+ Value := FX;
+ Result := True;
+ end else if Name = 'fan2_y' then begin
+ Value := FY;
+ Result := True;
+ end else if Name = 'fan2_old' then begin
+ Value := old;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationFan2), true, false);
+end.
diff --git a/Variations/varFlux.pas b/Variations/varFlux.pas
new file mode 100644
index 0000000..27c3107
--- /dev/null
+++ b/Variations/varFlux.pas
@@ -0,0 +1,148 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varFlux;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationFlux = class(TBaseVariation)
+ private
+ spread, spr: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationFlux.Prepare;
+begin
+ spr := 2 + spread;
+end;
+
+///////////////////////////////////////
+procedure TVariationFlux.CalcFunction;
+var
+ avgr, avga, xmv, xpv, frc,
+ x, y, y2, s, c: double;
+
+begin
+ // Avoid reduant calculations by precalculating everything what is used at least twice
+ x := FTx^;
+ xpv := x + VVAR;
+ xmv := x - VVAR;
+ y := FTy^;
+ y2 := sqr(y);
+
+ // We have a division by zero problem in the original flux
+ // (What if y + (x-vvar) == 0 ????)
+ frc := sqrt(y2 + sqr(xmv));
+ if (frc = 0) then frc := 1.0;
+
+ avgr := VVAR * (spr * sqrt(sqrt(y2 + sqr(xpv) ) / frc));
+ avga := (arctan2(y, xmv) - arctan2(y, xpv)) / 2.0;
+ SinCos(avga, s, c);
+
+ FPx^ := FPx^ + avgr * c;
+ FPy^ := FPy^ + avgr * s;
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationFlux.Create;
+begin
+ spread := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationFlux.GetInstance: TBaseVariation;
+begin
+ Result := TVariationFlux.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationFlux.GetName: string;
+begin
+ Result := 'flux';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFlux.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'flux_spread';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFlux.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'flux_spread' then begin
+ spread := Value;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFlux.GetNrVariables: integer;
+begin
+ Result := 1
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFlux.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'flux_spread' then begin
+ Value := spread;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationFlux), true, false);
+end.
diff --git a/Variations/varFoci.pas b/Variations/varFoci.pas
new file mode 100644
index 0000000..7758229
--- /dev/null
+++ b/Variations/varFoci.pas
@@ -0,0 +1,118 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varFoci;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationFoci = class(TBaseVariation)
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationFoci.CalcFunction;
+var
+ expx, expnx, siny, cosy, tmp: double;
+begin
+ expx := exp(FTx^) * 0.5;
+ expnx := 0.25 / expx;
+ sincos(FTy^, siny, cosy);
+
+ tmp := ( expx + expnx - cosy );
+ if (tmp = 0) then tmp := 1e-6;
+ tmp := VVAR / tmp;
+
+ FPx^ := FPx^ + (expx - expnx) * tmp;
+ FPy^ := FPy^ + siny * tmp;
+
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationFoci.Create;
+begin
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationFoci.GetInstance: TBaseVariation;
+begin
+ Result := TVariationFoci.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationFoci.GetName: string;
+begin
+ Result := 'foci';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFoci.GetVariableNameAt(const Index: integer): string;
+begin
+ Result := '';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFoci.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFoci.GetNrVariables: integer;
+begin
+ Result := 0
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationFoci.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationFoci), true, false);
+end.
diff --git a/Variations/varGenericPlugin.pas b/Variations/varGenericPlugin.pas
new file mode 100644
index 0000000..ee2f2c0
--- /dev/null
+++ b/Variations/varGenericPlugin.pas
@@ -0,0 +1,359 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+{
+ Variation Plugin DLL support for Apophysis:
+ Generic Plugin Support Unit
+ Started by Jed Kelsey, June 2007
+
+
+ Portions Copyright (C) 2008 Joel Faber
+
+ February 2008:
+ - Remove 30 plugin limit
+ - Reset variables
+}
+
+unit varGenericPlugin;
+
+interface
+
+uses
+ BaseVariation, XFormMan, Settings, // Translation,
+ Classes, //TStrings/TStringList
+ SysUtils, //FindFirst/FindNext/FindClose
+ Forms; //MessageBox
+
+type
+ TPluginVariationClass = class of TPluginVariation;
+
+ TPluginData = record
+ Instance: Integer;
+ PluginHandle: THandle;
+ PluginClass: TPluginVariationClass;
+
+ PluginVarGetName: function: PAnsiChar; cdecl;
+ PluginVarGetNrVariables: function: Integer; cdecl;
+ PluginVarGetVariableNameAt: function(const Index: integer): PAnsiChar; cdecl;
+
+ PluginVarCreate: function: Pointer; cdecl;
+ PluginVarDestroy: function(var MyVariation: Pointer): LongBool; cdecl;
+ PluginVarInit: function(MyVariation, FPx, FPy, FTx, FTy: Pointer; vvar: double): LongBool; cdecl;
+ PluginVarInit3D: function(MyVariation, FPx, FPy, FPz, FTx, FTy, FTz: Pointer; vvar: double): LongBool; cdecl;
+ PluginVarInitDC: function(MyVariation, FPx, FPy, FPz, FTx, FTy, FTz, color: Pointer; vvar, a, b, c, d, e, f: double): LongBool; cdecl;
+ PluginVarPrepare: function(MyVariation: Pointer): LongBool; cdecl;
+ PluginVarCalc: function(MyVariation: Pointer): LongBool; cdecl;
+ PluginVarGetVariable: function(MyVariation: Pointer; const Name: PAnsiChar; var value: double): LongBool; cdecl;
+ PluginVarSetVariable: function(MyVariation: Pointer; const Name: PAnsiChar; var value: double): LongBool; cdecl;
+ PluginVarResetVariable:function(MyVariation: Pointer; const Name: PAnsiChar) : LongBool; cdecl;
+ end;
+ PPluginData = ^TPluginData;
+
+ // This class serves as a proxy for the plugin variations.
+ TPluginVariation = class(TBaseVariation)
+
+ private
+ PluginData : TPluginData;
+ MyVariation : Pointer;
+ public
+ constructor Create(varData : TPluginData);
+ destructor Destroy; override;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+type
+ TVariationPluginLoader = class (TVariationLoader)
+ public
+ constructor Create(varData : TPluginData);
+ destructor Destroy; override;
+
+ function GetName: string; override;
+ function GetInstance: TBaseVariation; override;
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ private
+ PluginData : TPluginData;
+ end;
+
+procedure InitializePlugins;
+
+const CurrentPlatform =
+{$ifdef Apo7X64}
+ $00000040
+{$else}
+ $00000020
+{$endif};
+
+ //////////////////////////////////////////////////////////////////////
+
+implementation
+
+uses
+ Windows, //LoadLibrary
+ Global;
+
+{ TPluginVariation }
+
+///////////////////////////////////////////////////////////////////////////////
+
+constructor TVariationPluginLoader.Create(varData : TPluginData);
+begin
+ PluginData := varData;
+end;
+
+destructor TVariationPluginLoader.Destroy;
+begin
+ FreeLibrary(PluginData.PluginHandle);
+end;
+
+function TVariationPluginLoader.GetName : string;
+begin
+ Result := String(PluginData.PluginVarGetName);
+end;
+
+function TVariationPluginLoader.GetInstance: TBaseVariation;
+begin
+ Result := TPluginVariation.Create(PluginData);
+end;
+
+function TVariationPluginLoader.GetNrVariables: integer;
+begin
+ Result := PluginData.PluginVarGetNrVariables;
+end;
+
+function TVariationPluginLoader.GetVariableNameAt(const Index: integer): string;
+begin
+ Result := String(PluginData.PluginVarGetVariableNameAt(Index));
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TPluginVariation.Prepare;
+begin
+ with PluginData do begin
+ if @PluginVarInitDC <> nil then
+ PluginVarInitDC(MyVariation, Pointer(FPX), Pointer(FPy), Pointer(FPz), Pointer(FTx), Pointer(FTy), Pointer(FTz), Pointer(color), vvar, a, b, c, d, e, f)
+ else if @PluginVarInit3D <> nil then
+ PluginVarInit3D(MyVariation, Pointer(FPX), Pointer(FPy), Pointer(FPz), Pointer(FTx), Pointer(FTy), Pointer(FTz), vvar)
+ else
+ PluginVarInit(MyVariation, Pointer(FPX), Pointer(FPy), Pointer(FTx), Pointer(FTy), vvar);
+ PluginVarPrepare(MyVariation);
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TPluginVariation.CalcFunction;
+begin
+ PluginData.PluginVarCalc(MyVariation);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TPluginVariation.Create(varData : TPluginData);
+begin
+ PluginData := varData;
+ MyVariation := PluginData.PluginVarCreate;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+destructor TPluginVariation.Destroy;
+begin
+ PluginData.PluginVarDestroy(MyVariation);
+ inherited;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TPluginVariation.GetInstance: TBaseVariation;
+begin
+ Result := nil;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TPluginVariation.GetName: string;
+begin
+ Result := '';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TPluginVariation.GetNrVariables: integer;
+begin
+ Result := PluginData.PluginVarGetNrVariables;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TPluginVariation.GetVariableNameAt(const Index: integer): string;
+begin
+ Result := String(PluginData.PluginVarGetVariableNameAt(Index));
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TPluginVariation.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := PluginData.PluginVarSetVariable(MyVariation,PAnsiChar(AnsiString(Name)),value);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TPluginVariation.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := PluginData.PluginVarGetVariable(MyVariation,PAnsiChar(AnsiString(Name)),value);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TPluginVariation.ResetVariable(const Name: string) : boolean;
+var
+ dummy: double;
+begin
+ if @PluginData.PluginVarResetVariable <> nil then
+ Result := PluginData.PluginVarResetVariable(MyVariation, PAnsiChar(AnsiString(Name)))
+ else begin
+ dummy := 0;
+ Result := PluginData.PluginVarSetVariable(MyVariation,PAnsiChar(AnsiString(Name)), dummy);
+ end;
+end;
+
+function GetPlatformOf(dllPath: string): integer;
+var
+ fs: TFilestream;
+ signature: DWORD;
+ dos_header: IMAGE_DOS_HEADER;
+ pe_header: IMAGE_FILE_HEADER;
+ opt_header: IMAGE_OPTIONAL_HEADER;
+begin
+ fs := TFilestream.Create(dllPath, fmOpenread or fmShareDenyNone);
+ try
+ fs.read(dos_header, SizeOf(dos_header));
+ if dos_header.e_magic <> IMAGE_DOS_SIGNATURE then
+ begin
+ Result := 0;
+ Exit;
+ end;
+
+ fs.seek(dos_header._lfanew, soFromBeginning);
+ fs.read(signature, SizeOf(signature));
+ if signature <> IMAGE_NT_SIGNATURE then
+ begin
+ Result := 0;
+ Exit;
+ end;
+
+ fs.read(pe_header, SizeOf(pe_header));
+ case pe_header.Machine of
+ IMAGE_FILE_MACHINE_I386: Result := $00000020;
+ IMAGE_FILE_MACHINE_AMD64: Result := $00000040;
+ else
+ Result := 0;
+ end; { Case }
+
+ finally
+ fs.Free;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure InitializePlugins;
+var
+ searchResult: TSearchRec;
+ dllPath, name, msg: string;
+ PluginData: TPluginData;
+ errno: integer;
+ errstr: string;
+begin
+ NumBuiltinVars := NRLOCVAR + GetNrRegisteredVariations;
+ PluginPath := ReadPluginDir;
+
+ // Try to find regular files matching *.dll in the plugins dir
+ if FindFirst(PluginPath + '*.dll', faAnyFile, searchResult) = 0 then
+ begin
+ repeat
+ with PluginData do begin
+ dllPath := PluginPath + searchResult.Name;
+
+ //Check plugin platform
+ if CurrentPlatform <> GetPlatformOf(dllPath)
+ then continue;
+
+ //Load DLL and initialize plugins!
+ PluginHandle := LoadLibrary(PChar(dllPath));
+ if PluginHandle<>0 then begin
+ @PluginVarGetName := GetProcAddress(PluginHandle,'PluginVarGetName');
+ if @PluginVarGetName = nil then begin // Must not be a valid plugin!
+ FreeLibrary(PluginHandle);
+ msg := msg + 'Invalid plugin type: "' + searchResult.Name + '" is not a plugin' + #13#10;
+ continue;
+ end;
+ name := String(PluginVarGetName);
+ if GetVariationIndex(name) >= 0 then begin
+ FreeLibrary(PluginHandle);
+ msg := msg + 'Cannot load plugin from ' + searchResult.Name + ': variation "' + name + '" already exists!' + #13#10;
+ // msg := msg + Format(TextByKey('common-loaderror') + #13#10, [searchResult.Name, name]);
+ end
+ else begin
+ @PluginVarGetNrVariables := GetProcAddress(PluginHandle,'PluginVarGetNrVariables');
+ @PluginVarGetVariableNameAt := GetProcAddress(PluginHandle,'PluginVarGetVariableNameAt');
+ @PluginVarCreate := GetProcAddress(PluginHandle,'PluginVarCreate');
+ @PluginVarDestroy := GetProcAddress(PluginHandle,'PluginVarDestroy');
+ @PluginVarInit := GetProcAddress(PluginHandle,'PluginVarInit');
+ @PluginVarInit3D := GetProcAddress(PluginHandle,'PluginVarInit3D');
+ @PluginVarInitDC := GetProcAddress(PluginHandle,'PluginVarInitDC');
+ @PluginVarPrepare := GetProcAddress(PluginHandle,'PluginVarPrepare');
+ @PluginVarCalc := GetProcAddress(PluginHandle,'PluginVarCalc');
+ @PluginVarGetVariable := GetProcAddress(PluginHandle,'PluginVarGetVariable');
+ @PluginVarSetVariable := GetProcAddress(PluginHandle,'PluginVarSetVariable');
+ @PluginVarResetVariable := GetProcAddress(PluginHandle,'PluginVarResetVariable');
+
+ RegisterVariation(TVariationPluginLoader.Create(PluginData), @PluginVarInit3D <> nil, @PluginVarInitDC <> nil);
+ //RegisterVariationFile(ExtractFilePath(Application.ExeName) + 'Plugins\' + searchResult.Name, name);
+ RegisterVariationFile(PluginPath + searchResult.Name, name); // AV: fixed!
+ end;
+ end else begin
+ errno := GetLastError;
+ errstr := SysErrorMessage(errno);
+ msg := msg + 'Cannot open plugin file: ' + searchResult.Name + ' (Error #' + IntToStr(GetLastError) + ' - ' + errstr + ')' + #13#10;
+ end;
+ end;
+ until (FindNext(searchResult) <> 0);
+ SysUtils.FindClose(searchResult); //Since we use Windows unit (LoadLibrary)
+
+ if msg <> '' then
+ Application.MessageBox(
+ PChar('There were problems with some of the plugins:' + #13#10#13#10 + msg),
+ 'Warning', MB_ICONWARNING or MB_OK); // TextByKey('common-loaderror1')
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+end.
+
diff --git a/Variations/varGlynnSim1.pas b/Variations/varGlynnSim1.pas
new file mode 100644
index 0000000..d5c20e8
--- /dev/null
+++ b/Variations/varGlynnSim1.pas
@@ -0,0 +1,245 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varGlynnSim1;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationGlynnSim1 = class(TBaseVariation)
+ private
+ radius, radius1, thickness, contrast, pow,
+ Phi1, abspow, x1, y1: double;
+ procedure FilledCircle(var x: double; var y: double);
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationGlynnSim1 }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationGlynnSim1.Prepare;
+var sPhi1, cPhi1: double;
+begin
+ SinCos(Phi1 * Pi / 180, sPhi1, cPhi1);
+ x1 := radius * cPhi1;
+ y1 := radius * sPhi1;
+ abspow := abs(pow);
+end;
+
+procedure TVariationGlynnSim1.FilledCircle(var x: double; var y: double);
+var r, Phi, sPhi, cPhi: double;
+begin
+ Randomize;
+ r := radius1 * (thickness + (1 - thickness) * random);
+ Phi := 2 * Pi * random;
+ SinCos(Phi, sPhi, cPhi);
+ x := r * cPhi + x1;
+ y := r * sPhi + y1;
+end;
+
+procedure TVariationGlynnSim1.CalcFunction;
+var r, r2, x, y, px, py, Alpha: double;
+begin
+ x := FTx^; y := FTy^;
+ r := hypot(x, y);
+ Alpha := radius / r;
+
+ if (r < radius) then
+ begin
+ FilledCircle(px, py);
+ FPx^ := FPx^ + vvar * px;
+ FPy^ := FPy^ + vvar * py;
+ end else
+ begin
+ if (random > contrast * power(Alpha, abspow)) then
+ begin
+ px := x;
+ py := y;
+ end else
+ begin
+ px := sqr(Alpha) * x;
+ py := sqr(Alpha) * y;
+ end;
+ r2 := sqr(px - x1) +sqr(py - y1);
+ if (r2 < sqr(radius1)) then
+ begin
+ FilledCircle(px,py);
+ FPx^ := FPx^ + vvar * px;
+ FPy^ := FPy^ + vvar * py;
+ end else
+ begin
+ FPx^ := FPx^ + vvar * px;
+ FPy^ := FPy^ + vvar * py;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationGlynnSim1.Create;
+begin
+ radius := 1;
+ radius1 := 0.1;
+ thickness := 0.1;
+ contrast := 0.5;
+ pow := 1.5;
+ Phi1 := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationGlynnSim1.GetInstance: TBaseVariation;
+begin
+ Result := TVariationGlynnSim1.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationGlynnSim1.GetName: string;
+begin
+ Result := 'GlynnSim1';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim1.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'GlynnSim1_radius';
+ 1: Result := 'GlynnSim1_radius1';
+ 2: Result := 'GlynnSim1_Phi1';
+ 3: Result := 'GlynnSim1_thickness';
+ 4: Result := 'GlynnSim1_pow';
+ 5: Result := 'GlynnSim1_contrast';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim1.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim1_radius' then begin
+ radius := Value;
+ Result := True;
+ end else if Name = 'GlynnSim1_thickness' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ thickness := Value;
+ Result := True;
+ end else if Name = 'GlynnSim1_contrast' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ contrast := Value;
+ Result := True;
+ end else if Name = 'GlynnSim1_pow' then begin
+ pow := Value;
+ Result := True;
+ end else if Name = 'GlynnSim1_Phi1' then begin
+ Phi1 := Value;
+ Result := True;
+ end else if Name = 'GlynnSim1_radius1' then begin
+ radius1 := Value;
+ Result := True;
+ end
+end;
+
+function TVariationGlynnSim1.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim1_radius' then begin
+ radius:= 1;
+ Result := True;
+ end else if Name = 'GlynnSim1_thickness' then begin
+ thickness := 0.1;
+ Result := True;
+ end else if Name = 'GlynnSim1_contrast' then begin
+ contrast := 0.5;
+ Result := True;
+ end else if Name = 'GlynnSim1_pow' then begin
+ pow := 1.5;
+ Result := True;
+ end else if Name = 'GlynnSim1_Phi1' then begin
+ Phi1 := 0;
+ Result := True;
+ end else if Name = 'GlynnSim1_radius1' then begin
+ radius1 := 0.1;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim1.GetNrVariables: integer;
+begin
+ Result := 6
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim1.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim1_radius' then begin
+ Value := radius;
+ Result := True;
+ end else if Name = 'GlynnSim1_thickness' then begin
+ Value := thickness;
+ Result := True;
+ end else if Name = 'GlynnSim1_contrast' then begin
+ Value := contrast;
+ Result := True;
+ end else if Name = 'GlynnSim1_pow' then begin
+ Value := pow;
+ Result := True;
+ end else if Name = 'GlynnSim1_Phi1' then begin
+ Value := Phi1;
+ Result := True;
+ end else if Name = 'GlynnSim1_radius1' then begin
+ Value := radius1;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationGlynnSim1), false, false);
+end.
diff --git a/Variations/varGlynnSim2.pas b/Variations/varGlynnSim2.pas
new file mode 100644
index 0000000..8933e7a
--- /dev/null
+++ b/Variations/varGlynnSim2.pas
@@ -0,0 +1,234 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varGlynnSim2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationGlynnSim2 = class(TBaseVariation)
+ private
+ radius, thickness, contrast, pow,
+ Phi1, Phi2, Phi10, Phi20,
+ gamma, delta, abspow: double;
+ procedure Circle(var x: double; var y: double);
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationGlynnSim2 }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationGlynnSim2.Prepare;
+begin
+ Phi10 := Phi1 * Pi / 180;
+ Phi20 := Phi2 * Pi / 180;
+ delta := Phi20 - Phi10;
+ gamma := thickness * (2 * radius + thickness) / (radius + thickness);
+ abspow := abs(pow);
+end;
+
+procedure TVariationGlynnSim2.Circle(var x: double; var y: double);
+var r, Phi, sPhi, cPhi: double;
+begin
+ Randomize;
+ r := radius + thickness - gamma * random;
+ Phi := Phi10 + delta * random;
+ SinCos(Phi, sPhi, cPhi);
+ x := r * cPhi;
+ y := r * sPhi;
+end;
+
+procedure TVariationGlynnSim2.CalcFunction;
+var r, x, y, px, py, Alpha: double;
+begin
+ x := FTx^; y := FTy^;
+ r := hypot(x, y);
+ Alpha := radius / r;
+
+ if (r < radius) then
+ begin
+ Circle(px, py);
+ FPx^ := FPx^ + vvar * px;
+ FPy^ := FPy^ + vvar * py;
+ end else
+ if (random > contrast * power(Alpha, abspow)) then
+ begin
+ FPx^ := FPx^ + vvar * x;
+ FPy^ := FPy^ + vvar * y;
+ end else
+ begin
+ FPx^ := FPx^ + vvar * sqr(Alpha) * x;
+ FPy^ := FPy^ + vvar * sqr(Alpha) * y;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationGlynnSim2.Create;
+begin
+ radius := 1;
+ thickness := 0.1;
+ contrast := 0.5;
+ pow := 1.5;
+ Phi1 := 0;
+ Phi2 := 360;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationGlynnSim2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationGlynnSim2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationGlynnSim2.GetName: string;
+begin
+ Result := 'GlynnSim2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'GlynnSim2_radius';
+ 1: Result := 'GlynnSim2_thickness';
+ 2: Result := 'GlynnSim2_contrast';
+ 3: Result := 'GlynnSim2_pow';
+ 4: Result := 'GlynnSim2_Phi1';
+ 5: Result := 'GlynnSim2_Phi2';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim2_radius' then begin
+ radius := Value;
+ Result := True;
+ end else if Name = 'GlynnSim2_thickness' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ thickness := Value;
+ Result := True;
+ end else if Name = 'GlynnSim2_contrast' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ contrast := Value;
+ Result := True;
+ end else if Name = 'GlynnSim2_pow' then begin
+ pow := Value;
+ Result := True;
+ end else if Name = 'GlynnSim2_Phi1' then begin
+ Phi1 := Value;
+ Result := True;
+ end else if Name = 'GlynnSim2_Phi2' then begin
+ Phi2 := Value;
+ Result := True;
+ end
+end;
+
+function TVariationGlynnSim2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim2_radius' then begin
+ radius:= 1;
+ Result := True;
+ end else if Name = 'GlynnSim2_thickness' then begin
+ thickness := 0.1;
+ Result := True;
+ end else if Name = 'GlynnSim2_contrast' then begin
+ contrast := 0.5;
+ Result := True;
+ end else if Name = 'GlynnSim2_pow' then begin
+ pow := 1.5;
+ Result := True;
+ end else if Name = 'GlynnSim2_Phi1' then begin
+ Phi1 := 0;
+ Result := True;
+ end else if Name = 'GlynnSim2_Phi2' then begin
+ Phi2 := 360;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim2.GetNrVariables: integer;
+begin
+ Result := 6
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim2_radius' then begin
+ Value := radius;
+ Result := True;
+ end else if Name = 'GlynnSim2_thickness' then begin
+ Value := thickness;
+ Result := True;
+ end else if Name = 'GlynnSim2_contrast' then begin
+ Value := contrast;
+ Result := True;
+ end else if Name = 'GlynnSim2_pow' then begin
+ Value := pow;
+ Result := True;
+ end else if Name = 'GlynnSim2_Phi1' then begin
+ Value := Phi1;
+ Result := True;
+ end else if Name = 'GlynnSim2_Phi2' then begin
+ Value := Phi2;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationGlynnSim2), false, false);
+end.
diff --git a/Variations/varGlynnSim3.pas b/Variations/varGlynnSim3.pas
new file mode 100644
index 0000000..45f7cff
--- /dev/null
+++ b/Variations/varGlynnSim3.pas
@@ -0,0 +1,210 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varGlynnSim3;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationGlynnSim3 = class(TBaseVariation)
+ private
+ radius, thickness, contrast, pow,
+ radius1, radius2, gamma: double;
+ procedure DoubleCircle(var x: double; var y: double);
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationGlynnSim2 }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationGlynnSim3.Prepare;
+begin
+ radius1 := radius + thickness;
+ radius2 := sqr(radius) / radius1;
+ gamma := radius1 / (radius1 + radius2);
+end;
+
+procedure TVariationGlynnSim3.DoubleCircle(var x: double; var y: double);
+var r, Phi, sPhi, cPhi: double;
+begin
+ Randomize;
+ Phi := 2 * Pi * random;
+ SinCos(Phi, sPhi, cPhi);
+ if (random < gamma) then r := radius1
+ else r := radius2;
+ x := r * cPhi;
+ y := r * sPhi;
+end;
+
+procedure TVariationGlynnSim3.CalcFunction;
+var r, r2, x, y, px, py, Alpha: double;
+begin
+ x := FTx^; y := FTy^;
+ r := hypot(x, y);
+ Alpha := radius / r;
+
+ if (r < radius1) then
+ begin
+ DoubleCircle(px, py);
+ FPx^ := FPx^ + vvar * px;
+ FPy^ := FPy^ + vvar * py;
+ end else
+ begin
+ if (random > contrast * power(Alpha, pow)) then
+ begin
+ FPx^ := FPx^ + vvar * x;
+ FPy^ := FPy^ + vvar * y;
+ end else
+ begin
+ FPx^ := FPx^ + vvar * sqr(Alpha) * x;
+ FPy^ := FPy^ + vvar * sqr(Alpha) * y;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationGlynnSim3.Create;
+begin
+ radius := 1;
+ thickness := 0.1;
+ contrast := 0.5;
+ pow := 1.5;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationGlynnSim3.GetInstance: TBaseVariation;
+begin
+ Result := TVariationGlynnSim3.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationGlynnSim3.GetName: string;
+begin
+ Result := 'GlynnSim3';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim3.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'GlynnSim3_radius';
+ 1: Result := 'GlynnSim3_thickness';
+ 2: Result := 'GlynnSim3_contrast';
+ 3: Result := 'GlynnSim3_pow';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim3.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim3_radius' then begin
+ radius := Value;
+ Result := True;
+ end else if Name = 'GlynnSim3_thickness' then begin
+ thickness := Value;
+ Result := True;
+ end else if Name = 'GlynnSim3_contrast' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ contrast := Value;
+ Result := True;
+ end else if Name = 'GlynnSim3_pow' then begin
+ pow := Value;
+ Result := True;
+ end
+end;
+
+function TVariationGlynnSim3.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim3_radius' then begin
+ radius:= 1;
+ Result := True;
+ end else if Name = 'GlynnSim3_thickness' then begin
+ thickness := 0.1;
+ Result := True;
+ end else if Name = 'GlynnSim3_contrast' then begin
+ contrast := 0.5;
+ Result := True;
+ end else if Name = 'GlynnSim3_pow' then begin
+ pow := 1.5;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim3.GetNrVariables: integer;
+begin
+ Result := 4
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationGlynnSim3.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'GlynnSim3_radius' then begin
+ Value := radius;
+ Result := True;
+ end else if Name = 'GlynnSim3_thickness' then begin
+ Value := thickness;
+ Result := True;
+ end else if Name = 'GlynnSim3_contrast' then begin
+ Value := contrast;
+ Result := True;
+ end else if Name = 'GlynnSim3_pow' then begin
+ Value := pow;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationGlynnSim3), false, false);
+end.
diff --git a/Variations/varHandkerchief.pas b/Variations/varHandkerchief.pas
new file mode 100644
index 0000000..56629f3
--- /dev/null
+++ b/Variations/varHandkerchief.pas
@@ -0,0 +1,127 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varHandkerchief;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHandkerchief = class(TBaseVariation)
+ private
+ old: byte;
+ procedure CalcPlugin;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+////////////////////////
+procedure TVariationHandkerchief.GetCalcFunction(var f: TCalcFunction);
+begin
+ if old = 1 then f := CalcFunction
+ else f := CalcPlugin;
+end;
+
+procedure TVariationHandkerchief.CalcFunction;
+var
+ r, FAngle: double;
+begin
+ FAngle := arctan2(FTx^, FTy^);
+ r := sqrt(sqr(FTx^) + sqr(FTy^));
+ FPx^ := FPx^ + vvar * sin(FAngle + r) * r;
+ FPy^ := FPy^ + vvar * cos(FAngle - r) * r;
+end;
+
+procedure TVariationHandkerchief.CalcPlugin;
+var
+ r, FAngle: double;
+begin
+ FAngle := arctan2(FTy^, FTx^);
+ r := sqrt(sqr(FTx^) + sqr(FTy^));
+ FPx^ := FPx^ + vvar * sin(FAngle + r) * r;
+ FPy^ := FPy^ + vvar * cos(FAngle - r) * r;
+end;
+
+constructor TVariationHandkerchief.Create;
+begin
+ old := 1;
+end;
+
+class function TVariationHandkerchief.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHandkerchief.Create;
+end;
+
+class function TVariationHandkerchief.GetName: string;
+begin
+ Result := 'handkerchief';
+end;
+
+function TVariationHandkerchief.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+function TVariationHandkerchief.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'handkerchief_old' then begin
+ value := old;
+ Result := True;
+ end;
+end;
+
+function TVariationHandkerchief.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := 'handkerchief_old';
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationHandkerchief.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'handkerchief_old' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ old := Round(value);
+ Result := True;
+ end;
+end;
+
+function TVariationHandkerchief.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'handkerchief_old' then begin
+ old := 1;
+ Result := True;
+ end;
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHandkerchief), false, false);
+
+end.
diff --git a/Variations/varHeart.pas b/Variations/varHeart.pas
new file mode 100644
index 0000000..1022ee2
--- /dev/null
+++ b/Variations/varHeart.pas
@@ -0,0 +1,61 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varHeart;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHeart = class(TBaseVariation)
+ private
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ procedure CalcFunction; override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+
+procedure TVariationHeart.CalcFunction;
+var
+ FAngle, r, sinr, cosr: double;
+begin
+ FAngle := arctan2(FTx^, FTy^);
+ r := sqrt(sqr(FTx^) + sqr(FTy^));
+ Sincos(r * FAngle, sinr, cosr);
+ r := r * vvar;
+ FPx^ := FPx^ + r * sinr;
+ FPy^ := FPy^ - r * cosr;
+end;
+
+constructor TVariationHeart.Create;
+begin
+ inherited Create;
+end;
+
+class function TVariationHeart.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHeart.Create;
+end;
+
+class function TVariationHeart.GetName: string;
+begin
+ Result := 'heart';
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHeart), false, false);
+
+end.
diff --git a/Variations/varHyperboloid.pas b/Variations/varHyperboloid.pas
new file mode 100644
index 0000000..0bcc207
--- /dev/null
+++ b/Variations/varHyperboloid.pas
@@ -0,0 +1,240 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varHyperboloid;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHyperboloid = class(TBaseVariation)
+ private
+ kx, ky, kz, maxheight, h, hb: double;
+ vkx, vky, vkz: double;
+ limit, zero: byte;
+
+ procedure CalcCut;
+ procedure CalcCutBoarder;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationHyperboloid }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationHyperboloid.Prepare;
+begin
+ vkx := VVAR * kx;
+ vky := VVAR * ky;
+ vkz := VVAR * kz;
+ h := sqrt(1 + sqr(maxheight / ky));
+ hb := sqrt(sqr(h) - 1);
+end;
+
+procedure TVariationHyperboloid.GetCalcFunction(var f: TCalcFunction);
+begin
+ if (limit = 0) then
+ f := CalcFunction
+ else if (zero = 0) then
+ f := CalcCutBoarder
+ else
+ f := CalcCut;
+end;
+
+procedure TVariationHyperboloid.CalcFunction;
+var
+ sn, cn, sh, ch: double;
+begin
+ SinCos(FTx^, sn, cn);
+ SinhCosh(FTy^, sh, ch);
+
+ FPx^ := FPx^ + vkx * ch * sn;
+ FPy^ := FPy^ + vky * sh;
+ FPz^ := FPz^ + vkz * ch * cn;
+end;
+
+procedure TVariationHyperboloid.CalcCut;
+var
+ sn, cn, sh, ch: double;
+begin
+ SinhCosh(FTy^, sh, ch);
+
+ if (ch <= h) then // cut the surface
+ begin
+ SinCos(FTx^, sn, cn);
+ FPx^ := FPx^ + vkx * ch * sn;
+ FPy^ := FPy^ + vky * sh;
+ FPz^ := FPz^ + vkz * ch * cn;
+ end;
+end;
+
+procedure TVariationHyperboloid.CalcCutBoarder;
+var
+ sn, cn, sh, ch: double;
+begin
+ SinCos(FTx^, sn, cn);
+ SinhCosh(FTy^, sh, ch);
+
+ if (ch <= h) then // cut the surface
+ begin
+ FPx^ := FPx^ + vkx * ch * sn;
+ FPy^ := FPy^ + vky * sh;
+ FPz^ := FPz^ + vkz * ch * cn;
+ end
+ else begin // place the point on it's boarder
+ FPx^ := FPx^ + vkx * h * sn;
+ FPy^ := FPy^ + vky * sign(sh) * hb;
+ FPz^ := FPz^ + vkz * h * cn;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationHyperboloid.Create;
+begin
+ kx := 1;
+ ky := 1;
+ kz := 1;
+ maxheight := RandomRange(3, 6);
+ limit := 1;
+ zero := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHyperboloid.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHyperboloid.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHyperboloid.GetName: string;
+begin
+ Result := 'hourglass3D'; // AV: hyperbolic hyperboloid :)
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHyperboloid.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'hourglass3D_kx';
+ 1: Result := 'hourglass3D_ky';
+ 2: Result := 'hourglass3D_kz';
+ 3: Result := 'hourglass3D_maxheight';
+ 4: Result := 'hourglass3D_uselimit';
+ 5: Result := 'hourglass3D_zero_edges';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHyperboloid.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hourglass3D_kx' then begin
+ if (value < 1E-5) then Value := 1E-5;
+ kx := Value;
+ Result := True;
+ end else if Name = 'hourglass3D_ky' then begin
+ if (value < 1E-5) then Value := 1E-5;
+ ky := Value;
+ Result := True;
+ end else if Name = 'hourglass3D_kz' then begin
+ if (value < 1E-5) then Value := 1E-5;
+ kz := Value;
+ Result := True;
+ end else if Name = 'hourglass3D_maxheight' then begin
+ if (value < 0.1) then Value := 0.1;
+ maxheight := Value;
+ Result := True;
+ end else if Name = 'hourglass3D_uselimit' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ limit := Round(Value);
+ Result := True;
+ end else if Name = 'hourglass3D_zero_edges' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ zero := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationHyperboloid.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'hourglass3D_kx' then begin
+ kx:= 1;
+ Result := True;
+ end else if Name = 'hourglass3D_ky' then begin
+ ky := 1;
+ Result := True;
+ end else if Name = 'hourglass3D_kz' then begin
+ kz := 1;
+ Result := True;
+ end else if Name = 'hourglass3D_maxheight' then begin
+ maxheight := 3;
+ Result := True;
+ end else if Name = 'hourglass3D_uselimit' then begin
+ limit := IfThen(limit = 0, 1, 0);
+ Result := True;
+ end else if Name = 'hourglass3D_zero_edges' then begin
+ zero := IfThen(zero = 0, 1, 0);
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHyperboloid.GetNrVariables: integer;
+begin
+ Result := 6;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHyperboloid.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hourglass3D_kx' then begin
+ Value := kx;
+ Result := True;
+ end else if Name = 'hourglass3D_ky' then begin
+ Value := ky;
+ Result := True;
+ end else if Name = 'hourglass3D_kz' then begin
+ Value := kz;
+ Result := True;
+ end else if Name = 'hourglass3D_maxheight' then begin
+ Value := maxheight;
+ Result := True;
+ end else if Name = 'hourglass3D_uselimit' then begin
+ Value := limit;
+ Result := True;
+ end else if Name = 'hourglass3D_zero_edges' then begin
+ Value := zero;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHyperboloid), true, false);
+end.
diff --git a/Variations/varHypertile.pas b/Variations/varHypertile.pas
new file mode 100644
index 0000000..a377c3d
--- /dev/null
+++ b/Variations/varHypertile.pas
@@ -0,0 +1,185 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varHypertile;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHypertile = class(TBaseVariation)
+ private
+ hypertile_p, hypertile_q, hypertile_n: integer;
+ re, im: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationHypertile.Prepare;
+var
+ t, pa, qa, r: double;
+begin
+ pa := PI2 / hypertile_p;
+ qa := PI2 / hypertile_q;
+ t := cos(pa);
+ r := (1 - t) / (t + cos(qa)) + 1;
+ if (r > 0) then
+ r := 1 / sqrt(r)
+ else
+ r := 1;
+ t := hypertile_n * pa;
+ SinCos(t, pa, qa);
+ re := r * qa;
+ im := r * pa;
+end;
+
+procedure TVariationHypertile.CalcFunction;
+var
+ u, v, s, t, vr: double;
+begin
+ u := FTx^ + re;
+ v := FTy^ - im;
+
+ s := re * FTx^ - im * FTy^ + 1;
+ t := re * FTy^ + im * FTx^;
+
+ vr := vvar / (sqr(s) + sqr(t));
+
+ FPx^ := FPx^ + vr * (u * s + v * t);
+ FPy^ := FPy^ + vr * (v * s - u * t);
+ // FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationHypertile.Create;
+begin
+ hypertile_p := 3;
+ hypertile_q := 7;
+ hypertile_n := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHypertile.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile.GetName: string;
+begin
+ Result := 'hypertile';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'hypertile_p';
+ 1: Result := 'hypertile_q';
+ 2: Result := 'hypertile_n';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile_p' then begin
+ if Value < 3 then Value := 3;
+ hypertile_p := Round(Value);
+ Result := True;
+ end else if Name = 'hypertile_q' then begin
+ if Value < 3 then Value := 3;
+ hypertile_q := Round(Value);
+ Result := True;
+ end else if Name = 'hypertile_n' then begin
+ hypertile_n := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationHypertile.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile_p' then begin
+ hypertile_p := 3;
+ Result := True;
+ end else if Name = 'hypertile_q' then begin
+ hypertile_q := 7;
+ Result := True;
+ end else if Name = 'hypertile_n' then begin
+ hypertile_n := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile_p' then begin
+ Value := hypertile_p;
+ Result := True;
+ end else if Name = 'hypertile_q' then begin
+ Value := hypertile_q;
+ Result := True;
+ end else if Name = 'hypertile_n' then begin
+ Value := hypertile_n;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHypertile), false, false);
+end.
\ No newline at end of file
diff --git a/Variations/varHypertile1.pas b/Variations/varHypertile1.pas
new file mode 100644
index 0000000..6ea0d2e
--- /dev/null
+++ b/Variations/varHypertile1.pas
@@ -0,0 +1,173 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varHypertile1;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHypertile1 = class(TBaseVariation)
+ private
+ hypertile1_p, hypertile1_q: integer;
+ pa, r: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationHypertile1.Prepare;
+var
+ cp, r2: double;
+begin
+ pa := PI2 / hypertile1_p;
+ cp := cos(pa);
+ r2 := 1 - (cp - 1) / (cp + cos(PI2 / hypertile1_q));
+ if (r2 > 0) then
+ r := 1 / sqrt(r2)
+ else
+ r := 1;
+end;
+
+procedure TVariationHypertile1.CalcFunction;
+var
+ sina, cosa, re, im, u, v, s, t, vr: double;
+begin
+ SinCos(random(32767) * pa, sina, cosa);
+ re := r * cosa;
+ im := r * sina;
+
+ u := FTx^ + re;
+ v := FTy^ - im;
+
+ s := re * FTx^ - im * FTy^ + 1;
+ t := re * FTy^ + im * FTx^;
+
+ vr := vvar / (sqr(s) + sqr(t));
+
+ FPx^ := FPx^ + vr * (u * s + v * t);
+ FPy^ := FPy^ + vr * (v * s - u * t);
+ // FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationHypertile1.Create;
+begin
+ hypertile1_p := 3;
+ hypertile1_q := 7;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile1.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHypertile1.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile1.GetName: string;
+begin
+ Result := 'hypertile1';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile1.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'hypertile1_p';
+ 1: Result := 'hypertile1_q';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile1.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile1_p' then begin
+ if Value < 3 then Value := 3;
+ hypertile1_p := Round(Value);
+ Result := True;
+ end else if Name = 'hypertile1_q' then begin
+ if Value < 3 then Value := 3;
+ hypertile1_q := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationHypertile1.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile1_p' then begin
+ hypertile1_p := 3;
+ Result := True;
+ end else if Name = 'hypertile1_q' then begin
+ hypertile1_q := 7;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile1.GetNrVariables: integer;
+begin
+ Result := 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile1.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile1_p' then begin
+ Value := hypertile1_p;
+ Result := True;
+ end else if Name = 'hypertile1_q' then begin
+ Value := hypertile1_q;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHypertile1), false, false);
+end.
\ No newline at end of file
diff --git a/Variations/varHypertile2.pas b/Variations/varHypertile2.pas
new file mode 100644
index 0000000..6cd8698
--- /dev/null
+++ b/Variations/varHypertile2.pas
@@ -0,0 +1,172 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varHypertile2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHypertile2 = class(TBaseVariation)
+ private
+ hypertile2_p, hypertile2_q: integer;
+ pa, r: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationHypertile2.Prepare;
+var
+ cp, r2: double;
+begin
+ pa := PI2 / hypertile2_p;
+ cp := cos(pa);
+ r2 := 1 - (cp - 1) / (cp + cos(PI2 / hypertile2_q));
+ if (r2 > 0) then
+ r := 1 / sqrt(r2)
+ else
+ r := 1;
+end;
+
+procedure TVariationHypertile2.CalcFunction;
+var
+ sina, cosa, x, y, u, v, s, t, vr: double;
+begin
+ u := FTx^ + r;
+ v := FTy^;
+ s := r * FTx^ + 1;
+ t := r * FTy^;
+
+ vr := vvar / (sqr(s) + sqr(t));
+ x := u * s + v * t;
+ y := v * s - u * t;
+
+ SinCos(random(32767) * pa, sina, cosa);
+
+ FPx^ := FPx^ + vr * (x * cosa + y * sina);
+ FPy^ := FPy^ + vr * (y * cosa - x * sina);
+ // FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationHypertile2.Create;
+begin
+ hypertile2_p := 3;
+ hypertile2_q := 7;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHypertile2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile2.GetName: string;
+begin
+ Result := 'hypertile2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'hypertile2_p';
+ 1: Result := 'hypertile2_q';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile2_p' then begin
+ if Value < 3 then Value := 3;
+ hypertile2_p := Round(Value);
+ Result := True;
+ end else if Name = 'hypertile2_q' then begin
+ if Value < 3 then Value := 3;
+ hypertile2_q := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationHypertile2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile2_p' then begin
+ hypertile2_p := 3;
+ Result := True;
+ end else if Name = 'hypertile2_q' then begin
+ hypertile2_q := 7;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile2.GetNrVariables: integer;
+begin
+ Result := 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile2_p' then begin
+ Value := hypertile2_p;
+ Result := True;
+ end else if Name = 'hypertile2_q' then begin
+ Value := hypertile2_q;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHypertile2), false, false);
+end.
\ No newline at end of file
diff --git a/Variations/varHypertile3D.pas b/Variations/varHypertile3D.pas
new file mode 100644
index 0000000..febe28a
--- /dev/null
+++ b/Variations/varHypertile3D.pas
@@ -0,0 +1,193 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varHypertile3D;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHypertile3D = class(TBaseVariation)
+ private
+ hypertile3D_p, hypertile3D_q, hypertile3D_n: integer;
+ cx, cy, c2x, c2y, c2, s2x, s2y, s2z: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationHypertile3D.Prepare;
+var
+ t, pa, qa, r: double;
+begin
+ pa := PI2 / hypertile3D_p;
+ qa := PI2 / hypertile3D_q;
+ t := cos(pa);
+ r := -(t - 1) / (t + cos(qa));
+ if (r > 0) then
+ r := 1 / sqrt(1 + r)
+ else
+ r := 1;
+
+ t := hypertile3D_n * pa;
+ SinCos(t, pa, qa);
+
+ cx := r * qa;
+ cy := r * pa;
+ c2x := 2 * cx;
+ c2y := 2 * cy;
+ c2 := sqr(cx) + sqr(cy);
+
+ s2x := 1 + sqr(cx) - sqr(cy);
+ s2y := 1 + sqr(cy) - sqr(cx);
+ s2z := 1 - sqr(cy) - sqr(cx);
+end;
+
+procedure TVariationHypertile3D.CalcFunction;
+var
+ r2, x2cx, y2cy, vr: double;
+begin
+ r2 := sqr(FTx^) + sqr(FTy^) + sqr(FTz^);
+
+ x2cx := c2x * FTx^;
+ y2cy := c2y * FTy^;
+
+ vr := vvar / (c2 * r2 + x2cx - y2cy + 1);
+
+ FPx^ := FPx^ + vr * (FTx^ * s2x - cx * ( y2cy - r2 - 1));
+ FPy^ := FPy^ + vr * (FTy^ * s2y + cy * (-x2cx - r2 - 1));
+ FPz^ := FPz^ + vr * (FTz^ * s2z);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationHypertile3D.Create;
+begin
+ hypertile3D_p := 3;
+ hypertile3D_q := 7;
+ hypertile3D_n := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile3D.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHypertile3D.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile3D.GetName: string;
+begin
+ Result := 'hypertile3D';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'hypertile3D_p';
+ 1: Result := 'hypertile3D_q';
+ 2: Result := 'hypertile3D_n';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D_p' then begin
+ if Value < 3 then Value := 3;
+ hypertile3D_p := Round(Value);
+ Result := True;
+ end else if Name = 'hypertile3D_q' then begin
+ if Value < 3 then Value := 3;
+ hypertile3D_q := Round(Value);
+ Result := True;
+ end else if Name = 'hypertile3D_n' then begin
+ hypertile3D_n := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationHypertile3D.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D_p' then begin
+ hypertile3D_p := 3;
+ Result := True;
+ end else if Name = 'hypertile3D_q' then begin
+ hypertile3D_q := 7;
+ Result := True;
+ end else if Name = 'hypertile3D_n' then begin
+ hypertile3D_n := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D_p' then begin
+ Value := hypertile3D_p;
+ Result := True;
+ end else if Name = 'hypertile3D_q' then begin
+ Value := hypertile3D_q;
+ Result := True;
+ end else if Name = 'hypertile3D_n' then begin
+ Value := hypertile3D_n;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHypertile3D), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varHypertile3D1.pas b/Variations/varHypertile3D1.pas
new file mode 100644
index 0000000..1590b69
--- /dev/null
+++ b/Variations/varHypertile3D1.pas
@@ -0,0 +1,178 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varHypertile3D1;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHypertile3D1 = class(TBaseVariation)
+ private
+ hypertile3D1_p, hypertile3D1_q: integer;
+ pa, r, c2, s2z: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationHypertile3D1.Prepare;
+var
+ t, qa: double;
+begin
+ pa := PI2 / hypertile3D1_p;
+ qa := PI2 / hypertile3D1_q;
+ t := cos(pa);
+ r := -(t - 1) / (t + cos(qa));
+ if (r > 0) then
+ r := 1 / sqrt(1 + r)
+ else
+ r := 1;
+
+ c2 := sqr(r);
+ s2z := 1 - c2;
+end;
+
+procedure TVariationHypertile3D1.CalcFunction;
+var
+ sina, cosa, cx, cy, s2x, s2y, x2cx, y2cy, r2, vr: double;
+begin
+ SinCos(random(32767) * pa, sina, cosa);
+ cx := r * cosa;
+ cy := r * sina;
+ s2x := 1 + sqr(cx) - sqr(cy);
+ s2y := 1 + sqr(cy) - sqr(cx);
+
+ r2 := sqr(FTx^) + sqr(FTy^) + sqr(FTz^);
+
+ x2cx := 2 * cx * FTx^;
+ y2cy := 2 * cy * FTy^;
+
+ vr := vvar / (c2 * r2 + x2cx - y2cy + 1);
+
+ FPx^ := FPx^ + vr * (FTx^ * s2x - cx * ( y2cy - r2 - 1));
+ FPy^ := FPy^ + vr * (FTy^ * s2y + cy * (-x2cx - r2 - 1));
+ FPz^ := FPz^ + vr * (FTz^ * s2z);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationHypertile3D1.Create;
+begin
+ hypertile3D1_p := 3;
+ hypertile3D1_q := 7;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile3D1.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHypertile3D1.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile3D1.GetName: string;
+begin
+ Result := 'hypertile3D1';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D1.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'hypertile3D1_p';
+ 1: Result := 'hypertile3D1_q';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D1.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D1_p' then begin
+ if Value < 3 then Value := 3;
+ hypertile3D1_p := Round(Value);
+ Result := True;
+ end else if Name = 'hypertile3D1_q' then begin
+ if Value < 3 then Value := 3;
+ hypertile3D1_q := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationHypertile3D1.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D1_p' then begin
+ hypertile3D1_p := 3;
+ Result := True;
+ end else if Name = 'hypertile3D1_q' then begin
+ hypertile3D1_q := 7;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D1.GetNrVariables: integer;
+begin
+ Result := 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D1.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D1_p' then begin
+ Value := hypertile3D1_p;
+ Result := True;
+ end else if Name = 'hypertile3D1_q' then begin
+ Value := hypertile3D1_q;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHypertile3D1), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varHypertile3D2.pas b/Variations/varHypertile3D2.pas
new file mode 100644
index 0000000..8108925
--- /dev/null
+++ b/Variations/varHypertile3D2.pas
@@ -0,0 +1,179 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varHypertile3D2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationHypertile3D2 = class(TBaseVariation)
+ private
+ hypertile3D2_p, hypertile3D2_q: integer;
+ pa, cx, c2, c2x, s2x, s2y, s2z: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationHypertile3D2.Prepare;
+var
+ t, qa, r: double;
+begin
+ pa := PI2 / hypertile3D2_p;
+ qa := PI2 / hypertile3D2_q;
+ t := cos(pa);
+ r := -(t - 1) / (t + cos(qa));
+ if (r > 0) then
+ r := 1 / sqrt(1 + r)
+ else
+ r := 1;
+
+ cx := r;
+ c2 := sqr(cx);
+ c2x := 2 * cx;
+
+ s2x := 1 + c2;
+ s2y := 1 - c2;
+ s2z := 1 - c2;
+end;
+
+procedure TVariationHypertile3D2.CalcFunction;
+var
+ r2, sina, cosa, x2cx, x, y, vr: double;
+begin
+ r2 := sqr(FTx^) + sqr(FTy^) + sqr(FTz^);
+
+ x2cx := c2x * FTx^;
+ x := FTx^ * s2x - cx * (-r2 - 1);
+ y := FTy^ * s2y;
+
+ vr := vvar / (c2 * r2 + x2cx + 1);
+ SinCos(random(32767) * pa, sina, cosa);
+
+ FPx^ := FPx^ + vr * (x * cosa + y * sina);
+ FPy^ := FPy^ + vr * (y * cosa - x * sina);
+ FPz^ := FPz^ + vr * (FTz^ * s2z);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationHypertile3D2.Create;
+begin
+ hypertile3D2_p := 3;
+ hypertile3D2_q := 7;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile3D2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationHypertile3D2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationHypertile3D2.GetName: string;
+begin
+ Result := 'hypertile3D2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'hypertile3D2_p';
+ 1: Result := 'hypertile3D2_q';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D2_p' then begin
+ if Value < 3 then Value := 3;
+ hypertile3D2_p := Round(Value);
+ Result := True;
+ end else if Name = 'hypertile3D2_q' then begin
+ if Value < 3 then Value := 3;
+ hypertile3D2_q := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationHypertile3D2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D2_p' then begin
+ hypertile3D2_p := 3;
+ Result := True;
+ end else if Name = 'hypertile3D2_q' then begin
+ hypertile3D2_q := 7;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D2.GetNrVariables: integer;
+begin
+ Result := 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationHypertile3D2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'hypertile3D2_p' then begin
+ Value := hypertile3D2_p;
+ Result := True;
+ end else if Name = 'hypertile3D2_q' then begin
+ Value := hypertile3D2_q;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationHypertile3D2), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varInversion3D.pas b/Variations/varInversion3D.pas
new file mode 100644
index 0000000..1f45ce2
--- /dev/null
+++ b/Variations/varInversion3D.pas
@@ -0,0 +1,169 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varInversion3D;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ sr = 'inversion3D_radius';
+ sx0 = 'inversion3D_x0';
+ sy0 = 'inversion3D_y0';
+ sz0 = 'inversion3D_z0';
+
+type
+ TVariationInversion3D = class(TBaseVariation)
+ private
+ r, r2, x0, y0, z0: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationInversion3D }
+
+//////////////////////////////////////////
+procedure TVariationInversion3D.Prepare;
+begin
+ r2 := sqr(r);
+end;
+
+//////////////////////////////////////////
+procedure TVariationInversion3D.CalcFunction;
+var x, y, z, dist: double;
+begin
+ x := FTx^ - x0;
+ y := FTy^ - y0;
+ z := FTz^ - z0;
+
+ dist := sqr(x) + sqr(y) + sqr(z) + 1E-30;
+
+ FPx^ := FPx^ + vvar * (r2 * x / dist + x0);
+ FPy^ := FPy^ + vvar * (r2 * y / dist + y0);
+ FPz^ := FPz^ + vvar * (r2 * z / dist + z0);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+constructor TVariationInversion3D.Create;
+begin
+ r := 1;
+ x0 := 0;
+ y0 := 0;
+ z0 := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationInversion3D.GetInstance: TBaseVariation;
+begin
+ Result := TVariationInversion3D.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationInversion3D.GetName: string;
+begin
+ Result := 'inversion3D';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationInversion3D.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := sr;
+ 1: Result := sx0;
+ 2: Result := sy0;
+ 3: Result := sz0;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationInversion3D.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sr then begin
+ if (Value < 1E-6) then Value := 1E-6;
+ r := value;
+ Result := True;
+ end else if Name = sx0 then begin
+ x0 := Value;
+ Result := True;
+ end else if Name = sy0 then begin
+ y0 := Value;
+ Result := True;
+ end else if Name = sz0 then begin
+ z0 := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationInversion3D.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = sr then begin
+ r := 1;
+ Result := True;
+ end else if Name = sx0 then begin
+ x0 := 0;
+ Result := True;
+ end else if Name = sy0 then begin
+ y0 := 0;
+ Result := True;
+ end else if Name = sz0 then begin
+ z0 := 0;
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationInversion3D.GetNrVariables: integer;
+begin
+ Result := 4;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationInversion3D.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sr then begin
+ Value := r;
+ Result := True;
+ end else if Name = sx0 then begin
+ Value := x0;
+ Result := True;
+ end else if Name = sy0 then begin
+ Value := y0;
+ Result := True;
+ end else if Name = sz0 then begin
+ Value := z0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationInversion3D), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varJulia.pas b/Variations/varJulia.pas
new file mode 100644
index 0000000..7a4feda
--- /dev/null
+++ b/Variations/varJulia.pas
@@ -0,0 +1,237 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varJulia;
+
+interface
+uses
+{$ifdef Apo7X64}
+{$else}
+AsmRandom,
+{$endif}
+ BaseVariation, XFormMan;
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationJulia = class(TBaseVariation)
+ private
+ old: byte;
+ vvar2: double;
+ procedure CalcPlugin;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const IndJulia: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+////////////////////////
+procedure TVariationJulia.Prepare;
+begin
+ vvar2 := vvar * sqrt(2) * 0.5;
+end;
+
+procedure TVariationJulia.GetCalcFunction(var f: TCalcFunction);
+begin
+ if old = 1 then f := CalcFunction
+ else f := CalcPlugin;
+end;
+
+procedure TVariationJulia.CalcFunction;
+ {$ifndef _ASM_}
+var
+ r: double;
+begin
+(*
+ // AV: oriiginal code was:
+
+ FAngle := arctan2(FTx^, FTy^) / 2;
+ SinCos(FAngle + pi * random(2), sina, cosa);
+ r := vvar * sqrt(sqrt(sqrt(sqr(FTx^) + sqr(FTy^)));
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+
+ // AV: I simplified calculations
+*)
+
+ r := sqrt(sqrt(sqr(FTx^) + sqr(FTy^)) + FTy^ );
+
+ if random(2) = 0 then begin
+ FPx^ := FPx^ + vvar2 * r;
+ FPy^ := FPy^ + vvar2 / r * FTx^;
+ end
+ else begin
+ FPx^ := FPx^ - vvar2 * r;
+ FPy^ := FPy^ - vvar2 / r * FTx^;
+ end;
+{$else}
+ asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fld qword ptr [edx + 8] // FTy
+ fld st(1) // FTx
+ fmul st,st // sqr(FTx)
+ fld st(1) // FTy
+ fmul st,st // sqr(FTy)
+ faddp
+ fsqrt
+ faddp
+ fsqrt
+
+ fld qword ptr [eax + vvar2]
+ mov ecx,eax
+ mov eax,2
+ call AsmRandInt
+ shr eax,1
+ jc @skip
+ fchs
+@skip:
+
+ fmul st(2),st
+ fmul st,st(1)
+
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fdivp st(1),st
+ fadd qword ptr [edx + 8]
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+ end;
+
+procedure TVariationJulia.CalcPlugin;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := sqrt(sqrt(sqr(FTx^) + sqr(FTy^)) + FTx^ );
+
+ if random(2) = 0 then begin
+ FPx^ := FPx^ + vvar2 * r;
+ FPy^ := FPy^ + vvar2 / r * FTy^;
+ end
+ else begin
+ FPx^ := FPx^ - vvar2 * r;
+ FPy^ := FPy^ - vvar2 / r * FTy^;
+ end;
+{$else}
+ asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fmul st,st
+ fld st(1)
+ fmul st,st
+ faddp
+ fsqrt
+ faddp
+ fsqrt
+
+ fld qword ptr [eax + vvar2]
+ mov ecx,eax
+ mov eax,2
+ call AsmRandInt
+ shr eax,1
+ jc @skip
+ fchs
+@skip:
+
+ fmul st(2),st
+ fmul st,st(1)
+
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fdivp st(1),st
+ fadd qword ptr [edx + 8]
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+end;
+
+constructor TVariationJulia.Create;
+begin
+ old := 1;
+end;
+
+class function TVariationJulia.GetInstance: TBaseVariation;
+begin
+ Result := TVariationJulia.Create;
+end;
+
+class function TVariationJulia.GetName: string;
+begin
+ Result := 'julia';
+end;
+
+function TVariationJulia.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+function TVariationJulia.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'julia_old' then begin
+ value := old;
+ Result := True;
+ end;
+end;
+
+function TVariationJulia.GetVariableNameAt(const IndJulia: integer): string;
+begin
+ case IndJulia of
+ 0: Result := 'julia_old';
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationJulia.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'julia_old' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ old := Round(value);
+ Result := True;
+ end;
+end;
+
+function TVariationJulia.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'julia_old' then begin
+ old := 1;
+ Result := True;
+ end;
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationJulia), false, false);
+
+end.
diff --git a/Variations/varJulia3Djf.pas b/Variations/varJulia3Djf.pas
new file mode 100644
index 0000000..289b18e
--- /dev/null
+++ b/Variations/varJulia3Djf.pas
@@ -0,0 +1,462 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varJulia3Djf; // original variation code by Joel Faber, modified & optimized by Peter Sdobnov
+
+interface
+
+uses
+{$ifdef Apo7X64}
+{$else}
+AsmRandom,
+{$endif}
+ BaseVariation, XFormMan;
+
+const
+ var_name = 'julia3D';
+ var_n_name='julia3D_power';
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationJulia3DJF = class(TBaseVariation)
+ private
+ N: integer;
+
+ absN: integer;
+ cN: double;
+
+ procedure CalcPower1;
+ procedure CalcPowerMinus1;
+ procedure CalcPower2;
+ procedure CalcPowerMinus2;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+// TVariationJulia3DJF
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationJulia3DJF.Create;
+begin
+ N := random(5) + 2;
+ if random(2) = 0 then N := -N;
+end;
+
+procedure TVariationJulia3DJF.Prepare;
+begin
+ absN := abs(N);
+ cN := (1/N - 1) / 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationJulia3DJF.GetCalcFunction(var f: TCalcFunction);
+begin
+ if N = 2 then f := CalcPower2
+ else if N = -2 then f := CalcPowerMinus2
+ else if N = 1 then f := CalcPower1
+ else if N = -1 then f := CalcPowerMinus1
+ else f := CalcFunction;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationJulia3DJF.CalcFunction;
+{$ifndef _ASM_}
+var
+ r, r2d, z, tmp: double;
+ sina, cosa: extended;
+begin
+ z := FTz^ / absN;
+ r2d := sqr(FTx^) + sqr(FTy^);
+ r := vvar * Math.Power(r2d + sqr(z), cN); // r^n / sqrt(r) --> r^(n-0.5)
+
+ FPz^ := FPz^ + r * z;
+
+ tmp := r * sqrt(r2d);
+ sincos((arctan2(FTy^, FTx^) + 2*pi*random(absN)) / N, sina, cosa);
+
+ FPx^ := FPx^ + tmp * cosa;
+ FPy^ := FPy^ + tmp * sina;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 32] // FTz
+ fidiv dword ptr [eax + absN]
+ fld qword ptr [edx] // FTx
+ fld qword ptr [edx + 8] // FTy
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fld qword ptr [eax + cN]
+ fld st(4)
+ fmul st, st
+ fadd st, st(2)
+// --- x^y = 2^(y*log2(x))
+ fyl2x
+ fld st
+ frndint
+ fsub st(1), st
+ fxch st(1)
+ f2xm1
+ fld1
+ fadd
+ fscale
+ fstp st(1)
+// ---
+ fmul qword ptr [eax + vvar]
+
+ fmul st(4), st
+ fxch st(1)
+ fsqrt
+ fmulp
+
+ fxch st(2)
+ fpatan
+ mov ecx, eax
+ mov eax, dword ptr [eax + absN]
+ call AsmRandInt
+ push eax
+ fild dword ptr [esp]
+ add esp, 4
+ fldpi
+ fadd st, st
+ fmulp
+ faddp
+ fidiv dword ptr [ecx + N]
+
+ fsincos
+ mov edx, [ecx + FPx]
+ fmul st, st(2)
+ fadd qword ptr [edx] // FPx
+ fstp qword ptr [edx]
+ fmulp
+ fadd qword ptr [edx + 8] // FPy
+ fstp qword ptr [edx + 8]
+ fadd qword ptr [edx + $18] // FPz
+ fstp qword ptr [edx + $18]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulia3DJF.CalcPower2;
+{$ifndef _ASM_}
+var
+ r, r2d, z, tmp: double;
+ sina, cosa: extended;
+begin
+ z := FTz^ / 2;
+ r2d := sqr(FTx^) + sqr(FTy^);
+ r := vvar / sqrt(sqrt(r2d + sqr(z))); // vvar * sqrt(r3d) / r3d --> vvar / sqrt(r3d)
+
+ FPz^ := FPz^ + r * z;
+
+ tmp := r * sqrt(r2d);
+ sincos(arctan2(FTy^, FTx^) / 2 + pi*random(2), sina, cosa);
+
+ FPx^ := FPx^ + tmp * cosa;
+ FPy^ := FPy^ + tmp * sina;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 32] // FTz
+ fld1
+ fadd st, st
+ fdiv st(1), st
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fld st(1)
+ fpatan
+ fdivrp st(3), st
+
+ fmul st, st
+ fxch st(1)
+ fmul st, st
+ faddp
+ fld st(2)
+ fmul st, st
+ fadd st, st(1)
+ fsqrt
+ fsqrt
+ fdivr qword ptr [eax + vvar]
+ fmul st(3), st
+
+ fxch st(1)
+ fsqrt
+ fmulp
+ fxch st(1)
+
+ mov ecx, eax
+ mov eax, 2
+ call AsmRandInt
+ fldpi
+ push eax
+ fimul dword ptr [esp]
+ add esp, 4
+ faddp
+
+ fsincos
+ mov edx, [ecx + FPx]
+ fmul st, st(2)
+ fadd qword ptr [edx] // FPx
+ fstp qword ptr [edx]
+ fmulp
+ fadd qword ptr [edx + 8] // FPy
+ fstp qword ptr [edx + 8]
+ fadd qword ptr [edx + $18] // FPz
+ fstp qword ptr [edx + $18]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulia3DJF.CalcPowerMinus2;
+{$ifndef _ASM_}
+var
+ r, r2d, r3d, z, tmp: double;
+ sina, cosa: extended;
+begin
+ z := FTz^ / 2;
+ r2d := sqr(FTx^) + sqr(FTy^);
+ r3d := sqrt(r2d + sqr(z));
+ r := vvar / (sqrt(r3d) * r3d);
+
+ FPz^ := FPz^ + r * z;
+
+ tmp := r * sqrt(r2d);
+ sincos(arctan2(FTy^, FTx^) / 2 + pi*random(2), sina, cosa);
+
+ FPx^ := FPx^ + tmp * cosa;
+ FPy^ := FPy^ - tmp * sina;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 32] // FTz
+ fld1
+ fadd st, st
+ fdiv st(1), st
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fld st(1)
+ fpatan
+ fdivrp st(3), st
+
+ fmul st, st
+ fxch st(1)
+ fmul st, st
+ faddp
+ fld st(2)
+ fmul st, st
+ fadd st, st(1)
+ fsqrt
+ fld st
+ fsqrt
+ fmulp
+ fdivr qword ptr [eax + vvar]
+ fmul st(3), st
+
+ fxch st(1)
+ fsqrt
+ fmulp
+ fxch st(1)
+
+ mov ecx, eax
+ mov eax, 2
+ call AsmRandInt
+ fldpi
+ push eax
+ fimul dword ptr [esp]
+ add esp, 4
+ faddp
+
+ fsincos
+ mov edx, [ecx + FPx]
+ fmul st, st(2)
+ fadd qword ptr [edx] // FPx
+ fstp qword ptr [edx]
+ fmulp
+ fsubr qword ptr [edx + 8] // FPy
+ fstp qword ptr [edx + 8]
+ fadd qword ptr [edx + $18] // FPz
+ fstp qword ptr [edx + $18]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulia3DJF.CalcPower1;
+{$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * FTx^;
+ FPy^ := FPy^ + vvar * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 8] // FTy
+ fmul st, st(1)
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulia3DJF.CalcPowerMinus1;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := vvar / (sqr(FTx^) + sqr(FTy^) + sqr(FTz^));
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ - r * FTy^;
+ FPz^ := FPz^ + r * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 32] // FTz
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(2)
+ fmul st, st
+ fld st(2)
+ fmul st, st
+ faddp
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+
+ fmul st(3), st
+ fmul st(2), st
+ fmulp
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+ fsubr qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulia3DJF.GetInstance: TBaseVariation;
+begin
+ Result := TVariationJulia3DJF.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulia3DJF.GetName: string;
+begin
+ Result := var_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulia3DJF.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := var_n_name;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulia3DJF.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ N := Round(Value);
+ if N = 0 then N := 1;
+ Value := N;
+ Result := True;
+ end;
+end;
+
+function TVariationJulia3DJF.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ if N = 2 then N := -2
+ else N := 2;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulia3DJF.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulia3DJF.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ Value := N;
+ Result := true;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationJulia3DJF), true, false);
+end.
+
diff --git a/Variations/varJulia3Dz.pas b/Variations/varJulia3Dz.pas
new file mode 100644
index 0000000..86bb865
--- /dev/null
+++ b/Variations/varJulia3Dz.pas
@@ -0,0 +1,445 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varJulia3Dz;
+
+interface
+
+uses
+{$ifdef Apo7X64}
+{$else}
+AsmRandom,
+{$endif}
+ BaseVariation, XFormMan;
+
+const
+ var_name = 'julia3Dz';
+ var_n_name='julia3Dz_power';
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationJulia3D = class(TBaseVariation)
+ private
+ N: integer;
+
+ absN: integer;
+ cN: double;
+
+ procedure CalcPower1;
+ procedure CalcPowerMinus1;
+ procedure CalcPower2;
+ procedure CalcPowerMinus2;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+// TVariationJulia3D
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationJulia3D.Create;
+begin
+ N := random(5) + 2;
+ if random(2) = 0 then N := -N;
+end;
+
+procedure TVariationJulia3D.Prepare;
+begin
+ absN := abs(N);
+ cN := 1 / N / 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationJulia3D.GetCalcFunction(var f: TCalcFunction);
+begin
+ if N = 2 then f := CalcPower2
+ else if N = -2 then f := CalcPowerMinus2
+ else if N = 1 then f := CalcPower1
+ else if N = -1 then f := CalcPowerMinus1
+ else f := CalcFunction;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationJulia3D.CalcFunction;
+{$ifndef _ASM_}
+var
+ r, r2d: double;
+ sina, cosa: extended;
+begin
+ r2d := sqr(FTx^) + sqr(FTy^);
+ r := vvar * Math.Power(r2d, cN);
+
+ FPz^ := FPz^ + r * FTz^ / (sqrt(r2d) * absN);
+
+ sincos((arctan2(FTy^, FTx^) + 2*pi*random(absN)) / N, sina, cosa);
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fld qword ptr [edx + 8] // FTy
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fld qword ptr [eax + cN]
+ fld st(1)
+// --- x^y = 2^(y*log2(x))
+ fyl2x
+ fld st
+ frndint
+ fsub st(1), st
+ fxch st(1)
+ f2xm1
+ fld1
+ fadd
+ fscale
+ fstp st(1)
+// ---
+ fmul qword ptr [eax + vvar]
+
+ fxch st(1)
+ fsqrt
+ fimul dword ptr [eax + absN]
+ fdivr st, st(1)
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ fxch st(2)
+ fpatan
+ mov ecx, eax
+ mov eax, dword ptr [eax + absN]
+ call AsmRandInt
+ push eax
+ fild dword ptr [esp]
+ add esp, 4
+ fldpi
+ fadd st, st
+ fmulp
+ faddp
+ fidiv dword ptr [ecx + N]
+
+ fsincos
+ fmul st, st(2)
+
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx] // FPx
+ fstp qword ptr [edx]
+ fmulp
+ fadd qword ptr [edx + 8] // FPy
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulia3D.CalcPower2;
+{$ifndef _ASM_}
+var
+ r, r2d: double;
+ sina, cosa: extended;
+begin
+ r2d := sqrt(sqr(FTx^) + sqr(FTy^));
+ r := vvar * sqrt(r2d);
+
+ FPz^ := FPz^ + r * FTz^ / r2d / 2;
+
+ sincos((arctan2(FTy^, FTx^)/2 + pi*random(2)), sina, cosa);
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fld st(1)
+ fpatan
+ fld1
+ fadd st, st
+ fdivp st(1), st
+ mov ecx, eax
+ mov eax, 2
+ call AsmRandInt
+ fldpi
+ push eax
+ fimul dword ptr [esp]
+ add esp, 4
+ faddp
+
+ fxch st(2)
+ fmul st, st
+ fxch st(1)
+ fmul st, st
+ faddp
+ fsqrt
+
+ fld st
+
+ fsqrt
+ fmul qword ptr [ecx + vvar]
+
+ fxch st(1)
+ fadd st, st
+ fdivr st, st(1)
+
+ mov edx, [ecx + FPx]
+ fmul qword ptr [edx + $10] // FTz
+ fadd qword ptr [edx + $18] // FPz
+ fstp qword ptr [edx + $18]
+
+ fxch st(1)
+
+ fsincos
+
+ fmul st, st(2)
+ fadd qword ptr [edx] // FPx
+ fstp qword ptr [edx]
+ fmulp
+ fadd qword ptr [edx + 8] // FPy
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulia3D.CalcPowerMinus2;
+{$ifndef _ASM_}
+var
+ r, r2d: double;
+ sina, cosa: extended;
+begin
+ r2d := sqrt(sqr(FTx^) + sqr(FTy^));
+ r := vvar / sqrt(r2d);
+
+ FPz^ := FPz^ + r * FTz^ / r2d / 2;
+
+ sincos(pi*random(2) - arctan2(FTy^, FTx^)/2, sina, cosa);
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fld st(1)
+ fpatan
+ fld1
+ fadd st, st
+ fdivp st(1), st
+ mov ecx, eax
+ mov eax, 2
+ call AsmRandInt
+ fldpi
+ push eax
+ fimul dword ptr [esp]
+ add esp, 4
+ faddp
+
+ fxch st(2)
+ fmul st, st
+ fxch st(1)
+ fmul st, st
+ faddp
+ fsqrt
+
+ fld st
+
+ fsqrt
+ fdivr qword ptr [ecx + vvar]
+
+ fxch st(1)
+ fadd st, st
+ fdivr st, st(1)
+ mov edx, [ecx + FPx]
+ fmul qword ptr [edx + $10] // FTz
+ fadd qword ptr [edx + $18]
+ fstp qword ptr [edx + $18]
+
+ fxch st(1)
+ fsincos
+
+ fmul st, st(2)
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx] // FPx
+ fstp qword ptr [edx]
+ fmulp
+ fsubr qword ptr [edx + 8] // FPy
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulia3D.CalcPower1;
+{$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * FTx^;
+ FPy^ := FPy^ + vvar * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 8] // FTy
+ fmul st, st(1)
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulia3D.CalcPowerMinus1;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := vvar / (sqr(FTx^) + sqr(FTy^));
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ - r * FTy^;
+ FPz^ := FPz^ + r * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+
+ fmul st(2), st
+ fmul st(1), st
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+ fsubr qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulia3D.GetInstance: TBaseVariation;
+begin
+ Result := TVariationJulia3D.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulia3D.GetName: string;
+begin
+ Result := var_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulia3D.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := var_n_name;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulia3D.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ N := Round(Value);
+ if N = 0 then N := 1;
+ Value := N;
+ Result := True;
+ end;
+end;
+
+function TVariationJulia3D.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ if N = 2 then N := -2
+ else N := 2;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulia3D.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulia3D.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ Value := N;
+ Result := true;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationJulia3D), true, false);
+end.
diff --git a/Variations/varJuliaN.pas b/Variations/varJuliaN.pas
new file mode 100644
index 0000000..7afa266
--- /dev/null
+++ b/Variations/varJuliaN.pas
@@ -0,0 +1,432 @@
+unit varJuliaN;
+
+interface
+
+uses
+{$ifdef Apo7X64}
+{$else}
+AsmRandom,
+{$endif}
+ BaseVariation, XFormMan;
+
+const
+ var_name = 'julian';
+ var_n_name='julian_power';
+ var_c_name='julian_dist';
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationJulian = class(TBaseVariation)
+ private
+ N: integer;
+ c: double;
+
+ absN: integer;
+ cN, vvar2: double;
+
+ procedure CalcPower1;
+ procedure CalcPowerMinus1;
+ procedure CalcPower2;
+ procedure CalcPowerMinus2;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+// TVariationJulian
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationJulian.Create;
+begin
+ N := random(5) + 2;
+ c := 1.0;
+end;
+
+procedure TVariationJulian.Prepare;
+begin
+ absN := abs(N);
+ cN := c / N / 2;
+
+ vvar2 := vvar * sqrt(2)/2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationJulian.GetCalcFunction(var f: TCalcFunction);
+begin
+ if c = 1 then begin
+ if N = 2 then f := CalcPower2
+ else if N = -2 then f := CalcPowerMinus2
+ else if N = 1 then f := CalcPower1
+ else if N = -1 then f := CalcPowerMinus1
+ else f := CalcFunction;
+ end
+ else f := CalcFunction;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationJulian.CalcFunction;
+{$ifndef _ASM_}
+var
+ r: double;
+ sina, cosa: extended;
+begin
+ sincos((arctan2(FTy^, FTx^) + 2 * pi * random(absN)) / N, sina, cosa);
+ r := vvar * Math.Power(sqr(FTx^) + sqr(FTy^), cN);
+
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+ FPz^ := FPz^ + vvar * FTz^;
+ {$else}
+const
+ epsval: double = 1.0e-12;
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx] // FTx
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [eax + cN]
+ fld st(2)
+ fmul st, st
+ fld st(2)
+ fmul st, st
+ faddp
+ // x^y = 2^(y*log2(x))
+ // Add small value to prevent divide-by-zero error
+ // in case x =(FTx^2+FTy^2) = 0
+ fld epsval
+ faddp st(1), st
+ fyl2x
+ fld st
+ frndint
+ fsub st(1), st
+ fxch st(1)
+ f2xm1
+ fld1
+ fadd
+ fscale
+ fstp st(1)
+
+ fmul qword ptr [eax + vvar]
+
+ fxch st(2)
+ fpatan
+ mov ecx, eax
+ mov eax, dword ptr [eax + absN]
+ call AsmRandInt
+ push eax
+ fild dword ptr [esp]
+ add esp, 4
+ fldpi
+ fadd st, st
+ fmulp
+ faddp
+ fidiv dword ptr [ecx + N]
+ fsincos
+
+ fmul st, st(2)
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx] // FPx
+ fstp qword ptr [edx]
+ fmulp
+ fadd qword ptr [edx + 8] // FPy
+ fstp qword ptr [edx + 8]
+ fwait
+ {$endif}
+end;
+
+procedure TVariationJulian.CalcPower2;
+{$ifndef _ASM_}
+var
+ d: double;
+begin
+ d := sqrt( sqrt(sqr(FTx^) + sqr(FTy^)) + FTx^ );
+
+ if random(2) = 0 then begin
+ FPx^ := FPx^ + vvar2 * d;
+ FPy^ := FPy^ + vvar2 / d * FTy^;
+ end
+ else begin
+ FPx^ := FPx^ - vvar2 * d;
+ FPy^ := FPy^ - vvar2 / d * FTy^;
+ end;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+ asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fmul st,st
+ fld st(1)
+ fmul st,st
+ faddp
+ fsqrt
+ faddp
+ fsqrt
+
+ fld qword ptr [eax + vvar2]
+ mov ecx,eax
+ mov eax,2
+ call AsmRandInt
+ shr eax,1
+ jc @skip
+ fchs
+@skip:
+
+ fmul st(2),st
+ fmul st,st(1)
+
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fdivp st(1),st
+ fadd qword ptr [edx + 8]
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulian.CalcPowerMinus2;
+{$ifndef _ASM_}
+var
+ r, xd: double;
+begin
+ r := sqrt(sqr(FTx^) + sqr(FTy^));
+ xd := r + FTx^;
+
+ r := vvar / sqrt(r * (sqr(Fty^) + sqr(xd)) );
+
+ if random(2) = 0 then begin
+ FPx^ := FPx^ + r * xd;
+ FPy^ := FPy^ - r * FTy^;
+ end
+ else begin
+ FPx^ := FPx^ - r * xd;
+ FPy^ := FPy^ + r * FTy^;
+ end;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8]
+ fld qword ptr [edx]
+ fld st(1)
+ fmul st,st
+ fld st(1)
+ fmul st,st
+ faddp
+ fsqrt
+ fadd st(1),st
+ fld st(1)
+ fmul st,st
+ fld st(3)
+ fmul st,st
+ faddp
+ fmulp
+ fsqrt
+
+ fdivr qword ptr [eax + vvar]
+
+ mov ecx,eax
+ mov eax,2
+ call AsmRandInt
+ shr eax,1
+ jc @skip
+ fchs
+@skip:
+
+ fmul st(1),st
+ fmulp st(2),st
+
+ mov edx, [ecx + FPx]
+ fsubr qword ptr [edx]
+ fstp qword ptr [edx]
+ fadd qword ptr [edx + 8]
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulian.CalcPower1;
+ {$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * FTx^;
+ FPy^ := FPy^ + vvar * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+ {$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 8] // FTy
+ fmul st, st(1)
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJulian.CalcPowerMinus1;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := vvar / (sqr(FTx^) + sqr(FTy^));
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ - r * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+ fmul st(2), st
+ fmulp
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+ fsubr qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulian.GetInstance: TBaseVariation;
+begin
+ Result := TVariationJulian.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulian.GetName: string;
+begin
+ Result := var_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := var_n_name;
+ 1: Result := var_c_name;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ N := Round(Value);
+ if N = 0 then N := 1;
+ Value := N;
+ Result := True;
+ end
+ else if Name = var_c_name then begin
+ c := value;
+ Result := True;
+ end;
+end;
+
+function TVariationJulian.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ if N = 2 then N := -2
+ else N := 2;
+ Result := True;
+ end
+ else if Name = var_c_name then begin
+ c := 1;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian.GetNrVariables: integer;
+begin
+ Result := 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ Value := N;
+ Result := true;
+ end
+ else if Name = var_c_name then begin
+ Value := c;
+ Result := true;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationJulian), true, false);
+end.
+
diff --git a/Variations/varJuliaN3Dx.pas b/Variations/varJuliaN3Dx.pas
new file mode 100644
index 0000000..db04da0
--- /dev/null
+++ b/Variations/varJuliaN3Dx.pas
@@ -0,0 +1,252 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varJuliaN3Dx;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ j3power = 'julian3Dx_power';
+ j3dist = 'julian3Dx_dist';
+ j3a = 'julian3Dx_a';
+ j3b = 'julian3Dx_b';
+ j3c = 'julian3Dx_c';
+ j3d = 'julian3Dx_d';
+ j3e = 'julian3Dx_e';
+ j3f = 'julian3Dx_f';
+
+type
+ TVariationJulian3Dx = class(TBaseVariation)
+ private
+ jdist, ja, jb, jc, jd, je, jf: double;
+ jpower, absN: integer;
+ cN, pi2: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationJulian3Dx }
+
+{ Based on standart Julia3D by Joel Faber,
+ with additional pre-affine parameters and JuliaN_dist variable }
+
+//////////////////////////////////////////
+procedure TVariationJulian3Dx.Prepare;
+var ca, sa: double;
+begin
+ absN := abs(jpower);
+ cN := (jdist / jpower - 1.0) / 2.0;
+ pi2 := pi * 2;
+end;
+
+//////////////////////////////////////////
+procedure TVariationJulian3Dx.CalcFunction;
+var x, y, z, r, r2, alpha, sina, cosa: double;
+begin
+ x := ja * FTx^ + jb * FTy^ + je;
+ y := jc * FTx^ + jd * FTy^ + jf;
+ z := FTz^ / absN;
+
+ r2 := sqr(x) + sqr(y); // AV: replaced FTx^ * FTx^ + FTy^ * FTy^;
+ r := vvar * Math.power(r2 + z * z, cN);
+ FPz^ := FPz^ + r * z;
+
+ alpha := (arctan2(y, x) + pi2 * random(absN))/ jpower;
+ SinCos(alpha, sina, cosa);
+ r := r * sqrt(r2);
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+constructor TVariationJulian3Dx.Create;
+begin
+ jpower := 2 + random(5);
+ jdist := 1;
+ ja := 1;
+ jb := 0;
+ jc := 0;
+ jd := 1;
+ je := 0;
+ jf := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulian3Dx.GetInstance: TBaseVariation;
+begin
+ Result := TVariationJulian3Dx.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulian3Dx.GetName: string;
+begin
+ Result := 'julian3Dx';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian3Dx.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := j3power;
+ 1: Result := j3dist;
+ 2: Result := j3a;
+ 3: Result := j3b;
+ 4: Result := j3c;
+ 5: Result := j3d;
+ 6: Result := j3e;
+ 7: Result := j3f;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian3Dx.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = j3power then begin
+ jpower := Round(Value);
+ if jpower = 0 then jpower := 1;
+ Value := jpower;
+ Result := True;
+ end else if Name = j3dist then begin
+ jdist := value;
+ Result := True;
+ end else if Name = j3a then begin
+ ja := Value;
+ Result := True;
+ end else if Name = j3b then begin
+ jb := Value;
+ Result := True;
+ end else if Name = j3c then begin
+ jc := Value;
+ Result := True;
+ end else if Name = j3d then begin
+ jd := Value;
+ Result := True;
+ end else if Name = j3e then begin
+ je := Value;
+ Result := True;
+ end else if Name = j3f then begin
+ jf := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationJulian3Dx.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = j3power then begin
+ jpower := 2;
+ Result := True;
+ end else if Name = j3dist then begin
+ jdist := 1;
+ Result := True;
+ end else if Name = j3a then begin
+ ja := 1;
+ Result := True;
+ end else if Name = j3b then begin
+ jb := 0;
+ Result := True;
+ end else if Name = j3c then begin
+ jc := 0;
+ Result := True;
+ end else if Name = j3d then begin
+ jd := 1;
+ Result := True;
+ end else if Name = j3e then begin
+ je := 0;
+ Result := True;
+ end else if Name = j3f then begin
+ jf := 0;
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationJulian3Dx.GetNrVariables: integer;
+begin
+ Result := 8;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian3Dx.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = j3power then begin
+ Value := jpower;
+ Result := True;
+ end else if Name = j3dist then begin
+ Value := jdist;
+ Result := True;
+ end else if Name = j3a then begin
+ Value := ja;
+ Result := True;
+ end else if Name = j3b then begin
+ Value := jb;
+ Result := True;
+ end else if Name = j3c then begin
+ Value := jc;
+ Result := True;
+ end else if Name = j3d then begin
+ Value := jd;
+ Result := True;
+ end else if Name = j3e then begin
+ Value := je;
+ Result := True;
+ end else if Name = j3f then begin
+ Value := jf;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationJulian3Dx), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varJuliaScope.pas b/Variations/varJuliaScope.pas
new file mode 100644
index 0000000..0238c8c
--- /dev/null
+++ b/Variations/varJuliaScope.pas
@@ -0,0 +1,472 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varJuliaScope;
+
+interface
+
+uses
+{$ifdef Apo7X64}
+{$else}
+AsmRandom,
+{$endif}
+ BaseVariation, XFormMan;
+
+const
+ variation_name='juliascope';
+ var_n_name='juliascope_power';
+ var_c_name='juliascope_dist';
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationJuliaScope = class(TBaseVariation)
+ private
+ N: integer;
+ c: double;
+
+ rN: integer;
+ cn: double;
+
+ procedure CalcPower1;
+ procedure CalcPowerMinus1;
+ procedure CalcPower2;
+ procedure CalcPowerMinus2;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ math;
+
+// TVariationJuliaScope
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationJuliaScope.Create;
+begin
+ N := random(5) + 2;
+ c := 1.0;
+end;
+
+procedure TVariationJuliaScope.Prepare;
+begin
+ rN := abs(N);
+ cn := c / N / 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationJuliaScope.GetCalcFunction(var f: TCalcFunction);
+begin
+ if c = 1 then begin
+ if N = 2 then f := CalcPower2
+ else if N = -2 then f := CalcPowerMinus2
+ else if N = 1 then f := CalcPower1
+ else if N = -1 then f := CalcPowerMinus1
+ else f := CalcFunction;
+ end
+ else f := CalcFunction;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationJuliaScope.CalcFunction;
+{$ifndef _ASM_}
+var
+ rnd: integer;
+ r: double;
+ sina, cosa: extended;
+begin
+ rnd := random(rN);
+ if (rnd and 1) = 0 then
+ sincos( (2*pi*rnd + arctan2(FTy^, FTx^)) / N, sina, cosa)
+ else
+ sincos( (2*pi*rnd - arctan2(FTy^, FTx^)) / N, sina, cosa);
+ r := vvar * Math.Power(sqr(FTx^) + sqr(FTy^), cn);
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTy]
+ fld qword ptr [edx]
+ fld qword ptr [eax + cn]
+ mov edx, [eax + FTx]
+
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ // main code
+ fld qword ptr [edx]
+ fld st(2)
+ fld st(1)
+ fpatan
+ mov ecx, eax
+ mov eax, dword ptr [eax + rN]
+ call AsmRandInt
+ push eax
+
+ shr eax, 1
+ jnc @even
+ fchs
+@even:
+
+ fldpi
+ fadd st, st
+ fimul dword ptr [esp]
+ add esp, 4
+ faddp
+ fidiv dword ptr [ecx + N]
+
+ fxch st(3)
+ fmul st, st
+ fxch st(1)
+ fmul st, st
+ faddp
+// --- x^y = 2^(y*log2(x))
+ fyl2x
+ fld st
+ frndint
+ fsub st(1), st
+ fxch st(1)
+ f2xm1
+ fld1
+ fadd
+ fscale
+ fstp st(1)
+
+ fmul qword ptr [ecx + vvar]
+ fxch st(1)
+ fsincos
+ fmul st, st(2)
+
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fmulp
+ mov edx, [ecx + FPy]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJuliaScope.CalcPower2;
+ {$ifndef _ASM_}
+var
+ r: double;
+ sina, cosa: extended;
+begin
+ if random(2) = 0 then
+ sincos(arctan2(FTy^, FTx^)/2, sina, cosa)
+ else
+ sincos(pi - arctan2(FTy^, FTx^)/2, sina, cosa);
+
+ r := vvar * sqrt(sqrt(sqr(FTx^) + sqr(FTy^)));
+
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+ FPz^ := FPz^ + vvar * FTz^;
+ {$else}
+asm
+ mov edx, [eax + FTy]
+ fld qword ptr [edx]
+ mov edx, [eax + FTx]
+
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ // main code
+ fld qword ptr [edx]
+ fld st(1)
+ fld st(1)
+ fpatan
+ fld1
+ fadd st, st
+ fdivp st(1), st
+ mov ecx, eax
+ call AsmRandInt
+
+ shr eax, 1
+ jnc @skip
+ fldpi
+ fsubrp st(1), st
+@skip:
+ fxch st(2)
+ fmul st, st
+ fxch st(1)
+ fmul st, st
+ faddp
+ fsqrt
+ fsqrt
+ fmul qword ptr [ecx + vvar]
+ fxch st(1)
+
+ fsincos
+
+ fmul st, st(2)
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fmulp
+ mov edx, [ecx + FPy]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJuliaScope.CalcPowerMinus2;
+{$ifndef _ASM_}
+var
+ r: double;
+ sina, cosa: extended;
+begin
+ if random(2) = 0 then
+ sincos(arctan2(FTy^, FTx^)/2, sina, cosa)
+ else
+ sincos(pi - arctan2(FTy^, FTx^)/2, sina, cosa);
+ r := vvar / sqrt(sqrt(sqr(FTx^) + sqr(FTy^)));
+
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ - r * sina;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTy]
+ fld qword ptr [edx]
+ mov edx, [eax + FTx]
+
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ // main code
+ fld qword ptr [edx]
+ fld st(1)
+ fld st(1)
+ fpatan
+ fld1
+ fadd st, st
+ fdivp st(1), st
+ mov ecx, eax
+ mov eax, 2
+ call AsmRandInt
+
+ shr eax, 1
+ jnc @skip
+ fldpi
+ fsubrp st(1), st
+@skip:
+ fxch st(2)
+ fmul st, st
+ fxch st(1)
+ fmul st, st
+ faddp
+ fsqrt
+ fsqrt
+ fdivr qword ptr [ecx + vvar]
+ fxch st(1)
+
+ fsincos
+
+ fmul st, st(2)
+ mov edx, [ecx + FPx]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fmulp
+ mov edx, [ecx + FPy]
+ fsubr qword ptr [edx]
+ fstp qword ptr [edx]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJuliaScope.CalcPower1;
+ {$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * FTx^;
+ FPy^ := FPy^ + vvar * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+ {$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 8] // FTy
+ fmul st, st(1)
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ fwait
+{$endif}
+end;
+
+procedure TVariationJuliaScope.CalcPowerMinus1;
+ {$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := vvar / (sqr(FTx^) + sqr(FTy^));
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ - r * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+ fmul st(2), st
+ fmulp
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+ fsubr qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJuliaScope.GetInstance: TBaseVariation;
+begin
+ Result := TVariationJuliaScope.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJuliaScope.GetName: string;
+begin
+ Result := variation_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJuliaScope.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := var_n_name;
+ 1: Result := var_c_name;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJuliaScope.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ N := Round(Value);
+ if N = 0 then N := 1;
+ Value := N;
+ Result := True;
+ end
+ else if Name = var_c_name then begin
+ c := value;
+ Result := True;
+ end;
+end;
+
+function TVariationJuliaScope.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ if N = 2 then N := -2
+ else N := 2;
+ Result := True;
+ end
+ else if Name = var_c_name then begin
+ c := 1;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJuliaScope.GetNrVariables: integer;
+begin
+ Result := 2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJuliaScope.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_n_name then begin
+ Value := N;
+ Result := true;
+ end
+ else if Name = var_c_name then begin
+ Value := c;
+ Result := true;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationJuliaScope), true, false);
+end.
diff --git a/Variations/varJulian2DC.pas b/Variations/varJulian2DC.pas
new file mode 100644
index 0000000..f6ea368
--- /dev/null
+++ b/Variations/varJulian2DC.pas
@@ -0,0 +1,269 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varJulian2DC;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ j2power = 'julian2dc_power';
+ j2dist = 'julian2dc_dist';
+ j2col = 'julian2dc_col';
+ j2a = 'julian2dc_a';
+ j2b = 'julian2dc_b';
+ j2c = 'julian2dc_c';
+ j2d = 'julian2dc_d';
+ j2e = 'julian2dc_e';
+ j2f = 'julian2dc_f';
+
+ jeps: double = 1E-5;
+
+type
+ TVariationJulian2DC = class(TBaseVariation)
+ private
+ jdist, jcol, jpower, ja, jb, jc, jd, je, jf: double;
+ cN, pi2, jps, absN, den: double;
+ psn: smallint;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationJulian2DC }
+
+//////////////////////////////////////////
+procedure TVariationJulian2DC.Prepare;
+begin
+ absN := abs(jpower);
+ if (jpower > 0) then psn := 1 else psn := -1;
+ den := jpower + psn * jeps;
+ if (absN < 1) then
+ jps := 1 / den
+ else jps := jpower;
+ cN := jdist / jps / 2;
+ pi2 := pi * 2;
+end;
+
+//////////////////////////////////////////
+procedure TVariationJulian2DC.CalcFunction;
+var
+ x, y, r, angle, sina, cosa: double;
+ ra: integer;
+begin
+ x := ja * FTx^ + jb * FTy^ + je;
+ y := jc * FTx^ + jd * FTy^ + jf;
+
+ ra := Trunc(random * (absN - jeps));
+ angle := (arctan2(y, x) + pi2 * ra)/ den;
+ r := vvar * Math.power(sqr(x) + sqr(y), cN);
+
+ SinCos(angle, sina, cosa);
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+ color^ := fmod(abs(r * jcol + (angle / pi2) * (1 - jcol)), 1.0);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+constructor TVariationJulian2DC.Create;
+var beta, sinb, cosb: double;
+begin
+ beta := pi / RandomRange(1, 6);
+ SinCos(beta, sinb, cosb);
+ jpower := 2 + random(5);
+ jdist := 1;
+ jcol := random;
+ ja := cosb;
+ jb := sinb;
+ jc := -sinb;
+ jd := cosb;
+ je := 2 * random - 1;
+ jf := 2 * random - 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulian2DC.GetInstance: TBaseVariation;
+begin
+ Result := TVariationJulian2DC.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationJulian2DC.GetName: string;
+begin
+ Result := 'julian2dc';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian2DC.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := j2power;
+ 1: Result := j2dist;
+ 2: Result := j2col;
+ 3: Result := j2a;
+ 4: Result := j2b;
+ 5: Result := j2c;
+ 6: Result := j2d;
+ 7: Result := j2e;
+ 8: Result := j2f;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian2DC.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = j2power then begin
+ if abs(Value) < jeps then Value := jeps;
+ jpower := Value;
+ Result := True;
+ end else if Name = j2dist then begin
+ jdist := value;
+ Result := True;
+ end else if Name = j2col then begin
+ jcol := Value;
+ Result := True;
+ end else if Name = j2a then begin
+ ja := Value;
+ Result := True;
+ end else if Name = j2b then begin
+ jb := Value;
+ Result := True;
+ end else if Name = j2c then begin
+ jc := Value;
+ Result := True;
+ end else if Name = j2d then begin
+ jd := Value;
+ Result := True;
+ end else if Name = j2e then begin
+ je := Value;
+ Result := True;
+ end else if Name = j2f then begin
+ jf := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationJulian2DC.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = j2power then begin
+ jpower := 2;
+ Result := True;
+ end else if Name = j2dist then begin
+ jdist := 1;
+ Result := True;
+ end else if Name = j2col then begin
+ jcol := 0;
+ Result := True;
+ end else if Name = j2a then begin
+ ja := 1;
+ Result := True;
+ end else if Name = j2b then begin
+ jb := 0;
+ Result := True;
+ end else if Name = j2c then begin
+ jc := 0;
+ Result := True;
+ end else if Name = j2d then begin
+ jd := 1;
+ Result := True;
+ end else if Name = j2e then begin
+ je := 0;
+ Result := True;
+ end else if Name = j2f then begin
+ jf := 0;
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationJulian2DC.GetNrVariables: integer;
+begin
+ Result := 9;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationJulian2DC.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = j2power then begin
+ Value := jpower;
+ Result := True;
+ end else if Name = j2dist then begin
+ Value := jdist;
+ Result := True;
+ end else if Name = j2col then begin
+ Value := jcol;
+ Result := True;
+ end else if Name = j2a then begin
+ Value := ja;
+ Result := True;
+ end else if Name = j2b then begin
+ Value := jb;
+ Result := True;
+ end else if Name = j2c then begin
+ Value := jc;
+ Result := True;
+ end else if Name = j2d then begin
+ Value := jd;
+ Result := True;
+ end else if Name = j2e then begin
+ Value := je;
+ Result := True;
+ end else if Name = j2f then begin
+ Value := jf;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationJulian2DC), false, true);
+end.
diff --git a/Variations/varLazysusan.pas b/Variations/varLazysusan.pas
new file mode 100644
index 0000000..a02a634
--- /dev/null
+++ b/Variations/varLazysusan.pas
@@ -0,0 +1,195 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ You should have received a copy of the GNU General Public License
+ GNU General Public License for more details.
+
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varLazysusan;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationLazysusan = class(TBaseVariation)
+ private
+ lazysusan_spin, lazysusan_space, lazysusan_twist : double;
+ lazysusan_x, lazysusan_y : double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationLazysusan.Prepare;
+begin
+end;
+procedure TVariationLazysusan.CalcFunction;
+var
+ a, r, sina, cosa, x, y: double;
+begin
+ x := FTx^ - lazysusan_x;
+ y := FTy^ + lazysusan_y;
+ r := sqrt(x*x + y*y);
+
+ if (r < VVAR) then
+ begin
+ a := ArcTan2(y, x) + lazysusan_spin + lazysusan_twist*(VVAR-r);
+ sincos(a, sina, cosa);
+ FPx^ := FPx^ + VVAR * (r*cosa + lazysusan_x);
+ FPy^ := FPy^ + VVAR * (r*sina - lazysusan_y);
+ end else begin
+ r := 1.0 + lazysusan_space / (r + 1E-6);
+ FPx^ := FPx^ + VVAR * (r*x + lazysusan_x);
+ FPy^ := FPy^ + VVAR * (r*y - lazysusan_y);
+ end;
+
+ FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationLazysusan.Create;
+begin
+ lazysusan_spin := PI;
+ lazysusan_space := 0;
+ lazysusan_twist := 0;
+ lazysusan_x := 0;
+ lazysusan_y := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationLazysusan.GetInstance: TBaseVariation;
+begin
+ Result := TVariationLazysusan.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationLazysusan.GetName: string;
+begin
+ Result := 'lazysusan';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLazysusan.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'lazysusan_spin';
+ 1: Result := 'lazysusan_space';
+ 2: Result := 'lazysusan_twist';
+ 3: Result := 'lazysusan_x';
+ 4: Result := 'lazysusan_y';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLazysusan.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'lazysusan_spin' then begin
+ Value := frac(value / (2 * PI)) * (2 * PI);
+ lazysusan_spin := value;
+ Result := True;
+ end else if Name = 'lazysusan_space' then begin
+ lazysusan_space := Value;
+ Result := True;
+ end else if Name = 'lazysusan_twist' then begin
+ lazysusan_twist := Value;
+ Result := True;
+ end else if Name = 'lazysusan_x' then begin
+ lazysusan_x := Value;
+ Result := True;
+ end else if Name = 'lazysusan_y' then begin
+ lazysusan_y := Value;
+ Result := True;
+ end;
+end;
+function TVariationLazysusan.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'lazysusan_spin' then begin
+ lazysusan_spin := PI;
+ Result := True;
+ end else if Name = 'lazysusan_space' then begin
+ lazysusan_space := 0;
+ Result := True;
+ end else if Name = 'lazysusan_twist' then begin
+ lazysusan_twist := 0;
+ Result := True;
+ end else if Name = 'lazysusan_x' then begin
+ lazysusan_x := 0;
+ Result := True;
+ end else if Name = 'lazysusan_y' then begin
+ lazysusan_x := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLazysusan.GetNrVariables: integer;
+begin
+ Result := 5
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLazysusan.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'lazysusan_spin' then begin
+ Value := lazysusan_spin;
+ Result := True;
+ end else if Name = 'lazysusan_space' then begin
+ Value := lazysusan_space;
+ Result := True;
+ end else if Name = 'lazysusan_twist' then begin
+ Value := lazysusan_twist;
+ Result := True;
+ end else if Name = 'lazysusan_x' then begin
+ Value := lazysusan_x;
+ Result := True;
+ end else if Name = 'lazysusan_y' then begin
+ Value := lazysusan_y;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationLazysusan), true, false);
+end.
diff --git a/Variations/varLog.pas b/Variations/varLog.pas
new file mode 100644
index 0000000..1846e55
--- /dev/null
+++ b/Variations/varLog.pas
@@ -0,0 +1,143 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varLog;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationLog = class(TBaseVariation)
+ private
+ base, denom: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationLog }
+
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationLog.Prepare;
+begin
+ denom := 0.5 / Ln(base);
+end;
+
+procedure TVariationLog.CalcFunction;
+begin
+ FPx^ := FPx^ + vvar * Ln(sqr(FTx^) + sqr(FTy^)) * denom;
+ FPy^ := FPy^ + vvar * ArcTan2(FTy^, FTx^);
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationLog.Create;
+begin
+ base := 2.71828182845905; // AV: Euler number
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationLog.GetInstance: TBaseVariation;
+begin
+ Result := TVariationLog.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationLog.GetName: string;
+begin
+ Result := 'log';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLog.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'log_base';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLog.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'log_base' then begin
+ base := Value;
+ if (base < 1E-6) then // AV: log_base > 0
+ base := 1E-6;
+ if (RoundTo(base, -6) = 1) then // AV: log_base <> 1
+ base := 1.000001;
+ Result := True;
+ end;
+end;
+function TVariationLog.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'log_base' then begin
+ base := 2.71828182845905;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLog.GetNrVariables: integer;
+begin
+ Result := 1
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLog.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'log_base' then begin
+ Value := base;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationLog), true, false);
+end.
diff --git a/Variations/varLoonie.pas b/Variations/varLoonie.pas
new file mode 100644
index 0000000..f99bdb5
--- /dev/null
+++ b/Variations/varLoonie.pas
@@ -0,0 +1,170 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varLoonie;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationLoonie = class(TBaseVariation)
+ private
+ sqrvar: double;
+ use3D: byte;
+ procedure Calc3D;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationLoonie.Prepare;
+begin
+ sqrvar := VVAR * VVAR;
+end;
+
+procedure TVariationLoonie.GetCalcFunction(var f: TCalcFunction);
+begin
+ if use3D <> 0 then
+ f := Calc3D
+ else f := CalcFunction;
+end;
+
+///////////////////////////////////////////
+procedure TVariationLoonie.CalcFunction;
+var r, r2 : double;
+begin
+ r2 := sqr(FTx^) + sqr(FTy^);
+
+ if (r2 < (sqrvar)) and (r2 <> 0) then
+ begin
+ r := VVAR * sqrt((sqrvar) / r2 - 1.0);
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ + r * FTy^;
+ end else begin
+ FPx^ := FPx^ + VVAR * FTx^;
+ FPy^ := FPy^ + VVAR * FTy^;
+ end;
+
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+procedure TVariationLoonie.Calc3D;
+var r, r2 : double;
+begin
+ r2 := sqr(FTx^) + sqr(FTy^) + sqr(FTz^);
+
+ if (r2 < (sqrvar)) and (r2 <> 0) then
+ begin
+ r := VVAR * sqrt((sqrvar) / r2 - 1.0);
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ + r * FTy^;
+ FPz^ := FPz^ + r * FTz^;
+ end else begin
+ FPx^ := FPx^ + VVAR * FTx^;
+ FPy^ := FPy^ + VVAR * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationLoonie.Create;
+begin
+ sqrvar := 0;
+ use3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationLoonie.GetInstance: TBaseVariation;
+begin
+ Result := TVariationLoonie.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationLoonie.GetName: string;
+begin
+ Result := 'loonie';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLoonie.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'loonie_use3D';
+ else
+ Result := '';
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLoonie.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'loonie_use3D' then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ use3D := Round(Value);
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLoonie.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationLoonie.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'loonie_use3D' then begin
+ Value := use3D;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationLoonie), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varMobius.pas b/Variations/varMobius.pas
new file mode 100644
index 0000000..497f79f
--- /dev/null
+++ b/Variations/varMobius.pas
@@ -0,0 +1,256 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varMobius;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationMobius = class(TBaseVariation)
+ private
+ Re_A, Im_A, Re_B, Im_B, Re_C, Im_C, Re_D, Im_D: double;
+ mobius_invert : byte;
+ procedure CalcInvert;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationMobius.GetCalcFunction(var f: TCalcFunction);
+begin // AV: this helps to increase the calc speed
+ if (mobius_invert <> 0) then
+ f := CalcInvert
+ else f := CalcFunction;
+end;
+
+procedure TVariationMobius.CalcFunction;
+const EPS = 1E-100;
+var
+ uRe, uIm, vRe, vIm, vDenom : double;
+begin
+ uRe := (Re_A) * FTX^ - (Im_A) * FTY^ + (Re_B);
+ uIm := (Re_A) * FTY^ + (Im_A) * FTX^ + (Im_B);
+ vRe := (Re_C) * FTX^ - (Im_C) * FTY^ + (Re_D);
+ vIm := (Re_C) * FTY^ + (Im_C) * FTX^ + (Im_D);
+
+ vDenom := vRe * vRe + vIm * vIm;
+ if abs(vDenom) < EPS then vDenom := EPS;
+
+ FPx^ := FPx^ + VVAR * (uRe*vRe + uIm*vIm) / vDenom;
+ FPy^ := FPy^ + VVAR * (uIm*vRe - uRe*vIm) / vDenom;
+ FPz^ := FPz^ + VVAR * FTz^; // for Apo7x.15C compatibility only
+end;
+
+procedure TVariationMobius.CalcInvert; // inverse Mobius transformation
+const EPS = 1E-100;
+var
+ uRe, uIm, vRe, vIm, vDenom : double;
+begin
+ uRe := (Re_D) * FTX^ - (Im_D) * FTY^ - (Re_B);
+ uIm := (Re_D) * FTY^ + (Im_D) * FTX^ - (Im_B);
+ vRe := -(Re_C) * FTX^ + (Im_C) * FTY^ + (Re_A);
+ vIm := -(Re_C) * FTY^ - (Im_C) * FTX^ + (Im_A);
+
+ vDenom := vRe * vRe + vIm * vIm;
+ if abs(vDenom) < EPS then vDenom := EPS;
+
+ FPx^ := FPx^ + VVAR * (uRe*vRe + uIm*vIm) / vDenom;
+ FPy^ := FPy^ + VVAR * (uIm*vRe - uRe*vIm) / vDenom;
+ FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationMobius.Create;
+begin
+ Re_A := 1; Im_A := 0;
+ Re_B := 0; Im_B := 0;
+ Re_C := 0; Im_C := 0;
+ Re_D := 1; Im_D := 0;
+ mobius_invert := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationMobius.GetInstance: TBaseVariation;
+begin
+ Result := TVariationMobius.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationMobius.GetName: string;
+begin
+ Result := 'mobius';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationMobius.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'Re_A';
+ 1: Result := 'Im_A';
+ 2: Result := 'Re_B';
+ 3: Result := 'Im_B';
+ 4: Result := 'Re_C';
+ 5: Result := 'Im_C';
+ 6: Result := 'Re_D';
+ 7: Result := 'Im_D';
+ 8: Result := 'mobius_invert';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationMobius.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'Re_A' then begin
+ Re_A := Value;
+ Result := True;
+ end else if Name = 'Im_A' then begin
+ Im_A := Value;
+ Result := True;
+ end else if Name = 'Re_B' then begin
+ Re_B := Value;
+ Result := True;
+ end else if Name = 'Im_B' then begin
+ Im_B := Value;
+ Result := True;
+ end else if Name = 'Re_C' then begin
+ Re_C := Value;
+ Result := True;
+ end else if Name = 'Im_C' then begin
+ Im_C := Value;
+ Result := True;
+ end else if Name = 'Re_D' then begin
+ Re_D := Value;
+ Result := True;
+ end else if Name = 'Im_D' then begin
+ Im_D := Value;
+ Result := True;
+ end else if Name = 'mobius_invert' then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ mobius_invert := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationMobius.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'Re_A' then begin
+ Re_A := 1;
+ Result := True;
+ end else if Name = 'Im_A' then begin
+ Im_A := 0;
+ Result := True;
+ end else if Name = 'Re_B' then begin
+ Re_B := 0;
+ Result := True;
+ end else if Name = 'Im_B' then begin
+ Im_B := 0;
+ Result := True;
+ end else if Name = 'Re_C' then begin
+ Re_C := 0;
+ Result := True;
+ end else if Name = 'Im_C' then begin
+ Im_C := 0;
+ Result := True;
+ end else if Name = 'Re_D' then begin
+ Re_D := 1;
+ Result := True;
+ end else if Name = 'Im_D' then begin
+ Im_D := 0;
+ Result := True;
+ end else if Name = 'mobius_invert' then begin
+ mobius_invert := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationMobius.GetNrVariables: integer;
+begin
+ Result := 9
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationMobius.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'Re_A' then begin
+ Value := Re_A;
+ Result := True;
+ end else if Name = 'Im_A' then begin
+ Value := Im_A;
+ Result := True;
+ end else if Name = 'Re_B' then begin
+ Value := Re_B;
+ Result := True;
+ end else if Name = 'Im_B' then begin
+ Value := Im_B;
+ Result := True;
+ end else if Name = 'Re_C' then begin
+ Value := Re_C;
+ Result := True;
+ end else if Name = 'Im_C' then begin
+ Value := Im_C;
+ Result := True;
+ end else if Name = 'Re_D' then begin
+ Value := Re_D;
+ Result := True;
+ end else if Name = 'Im_D' then begin
+ Value := Im_D;
+ Result := True;
+ end else if Name = 'mobius_invert' then begin
+ Value := mobius_invert;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationMobius), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varModulus.pas b/Variations/varModulus.pas
new file mode 100644
index 0000000..0f3dac7
--- /dev/null
+++ b/Variations/varModulus.pas
@@ -0,0 +1,208 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varModulus;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ modx = 'modulus_x';
+ mody = 'modulus_y';
+ modz = 'modulus_z';
+ mod3D = 'modulus_use3D';
+type
+ TVariationModulus = class(TBaseVariation)
+ private
+ mx, my, mz, xrange, yrange, zrange: double;
+ m3D: byte;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationModulus }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationModulus.Prepare;
+begin
+ xrange := 2.0 * mx;
+ yrange := 2.0 * my;
+ zrange := 2.0 * mz;
+end;
+
+//////////////////////////////////////////
+procedure TVariationModulus.CalcFunction;
+begin
+ if (FTx^ > mx) then
+ FPx^ := FPx^ + VVAR * (-mx + fmod(FTx^ + mx, xrange))
+ else if (FTx^ < -mx) then
+ FPx^ := FPx^ + VVAR * (mx - fmod(mx - FTx^, xrange))
+ else
+ FPx^ := FPx^ + VVAR * FTx^;
+
+ if (FTy^ > my) then
+ FPy^ := FPy^ + VVAR * (-my + fmod(FTy^ + my, yrange))
+ else if (FTy^ < -my) then
+ FPy^ := FPy^ + VVAR * (my - fmod(my - FTy^, yrange))
+ else
+ FPy^ := FPy^ + VVAR * FTy^;
+
+
+ if (m3D <> 0) then
+ begin
+ if (FTz^ > mz) then
+ FPz^ := FPz^ + VVAR * (-mz + fmod(FTz^ + mz, zrange))
+ else if (FTz^ < -mz) then
+ FPz^ := FPz^ + VVAR * (mz - fmod(mz - FTz^, zrange))
+ else
+ FPz^ := FPz^ + VVAR * FTz^;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationModulus.Create;
+begin
+ mx := 1;
+ my := 1;
+ mz := 1;
+ m3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationModulus.GetInstance: TBaseVariation;
+begin
+ Result := TVariationModulus.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationModulus.GetName: string;
+begin
+ Result := 'modulus';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationModulus.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := modx;
+ 1: Result := mody;
+ 2: Result := modz;
+ 3: Result := mod3D;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationModulus.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = modx then begin
+ mx := Value;
+ Result := True;
+ end
+ else if Name = mody then begin
+ my := value;
+ Result := True;
+ end else if Name = modz then begin
+ mz := value;
+ Result := True;
+ end else if Name = mod3D then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ m3D := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationModulus.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = modx then begin
+ mx := 1;
+ Result := True;
+ end
+ else if Name = mody then begin
+ my := 1;
+ Result := True;
+ end else if Name = modz then begin
+ mz := 1;
+ Result := True;
+ end else if Name = mod3D then begin
+ m3D := 0;
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationModulus.GetNrVariables: integer;
+begin
+ Result := 4;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationModulus.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = modx then begin
+ Value := mx;
+ Result := true;
+ end
+ else if Name = mody then begin
+ Value := my;
+ Result := true;
+ end else if Name = modz then begin
+ Value := mz;
+ Result := true;
+ end else if Name = mod3D then begin
+ Value := m3D;
+ Result := true;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationModulus), true, false);
+end.
diff --git a/Variations/varNBlur.pas b/Variations/varNBlur.pas
new file mode 100644
index 0000000..3458304
--- /dev/null
+++ b/Variations/varNBlur.pas
@@ -0,0 +1,535 @@
+{
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+ Original nBlur plugin by FractalDesire:
+ http://fractaldesire.deviantart.com/art/nBlur-plugin-190401515,
+ Optimized and translated into Delphi by Alice V. Koryagina
+}
+
+unit varNBlur;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationNBlur = class(TBaseVariation)
+ private
+ numEdges, numStripes: integer;
+ circumCircle, adjustToLinear, equalBlur, exactCalc: byte;
+ ratioStripes, ratioHole, highlightEdges, ratioComplement, maxStripes, angStripes, midAngle, angStart,
+ tan90_m_2, sina, cosa, arc_tan1, arc_tan2, speedCalc1, speedCalc2, nStripes: double;
+ hasStripes, negStripes: boolean;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationNBlur }
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationNBlur.Prepare;
+begin
+ //*********Prepare stripes related stuff*********
+ nStripes := numStripes; // AV: to fix a bug with negative stripes count
+ if (nStripes <> 0) then
+ begin
+ hasStripes := True;
+ if (nStripes < 0) then
+ begin
+ negStripes := True;
+ nStripes := -nStripes;
+ end else
+ negStripes := False;
+ end else begin
+ hasStripes := False;
+ negStripes := False;
+ end;
+
+ //**********Prepare angle related stuff**********
+ midAngle := 2 * pi / numEdges;
+ if hasStripes then
+ begin
+ angStripes := midAngle / (2 * nStripes);
+ angStart := angStripes * 0.5;
+ ratioComplement := 2 - ratioStripes;
+ end;
+
+ //**********Prepare hole related stuff***********
+ if (ratioHole > 0.95) and (exactCalc = 1) and (circumCircle = 0) then ratioHole := 0.95;
+
+ //*********Prepare edge calculation related stuff*********
+ tan90_m_2 := tan((pi + midAngle) * 0.5);
+ SinCos(midAngle * 0.5, sina, cosa);
+
+ //*********Adjustment of width of shape*********
+ if (adjustToLinear = 1) then
+ begin
+ if((numEdges mod 4) = 0) then
+ VVAR := VVAR / (sqrt(2 - 2 * cos(midAngle *(numEdges * 0.5 - 1))) * 0.5)
+ else
+ VVAR := VVAR / (sqrt(2 - 2 * cos(midAngle * floor(numEdges * 0.5))) * 0.5);
+ end;
+
+ //*********Prepare circumCircle-calculation*********
+ if (circumCircle = 1) then
+ begin
+ exactCalc := 0;
+ highlightEdges := 0.1;
+ end;
+
+ //*********Prepare speed up related stuff*********
+ speedCalc1 := ratioComplement * angStart;
+ speedCalc2 := ratioStripes * angStart;
+ maxStripes := 2 * numStripes;
+ if(negStripes = False) then
+ arc_tan1 := 13.0 / power(numEdges, 1.3) * highlightEdges
+ else
+ arc_tan1 := 7.5 / power(numEdges, 1.3) * highlightEdges;
+ arc_tan2 := 2 * arctan(arc_tan1 *(-0.5));
+end;
+
+
+
+procedure TVariationNBlur.CalcFunction;
+var
+ x, y, xTmp, yTmp, lenOuterEdges, lenInnerEdges, lenXY: double;
+
+ procedure RandXY;
+ var
+ angXY, ranTmp, angTmp, angMem, rotTmp,
+ ratioTmp, ratioTmpNum, ratioTmpDen, step, speedCalcTmp: double;
+ count: integer;
+ begin
+ if (exactCalc = 1) then
+ angXY := random * PI2
+ else
+ angXY := (arctan(arc_tan1 * (random - 0.5)) / arc_tan2 + 0.5 + Random(numEdges)) * midAngle;
+ SinCos(angXY, x, y);
+ angMem := angXY;
+ while (angXY > midAngle) do angXY := angXY - midAngle;
+
+ //********Begin of xy-calculation of radial stripes********
+ if hasStripes then
+ begin
+ angTmp := angStart;
+ count := 0;
+ while(angXY > angTmp) do
+ begin
+ angTmp := angTmp + angStripes;
+ if (angTmp > midAngle) then angTmp := midAngle;
+ inc(count);
+ end;
+ if (angTmp <> midAngle) then angTmp := angTmp - angStart;
+
+ if (not negStripes) then
+ begin
+ if Odd(count) then
+ begin
+ if(angXY > angTmp) then
+ begin
+ angXY := angXY + angStart;
+ angMem := angMem + angStart;
+ SinCos(angMem, x, y);
+ angTmp := angTmp + angStripes;
+ inc(count);
+ end
+ else begin
+ angXY := angXY - angStart;
+ angMem := angMem - angStart;
+ SinCos(angMem, x, y);
+ angTmp := angTmp - angStripes;
+ dec(count);
+ end;
+ end;
+
+ if (not Odd(count)) and (ratioStripes > 1.0) then
+ begin
+ if (angXY > angTmp) and (count <> maxStripes) then
+ begin
+ angMem := angMem - angXY + angTmp + (angXY - angTmp) / angStart * ratioStripes * angStart;
+ angXY := angTmp + (angXY - angTmp) / angStart * ratioStripes * angStart;
+ SinCos(angMem, x, y);
+ end
+ else begin
+ angMem := angMem - angXY + angTmp - (angTmp - angXY)/ angStart * ratioStripes * angStart;
+ angXY := angTmp + (angXY - angTmp)/ angStart * ratioStripes * angStart;
+ SinCos(angMem, x, y);
+ end;
+ end;
+
+ if (not Odd(count)) and (ratioStripes < 1.0) then
+ begin
+ if (abs(angXY - angTmp) > speedCalc2) and (count <> maxStripes) then
+ begin
+ if (angXY - angTmp) > speedCalc2 then
+ begin
+ ratioTmpNum := (angXY -(angTmp + speedCalc2)) * speedCalc2;
+ ratioTmpDen := angStart - speedCalc2;
+ ratioTmp := ratioTmpNum / ratioTmpDen;
+ SinCos((angMem - angXY + angTmp + ratioTmp), x, y);
+ angXY := angTmp + ratioTmp;
+ end;
+ if (angTmp - angXY) > speedCalc2 then
+ begin
+ ratioTmpNum := (angTmp - speedCalc2 - angXY) * speedCalc2;
+ ratioTmpDen := angStart - speedCalc2;
+ ratioTmp := ratioTmpNum / ratioTmpDen;
+ SinCos((angMem - angXY + angTmp - ratioTmp), x, y);
+ angXY := angTmp - ratioTmp;
+ end;
+ end;
+
+ if (count = maxStripes) then
+ if (angTmp - angXY) > speedCalc2 then
+ begin
+ ratioTmpNum := (angTmp - speedCalc2 - angXY) * speedCalc2;
+ ratioTmpDen := angStart - speedCalc2;
+ ratioTmp := ratioTmpNum / ratioTmpDen;
+ SinCos((angMem - angXY + angTmp - ratioTmp), x, y);
+ angXY := angTmp - ratioTmp;
+ end;
+ end;
+ end
+ else begin
+ //********Change ratio and ratioComplement********
+ ratioTmp := ratioStripes;
+ ratioStripes := ratioComplement;
+ ratioComplement := ratioTmp;
+ speedCalcTmp := speedCalc1;
+ speedCalc1 := speedCalc2;
+ speedCalc2 := speedCalcTmp;
+ //************************************************
+ if not Odd(count) then
+ begin
+ if (angXY > angTmp) and (count <> maxStripes) then
+ begin
+ angXY := angXY + angStart;
+ angMem := angMem + angStart;
+ SinCos(angMem, x, y);
+ angTmp := angTmp + angStripes;
+ inc(count);
+ end
+ else begin
+ angXY := angXY - angStart;
+ angMem := angMem - angStart;
+ SinCos(angMem, x, y);
+ angTmp := angTmp - angStripes;
+ dec(count);
+ end;
+ end;
+
+ if Odd(count) and (ratioStripes > 1.0) then
+ begin
+ if (angXY > angTmp) and (count <> maxStripes) then
+ begin
+ angMem := angMem - angXY + angTmp + (angXY - angTmp) / angStart * ratioStripes * angStart;
+ angXY := angTmp + (angXY - angTmp) / angStart * ratioStripes * angStart;
+ SinCos(angMem, x, y);
+ end
+ else begin
+ angMem := angMem - angXY + angTmp - (angTmp - angXY)/ angStart * ratioStripes * angStart;
+ angXY := angTmp + (angXY - angTmp)/ angStart * ratioStripes * angStart;
+ SinCos(angMem, x, y);
+ end;
+ end;
+
+
+ if Odd(count) and (ratioStripes < 1.0) then
+ begin
+ if (abs(angXY - angTmp) > speedCalc2) and (count <> maxStripes) then
+ begin
+ if (angXY - angTmp) > speedCalc2 then
+ begin
+ ratioTmpNum := (angXY -(angTmp + speedCalc2)) * speedCalc2;
+ ratioTmpDen := angStart - speedCalc2;
+ ratioTmp := ratioTmpNum / ratioTmpDen;
+ SinCos((angMem - angXY + angTmp + ratioTmp), x, y);
+ angXY := angTmp + ratioTmp;
+ end;
+ if (angTmp - angXY) > speedCalc2 then
+ begin
+ ratioTmpNum := (angTmp - speedCalc2 - angXY) * speedCalc2;
+ ratioTmpDen := angStart - speedCalc2;
+ ratioTmp := ratioTmpNum / ratioTmpDen;
+ SinCos((angMem - angXY + angTmp - ratioTmp), x, y);
+ angXY := angTmp - ratioTmp;
+ end;
+ end;
+
+ if (count = maxStripes) then
+ begin
+ angTmp := midAngle;
+ if (angTmp - angXY) > speedCalc2 then
+ begin
+ ratioTmpNum := (angTmp - speedCalc2 - angXY) * speedCalc2;
+ ratioTmpDen := angStart - speedCalc2;
+ ratioTmp := ratioTmpNum / ratioTmpDen;
+ SinCos((angMem - angXY + angTmp - ratioTmp), x, y);
+ angXY := angTmp - ratioTmp;
+ end;
+ end;
+ end;
+
+ //********Restore ratio and ratioComplement*******
+ ratioTmp := ratioStripes;
+ ratioStripes := ratioComplement;
+ ratioComplement := ratioTmp;
+ speedCalcTmp := speedCalc1;
+ speedCalc1 := speedCalc2;
+ speedCalc2 := speedCalcTmp;
+ //************************************************
+ end;
+ end;
+ //********End of xy-calculation of radial stripes********
+
+ //********Begin of calculation of edge limits********
+ xTmp := tan90_m_2 / (tan90_m_2 - tan(angXY));
+ yTmp := xTmp * tan(angXY);
+ lenOuterEdges := hypot(xTmp, yTmp);
+ //*********End of calculation of edge limits********
+
+ //********Begin of radius-calculation (optionally hole)********
+ if(exactCalc = 1) then
+ if (equalBlur = 1) then ranTmp := sqrt(random)
+ else ranTmp := random
+ else begin
+ if(circumCircle = 1) then
+ if (equalBlur = 1) then ranTmp := sqrt(random)
+ else ranTmp := random
+ else
+ if (equalBlur = 1) then ranTmp := sqrt(random) * lenOuterEdges
+ else ranTmp := random * lenOuterEdges;
+ end;
+ lenInnerEdges := ratioHole * lenOuterEdges;
+
+ if (exactCalc = 0) then
+ begin
+ if(ranTmp < lenInnerEdges) then
+ begin
+ if (circumCircle = 1) then
+ if (equalBlur = 1) then ranTmp := lenInnerEdges + sqrt(random) * (1.0 - lenInnerEdges + 1e-300)
+ else ranTmp := lenInnerEdges + random * (1.0 - lenInnerEdges + 1e-300)
+ else
+ if (equalBlur = 1) then ranTmp := lenInnerEdges + sqrt(random) * (lenOuterEdges - lenInnerEdges)
+ else ranTmp := lenInnerEdges + random * (lenOuterEdges - lenInnerEdges);
+ end;
+ end;
+
+ x := x * ranTmp;
+ y := y * ranTmp;
+ lenXY := hypot(x, y);
+ //*********End of radius-calculation (optionally hole)*********
+ end; // of procedure
+
+begin
+
+ RandXY;
+
+ //********Exact calculation slower - interpolated calculation faster********
+ if (exactCalc = 1) and (circumCircle = 0) then
+ while ((lenXY < lenInnerEdges) or (lenXY > lenOuterEdges)) do RandXY;
+ if (exactCalc = 1) and (circumCircle = 1) then
+ while (lenXY < lenInnerEdges) do RandXY;
+ xTmp := x;
+ yTmp := y;
+ //**************************************************************************
+
+ //********Begin of horizontal adjustment (rotation)********
+ x := cosa * xTmp - sina * yTmp;
+ y := sina * xTmp + cosa * yTmp;
+ //*********End of horizontal adjustment (rotation)*********
+
+ FPx^ := FPx^ + VVAR * x;
+ FPy^ := FPy^ + VVAR * y;
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationNBlur.Create;
+begin
+ numEdges := 3;
+ numStripes := 0;
+ ratioStripes := 1.0;
+ ratioHole := 0;
+ circumCircle := 0;
+ adjustToLinear := 1;
+ equalBlur := 1;
+ exactCalc := 0;
+ highlightEdges := 1.0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationNBlur.GetInstance: TBaseVariation;
+begin
+ Result := TVariationNBlur.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationNBlur.GetName: string;
+begin
+ Result := 'nBlur';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationNBlur.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'nb_numEdges';
+ 1: Result := 'nb_numStripes';
+ 2: Result := 'nb_ratioStripes';
+ 3: Result := 'nb_ratioHole';
+ 4: Result := 'nb_circumCircle';
+ 5: Result := 'nb_adjustToLinear';
+ 6: Result := 'nb_equalBlur';
+ 7: Result := 'nb_exactCalc';
+ 8: Result := 'nb_highlightEdges';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationNBlur.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'nb_numEdges' then begin
+ if (value < 3) then Value := 3;
+ numEdges := Round(Value);
+ Result := True;
+ end else if Name = 'nb_numStripes' then begin
+ numStripes := Round(Value);
+ Result := True;
+ end else if Name = 'nb_ratioStripes' then begin
+ if (value < 0) then Value := 0;
+ if (value > 2) then Value := 2;
+ ratioStripes := Value;
+ Result := True;
+ end else if Name = 'nb_ratioHole' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ ratioHole := Value;
+ Result := True;
+ end else if Name = 'nb_circumCircle' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ circumCircle := Round(Value);
+ Result := True;
+ end else if Name = 'nb_adjustToLinear' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ adjustToLinear := Round(Value);
+ Result := True;
+ end else if Name = 'nb_equalBlur' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ equalBlur := Round(Value);
+ Result := True;
+ end else if Name = 'nb_exactCalc' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ exactCalc := Round(Value);
+ Result := True;
+ end else if Name = 'nb_highlightEdges' then begin
+ if (value < 0.1) then Value := 0.1;
+ highlightEdges := Value;
+ Result := True;
+ end
+end;
+
+function TVariationNBlur.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'nb_numEdges' then begin
+ numEdges:= 3;
+ Result := True;
+ end else if Name = 'nb_numStripes' then begin
+ numStripes := 0;
+ Result := True;
+ end else if Name = 'nb_highlightEdges' then begin
+ highlightEdges := 1;
+ Result := True;
+ end else if Name = 'nb_ratioStripes' then begin
+ ratioStripes := 1;
+ Result := True;
+ end else if Name = 'nb_ratioHole' then begin
+ ratioHole := 0;
+ Result := True;
+ end else if Name = 'nb_circumCircle' then begin
+ circumCircle := 0;
+ Result := True;
+ end else if Name = 'nb_adjustToLinear' then begin
+ adjustToLinear := 1;
+ Result := True;
+ end else if Name = 'nb_equalBlur' then begin
+ equalBlur := 1;
+ Result := True;
+ end else if Name = 'nb_exactCalc' then begin
+ exactCalc := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationNBlur.GetNrVariables: integer;
+begin
+ Result := 9;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationNBlur.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'nb_numEdges' then begin
+ Value := numEdges;
+ Result := True;
+ end else if Name = 'nb_numStripes' then begin
+ Value := numStripes;
+ Result := True;
+ end else if Name = 'nb_ratioStripes' then begin
+ Value := ratioStripes;
+ Result := True;
+ end else if Name = 'nb_ratioHole' then begin
+ Value := ratioHole;
+ Result := True;
+ end else if Name = 'nb_circumCircle' then begin
+ Value := circumCircle;
+ Result := True;
+ end else if Name = 'nb_adjustToLinear' then begin
+ Value := adjustToLinear;
+ Result := True;
+ end else if Name = 'nb_equalBlur' then begin
+ Value := equalBlur;
+ Result := True;
+ end else if Name = 'nb_exactCalc' then begin
+ Value := exactCalc;
+ Result := True;
+ end else if Name = 'nb_highlightEdges' then begin
+ Value := highlightEdges;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationNBlur), false, false);
+end.
+
diff --git a/Variations/varNGon.pas b/Variations/varNGon.pas
new file mode 100644
index 0000000..6efcebe
--- /dev/null
+++ b/Variations/varNGon.pas
@@ -0,0 +1,188 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ You should have received a copy of the GNU General Public License
+ GNU General Public License for more details.
+
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varNGon;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationNGon = class(TBaseVariation)
+ private
+ ngon_sides : integer;
+ ngon_power, ngon_circle, ngon_corners : double;
+ cpower, csides, csidesinv : double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationNGon.Prepare;
+begin
+ cpower := -0.5 * ngon_power;
+ csides := 2.0 * PI / ngon_sides;
+ csidesinv := 1.0 / csides;
+end;
+
+procedure TVariationNGon.CalcFunction;
+var
+ r_factor, theta, phi, amp: double;
+begin
+
+ if (FTX^ = 0) and (FTY^ = 0) then r_factor := 0
+ else r_factor := Power(FTx^ * FTx^ + FTy^ * FTy^, cpower);
+
+ theta := ArcTan2(FTy^, FTx^);
+
+ phi := theta - csides * floor(theta * csidesinv);
+ if (phi > 0.5 * csides) then
+ phi := phi - csides;
+
+ amp := (ngon_corners * (1.0 / cos(phi) - 1.0) + ngon_circle) * VVAR * r_factor;
+
+ FPx^ := FPx^ + amp * FTx^;
+ FPy^ := FPy^ + amp * FTy^;
+ FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationNGon.Create;
+begin
+ ngon_sides := 4;
+ ngon_power := 2;
+ ngon_circle := 1;
+ ngon_corners := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationNGon.GetInstance: TBaseVariation;
+begin
+ Result := TVariationNGon.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationNGon.GetName: string;
+begin
+ Result := 'ngon';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationNGon.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'ngon_sides';
+ 1: Result := 'ngon_power';
+ 2: Result := 'ngon_circle';
+ 3: Result := 'ngon_corners';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationNGon.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'ngon_sides' then begin
+ if (value < 0) and (value > -1) then Value := -1
+ else if (value >= 0) and (value < 1) then Value := 1;
+ ngon_sides := Round(value);
+ Result := True;
+ end else if Name = 'ngon_power' then begin
+ ngon_power := Value;
+ Result := True;
+ end else if Name = 'ngon_circle' then begin
+ ngon_circle := Value;
+ Result := True;
+ end else if Name = 'ngon_corners' then begin
+ ngon_corners := Value;
+ Result := True;
+ end;
+end;
+function TVariationNGon.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'ngon_sides' then begin
+ ngon_sides := 4;
+ Result := True;
+ end else if Name = 'ngon_power' then begin
+ ngon_power := 2;
+ Result := True;
+ end else if Name = 'ngon_circle' then begin
+ ngon_circle := 1;
+ Result := True;
+ end else if Name = 'ngon_corners' then begin
+ ngon_corners := 1;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationNGon.GetNrVariables: integer;
+begin
+ Result := 4
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationNGon.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'ngon_sides' then begin
+ Value := ngon_sides;
+ Result := True;
+ end else if Name = 'ngon_power' then begin
+ Value := ngon_power;
+ Result := True;
+ end else if Name = 'ngon_circle' then begin
+ Value := ngon_circle;
+ Result := True;
+ end else if Name = 'ngon_corners' then begin
+ Value := ngon_corners;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationNGon), true, false);
+end.
diff --git a/Variations/varPDJ.pas b/Variations/varPDJ.pas
new file mode 100644
index 0000000..5fe73e3
--- /dev/null
+++ b/Variations/varPDJ.pas
@@ -0,0 +1,316 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPDJ;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationPDJ = class(TBaseVariation)
+ private
+ FA,FB,FC,FD: double;
+
+ procedure CalcABC0;
+ procedure CalcAB00;
+ procedure CalcA000;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPDJ }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPDJ.GetCalcFunction(var f: TCalcFunction);
+begin
+ if FD = 0 then begin
+ if FC = 0 then begin
+ if FB = 0 then
+ f := CalcA000
+ else
+ f := CalcAB00;
+ end
+ else f := CalcABC0;
+ end
+ else f := CalcFunction;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPDJ.CalcFunction;
+{$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * (sin(FA * FTy^) - cos(FB * FTx^));
+ FPy^ := FPy^ + vvar * (sin(FC * FTx^) - cos(FD * FTy^));
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ // AV: 3D stuff, for Apo7X.15C compatibility
+ fld st
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+
+ fld st(1)
+ fmul qword ptr [eax + Fa]
+ fsin
+ fld st(1)
+ fmul qword ptr [eax + Fb]
+ fcos
+ fsubp st(1), st
+ fmul st, st(3)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fmul qword ptr [eax + Fc]
+ fsin
+ fxch st(1)
+ fmul qword ptr [eax + Fd]
+ fcos
+ fsubp st(1), st
+ fmulp
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPDJ.CalcABC0;
+{$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * (sin(FA * FTy^) - cos(FB * FTx^));
+ FPy^ := FPy^ + vvar * (sin(FC * FTx^) - 1);
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld st
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+
+ fld st(1)
+ fmul qword ptr [eax + Fa]
+ fsin
+ fld st(1)
+ fmul qword ptr [eax + Fb]
+ fcos
+ fsubp st(1), st
+ fmul st, st(3)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fmul qword ptr [eax + Fc]
+ fsin
+ fstp st(1)
+ fld1
+ fsubp st(1), st
+ fmulp
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPDJ.CalcAB00;
+{$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * (sin(FA * FTy^) - cos(FB * FTx^));
+ FPy^ := FPy^ - vvar;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld st
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fmul qword ptr [eax + Fa]
+ fsin
+ fld qword ptr [edx] // FTx
+ fmul qword ptr [eax + Fb]
+ fcos
+ fsubp st(1), st
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fsubr qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPDJ.CalcA000;
+{$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * (sin(FA * FTy^) - 1);
+ FPy^ := FPy^ - vvar;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld st
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fmul qword ptr [eax + Fa]
+ fsin
+ fld1
+ fsubp st(1), st
+ fmul st, st(1)
+
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fsubr qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+{$endif}
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPDJ.Create;
+begin
+ FA := PI * (2 * Random - 1);
+ FB := PI * (2 * Random - 1);
+ FC := PI * (2 * Random - 1);
+ FD := PI * (2 * Random - 1);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPDJ.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPDJ.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPDJ.GetName: string;
+begin
+ Result := 'pdj';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPDJ.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'pdj_a';
+ 1: Result := 'pdj_b';
+ 2: Result := 'pdj_c';
+ 3: Result := 'pdj_d';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPDJ.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'pdj_a' then begin
+ FA := Value;
+ Result := True;
+ end else if Name = 'pdj_b' then begin
+ FB := Value;
+ Result := True;
+ end else if Name = 'pdj_c' then begin
+ FC := Value;
+ Result := True;
+ end else if Name = 'pdj_d' then begin
+ FD := Value;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPDJ.GetNrVariables: integer;
+begin
+ Result := 4
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPDJ.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'pdj_a' then begin
+ Value := FA;
+ Result := True;
+ end else if Name = 'pdj_b' then begin
+ Value := FB;
+ Result := True;
+ end else if Name = 'pdj_c' then begin
+ Value := FC;
+ Result := True;
+ end else if Name = 'pdj_d' then begin
+ Value := FD;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPDJ), true, false);
+end.
diff --git a/Variations/varPopcorn2.pas b/Variations/varPopcorn2.pas
new file mode 100644
index 0000000..346f0b5
--- /dev/null
+++ b/Variations/varPopcorn2.pas
@@ -0,0 +1,146 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varPopcorn2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPopcorn2 = class(TBaseVariation)
+ private
+ p2x, p2y, p2c: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPopcorn2 }
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationPopcorn2.CalcFunction;
+var
+ sn, cn : double;
+begin
+ SinCos(p2c * FTy^, sn, cn);
+ if cn <> 0 then // AV: safety tangent
+ sn := sin(sn / cn)
+ else
+ sn := 0;
+ FPx^ := FPx^ + vvar * (FTx^ + p2x * sn);
+ SinCos(p2c * FTx^, sn, cn);
+ if cn <> 0 then // AV: safety tangent
+ sn := sin(sn / cn)
+ else
+ sn := 0;
+ FPy^ := FPy^ + vvar * (FTy^ + p2y * sn);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPopcorn2.GetName: string;
+begin
+ Result := 'popcorn2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPopcorn2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'popcorn2_x';
+ 1: Result := 'popcorn2_y';
+ 2: Result := 'popcorn2_c';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPopcorn2.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPopcorn2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'popcorn2_x' then begin
+ p2x := Value;
+ Result := True;
+ end else if Name = 'popcorn2_y' then begin
+ p2y := Value;
+ Result := True;
+ end else if Name = 'popcorn2_c' then begin
+ p2c := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationPopcorn2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'popcorn2_x' then begin
+ p2x := 0.1;
+ Result := True;
+ end else if Name = 'popcorn2_y' then begin
+ p2y := 0.1;
+ Result := True;
+ end else if Name = 'popcorn2_c' then begin
+ p2c := 3;
+ Result := True;
+ end;
+end;
+
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPopcorn2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'popcorn2_x' then begin
+ Value := p2x;
+ Result := True;
+ end else if Name = 'popcorn2_y' then begin
+ Value := p2y;
+ Result := True;
+ end else if Name = 'popcorn2_c' then begin
+ Value := p2c;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPopcorn2.Create;
+begin
+ p2c := 3;
+ p2x := 0.1;
+ p2y := 0.1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPopcorn2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPopcorn2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPopcorn2), false, false);
+end.
diff --git a/Variations/varPostBoarders2.pas b/Variations/varPostBoarders2.pas
new file mode 100644
index 0000000..6777336
--- /dev/null
+++ b/Variations/varPostBoarders2.pas
@@ -0,0 +1,188 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varPostBoarders2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ sb2c = 'post_boarders2_c';
+ sleft = 'post_boarders2_left';
+ sright = 'post_boarders2_right';
+ eps: double = 1e-30;
+type
+ TVariationPostBoarders2 = class(TBaseVariation)
+ private
+ b2c, left, right, cc, cl, cr: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPostBoarders2 }
+
+//////////////////////////////////////////
+procedure TVariationPostBoarders2.Prepare;
+begin
+ cc := abs(b2c);
+ cl := cc * abs(left);
+ cr := cc + (cc * abs(right));
+end;
+
+//////////////////////////////////////////
+procedure TVariationPostBoarders2.CalcFunction;
+var
+ roundX, roundY, offsetX, offsetY: double;
+begin
+ roundX := round(FPx^);
+ roundY := round(FPy^);
+ offsetX := FPx^ - roundX;
+ offsetY := FPy^ - roundY;
+
+ if (random >= cr) then
+ begin
+ FPx^ := VVAR * (offsetX * cc + roundX);
+ FPy^ := VVAR * (offsetY * cc + roundY);
+ end
+ else begin
+ if (abs(offsetX) >= abs(offsetY)) then
+ begin
+ if(offsetX >= 0.0) then
+ begin
+ FPx^ := VVAR * (offsetX * cc + roundX + cl);
+ FPy^ := VVAR * (offsetY * cc + roundY + cl * offsetY / offsetX);
+ end
+ else begin
+ FPx^ := VVAR * (offsetX * cc + roundX - cl);
+ FPy^ := VVAR * (offsetY * cc + roundY - cl * offsetY / offsetX);
+ end;
+ end
+ else begin
+ if(offsetY >= 0.0) then
+ begin
+ FPy^ := VVAR * (offsetY * cc + roundY + cl);
+ FPx^ := VVAR * (offsetX * cc + roundX + offsetX / offsetY * cl);
+ end
+ else begin
+ FPy^ := VVAR * (offsetY * cc + roundY - cl);
+ FPx^ := VVAR * (offsetX * cc + roundX - offsetX / offsetY * cl);
+ end;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+constructor TVariationPostBoarders2.Create;
+begin
+ b2c := 0.5;
+ left := 0.5;
+ right := 0.5;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostBoarders2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostBoarders2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostBoarders2.GetName: string;
+begin
+ Result := 'post_boarders2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostBoarders2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := sb2c;
+ 1: Result := sleft;
+ 2: Result := sright;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostBoarders2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ if abs(value) = 0 then value := eps;
+ b2c := value;
+ Result := True;
+ end else if Name = sleft then begin
+ if abs(value) = 0 then value := eps;
+ left := Value;
+ Result := True;
+ end else if Name = sright then begin
+ if abs(value) = 0 then value := eps;
+ right := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationPostBoarders2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ b2c := 0.5;
+ Result := True;
+ end else if Name = sleft then begin
+ left := 0.5;
+ Result := True;
+ end else if Name = sright then begin
+ right := 0.5;
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationPostBoarders2.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostBoarders2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ Value := b2c;
+ Result := True;
+ end else if Name = sleft then begin
+ Value := left;
+ Result := True;
+ end else if Name = sright then begin
+ Value := right;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostBoarders2), false, false);
+end.
\ No newline at end of file
diff --git a/Variations/varPostBwraps.pas b/Variations/varPostBwraps.pas
new file mode 100644
index 0000000..69807a2
--- /dev/null
+++ b/Variations/varPostBwraps.pas
@@ -0,0 +1,228 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPostBwraps;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPostBwraps = class(TBaseVariation)
+ private
+ post_bwraps_cellsize, post_bwraps_space, post_bwraps_gain,
+ post_bwraps_inner_twist, post_bwraps_outer_twist,
+ g2, r2, rfactor: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostBwraps.Prepare;
+var
+ max_bubble, radius: double;
+begin
+ radius := 0.5 * (post_bwraps_cellsize / (1.0 + sqr(post_bwraps_space)));
+ g2 := sqr(post_bwraps_gain) / (radius + 1e-6) + 1e-6;
+ max_bubble := g2 * radius;
+
+ if (max_bubble > 2.0) then max_bubble := 1.0
+ else max_bubble := max_bubble * (1.0 / (sqr(max_bubble)/4.0 + 1.0));
+
+ r2 := sqr(radius);
+ rfactor := radius / max_bubble;
+end;
+
+procedure TVariationPostBwraps.CalcFunction;
+var
+ Vx, Vy,
+ Cx, Cy,
+ Lx, Ly,
+ r, theta, s, c : double;
+begin
+ Vx := FPx^;
+ Vy := FPy^;
+
+ if (post_bwraps_cellsize <> 0.0) then
+ begin
+ Cx := (floor(Vx / post_bwraps_cellsize) + 0.5) * post_bwraps_cellsize;
+ Cy := (floor(Vy / post_bwraps_cellsize) + 0.5) * post_bwraps_cellsize;
+
+ Lx := Vx - Cx;
+ Ly := Vy - Cy;
+
+ if ((sqr(Lx) + sqr(Ly)) <= r2) then
+ begin
+ Lx := Lx * g2;
+ Ly := Ly * g2;
+
+ r := rfactor / ((sqr(Lx) + sqr(Ly)) / 4.0 + 1);
+
+ Lx := Lx * r;
+ Ly := Ly * r;
+
+ r := (sqr(Lx) + sqr(Ly)) / r2;
+ theta := post_bwraps_inner_twist * (1.0 - r) + post_bwraps_outer_twist * r;
+ SinCos(theta, s, c);
+
+ Vx := Cx + c * Lx + s * Ly;
+ Vy := Cy - s * Lx + c * Ly;
+
+ FPx^ := VVAR * Vx;
+ FPy^ := VVAR * Vy;
+ FPz^ := VVAR * FPz^;
+ end;
+ end;
+
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPostBwraps.Create;
+begin
+ post_bwraps_cellsize := 1;
+ post_bwraps_space := 0;
+ post_bwraps_gain := 1;
+ post_bwraps_inner_twist := 0;
+ post_bwraps_outer_twist := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostBwraps.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostBwraps.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostBwraps.GetName: string;
+begin
+ Result := 'post_bwraps';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostBwraps.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'post_bwraps_cellsize';
+ 1: Result := 'post_bwraps_space';
+ 2: Result := 'post_bwraps_gain';
+ 3: Result := 'post_bwraps_inner_twist';
+ 4: Result := 'post_bwraps_outer_twist';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostBwraps.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'post_bwraps_cellsize' then begin
+ if Value = 0 then Value := 1e-6;
+ post_bwraps_cellsize := Value;
+ Result := True;
+ end else if Name = 'post_bwraps_space' then begin
+ post_bwraps_space := Value;
+ Result := True;
+ end else if Name = 'post_bwraps_gain' then begin
+ post_bwraps_gain := Value;
+ Result := True;
+ end else if Name = 'post_bwraps_inner_twist' then begin
+ post_bwraps_inner_twist := Value;
+ Result := True;
+ end else if Name = 'post_bwraps_outer_twist' then begin
+ post_bwraps_outer_twist := Value;
+ Result := True;
+ end
+end;
+function TVariationPostBwraps.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'post_bwraps_cellsize' then begin
+ post_bwraps_cellsize := 1;
+ Result := True;
+ end else if Name = 'post_bwraps_space' then begin
+ post_bwraps_space := 0;
+ Result := True;
+ end else if Name = 'post_bwraps_gain' then begin
+ post_bwraps_gain := 1;
+ Result := True;
+ end else if Name = 'post_bwraps_inner_twist' then begin
+ post_bwraps_inner_twist := 0;
+ Result := True;
+ end else if Name = 'post_bwraps_outer_twist' then begin
+ post_bwraps_outer_twist := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostBwraps.GetNrVariables: integer;
+begin
+ Result := 5
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostBwraps.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'post_bwraps_cellsize' then begin
+ Value := post_bwraps_cellsize;
+ Result := True;
+ end else if Name = 'post_bwraps_space' then begin
+ Value := post_bwraps_space;
+ Result := True;
+ end else if Name = 'post_bwraps_gain' then begin
+ Value := post_bwraps_gain;
+ Result := True;
+ end else if Name = 'post_bwraps_inner_twist' then begin
+ Value := post_bwraps_inner_twist;
+ Result := True;
+ end else if Name = 'post_bwraps_outer_twist' then begin
+ Value := post_bwraps_outer_twist;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostBwraps), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varPostCircleCrop.pas b/Variations/varPostCircleCrop.pas
new file mode 100644
index 0000000..9ffe551
--- /dev/null
+++ b/Variations/varPostCircleCrop.pas
@@ -0,0 +1,203 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varPostCircleCrop;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPostCircleCrop = class(TBaseVariation)
+
+ const
+ sx : string = 'post_circlecrop_x';
+ sy : string = 'post_circlecrop_y';
+ sradius : string = 'post_circlecrop_radius';
+ szero : string = 'post_circlecrop_zero';
+ sarea : string = 'post_circlecrop_scatter_area';
+
+ private
+ x0, y0, radius, scatter_area, ca: double;
+ zero: byte;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+
+implementation
+uses
+ Math;
+
+{ TVariationPostCircleCrop }
+
+//////////////////////////////////////////
+
+procedure TVariationPostCircleCrop.Prepare;
+begin
+ ca := max(-1.0, min(scatter_area, 1.0));
+end;
+
+procedure TVariationPostCircleCrop.CalcFunction;
+var
+ x, y, rad, ang, rdc, sn, cn: double;
+begin
+ x := FPx^ - x0;
+ y := FPy^ - y0;
+ rad := Hypot(x, y);
+
+ if (rad > radius) then
+ begin
+ if (zero = 1) then
+ begin
+ FPx^ := 0;
+ FPy^ := 0;
+ end else
+ begin
+ ang := arctan2(y, x);
+ SinCos(ang, sn, cn);
+ rdc := radius + (random * 0.5 * ca);
+
+ FPx^ := vvar * rdc * cn + x0;
+ FPy^ := vvar * rdc * sn + y0;
+ end;
+ end else
+ begin
+ FPx^ := vvar * x + x0;
+ FPy^ := vvar * y + y0;
+ end;
+end;
+
+constructor TVariationPostCircleCrop.Create;
+begin
+ x0 := 0;
+ y0 := 0;
+ radius := 1;
+ scatter_area := 0;
+ zero := 0;
+end;
+
+class function TVariationPostCircleCrop.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostCircleCrop.Create;
+end;
+
+class function TVariationPostCircleCrop.GetName: string;
+begin
+ Result := 'post_circlecrop';
+end;
+
+function TVariationPostCircleCrop.GetNrVariables: integer;
+begin
+ Result := 5;
+end;
+
+function TVariationPostCircleCrop.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = sx then begin
+ Value := x0;
+ Result := True;
+ end
+ else if Name = sy then begin
+ Value := y0;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ Value := radius;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ Value := scatter_area;
+ Result := True;
+ end
+ else if Name = szero then begin
+ Value := zero;
+ Result := True;
+ end;
+end;
+
+function TVariationPostCircleCrop.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := sradius;
+ 1: Result := sx;
+ 2: Result := sy;
+ 3: Result := sarea;
+ 4: Result := szero;
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationPostCircleCrop.ResetVariable(const Name: string): boolean;
+begin
+Result := False;
+ if Name = sx then begin
+ x0 := 0;
+ Result := True;
+ end
+ else if Name = sy then begin
+ y0 := 0;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ radius := 1;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ scatter_area := 0;
+ Result := True;
+ end
+ else if Name = szero then begin
+ zero := 0;
+ Result := True;
+ end;
+end;
+
+function TVariationPostCircleCrop.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+Result := False;
+ if Name = sx then begin
+ x0 := Value;
+ Result := True;
+ end
+ else if Name = sy then begin
+ y0 := Value;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ radius := Value;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ scatter_area := Value;
+ Result := True;
+ end
+ else if Name = szero then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ zero := Round(Value);
+ Result := True;
+ end;
+end;
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostCircleCrop), false, false);
+
+end.
diff --git a/Variations/varPostCrop.pas b/Variations/varPostCrop.pas
new file mode 100644
index 0000000..3995e84
--- /dev/null
+++ b/Variations/varPostCrop.pas
@@ -0,0 +1,311 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPostCrop;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPostCrop = class(TBaseVariation)
+ const
+ n_x0 : string = 'post_crop_left';
+ n_y0 : string = 'post_crop_top';
+ n_x1 : string = 'post_crop_right';
+ n_y1 : string = 'post_crop_bottom';
+ n_s : string = 'post_crop_scatter_area';
+ n_z : string = 'post_crop_zero';
+ n : string = 'post_crop';
+ n_z1 : string = 'post_crop_high'; // AV
+ n_z0 : string = 'post_crop_low'; //AV
+ n_3D : string = 'post_crop_use3D'; // AV
+ private
+ x0, y0, x1, y1, z0, z1, s, w, h, l: double;
+ _x0, _y0, _x1, _y1, _z0, _z1: double;
+ z, c3D: byte;
+
+ procedure Calc2D;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCrop.Prepare;
+begin
+ if (x0 < x1) then begin
+ _x0 := x0;
+ _x1 := x1;
+ end else begin
+ _x0 := x1;
+ _x1 := x0;
+ end;
+
+ if (y0 < y1) then begin
+ _y0 := y0;
+ _y1 := y1;
+ end else begin
+ _y0 := y1;
+ _y1 := y0;
+ end;
+
+ if (z0 < z1) then begin
+ _z0 := z0;
+ _z1 := z1;
+ end else begin
+ _z0 := z1;
+ _z1 := z0;
+ end;
+
+ w := (_x1 - _x0) * 0.5 * s;
+ h := (_y1 - _y0) * 0.5 * s;
+ l := (_z1 - _z0) * 0.5 * s;
+end;
+
+/////////////////////////////////////////////////
+procedure TVariationPostCrop.GetCalcFunction(var f: TCalcFunction);
+begin
+ if (c3D = 0) then f := Calc2D
+ else f := CalcFunction;
+end;
+
+////////////////////////////////////////////////////////
+procedure TVariationPostCrop.CalcFunction;
+var x, y, tz: double;
+begin
+ x := FPx^;
+ y := FPy^;
+ tz := FPz^;
+
+ if ((x < _x0) or (x > _x1) or (y < _y0) or (y > _y1) or (tz < _z0) or (tz > _z1))
+ and (z <> 0) then begin
+ x := 0; y := 0; tz := 0;
+ end else begin
+ if x < _x0 then x := _x0 + random * w
+ else if x > _x1 then x := _x1 - random * w;
+ if y < _y0 then y := _y0 + random * h
+ else if y > _y1 then y := _y1 - random * h;
+ if tz < _z0 then tz := _z0 + random * l
+ else if tz > _z1 then tz := _z1 - random * l;
+ end;
+
+ FPx^ := VVAR * x;
+ FPy^ := VVAR * y;
+ FPz^ := VVAR * tz;
+end;
+
+procedure TVariationPostCrop.Calc2D;
+var x, y: double;
+begin
+ x := FPx^;
+ y := FPy^;
+
+ if ((x < _x0) or (x > _x1) or (y < _y0) or (y > _y1)) and (z <> 0) then begin
+ x := 0; y := 0;
+ end else begin
+ if x < _x0 then x := _x0 + random * w
+ else if x > _x1 then x := _x1 - random * w;
+ if y < _y0 then y := _y0 + random * h
+ else if y > _y1 then y := _y1 - random * h;
+ end;
+
+ FPx^ := VVAR * x;
+ FPy^ := VVAR * y;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPostCrop.Create;
+begin
+ x0 := -1; x1 := 1;
+ y0 := -1; y1 := 1;
+ z0 := -1; z1 := 1;
+ c3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostCrop.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostCrop.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostCrop.GetName: string;
+begin
+ Result := n;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCrop.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := n_x0;
+ 1: Result := n_y0;
+ 2: Result := n_x1;
+ 3: Result := n_y1;
+ 4: Result := n_z0;
+ 5: Result := n_z1;
+ 6: Result := n_s;
+ 7: Result := n_z;
+ 8: Result := n_3D;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCrop.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ x0 := Value;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := Value;
+ Result := True;
+ end else if Name = n_x1 then begin
+ x1 := Value;
+ Result := True;
+ end else if Name = n_y1 then begin
+ y1 := Value;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := Value;
+ Result := True;
+ end else if Name = n_z1 then begin
+ z1 := Value;
+ Result := True;
+ end else if Name = n_s then begin
+ if (Value < -1) then Value := -1;
+ if (Value > 1) then Value := 1;
+ s := Value;
+ Result := True;
+ end else if Name = n_z then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ z := Round(Value);
+ Result := True;
+ end else if Name = n_3d then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ c3D := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationPostCrop.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ x0 := -1;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := -1;
+ Result := True;
+ end else if Name = n_x1 then begin
+ x1 := 1;
+ Result := True;
+ end else if Name = n_y1 then begin
+ y1 := 1;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := -1;
+ Result := True;
+ end else if Name = n_z1 then begin
+ z1 := 1;
+ Result := True;
+ end else if Name = n_s then begin
+ s := 0;
+ Result := True;
+ end else if Name = n_z then begin
+ z := 0;
+ Result := True;
+ end else if Name = n_3D then begin
+ c3D := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCrop.GetNrVariables: integer;
+begin
+ Result := 9
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCrop.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ Value := x0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ Value := y0;
+ Result := True;
+ end else if Name = n_x1 then begin
+ Value := x1;
+ Result := True;
+ end else if Name = n_y1 then begin
+ Value := y1;
+ Result := True;
+ end else if Name = n_z0 then begin
+ Value := z0;
+ Result := True;
+ end else if Name = n_z1 then begin
+ Value := z1;
+ Result := True;
+ end else if Name = n_s then begin
+ Value := s;
+ Result := True;
+ end else if Name = n_z then begin
+ Value := z;
+ Result := True;
+ end else if Name = n_3D then begin
+ Value := c3D;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostCrop), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varPostCurl.pas b/Variations/varPostCurl.pas
new file mode 100644
index 0000000..cae1a85
--- /dev/null
+++ b/Variations/varPostCurl.pas
@@ -0,0 +1,376 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPostCurl;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ variation_name = 'post_curl';
+ num_vars = 2;
+
+ {$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationPostCurl = class(TBaseVariation)
+ private
+ c1, c2, c2x2: double;
+
+ procedure CalcZeroC2;
+ procedure CalcZeroC1;
+ procedure CalcZeroC2C1;
+ public
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+// TVariationPostCurl
+
+///////////////////////////////
+procedure TVariationPostCurl.Prepare;
+begin
+ // AV: fixed - it's wrong when vvar <> 1
+ //c1 := c1 * VVAR;
+ //c2 := c2 * VVAR;
+ c2x2 := 2 * c2;
+end;
+
+////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl.GetCalcFunction(var f: TCalcFunction);
+begin
+ if IsZero(c1) then begin
+ if IsZero(c2) then
+ f := CalcZeroC2C1
+ else
+ f := CalcZeroC1
+ end
+ else begin
+ if IsZero(c2) then
+ f := CalcZeroC2
+ else
+ f := CalcFunction
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl.CalcFunction;
+{$ifndef _ASM_}
+var
+ x, y, r, re, im: double;
+begin
+ x := FPx^;
+ y := FPy^;
+
+ re := 1 + c1 * x + c2 * (sqr(x) - sqr(y));
+ im := c1 * y + c2x2 * x * y;
+
+ r := vvar / (sqr(re) + sqr(im));
+ FPx^ := (x * re + y * im) * r;
+ FPy^ := (y * re - x * im) * r;
+{$else}
+asm
+ mov edx, [eax + FTx]
+
+ fld qword ptr [edx + 24] // FPy
+ fld qword ptr [edx + 16] // FPx
+ fld st(1)
+ fmul st, st(1)
+ fmul qword ptr [eax + c2x2]
+ fld st(2)
+ fmul qword ptr [eax + c1]
+ faddp
+ fld st(2)
+ fmul st, st
+ fld st(2)
+ fmul st, st
+ fsubrp
+ fmul qword ptr [eax + c2]
+ fld1
+ faddp
+ fld st(2)
+ fmul qword ptr [eax + c1]
+ faddp
+
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+
+ fld st(3)
+ fmul st, st(2)
+ fld st(5)
+ fmul st, st(4)
+ faddp
+ fmul st, st(1)
+
+ fstp qword ptr [edx + 16] // FPx
+
+ fxch st(4)
+ fmulp
+ fxch st(2)
+ fmulp
+ fsubp
+ fmulp
+
+ fstp qword ptr [edx + 24] // FPy
+{$endif}
+end;
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl.CalcZeroC2; // AV: Mobius case
+{$ifndef _ASM_}
+var
+ r, x, y: double;
+ re, im: double;
+begin
+ x := FPx^;
+ y := FPy^;
+ re := 1 + c1 * x;
+ im := c1 * y;
+
+ r := vvar / (sqr(re) + sqr(im));
+
+ FPx^ := (x*re + y*im) * r;
+ FPy^ := (y*re - x*im) * r;
+ //FPz^ := vvar * FPz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+
+ fld qword ptr [edx + 24] // FPy
+ fld qword ptr [edx + 16] // FPx
+ fld st(1)
+ fld qword ptr [eax + c1]
+ fmul st(1), st
+ fmul st, st(2)
+ fld1
+ faddp
+
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+
+ fld st(3)
+ fmul st, st(2)
+ fld st(5)
+ fmul st, st(4)
+ faddp
+ fmul st, st(1)
+
+ fstp qword ptr [edx + 16] // FPx
+
+ fxch st(4)
+ fmulp
+ fxch st(2)
+ fmulp
+ fsubp
+ fmulp
+
+ fstp qword ptr [edx + 24] // FPy
+{$endif}
+end;
+
+procedure TVariationPostCurl.CalcZeroC1;
+{$ifndef _ASM_}
+var
+ r, x, y: double;
+ re, im: double;
+begin
+ x := FPx^;
+ y := FPy^;
+ re := 1 + c2*(sqr(x) - sqr(y));
+ im := c2x2 * x * y;
+
+ r := vvar / (sqr(re) + sqr(im));
+
+ FPx^ := (x*re + y*im) * r;
+ FPy^ := (y*re - x*im) * r;
+
+{$else}
+asm
+ mov edx, [eax + FTx]
+
+ fld qword ptr [edx + 24] // FPy
+ fld qword ptr [edx + 16] // FPx
+ fld st(1)
+ fmul st, st(1)
+ fmul qword ptr [eax + c2x2]
+ fld st(2)
+ fmul st, st
+ fld st(2)
+ fmul st, st
+ fsubrp
+ fmul qword ptr [eax + c2]
+ fld1
+ faddp
+
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fdivr qword ptr [eax + vvar]
+
+ fld st(3)
+ fmul st, st(2)
+ fld st(5)
+ fmul st, st(4)
+ faddp
+ fmul st, st(1)
+
+ fstp qword ptr [edx + 16] // FPx
+
+ fxch st(4)
+ fmulp
+ fxch st(2)
+ fmulp
+ fsubp
+ fmulp
+
+ fstp qword ptr [edx + 24] // FPy
+ //fwait
+{$endif}
+end;
+
+procedure TVariationPostCurl.CalcZeroC2C1; // AV: linear case
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ FPx^ := vvar * FPx^;
+ FPy^ := vvar * FPy^;
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 16] // FPx
+ fmul st, st(1)
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 24] // FPy
+ fmulp
+ fstp qword ptr [edx + 24]
+ //fwait
+{$endif}
+end;
+
+
+class function TVariationPostCurl.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostCurl.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostCurl.GetName: string;
+begin
+ Result := variation_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCurl.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := 'post_curl_c1';
+ 1: Result := 'post_curl_c2';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCurl.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'post_curl_c1' then begin
+ c1 := value;
+ Result := True;
+ end
+ else if Name = 'post_curl_c2' then begin
+ c2 := value;
+ Result := True;
+ end;
+end;
+
+function TVariationPostCurl.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'post_curl_c1' then begin
+ c1 := 0;
+ Result := True;
+ end
+ else if Name = 'post_curl_c2' then begin
+ c2 := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCurl.GetNrVariables: integer;
+begin
+ Result := num_vars;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCurl.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'post_curl_c1' then begin
+ value := c1;
+ Result := True;
+ end
+ else if Name = 'post_curl_c2' then begin
+ value := c2;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostCurl), false, false);
+end.
diff --git a/Variations/varPostCurl3D.pas b/Variations/varPostCurl3D.pas
new file mode 100644
index 0000000..62cb203
--- /dev/null
+++ b/Variations/varPostCurl3D.pas
@@ -0,0 +1,276 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPostCurl3D;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ variation_name = 'post_curl3D';
+ num_vars = 3;
+ var_cx_name = 'post_curl3D_cx';
+ var_cy_name = 'post_curl3D_cy';
+ var_cz_name = 'post_curl3D_cz';
+
+type
+ TVariationPostCurl3D = class(TBaseVariation)
+ private
+ cx, cy, cz: double;
+ //_cx, _cy, _cz, // AV: now unused
+ cx2, cy2, cz2, c2,
+ c2x, c2y, c2z: double;
+
+ procedure CalcCx;
+ procedure CalcCy;
+ procedure CalcCz;
+ procedure CalcLinear;
+ public
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+// TVariationCurl3D
+
+procedure TVariationPostCurl3D.Prepare;
+begin
+ // AV : fixed when VVAR <> 1
+ //_cx := VVAR * cx;
+ //_cy := VVAR * cy;
+ //_cz := VVAR * cz;
+
+ c2x := 2 * cx;
+ c2y := 2 * cy;
+ c2z := 2 * cz;
+
+ cx2 := sqr(cx);
+ cy2 := sqr(cy);
+ cz2 := sqr(cz);
+
+ c2 := cx2 + cy2 + cz2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl3D.GetCalcFunction(var f: TCalcFunction);
+begin
+
+ if IsZero(cx) then begin
+ if IsZero(cy) then begin
+ if IsZero(cz) then
+ f := CalcLinear
+ else
+ f := CalcCz;
+ end
+ else begin
+ if IsZero(cz) then
+ f := CalcCy
+ else
+ f := CalcFunction;
+ end
+ end
+ else begin
+ if IsZero(cy) and IsZero(cz) then
+ f := CalcCx
+ else
+ f := CalcFunction;
+ end;
+
+ f := CalcFunction;
+
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl3D.CalcFunction;
+var
+ x, y, z, r, r2: double;
+begin
+ x := Max(-1e100, Min(FPx^, 1e100)); // <--- got weird FP overflow there...
+ y := Max(-1e100, Min(FPy^, 1e100));
+ z := Max(-1e100, Min(FPz^, 1e100));
+
+ r2 := sqr(x) + sqr(y) + sqr(z);
+ r := vvar / (r2 * c2 + c2x * x - c2y * y + c2z * z + 1);
+
+ FPx^ := r * (x + cx * r2);
+ FPy^ := r * (y - cy * r2); // AV: fixed the sign
+ FPz^ := r * (z + cz * r2);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl3D.CalcCx;
+var
+ x, r, r2: double;
+begin
+ r2 := sqr(FPx^) + sqr(FPy^) + sqr(FPz^);
+
+ r := vvar / (cx2*r2 + c2x*FPx^ + 1);
+
+ FPx^ := r * (FPx^ + cx*r2);
+ FPy^ := r * FPy^;
+ FPz^ := r * FPz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl3D.CalcCy;
+var
+ r, r2: double;
+begin
+ r2 := sqr(FPx^) + sqr(FPy^) + sqr(FPz^);
+
+ r := vvar / (cy2*r2 - c2y*FPy^ + 1);
+
+ FPx^ := r * FPx^;
+ FPy^ := r * (FPy^ - cy*r2);
+ FPz^ := r * FPz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl3D.CalcCz;
+var
+ r, r2: double;
+begin
+ r2 := sqr(FPx^) + sqr(FPy^) + sqr(FPz^);
+
+ r := vvar / (cz2*r2 + c2z*FPz^ + 1);
+
+ FPx^ := r * FPx^;
+ FPy^ := r * FPy^;
+ FPz^ := r * (FPz^ + cz*r2);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostCurl3D.CalcLinear;
+var
+ r: double;
+begin
+ FPx^ := vvar * FTx^;
+ FPy^ := vvar * FTy^;
+ FPz^ := vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+class function TVariationPostCurl3D.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostCurl3D.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostCurl3D.GetName: string;
+begin
+ Result := variation_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCurl3D.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := var_cx_name;
+ 1: Result := var_cy_name;
+ 2: Result := var_cz_name;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCurl3D.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_cx_name then begin
+ cx := value;
+ Result := True;
+ end
+ else if Name = var_cy_name then begin
+ cy := value;
+ Result := True;
+ end
+ else if Name = var_cz_name then begin
+ cz := value;
+ Result := True;
+ end;
+end;
+
+function TVariationPostCurl3D.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = var_cx_name then begin
+ cx := 0;
+ Result := True;
+ end
+ else if Name = var_cy_name then begin
+ cy := 0;
+ Result := True;
+ end
+ else if Name = var_cz_name then begin
+ cz := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCurl3D.GetNrVariables: integer;
+begin
+ Result := num_vars;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostCurl3D.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_cx_name then begin
+ value := cx;
+ Result := True;
+ end
+ else if Name = var_cy_name then begin
+ value := cy;
+ Result := True;
+ end
+ else if Name = var_cz_name then begin
+ value := cz;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostCurl3D), true, false);
+end.
diff --git a/Variations/varPostFalloff2.pas b/Variations/varPostFalloff2.pas
new file mode 100644
index 0000000..948c31f
--- /dev/null
+++ b/Variations/varPostFalloff2.pas
@@ -0,0 +1,348 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPostFalloff2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPostFalloff2 = class(TBaseVariation)
+ const
+ n_scatter : string = 'post_falloff2_scatter';
+ n_mindist : string = 'post_falloff2_mindist';
+ n_mul_x : string = 'post_falloff2_mul_x';
+ n_mul_y : string = 'post_falloff2_mul_y';
+ n_mul_z : string = 'post_falloff2_mul_z';
+ n_mul_c : string = 'post_falloff2_mul_c';
+ n_x0 : string = 'post_falloff2_x0';
+ n_y0 : string = 'post_falloff2_y0';
+ n_z0 : string = 'post_falloff2_z0';
+ n_invert : string = 'post_falloff2_invert';
+ n_blurtype : string = 'post_falloff2_type';
+
+ private
+ rmax: double;
+ x0, y0, z0: double;
+ scatter, mindist: double;
+ invert, blurtype: integer;
+ mul_x, mul_y, mul_z, mul_c: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure CalcFunctionRadial;
+ procedure CalcFunctionGaussian;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostFalloff2.Prepare;
+begin
+ rmax := 0.04 * scatter;
+end;
+
+procedure TVariationPostFalloff2.GetCalcFunction(var f: TCalcFunction);
+begin
+ if blurtype = 1 then f := CalcFunctionRadial
+ else if blurtype = 2 then f := CalcFunctionGaussian
+ else f := CalcFunction;
+end;
+procedure TVariationPostFalloff2.CalcFunction;
+var
+ in_x, in_y, in_z, d: double;
+begin
+ in_x := FPx^;
+ in_y := FPy^;
+ in_z := FPz^;
+
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ FPx^ := VVAR * (in_x + mul_x * random * d);
+ FPy^ := VVAR * (in_y + mul_y * random * d);
+ FPz^ := VVAR * (in_z + mul_z * random * d);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+procedure TVariationPostFalloff2.CalcFunctionRadial;
+var
+ in_x, in_y, in_z, d, r_in: double;
+ sigma, phi, r, sins, coss, sinp, cosp: double;
+begin
+ in_x := FPx^;
+ in_y := FPy^;
+ in_z := FPz^;
+
+ r_in := sqrt(sqr(in_x) + sqr(in_y) + sqr(in_z)) + 1e-6;
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ sigma := ArcSin(in_z / r_in) + mul_z * random * d;
+ phi := ArcTan2(in_y, in_x) + mul_y * random * d;
+ r := r_in + mul_x * random * d;
+
+ SinCos(sigma, sins, coss);
+ SinCos(phi, sinp, cosp);
+
+ FPx^ := VVAR * (r * coss * cosp);
+ FPy^ := VVAR * (r * coss * sinp);
+ FPz^ := VVAR * (sins);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+procedure TVariationPostFalloff2.CalcFunctionGaussian;
+var
+ in_x, in_y, in_z, d: double;
+ sigma, phi, r, sins, coss, sinp, cosp: double;
+begin
+ in_x := FPx^;
+ in_y := FPy^;
+ in_z := FPz^;
+
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ sigma := d * random * 2 * PI;
+ phi := d * random * PI;
+ r := d * random;
+
+ SinCos(sigma, sins, coss);
+ SinCos(phi, sinp, cosp);
+
+ FPx^ := VVAR * (in_x + mul_x * r * coss * cosp);
+ FPy^ := VVAR * (in_y + mul_y * r * coss * sinp);
+ FPz^ := VVAR * (in_z + mul_z * r * sins);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPostFalloff2.Create;
+begin
+ scatter := 1;
+ mindist := 0.5;
+ mul_x := 1;
+ mul_y := 1;
+ mul_z := 0;
+ mul_c := 0;
+ x0 := 0;
+ y0 := 0;
+ z0 := 0;
+ invert := 0;
+ blurtype := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostFalloff2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostFalloff2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostFalloff2.GetName: string;
+begin
+ Result := 'post_falloff2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostFalloff2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := n_scatter;
+ 1: Result := n_mindist;
+ 2: Result := n_mul_x;
+ 3: Result := n_mul_y;
+ 4: Result := n_mul_z;
+ 5: Result := n_mul_c;
+ 6: Result := n_x0;
+ 7: Result := n_y0;
+ 8: Result := n_z0;
+ 9: Result := n_invert;
+ 10: Result := n_blurtype;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostFalloff2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ if Value < 1e-6 then Value := 1e-6;
+ scatter := Value;
+ Result := True;
+ end else if Name = n_mindist then begin
+ if Value < 0 then Value := 0;
+ mindist := Value;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_x := Value;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_y := Value;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_z := Value;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_c := Value;
+ Result := True;
+ end else if Name = n_x0 then begin
+ x0 := Value;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := Value;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := Value;
+ Result := True;
+ end else if Name = n_invert then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ invert := Round(Value);
+ Result := True;
+ end else if Name = n_blurtype then begin
+ if (Value > 2) then Value := 2;
+ if (Value < 0) then Value := 0;
+ blurtype := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationPostFalloff2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ scatter := 1;
+ Result := True;
+ end else if Name = n_mindist then begin
+ mindist := 0.5;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ mul_x := 1;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ mul_y := 1;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ mul_z := 0;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ mul_c := 0;
+ Result := True;
+ end else if Name = n_x0 then begin
+ x0 := 0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := 0;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := 0;
+ Result := True;
+ end else if Name = n_invert then begin
+ invert := 0;
+ Result := True;
+ end else if Name = n_blurtype then begin
+ blurtype := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostFalloff2.GetNrVariables: integer;
+begin
+ Result := 11
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostFalloff2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ Value := scatter;
+ Result := True;
+ end else if Name = n_mindist then begin
+ Value := mindist;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ Value := mul_x;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ Value := mul_y;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ Value := mul_z;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ Value := mul_c;
+ Result := True;
+ end else if Name = n_x0 then begin
+ Value := x0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ Value := y0;
+ Result := True;
+ end else if Name = n_z0 then begin
+ Value := z0;
+ Result := True;
+ end else if Name = n_invert then begin
+ Value := invert;
+ Result := True;
+ end else if Name = n_blurtype then begin
+ Value := blurtype;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostFalloff2), true, true);
+end.
\ No newline at end of file
diff --git a/Variations/varPostSinusoidal.pas b/Variations/varPostSinusoidal.pas
new file mode 100644
index 0000000..bd3bcce
--- /dev/null
+++ b/Variations/varPostSinusoidal.pas
@@ -0,0 +1,162 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varPostSinusoidal;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+ {$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationPostSinusoidal = class(TBaseVariation)
+ private
+ use3D: byte;
+ procedure CalcFlat;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPostSinusoidal }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostSinusoidal.GetCalcFunction(var f: TCalcFunction);
+begin
+ if use3D = 0 then
+ f := CalcFlat
+ else f := CalcFunction;
+end;
+
+procedure TVariationPostSinusoidal.CalcFlat;
+{$ifndef _ASM_}
+begin
+ FPx^ := vvar * sin(FPx^);
+ FPy^ := vvar * sin(FPy^);
+{$else}
+asm // AV: added inline asm code
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 16] // FPx
+ fsin
+ fmul st, st(1)
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 24] // FPy
+ fsin
+ fmulp
+ fstp qword ptr [edx + 24]
+
+ fwait
+{$endif}
+end;
+
+procedure TVariationPostSinusoidal.CalcFunction;
+{$ifndef _ASM_}
+begin
+ FPx^ := vvar * sin(FPx^);
+ FPy^ := vvar * sin(FPy^);
+ FPz^ := vvar * sin(FPz^); // AV: changed from linear scale
+{$else}
+asm // AV: added inline asm code
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx + 16] // FPx
+ fsin
+ fmul st, st(1)
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 24] // FPy
+ fsin
+ fmul st, st(1)
+ fstp qword ptr [edx + 24]
+
+ fld qword ptr [edx + 40] // FPz
+ fsin
+ fmulp
+ fstp qword ptr [edx + 40]
+
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPostSinusoidal.Create;
+begin
+ use3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostSinusoidal.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostSinusoidal.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostSinusoidal.GetName: string;
+begin
+ Result := 'post_sinusoidal';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostSinusoidal.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := 'post_sinusoidal_use3D';
+ else
+ Result := '';
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostSinusoidal.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'post_sinusoidal_use3D' then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ use3D := Round(Value);
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostSinusoidal.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPostSinusoidal.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'post_sinusoidal_use3D' then begin
+ Value := use3D;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostSinusoidal), true, false);
+end.
diff --git a/Variations/varPostSpherical.pas b/Variations/varPostSpherical.pas
new file mode 100644
index 0000000..4b578ff
--- /dev/null
+++ b/Variations/varPostSpherical.pas
@@ -0,0 +1,80 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPostSpherical;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPostSpherical = class(TBaseVariation)
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPostSpherical }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPostSpherical.CalcFunction;
+var r: double;
+begin
+ r := vvar / (sqr(FPx^) + sqr(FPy^) + 10e-300);
+ FPx^ := FPx^ * r;
+ FPy^ := FPy^ * r;
+ // FPz^ := VVAR * FPz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPostSpherical.Create;
+begin
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostSpherical.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPostSpherical.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPostSpherical.GetName: string;
+begin
+ Result := 'post_spherical';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPostSpherical), false, false);
+end.
diff --git a/Variations/varPower.pas b/Variations/varPower.pas
new file mode 100644
index 0000000..dc2aa40
--- /dev/null
+++ b/Variations/varPower.pas
@@ -0,0 +1,61 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varPower;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPower = class(TBaseVariation)
+ private
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ procedure CalcFunction; override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+
+procedure TVariationPower.CalcFunction;
+var
+ r, FLength, FSinA, FCosA: double;
+begin
+ FLength := sqrt(sqr(FTx^) + sqr(FTy^)) + 1E-300;
+ FSinA := FTx^ / FLength;
+ FCosA := FTy^ / FLength;
+ r := vvar * Math.Power(FLength, FSinA);
+ FPx^ := FPx^ + r * FCosA;
+ FPy^ := FPy^ + r * FSinA;
+end;
+
+constructor TVariationPower.Create;
+begin
+ inherited Create;
+end;
+
+class function TVariationPower.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPower.Create;
+end;
+
+class function TVariationPower.GetName: string;
+begin
+ Result := 'power';
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPower), false, false);
+
+end.
diff --git a/Variations/varPreBoarders2.pas b/Variations/varPreBoarders2.pas
new file mode 100644
index 0000000..0abed2e
--- /dev/null
+++ b/Variations/varPreBoarders2.pas
@@ -0,0 +1,188 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varPreBoarders2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ sb2c = 'pre_boarders2_c';
+ sleft = 'pre_boarders2_left';
+ sright = 'pre_boarders2_right';
+ eps: double = 1e-30;
+type
+ TVariationPreBoarders2 = class(TBaseVariation)
+ private
+ b2c, left, right, cc, cl, cr: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPreBoarders2 }
+
+//////////////////////////////////////////
+procedure TVariationPreBoarders2.Prepare;
+begin
+ cc := abs(b2c);
+ cl := cc * abs(left);
+ cr := cc + (cc * abs(right));
+end;
+
+//////////////////////////////////////////
+procedure TVariationPreBoarders2.CalcFunction;
+var
+ roundX, roundY, offsetX, offsetY: double;
+begin
+ roundX := round(FTx^);
+ roundY := round(FTy^);
+ offsetX := FTx^ - roundX;
+ offsetY := FTy^ - roundY;
+
+ if (random >= cr) then
+ begin
+ FTx^ := VVAR * (offsetX * cc + roundX);
+ FTy^ := VVAR * (offsetY * cc + roundY);
+ end
+ else begin
+ if (abs(offsetX) >= abs(offsetY)) then
+ begin
+ if(offsetX >= 0.0) then
+ begin
+ FTx^ := VVAR * (offsetX * cc + roundX + cl);
+ FTy^ := VVAR * (offsetY * cc + roundY + cl * offsetY / offsetX);
+ end
+ else begin
+ FTx^ := VVAR * (offsetX * cc + roundX - cl);
+ FTy^ := VVAR * (offsetY * cc + roundY - cl * offsetY / offsetX);
+ end;
+ end
+ else begin
+ if(offsetY >= 0.0) then
+ begin
+ FTy^ := VVAR * (offsetY * cc + roundY + cl);
+ FTx^ := VVAR * (offsetX * cc + roundX + offsetX / offsetY * cl);
+ end
+ else begin
+ FTy^ := VVAR * (offsetY * cc + roundY - cl);
+ FTx^ := VVAR * (offsetX * cc + roundX - offsetX / offsetY * cl);
+ end;
+ end;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+constructor TVariationPreBoarders2.Create;
+begin
+ b2c := 0.5;
+ left := 0.5;
+ right := 0.5;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreBoarders2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPreBoarders2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreBoarders2.GetName: string;
+begin
+ Result := 'pre_boarders2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreBoarders2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := sb2c;
+ 1: Result := sleft;
+ 2: Result := sright;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreBoarders2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ if abs(value) = 0 then value := eps;
+ b2c := value;
+ Result := True;
+ end else if Name = sleft then begin
+ if abs(value) = 0 then value := eps;
+ left := Value;
+ Result := True;
+ end else if Name = sright then begin
+ if abs(value) = 0 then value := eps;
+ right := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationPreBoarders2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ b2c := 0.5;
+ Result := True;
+ end else if Name = sleft then begin
+ left := 0.5;
+ Result := True;
+ end else if Name = sright then begin
+ right := 0.5;
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationPreBoarders2.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreBoarders2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = sb2c then begin
+ Value := b2c;
+ Result := True;
+ end else if Name = sleft then begin
+ Value := left;
+ Result := True;
+ end else if Name = sright then begin
+ Value := right;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPreBoarders2), false, false);
+end.
\ No newline at end of file
diff --git a/Variations/varPreBwraps.pas b/Variations/varPreBwraps.pas
new file mode 100644
index 0000000..60fe3a7
--- /dev/null
+++ b/Variations/varPreBwraps.pas
@@ -0,0 +1,227 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPreBwraps;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPreBwraps = class(TBaseVariation)
+ private
+ pre_bwraps_cellsize, pre_bwraps_space, pre_bwraps_gain,
+ pre_bwraps_inner_twist, pre_bwraps_outer_twist,
+ g2, r2, rfactor: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPreBwraps.Prepare;
+var
+ max_bubble, radius: double;
+begin
+ radius := 0.5 * (pre_bwraps_cellsize / (1.0 + sqr(pre_bwraps_space)));
+ g2 := sqr(pre_bwraps_gain) / (radius + 1e-6) + 1e-6;
+ max_bubble := g2 * radius;
+
+ if (max_bubble > 2.0) then max_bubble := 1.0
+ else max_bubble := max_bubble * (1.0 / (sqr(max_bubble)/4.0 + 1.0));
+
+ r2 := sqr(radius);
+ rfactor := radius / max_bubble;
+end;
+
+procedure TVariationPreBwraps.CalcFunction;
+var
+ Vx, Vy,
+ Cx, Cy,
+ Lx, Ly,
+ r, theta, s, c : double;
+begin
+ Vx := FTx^;
+ Vy := FTy^;
+
+ if (pre_bwraps_cellsize <> 0.0) then
+ begin
+ Cx := (floor(Vx / pre_bwraps_cellsize) + 0.5) * pre_bwraps_cellsize;
+ Cy := (floor(Vy / pre_bwraps_cellsize) + 0.5) * pre_bwraps_cellsize;
+
+ Lx := Vx - Cx;
+ Ly := Vy - Cy;
+
+ if ((sqr(Lx) + sqr(Ly)) <= r2) then
+ begin
+ Lx := Lx * g2;
+ Ly := Ly * g2;
+
+ r := rfactor / ((sqr(Lx) + sqr(Ly)) / 4.0 + 1);
+
+ Lx := Lx * r;
+ Ly := Ly * r;
+
+ r := (sqr(Lx) + sqr(Ly)) / r2;
+ theta := pre_bwraps_inner_twist * (1.0 - r) + pre_bwraps_outer_twist * r;
+ SinCos(theta, s, c);
+
+ Vx := Cx + c * Lx + s * Ly;
+ Vy := Cy - s * Lx + c * Ly;
+
+ FTx^ := VVAR * Vx;
+ FTy^ := VVAR * Vy;
+ FTz^ := VVAR * FTz^;
+ end;
+ end;
+
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPreBwraps.Create;
+begin
+ pre_bwraps_cellsize := 1;
+ pre_bwraps_space := 0;
+ pre_bwraps_gain := 1;
+ pre_bwraps_inner_twist := 0;
+ pre_bwraps_outer_twist := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreBwraps.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPreBwraps.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreBwraps.GetName: string;
+begin
+ Result := 'pre_bwraps';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreBwraps.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'pre_bwraps_cellsize';
+ 1: Result := 'pre_bwraps_space';
+ 2: Result := 'pre_bwraps_gain';
+ 3: Result := 'pre_bwraps_inner_twist';
+ 4: Result := 'pre_bwraps_outer_twist';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreBwraps.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'pre_bwraps_cellsize' then begin
+ pre_bwraps_cellsize := Value;
+ Result := True;
+ end else if Name = 'pre_bwraps_space' then begin
+ pre_bwraps_space := Value;
+ Result := True;
+ end else if Name = 'pre_bwraps_gain' then begin
+ pre_bwraps_gain := Value;
+ Result := True;
+ end else if Name = 'pre_bwraps_inner_twist' then begin
+ pre_bwraps_inner_twist := Value;
+ Result := True;
+ end else if Name = 'pre_bwraps_outer_twist' then begin
+ pre_bwraps_outer_twist := Value;
+ Result := True;
+ end
+end;
+function TVariationPreBwraps.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'pre_bwraps_cellsize' then begin
+ pre_bwraps_cellsize := 1;
+ Result := True;
+ end else if Name = 'pre_bwraps_space' then begin
+ pre_bwraps_space := 0;
+ Result := True;
+ end else if Name = 'pre_bwraps_gain' then begin
+ pre_bwraps_gain := 1;
+ Result := True;
+ end else if Name = 'pre_bwraps_inner_twist' then begin
+ pre_bwraps_inner_twist := 0;
+ Result := True;
+ end else if Name = 'pre_bwraps_outer_twist' then begin
+ pre_bwraps_outer_twist := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreBwraps.GetNrVariables: integer;
+begin
+ Result := 5
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreBwraps.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'pre_bwraps_cellsize' then begin
+ if Value = 0 then Value := 1e-6;
+ Value := pre_bwraps_cellsize;
+ Result := True;
+ end else if Name = 'pre_bwraps_space' then begin
+ Value := pre_bwraps_space;
+ Result := True;
+ end else if Name = 'pre_bwraps_gain' then begin
+ Value := pre_bwraps_gain;
+ Result := True;
+ end else if Name = 'pre_bwraps_inner_twist' then begin
+ Value := pre_bwraps_inner_twist;
+ Result := True;
+ end else if Name = 'pre_bwraps_outer_twist' then begin
+ Value := pre_bwraps_outer_twist;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPreBwraps), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varPreCircleCrop.pas b/Variations/varPreCircleCrop.pas
new file mode 100644
index 0000000..c4f6f98
--- /dev/null
+++ b/Variations/varPreCircleCrop.pas
@@ -0,0 +1,202 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varPreCircleCrop;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPreCircleCrop = class(TBaseVariation)
+
+ const
+ sx : string = 'pre_circlecrop_x';
+ sy : string = 'pre_circlecrop_y';
+ sradius : string = 'pre_circlecrop_radius';
+ szero : string = 'pre_circlecrop_zero';
+ sarea : string = 'pre_circlecrop_scatter_area';
+ private
+ x0, y0, radius, scatter_area, ca: double;
+ zero: byte;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+
+implementation
+uses
+ Math;
+
+{ TVariationPreCircleCrop }
+
+//////////////////////////////////////////
+
+procedure TVariationPreCircleCrop.Prepare;
+begin
+ ca := max(-1.0, min(scatter_area, 1.0));
+end;
+
+procedure TVariationPreCircleCrop.CalcFunction;
+var
+ x, y, rad, ang, rdc, sn, cn: double;
+begin
+ x := FTx^ - x0;
+ y := FTy^ - y0;
+ rad := Hypot(x, y);
+
+ if (rad > radius) then
+ begin
+ if (zero = 1) then
+ begin
+ FTx^ := 0;
+ FTy^ := 0;
+ end else
+ begin
+ ang := arctan2(y, x);
+ SinCos(ang, sn, cn);
+ rdc := radius + (random * 0.5 * ca);
+
+ FTx^ := vvar * rdc * cn + x0;
+ FTy^ := vvar * rdc * sn + y0;
+ end;
+ end else
+ begin
+ FTx^ := vvar * x + x0;
+ FTy^ := vvar * y + y0;
+ end;
+end;
+
+constructor TVariationPreCircleCrop.Create;
+begin
+ x0 := 0;
+ y0 := 0;
+ radius := 1;
+ scatter_area := 0;
+ zero := 0;
+end;
+
+class function TVariationPreCircleCrop.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPreCircleCrop.Create;
+end;
+
+class function TVariationPreCircleCrop.GetName: string;
+begin
+ Result := 'pre_circlecrop';
+end;
+
+function TVariationPreCircleCrop.GetNrVariables: integer;
+begin
+ Result := 5;
+end;
+
+function TVariationPreCircleCrop.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = sx then begin
+ Value := x0;
+ Result := True;
+ end
+ else if Name = sy then begin
+ Value := y0;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ Value := radius;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ Value := scatter_area;
+ Result := True;
+ end
+ else if Name = szero then begin
+ Value := zero;
+ Result := True;
+ end;
+end;
+
+function TVariationPreCircleCrop.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := sradius;
+ 1: Result := sx;
+ 2: Result := sy;
+ 3: Result := sarea;
+ 4: Result := szero;
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationPreCircleCrop.ResetVariable(const Name: string): boolean;
+begin
+Result := False;
+ if Name = sx then begin
+ x0 := 0;
+ Result := True;
+ end
+ else if Name = sy then begin
+ y0 := 0;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ radius := 1;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ scatter_area := 0;
+ Result := True;
+ end
+ else if Name = szero then begin
+ zero := 0;
+ Result := True;
+ end;
+end;
+
+function TVariationPreCircleCrop.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+Result := False;
+ if Name = sx then begin
+ x0 := Value;
+ Result := True;
+ end
+ else if Name = sy then begin
+ y0 := Value;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ radius := Value;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ scatter_area := Value;
+ Result := True;
+ end
+ else if Name = szero then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ zero := Round(Value);
+ Result := True;
+ end;
+end;
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPreCircleCrop), false, false);
+
+end.
diff --git a/Variations/varPreCrop.pas b/Variations/varPreCrop.pas
new file mode 100644
index 0000000..1ce74fc
--- /dev/null
+++ b/Variations/varPreCrop.pas
@@ -0,0 +1,311 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPreCrop;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPreCrop = class(TBaseVariation)
+ const
+ n_x0 : string = 'pre_crop_left';
+ n_y0 : string = 'pre_crop_top';
+ n_x1 : string = 'pre_crop_right';
+ n_y1 : string = 'pre_crop_bottom';
+ n_s : string = 'pre_crop_scatter_area';
+ n_z : string = 'pre_crop_zero';
+ n : string = 'pre_crop';
+ n_z1 : string = 'pre_crop_high'; // AV
+ n_z0 : string = 'pre_crop_low'; //AV
+ n_3D : string = 'pre_crop_use3D'; // AV
+ private
+ x0, y0, x1, y1, z0, z1, s, w, h, l: double;
+ _x0, _y0, _x1, _y1, _z0, _z1: double;
+ z, c3D: byte;
+
+ procedure Calc2D;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPreCrop.Prepare;
+begin
+ if (x0 < x1) then begin
+ _x0 := x0;
+ _x1 := x1;
+ end else begin
+ _x0 := x1;
+ _x1 := x0;
+ end;
+
+ if (y0 < y1) then begin
+ _y0 := y0;
+ _y1 := y1;
+ end else begin
+ _y0 := y1;
+ _y1 := y0;
+ end;
+
+ if (z0 < z1) then begin
+ _z0 := z0;
+ _z1 := z1;
+ end else begin
+ _z0 := z1;
+ _z1 := z0;
+ end;
+
+ w := (_x1 - _x0) * 0.5 * s;
+ h := (_y1 - _y0) * 0.5 * s;
+ l := (_z1 - _z0) * 0.5 * s;
+end;
+
+/////////////////////////////////////////////////
+procedure TVariationPreCrop.GetCalcFunction(var f: TCalcFunction);
+begin
+ if (c3D = 0) then f := Calc2D
+ else f := CalcFunction;
+end;
+
+////////////////////////////////////////////////////////
+
+procedure TVariationPreCrop.CalcFunction;
+var x, y, tz: double;
+begin
+ x := FTx^;
+ y := FTy^;
+ tz := FTz^;
+
+ if ((x < _x0) or (x > _x1) or (y < _y0) or (y > _y1) or (tz < _z0) or (tz > _z1))
+ and (z <> 0) then begin
+ x := 0; y := 0; tz := 0;
+ end else begin
+ if x < _x0 then x := _x0 + random * w
+ else if x > _x1 then x := _x1 - random * w;
+ if y < _y0 then y := _y0 + random * h
+ else if y > _y1 then y := _y1 - random * h;
+ if tz < _z0 then tz := _z0 + random * l
+ else if tz > _z1 then tz := _z1 - random * l;
+ end;
+
+ FTx^ := VVAR * x;
+ FTy^ := VVAR * y;
+ FTz^ := VVAR * tz;
+end;
+
+procedure TVariationPreCrop.Calc2D;
+var x, y: double;
+begin
+ x := FTx^;
+ y := FTy^;
+
+ if ((x < _x0) or (x > _x1) or (y < _y0) or (y > _y1)) and (z <> 0) then begin
+ x := 0; y := 0;
+ end else begin
+ if x < _x0 then x := _x0 + random * w
+ else if x > _x1 then x := _x1 - random * w;
+ if y < _y0 then y := _y0 + random * h
+ else if y > _y1 then y := _y1 - random * h;
+ end;
+
+ FTx^ := VVAR * x;
+ FTy^ := VVAR * y;
+end;
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPreCrop.Create;
+begin
+ x0 := -1; x1 := 1;
+ y0 := -1; y1 := 1;
+ z0 := -1; z1 := 1;
+ c3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreCrop.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPreCrop.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreCrop.GetName: string;
+begin
+ Result := n;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreCrop.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := n_x0;
+ 1: Result := n_y0;
+ 2: Result := n_x1;
+ 3: Result := n_y1;
+ 4: Result := n_z0;
+ 5: Result := n_z1;
+ 6: Result := n_s;
+ 7: Result := n_z;
+ 8: Result := n_3D;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreCrop.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ x0 := Value;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := Value;
+ Result := True;
+ end else if Name = n_x1 then begin
+ x1 := Value;
+ Result := True;
+ end else if Name = n_y1 then begin
+ y1 := Value;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := Value;
+ Result := True;
+ end else if Name = n_z1 then begin
+ z1 := Value;
+ Result := True;
+ end else if Name = n_s then begin
+ if (Value < -1) then Value := -1;
+ if (Value > 1) then Value := 1;
+ s := Value;
+ Result := True;
+ end else if Name = n_z then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ z := Round(Value);
+ Result := True;
+ end else if Name = n_3D then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ c3D := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationPreCrop.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ x0 := -1;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := -1;
+ Result := True;
+ end else if Name = n_x1 then begin
+ x1 := 1;
+ Result := True;
+ end else if Name = n_y1 then begin
+ y1 := 1;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := -1;
+ Result := True;
+ end else if Name = n_z1 then begin
+ z1 := 1;
+ Result := True;
+ end else if Name = n_s then begin
+ s := 0;
+ Result := True;
+ end else if Name = n_z then begin
+ z := 0;
+ Result := True;
+ end else if Name = n_3D then begin
+ c3D := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreCrop.GetNrVariables: integer;
+begin
+ Result := 9
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreCrop.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_x0 then begin
+ Value := x0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ Value := y0;
+ Result := True;
+ end else if Name = n_x1 then begin
+ Value := x1;
+ Result := True;
+ end else if Name = n_y1 then begin
+ Value := y1;
+ Result := True;
+ end else if Name = n_z0 then begin
+ Value := z0;
+ Result := True;
+ end else if Name = n_z1 then begin
+ Value := z1;
+ Result := True;
+ end else if Name = n_s then begin
+ Value := s;
+ Result := True;
+ end else if Name = n_z then begin
+ Value := z;
+ Result := True;
+ end else if Name = n_3D then begin
+ Value := c3D;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPreCrop), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varPreDisc.pas b/Variations/varPreDisc.pas
new file mode 100644
index 0000000..c5faa3d
--- /dev/null
+++ b/Variations/varPreDisc.pas
@@ -0,0 +1,120 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPreDisc;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPreDisc = class(TBaseVariation)
+ private
+ vvar_by_pi: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPreDisc }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPreDisc.Prepare;
+begin
+ vvar_by_pi := vvar / PI;
+end;
+
+procedure TVariationPreDisc.CalcFunction;
+var
+ r, sinr, cosr: double;
+begin
+ SinCos(PI * sqrt(sqr(FTx^) + sqr(FTy^)), sinr, cosr);
+ r := vvar_by_pi * arctan2(FTx^, FTy^);
+ FTx^ := sinr * r;
+ FTy^ := cosr * r;
+ // FTz^ := VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPreDisc.Create;
+begin
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreDisc.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPreDisc.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreDisc.GetName: string;
+begin
+ Result := 'pre_disc';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreDisc.GetVariableNameAt(const Index: integer): string;
+begin
+ Result := '';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreDisc.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreDisc.GetNrVariables: integer;
+begin
+ Result := 0
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreDisc.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPreDisc), false, false);
+end.
diff --git a/Variations/varPreFalloff2.pas b/Variations/varPreFalloff2.pas
new file mode 100644
index 0000000..95247c3
--- /dev/null
+++ b/Variations/varPreFalloff2.pas
@@ -0,0 +1,348 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPreFalloff2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPreFalloff2 = class(TBaseVariation)
+ const
+ n_scatter : string = 'pre_falloff2_scatter';
+ n_mindist : string = 'pre_falloff2_mindist';
+ n_mul_x : string = 'pre_falloff2_mul_x';
+ n_mul_y : string = 'pre_falloff2_mul_y';
+ n_mul_z : string = 'pre_falloff2_mul_z';
+ n_mul_c : string = 'pre_falloff2_mul_c';
+ n_x0 : string = 'pre_falloff2_x0';
+ n_y0 : string = 'pre_falloff2_y0';
+ n_z0 : string = 'pre_falloff2_z0';
+ n_invert : string = 'pre_falloff2_invert';
+ n_blurtype : string = 'pre_falloff2_type';
+
+ private
+ rmax: double;
+ x0, y0, z0: double;
+ scatter, mindist: double;
+ invert, blurtype: integer;
+ mul_x, mul_y, mul_z, mul_c: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure CalcFunctionRadial;
+ procedure CalcFunctionGaussian;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPreFalloff2.Prepare;
+begin
+ rmax := 0.04 * scatter;
+end;
+
+procedure TVariationPreFalloff2.GetCalcFunction(var f: TCalcFunction);
+begin
+ if blurtype = 1 then f := CalcFunctionRadial
+ else if blurtype = 2 then f := CalcFunctionGaussian
+ else f := CalcFunction;
+end;
+procedure TVariationPreFalloff2.CalcFunction;
+var
+ in_x, in_y, in_z, d: double;
+begin
+ in_x := FTx^;
+ in_y := FTy^;
+ in_z := FTz^;
+
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ FTx^ := VVAR * (in_x + mul_x * random * d);
+ FTy^ := VVAR * (in_y + mul_y * random * d);
+ FTz^ := VVAR * (in_z + mul_z * random * d);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+procedure TVariationPreFalloff2.CalcFunctionRadial;
+var
+ in_x, in_y, in_z, d, r_in: double;
+ sigma, phi, r, sins, coss, sinp, cosp: double;
+begin
+ in_x := FTx^;
+ in_y := FTy^;
+ in_z := FTz^;
+
+ r_in := sqrt(sqr(in_x) + sqr(in_y) + sqr(in_z)) + 1e-6;
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ sigma := ArcSin(in_z / r_in) + mul_z * random * d;
+ phi := ArcTan2(in_y, in_x) + mul_y * random * d;
+ r := r_in + mul_x * random * d;
+
+ SinCos(sigma, sins, coss);
+ SinCos(phi, sinp, cosp);
+
+ FTx^ := VVAR * (r * coss * cosp);
+ FTy^ := VVAR * (r * coss * sinp);
+ FTz^ := VVAR * (sins);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+procedure TVariationPreFalloff2.CalcFunctionGaussian;
+var
+ in_x, in_y, in_z, d: double;
+ sigma, phi, r, sins, coss, sinp, cosp: double;
+begin
+ in_x := FTx^;
+ in_y := FTy^;
+ in_z := FTz^;
+
+ d := sqrt(sqr(in_x - x0) + sqr(in_y - y0) + sqr(in_z - z0));
+ if (invert <> 0) then d := 1 - d; if (d < 0) then d := 0;
+ d := (d - mindist) * rmax; if (d < 0) then d := 0;
+
+ sigma := d * random * 2 * PI;
+ phi := d * random * PI;
+ r := d * random;
+
+ SinCos(sigma, sins, coss);
+ SinCos(phi, sinp, cosp);
+
+ FTx^ := VVAR * (in_x + mul_x * r * coss * cosp);
+ FTy^ := VVAR * (in_y + mul_y * r * coss * sinp);
+ FTz^ := VVAR * (in_z + mul_z * r * sins);
+ color^ := Abs(Frac(color^ + mul_c * random * d));
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPreFalloff2.Create;
+begin
+ scatter := 1;
+ mindist := 0.5;
+ mul_x := 1;
+ mul_y := 1;
+ mul_z := 0;
+ mul_c := 0;
+ x0 := 0;
+ y0 := 0;
+ z0 := 0;
+ invert := 0;
+ blurtype := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreFalloff2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPreFalloff2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreFalloff2.GetName: string;
+begin
+ Result := 'pre_falloff2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreFalloff2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := n_scatter;
+ 1: Result := n_mindist;
+ 2: Result := n_mul_x;
+ 3: Result := n_mul_y;
+ 4: Result := n_mul_z;
+ 5: Result := n_mul_c;
+ 6: Result := n_x0;
+ 7: Result := n_y0;
+ 8: Result := n_z0;
+ 9: Result := n_invert;
+ 10: Result := n_blurtype;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreFalloff2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ if Value < 1e-6 then Value := 1e-6;
+ scatter := Value;
+ Result := True;
+ end else if Name = n_mindist then begin
+ if Value < 0 then Value := 0;
+ mindist := Value;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_x := Value;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_y := Value;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_z := Value;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ if Value < 0 then Value := 0
+ else if Value > 1 then Value := 1;
+ mul_c := Value;
+ Result := True;
+ end else if Name = n_x0 then begin
+ x0 := Value;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := Value;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := Value;
+ Result := True;
+ end else if Name = n_invert then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ invert := Round(Value);
+ Result := True;
+ end else if Name = n_blurtype then begin
+ if (Value > 2) then Value := 2;
+ if (Value < 0) then Value := 0;
+ blurtype := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationPreFalloff2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ scatter := 1;
+ Result := True;
+ end else if Name = n_mindist then begin
+ mindist := 0.5;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ mul_x := 1;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ mul_y := 1;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ mul_z := 0;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ mul_c := 0;
+ Result := True;
+ end else if Name = n_x0 then begin
+ x0 := 0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ y0 := 0;
+ Result := True;
+ end else if Name = n_z0 then begin
+ z0 := 0;
+ Result := True;
+ end else if Name = n_invert then begin
+ invert := 0;
+ Result := True;
+ end else if Name = n_blurtype then begin
+ blurtype := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreFalloff2.GetNrVariables: integer;
+begin
+ Result := 11
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreFalloff2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = n_scatter then begin
+ Value := scatter;
+ Result := True;
+ end else if Name = n_mindist then begin
+ Value := mindist;
+ Result := True;
+ end else if Name = n_mul_x then begin
+ Value := mul_x;
+ Result := True;
+ end else if Name = n_mul_y then begin
+ Value := mul_y;
+ Result := True;
+ end else if Name = n_mul_z then begin
+ Value := mul_z;
+ Result := True;
+ end else if Name = n_mul_c then begin
+ Value := mul_c;
+ Result := True;
+ end else if Name = n_x0 then begin
+ Value := x0;
+ Result := True;
+ end else if Name = n_y0 then begin
+ Value := y0;
+ Result := True;
+ end else if Name = n_z0 then begin
+ Value := z0;
+ Result := True;
+ end else if Name = n_invert then begin
+ Value := invert;
+ Result := True;
+ end else if Name = n_blurtype then begin
+ Value := blurtype;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPreFalloff2), true, true);
+end.
\ No newline at end of file
diff --git a/Variations/varPreSinusoidal.pas b/Variations/varPreSinusoidal.pas
new file mode 100644
index 0000000..03d7bc6
--- /dev/null
+++ b/Variations/varPreSinusoidal.pas
@@ -0,0 +1,184 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPreSinusoidal;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+ {$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationPreSinusoidal = class(TBaseVariation)
+ private
+ use3D: byte;
+ procedure CalcFlat;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPreSinusoidal }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPreSinusoidal.GetCalcFunction(var f: TCalcFunction);
+begin
+ if use3D = 0 then
+ f := CalcFlat
+ else f := CalcFunction;
+end;
+
+procedure TVariationPreSinusoidal.CalcFlat;
+{$ifndef _ASM_}
+begin
+ FTx^ := vvar * sin(FTx^);
+ FTy^ := vvar * sin(FTy^);
+{$else}
+asm // AV: added inline asm code
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fsin
+ fmul st, st(1)
+ fstp qword ptr [edx]
+
+ fld qword ptr [edx + 8] // FTy
+ fsin
+ fmulp
+ fstp qword ptr [edx + 8]
+
+ fwait
+{$endif}
+end;
+
+procedure TVariationPreSinusoidal.CalcFunction;
+{$ifndef _ASM_}
+begin
+ FTx^ := vvar * sin(FTx^);
+ FTy^ := vvar * sin(FTy^);
+ FTz^ := vvar * sin(FTz^); // AV: changed from linear scale
+{$else}
+asm // AV: added inline asm code
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fsin
+ fmul st, st(1)
+ fstp qword ptr [edx]
+
+ fld qword ptr [edx + 8] // FTy
+ fsin
+ fmul st, st(1)
+ fstp qword ptr [edx + 8]
+
+ fld qword ptr [edx + 32] // FTz
+ fsin
+ fmulp
+ fstp qword ptr [edx + 32]
+
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPreSinusoidal.Create;
+begin
+ use3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreSinusoidal.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPreSinusoidal.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreSinusoidal.GetName: string;
+begin
+ Result := 'pre_sinusoidal';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreSinusoidal.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := 'pre_sinusoidal_use3D';
+ else
+ Result := '';
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreSinusoidal.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'pre_sinusoidal_use3D' then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ use3D := Round(Value);
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreSinusoidal.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationPreSinusoidal.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'pre_sinusoidal_use3D' then begin
+ Value := use3D;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPreSinusoidal), true, false);
+end.
diff --git a/Variations/varPreSpherical.pas b/Variations/varPreSpherical.pas
new file mode 100644
index 0000000..5e5461b
--- /dev/null
+++ b/Variations/varPreSpherical.pas
@@ -0,0 +1,80 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varPreSpherical;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationPreSpherical = class(TBaseVariation)
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationPreSpherical }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationPreSpherical.CalcFunction;
+var r: double;
+begin
+ r := vvar / (sqr(FTx^) + sqr(FTy^) + 10e-300);
+ FTx^ := FTx^ * r;
+ FTy^ := FTy^ * r;
+ // FTz^ := VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationPreSpherical.Create;
+begin
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreSpherical.GetInstance: TBaseVariation;
+begin
+ Result := TVariationPreSpherical.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationPreSpherical.GetName: string;
+begin
+ Result := 'pre_spherical';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationPreSpherical), false, false);
+end.
diff --git a/Variations/varProjective.pas b/Variations/varProjective.pas
new file mode 100644
index 0000000..30cfef6
--- /dev/null
+++ b/Variations/varProjective.pas
@@ -0,0 +1,274 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varProjective;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationProjective = class(TBaseVariation)
+ private
+ pr_A, pr_B, pr_C, pr_A1, pr_B1, pr_C1, pr_A2, pr_B2, pr_C2: double;
+ pr_mode: byte;
+ procedure CalcPre;
+ procedure CalcPost;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationProjective.GetCalcFunction(var f: TCalcFunction);
+begin
+ case pr_mode of
+ 0: f := CalcPre;
+ 1: f := CalcFunction;
+ else f := CalcPost;
+ end;
+end;
+
+procedure TVariationProjective.CalcPost;
+var x, y, denom: double;
+begin
+ x := FPx^;
+ y := FPy^;
+
+ denom := pr_A * x + pr_B * y + pr_C;
+ if (abs(denom) < 1E-20) then denom := 1E-20;
+
+ FPx^ := VVAR * (pr_A1 * x + pr_B1 * y + pr_C1) / denom;
+ FPy^ := VVAR * (pr_A2 * x + pr_B2 * y + pr_C2) / denom;
+ //FPz^ := VVAR * FPz^;
+end;
+
+procedure TVariationProjective.CalcFunction;
+var x, y, denom: double;
+begin
+ x := FTx^;
+ y := FTy^;
+
+ denom := pr_A * x + pr_B * y + pr_C;
+ if (abs(denom) < 1E-20) then denom := 1E-20;
+
+ FPx^ := FPx^ + VVAR * (pr_A1 * x + pr_B1 * y + pr_C1) / denom;
+ FPy^ := FPy^ + VVAR * (pr_A2 * x + pr_B2 * y + pr_C2) / denom;
+ //FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+procedure TVariationProjective.CalcPre;
+var x, y, denom: double;
+begin
+ x := FTx^;
+ y := FTy^;
+
+ denom := pr_A * x + pr_B * y + pr_C;
+ if (abs(denom) < 1E-20) then denom := 1E-20;
+
+ FTx^ := VVAR * (pr_A1 * x + pr_B1 * y + pr_C1) / denom;
+ FTy^ := VVAR * (pr_A2 * x + pr_B2 * y + pr_C2) / denom;
+ //FTz^ := VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationProjective.Create;
+begin
+ pr_A := 0; pr_B := 0; pr_C := 1; // denominator coefs
+ pr_A1 := 1; pr_B1 := 0; pr_C1 := 0; // x-enumerator coefs
+ pr_A2 := 0; pr_B2 := 1; pr_C2 := 0; // y-enumerator coefs
+ pr_mode := 1; // order of applying
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationProjective.GetInstance: TBaseVariation;
+begin
+ Result := TVariationProjective.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationProjective.GetName: string;
+begin
+ Result := 'projective';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationProjective.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'pr_A';
+ 1: Result := 'pr_B';
+ 2: Result := 'pr_C';
+ 3: Result := 'pr_A1';
+ 4: Result := 'pr_B1';
+ 5: Result := 'pr_C1';
+ 6: Result := 'pr_A2';
+ 7: Result := 'pr_B2';
+ 8: Result := 'pr_C2';
+ 9: Result := 'projective_mode';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationProjective.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'pr_A' then begin
+ pr_A := Value;
+ Result := True;
+ end else if Name = 'pr_B' then begin
+ pr_B := Value;
+ Result := True;
+ end else if Name = 'pr_C' then begin
+ pr_C := Value;
+ Result := True;
+ end else if Name = 'pr_A1' then begin
+ pr_A1 := Value;
+ Result := True;
+ end else if Name = 'pr_B1' then begin
+ pr_B1 := Value;
+ Result := True;
+ end else if Name = 'pr_C1' then begin
+ pr_C1 := Value;
+ Result := True;
+ end else if Name = 'pr_A2' then begin
+ pr_A2 := Value;
+ Result := True;
+ end else if Name = 'pr_B2' then begin
+ pr_B2 := Value;
+ Result := True;
+ end else if Name = 'pr_C2' then begin
+ pr_C2 := Value;
+ Result := True;
+ end else if Name = 'projective_mode' then begin
+ if (Value < 0) then Value := 0;
+ if (Value > 2) then Value := 2;
+ pr_mode := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationProjective.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'pr_A' then begin
+ pr_A := 0;
+ Result := True;
+ end else if Name = 'pr_B' then begin
+ pr_B := 0;
+ Result := True;
+ end else if Name = 'pr_C' then begin
+ pr_C := 1;
+ Result := True;
+ end else if Name = 'pr_A1' then begin
+ pr_A1 := 1;
+ Result := True;
+ end else if Name = 'pr_B1' then begin
+ pr_B1 := 0;
+ Result := True;
+ end else if Name = 'pr_C1' then begin
+ pr_C1 := 0;
+ Result := True;
+ end else if Name = 'pr_A2' then begin
+ pr_A2 := 0;
+ Result := True;
+ end else if Name = 'pr_B2' then begin
+ pr_B2:= 1;
+ Result := True;
+ end else if Name = 'pr_C2' then begin
+ pr_C2 := 0;
+ Result := True;
+ end else if Name = 'projective_mode' then begin
+ pr_mode := 1;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationProjective.GetNrVariables: integer;
+begin
+ Result := 10
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationProjective.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'pr_A' then begin
+ Value := pr_A;
+ Result := True;
+ end else if Name = 'pr_B' then begin
+ Value := pr_B;
+ Result := True;
+ end else if Name = 'pr_C' then begin
+ Value := pr_C;
+ Result := True;
+ end else if Name = 'pr_A1' then begin
+ Value := pr_A1;
+ Result := True;
+ end else if Name = 'pr_B1' then begin
+ Value := pr_B1;
+ Result := True;
+ end else if Name = 'pr_C1' then begin
+ Value := pr_C1;
+ Result := True;
+ end else if Name = 'pr_A2' then begin
+ Value := pr_A2;
+ Result := True;
+ end else if Name = 'pr_B2' then begin
+ Value := pr_B2;
+ Result := True;
+ end else if Name = 'pr_C2' then begin
+ Value := pr_C2;
+ Result := True;
+ end else if Name = 'projective_mode' then begin
+ Value := pr_mode;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationProjective), false, false);
+end.
\ No newline at end of file
diff --git a/Variations/varRadialBlur.pas b/Variations/varRadialBlur.pas
new file mode 100644
index 0000000..c59f960
--- /dev/null
+++ b/Variations/varRadialBlur.pas
@@ -0,0 +1,372 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varRadialBlur;
+
+interface
+
+uses
+ {$ifdef Apo7X64}
+{$else}
+AsmRandom,
+{$endif}
+ BaseVariation, XFormMan;
+
+const
+ var_name = 'radial_blur';
+ var_a_name = 'radial_blur_angle';
+
+{$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationRadialBlur = class(TBaseVariation)
+ private
+ angle,
+ spin_var, zoom_var: double;
+
+ rnd: array[0..3] of double;
+ N: integer;
+
+ procedure CalcZoom;
+ procedure CalcSpin;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ math;
+
+// TVariationRadialBlur
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationRadialBlur.Create;
+begin
+ angle := random * 2 - 1;
+end;
+
+procedure TVariationRadialBlur.Prepare;
+begin
+ spin_var := vvar * sin(angle * pi/2);
+ zoom_var := vvar * cos(angle * pi/2);
+
+ N := 0;
+ rnd[0] := random;
+ rnd[1] := random;
+ rnd[2] := random;
+ rnd[3] := random;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationRadialBlur.GetCalcFunction(var f: TCalcFunction);
+begin
+ if IsZero(spin_var) then f := CalcZoom
+ else if IsZero(zoom_var) then f := CalcSpin
+ else f := CalcFunction;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationRadialBlur.CalcFunction;
+{$ifndef _ASM_}
+var
+ rndG, rz, ra: double;
+ sina, cosa: extended;
+begin
+ rndG := (rnd[0] + rnd[1] + rnd[2] + rnd[3] - 2);
+ rnd[N] := random;
+ N := (N+1) and $3;
+
+ ra := sqrt(sqr(FTx^) + sqr(FTy^));
+ SinCos(arctan2(FTy^, FTx^) + spin_var * rndG, sina, cosa);
+ rz := zoom_var * rndG - 1;
+
+ FPx^ := FPx^ + ra * cosa + rz * FTx^;
+ FPy^ := FPy^ + ra * sina + rz * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx] // FTx
+
+ fld st(1)
+ fmul st, st
+ fld st(1)
+ fmul st, st
+ faddp
+ fsqrt
+
+ fld st(2)
+ fld st(2)
+ fpatan
+
+ fld qword ptr [eax + rnd]
+ fadd qword ptr [eax + rnd+8]
+ fadd qword ptr [eax + rnd+16]
+ fadd qword ptr [eax + rnd+24]
+ fld1
+ fsub st(1), st
+ fsub st(1), st
+
+ fld st(1)
+ fmul qword ptr [eax + zoom_var]
+ fsubrp
+
+ fmul st(4), st
+ fmulp st(5), st
+
+ fmul qword ptr [eax + spin_var]
+ faddp
+
+ call AsmRandExt
+ mov edx, [eax + N]
+ fstp qword ptr [eax + rnd + edx*8]
+ inc edx
+ and edx,$03
+ mov [eax + N], edx
+
+ fsincos
+
+ fmul st, st(2)
+ faddp st(3), st
+ fmulp
+ faddp st(2), st
+ mov edx, [eax + FPx]
+ fadd qword ptr [edx]
+ fstp qword ptr [edx]
+ fadd qword ptr [edx + 8]
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationRadialBlur.CalcZoom;
+{$ifndef _ASM_}
+var
+ r: double;
+begin
+ r := zoom_var * (rnd[0] + rnd[1] + rnd[2] + rnd[3] - 2);
+
+ rnd[N] := random;
+ N := (N+1) and $3;
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ + r * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+{$else}
+asm
+ fld qword ptr [eax + rnd]
+ fadd qword ptr [eax + rnd+8]
+ fadd qword ptr [eax + rnd+16]
+ fadd qword ptr [eax + rnd+24]
+ fld1
+ fadd st, st
+ fsubp st(1), st
+ fmul qword ptr [eax + zoom_var]
+
+ call AsmRandExt
+ mov edx, [eax + N]
+ fstp qword ptr [eax + rnd + edx*8]
+ inc edx
+ and edx,$03
+ mov [eax + N], edx
+
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+ // main code
+ fld qword ptr [edx + 8] // FTy
+ fld qword ptr [edx]
+
+ fmul st, st(2)
+ fadd qword ptr [edx + 16]
+ fstp qword ptr [edx + 16]
+ fmulp
+ fadd qword ptr [edx + 24]
+ fstp qword ptr [edx + 24]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationRadialBlur.CalcSpin;
+{$ifndef _ASM_}
+var
+ r: double;
+ sina, cosa: extended;
+begin
+ SinCos(arctan2(FTy^, FTx^) + spin_var * (rnd[0] + rnd[1] + rnd[2] + rnd[3] - 2),
+ sina, cosa);
+ r := sqrt(sqr(FTx^) + sqr(FTy^));
+
+ rnd[N] := random;
+ N := (N+1) and $3;
+
+ FPx^ := FPx^ + r * cosa - FTx^;
+ FPy^ := FPy^ + r * sina - FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+ {$else}
+asm
+ mov edx, [eax + FTx]
+ // AV: for Apo7X.15C compatibility
+ fld qword ptr [eax + vvar]
+ fmul qword ptr [edx + 32] // FTz
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ // main code
+ fld qword ptr [edx + 8]
+ fld qword ptr [edx]
+ fld st(1)
+ fld st(1)
+ fpatan
+
+ fld qword ptr [eax + rnd]
+ fadd qword ptr [eax + rnd+8]
+ fadd qword ptr [eax + rnd+16]
+ fadd qword ptr [eax + rnd+24]
+ fld1
+ fadd st, st
+ fsubp st(1), st
+ fmul qword ptr [eax + spin_var]
+
+ call AsmRandExt
+ mov edx, [eax + N]
+ fstp qword ptr [eax + rnd + edx*8]
+ inc edx
+ and edx,$03
+ mov [eax + N], edx
+
+ faddp
+ fsincos
+
+ fld st(3)
+ fmul st,st
+ fld st(3)
+ fmul st,st
+ faddp
+ fsqrt
+ fmul st(2), st
+ fmulp st(1), st
+ mov edx, [eax + FPx]
+ fadd qword ptr [edx]
+ fsubrp st(2),st
+
+ fadd qword ptr [edx + 8]
+ fsubrp st(2), st
+ fstp qword ptr [edx]
+ fstp qword ptr [edx + 8]
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationRadialBlur.GetInstance: TBaseVariation;
+begin
+ Result := TVariationRadialBlur.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationRadialBlur.GetName: string;
+begin
+ Result := var_name;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRadialBlur.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := var_a_name;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRadialBlur.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_a_name then begin
+ Value := angle;
+ Result := true;
+ end;
+end;
+
+function TVariationRadialBlur.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = var_a_name then begin
+ angle := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationRadialBlur.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = var_a_name then begin
+ if angle <> 0 then angle := 0
+ else if angle = 0 then angle := 1;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRadialBlur.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationRadialBlur), true, false);
+end.
diff --git a/Variations/varRectangles.pas b/Variations/varRectangles.pas
new file mode 100644
index 0000000..e7678ad
--- /dev/null
+++ b/Variations/varRectangles.pas
@@ -0,0 +1,220 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+{
+ This variation was started by Michael Faber
+}
+
+unit varRectangles;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationRectangles = class(TBaseVariation)
+ private
+ FRectanglesX, FRectanglesY, FRectanglesZ: double;
+ r3D: byte;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ procedure CalcFunction; override;
+ procedure CalcZeroX;
+ procedure CalcZeroY;
+ procedure CalcZeroXY;
+
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationRectangles }
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationRectangles.GetCalcFunction(var f: TCalcFunction);
+begin
+ if IsZero(FRectanglesX) then begin
+ if IsZero(FRectanglesY) then
+ f := CalcZeroXY
+ else
+ f := CalcZeroX;
+ end
+ else if IsZero(FRectanglesY) then
+ f := CalcZeroY
+ else f := CalcFunction;
+end;
+
+procedure TVariationRectangles.CalcFunction;
+begin
+ FPx^ := FPx^ + vvar * ((2*floor(FTx^/FRectanglesX) + 1)*FRectanglesX - FTx^);
+ FPy^ := FPy^ + vvar * ((2*floor(FTy^/FRectanglesY) + 1)*FRectanglesY - FTy^);
+ if (r3D <> 0) then
+ begin
+ if IsZero(FRectanglesZ) then
+ FPz^ := FPz^ + vvar * FTz^
+ else
+ FPz^ := FPz^ + vvar * ((2*floor(FTz^/FRectanglesZ) + 1) * FRectanglesZ - FTz^);;
+ end;
+end;
+
+procedure TVariationRectangles.CalcZeroX;
+begin
+ FPx^ := FPx^ + vvar * FTx^;
+ FPy^ := FPy^ + vvar * ((2*floor(FTy^/FRectanglesY) + 1)*FRectanglesY - FTy^);
+ if (r3D <> 0) then
+ begin
+ if IsZero(FRectanglesZ) then
+ FPz^ := FPz^ + vvar * FTz^
+ else
+ FPz^ := FPz^ + vvar * ((2*floor(FTz^/FRectanglesZ) + 1) * FRectanglesZ - FTz^);;
+ end;
+end;
+
+procedure TVariationRectangles.CalcZeroY;
+begin
+ FPx^ := FPx^ + vvar * ((2*floor(FTx^/FRectanglesX) + 1)*FRectanglesX - FTx^);
+ FPy^ := FPy^ + vvar * FTy^;
+ if (r3D <> 0) then
+ begin
+ if IsZero(FRectanglesZ) then
+ FPz^ := FPz^ + vvar * FTz^
+ else
+ FPz^ := FPz^ + vvar * ((2*floor(FTz^/FRectanglesZ) + 1) * FRectanglesZ - FTz^);;
+ end;
+end;
+
+procedure TVariationRectangles.CalcZeroXY;
+begin
+ FPx^ := FPx^ + vvar * FTx^;
+ FPy^ := FPy^ + vvar * FTy^;
+ if (r3D <> 0) then
+ begin
+ if IsZero(FRectanglesZ) then
+ FPz^ := FPz^ + vvar * FTz^
+ else
+ FPz^ := FPz^ + vvar * ((2*floor(FTz^/FRectanglesZ) + 1) * FRectanglesZ - FTz^);;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationRectangles.GetName: string;
+begin
+ Result := 'rectangles';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRectangles.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'rectangles_x';
+ 1: Result := 'rectangles_y';
+ 2: Result := 'rectangles_z';
+ 3: Result := 'rectangles_use3D';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRectangles.GetNrVariables: integer;
+begin
+ Result := 4;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRectangles.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'rectangles_x' then begin
+ FRectanglesX := Value;
+ Result := True;
+ end else if Name = 'rectangles_y' then begin
+ FRectanglesY := Value;
+ Result := True;
+ end else if Name = 'rectangles_z' then begin
+ FRectanglesZ := Value;
+ Result := True;
+ end else if Name = 'rectangles_use3D' then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ r3D := Round(Value);
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRectangles.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'rectangles_x' then begin
+ Value := FRectanglesX;
+ Result := True;
+ end else if Name = 'rectangles_y' then begin
+ Value := FRectanglesY;
+ Result := True;
+ end else if Name = 'rectangles_z' then begin
+ Value := FRectanglesZ;
+ Result := True;
+ end else if Name = 'rectangles_use3D' then begin
+ Value := r3D;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationRectangles.Create;
+begin
+ inherited Create;
+
+ FRectanglesX := 1.0;
+ FRectanglesY := 1.0;
+ FRectanglesZ := 0.0;
+ r3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationRectangles.GetInstance: TBaseVariation;
+begin
+ Result := TVariationRectangles.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationRectangles), true, false);
+end.
+
diff --git a/Variations/varRings2.pas b/Variations/varRings2.pas
new file mode 100644
index 0000000..5e47bc0
--- /dev/null
+++ b/Variations/varRings2.pas
@@ -0,0 +1,180 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varRings2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationRings2 = class(TBaseVariation)
+ private
+ FVal, dx: double;
+ old: byte;
+ procedure CalcRings;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationRings2 }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationRings2.Prepare;
+begin
+ dx := sqr(FVal) + 1E-10;
+end;
+
+procedure TVariationRings2.GetCalcFunction(var f: TCalcFunction);
+begin
+ if old = 1 then
+ f := CalcRings
+ else f := CalcFunction;
+end;
+
+procedure TVariationRings2.CalcRings;
+var
+ r: double;
+ Length: double;
+begin
+ Length := sqrt(sqr(FTx^) + sqr(FTy^)) + 1E-300; // AV: avoid division by zero
+
+ r := vvar * (2 - dx * (System.Int((Length/dx + 1)/2) * 2 / Length + 1));
+
+ // AV: conversion into 'rings', which swaps X and Y
+ FPx^ := FPx^ + r * FTy^;
+ FPy^ := FPy^ + r * FTx^;
+end;
+
+procedure TVariationRings2.CalcFunction;
+var
+ r: double;
+ Length: double;
+begin
+ Length := sqrt(sqr(FTx^) + sqr(FTy^)) + 1E-300; // AV: avoid division by zero
+{ // all this range-checking crap only slows us down...
+ if (FTx^ < -EPS) or (FTx^ > EPS) or (FTy^ < -EPS) or (FTy^ > EPS) then
+ Angle := arctan2(FTx^, FTy^)
+ else
+ Angle := 0.0;
+} // ...and besides, we don't need arctan() if we have Length!
+
+// dx := sqr(FVal) + EPS; - we can precalc it!!!
+// r := Length + dx - System.Int((Length + dx)/(2 * dx)) * 2 * dx - dx + Length * (1-dx);
+// ^^^^......he he, lots of useless calculations......^^^^
+ r := vvar * (2 - dx * (System.Int((Length/dx + 1)/2) * 2 / Length + 1));
+
+ FPx^ := FPx^ + r * FTx^;
+ FPy^ := FPy^ + r * FTy^;
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationRings2.Create;
+begin
+ FVal := Random * 2;
+ old := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationRings2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationRings2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationRings2.GetName: string;
+begin
+ Result := 'rings2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRings2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'rings2_val';
+ 1: Result := 'rings2_old';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRings2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'rings2_val' then begin
+ FVal := Value;
+ Result := True;
+ end else if Name = 'rings2_old' then begin
+ if (Value < 0) then Value := 0;
+ if (Value > 1) then Value := 1;
+ old := Round(Value);
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRings2.GetNrVariables: integer;
+begin
+ Result := 2
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationRings2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'rings2_val' then begin
+ Value := FVal;
+ Result := True;
+ end else if Name = 'rings2_old' then begin
+ Value := old;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationRings2), true, false);
+end.
diff --git a/Variations/varScry.pas b/Variations/varScry.pas
new file mode 100644
index 0000000..cb696a9
--- /dev/null
+++ b/Variations/varScry.pas
@@ -0,0 +1,127 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varScry;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationScry = class(TBaseVariation)
+ private
+ v: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationScry.Prepare;
+begin
+ if (VVAR = 0) then
+ v := 1.0 / 1e-6
+ else v := 1.0 / vvar;
+end;
+
+procedure TVariationScry.CalcFunction;
+var t, r : double;
+begin
+ t := sqr(FTx^) + sqr(FTy^);
+ r := 1.0 / (sqrt(t) * (t + v));
+
+ FPx^ := FPx^ + FTx^ * r;
+ FPy^ := FPy^ + FTy^ * r;
+
+ FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationScry.Create;
+begin
+ v := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationScry.GetInstance: TBaseVariation;
+begin
+ Result := TVariationScry.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationScry.GetName: string;
+begin
+ Result := 'scry';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationScry.GetVariableNameAt(const Index: integer): string;
+begin
+ Result := '';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationScry.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+function TVariationScry.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationScry.GetNrVariables: integer;
+begin
+ Result := 0
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationScry.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationScry), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varSecant.pas b/Variations/varSecant.pas
new file mode 100644
index 0000000..f7f4a02
--- /dev/null
+++ b/Variations/varSecant.pas
@@ -0,0 +1,133 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varSecant;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationSecant = class(TBaseVariation)
+ private
+ old: byte;
+ procedure CalcSecant2;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationSecant }
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationSecant.Create;
+begin
+ old := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationSecant.GetCalcFunction(var f: TCalcFunction);
+begin
+ if old = 1 then f := CalcFunction
+ else f := CalcSecant2;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationSecant.CalcFunction;
+var
+ r: double;
+begin
+ r := sqrt(sqr(FTx^) + sqr(FTy^)) * vvar;
+ r := cos(r);
+ if (r = 0) then exit;
+ FPx^ := FPx^ + FTx^ * vvar;
+ FPy^ := FPy^ + 1 / r;
+end;
+
+procedure TVariationSecant.CalcSecant2;
+var
+ r: double;
+begin
+ r := sqrt(sqr(FTx^) + sqr(FTy^)) * vvar;
+ r := cos(r);
+ if (r = 0) then exit;
+ FPx^ := FPx^ + FTx^ * vvar;
+ if (r < 0) then
+ FPy^ := FPy^ + (1 / r + 1) * vvar
+ else
+ FPy^ := FPy^ + (1 / r - 1) * vvar;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSecant.GetInstance: TBaseVariation;
+begin
+ Result := TVariationSecant.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSecant.GetName: string;
+begin
+ Result := 'secant2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSecant.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'secant2_old';
+ else
+ Result := '';
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSecant.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'secant2_old' then
+ begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ old := Round(value);
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSecant.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSecant.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'secant2_old' then
+ begin
+ Value := old;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationSecant), false, false);
+end.
diff --git a/Variations/varSeparation.pas b/Variations/varSeparation.pas
new file mode 100644
index 0000000..9fb427e
--- /dev/null
+++ b/Variations/varSeparation.pas
@@ -0,0 +1,223 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varSeparation;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationSeparation = class(TBaseVariation)
+ private
+ separation_x, separation_y, separation_z: double;
+ separation_xinside, separation_yinside, separation_zinside: double;
+ sqx, sqy, sqz: double;
+ s3D: byte;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationSeparation.Prepare;
+begin
+ sqx := sqr(separation_x);
+ sqy := sqr(separation_y);
+ sqz := sqr(separation_z);
+end;
+
+/////////////////////////////////////////////
+procedure TVariationSeparation.CalcFunction;
+begin
+ if(FTx^ > 0.0) then
+ FPx^ := FPx^ + VVAR * (sqrt(sqr(FTx^) + sqx)- FTx^ * (separation_xinside))
+ else
+ FPx^ := FPx^ - VVAR * (sqrt(sqr(FTx^) + sqx)+ FTx^ * (separation_xinside));
+
+ if(FTy^ > 0.0) then
+ FPy^ := FPy^ + VVAR * (sqrt(sqr(FTy^) + sqy)- FTy^ * (separation_yinside))
+ else
+ FPy^ := FPy^ - VVAR * (sqrt(sqr(FTy^) + sqy)+ FTy^ * (separation_yinside));
+
+ if (s3D <> 0) then begin
+ if(FTz^ > 0.0) then
+ FPz^ := FPz^ + VVAR * (sqrt(sqr(FTz^) + sqz) - FTz^ * (separation_zinside))
+ else
+ FPz^ := FPz^ - VVAR * (sqrt(sqr(FTz^) + sqz) + FTz^ * (separation_zinside));
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationSeparation.Create;
+begin
+ separation_x := 1;
+ separation_y := 1;
+ separation_xinside := 0;
+ separation_yinside := 0;
+ separation_z := 0;
+ separation_zinside := 0;
+ s3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSeparation.GetInstance: TBaseVariation;
+begin
+ Result := TVariationSeparation.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSeparation.GetName: string;
+begin
+ Result := 'separation';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSeparation.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'separation_x';
+ 1: Result := 'separation_y';
+ 2: Result := 'separation_xinside';
+ 3: Result := 'separation_yinside';
+ 4: Result := 'separation_z';
+ 5: Result := 'separation_zinside';
+ 6: Result := 'separation_use3D';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSeparation.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'separation_x' then begin
+ separation_x := Value;
+ Result := True;
+ end else if Name = 'separation_y' then begin
+ separation_y := Value;
+ Result := True;
+ end else if Name = 'separation_xinside' then begin
+ separation_xinside := Value;
+ Result := True;
+ end else if Name = 'separation_yinside' then begin
+ separation_yinside := Value;
+ Result := True;
+ end else if Name = 'separation_z' then begin
+ separation_z := Value;
+ Result := True;
+ end else if Name = 'separation_zinside' then begin
+ separation_zinside := Value;
+ Result := True;
+ end else if Name = 'separation_use3D' then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ s3D := Round(Value);
+ Result := True;
+ end
+end;
+function TVariationSeparation.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'separation_x' then begin
+ separation_x := 1;
+ Result := True;
+ end else if Name = 'separation_y' then begin
+ separation_y := 1;
+ Result := True;
+ end else if Name = 'separation_xinside' then begin
+ separation_xinside := 0;
+ Result := True;
+ end else if Name = 'separation_yinside' then begin
+ separation_yinside := 0;
+ Result := True;
+ end else if Name = 'separation_z' then begin
+ separation_z := 0;
+ Result := True;
+ end else if Name = 'separation_zinside' then begin
+ separation_zinside := 0;
+ Result := True;
+ end else if Name = 'separation_use3D' then begin
+ s3D := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSeparation.GetNrVariables: integer;
+begin
+ Result := 7
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSeparation.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'separation_x' then begin
+ Value := separation_x;
+ Result := True;
+ end else if Name = 'separation_y' then begin
+ Value := separation_y;
+ Result := True;
+ end else if Name = 'separation_xinside' then begin
+ Value := separation_xinside;
+ Result := True;
+ end else if Name = 'separation_yinside' then begin
+ Value := separation_yinside;
+ Result := True;
+ end else if Name = 'separation_z' then begin
+ Value := separation_z;
+ Result := True;
+ end else if Name = 'separation_zinside' then begin
+ Value := separation_zinside;
+ Result := True;
+ end else if Name = 'separation_use3D' then begin
+ Value := s3D;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationSeparation), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varSinusoidal.pas b/Variations/varSinusoidal.pas
new file mode 100644
index 0000000..fdbcb1a
--- /dev/null
+++ b/Variations/varSinusoidal.pas
@@ -0,0 +1,188 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varSinusoidal;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+ {$ifdef Apo7X64}
+{$else}
+ {$define _ASM_}
+{$endif}
+
+type
+ TVariationSinusoidal = class(TBaseVariation)
+ private
+ use3D: byte;
+ procedure CalcFlat;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationSinusoidal }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationSinusoidal.GetCalcFunction(var f: TCalcFunction);
+begin
+ if use3D = 0 then
+ f := CalcFlat
+ else f := CalcFunction;
+end;
+
+procedure TVariationSinusoidal.CalcFlat;
+{$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * sin(FTx^);
+ FPy^ := FPy^ + vvar * sin(FTy^);
+{$else}
+asm
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fsin
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 8] // FTy
+ fsin
+ fmulp
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+
+ fwait
+{$endif}
+end;
+
+procedure TVariationSinusoidal.CalcFunction;
+{$ifndef _ASM_}
+begin
+ FPx^ := FPx^ + vvar * sin(FTx^);
+ FPy^ := FPy^ + vvar * sin(FTy^);
+ FPz^ := FPz^ + vvar * sin(FTz^); // AV: changed from linear scale
+{$else}
+asm // AV: added inline asm code
+ fld qword ptr [eax + vvar]
+ mov edx, [eax + FTx]
+ fld qword ptr [edx] // FTx
+ fsin
+ fmul st, st(1)
+ fadd qword ptr [edx + 16] // FPx
+ fstp qword ptr [edx + 16]
+
+ fld qword ptr [edx + 8] // FTy
+ fsin
+ fmul st, st(1)
+ fadd qword ptr [edx + 24] // FPy
+ fstp qword ptr [edx + 24]
+
+ fld qword ptr [edx + 32] // FTz
+ fsin
+ fmulp
+ fadd qword ptr [edx + 40] // FPz
+ fstp qword ptr [edx + 40]
+
+ fwait
+{$endif}
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationSinusoidal.Create;
+begin
+ use3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSinusoidal.GetInstance: TBaseVariation;
+begin
+ Result := TVariationSinusoidal.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSinusoidal.GetName: string;
+begin
+ Result := 'sinusoidal';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSinusoidal.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := 'sinusoidal_use3D';
+ else
+ Result := '';
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSinusoidal.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'sinusoidal_use3D' then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ use3D := Round(Value);
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSinusoidal.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSinusoidal.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'sinusoidal_use3D' then begin
+ Value := use3D;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationSinusoidal), true, false);
+end.
diff --git a/Variations/varSphereCrop.pas b/Variations/varSphereCrop.pas
new file mode 100644
index 0000000..8f0d02a
--- /dev/null
+++ b/Variations/varSphereCrop.pas
@@ -0,0 +1,328 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varSphereCrop;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationSphereCrop = class(TBaseVariation)
+
+ const
+ sx : string = 'spherecrop_x';
+ sy : string = 'spherecrop_y';
+ sz : string = 'spherecrop_z';
+ sradius : string = 'spherecrop_radius';
+ szero : string = 'spherecrop_zero';
+ sarea : string = 'spherecrop_scatter_area';
+ smode: string = 'spherecrop_mode';
+ private
+ x0, y0, z0, radius, scatter_area, ca: double;
+ zero, mode: byte;
+
+ procedure CalcPre;
+ procedure CalcPost;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+
+implementation
+uses
+ Math;
+
+{ TVariationSphereCrop }
+
+//////////////////////////////////////////
+
+procedure TVariationSphereCrop.Prepare;
+begin
+ ca := max(-1.0, min(scatter_area, 1.0));
+end;
+
+procedure TVariationSphereCrop.GetCalcFunction(var f: TCalcFunction);
+begin
+ case mode of
+ 0: f := CalcPre;
+ 1: f := CalcFunction;
+ else f := CalcPost;
+ end;
+end;
+
+procedure TVariationSphereCrop.CalcFunction;
+var
+ x, y, z, rad, rdc: double;
+ ang, phi, sn, cn, sz, cz: double;
+begin
+ x := FTx^ - x0;
+ y := FTy^ - y0;
+ z := FTz^ - z0;
+ rad := Math.Hypot(x, y, z);
+
+ if (rad > radius) then
+ begin
+ if (zero = 1) then
+ begin
+ FPx^ := FPx^;
+ FPy^ := FPy^;
+ FPz^ := FPz^;
+ end else
+ begin
+ ang := arctan2(y, x);
+ SinCos(ang, sn, cn);
+ phi := arcsin(z / rad);
+ SinCos(phi, sz, cz);
+ rdc := radius + (random * 0.5 * ca);
+
+ FPx^ := FPx^ + vvar * rdc * cn * cz + x0;
+ FPy^ := FPy^ + vvar * rdc * sn * cz + y0;
+ FPz^ := FPz^ + vvar * rdc * sz + z0;
+ end;
+ end else
+ begin
+ FPx^ := FPx^ + vvar * x + x0;
+ FPy^ := FPy^ + vvar * y + y0;
+ FPz^ := FPz^ + vvar * z + z0;
+ end;
+end;
+
+procedure TVariationSphereCrop.CalcPost;
+var
+ x, y, z, rad, rdc: double;
+ ang, phi, sn, cn, sz, cz: double;
+begin
+ x := FPx^ - x0;
+ y := FPy^ - y0;
+ z := FPz^ - z0;
+ rad := Math.Hypot(x, y, z);
+
+ if (rad > radius) then
+ begin
+ if (zero = 1) then
+ begin
+ FPx^ := 0;
+ FPy^ := 0;
+ FPz^ := 0;
+ end else
+ begin
+ ang := arctan2(y, x);
+ SinCos(ang, sn, cn);
+ phi := arcsin(z / rad);
+ SinCos(phi, sz, cz);
+ rdc := radius + (random * 0.5 * ca);
+
+ FPx^ := vvar * rdc * cn * cz + x0;
+ FPy^ := vvar * rdc * sn * cz + y0;
+ FPz^ := vvar * rdc * sz + z0;
+ end;
+ end else
+ begin
+ FPx^ := vvar * x + x0;
+ FPy^ := vvar * y + y0;
+ FPz^ := vvar * z + z0;
+ end;
+end;
+
+procedure TVariationSphereCrop.CalcPre;
+var
+ x, y, z, rad, rdc: double;
+ ang, phi, sn, cn, sz, cz: double;
+begin
+ x := FTx^ - x0;
+ y := FTy^ - y0;
+ z := FTz^ - z0;
+ rad := Math.Hypot(x, y, z);
+
+ if (rad > radius) then
+ begin
+ if (zero = 1) then
+ begin
+ FTx^ := 0;
+ FTy^ := 0;
+ FTz^ := 0;
+ end else
+ begin
+ ang := arctan2(y, x);
+ SinCos(ang, sn, cn);
+ phi := arcsin(z / rad);
+ SinCos(phi, sz, cz);
+ rdc := radius + (random * 0.5 * ca);
+
+ FTx^ := vvar * rdc * cn * cz + x0;
+ FTy^ := vvar * rdc * sn * cz + y0;
+ FTz^ := vvar * rdc * sz + z0;
+ end;
+ end else
+ begin
+ FTx^ := vvar * x + x0;
+ FTy^ := vvar * y + y0;
+ FTz^ := vvar * z + z0;
+ end;
+end;
+
+constructor TVariationSphereCrop.Create;
+begin
+ x0 := 0;
+ y0 := 0;
+ z0 := 0;
+ radius := 1;
+ scatter_area := 0;
+ zero := 0;
+ mode := 1;
+end;
+
+class function TVariationSphereCrop.GetInstance: TBaseVariation;
+begin
+ Result := TVariationSphereCrop.Create;
+end;
+
+class function TVariationSphereCrop.GetName: string;
+begin
+ Result := 'spherecrop';
+end;
+
+function TVariationSphereCrop.GetNrVariables: integer;
+begin
+ Result := 7;
+end;
+
+function TVariationSphereCrop.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = sx then begin
+ Value := x0;
+ Result := True;
+ end
+ else if Name = sy then begin
+ Value := y0;
+ Result := True;
+ end
+ else if Name = sz then begin
+ Value := z0;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ Value := radius;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ Value := scatter_area;
+ Result := True;
+ end
+ else if Name = szero then begin
+ Value := zero;
+ Result := True;
+ end
+ else if Name = smode then begin
+ Value := mode;
+ Result := True;
+ end;
+end;
+
+function TVariationSphereCrop.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := sradius;
+ 1: Result := sx;
+ 2: Result := sy;
+ 3: Result := sz;
+ 4: Result := sarea;
+ 5: Result := szero;
+ 6: Result := smode;
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationSphereCrop.ResetVariable(const Name: string): boolean;
+begin
+Result := False;
+ if Name = sx then begin
+ x0 := 0;
+ Result := True;
+ end
+ else if Name = sy then begin
+ y0 := 0;
+ Result := True;
+ end
+ else if Name = sz then begin
+ z0 := 0;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ radius := 1;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ scatter_area := 0;
+ Result := True;
+ end
+ else if Name = szero then begin
+ zero := 0;
+ Result := True;
+ end
+ else if Name = smode then begin
+ mode := 1;
+ Result := True;
+ end;
+end;
+
+function TVariationSphereCrop.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+Result := False;
+ if Name = sx then begin
+ x0 := Value;
+ Result := True;
+ end
+ else if Name = sy then begin
+ y0 := Value;
+ Result := True;
+ end
+ else if Name = sz then begin
+ z0 := Value;
+ Result := True;
+ end
+ else if Name = sradius then begin
+ radius := Value;
+ Result := True;
+ end
+ else if Name = sarea then begin
+ scatter_area := Value;
+ Result := True;
+ end
+ else if Name = szero then begin
+ if Value < 0 then Value := 0;
+ if Value > 1 then Value := 1;
+ zero := Round(Value);
+ Result := True;
+ end
+ else if Name = smode then begin
+ if Value < 0 then Value := 0;
+ if Value > 2 then Value := 2;
+ mode := Round(Value);
+ Result := True;
+ end;
+end;
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationSphereCrop), true, false);
+
+end.
diff --git a/Variations/varSphyp3D.pas b/Variations/varSphyp3D.pas
new file mode 100644
index 0000000..bdb63e3
--- /dev/null
+++ b/Variations/varSphyp3D.pas
@@ -0,0 +1,263 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varSphyp3D;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+const
+ ssx = 'sphyp3D_stretchX';
+ ssy = 'sphyp3D_stretchY';
+ ssz = 'sphyp3D_stretchZ';
+ szon = 'sphyp3D_zOn';
+
+ EPS: double = 1E-100;
+
+type
+ TVariationSphyp3D = class(TBaseVariation)
+ private
+ sx, sy, sz: double;
+ zon: byte;
+
+ procedure CalcLinear;
+ procedure CalcSpherical;
+ procedure CalcHyperbolicX;
+ procedure CalcHyperbolicY;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationSphyp3D }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationSphyp3D.GetCalcFunction(var f: TCalcFunction);
+begin
+ if (sx = 1) and (sy = 1) and (sz = 1) then f := CalcSpherical
+ else if (sx = 0) and (sy = 0) and (sz = 0) then f := CalcLinear
+ else if (sx = 1) and (sy = 0) then f := CalcHyperbolicX
+ else if (sx = 0) and (sy = 1) then f := CalcHyperbolicY
+ else f := CalcFunction;
+end;
+
+//////////////////////////////////////////
+procedure TVariationSphyp3D.CalcFunction;
+var t, rx, ry, rz: double;
+begin
+ t := sqr(FTx^) + sqr(FTy^) + sqr(FTz^) + EPS;
+
+ rx := vvar * power(t, -sx);
+ ry := vvar * power(t, -sy);
+
+ FPx^ := FPx^ + FTx^ * rx;
+ FPy^ := FPy^ + FTy^ * ry;
+ // Optional 3D calculation
+ if (zon = 1) then begin
+ rz := vvar * power(t, -sz);
+ FPz^ := FPz^ + FTz^ * rz;
+ end;
+end;
+
+//////////////////////////////////////////
+procedure TVariationSphyp3D.CalcHyperbolicX;
+var t, r: double;
+begin
+ t := sqr(FTx^) + sqr(FTy^) + sqr(FTz^) + EPS;
+ r := vvar / t;
+
+ FPx^ := FPx^ + FTx^ * r;
+ FPy^ := FPy^ + FTy^ * vvar;
+ // Optional 3D calculation
+ if (zon = 1) then begin
+ r := vvar * power(t, -sz);
+ FPz^ := FPz^ + FTz^ * r;
+ end;
+end;
+//////////////////////////////////////////
+procedure TVariationSphyp3D.CalcHyperbolicY;
+var t, r: double;
+begin
+ t := sqr(FTx^) + sqr(FTy^) + sqr(FTz^) + EPS;
+ r := vvar / t;
+
+ FPx^ := FPx^ + FTx^ * vvar;
+ FPy^ := FPy^ + FTy^ * r;
+ // Optional 3D calculation
+ if (zon = 1) then begin
+ r := vvar * power(t, -sz);
+ FPz^ := FPz^ + FTz^ * r;
+ end;
+end;
+//////////////////////////////////////////
+procedure TVariationSphyp3D.CalcSpherical; // default case
+var t: double;
+begin
+ t := sqr(FTx^) + sqr(FTy^) + sqr(FTz^) + EPS;
+ t := vvar / t;
+
+ FPx^ := FPx^ + FTx^ * t;
+ FPy^ := FPy^ + FTy^ * t;
+ // Optional 3D calculation
+ if (zon = 1) then
+ FPz^ := FPz^ + FTz^ * t;
+
+end;
+
+//////////////////////////////////////////
+procedure TVariationSphyp3D.CalcLinear;
+begin
+
+ FPx^ := FPx^ + FTx^ * vvar;
+ FPy^ := FPy^ + FTy^ * vvar;
+ // Optional 3D calculation
+ if (zon = 1) then
+ FPz^ := FPz^ + FTz^ * vvar;
+end;
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationSphyp3D.Create;
+begin
+ sx := 1;
+ sy := 1;
+ sz := 1;
+ zon := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSphyp3D.GetInstance: TBaseVariation;
+begin
+ Result := TVariationSphyp3D.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSphyp3D.GetName: string;
+begin
+ Result := 'sphyp3D';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSphyp3D.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := ssx;
+ 1: Result := ssy;
+ 2: Result := ssz;
+ 3: Result := szon;
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSphyp3D.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = ssx then begin
+ sx := Value;
+ Result := True;
+ end
+ else if Name = ssy then begin
+ sy := value;
+ Result := True;
+ end else if Name = ssz then begin
+ sz := value;
+ Result := True;
+ end else if Name = szon then begin
+ if (Value > 1) then Value := 1;
+ if (Value < 0) then Value := 0;
+ zon := Round(Value);
+ Result := True;
+ end;
+end;
+
+function TVariationSphyp3D.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = ssx then begin
+ sx := 1;
+ Result := True;
+ end
+ else if Name = ssy then begin
+ sy := 1;
+ Result := True;
+ end else if Name = ssz then begin
+ sz := 1;
+ Result := True;
+ end else if Name = szon then begin
+ zon := IfThen(zon = 0, 1, 0);
+ Result := True;
+ end;
+end;
+
+/////////////////////////////////////////////////////////////////////
+
+function TVariationSphyp3D.GetNrVariables: integer;
+begin
+ Result := 4;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSphyp3D.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = ssx then begin
+ Value := sx;
+ Result := true;
+ end
+ else if Name = ssy then begin
+ Value := sy;
+ Result := true;
+ end else if Name = ssz then begin
+ Value := sz;
+ Result := true;
+ end else if Name = szon then begin
+ Value := zon;
+ Result := true;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationSphyp3D), true, false);
+end.
+
diff --git a/Variations/varSplits.pas b/Variations/varSplits.pas
new file mode 100644
index 0000000..40ee8a4
--- /dev/null
+++ b/Variations/varSplits.pas
@@ -0,0 +1,163 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varSplits;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationSplits = class(TBaseVariation)
+ private
+ splits_x, splits_y, splits_z: double;
+ splits_use3D: byte;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationSplits.CalcFunction;
+begin
+ if(FTx^ >= 0.0) then
+ FPx^ := FPx^ + VVAR * (FTx^ + splits_x)
+ else
+ FPx^ := FPx^ + VVAR * (FTx^ - splits_x);
+
+ if(FTy^ >= 0.0) then
+ FPy^ := FPy^ + VVAR * (FTy^ + splits_y)
+ else
+ FPy^ := FPy^ + VVAR * (FTy^ - splits_y);
+
+ if (splits_use3D <> 0) then
+ begin
+ if(FTz^ >= 0.0) then
+ FPz^ := FPz^ + VVAR * (FTz^ + splits_z)
+ else
+ FPz^ := FPz^ + VVAR * (FTz^ - splits_z);
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationSplits.Create;
+begin
+ splits_x := 0;
+ splits_y := 0;
+ splits_z := 0;
+ splits_use3D := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSplits.GetInstance: TBaseVariation;
+begin
+ Result := TVariationSplits.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSplits.GetName: string;
+begin
+ Result := 'splits';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSplits.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'splits_x';
+ 1: Result := 'splits_y';
+ 2: Result := 'splits_z';
+ 3: Result := 'splits_use3D';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSplits.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'splits_x' then begin
+ splits_x := Value;
+ Result := True;
+ end else if Name = 'splits_y' then begin
+ splits_y := Value;
+ Result := True;
+ end else if Name = 'splits_z' then begin
+ splits_z := Value;
+ Result := True;
+ end else if Name = 'splits_use3D' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ splits_use3D := Round(Value);
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSplits.GetNrVariables: integer;
+begin
+ Result := 4
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSplits.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'splits_x' then begin
+ Value := splits_x;
+ Result := True;
+ end else if Name = 'splits_y' then begin
+ Value := splits_y;
+ Result := True;
+ end else if Name = 'splits_z' then begin
+ Value := splits_z;
+ Result := True;
+ end else if Name = 'splits_use3D' then begin
+ Value := splits_use3D;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationSplits), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varSuperShape.pas b/Variations/varSuperShape.pas
new file mode 100644
index 0000000..1c6eb80
--- /dev/null
+++ b/Variations/varSuperShape.pas
@@ -0,0 +1,323 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varSuperShape;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationSuperShape = class(TBaseVariation)
+ private
+ m, n1, n2, n3, rnd, holes, pa, pb: double;
+ inv, p: double;
+
+ procedure CalcRnd;
+ public
+ constructor Create;
+
+ procedure Prepare; override;
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override; // AV: for speed
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationSuperShape }
+
+{ Optimized by Alice V. Koryagina }
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationSuperShape.Prepare; // AV: added some precalc
+begin
+ inv := 1.0 - rnd;
+ p := -1 / n1; // assert (n1 <> 0)
+end;
+
+procedure TVariationSuperShape.GetCalcFunction(var f: TCalcFunction);
+begin
+ if rnd < 1.0 then
+ f := CalcFunction
+ else
+ f := CalcRnd;
+end;
+
+procedure TVariationSuperShape.CalcFunction;
+var
+ r, theta : double;
+ t1, t2, dist: double;
+ t1a, t2a: double;
+begin
+(*
+ theta := 0; // AV: why?
+ if n1 = 0 then // AV: we can check it at startup
+ r := 0 // AV: why?
+ else begin
+ theta := ArcTan2(FTy^, FTx^);
+ SinCos((m * theta + pi)/4, t2, t1);
+
+ t1 := abs(t1);
+ t1 := power(t1, n2);
+
+ t2 := abs(t2);
+ t2 := power(t2, n3);
+
+ dist := power(t1 + t2, -1 / n1); // AV: we can precalc it
+
+ // AV: why do we we check this const value at every point?
+ if rnd < 1.0 then
+ r := (rnd * random + (1.0 - rnd) * sqrt(sqr(FTx^) + sqr(FTy^))- holes) * dist
+ else
+ r := (rnd * random - holes) * dist;
+ end;
+
+ if (r = 0) then // AV: useless assignments...
+ begin
+ FPx^ := FPx^;
+ FPy^ := FPy^;
+ end
+ else
+ begin
+ SinCos(theta, t2a, t1a);
+ FPx^ := FPx^ + vvar * r * t1a;
+ FPy^ := FPy^ + vvar * r * t2a;
+ end;
+*)
+
+ theta := ArcTan2(FTy^, FTx^);
+ SinCos((m * theta + pi)/4, t2, t1);
+
+ t1 := abs(t1 / pa); // AV: added missng super_shape_a
+ t1 := power(t1, n2);
+
+ t2 := abs(t2 / pb); // AV: added missng super_shape_b
+ t2 := power(t2, n3);
+
+ dist := power(t1 + t2, p);
+ r := (rnd * random + inv * sqrt(sqr(FTx^) + sqr(FTy^))- holes) * dist;
+
+ SinCos(theta, t2a, t1a);
+ FPx^ := FPx^ + vvar * r * t1a;
+ FPy^ := FPy^ + vvar * r * t2a;
+end;
+
+procedure TVariationSuperShape.CalcRnd; // AV
+var
+ r, theta : double;
+ t1, t2, dist: double;
+ t1a, t2a: double;
+begin
+ theta := ArcTan2(FTy^, FTx^);
+ SinCos((m * theta + pi)/4, t2, t1);
+
+ t1 := abs(t1 / pa);
+ t1 := power(t1, n2);
+
+ t2 := abs(t2 / pb);
+ t2 := power(t2, n3);
+
+ dist := power(t1 + t2, p);
+
+ r := (rnd * random - holes) * dist;
+
+ SinCos(theta, t2a, t1a);
+ FPx^ := FPx^ + vvar * r * t1a;
+ FPy^ := FPy^ + vvar * r * t2a;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationSuperShape.Create;
+begin
+ m := 5.0;
+ n1 := 2.0;
+ n2 := 0.3;
+ n3 := 0.3;
+ rnd := 0.0;
+ holes := 1.0;
+ pa := 1;
+ pb := 1;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSuperShape.GetInstance: TBaseVariation;
+begin
+ Result := TVariationSuperShape.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationSuperShape.GetName: string;
+begin
+ Result := 'super_shape';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSuperShape.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'super_shape_m';
+ 1: Result := 'super_shape_n1';
+ 2: Result := 'super_shape_n2';
+ 3: Result := 'super_shape_n3';
+ 4: Result := 'super_shape_rnd';
+ 5: Result := 'super_shape_holes';
+ 6: Result := 'super_shape_a';
+ 7: Result := 'super_shape_b';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSuperShape.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'super_shape_m' then begin
+ m := Value;
+ Result := True;
+ end else if Name = 'super_shape_n1' then begin
+ if abs(Value) < 1E-6 then Value := 1E-6; // AV: prevent useless checks
+ n1 := Value;
+ Result := True;
+ end
+ else if Name = 'super_shape_n2' then begin
+ n2 := Value;
+ Result := True;
+ end
+ else if Name = 'super_shape_n3' then begin
+ n3 := Value;
+ Result := True;
+ end
+ else if Name = 'super_shape_rnd' then begin
+ if Value > 1.0 then
+ rnd := 1.0
+ else if Value < 0.0 then
+ rnd := 0.0
+ else
+ rnd := Value;
+ Result := True;
+ end
+ else if Name = 'super_shape_holes' then begin
+ holes := Value;
+ Result := True;
+ end else if Name = 'super_shape_a' then begin
+ if abs(Value) < 1E-4 then Value := 1E-4;
+ pa := Value;
+ Result := True;
+ end else if Name = 'super_shape_b' then begin
+ if abs(Value) < 1E-4 then Value := 1E-4;
+ pb := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationSuperShape.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'super_shape_m' then begin
+ m:= 5;
+ Result := True;
+ end else if Name = 'super_shape_n1' then begin
+ n1 := 2;
+ Result := True;
+ end else if Name = 'super_shape_n2' then begin
+ n2 := 0.3;
+ Result := True;
+ end else if Name = 'super_shape_n3' then begin
+ n3 := 0.3;
+ Result := True;
+ end else if Name = 'super_shape_rnd' then begin
+ rnd := 0;
+ Result := True;
+ end else if Name = 'super_shape_holes' then begin
+ holes := 1;
+ Result := True;
+ end else if Name = 'super_shape_a' then begin
+ pa := 1;
+ Result := True;
+ end else if Name = 'super_shape_b' then begin
+ pb := 1;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSuperShape.GetNrVariables: integer;
+begin
+ Result := 8;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationSuperShape.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'super_shape_m' then begin
+ Value := m;
+ Result := True;
+ end else if Name = 'super_shape_n1' then begin
+ Value := n1;
+ Result := True;
+ end
+ else if Name = 'super_shape_n2' then begin
+ Value := n2;
+ Result := True;
+ end
+ else if Name = 'super_shape_n3' then begin
+ Value := n3;
+ Result := True;
+ end
+ else if Name = 'super_shape_rnd' then begin
+ Value := rnd;
+ Result := True;
+ end
+ else if Name = 'super_shape_holes' then begin
+ Value := holes;
+ Result := True;
+ end else if Name = 'super_shape_a' then begin
+ Value := pa;
+ Result := True;
+ end else if Name = 'super_shape_b' then begin
+ Value := pb;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationSuperShape), false, false);
+end.
diff --git a/Variations/varTangent.pas b/Variations/varTangent.pas
new file mode 100644
index 0000000..82f4b7c
--- /dev/null
+++ b/Variations/varTangent.pas
@@ -0,0 +1,62 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varTangent;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationTangent = class(TBaseVariation)
+ private
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+
+procedure TVariationTangent.CalcFunction;
+var
+ sx, cx, sy, cy: double;
+begin
+ SinCos(FTx^, sx, cx);
+ SinCos(FTy^, sy, cy);
+ if cx = 0 then cx := 1e-20;
+ if cy = 0 then cy := 1e-20;
+ FPx^ := FPx^ + vvar * sx / cy;
+ FPy^ := FPy^ + vvar * sy / cy;
+ // AV: added real 3D support
+ FPz^ := FPz^ + vvar * sx / cx;
+end;
+
+constructor TVariationTangent.Create;
+begin
+ inherited Create;
+end;
+
+class function TVariationTangent.GetInstance: TBaseVariation;
+begin
+ Result := TVariationTangent.Create;
+end;
+
+class function TVariationTangent.GetName: string;
+begin
+ Result := 'tangent';
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationTangent), true, false);
+
+end.
diff --git a/Variations/varTanhSpiral.pas b/Variations/varTanhSpiral.pas
new file mode 100644
index 0000000..c7be793
--- /dev/null
+++ b/Variations/varTanhSpiral.pas
@@ -0,0 +1,117 @@
+{
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+ "Chaotica" Copyright (C) 2019 Glare Technologies Limited
+}
+
+unit varTanhSpiral;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationTanhSpiral = class(TBaseVariation)
+ private
+ ta: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+
+procedure TVariationTanhSpiral.CalcFunction;
+var
+ t, aux, sn, cn, snh, cnh: double;
+begin
+ t := (random - 0.5) * 6.28318530717959;
+
+ SinCos(ta * t, sn, cn);
+ SinhCosh(t, snh, cnh);
+
+ aux := (cn + cnh);
+ if aux = 0 then aux := 1e-20;
+ aux := vvar / aux;
+
+ FPx^ := FPx^ + snh * aux;
+ FPy^ := FPy^ + sn * aux;
+end;
+
+constructor TVariationTanhSpiral.Create;
+begin
+ inherited Create;
+ ta := 4;
+end;
+
+class function TVariationTanhSpiral.GetInstance: TBaseVariation;
+begin
+ Result := TVariationTanhSpiral.Create;
+end;
+
+class function TVariationTanhSpiral.GetName: string;
+begin
+ Result := 'tanh_spiral';
+end;
+
+function TVariationTanhSpiral.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+function TVariationTanhSpiral.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'tanh_spiral_a';
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationTanhSpiral.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'tanh_spiral_a' then begin
+ Value := ta;
+ Result := True;
+ end;
+end;
+
+function TVariationTanhSpiral.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'tanh_spiral_a' then begin
+ ta := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationTanhSpiral.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'tanh_spiral_a' then begin
+ ta := 4;
+ Result := True;
+ end;
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationTanhSpiral), false, false);
+
+end.
diff --git a/Variations/varTaurus.pas b/Variations/varTaurus.pas
new file mode 100644
index 0000000..2a4985f
--- /dev/null
+++ b/Variations/varTaurus.pas
@@ -0,0 +1,179 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varTaurus;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationTaurus = class(TBaseVariation)
+ private
+ r, n, inv, sor: double;
+ invr, inv1, sor1: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+
+ procedure CalcFunction; override;
+ procedure Prepare; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationTaurus.Prepare;
+begin
+ invr := inv * r;
+ inv1 := (1 - inv) * r;
+ sor1 := 1 - sor;
+end;
+
+procedure TVariationTaurus.CalcFunction;
+var
+ sx, cx, sy, cy, ir: double;
+begin
+ SinCos(FTx^, sx, cx);
+ SinCos(FTy^, sy, cy);
+ ir := invr + inv1 * cos(n * FTx^);
+
+ FPx^ := FPx^ + VVAR * (cx * (ir + sy));
+ FPy^ := FPy^ + VVAR * (sx * (ir + sy));
+ FPz^ := FPz^ + VVAR * (sor * cy) + (sor1 * FTy^);
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationTaurus.Create;
+begin
+ r := 3;
+ n := 5;
+ inv := 0;
+ sor := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationTaurus.GetInstance: TBaseVariation;
+begin
+ Result := TVariationTaurus.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationTaurus.GetName: string;
+begin
+ Result := 'taurus';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationTaurus.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'taurus_r';
+ 1: Result := 'taurus_n';
+ 2: Result := 'taurus_inv';
+ 3: Result := 'taurus_sor';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationTaurus.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'taurus_r' then begin
+ r := Value;
+ Result := True;
+ end else if Name = 'taurus_n' then begin
+ n := Value;
+ Result := True;
+ end else if Name = 'taurus_inv' then begin
+ inv := Value;
+ Result := True;
+ end else if Name = 'taurus_sor' then begin
+ sor := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationTaurus.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'taurus_r' then begin
+ r := 3;
+ Result := True;
+ end else if Name = 'taurus_n' then begin
+ n := 5;
+ Result := True;
+ end else if Name = 'taurus_inv' then begin
+ inv := 0;
+ Result := True;
+ end else if Name = 'taurus_sor' then begin
+ sor := IfThen(sor = 0, 1, 0);
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationTaurus.GetNrVariables: integer;
+begin
+ Result := 4;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationTaurus.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'taurus_r' then begin
+ Value := r;
+ Result := True;
+ end else if Name = 'taurus_n' then begin
+ Value := n;
+ Result := True;
+ end else if Name = 'taurus_inv' then begin
+ Value := inv;
+ Result := True;
+ end else if Name = 'taurus_sor' then begin
+ Value := sor;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationTaurus), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varTriangleCrop.pas b/Variations/varTriangleCrop.pas
new file mode 100644
index 0000000..3c73a98
--- /dev/null
+++ b/Variations/varTriangleCrop.pas
@@ -0,0 +1,311 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varTriangleCrop;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationTriangleCrop = class(TBaseVariation)
+ private
+ alpha, beta, Cx, Cy, Ax, Ay: double;
+ mode, zero: byte;
+ function IsP_Inside(Cx, Cy, Px, Py: double): boolean;
+ procedure CalcPre;
+ procedure CalcPost;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ procedure GetCalcFunction(var f: TCalcFunction); override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+{ TVariationTriangleCrop }
+
+///////////////////////////////////////////////////////////////////////////////
+
+procedure TVariationTriangleCrop.Prepare;
+var
+ side, gamma, sa, ca: double;
+begin
+ gamma := (180 - alpha - beta) * pi / 180;
+ side := sin(beta * pi / 180) / sin(gamma);
+ SinCos(alpha * pi / 180, sa, ca);
+ Cx := side * ca;
+ Cy := -side * sa;
+end;
+
+procedure TVariationTriangleCrop.GetCalcFunction(var f: TCalcFunction);
+begin
+ case mode of
+ 0: f := CalcPre;
+ 1: f := CalcFunction;
+ else f := CalcPost;
+ end;
+end;
+
+function TVariationTriangleCrop.IsP_Inside(Cx, Cy, Px, Py: double): boolean;
+var
+ m, n : double;
+begin
+ Result := False;
+
+ m := Py / Cy;
+ if (m >= 0) and (m <= 1) then
+ begin
+ n := Px - m * Cx;
+ if (n >= 0) and ((m + n) <= 1) then
+ Result := True;
+ end;
+end;
+
+procedure TVariationTriangleCrop.CalcPre;
+var x, y, k: double;
+begin
+ x := FTx^ - Ax;
+ y := FTy^ + Ay;
+
+ if not IsP_Inside(Cx, Cy, x, y) then
+ begin
+ if (zero = 1) then
+ begin
+ x := 0; y := 0; // put the point into origin
+ end
+ else begin // put it on triangle's edge
+ k := random;
+ if (random(2) = 1) then
+ begin
+ x := k * Cx + random(2)*(1 - k);
+ y := k * Cy;
+ end else
+ begin
+ x := random(2)* k;
+ y := 0;
+ end;
+ end;
+ end;
+
+ FTx^ := vvar * x + Ax;
+ FTy^ := vvar * y - Ay;
+end;
+
+procedure TVariationTriangleCrop.CalcFunction;
+var x, y, k: double;
+begin
+ x := FTx^ - Ax;
+ y := FTy^ + Ay;
+
+ if not IsP_Inside(Cx, Cy, x, y) then
+ begin
+ if (zero = 1) then
+ begin
+ x := 0; y := 0; // put the point into origin
+ end
+ else begin // put it on triangle's edge
+ k := random;
+ if (random(2) = 1) then
+ begin
+ x := k * Cx + random(2)*(1 - k);
+ y := k * Cy;
+ end else
+ begin
+ x := random(2)* k;
+ y := 0;
+ end;
+ end;
+ end;
+
+ FPx^ := FPx^ + vvar * x + Ax;
+ FPy^ := FPy^ + vvar * y - Ay;
+end;
+
+procedure TVariationTriangleCrop.CalcPost;
+var x, y, k: double;
+begin
+ x := FPx^ - Ax;
+ y := FPy^ + Ay;
+
+ if not IsP_Inside(Cx, Cy, x, y) then
+ begin
+ if (zero = 1) then
+ begin
+ x := 0; y := 0; // put the point into origin
+ end
+ else begin // put it on triangle's edge
+ k := random;
+ if (random(2) = 1) then
+ begin
+ x := k * Cx + random(2)*(1 - k);
+ y := k * Cy;
+ end else
+ begin
+ x := random(2)* k;
+ y := 0;
+ end;
+ end;
+ end;
+
+ FPx^ := vvar * x + Ax;
+ FPy^ := vvar * y - Ay;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationTriangleCrop.Create;
+begin
+ alpha := 60;
+ beta := 60;
+ mode := 1;
+ zero := 0;
+ Ax := 0;
+ Ay := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationTriangleCrop.GetInstance: TBaseVariation;
+begin
+ Result := TVariationTriangleCrop.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationTriangleCrop.GetName: string;
+begin
+ Result := 'trianglecrop';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationTriangleCrop.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'trianglecrop_alpha';
+ 1: Result := 'trianglecrop_beta';
+ 2: Result := 'trianglecrop_Ax';
+ 3: Result := 'trianglecrop_Ay';
+ 4: Result := 'trianglecrop_zero_edges';
+ 5: Result := 'trianglecrop_mode';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationTriangleCrop.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'trianglecrop_alpha' then begin
+ if (value < 1) then Value := 1;
+ if (value > (179 - beta)) then Value := 179 - beta;
+ alpha := Value;
+ Result := True;
+ end else if Name = 'trianglecrop_beta' then begin
+ if (value < 1) then Value := 1;
+ if (value > (179 - alpha)) then Value := 179 - alpha;
+ beta := Value;
+ Result := True;
+ end
+ else if Name = 'trianglecrop_mode' then begin
+ if (value < 0) then Value := 0;
+ if (value > 2) then Value := 2;
+ mode := Round(Value);
+ Result := True;
+ end
+ else if Name = 'trianglecrop_zero_edges' then begin
+ if (value < 0) then Value := 0;
+ if (value > 1) then Value := 1;
+ zero := Round(Value);
+ Result := True;
+ end
+ else if Name = 'trianglecrop_Ax' then begin
+ Ax := Value;
+ Result := True;
+ end
+ else if Name = 'trianglecrop_Ay' then begin
+ Ay := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationTriangleCrop.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'trianglecrop_alpha' then
+ begin
+ alpha:= 60;
+ Result := True;
+ end else if Name = 'trianglecrop_beta' then
+ begin
+ beta := 60;
+ Result := True;
+ end else if Name = 'trianglecrop_mode' then
+ begin
+ mode := 1;
+ Result := True;
+ end else if Name = 'trianglecrop_zero_edges' then
+ begin
+ zero := IfThen(zero = 1, 0, 1);
+ Result := True;
+ end
+ else if Name = 'trianglecrop_Ax' then begin
+ Ax := 0;
+ Result := True;
+ end
+ else if Name = 'trianglecrop_Ay' then begin
+ Ay := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationTriangleCrop.GetNrVariables: integer;
+begin
+ Result := 6;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationTriangleCrop.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'trianglecrop_alpha' then begin
+ Value := alpha;
+ Result := True;
+ end else if Name = 'trianglecrop_beta' then begin
+ Value := beta;
+ Result := True;
+ end else if Name = 'trianglecrop_mode' then begin
+ Value := mode;
+ Result := True;
+ end else if Name = 'trianglecrop_zero_edges' then begin
+ Value := zero;
+ Result := True;
+ end
+ else if Name = 'trianglecrop_Ax' then begin
+ Value := Ax;
+ Result := True;
+ end
+ else if Name = 'trianglecrop_Ay' then begin
+ Value := Ay;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationTriangleCrop), false, false);
+end.
diff --git a/Variations/varTwinTrian.pas b/Variations/varTwinTrian.pas
new file mode 100644
index 0000000..48e12d8
--- /dev/null
+++ b/Variations/varTwinTrian.pas
@@ -0,0 +1,112 @@
+{ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina }
+
+unit varTwinTrian;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationTwinTrian = class(TBaseVariation)
+ private
+ angle: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+////////////////////////
+
+procedure TVariationTwinTrian.CalcFunction;
+var
+ r, diff, sinr, cosr: double;
+begin
+ r := sqrt(sqr(FTx^) + sqr(FTy^)) * vvar;
+ SinCos(r * random, sinr, cosr);
+ if sinr <> 0 then
+ diff := Math.Log10(sinr * sinr) + cosr
+ else
+ diff := -30;
+ r := vvar * FTx^;
+ FPx^ := FPx^ + r * diff;
+ FPy^ := FPy^ + r * (diff - sinr * angle);
+end;
+
+constructor TVariationTwinTrian.Create;
+begin
+ inherited Create;
+ angle := pi;
+end;
+
+class function TVariationTwinTrian.GetInstance: TBaseVariation;
+begin
+ Result := TVariationTwinTrian.Create;
+end;
+
+class function TVariationTwinTrian.GetName: string;
+begin
+ Result := 'twintrian';
+end;
+
+function TVariationTwinTrian.GetNrVariables: integer;
+begin
+ Result := 1;
+end;
+
+function TVariationTwinTrian.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'twintrian_angle';
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationTwinTrian.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'twintrian_angle' then begin
+ Value := angle;
+ Result := True;
+ end;
+end;
+
+function TVariationTwinTrian.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'twintrian_angle' then begin
+ angle := Value;
+ Result := True;
+ end;
+end;
+
+function TVariationTwinTrian.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'twintrian_angle' then begin
+ angle := pi;
+ Result := True;
+ end;
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationTwinTrian), false, false);
+
+end.
diff --git a/Variations/varUnpolar.pas b/Variations/varUnpolar.pas
new file mode 100644
index 0000000..9e21837
--- /dev/null
+++ b/Variations/varUnpolar.pas
@@ -0,0 +1,90 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varUnpolar;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationUnpolar = class(TBaseVariation)
+ private
+ vvar_pi: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationUnpolar.Prepare;
+begin
+ vvar_pi := vvar / pi * 0.5;
+end;
+
+procedure TVariationUnpolar.CalcFunction;
+var
+ r, sn, cn: double;
+begin
+ r := exp(FTy^);
+ sincos(FTx^, sn, cn);
+
+ FPx^ := FPx^ + vvar_pi * r * sn;
+ FPy^ := FPy^ + vvar_pi * r * cn;
+ // FPz^ := FPz^ + vvar * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationUnpolar.Create;
+begin
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationUnpolar.GetInstance: TBaseVariation;
+begin
+ Result := TVariationUnpolar.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationUnpolar.GetName: string;
+begin
+ Result := 'unpolar';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationUnpolar), false, false);
+end.
diff --git a/Variations/varWaves2.pas b/Variations/varWaves2.pas
new file mode 100644
index 0000000..fa74a64
--- /dev/null
+++ b/Variations/varWaves2.pas
@@ -0,0 +1,188 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varWaves2;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationWaves2 = class(TBaseVariation)
+ private
+ waves2_freqx, waves2_freqy, waves2_freqz: double;
+ waves2_scalex, waves2_scaley, waves2_scalez: double;
+
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationWaves2.Prepare;
+begin
+end;
+
+procedure TVariationWaves2.CalcFunction;
+begin
+ FPx^ := FPx^ + VVAR * (FTx^ + waves2_scalex * sin(FTy^ * waves2_freqx));
+ FPy^ := FPy^ + VVAR * (FTy^ + waves2_scaley * sin(FTx^ * waves2_freqy));
+ FPz^ := FPz^ + VVAR * (FTz^ + waves2_scalez * sin(sqrt(sqr(FTx^)+sqr(FTy^)) * waves2_freqz));
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationWaves2.Create;
+begin
+ waves2_freqx := 2; waves2_scalex := 1;
+ waves2_freqy := 2; waves2_scaley := 1;
+ waves2_freqz := 0; waves2_scalez := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationWaves2.GetInstance: TBaseVariation;
+begin
+ Result := TVariationWaves2.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationWaves2.GetName: string;
+begin
+ Result := 'waves2';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationWaves2.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'waves2_freqx';
+ 1: Result := 'waves2_freqy';
+ 2: Result := 'waves2_freqz';
+ 3: Result := 'waves2_scalex';
+ 4: Result := 'waves2_scaley';
+ 5: Result := 'waves2_scalez';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationWaves2.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'waves2_freqx' then begin
+ waves2_freqx := Value;
+ Result := True;
+ end else if Name = 'waves2_freqy' then begin
+ waves2_freqy := Value;
+ Result := True;
+ end else if Name = 'waves2_freqz' then begin
+ waves2_freqz := Value;
+ Result := True;
+ end else if Name = 'waves2_scalex' then begin
+ waves2_scalex := Value;
+ Result := True;
+ end else if Name = 'waves2_scaley' then begin
+ waves2_scaley := Value;
+ Result := True;
+ end else if Name = 'waves2_scalez' then begin
+ waves2_scalez := Value;
+ Result := True;
+ end
+end;
+function TVariationWaves2.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'waves2_freqx' then begin
+ waves2_freqx := 2;
+ Result := True;
+ end else if Name = 'waves2_freqy' then begin
+ waves2_freqy := 2;
+ Result := True;
+ end else if Name = 'waves2_freqz' then begin
+ waves2_freqz := 0;
+ Result := True;
+ end else if Name = 'waves2_scalex' then begin
+ waves2_scalex := 1;
+ Result := True;
+ end else if Name = 'waves2_scaley' then begin
+ waves2_scaley := 1;
+ Result := True;
+ end else if Name = 'waves2_scalez' then begin
+ waves2_scalez := 0;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationWaves2.GetNrVariables: integer;
+begin
+ Result := 6
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationWaves2.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'waves2_freqx' then begin
+ Value := waves2_freqx;
+ Result := True;
+ end else if Name = 'waves2_freqy' then begin
+ Value := waves2_freqy;
+ Result := True;
+ end else if Name = 'waves2_freqz' then begin
+ Value := waves2_freqz;
+ Result := True;
+ end else if Name = 'waves2_scalex' then begin
+ Value := waves2_scalex;
+ Result := True;
+ end else if Name = 'waves2_scaley' then begin
+ Value := waves2_scaley;
+ Result := True;
+ end else if Name = 'waves2_scalez' then begin
+ Value := waves2_scalez;
+ Result := True;
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationWaves2), true, false);
+end.
\ No newline at end of file
diff --git a/Variations/varWedge.pas b/Variations/varWedge.pas
new file mode 100644
index 0000000..0819e60
--- /dev/null
+++ b/Variations/varWedge.pas
@@ -0,0 +1,183 @@
+{
+ Apophysis Copyright (C) 2001-2004 Mark Townsend
+ Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
+ Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
+
+ Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
+ Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ You should have received a copy of the GNU General Public License
+ GNU General Public License for more details.
+
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+}
+
+unit varWedge;
+
+interface
+
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationWedge = class(TBaseVariation)
+ private
+ wedge_angle, wedge_hole, wedge_swirl: double;
+ wedge_count : integer;
+ C1_2PI, comp_fac: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+implementation
+
+uses
+ Math;
+
+///////////////////////////////////////////////////////////////////////////////
+procedure TVariationWedge.Prepare;
+begin
+ C1_2PI := 0.15915494309189533576888376337251;
+ comp_fac := 1.0 - wedge_angle * wedge_count * C1_2PI;
+end;
+procedure TVariationWedge.CalcFunction;
+var
+ r, a, cosa, sina: double;
+ c: integer;
+begin
+
+ r := sqrt(sqr(FTx^) + sqr(FTy^));
+ a := ArcTan2(FTy^, FTx^) + wedge_swirl * r;
+ c := floor((wedge_count * a + PI) * C1_2PI);
+ a := a * comp_fac + c * wedge_angle;
+ SinCos(a, sina, cosa);
+
+ r := vvar * (r + wedge_hole);
+ FPx^ := FPx^ + r * cosa;
+ FPy^ := FPy^ + r * sina;
+ FPz^ := FPz^ + VVAR * FTz^;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+constructor TVariationWedge.Create;
+begin
+ wedge_angle := PI / 2.0;
+ wedge_hole := 0;
+ wedge_count := 2;
+ wedge_swirl := 0;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationWedge.GetInstance: TBaseVariation;
+begin
+ Result := TVariationWedge.Create;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+class function TVariationWedge.GetName: string;
+begin
+ Result := 'wedge';
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationWedge.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index Of
+ 0: Result := 'wedge_angle';
+ 1: Result := 'wedge_hole';
+ 2: Result := 'wedge_count';
+ 3: Result := 'wedge_swirl';
+ else
+ Result := '';
+ end
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationWedge.SetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'wedge_angle' then begin
+ wedge_angle := Value;
+ Result := True;
+ end else if Name = 'wedge_hole' then begin
+ wedge_hole := Value;
+ Result := True;
+ end else if Name = 'wedge_count' then begin
+ if (Value < 1) then Value := 1;
+ Value := Round(value);
+ wedge_count := Round(Value);
+ Result := True;
+ end else if Name = 'wedge_swirl' then begin
+ wedge_swirl := Value;
+ Result := True;
+ end;
+end;
+function TVariationWedge.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'wedge_angle' then begin
+ wedge_angle := PI / 2;
+ Result := True;
+ end else if Name = 'wedge_hole' then begin
+ wedge_hole := 0;
+ Result := True;
+ end else if Name = 'wedge_count' then begin
+ wedge_count := 2;
+ Result := True;
+ end else if Name = 'wedge_swirl' then begin
+ wedge_swirl := 0;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationWedge.GetNrVariables: integer;
+begin
+ Result := 4
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+function TVariationWedge.GetVariable(const Name: string; var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'wedge_angle' then begin
+ Value := wedge_angle;
+ Result := True;
+ end else if Name = 'wedge_hole' then begin
+ Value := wedge_hole;
+ Result := True;
+ end else if Name = 'wedge_count' then begin
+ Value := wedge_count;
+ Result := True;
+ end else if Name = 'wedge_swirl' then begin
+ Value := wedge_swirl;
+ Result := True;
+ end;
+end;
+
+///////////////////////////////////////////////////////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationWedge), true, false);
+end.
diff --git a/Variations/varZVortex.pas b/Variations/varZVortex.pas
new file mode 100644
index 0000000..0c0ca26
--- /dev/null
+++ b/Variations/varZVortex.pas
@@ -0,0 +1,160 @@
+{
+ Apophysis AV "Phoenix Edition" Copyright (C) 2021 Alice V. Koryagina
+ Restored Z_ZVortex variation from Apophysis Cothe's plugin pack
+}
+
+unit varZVortex;
+
+interface
+uses
+ BaseVariation, XFormMan;
+
+type
+ TVariationZVortex = class(TBaseVariation)
+ private
+ sides: integer;
+ angle, spin: double;
+ sds2, ang2: double;
+ public
+ constructor Create;
+
+ class function GetName: string; override;
+ class function GetInstance: TBaseVariation; override;
+
+ function GetNrVariables: integer; override;
+ function GetVariableNameAt(const Index: integer): string; override;
+
+ function SetVariable(const Name: string; var value: double): boolean; override;
+ function GetVariable(const Name: string; var value: double): boolean; override;
+ function ResetVariable(const Name: string): boolean; override;
+
+ procedure Prepare; override;
+ procedure CalcFunction; override;
+ end;
+
+
+implementation
+
+uses
+ Math;
+////////////////////////
+procedure TVariationZVortex.Prepare;
+begin
+ sds2 := sides * 0.5 / pi;
+ ang2 := angle * 0.5 * pi;
+end;
+
+procedure TVariationZVortex.CalcFunction;
+var
+ r, phi, t, sn, cn, sn1, cn1: double;
+begin
+ r := Math.Hypot(FTx^, FTy^);
+ phi := arctan2(FTy^, FTx^);
+
+ if (r = 0) then r := 1E-300;
+ t := sds2 * phi + spin * Math.log2(r);
+ // AV: these Z+ variations with lost sources are drive me crazy:
+ // they are always use vvar in a non-linear way!
+ t := vvar * (t - floor(t)) / sds2;
+
+ sn := sin(ang2) * t + phi;
+ cn := cos(ang2) * t - 1;
+
+ SinCos(sn, sn1, cn1);
+
+ FPx^ := FPx^ + (r * cn1 + FTx^ * cn);
+ FPy^ := FPy^ + (r * sn1 + FTy^ * cn);
+end;
+
+constructor TVariationZVortex.Create;
+begin
+ sides := random(12) + 1;
+ angle := 2 * random - 1;
+ spin := 2 * random - 1;
+end;
+
+class function TVariationZVortex.GetInstance: TBaseVariation;
+begin
+ Result := TVariationZVortex.Create;
+end;
+
+class function TVariationZVortex.GetName: string;
+begin
+ Result := 'Z_vortex';
+end;
+
+function TVariationZVortex.GetNrVariables: integer;
+begin
+ Result := 3;
+end;
+
+function TVariationZVortex.GetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'Z_vortex_sides' then begin
+ value := sides;
+ Result := True;
+ end
+ else if Name = 'Z_vortex_angle' then begin
+ value := angle;
+ Result := True;
+ end
+ else if Name = 'Z_vortex_spin' then begin
+ value := spin;
+ Result := True;
+ end;
+end;
+
+function TVariationZVortex.GetVariableNameAt(const Index: integer): string;
+begin
+ case Index of
+ 0: Result := 'Z_vortex_sides';
+ 1: Result := 'Z_vortex_angle';
+ 2: Result := 'Z_vortex_spin';
+ else
+ Result := '';
+ end;
+end;
+
+function TVariationZVortex.SetVariable(const Name: string;
+ var value: double): boolean;
+begin
+ Result := False;
+ if Name = 'Z_vortex_sides' then begin
+ if Value = 0 then Value := 1;
+ sides := Round(value);
+ Result := True;
+ end
+ else if Name = 'Z_vortex_angle' then begin
+ angle := value;
+ Result := True;
+ end
+ else if Name = 'Z_vortex_spin' then begin
+ spin := value;
+ Result := True;
+ end;
+end;
+
+function TVariationZVortex.ResetVariable(const Name: string): boolean;
+begin
+ Result := False;
+ if Name = 'Z_vortex_sides' then begin
+ sides := 1;
+ Result := True;
+ end
+ else if Name = 'Z_vortex_angle' then begin
+ angle := 0;
+ Result := True;
+ end
+ else if Name = 'Z_vortex_spin' then begin
+ spin := 0;
+ Result := True;
+ end;
+end;
+
+//////////////////////////////
+initialization
+ RegisterVariation(TVariationClassLoader.Create(TVariationZVortex), false, false);
+
+end.